@keetanetwork/anchor 0.0.42 → 0.0.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/client/index.d.ts +6 -0
  2. package/client/index.d.ts.map +1 -1
  3. package/client/index.js +7 -0
  4. package/client/index.js.map +1 -1
  5. package/lib/certificates.js +2 -2
  6. package/lib/certificates.js.map +1 -1
  7. package/lib/resolver.d.ts +45 -3
  8. package/lib/resolver.d.ts.map +1 -1
  9. package/lib/resolver.js +908 -398
  10. package/lib/resolver.js.map +1 -1
  11. package/lib/utils/json.d.ts +4 -5
  12. package/lib/utils/json.d.ts.map +1 -1
  13. package/lib/utils/json.js +4 -163
  14. package/lib/utils/json.js.map +1 -1
  15. package/npm-shrinkwrap.json +5 -5
  16. package/package.json +2 -2
  17. package/services/asset-movement/client.d.ts +2 -5
  18. package/services/asset-movement/client.d.ts.map +1 -1
  19. package/services/asset-movement/client.js +1 -2
  20. package/services/asset-movement/client.js.map +1 -1
  21. package/services/asset-movement/common.d.ts +56 -82
  22. package/services/asset-movement/common.d.ts.map +1 -1
  23. package/services/asset-movement/common.js +18314 -8000
  24. package/services/asset-movement/common.js.map +1 -1
  25. package/services/asset-movement/lib/data/addresses/bank-account/card.d.ts +4 -0
  26. package/services/asset-movement/lib/data/addresses/bank-account/card.d.ts.map +1 -0
  27. package/services/asset-movement/lib/data/addresses/bank-account/card.js +34 -0
  28. package/services/asset-movement/lib/data/addresses/bank-account/card.js.map +1 -0
  29. package/services/asset-movement/lib/data/addresses/bank-account/clabe.d.ts +4 -0
  30. package/services/asset-movement/lib/data/addresses/bank-account/clabe.d.ts.map +1 -0
  31. package/services/asset-movement/lib/data/addresses/bank-account/clabe.js +22 -0
  32. package/services/asset-movement/lib/data/addresses/bank-account/clabe.js.map +1 -0
  33. package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.d.ts +4 -0
  34. package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.d.ts.map +1 -0
  35. package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.js +43 -0
  36. package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.js.map +1 -0
  37. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.d.ts +15 -0
  38. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.d.ts.map +1 -0
  39. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.js +16 -0
  40. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.js.map +1 -0
  41. package/services/asset-movement/lib/data/addresses/bank-account/interac.d.ts +4 -0
  42. package/services/asset-movement/lib/data/addresses/bank-account/interac.d.ts.map +1 -0
  43. package/services/asset-movement/lib/data/addresses/bank-account/interac.js +39 -0
  44. package/services/asset-movement/lib/data/addresses/bank-account/interac.js.map +1 -0
  45. package/services/asset-movement/lib/data/addresses/bank-account/pix.d.ts +4 -0
  46. package/services/asset-movement/lib/data/addresses/bank-account/pix.d.ts.map +1 -0
  47. package/services/asset-movement/lib/data/addresses/bank-account/pix.js +31 -0
  48. package/services/asset-movement/lib/data/addresses/bank-account/pix.js.map +1 -0
  49. package/services/asset-movement/lib/data/addresses/bank-account/us.d.ts +4 -0
  50. package/services/asset-movement/lib/data/addresses/bank-account/us.d.ts.map +1 -0
  51. package/services/asset-movement/lib/data/addresses/bank-account/us.js +37 -0
  52. package/services/asset-movement/lib/data/addresses/bank-account/us.js.map +1 -0
  53. package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.d.ts +4 -0
  54. package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.d.ts.map +1 -0
  55. package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.js +7 -0
  56. package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.js.map +1 -0
  57. package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.d.ts +4 -0
  58. package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.d.ts.map +1 -0
  59. package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.js +7 -0
  60. package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.js.map +1 -0
  61. package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.d.ts +4 -0
  62. package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.d.ts.map +1 -0
  63. package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.js +7 -0
  64. package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.js.map +1 -0
  65. package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.d.ts +4 -0
  66. package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.d.ts.map +1 -0
  67. package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.js +7 -0
  68. package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.js.map +1 -0
  69. package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.d.ts +27 -0
  70. package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.d.ts.map +1 -0
  71. package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.js +28 -0
  72. package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.js.map +1 -0
  73. package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.d.ts +4 -0
  74. package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.d.ts.map +1 -0
  75. package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.js +7 -0
  76. package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.js.map +1 -0
  77. package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.d.ts +4 -0
  78. package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.d.ts.map +1 -0
  79. package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.js +7 -0
  80. package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.js.map +1 -0
  81. package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.d.ts +4 -0
  82. package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.d.ts.map +1 -0
  83. package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.js +7 -0
  84. package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.js.map +1 -0
  85. package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.d.ts +4 -0
  86. package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.d.ts.map +1 -0
  87. package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.js +7 -0
  88. package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.js.map +1 -0
  89. package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.d.ts +4 -0
  90. package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.d.ts.map +1 -0
  91. package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.js +19 -0
  92. package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.js.map +1 -0
  93. package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.d.ts +4 -0
  94. package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.d.ts.map +1 -0
  95. package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.js +7 -0
  96. package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.js.map +1 -0
  97. package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.d.ts +4 -0
  98. package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.d.ts.map +1 -0
  99. package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.js +7 -0
  100. package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.js.map +1 -0
  101. package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.d.ts +4 -0
  102. package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.d.ts.map +1 -0
  103. package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.js +17 -0
  104. package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.js.map +1 -0
  105. package/services/asset-movement/lib/data/addresses/types.generated.d.ts +1590 -0
  106. package/services/asset-movement/lib/data/addresses/types.generated.d.ts.map +1 -0
  107. package/services/asset-movement/lib/data/addresses/types.generated.js +1895 -0
  108. package/services/asset-movement/lib/data/addresses/types.generated.js.map +1 -0
  109. package/services/asset-movement/lib/data/json-schema.d.ts +64 -0
  110. package/services/asset-movement/lib/data/json-schema.d.ts.map +1 -0
  111. package/services/asset-movement/lib/data/json-schema.js +2 -0
  112. package/services/asset-movement/lib/data/json-schema.js.map +1 -0
  113. package/services/asset-movement/lib/data/scripts/generator.d.ts +2 -0
  114. package/services/asset-movement/lib/data/scripts/generator.d.ts.map +1 -0
  115. package/services/asset-movement/lib/data/scripts/generator.js +140 -0
  116. package/services/asset-movement/lib/data/scripts/generator.js.map +1 -0
  117. package/services/asset-movement/lib/data/types.d.ts +23 -0
  118. package/services/asset-movement/lib/data/types.d.ts.map +1 -0
  119. package/services/asset-movement/lib/data/types.js +120 -0
  120. package/services/asset-movement/lib/data/types.js.map +1 -0
  121. package/services/asset-movement/lib/location.d.ts +11 -4
  122. package/services/asset-movement/lib/location.d.ts.map +1 -1
  123. package/services/asset-movement/lib/location.generated.d.ts +2 -1
  124. package/services/asset-movement/lib/location.generated.d.ts.map +1 -1
  125. package/services/asset-movement/lib/location.generated.js +15 -3
  126. package/services/asset-movement/lib/location.generated.js.map +1 -1
  127. package/services/asset-movement/lib/location.js +13 -1
  128. package/services/asset-movement/lib/location.js.map +1 -1
  129. package/services/fx/client.d.ts +17 -2
  130. package/services/fx/client.d.ts.map +1 -1
  131. package/services/fx/client.js +153 -76
  132. package/services/fx/client.js.map +1 -1
  133. package/services/fx/common.d.ts +11 -1
  134. package/services/fx/common.d.ts.map +1 -1
  135. package/services/fx/common.js +32 -10
  136. package/services/fx/common.js.map +1 -1
  137. package/services/fx/server.d.ts +37 -11
  138. package/services/fx/server.d.ts.map +1 -1
  139. package/services/fx/server.js +169 -92
  140. package/services/fx/server.js.map +1 -1
  141. package/services/notification/client.d.ts +78 -0
  142. package/services/notification/client.d.ts.map +1 -0
  143. package/services/notification/client.js +499 -0
  144. package/services/notification/client.js.map +1 -0
  145. package/services/notification/common.d.ts +179 -0
  146. package/services/notification/common.d.ts.map +1 -0
  147. package/services/notification/common.generated.d.ts +17 -0
  148. package/services/notification/common.generated.d.ts.map +1 -0
  149. package/services/notification/common.generated.js +733 -0
  150. package/services/notification/common.generated.js.map +1 -0
  151. package/services/notification/common.js +139 -0
  152. package/services/notification/common.js.map +1 -0
  153. package/services/notification/server.d.ts +39 -0
  154. package/services/notification/server.d.ts.map +1 -0
  155. package/services/notification/server.js +222 -0
  156. package/services/notification/server.js.map +1 -0
  157. package/services/storage/client.d.ts +11 -1
  158. package/services/storage/client.d.ts.map +1 -1
  159. package/services/storage/client.js +28 -6
  160. package/services/storage/client.js.map +1 -1
  161. package/services/storage/clients/contacts.d.ts.map +1 -1
  162. package/services/storage/clients/contacts.generated.js +1235 -338
  163. package/services/storage/clients/contacts.generated.js.map +1 -1
  164. package/services/storage/clients/contacts.js +2 -1
  165. package/services/storage/clients/contacts.js.map +1 -1
  166. package/services/storage/clients/icon.d.ts +29 -0
  167. package/services/storage/clients/icon.d.ts.map +1 -0
  168. package/services/storage/clients/icon.js +34 -0
  169. package/services/storage/clients/icon.js.map +1 -0
  170. package/services/storage/common.d.ts +14 -0
  171. package/services/storage/common.d.ts.map +1 -1
  172. package/services/storage/common.js.map +1 -1
  173. package/services/storage/test-utils.d.ts +15 -1
  174. package/services/storage/test-utils.d.ts.map +1 -1
  175. package/services/storage/test-utils.js +60 -0
  176. package/services/storage/test-utils.js.map +1 -1
  177. package/services/username/common.generated.js +38 -4
  178. package/services/username/common.generated.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/services/asset-movement/lib/data/types.ts"],"names":[],"mappings":"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","sourcesContent":["import { Country } from \"@keetanetwork/currency-info\";\nimport type { ObjectSchema, Schema } from \"./json-schema.js\";\n\nexport interface AccountAddressSchema {\n\ttype: 'bank-account' | 'mobile-wallet';\n\n\tincludeFields: {\n\t\taccountOwner?: boolean;\n\t\tbankName?: boolean;\n\t\taccountNumberEnding?: boolean;\n\t\tphoneNumber?: boolean;\n\t}\n\n\tadditionalProperties: {\n\t\tresolved?: ObjectSchema;\n\t\tobfuscated?: ObjectSchema;\n\t}\n}\n\nexport const sharedSchemaReferences: { [K in keyof typeof sharedJSONSchemaTypes]: { $ref: string }} = {\n\tISOCountryCode: { $ref: '#/definitions/ISOCountryCode' },\n\tPhysicalAddress: { $ref: '#/definitions/PhysicalAddress' },\n\tResolvedAccountOwner: { $ref: '#/definitions/ResolvedAccountOwner' },\n\tObfuscatedAccountOwner: { $ref: '#/definitions/ObfuscatedAccountOwner' },\n\tPhoneNumber: { $ref: '#/definitions/PhoneNumber' },\n\tPhoneNumberObjectExtends: { $ref: '#/definitions/PhoneNumberObjectExtends' },\n\tMonthYearDateInput: { $ref: '#/definitions/MonthYearDateInput' },\n\tCardType: { $ref: '#/definitions/CardType' }\n}\n\nexport const sharedJSONSchemaTypes: {\n\t[K in 'ISOCountryCode' | 'PhysicalAddress' | 'ResolvedAccountOwner' | 'ObfuscatedAccountOwner' | 'PhoneNumber' | 'PhoneNumberObjectExtends' | 'MonthYearDateInput' | 'CardType']: Schema;\n} = {\n\tResolvedAccountOwner: {\n\t\t$id: 'ResolvedAccountOwner',\n\t\toneOf: [\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\taccountOwner: {\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\ttype: { type: 'string', const: 'individual' },\n\t\t\t\t\t\t\tfirstName: { type: 'string' },\n\t\t\t\t\t\t\tlastName: { type: 'string' }\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequired: ['type', 'firstName', 'lastName']\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trequired: ['accountOwner']\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\taccountOwner: {\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\ttype: { type: 'string', const: 'business' },\n\t\t\t\t\t\t\tbusinessName: { type: 'string' }\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequired: ['type', 'businessName']\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trequired: ['accountOwner']\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\taccountOwner: {\n\t\t\t\t\t\ttype: 'object',\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\ttype: { type: 'string', const: 'unknown' },\n\t\t\t\t\t\t\tbeneficiaryName: { type: 'string' }\n\t\t\t\t\t\t},\n\t\t\t\t\t\trequired: ['type', 'beneficiaryName']\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\trequired: ['accountOwner']\n\t\t\t}\n\t\t]\n\t},\n\tObfuscatedAccountOwner: {\n\t\t$id: 'ObfuscatedAccountOwner',\n\t\ttype: 'object',\n\t\tproperties: {\n\t\t\taccountOwner: {\n\t\t\t\ttype: 'object',\n\t\t\t\tproperties: {\n\t\t\t\t\ttype: { type: 'string', enum: ['individual', 'business'] },\n\t\t\t\t\tname: { type: 'string' },\n\t\t\t\t\tbusinessName: { type: 'string' }\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trequired: ['accountOwner']\n\t},\n\tISOCountryCode: { $id: 'ISOCountryCode', type: \"string\", enum: Country.allCountryCodes },\n\tPhysicalAddress: {\n\t\t$id: 'PhysicalAddress',\n\t\ttype: \"object\",\n\t\tproperties: {\n\t\t\tline1: { type: \"string\" },\n\t\t\tline2: { type: \"string\" },\n\t\t\tcountry: sharedSchemaReferences.ISOCountryCode,\n\t\t\tpostalCode: { type: \"string\" },\n\t\t\tsubdivision: { type: \"string\" },\n\t\t\tcity: { type: \"string\" }\n\t\t},\n\t\trequired: ['line1', 'country', 'postalCode', 'subdivision', 'city']\n\t},\n\tMonthYearDateInput: {\n\t\t$id: 'MonthYearDateInput',\n\t\ttype: \"object\",\n\t\tproperties: {\n\t\t\tmonth: { type: \"string\", pattern: \"^(0[1-9]|1[0-2])$\" },\n\t\t\tyear: { type: \"string\", pattern: \"^\\\\d{4}$\" }\n\t\t},\n\t\trequired: ['month', 'year']\n\t},\n\tCardType: {\n\t\t$id: 'CardType',\n\t\ttype: \"string\",\n\t\tenum: ['DEBIT', 'CREDIT', 'PREPAID', 'UNKNOWN']\n\t},\n\tPhoneNumber: {\n\t\t$id: 'PhoneNumber',\n\t\ttype: \"string\",\n\t\tmaxLength: 80,\n\t\tminLength: 1,\n\t\tpattern: \"^\\\\d{1,80}$\"\n\t},\n\tPhoneNumberObjectExtends: {\n\t\t$id: 'PhoneNumberObjectExtends',\n\t\ttype: \"object\",\n\t\tproperties: {\n\t\t\tphoneNumber: sharedSchemaReferences.PhoneNumber\n\t\t},\n\t\trequired: ['phoneNumber']\n\t}\n};\n"]}
