@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.
- package/client/index.d.ts +6 -0
- package/client/index.d.ts.map +1 -1
- package/client/index.js +7 -0
- package/client/index.js.map +1 -1
- package/lib/certificates.js +2 -2
- package/lib/certificates.js.map +1 -1
- package/lib/resolver.d.ts +45 -3
- package/lib/resolver.d.ts.map +1 -1
- package/lib/resolver.js +908 -398
- package/lib/resolver.js.map +1 -1
- package/lib/utils/json.d.ts +4 -5
- package/lib/utils/json.d.ts.map +1 -1
- package/lib/utils/json.js +4 -163
- package/lib/utils/json.js.map +1 -1
- package/npm-shrinkwrap.json +5 -5
- package/package.json +2 -2
- package/services/asset-movement/client.d.ts +2 -5
- package/services/asset-movement/client.d.ts.map +1 -1
- package/services/asset-movement/client.js +1 -2
- package/services/asset-movement/client.js.map +1 -1
- package/services/asset-movement/common.d.ts +56 -82
- package/services/asset-movement/common.d.ts.map +1 -1
- package/services/asset-movement/common.js +18314 -8000
- package/services/asset-movement/common.js.map +1 -1
- package/services/asset-movement/lib/data/addresses/bank-account/card.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/bank-account/card.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/card.js +34 -0
- package/services/asset-movement/lib/data/addresses/bank-account/card.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/clabe.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/bank-account/clabe.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/clabe.js +22 -0
- package/services/asset-movement/lib/data/addresses/bank-account/clabe.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.js +43 -0
- package/services/asset-movement/lib/data/addresses/bank-account/iban-swift.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/index.generated.d.ts +15 -0
- package/services/asset-movement/lib/data/addresses/bank-account/index.generated.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/index.generated.js +16 -0
- package/services/asset-movement/lib/data/addresses/bank-account/index.generated.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/interac.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/bank-account/interac.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/interac.js +39 -0
- package/services/asset-movement/lib/data/addresses/bank-account/interac.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/pix.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/bank-account/pix.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/pix.js +31 -0
- package/services/asset-movement/lib/data/addresses/bank-account/pix.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/us.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/bank-account/us.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/bank-account/us.js +37 -0
- package/services/asset-movement/lib/data/addresses/bank-account/us.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/airtel-money.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/bkash.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/easy-paisa.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/finja-wallet.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.d.ts +27 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.js +28 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/index.generated.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/jazz-cash.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/mtn-mobile-money.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/nagad.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/naya-pay.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.js +19 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/paypal.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/rocket.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.js +7 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/sada-pay.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.d.ts +4 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.js +17 -0
- package/services/asset-movement/lib/data/addresses/mobile-wallet/venmo.js.map +1 -0
- package/services/asset-movement/lib/data/addresses/types.generated.d.ts +1590 -0
- package/services/asset-movement/lib/data/addresses/types.generated.d.ts.map +1 -0
- package/services/asset-movement/lib/data/addresses/types.generated.js +1895 -0
- package/services/asset-movement/lib/data/addresses/types.generated.js.map +1 -0
- package/services/asset-movement/lib/data/json-schema.d.ts +64 -0
- package/services/asset-movement/lib/data/json-schema.d.ts.map +1 -0
- package/services/asset-movement/lib/data/json-schema.js +2 -0
- package/services/asset-movement/lib/data/json-schema.js.map +1 -0
- package/services/asset-movement/lib/data/scripts/generator.d.ts +2 -0
- package/services/asset-movement/lib/data/scripts/generator.d.ts.map +1 -0
- package/services/asset-movement/lib/data/scripts/generator.js +140 -0
- package/services/asset-movement/lib/data/scripts/generator.js.map +1 -0
- package/services/asset-movement/lib/data/types.d.ts +23 -0
- package/services/asset-movement/lib/data/types.d.ts.map +1 -0
- package/services/asset-movement/lib/data/types.js +120 -0
- package/services/asset-movement/lib/data/types.js.map +1 -0
- package/services/asset-movement/lib/location.d.ts +11 -4
- package/services/asset-movement/lib/location.d.ts.map +1 -1
- package/services/asset-movement/lib/location.generated.d.ts +2 -1
- package/services/asset-movement/lib/location.generated.d.ts.map +1 -1
- package/services/asset-movement/lib/location.generated.js +15 -3
- package/services/asset-movement/lib/location.generated.js.map +1 -1
- package/services/asset-movement/lib/location.js +13 -1
- package/services/asset-movement/lib/location.js.map +1 -1
- package/services/fx/client.d.ts +17 -2
- package/services/fx/client.d.ts.map +1 -1
- package/services/fx/client.js +153 -76
- package/services/fx/client.js.map +1 -1
- package/services/fx/common.d.ts +11 -1
- package/services/fx/common.d.ts.map +1 -1
- package/services/fx/common.js +32 -10
- package/services/fx/common.js.map +1 -1
- package/services/fx/server.d.ts +37 -11
- package/services/fx/server.d.ts.map +1 -1
- package/services/fx/server.js +169 -92
- package/services/fx/server.js.map +1 -1
- package/services/notification/client.d.ts +78 -0
- package/services/notification/client.d.ts.map +1 -0
- package/services/notification/client.js +499 -0
- package/services/notification/client.js.map +1 -0
- package/services/notification/common.d.ts +179 -0
- package/services/notification/common.d.ts.map +1 -0
- package/services/notification/common.generated.d.ts +17 -0
- package/services/notification/common.generated.d.ts.map +1 -0
- package/services/notification/common.generated.js +733 -0
- package/services/notification/common.generated.js.map +1 -0
- package/services/notification/common.js +139 -0
- package/services/notification/common.js.map +1 -0
- package/services/notification/server.d.ts +39 -0
- package/services/notification/server.d.ts.map +1 -0
- package/services/notification/server.js +222 -0
- package/services/notification/server.js.map +1 -0
- package/services/storage/client.d.ts +11 -1
- package/services/storage/client.d.ts.map +1 -1
- package/services/storage/client.js +28 -6
- package/services/storage/client.js.map +1 -1
- package/services/storage/clients/contacts.d.ts.map +1 -1
- package/services/storage/clients/contacts.generated.js +1235 -338
- package/services/storage/clients/contacts.generated.js.map +1 -1
- package/services/storage/clients/contacts.js +2 -1
- package/services/storage/clients/contacts.js.map +1 -1
- package/services/storage/clients/icon.d.ts +29 -0
- package/services/storage/clients/icon.d.ts.map +1 -0
- package/services/storage/clients/icon.js +34 -0
- package/services/storage/clients/icon.js.map +1 -0
- package/services/storage/common.d.ts +14 -0
- package/services/storage/common.d.ts.map +1 -1
- package/services/storage/common.js.map +1 -1
- package/services/storage/test-utils.d.ts +15 -1
- package/services/storage/test-utils.d.ts.map +1 -1
- package/services/storage/test-utils.js +60 -0
- package/services/storage/test-utils.js.map +1 -1
- package/services/username/common.generated.js +38 -4
- 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
|
-
|
|
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 = '
|
|
55
|
-
export type
|
|
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":"
|
|
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;
|
|
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 => "
|
|
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) => "
|
|
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"]}
|
package/services/fx/client.d.ts
CHANGED
|
@@ -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?:
|
|
160
|
-
getEstimates(request: ConversionInput, options?:
|
|
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":"AAAA,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EACX,UAAU,IAAI,kBAAkB,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAyB,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAI1G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAQ9D,OAAO,KAAK,EACX,eAAe,EACf,wBAAwB,EAExB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,KAAK,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;AAEhD,KAAK,cAAc,GAAG;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;CACnD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACvC;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD;;;;OAIG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;CACnD,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC;AAO3F,KAAK,uBAAuB,GAAG;KAC7B,SAAS,IAAI,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KAAE,KAAK,GAAG;CACvI,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACzB,UAAU,EAAE;SACV,SAAS,IAAI,MAAM,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;KACzF,CAAC;IACF,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;CACrE,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/fx/client.ts"],"names":[],"mappings":"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"}
|
package/services/fx/client.js
CHANGED
|
@@ -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
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
191
|
-
throw (
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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,
|
|
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.
|
|
584
|
-
|
|
585
|
-
|
|
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
|
|
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,
|
|
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
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
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
|
-
|
|
633
|
-
|
|
634
|
-
|
|
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
|
-
|
|
637
|
-
|
|
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
|
-
|
|
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) {
|