@@ -1,4 +1,5 @@
1
- interface BaseLocation<Type extends 'chain' | 'bank-account'> {
1
+ import type { BankAccountAddressObfuscated, MobileWalletAddressObfuscated } from "../common.js";
2
+ interface BaseLocation<Type extends 'chain' | 'bank-account' | 'mobile-wallet'> {
2
3
  type: Type;
3
4
  }
4
5
  export interface BankLocation extends BaseLocation<'bank-account'> {
@@ -6,6 +7,11 @@ export interface BankLocation extends BaseLocation<'bank-account'> {
6
7
  type: BankAccountType;
7
8
  };
8
9
  }
10
+ export interface MobileWalletLocation extends BaseLocation<'mobile-wallet'> {
11
+ account: {
12
+ type: MobileWalletAccountType;
13
+ };
14
+ }
9
15
  interface BaseChainLocation<Data> extends BaseLocation<'chain'> {
10
16
  type: 'chain';
11
17
  chain: Data;
@@ -50,9 +56,10 @@ export type PickChainLocation<T extends ChainLocationType = ChainLocationType> =
50
56
  type: T;
51
57
  }>>;
52
58
  export declare function isChainLocation<T extends ChainLocationType>(input: AssetLocation, chainType?: T): input is PickChainLocation<T>;
53
- export type AssetLocation = ChainLocation | BankLocation;
54
- export type BankAccountType = 'us' | 'iban-swift' | 'clabe' | 'pix';
55
- export type AssetLocationString = `chain:${'keeta' | 'evm'}:${bigint}` | `chain:${'solana' | 'bitcoin' | 'tron'}:${string}` | `bank-account:${BankAccountType}`;
59
+ export type AssetLocation = ChainLocation | BankLocation | MobileWalletLocation;
60
+ export type BankAccountType = BankAccountAddressObfuscated['accountType'];
61
+ export type MobileWalletAccountType = MobileWalletAddressObfuscated['accountType'];
62
+ export type AssetLocationString = `chain:${'keeta' | 'evm'}:${bigint}` | `chain:${'solana' | 'bitcoin' | 'tron'}:${string}` | `bank-account:${BankAccountType}` | `mobile-wallet:${MobileWalletAccountType}`;
56
63
  export type AssetLocationLike = AssetLocation | AssetLocationString;
57
64
  export type AssetLocationInput = AssetLocation | AssetLocationString;
58
65
  export type AssetLocationCanonical = AssetLocationString;
@@ -1 +1 @@
1
- {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.ts"],"names":[],"mappings":"AAGA,UAAU,YAAY,CAAC,IAAI,SAAS,OAAO,GAAG,cAAc;IAC3D,IAAI,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,cAAc,CAAC;IACjE,OAAO,EAAE;QACR,IAAI,EAAE,eAAe,CAAC;KACtB,CAAA;CACD;AAED,UAAU,iBAAiB,CAAC,IAAI,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACN,IAAI,EAAE,OAAO,CAAC;QACd;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;KAClB,GAAG;QACH,IAAI,EAAE,KAAK,CAAC;QACZ;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;KAChB,GAAG;QACH,IAAI,EAAE,QAAQ,CAAC;QACf;;WAEG;QACH,WAAW,EAAE,MAAM,CAAC;KACpB,GAAG;QACH,IAAI,EAAE,SAAS,CAAC;QAChB;;WAEG;QACH,UAAU,EAAE,MAAM,CAAC;KACnB,GAAG;QACH,IAAI,EAAE,MAAM,CAAC;QACb;;;WAGG;QACH,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,MAAM,EAAE,CAAC;KACjE,CAAA;CACD,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,CAAC;AAEjJ,wBAAgB,eAAe,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAU/H;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,YAAY,GAAG,OAAO,GAAG,KAAK,CAAC;AAEpE,MAAM,MAAM,mBAAmB,GAC9B,SAAS,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,GAAG,SAAS,QAAQ,GAAG,SAAS,GAAG,MAAM,IAAI,MAAM,EAAE,GACzF,gBAAgB,eAAe,EAAE,CAAC;AAEnC,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,mBAAmB,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAEzD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CAwB1F;AAqBD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAmFtE;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,kBAAkB,GAAG,sBAAsB,CAQtG;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAMxE"}
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,cAAc,CAAC;AAGhG,UAAU,YAAY,CAAC,IAAI,SAAS,OAAO,GAAG,cAAc,GAAG,eAAe;IAC7E,IAAI,EAAE,IAAI,CAAC;CACX;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY,CAAC,cAAc,CAAC;IACjE,OAAO,EAAE;QACR,IAAI,EAAE,eAAe,CAAC;KACtB,CAAA;CACD;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY,CAAC,eAAe,CAAC;IAC1E,OAAO,EAAE;QACR,IAAI,EAAE,uBAAuB,CAAC;KAC9B,CAAA;CACD;AAED,UAAU,iBAAiB,CAAC,IAAI,CAAE,SAAQ,YAAY,CAAC,OAAO,CAAC;IAC9D,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE;QACN,IAAI,EAAE,OAAO,CAAC;QACd;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;KAClB,GAAG;QACH,IAAI,EAAE,KAAK,CAAC;QACZ;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;KAChB,GAAG;QACH,IAAI,EAAE,QAAQ,CAAC;QACf;;WAEG;QACH,WAAW,EAAE,MAAM,CAAC;KACpB,GAAG;QACH,IAAI,EAAE,SAAS,CAAC;QAChB;;WAEG;QACH,UAAU,EAAE,MAAM,CAAC;KACnB,GAAG;QACH,IAAI,EAAE,MAAM,CAAC;QACb;;;WAGG;QACH,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,MAAM,EAAE,CAAC;KACjE,CAAA;CACD,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,IAAI,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC,CAAC;AAEjJ,wBAAgB,eAAe,CAAC,CAAC,SAAS,iBAAiB,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAU/H;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,oBAAoB,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG,4BAA4B,CAAC,aAAa,CAAC,CAAC;AAC1E,MAAM,MAAM,uBAAuB,GAAG,6BAA6B,CAAC,aAAa,CAAC,CAAC;AAEnF,MAAM,MAAM,mBAAmB,GAC9B,SAAS,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,GAAG,SAAS,QAAQ,GAAG,SAAS,GAAG,MAAM,IAAI,MAAM,EAAE,GACzF,gBAAgB,eAAe,EAAE,GACjC,iBAAiB,uBAAuB,EAAE,CAAC;AAE5C,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,mBAAmB,CAAC;AAEpE,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,mBAAmB,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAEzD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CA0B1F;AAqBD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CA4FtE;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,kBAAkB,GAAG,sBAAsB,CAQtG;AAGD,wBAAgB,eAAe,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CAMxE"}
@@ -1,4 +1,5 @@
1
- import type { BankAccountType, PickChainLocation } from "./location.js";
1
+ import type { BankAccountType, MobileWalletAccountType, PickChainLocation } from "./location.js";
2
2
  export declare const isTronNetworkAlias: (input: unknown) => input is PickChainLocation<'tron'>['chain']['networkAlias'];
3
3
  export declare const assertBankAccountType: (input: unknown) => BankAccountType;
4
+ export declare const assertMobileWalletAccountType: (input: unknown) => MobileWalletAccountType;
4
5
  //# sourceMappingURL=location.generated.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"location.generated.d.ts","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.generated.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAExE,eAAO,MAAM,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAkE,CAAC;AAClL,eAAO,MAAM,qBAAqB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,eAAiD,CAAC"}
1
+ {"version":3,"file":"location.generated.d.ts","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.generated.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEjG,eAAO,MAAM,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAkE,CAAC;AAClL,eAAO,MAAM,qBAAqB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,eAAiD,CAAC;AAC1G,eAAO,MAAM,6BAA6B,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,uBAAiE,CAAC"}
@@ -1,13 +1,25 @@
1
1
  import * as __typia_transform__assertGuard from "typia/lib/internal/_assertGuard.js";
2
2
  import { createAssert, createIs } from "typia";
3
3
  export const isTronNetworkAlias = (() => { return input => null !== input && undefined !== input && ("mainnet" === input || "shasta" === input || "nile" === input || "string" === typeof input && RegExp(/^custom:(.*)/).test(input)); })();
4
- export const assertBankAccountType = (() => { const __is = input => "us" === input || "iban-swift" === input || "clabe" === input || "pix" === input; let _errorFactory; return (input, errorFactory) => {
4
+ export const assertBankAccountType = (() => { const __is = input => "card" === input || "clabe" === input || "iban-swift" === input || "interac" === input || "pix" === input || "us" === input; let _errorFactory; return (input, errorFactory) => {
5
5
  if (false === __is(input)) {
6
6
  _errorFactory = errorFactory;
7
- ((input, _path, _exceptionable = true) => "us" === input || "iban-swift" === input || "clabe" === input || "pix" === input || __typia_transform__assertGuard._assertGuard(true, {
7
+ ((input, _path, _exceptionable = true) => "card" === input || "clabe" === input || "iban-swift" === input || "interac" === input || "pix" === input || "us" === input || __typia_transform__assertGuard._assertGuard(true, {
8
8
  method: "createAssert",
9
9
  path: _path + "",
10
- expected: "(\"clabe\" | \"iban-swift\" | \"pix\" | \"us\")",
10
+ expected: "(\"card\" | \"clabe\" | \"iban-swift\" | \"interac\" | \"pix\" | \"us\")",
11
+ value: input
12
+ }, _errorFactory))(input, "$input", true);
13
+ }
14
+ return input;
15
+ }; })();
16
+ export const assertMobileWalletAccountType = (() => { const _iv1 = new Set(["airtel-money", "bkash", "easy-paisa", "finja-wallet", "jazz-cash", "mtn-mobile-money", "nagad", "naya-pay", "paypal", "rocket", "sada-pay", "venmo"]); const _av2 = new Set(["airtel-money", "bkash", "easy-paisa", "finja-wallet", "jazz-cash", "mtn-mobile-money", "nagad", "naya-pay", "paypal", "rocket", "sada-pay", "venmo"]); const __is = input => true === _iv1.has(input); let _errorFactory; return (input, errorFactory) => {
17
+ if (false === __is(input)) {
18
+ _errorFactory = errorFactory;
19
+ ((input, _path, _exceptionable = true) => true === _av2.has(input) || __typia_transform__assertGuard._assertGuard(true, {
20
+ method: "createAssert",
21
+ path: _path + "",
22
+ expected: "(\"airtel-money\" | \"bkash\" | \"easy-paisa\" | \"finja-wallet\" | \"jazz-cash\" | \"mtn-mobile-money\" | \"nagad\" | \"naya-pay\" | \"paypal\" | \"rocket\" | \"sada-pay\" | \"venmo\")",
11
23
  value: input
12
24
  }, _errorFactory))(input, "$input", true);
13
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"location.generated.js","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.generated.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG/C,MAAM,CAAC,MAAM,kBAAkB,6MAAkJ,CAAC;AAClL,MAAM,CAAC,MAAM,qBAAqB;;;;;;;;;;;OAAuE,CAAC","sourcesContent":["import { createAssert, createIs } from \"typia\";\nimport type { BankAccountType, PickChainLocation } from \"./location.js\";\n\nexport const isTronNetworkAlias: (input: unknown) => input is PickChainLocation<'tron'>['chain']['networkAlias'] = createIs<PickChainLocation<'tron'>['chain']['networkAlias']>();\nexport const assertBankAccountType: (input: unknown) => BankAccountType = createAssert<BankAccountType>();\n"]}
1
+ {"version":3,"file":"location.generated.js","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.generated.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAG/C,MAAM,CAAC,MAAM,kBAAkB,6MAAkJ,CAAC;AAClL,MAAM,CAAC,MAAM,qBAAqB;;;;;;;;;;;OAAuE,CAAC;AAC1G,MAAM,CAAC,MAAM,6BAA6B;;;;;;;;;;;OAAuF,CAAC","sourcesContent":["import { createAssert, createIs } from \"typia\";\nimport type { BankAccountType, MobileWalletAccountType, PickChainLocation } from \"./location.js\";\n\nexport const isTronNetworkAlias: (input: unknown) => input is PickChainLocation<'tron'>['chain']['networkAlias'] = createIs<PickChainLocation<'tron'>['chain']['networkAlias']>();\nexport const assertBankAccountType: (input: unknown) => BankAccountType = createAssert<BankAccountType>();\nexport const assertMobileWalletAccountType: (input: unknown) => MobileWalletAccountType = createAssert<MobileWalletAccountType>();\n"]}
@@ -1,5 +1,5 @@
1
1
  import { assertNever } from "../../../lib/utils/never.js";
2
- import { assertBankAccountType, isTronNetworkAlias } from "./location.generated.js";
2
+ import { assertBankAccountType, assertMobileWalletAccountType, isTronNetworkAlias } from "./location.generated.js";
3
3
  export function isChainLocation(input, chainType) {
4
4
  if (input.type !== 'chain') {
5
5
  return (false);
@@ -36,6 +36,9 @@ export function convertAssetLocationToString(input) {
36
36
  else if (input.type === 'bank-account') {
37
37
  return (`bank-account:${assertBankAccountType(input.account.type)}`);
38
38
  }
39
+ else if (input.type === 'mobile-wallet') {
40
+ return (`mobile-wallet:${assertMobileWalletAccountType(input.account.type)}`);
41
+ }
39
42
  else {
40
43
  throw (new Error(`Invalid AssetLocation type: ${JSON.stringify(input)}`));
41
44
  }
@@ -131,6 +134,15 @@ export function toAssetLocationFromString(input) {
131
134
  account: { type: assertBankAccountType(parts[0]) }
132
135
  });
133
136
  }
137
+ else if (kind === 'mobile-wallet') {
138
+ if (parts.length !== 1) {
139
+ throw (new Error('Invalid AssetLocation mobile-wallet string'));
140
+ }
141
+ return ({
142
+ type: 'mobile-wallet',
143
+ account: { type: assertMobileWalletAccountType(parts[0]) }
144
+ });
145
+ }
134
146
  else {
135
147
  throw (new Error('Invalid AssetLocation string'));
136
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"location.js","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.ts"],"names":[],"mappings":"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","sourcesContent":["import { assertNever } from \"../../../lib/utils/never.js\";\nimport { assertBankAccountType, isTronNetworkAlias } from \"./location.generated.js\";\n\ninterface BaseLocation<Type extends 'chain' | 'bank-account'> {\n\ttype: Type;\n}\n\nexport interface BankLocation extends BaseLocation<'bank-account'> {\n\taccount: {\n\t\ttype: BankAccountType;\n\t}\n}\n\ninterface BaseChainLocation<Data> extends BaseLocation<'chain'> {\n\ttype: 'chain';\n\tchain: Data;\n}\n\nexport type ChainLocation = {\n\ttype: 'chain';\n\tchain: {\n\t\ttype: 'keeta';\n\t\t/**\n\t\t * The network ID representing the Keeta network to interact with\n\t\t */\n\t\tnetworkId: bigint;\n\t} | {\n\t\ttype: 'evm';\n\t\t/**\n\t\t * The chain ID representing the EVM-based network to interact with\n\t\t */\n\t\tchainId: bigint;\n\t} | {\n\t\ttype: 'solana';\n\t\t/**\n\t\t * The genesis hash representing Solana network/cluster to interact with\n\t\t */\n\t\tgenesisHash: string;\n\t} | {\n\t\ttype: 'bitcoin';\n\t\t/**\n\t\t * The \"magic bytes\" representing the bitcoin network to interact with\n\t\t */\n\t\tmagicBytes: string;\n\t} | {\n\t\ttype: 'tron';\n\t\t/**\n\t\t * The network alias representing the Tron network to interact with\n\t\t * Note: this is not the chain ID, but a human-readable alias because tron does not use chain/network IDs or any similar way to differentiate networks\n\t\t */\n\t\tnetworkAlias: 'mainnet' | 'shasta' | 'nile' | `custom:${string}`;\n\t}\n};\n\n\nexport type ChainLocationType = ChainLocation['chain']['type'];\n\nexport type PickChainLocation<T extends ChainLocationType = ChainLocationType> = BaseChainLocation<Extract<ChainLocation['chain'], { type: T }>>;\n\nexport function isChainLocation<T extends ChainLocationType>(input: AssetLocation, chainType?: T): input is PickChainLocation<T> {\n\tif (input.type !== 'chain') {\n\t\treturn(false);\n\t}\n\n\tif (chainType !== undefined) {\n\t\treturn(input.chain.type === chainType);\n\t}\n\n\treturn(true);\n}\n\nexport type AssetLocation = ChainLocation | BankLocation;\n\nexport type BankAccountType = 'us' | 'iban-swift' | 'clabe' | 'pix';\n\nexport type AssetLocationString =\n\t`chain:${'keeta' | 'evm'}:${bigint}` | `chain:${'solana' | 'bitcoin' | 'tron'}:${string}` |\n\t`bank-account:${BankAccountType}`;\n\nexport type AssetLocationLike = AssetLocation | AssetLocationString;\n\nexport type AssetLocationInput = AssetLocation | AssetLocationString;\nexport type AssetLocationCanonical = AssetLocationString;\n\nexport function convertAssetLocationToString(input: AssetLocationLike): AssetLocationString {\n\tif (typeof input === 'string') {\n\t\treturn(input);\n\t}\n\n\tif (input.type === 'chain') {\n\t\tif (input.chain.type === 'keeta') {\n\t\t\treturn(`chain:keeta:${input.chain.networkId}`);\n\t\t} else if (input.chain.type === 'evm') {\n\t\t\treturn(`chain:evm:${input.chain.chainId}`);\n\t\t} else if (input.chain.type === 'solana') {\n\t\t\treturn(`chain:solana:${input.chain.genesisHash}`);\n\t\t} else if (input.chain.type === 'bitcoin') {\n\t\t\treturn(`chain:bitcoin:${input.chain.magicBytes}`);\n\t\t} else if (input.chain.type === 'tron') {\n\t\t\treturn(`chain:tron:${input.chain.networkAlias}`);\n\t\t} else {\n\t\t\tassertNever(input.chain);\n\t\t}\n\t} else if (input.type === 'bank-account') {\n\t\treturn(`bank-account:${assertBankAccountType(input.account.type)}`);\n\t} else {\n\t\tthrow(new Error(`Invalid AssetLocation type: ${JSON.stringify(input)}`));\n\t}\n}\n\nfunction validateSolanaGenesisHash(hash: string): boolean {\n\t// Basic validation: Solana genesis hashes are typically 44-character base58 strings\n\tconst genesisHashRegex = /^(?=.{43,44}$)[1-9A-HJ-NP-Za-km-z]+$/;\n\treturn(genesisHashRegex.test(hash));\n}\n\nfunction validateBitcoinMagicBytes(magicBytes: string): boolean {\n\tif (magicBytes.length !== 8) {\n\t\treturn(false);\n\t}\n\n\ttry {\n\t\tconst buffer = Buffer.from(magicBytes, 'hex');\n\t\treturn(buffer.length === 4);\n\t} catch {\n\t\treturn(false);\n\t}\n}\n\nexport function toAssetLocationFromString(input: string): AssetLocation {\n\tconst [ kind, ...parts ] = input.split(':');\n\n\tif (kind === 'chain') {\n\t\tif (parts.length !== 2) {\n\t\t\tthrow(new Error('Invalid AssetLocation chain string'));\n\t\t}\n\n\t\tconst chainType = parts[0];\n\t\tif (!parts[1] || typeof parts[1] !== 'string') {\n\t\t\tthrow(new Error('Invalid chain id in AssetLocation string'));\n\t\t}\n\n\n\t\treturn({\n\t\t\ttype: 'chain',\n\t\t\tchain: (() => {\n\t\t\t\tif (chainType === 'keeta' || chainType === 'evm') {\n\t\t\t\t\tconst chainId = BigInt(parts[1]);\n\n\t\t\t\t\tif (chainId < 0n) {\n\t\t\t\t\t\tthrow(new Error(`Invalid chain id in AssetLocation string: ${parts[1]}`));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chainType === 'keeta') {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\ttype: 'keeta',\n\t\t\t\t\t\t\tnetworkId: chainId\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (chainType === 'evm') {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\ttype: 'evm',\n\t\t\t\t\t\t\tchainId: chainId\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (chainType === 'solana') {\n\t\t\t\t\tconst genesisHash = parts[1];\n\t\t\t\t\tif (!validateSolanaGenesisHash(genesisHash)) {\n\t\t\t\t\t\tthrow(new Error(`Invalid Solana genesis hash in AssetLocation string: ${genesisHash}`));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\ttype: 'solana',\n\t\t\t\t\t\tgenesisHash: genesisHash\n\t\t\t\t\t});\n\t\t\t\t} else if (chainType === 'bitcoin') {\n\t\t\t\t\tconst magicBytes = parts[1];\n\n\t\t\t\t\tif (!validateBitcoinMagicBytes(magicBytes)) {\n\t\t\t\t\t\tthrow(new Error(`Invalid Bitcoin magic bytes in AssetLocation string: ${magicBytes}`));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\ttype: 'bitcoin',\n\t\t\t\t\t\tmagicBytes: magicBytes\n\t\t\t\t\t});\n\t\t\t\t} else if (chainType === 'tron') {\n\t\t\t\t\tconst networkAlias = parts[1];\n\t\t\t\t\tif (!isTronNetworkAlias(networkAlias)) {\n\t\t\t\t\t\tthrow(new Error(`Invalid Tron network alias in AssetLocation string: ${networkAlias}`));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\ttype: 'tron',\n\t\t\t\t\t\tnetworkAlias: networkAlias\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthrow(new Error(`Invalid chain type in AssetLocation string: ${chainType}`));\n\t\t\t})()\n\t\t});\n\t} else if (kind === 'bank-account') {\n\t\tif (parts.length !== 1) {\n\t\t\tthrow(new Error('Invalid AssetLocation bank-account string'));\n\t\t}\n\n\t\treturn({\n\t\t\ttype: 'bank-account',\n\t\t\taccount: { type: assertBankAccountType(parts[0]) }\n\t\t});\n\t} else {\n\t\tthrow(new Error('Invalid AssetLocation string'));\n\t}\n}\n\nexport function convertAssetLocationInputToCanonical(input: AssetLocationInput): AssetLocationCanonical {\n\tif (typeof input === 'string') {\n\t\treturn(input);\n\t} else if (typeof input === 'object' && input !== null) {\n\t\treturn(convertAssetLocationToString(input));\n\t}\n\n\tthrow(new Error(`Invalid AssetLocationInput type: ${typeof input}`));\n}\n\n\nexport function toAssetLocation(input: AssetLocationInput): AssetLocation {\n\tif (typeof input === 'string') {\n\t\treturn(toAssetLocationFromString(input));\n\t} else {\n\t\treturn(input);\n\t}\n}\n"]}
1
+ {"version":3,"file":"location.js","sourceRoot":"","sources":["../../../../src/services/asset-movement/lib/location.ts"],"names":[],"mappings":"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","sourcesContent":["import { assertNever } from \"../../../lib/utils/never.js\";\nimport type { BankAccountAddressObfuscated, MobileWalletAddressObfuscated } from \"../common.js\";\nimport { assertBankAccountType, assertMobileWalletAccountType, isTronNetworkAlias } from \"./location.generated.js\";\n\ninterface BaseLocation<Type extends 'chain' | 'bank-account' | 'mobile-wallet'> {\n\ttype: Type;\n}\n\nexport interface BankLocation extends BaseLocation<'bank-account'> {\n\taccount: {\n\t\ttype: BankAccountType;\n\t}\n}\n\nexport interface MobileWalletLocation extends BaseLocation<'mobile-wallet'> {\n\taccount: {\n\t\ttype: MobileWalletAccountType;\n\t}\n}\n\ninterface BaseChainLocation<Data> extends BaseLocation<'chain'> {\n\ttype: 'chain';\n\tchain: Data;\n}\n\nexport type ChainLocation = {\n\ttype: 'chain';\n\tchain: {\n\t\ttype: 'keeta';\n\t\t/**\n\t\t * The network ID representing the Keeta network to interact with\n\t\t */\n\t\tnetworkId: bigint;\n\t} | {\n\t\ttype: 'evm';\n\t\t/**\n\t\t * The chain ID representing the EVM-based network to interact with\n\t\t */\n\t\tchainId: bigint;\n\t} | {\n\t\ttype: 'solana';\n\t\t/**\n\t\t * The genesis hash representing Solana network/cluster to interact with\n\t\t */\n\t\tgenesisHash: string;\n\t} | {\n\t\ttype: 'bitcoin';\n\t\t/**\n\t\t * The \"magic bytes\" representing the bitcoin network to interact with\n\t\t */\n\t\tmagicBytes: string;\n\t} | {\n\t\ttype: 'tron';\n\t\t/**\n\t\t * The network alias representing the Tron network to interact with\n\t\t * Note: this is not the chain ID, but a human-readable alias because tron does not use chain/network IDs or any similar way to differentiate networks\n\t\t */\n\t\tnetworkAlias: 'mainnet' | 'shasta' | 'nile' | `custom:${string}`;\n\t}\n};\n\n\nexport type ChainLocationType = ChainLocation['chain']['type'];\n\nexport type PickChainLocation<T extends ChainLocationType = ChainLocationType> = BaseChainLocation<Extract<ChainLocation['chain'], { type: T }>>;\n\nexport function isChainLocation<T extends ChainLocationType>(input: AssetLocation, chainType?: T): input is PickChainLocation<T> {\n\tif (input.type !== 'chain') {\n\t\treturn(false);\n\t}\n\n\tif (chainType !== undefined) {\n\t\treturn(input.chain.type === chainType);\n\t}\n\n\treturn(true);\n}\n\nexport type AssetLocation = ChainLocation | BankLocation | MobileWalletLocation;\n\nexport type BankAccountType = BankAccountAddressObfuscated['accountType'];\nexport type MobileWalletAccountType = MobileWalletAddressObfuscated['accountType'];\n\nexport type AssetLocationString =\n\t`chain:${'keeta' | 'evm'}:${bigint}` | `chain:${'solana' | 'bitcoin' | 'tron'}:${string}` |\n\t`bank-account:${BankAccountType}` |\n\t`mobile-wallet:${MobileWalletAccountType}`;\n\nexport type AssetLocationLike = AssetLocation | AssetLocationString;\n\nexport type AssetLocationInput = AssetLocation | AssetLocationString;\nexport type AssetLocationCanonical = AssetLocationString;\n\nexport function convertAssetLocationToString(input: AssetLocationLike): AssetLocationString {\n\tif (typeof input === 'string') {\n\t\treturn(input);\n\t}\n\n\tif (input.type === 'chain') {\n\t\tif (input.chain.type === 'keeta') {\n\t\t\treturn(`chain:keeta:${input.chain.networkId}`);\n\t\t} else if (input.chain.type === 'evm') {\n\t\t\treturn(`chain:evm:${input.chain.chainId}`);\n\t\t} else if (input.chain.type === 'solana') {\n\t\t\treturn(`chain:solana:${input.chain.genesisHash}`);\n\t\t} else if (input.chain.type === 'bitcoin') {\n\t\t\treturn(`chain:bitcoin:${input.chain.magicBytes}`);\n\t\t} else if (input.chain.type === 'tron') {\n\t\t\treturn(`chain:tron:${input.chain.networkAlias}`);\n\t\t} else {\n\t\t\tassertNever(input.chain);\n\t\t}\n\t} else if (input.type === 'bank-account') {\n\t\treturn(`bank-account:${assertBankAccountType(input.account.type)}`);\n\t} else if (input.type === 'mobile-wallet') {\n\t\treturn(`mobile-wallet:${assertMobileWalletAccountType(input.account.type)}`);\n\t} else {\n\t\tthrow(new Error(`Invalid AssetLocation type: ${JSON.stringify(input)}`));\n\t}\n}\n\nfunction validateSolanaGenesisHash(hash: string): boolean {\n\t// Basic validation: Solana genesis hashes are typically 44-character base58 strings\n\tconst genesisHashRegex = /^(?=.{43,44}$)[1-9A-HJ-NP-Za-km-z]+$/;\n\treturn(genesisHashRegex.test(hash));\n}\n\nfunction validateBitcoinMagicBytes(magicBytes: string): boolean {\n\tif (magicBytes.length !== 8) {\n\t\treturn(false);\n\t}\n\n\ttry {\n\t\tconst buffer = Buffer.from(magicBytes, 'hex');\n\t\treturn(buffer.length === 4);\n\t} catch {\n\t\treturn(false);\n\t}\n}\n\nexport function toAssetLocationFromString(input: string): AssetLocation {\n\tconst [ kind, ...parts ] = input.split(':');\n\n\tif (kind === 'chain') {\n\t\tif (parts.length !== 2) {\n\t\t\tthrow(new Error('Invalid AssetLocation chain string'));\n\t\t}\n\n\t\tconst chainType = parts[0];\n\t\tif (!parts[1] || typeof parts[1] !== 'string') {\n\t\t\tthrow(new Error('Invalid chain id in AssetLocation string'));\n\t\t}\n\n\n\t\treturn({\n\t\t\ttype: 'chain',\n\t\t\tchain: (() => {\n\t\t\t\tif (chainType === 'keeta' || chainType === 'evm') {\n\t\t\t\t\tconst chainId = BigInt(parts[1]);\n\n\t\t\t\t\tif (chainId < 0n) {\n\t\t\t\t\t\tthrow(new Error(`Invalid chain id in AssetLocation string: ${parts[1]}`));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (chainType === 'keeta') {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\ttype: 'keeta',\n\t\t\t\t\t\t\tnetworkId: chainId\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (chainType === 'evm') {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\ttype: 'evm',\n\t\t\t\t\t\t\tchainId: chainId\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} else if (chainType === 'solana') {\n\t\t\t\t\tconst genesisHash = parts[1];\n\t\t\t\t\tif (!validateSolanaGenesisHash(genesisHash)) {\n\t\t\t\t\t\tthrow(new Error(`Invalid Solana genesis hash in AssetLocation string: ${genesisHash}`));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\ttype: 'solana',\n\t\t\t\t\t\tgenesisHash: genesisHash\n\t\t\t\t\t});\n\t\t\t\t} else if (chainType === 'bitcoin') {\n\t\t\t\t\tconst magicBytes = parts[1];\n\n\t\t\t\t\tif (!validateBitcoinMagicBytes(magicBytes)) {\n\t\t\t\t\t\tthrow(new Error(`Invalid Bitcoin magic bytes in AssetLocation string: ${magicBytes}`));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\ttype: 'bitcoin',\n\t\t\t\t\t\tmagicBytes: magicBytes\n\t\t\t\t\t});\n\t\t\t\t} else if (chainType === 'tron') {\n\t\t\t\t\tconst networkAlias = parts[1];\n\t\t\t\t\tif (!isTronNetworkAlias(networkAlias)) {\n\t\t\t\t\t\tthrow(new Error(`Invalid Tron network alias in AssetLocation string: ${networkAlias}`));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\ttype: 'tron',\n\t\t\t\t\t\tnetworkAlias: networkAlias\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tthrow(new Error(`Invalid chain type in AssetLocation string: ${chainType}`));\n\t\t\t})()\n\t\t});\n\t} else if (kind === 'bank-account') {\n\t\tif (parts.length !== 1) {\n\t\t\tthrow(new Error('Invalid AssetLocation bank-account string'));\n\t\t}\n\n\t\treturn({\n\t\t\ttype: 'bank-account',\n\t\t\taccount: { type: assertBankAccountType(parts[0]) }\n\t\t});\n\t} else if (kind === 'mobile-wallet') {\n\t\tif (parts.length !== 1) {\n\t\t\tthrow(new Error('Invalid AssetLocation mobile-wallet string'));\n\t\t}\n\n\t\treturn({\n\t\t\ttype: 'mobile-wallet',\n\t\t\taccount: { type: assertMobileWalletAccountType(parts[0]) }\n\t\t});\n\t} else {\n\t\tthrow(new Error('Invalid AssetLocation string'));\n\t}\n}\n\nexport function convertAssetLocationInputToCanonical(input: AssetLocationInput): AssetLocationCanonical {\n\tif (typeof input === 'string') {\n\t\treturn(input);\n\t} else if (typeof input === 'object' && input !== null) {\n\t\treturn(convertAssetLocationToString(input));\n\t}\n\n\tthrow(new Error(`Invalid AssetLocationInput type: ${typeof input}`));\n}\n\n\nexport function toAssetLocation(input: AssetLocationInput): AssetLocation {\n\tif (typeof input === 'string') {\n\t\treturn(toAssetLocationFromString(input));\n\t} else {\n\t\treturn(input);\n\t}\n}\n"]}
@@ -146,6 +146,20 @@ declare class KeetaFXAnchorEstimateWithProvider implements CanCreateExchange {
146
146
  */
147
147
  refetch(): Promise<KeetaFXAnchorEstimateWithProvider>;
148
148
  }
149
+ interface GetProvidersOptions extends AccountOptions {
150
+ requiredOperations?: (keyof KeetaFXAnchorOperations)[];
151
+ }
152
+ interface GetPricesAssetReturnValue {
153
+ value: bigint;
154
+ averageConvertedAmount: number;
155
+ providerEstimates: KeetaFXAnchorEstimateWithProvider[];
156
+ }
157
+ export interface GetPricesArgs<Asset extends ConversionInput['from']> {
158
+ assets: Asset[];
159
+ priceIn: ConversionInput['from'];
160
+ conversionValue?: bigint | ((input: Asset) => bigint | Promise<bigint>);
161
+ conversionAffinity?: ConversionInput['affinity'];
162
+ }
149
163
  declare class KeetaFXAnchorClient extends KeetaFXAnchorBase {
150
164
  #private;
151
165
  readonly resolver: Resolver;
@@ -156,10 +170,11 @@ declare class KeetaFXAnchorClient extends KeetaFXAnchorBase {
156
170
  listPossibleConversions(input: Partial<Pick<ConversionInput, 'from' | 'to'>>, options?: AccountOptions, sharedCriteria?: SharedLookupCriteria): Promise<{
157
171
  conversions: KeetaNetTokenPublicKeyString[];
158
172
  } | null>;
159
- getBaseProvidersForConversion(request: ConversionInput, options?: AccountOptions, sharedCriteria?: SharedLookupCriteria): Promise<KeetaFXAnchorProviderBase[] | null>;
160
- getEstimates(request: ConversionInput, options?: AccountOptions, sharedCriteria?: SharedLookupCriteria): Promise<KeetaFXAnchorEstimateWithProvider[] | null>;
173
+ getBaseProvidersForConversion(request: ConversionInput, options?: GetProvidersOptions, sharedCriteria?: SharedLookupCriteria): Promise<KeetaFXAnchorProviderBase[] | null>;
174
+ getEstimates(request: ConversionInput, options?: Omit<GetProvidersOptions, 'requiredOperations'>, sharedCriteria?: SharedLookupCriteria): Promise<KeetaFXAnchorEstimateWithProvider[] | null>;
161
175
  getQuotes(request: ConversionInput, options?: AccountOptions, sharedCriteria?: SharedLookupCriteria): Promise<KeetaFXAnchorQuoteWithProvider[] | null>;
162
176
  getQuotesOrEstimates(request: ConversionInput, options?: AccountOptions, sharedCriteria?: SharedLookupCriteria): Promise<(KeetaFXAnchorQuoteWithProvider | KeetaFXAnchorEstimateWithProvider)[] | null>;
177
+ getPrices<Asset extends ConversionInput['from']>(input: GetPricesArgs<Asset>): Promise<Map<Asset, GetPricesAssetReturnValue | null>>;
163
178
  }
164
179
  export default KeetaFXAnchorClient;
165
180
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/fx/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/fx/client.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,12 @@ async function getEndpoints(resolver, request, _ignored_account, sharedCriteria)
18
18
  if (request.to !== undefined) {
19
19
  criteria.outputCurrencyCode = request.to.publicKeyString.get();
20
20
  }
21
+ if (request.requiredOperations) {
22
+ criteria.requiredOperations = request.requiredOperations;
23
+ }
24
+ if (request.affinity !== undefined) {
25
+ criteria.supportedAffinity = request.affinity;
26
+ }
21
27
  const response = await resolver.lookup('fx', {
22
28
  ...criteria
23
29
  // kycProviders: 'TODO' XXX:TODO
@@ -137,59 +143,63 @@ class KeetaFXAnchorProviderBase extends KeetaFXAnchorBase {
137
143
  }
138
144
  return (new Error(`FX request failed: ${errorStr}`));
139
145
  }
146
+ async #getEndpoint(operation, params) {
147
+ const operationFn = await this.serviceInfo.operations[operation];
148
+ if (operationFn === undefined) {
149
+ throw (new KeetaAnchorUserError(`Provider ${String(this.providerID)} does not support "${operation}" operation`));
150
+ }
151
+ return (operationFn(params));
152
+ }
140
153
  async getEstimate() {
141
- const serviceURL = await this.serviceInfo.operations.getEstimate;
142
- if (serviceURL !== undefined) {
143
- const estimateURL = serviceURL();
144
- const requestInformation = await fetch(estimateURL, {
145
- method: 'POST',
146
- headers: {
147
- 'Content-Type': 'application/json',
148
- 'Accept': 'application/json'
149
- },
150
- body: JSON.stringify({
151
- request: KeetaNetLib.Utils.Conversion.toJSONSerializable(this.conversion)
152
- })
153
- });
154
- const requestInformationJSON = await requestInformation.json();
155
- if (!isKeetaFXAnchorEstimateResponse(requestInformationJSON)) {
156
- throw (new Error(`Invalid response from FX estimate service: ${JSON.stringify(requestInformationJSON)}`));
157
- }
158
- if (!requestInformationJSON.ok) {
159
- throw (await this.#parseResponseError(requestInformationJSON));
160
- }
161
- this.logger?.debug(`FX estimate request successful, to provider ${estimateURL} for ${JSON.stringify(KeetaNetLib.Utils.Conversion.toJSONSerializable(this.conversion))}`);
162
- const estimateJSON = requestInformationJSON.estimate;
163
- return ({
164
- request: this.#parseConversionRequest(estimateJSON.request),
165
- convertedAmount: BigInt(estimateJSON.convertedAmount),
166
- expectedCost: {
167
- min: BigInt(estimateJSON.expectedCost.min),
168
- max: BigInt(estimateJSON.expectedCost.max),
169
- token: KeetaNetLib.Account.fromPublicKeyString(estimateJSON.expectedCost.token)
170
- },
171
- ...(estimateJSON.convertedAmountBound !== undefined ? { convertedAmountBound: BigInt(estimateJSON.convertedAmountBound) } : {}),
172
- ...(() => {
173
- if (estimateJSON.requiresQuote === undefined) {
174
- return ({});
175
- }
176
- else if (estimateJSON.requiresQuote) {
177
- return ({ requiresQuote: true });
178
- // We have to disable this as doing !estimateJSON.requiresQuote breaks the compiler, and that is what eslint wants us to do
179
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-boolean-literal-compare
180
- }
181
- else if (estimateJSON.requiresQuote === false) {
182
- return ({
183
- requiresQuote: false,
184
- account: KeetaNetLib.Account.fromPublicKeyString(estimateJSON.account)
185
- });
186
- }
187
- })()
188
- });
154
+ const estimateURL = await this.#getEndpoint('getEstimate');
155
+ const requestInformation = await fetch(estimateURL, {
156
+ method: 'POST',
157
+ headers: {
158
+ 'Content-Type': 'application/json',
159
+ 'Accept': 'application/json'
160
+ },
161
+ body: JSON.stringify({
162
+ request: KeetaNetLib.Utils.Conversion.toJSONSerializable(this.conversion)
163
+ })
164
+ });
165
+ const requestInformationJSON = await requestInformation.json();
166
+ if (!isKeetaFXAnchorEstimateResponse(requestInformationJSON)) {
167
+ throw (new Error(`Invalid response from FX estimate service: ${JSON.stringify(requestInformationJSON)}`));
189
168
  }
190
- else {
191
- throw (new Error('Service getEstimate does not exist'));
169
+ if (!requestInformationJSON.ok) {
170
+ throw (await this.#parseResponseError(requestInformationJSON));
192
171
  }
172
+ this.logger?.debug(`FX estimate request successful, to provider ${estimateURL} for ${JSON.stringify(KeetaNetLib.Utils.Conversion.toJSONSerializable(this.conversion))}`);
173
+ const estimateJSON = requestInformationJSON.estimate;
174
+ return ({
175
+ request: this.#parseConversionRequest(estimateJSON.request),
176
+ convertedAmount: BigInt(estimateJSON.convertedAmount),
177
+ expectedCost: {
178
+ min: BigInt(estimateJSON.expectedCost.min),
179
+ max: BigInt(estimateJSON.expectedCost.max),
180
+ token: KeetaNetLib.Account.fromPublicKeyString(estimateJSON.expectedCost.token)
181
+ },
182
+ ...(estimateJSON.convertedAmountBound !== undefined ? { convertedAmountBound: BigInt(estimateJSON.convertedAmountBound) } : {}),
183
+ ...(() => {
184
+ if (estimateJSON.canPerformExchange === false) {
185
+ return ({ canPerformExchange: false });
186
+ }
187
+ else if (estimateJSON.requiresQuote === undefined) {
188
+ return ({});
189
+ }
190
+ else if (estimateJSON.requiresQuote) {
191
+ return ({ requiresQuote: true });
192
+ // We have to disable this as doing !estimateJSON.requiresQuote breaks the compiler, and that is what eslint wants us to do
193
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-boolean-literal-compare
194
+ }
195
+ else if (estimateJSON.requiresQuote === false) {
196
+ return ({
197
+ requiresQuote: false,
198
+ account: KeetaNetLib.Account.fromPublicKeyString(estimateJSON.account)
199
+ });
200
+ }
201
+ })()
202
+ });
193
203
  }
194
204
  /**
195
205
  * Get a quote from the provider. If an estimate is provided, it will
@@ -204,7 +214,7 @@ class KeetaFXAnchorProviderBase extends KeetaFXAnchorBase {
204
214
  * @returns A promise that resolves to the quote response
205
215
  */
206
216
  async getQuote(estimate, tolerance = 0.1) {
207
- const serviceURL = (await this.serviceInfo.operations.getQuote)();
217
+ const serviceURL = await this.#getEndpoint('getQuote');
208
218
  const requestInformation = await fetch(serviceURL, {
209
219
  method: 'POST',
210
220
  headers: {
@@ -252,6 +262,9 @@ class KeetaFXAnchorProviderBase extends KeetaFXAnchorBase {
252
262
  let request;
253
263
  let convertedAmountBound;
254
264
  if ('estimate' in input) {
265
+ if (input.estimate.canPerformExchange === false) {
266
+ throw (new KeetaAnchorUserError('The provided estimate indicates that the exchange cannot be performed'));
267
+ }
255
268
  if (input.estimate.requiresQuote !== false) {
256
269
  throw (new FXErrors.QuoteRequired());
257
270
  }
@@ -313,7 +326,7 @@ class KeetaFXAnchorProviderBase extends KeetaFXAnchorBase {
313
326
  else {
314
327
  bodyAdditionalData = { request: input.estimate.request };
315
328
  }
316
- const serviceURL = (await this.serviceInfo.operations.createExchange)();
329
+ const serviceURL = await this.#getEndpoint('createExchange');
317
330
  const requestInformation = await fetch(serviceURL, {
318
331
  method: 'POST',
319
332
  headers: {
@@ -344,7 +357,7 @@ class KeetaFXAnchorProviderBase extends KeetaFXAnchorBase {
344
357
  return (requestInformationJSON);
345
358
  }
346
359
  async getExchangeStatus(exchangeID) {
347
- const serviceURL = (await this.serviceInfo.operations.getExchangeStatus)({ id: exchangeID });
360
+ const serviceURL = await this.#getEndpoint('getExchangeStatus', { id: exchangeID });
348
361
  const requestInformation = await fetch(serviceURL, {
349
362
  method: 'GET',
350
363
  headers: {
@@ -576,18 +589,25 @@ class KeetaFXAnchorClient extends KeetaFXAnchorBase {
576
589
  return (providers);
577
590
  }
578
591
  async getEstimates(request, options = {}, sharedCriteria) {
579
- const estimateProviders = await this.getBaseProvidersForConversion(request, options, sharedCriteria);
592
+ const estimateProviders = await this.getBaseProvidersForConversion(request, {
593
+ ...options,
594
+ requiredOperations: ['getEstimate']
595
+ }, sharedCriteria);
580
596
  if (estimateProviders === null) {
581
597
  return (null);
582
598
  }
583
- const estimates = await Promise.allSettled(estimateProviders.map(async (provider) => {
584
- const estimate = await provider.getEstimate();
585
- return (new KeetaFXAnchorEstimateWithProvider(provider, estimate));
599
+ const estimates = await Promise.all(estimateProviders.map(async (provider) => {
600
+ try {
601
+ const estimate = await provider.getEstimate();
602
+ return (new KeetaFXAnchorEstimateWithProvider(provider, estimate));
603
+ }
604
+ catch (error) {
605
+ this.logger?.error(`Failed to get estimate from provider ${String(provider.providerID)}:`, error);
606
+ return (null);
607
+ }
586
608
  }));
587
609
  const results = estimates.filter(function (result) {
588
- return (result.status === 'fulfilled');
589
- }).map(function (result) {
590
- return (result.value);
610
+ return (result !== null);
591
611
  });
592
612
  if (results.length === 0) {
593
613
  return (null);
@@ -595,7 +615,10 @@ class KeetaFXAnchorClient extends KeetaFXAnchorBase {
595
615
  return (results);
596
616
  }
597
617
  async #multiRequestQuotes(request, options = {}, sharedCriteria) {
598
- const estimateProviders = await this.getBaseProvidersForConversion(request, options, sharedCriteria);
618
+ const estimateProviders = await this.getBaseProvidersForConversion(request, {
619
+ ...options,
620
+ requiredOperations: ['getQuote']
621
+ }, sharedCriteria);
599
622
  if (estimateProviders === null) {
600
623
  return ([]);
601
624
  }
@@ -624,25 +647,79 @@ class KeetaFXAnchorClient extends KeetaFXAnchorBase {
624
647
  return (results);
625
648
  }
626
649
  async getQuotesOrEstimates(request, options = {}, sharedCriteria) {
627
- const quotesAndEstimates = await this.#multiRequestQuotes(request, options, sharedCriteria);
628
- const results = await Promise.allSettled(quotesAndEstimates.map(async (provider) => {
629
- if (provider.quote) {
630
- return (provider.quote);
650
+ const [quotesAndEstimates, estimateProviders] = await Promise.all([
651
+ this.#multiRequestQuotes(request, options, sharedCriteria),
652
+ this.getBaseProvidersForConversion(request, {
653
+ ...options,
654
+ requiredOperations: ['getEstimate']
655
+ }, sharedCriteria)
656
+ ]);
657
+ const estimateProviderIDs = new Set();
658
+ if (estimateProviders !== null) {
659
+ for (const provider of estimateProviders) {
660
+ estimateProviderIDs.add(provider.providerID);
631
661
  }
632
- else {
633
- if (!(FXErrors.QuoteIssuanceDisabled.isInstance(provider.error))) {
634
- throw (provider.error);
662
+ }
663
+ const retval = [];
664
+ for (const quoteOrEstimate of quotesAndEstimates) {
665
+ if (!quoteOrEstimate.quote) {
666
+ continue;
667
+ }
668
+ retval.push(quoteOrEstimate.quote);
669
+ estimateProviderIDs.delete(quoteOrEstimate.provider.providerID);
670
+ }
671
+ const estimates = await this.getEstimates(request, options, {
672
+ ...sharedCriteria,
673
+ providerIDs: Array.from(estimateProviderIDs).map(function (id) {
674
+ return (String(id));
675
+ })
676
+ });
677
+ if (estimates !== null) {
678
+ retval.push(...estimates);
679
+ }
680
+ if (retval.length === 0) {
681
+ return (null);
682
+ }
683
+ return (retval);
684
+ }
685
+ async getPrices(input) {
686
+ const priceInAsset = input.priceIn ?? 'USD';
687
+ const retval = new Map();
688
+ await Promise.all(input.assets.map(async (asset) => {
689
+ let conversionValue;
690
+ if (input.conversionValue !== undefined) {
691
+ if (typeof input.conversionValue === 'function') {
692
+ conversionValue = await input.conversionValue(asset);
693
+ }
694
+ else {
695
+ conversionValue = input.conversionValue;
635
696
  }
636
- const estimate = await provider.provider.getEstimate();
637
- return (new KeetaFXAnchorEstimateWithProvider(provider.provider, estimate));
697
+ }
698
+ else {
699
+ conversionValue = 1n;
700
+ }
701
+ const estimates = await this.getEstimates({
702
+ from: asset,
703
+ to: priceInAsset,
704
+ amount: conversionValue,
705
+ affinity: input.conversionAffinity ?? 'from'
706
+ });
707
+ if (estimates === null || estimates.length === 0) {
708
+ retval.set(asset, null);
709
+ }
710
+ else {
711
+ const convertedAmountSum = estimates.reduce(function (sum, estimate) {
712
+ return (sum + estimate.estimate.convertedAmount);
713
+ }, 0n);
714
+ const averageConvertedAmount = Number(convertedAmountSum) / estimates.length;
715
+ retval.set(asset, {
716
+ value: conversionValue,
717
+ averageConvertedAmount,
718
+ providerEstimates: estimates
719
+ });
638
720
  }
639
721
  }));
640
- const filtered = results.filter(function (result) {
641
- return (result.status === 'fulfilled');
642
- }).map(function (result) {
643
- return (result.value);
644
- });
645
- return (filtered);
722
+ return (retval);
646
723
  }
647
724
  /** @internal */
648
725
  _internals(accessToken) {