@keetanetwork/anchor 0.0.67 → 0.0.69
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/lib/chaining.d.ts +12 -0
- package/lib/chaining.d.ts.map +1 -1
- package/lib/chaining.js +55 -5
- package/lib/chaining.js.map +1 -1
- package/lib/resolver.js +30 -30
- package/npm-shrinkwrap.json +10 -10
- package/package.json +2 -2
- package/services/asset-movement/client.d.ts +4 -1
- package/services/asset-movement/client.d.ts.map +1 -1
- package/services/asset-movement/client.js +22 -0
- package/services/asset-movement/client.js.map +1 -1
- package/services/asset-movement/common.d.ts +1 -1
- package/services/asset-movement/common.d.ts.map +1 -1
- package/services/asset-movement/common.generated.js +86 -86
- package/services/asset-movement/common.generated.js.map +1 -1
- package/services/asset-movement/common.js.map +1 -1
- package/services/fx/client.d.ts +3 -2
- package/services/fx/client.d.ts.map +1 -1
- package/services/fx/client.js +16 -1
- package/services/fx/client.js.map +1 -1
- package/services/storage/clients/contacts.generated.js +3 -3
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keetanetwork/anchor",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.69",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@keetanetwork/anchor",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.69",
|
|
10
10
|
"license": "SEE LICENSE IN LICENSE",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@keetanetwork/currency-info": "1.2.5",
|
|
13
|
-
"@keetanetwork/keetanet-client": "0.18.
|
|
13
|
+
"@keetanetwork/keetanet-client": "0.18.1",
|
|
14
14
|
"typia": "9.5.0"
|
|
15
15
|
},
|
|
16
16
|
"engines": {
|
|
@@ -185,8 +185,8 @@
|
|
|
185
185
|
"license": "ISC"
|
|
186
186
|
},
|
|
187
187
|
"node_modules/@keetanetwork/keetanet-client": {
|
|
188
|
-
"version": "0.18.
|
|
189
|
-
"integrity": "sha512-
|
|
188
|
+
"version": "0.18.1",
|
|
189
|
+
"integrity": "sha512-ePGSqX9hHUWw2tsEgWeHukFDSck45B0GVJBpRqx18PYVGB/7XRXz6HVCmL+Oq9V2sC1MDx6Ttermq89nBZeIRQ==",
|
|
190
190
|
"license": "see LICENSE",
|
|
191
191
|
"dependencies": {
|
|
192
192
|
"secp256k1": "5.0.1"
|
|
@@ -224,8 +224,8 @@
|
|
|
224
224
|
"optional": true
|
|
225
225
|
},
|
|
226
226
|
"node_modules/@protobufjs/eventemitter": {
|
|
227
|
-
"version": "1.1.
|
|
228
|
-
"integrity": "sha512-
|
|
227
|
+
"version": "1.1.1",
|
|
228
|
+
"integrity": "sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==",
|
|
229
229
|
"license": "BSD-3-Clause",
|
|
230
230
|
"optional": true
|
|
231
231
|
},
|
|
@@ -1687,8 +1687,8 @@
|
|
|
1687
1687
|
}
|
|
1688
1688
|
},
|
|
1689
1689
|
"node_modules/protobufjs": {
|
|
1690
|
-
"version": "7.6.
|
|
1691
|
-
"integrity": "sha512-
|
|
1690
|
+
"version": "7.6.1",
|
|
1691
|
+
"integrity": "sha512-4K0myLaWL5EteuSAro91EGFgcfVgxb64Jx+7oDAY6GOkXD4M69yuSEljNcInGVCA5sOPxmZ/EqDLj2x0Q0+Ygg==",
|
|
1692
1692
|
"hasInstallScript": true,
|
|
1693
1693
|
"license": "BSD-3-Clause",
|
|
1694
1694
|
"optional": true,
|
|
@@ -1696,7 +1696,7 @@
|
|
|
1696
1696
|
"@protobufjs/aspromise": "^1.1.2",
|
|
1697
1697
|
"@protobufjs/base64": "^1.1.2",
|
|
1698
1698
|
"@protobufjs/codegen": "^2.0.5",
|
|
1699
|
-
"@protobufjs/eventemitter": "^1.1.
|
|
1699
|
+
"@protobufjs/eventemitter": "^1.1.1",
|
|
1700
1700
|
"@protobufjs/fetch": "^1.1.1",
|
|
1701
1701
|
"@protobufjs/float": "^1.0.2",
|
|
1702
1702
|
"@protobufjs/inquire": "^1.1.2",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keetanetwork/anchor",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.69",
|
|
4
4
|
"description": "KeetaNetwork Network Anchor",
|
|
5
5
|
"main": "client/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"sideEffects": false,
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@keetanetwork/currency-info": "1.2.5",
|
|
27
|
-
"@keetanetwork/keetanet-client": "0.18.
|
|
27
|
+
"@keetanetwork/keetanet-client": "0.18.1",
|
|
28
28
|
"typia": "9.5.0"
|
|
29
29
|
},
|
|
30
30
|
"engines": {
|
|
@@ -7,7 +7,7 @@ import Resolver from "../../lib/resolver.js";
|
|
|
7
7
|
import type { ServiceMetadata, ServiceMetadataAuthenticationType, SharedLookupCriteria } from '../../lib/resolver.ts';
|
|
8
8
|
import type { BrandedString } from '../../lib/utils/brand.js';
|
|
9
9
|
import type { ExtractOk } from '../../lib/http-server/common.js';
|
|
10
|
-
import { type SharedAnchorMetadataLegalExtension } from '../../lib/metadata.types.js';
|
|
10
|
+
import { type SharedAnchorMetadataLegalExtension, type AnchorMetadataLegalField } from '../../lib/metadata.types.js';
|
|
11
11
|
import type { ExternalChainAsset } from '../../lib/asset.js';
|
|
12
12
|
/**
|
|
13
13
|
* The configuration options for the Asset Movement (Inbound/Outbound) Anchor client.
|
|
@@ -138,6 +138,7 @@ export declare class KeetaAssetMovementAnchorProvider extends KeetaAssetMovement
|
|
|
138
138
|
listTransactions(request: KeetaAssetMovementAnchorlistTransactionsClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse>>;
|
|
139
139
|
shareKYCAttributes(request: KeetaAssetMovementAnchorShareKYCClientRequest, awaitOptions?: AwaitPromiseURLOptions): Promise<void>;
|
|
140
140
|
getAssetMetadataForLocation(location: AssetLocationLike, asset: ExternalChainAsset): AnchorTokenLocationMetadata | null;
|
|
141
|
+
getLegalDisclaimers(): NonNullable<AnchorMetadataLegalField['disclaimers']> | null;
|
|
141
142
|
}
|
|
142
143
|
declare class KeetaAssetMovementAnchorClient extends KeetaAssetMovementAnchorBase {
|
|
143
144
|
#private;
|
|
@@ -146,6 +147,8 @@ declare class KeetaAssetMovementAnchorClient extends KeetaAssetMovementAnchorBas
|
|
|
146
147
|
constructor(client: KeetaNetUserClient, config?: KeetaAssetMovementClientConfig);
|
|
147
148
|
getProvidersForTransfer(request: ProviderSearchInput, shared?: SharedLookupCriteria): Promise<KeetaAssetMovementAnchorProvider[] | null>;
|
|
148
149
|
getProviderByID(providerID: string): Promise<KeetaAssetMovementAnchorProvider | null>;
|
|
150
|
+
getProviderLegalDisclaimersByID(providerID: string): Promise<Exclude<AnchorMetadataLegalField['disclaimers'], undefined> | null>;
|
|
151
|
+
getProviderByAccount(account: NonNullable<SharedLookupCriteria['accounts']>[number]): Promise<KeetaAssetMovementAnchorProvider | null>;
|
|
149
152
|
}
|
|
150
153
|
export default KeetaAssetMovementAnchorClient;
|
|
151
154
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/asset-movement/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EACX,UAAU,IAAI,kBAAkB,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACX,iDAAiD,EAEjD,0DAA0D,EAC1D,uBAAuB,EACvB,mBAAmB,EAEnB,oEAAoE,EACpE,+DAA+D,EAC/D,qDAAqD,EAErD,gFAAgF,EAEhF,2EAA2E,EAC3E,8EAA8E,EAG9E,qDAAqD,EACrD,kEAAkE,EAClE,6BAA6B,EAC7B,sDAAsD,EACtD,6CAA6C,EAG7C,6DAA6D,EAC7D,uCAAuC,EACvC,gDAAgD,EAChD,oDAAoD,EACpD,2BAA2B,EAC3B,4BAA4B,EAE5B,iBAAiB,EAEjB,gDAAgD,EAChD,qDAAqD,EAGrD,MAAM,aAAa,CAAC;AAiCrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,iCAAiC,EAA2B,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE/I,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,iCAAiC,CAAC;AAMlF,OAAO,EAA6C,KAAK,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/asset-movement/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EACX,UAAU,IAAI,kBAAkB,EAChC,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACX,iDAAiD,EAEjD,0DAA0D,EAC1D,uBAAuB,EACvB,mBAAmB,EAEnB,oEAAoE,EACpE,+DAA+D,EAC/D,qDAAqD,EAErD,gFAAgF,EAEhF,2EAA2E,EAC3E,8EAA8E,EAG9E,qDAAqD,EACrD,kEAAkE,EAClE,6BAA6B,EAC7B,sDAAsD,EACtD,6CAA6C,EAG7C,6DAA6D,EAC7D,uCAAuC,EACvC,gDAAgD,EAChD,oDAAoD,EACpD,2BAA2B,EAC3B,4BAA4B,EAE5B,iBAAiB,EAEjB,gDAAgD,EAChD,qDAAqD,EAGrD,MAAM,aAAa,CAAC;AAiCrB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,iCAAiC,EAA2B,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE/I,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,iCAAiC,CAAC;AAMlF,OAAO,EAA6C,KAAK,kCAAkC,EAAE,KAAK,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAChK,OAAO,KAAK,EAAE,kBAAkB,EAA6B,MAAM,oBAAoB,CAAC;AAIxF;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC5C;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;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,CAAC;AAE1E;;GAEG;AACH,KAAK,UAAU,GAAG,aAAa,CAAC,yBAAyB,CAAC,CAAC;AAgB3D;;GAEG;AACH,KAAK,kCAAkC,GAAG;KACxC,SAAS,IAAI,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE;QACtG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SAAE,KAAK,GAAG,CAAC;QAClD,OAAO,EAAE;YACR,cAAc,EAAE,iCAAiC,CAAC;SAClD,CAAC;KACF;CACD,CAAC;AAEF;;GAEG;AACH,UAAU,6BAA8B,SAAQ,kCAAkC;IACjF,UAAU,EAAE;SACV,SAAS,IAAI,MAAM,kCAAkC,GAAG,OAAO,CAAC,kCAAkC,CAAC,SAAS,CAAC,CAAC;KAC/G,CAAC;IAEF,eAAe,EAAE,uBAAuB,EAAE,CAAC;IAC3C,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;CAChD;AAqPD,UAAU,kCAAkC;IAC3C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,cAAM,4BAA4B;IACjC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;gBAElC,MAAM,EAAE,kCAAkC;CAItD;AAED,KAAK,4BAA4B,GAAG,SAAS,CAAC,gDAAgD,CAAC,GAAG,SAAS,CAAC,gDAAgD,CAAC,CAAC;AAE9J,UAAU,kDAAkD,CAAC,OAAO,SAAS,qDAAqD,GAAG,qDAAqD,EAAE,QAAQ,SAAS,4BAA4B;IACxO,QAAQ,EAAE,gCAAgC,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACnB;AAED,uBAAe,8BAA8B,CAAC,OAAO,SAAS,qDAAqD,GAAG,qDAAqD,EAAE,QAAQ,SAAS,4BAA4B;IACzN,QAAQ,CAAC,QAAQ,EAAE,gCAAgC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAE5B,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,SAAS,qDAAqD,GAAG,KAAK,GAAG,IAAI,CAAC;gBAEzG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,kDAAkD,CAAC,OAAO,EAAE,QAAQ,CAAC;IAMlH,IAAI,YAAY,IAAI,QAAQ,CAAC,oBAAoB,CAAC,CAEjD;CACD;AAED;;GAEG;AACH,cAAM,0BAA2B,SAAQ,8BAA8B,CAAC,qDAAqD,EAAE,SAAS,CAAC,gDAAgD,CAAC,CAAC;IAC1L,QAAQ,CAAC,YAAY,QAAkB;IAEvC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAEK,iBAAiB,IAAI,OAAO,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC;IAK1F,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,oDAAoD,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC;CAIrK;AAED,cAAM,mCAAoC,SAAQ,8BAA8B,CAAC,qDAAqD,EAAE,SAAS,CAAC,gDAAgD,CAAC,CAAC;IACnM,QAAQ,CAAC,YAAY,OAAiB;IAEhC,cAAc,CAAC,SAAS,CAAC,EAAE;QAChC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,IAAI,CAAC,EAAE,gBAAgB,GAAG,WAAW,CAAC,CAAC,CAAC;KAC/G,GAAG,OAAO,CAAC,0BAA0B,CAAC;CAkBvC;AAED,UAAU,sBAAsB;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,qBAAa,gCAAiC,SAAQ,4BAA4B;;IACjF,QAAQ,CAAC,WAAW,EAAE,6BAA6B,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;gBAE5C,WAAW,EAAE,6BAA6B,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,8BAA8B;IAyBhH,oBAAoB,CAAC,aAAa,EAAE,MAAM,kCAAkC,GAAG,OAAO,CAAC,OAAO,CAAC;IAuM/F,gBAAgB,CAAC,OAAO,EAAE,qDAAqD,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAIrH,gBAAgB,CAAC,OAAO,EAAE,qDAAqD,GAAG,OAAO,CAAC,mCAAmC,CAAC;IAI9H,eAAe,CAAC,OAAO,EAAE,oDAAoD,GAAG,OAAO,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC;IAyBrJ,iBAAiB,CAAC,OAAO,EAAE,sDAAsD,GAAG,OAAO,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC;IAezJ,oCAAoC,CAAC,OAAO,EAAE,gFAAgF,GAAG,OAAO,CAAC,SAAS,CAAC,2EAA2E,CAAC,CAAC;IA8BhO,kCAAkC,CAAC,OAAO,EAAE,8EAA8E,GAAG,OAAO,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC;IA0C3M,iCAAiC,CAAC,OAAO,EAAE,+DAA+D,GAAG,OAAO,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC;IAyC3L,8BAA8B,CAAC,OAAO,EAAE,kEAAkE,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,6BAA6B,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,CAAC;IA2BpL,uBAAuB,CAAC,OAAO,EAAE,6DAA6D,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,uCAAuC,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,CAAC;IAkClL,gBAAgB,CAAC,OAAO,EAAE,qDAAqD,GAAG,OAAO,CAAC,SAAS,CAAC,oEAAoE,CAAC,CAAC;IAuG1K,kBAAkB,CAAC,OAAO,EAAE,6CAA6C,EAAE,YAAY,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDtI,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,GAAG,2BAA2B,GAAG,IAAI;IA6BvH,mBAAmB,IAAI,WAAW,CAAC,wBAAwB,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI;CAQlF;AAED,cAAM,8BAA+B,SAAQ,4BAA4B;;IACxE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAMR,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAE,8BAAmC;IAqC7E,uBAAuB,CAAC,OAAO,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,gCAAgC,EAAE,GAAG,IAAI,CAAC;IAIxI,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC;IAKrF,+BAA+B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IAchI,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,gCAAgC,GAAG,IAAI,CAAC;CAiB5I;AAED,eAAe,8BAA8B,CAAC"}
|
|
@@ -888,6 +888,13 @@ export class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBa
|
|
|
888
888
|
}
|
|
889
889
|
return (assetMetadata);
|
|
890
890
|
}
|
|
891
|
+
getLegalDisclaimers() {
|
|
892
|
+
const disclaimers = this.serviceInfo.legal?.disclaimers;
|
|
893
|
+
if (!disclaimers) {
|
|
894
|
+
return (null);
|
|
895
|
+
}
|
|
896
|
+
return (disclaimers);
|
|
897
|
+
}
|
|
891
898
|
}
|
|
892
899
|
class KeetaAssetMovementAnchorClient extends KeetaAssetMovementAnchorBase {
|
|
893
900
|
resolver;
|
|
@@ -939,6 +946,21 @@ class KeetaAssetMovementAnchorClient extends KeetaAssetMovementAnchorBase {
|
|
|
939
946
|
const providers = await this.#lookup({}, { providerIDs: [providerID] });
|
|
940
947
|
return (providers?.[0] ?? null);
|
|
941
948
|
}
|
|
949
|
+
async getProviderLegalDisclaimersByID(providerID) {
|
|
950
|
+
const provider = await this.getProviderByID(providerID);
|
|
951
|
+
if (!provider) {
|
|
952
|
+
return (null);
|
|
953
|
+
}
|
|
954
|
+
const disclaimers = provider.serviceInfo.legal?.disclaimers;
|
|
955
|
+
if (!disclaimers) {
|
|
956
|
+
return (null);
|
|
957
|
+
}
|
|
958
|
+
return (disclaimers);
|
|
959
|
+
}
|
|
960
|
+
async getProviderByAccount(account) {
|
|
961
|
+
const providers = await this.#lookup({}, { accounts: [account] });
|
|
962
|
+
return (providers?.[0] ?? null);
|
|
963
|
+
}
|
|
942
964
|
/** @internal */
|
|
943
965
|
_internals(accessToken) {
|
|
944
966
|
if (accessToken !== KeetaAssetMovementAnchorClientAccessToken) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/asset-movement/client.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AA2CrD,OAAO,EACN,sCAAsC,EACtC,4BAA4B,EAC5B,wCAAwC,EACxC,kCAAkC,EAClC,wFAAwF,EACxF,6EAA6E,EAC7E,sFAAsF,EACtF,uEAAuE,EACvE,4DAA4D,EAC5D,8DAA8D,EAC9D,6DAA6D,EAC7D,0EAA0E,EAC1E,qEAAqE,EACrE,6DAA6D,EAC7D,qDAAqD,EACrD,2EAA2E,EAC3E,4DAA4D,EAC5D,iDAAiD,EACjD,mDAAmD,EACnD,kDAAkD,EAClD,+DAA+D,EAC/D,0DAA0D,EAC1D,sEAAsE,EACtE,0CAA0C,EAC1C,yBAAyB,EACzB,oBAAoB,EACpB,6BAA6B,EAC7B,kDAAkD,EAClD,6DAA6D,EAC7D,MAAM,EACN,MAAM,aAAa,CAAC;AAErB,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAE7C,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,yCAAyC,EAA2C,MAAM,6BAA6B,CAAC;AA6CjI;;GAEG;AACH,4DAA4D;AAE5D,MAAM,yCAAyC,GAAG,MAAM,CAAC,2CAA2C,CAAC,CAAC;AAEtG,SAAS,gCAAgC,CAAmB,GAAM;IACjE,yEAAyE;IACzE,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAA6B,CAAC;AACxD,CAAC;AAED,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAAgD,CAAC;AAwBnF,CAAC;AAUF,SAAS,WAAW,CAAC,GAAuB;IAC3C,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACvC,MAAK,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAE/B,OAAM,CAAC,SAAS,CAAC,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAkB,EAAE,OAA4B,EAAE,MAA6B,EAAE,MAAe;IAC3H,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,wCAAwC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,4BAA4B,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,4BAA4B,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE;QACvD,GAAG,KAAK;QACR,GAAG,IAAI;QACP,GAAG,EAAE;QACL,GAAG,IAAI;KACP,EAAE,MAAM,CAAC,CAAC;IAEX,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAM,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,WAAU,CAAC,EAAE,EAAE,WAAW,CAAC;QACxF,MAAM,uBAAuB,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAE5G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC7C,MAAK,CAAC,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,eAAe,GAAG,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,uBAAuB,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACJ,eAAe,CAAC,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,gEAAgE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAClH,CAAC;QACF,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;YAC1C,IAAI,mBAAmB,CAAC;YACxB,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBAClC,mBAAmB,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACpE,CAAC;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC1B,OAAM,CAAC,SAAS,CAAC,CAAC;YACnB,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAE,QAAQ,EAAE,WAAW,CAAE,EAAE,EAAE;gBACzH,MAAM,cAAc,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;gBAE3D,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrC,MAAK,CAAC,IAAI,KAAK,CAAC,kDAAkD,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3F,CAAC;gBAED,IAAI,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3C,MAAK,CAAC,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC,CAAE;gBAClF,CAAC;gBAED,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;gBAE5C,iFAAiF;gBACjF,yEAAyE;gBACzE,MAAM,cAAc,GAAG,4BAA4B,CAAC,cAAc,CAAmD,CAAC;gBAEtH,IAAI,oBAAoB,GAAG,SAAS,CAAC;gBACrC,IAAI,WAAW,EAAE,CAAC;oBACjB,oBAAoB,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACpD,CAAC;gBAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC3B,OAAM,CAAC,IAAI,CAAC,CAAC;gBACd,CAAC;gBAED,IAAI,MAES,CAAC;gBAEd,IAAI,oBAAoB,CAAC,MAAM,EAAE,CAAC;oBACjC,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAChE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAE,OAAO,EAAE,aAAa,CAAE,EAAE,EAAE;wBACpH,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;4BAC/C,MAAK,CAAC,IAAI,KAAK,CAAC,mCAAmC,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC9E,CAAC;wBAED,IAAI,gBAAgB,CAAC;wBACrB,IAAI,aAAa,EAAE,CAAC;4BACnB,gBAAgB,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;wBAClD,CAAC;wBAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;4BACvB,OAAM,CAAC,IAAI,CAAC,CAAC;wBACd,CAAC;wBAED,MAAM,2BAA2B,GAAG;4BACnC,WAAW,EAAE,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;4BAC3D,MAAM,EAAE,MAAM,gBAAgB,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;4BACjD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC;4BACnD,aAAa,EAAE,MAAM,gBAAgB,CAAC,aAAa,EAAE,CAAC,WAAW,CAAC;yBAClE,CAAC;wBAEF,IAAI,CAAC,6BAA6B,CAAC,2BAA2B,CAAC,EAAE,CAAC;4BACjE,MAAK,CAAC,IAAI,KAAK,CAAC,uCAAuC,OAAO,kBAAkB,SAAS,EAAE,CAAC,CAAC,CAAC;wBAC/F,CAAC;wBAED,OAAO,CAAE,OAAO,EAAE,2BAA2B,CAAY,CAAC;oBAC3D,CAAC,CAAC,CAAC,CAAC;oBAEJ,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;wBACrC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;4BAClC,MAAM,EAAE,KAAK,CAAC,kCAAkC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;4BACjE,SAAS;wBACV,CAAC;wBAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;4BACnB,SAAS;wBACV,CAAC;wBAED,IAAI,CAAC,MAAM,EAAE,CAAC;4BACb,MAAM,GAAG,EAAE,CAAC;wBACb,CAAC;wBAGD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3C,CAAC;gBACF,CAAC;gBAED,OAAO;oBACN,cAAc;oBACd;wBACC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC7B;iBACS,CAAA;YACZ,CAAC,CAAC,CAAC,CAAC;YAEJ,IAAI,MAAgD,CAAC;YACrD,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAClC,MAAM,EAAE,KAAK,CAAC,qCAAqC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACpE,SAAS;gBACV,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBACnB,SAAS;gBACV,CAAC;gBAED,IAAI,CAAC,MAAM,EAAE,CAAC;oBACb,MAAM,GAAG,EAAE,CAAC;gBACb,CAAC;gBAED,uBAAuB;gBACvB,aAAa;gBACb,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,OAAM,CAAC,SAAS,CAAC,CAAC;YACnB,CAAC;YAED,OAAM,CAAC,MAAM,CAAC,CAAC;QAChB,CAAC,CAAC,EAAE,CAAC;QAEL,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1D,MAAM,mBAAmB,GAAgD,EAAE,CAAC;QAC5E,KAAK,MAAM,CAAE,GAAG,EAAE,SAAS,CAAE,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC7B,SAAS;YACV,CAAC;YAED,MAAM,CAAC,cAAc,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBAC/C,GAAG,EAAE,KAAK;oBACT,MAAM,YAAY,GAAG,6BAA6B,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC;oBAE9G,IAAI,GAAG,CAAC;oBACR,IAAI,cAAc,GAAsC;wBACvD,IAAI,EAAE,MAAM;wBACZ,MAAM,EAAE,eAAe;qBACvB,CAAC;oBAEF,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;wBACtC,GAAG,GAAG,YAAY,CAAC;oBACpB,CAAC;yBAAM,CAAC;wBACP,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;wBACvB,IAAI,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;4BAC1C,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;wBACtD,CAAC;oBACF,CAAC;oBAED,OAAM,CAAC;wBACN,GAAG,EAAE,UAAS,MAAmC;4BAChD,IAAI,cAAc,CAAC;4BAEnB,IAAI,CAAC;gCACJ,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;4BAChC,CAAC;4BAAC,OAAO,KAAK,EAAE,CAAC;gCAChB,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,2DAA2D,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;gCAEvG,cAAc,GAAG,GAAG,CAAC;4BACtB,CAAC;4BAED,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;gCACnE,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,QAAQ,GAAG,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;4BAC1F,CAAC;4BAED,OAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;wBACrC,CAAC;wBACD,OAAO,EAAE,EAAE,cAAc,EAAE;qBAC3B,CAAC,CAAC;gBACJ,CAAC;gBACD,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE,IAAI;aAClB,CAAC,CAAC;QACJ,CAAC;QAED,OAAM,CAAC;YACN,yEAAyE;YACzE,EAA2B;YAC3B;gBACC,GAAG,CAAC,MAAM,yCAAyC,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBACnF,UAAU,EAAE,mBAAmB;gBAC/B,eAAe,EAAE,eAAe;gBAChC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjD;SACD,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1E,OAAM,CAAC,MAAM,CAAC,CAAC;AAChB,CAAC;AAOD,MAAM,4BAA4B;IACd,MAAM,CAAsB;IAC5B,MAAM,CAAqB;IAE9C,YAAY,MAA0C;QACrD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,CAAC;CACD;AAUD,MAAe,8BAA8B;IACnC,QAAQ,CAAmC;IAC3C,OAAO,CAAU;IACjB,QAAQ,CAAW;IAI5B,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAyE;QACjH,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,IAAI,YAAY;QACf,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;CACD;AAED;;GAEG;AACH,MAAM,0BAA2B,SAAQ,8BAAkJ;IACjL,YAAY,GAAG,KAAc,CAAC;IAEvC,IAAI,UAAU;QACb,OAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,iBAAiB;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,OAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAuE;QAC5F,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,OAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC;CACD;AAED,MAAM,mCAAoC,SAAQ,8BAAkJ;IAC1L,YAAY,GAAG,IAAa,CAAC;IAEtC,KAAK,CAAC,cAAc,CAAC,SAEpB;QACA,MAAM,EAAE,GAAG;YACV,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE;YAClB,GAAG,SAAS,EAAE,EAAE;SAChB,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;YACnB,MAAK,CAAC,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,OAAM,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAC3C,GAAG,IAAI,CAAC,OAAO;YACf,EAAE,EAAE;gBACH,GAAG,EAAE;gBACL,SAAS,EAAE,EAAE,CAAC,SAAS;aACvB;SACD,CAAC,CAAC,CAAC;IACL,CAAC;CACD;AAQD,MAAM,OAAO,gCAAiC,SAAQ,4BAA4B;IACxE,WAAW,CAAgC;IAC3C,UAAU,CAAa;IACf,MAAM,CAAiC;IAExD,YAAY,WAA0C,EAAE,UAAsB,EAAE,MAAsC;QACrH,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,yCAAyC,CAAC,CAAC;QACnF,KAAK,CAAC,aAAa,CAAC,CAAC;QAErB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,aAAuD,EAAE,MAAmC;QACnH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAK,CAAC,IAAI,MAAM,CAAC,qBAAqB,CAAC,EAAE,EAAE,2CAA2C,aAAa,YAAY,CAAC,CAAC,CAAC;QACnH,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YAChE,MAAK,CAAC,IAAI,KAAK,CAAC,sCAAsC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClG,CAAC;QAED,OAAM,CAAC;YACN,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YACzB,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc;SACrC,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,aAAuD;QACjF,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAC5C,OAAM,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,KAAK,YAAY,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBACnD,OAAM,CAAC,KAAK,CAAC,CAAC;YACf,CAAC;YAED,MAAK,CAAC,KAAK,CAAC,CAAC;QACd,CAAC;IACF,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,IAAa;QACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC/C,MAAK,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1C,MAAK,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,QAAQ,CAAC;QAEb,IAAI,WAAW,GAA4B,IAAI,CAAC;QAChD,IAAI,CAAC;YACJ,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,oDAAoD,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YACjB,OAAM,CAAC,WAAW,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACP,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACP,QAAQ,GAAG,eAAe,CAAC;YAC5B,CAAC;YAED,OAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;IAED,KAAK,CAAC,YAAY,CAIhB,KAUD;QACA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEjF,IAAI,iBAAiB,CAAC;QAEtB,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC1C,iBAAiB,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACP,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;QAChC,CAAC;QAED,IAAI,MAAmC,CAAC;QAExC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAK,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;gBAC1B,MAAK,CAAC,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC,CAAC;YAChF,CAAC;YAED,wHAAwH;YACxH,yEAAyE;YACzE,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,iBAAsC,CAAC,CAAC;YAE7E,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,MAAM,OAAO,GAA8B;YAC1C,QAAQ,EAAE,kBAAkB;SAC5B,CAAC;QACF,IAAI,IAAI,GAAoB,IAAI,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;YAC7C,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACP,IAAI,MAAM,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACpB,MAAK,CAAC,IAAI,KAAK,CAAC,iGAAiG,CAAC,CAAC,CAAC;gBACrH,CAAC;gBAED,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YACzG,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,MAAK,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;YAC3D,CAAC;QACF,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI;SACnC,CAAC,CAAC;QAEH,MAAM,sBAAsB,GAAY,MAAM,kBAAkB,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAC/C,MAAK,CAAC,IAAI,KAAK,CAAC,iDAAiD,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;QAED,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,CAAC;YAChC,MAAK,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,mIAAmI;QACnI,yEAAyE;QACzE,OAAO,sBAA0D,CAAC;IACnE,CAAC;IAID,KAAK,CAAC,2BAA2B,CAAC,QAAiB,EAAE,OAAsH;QAC1K,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,qDAAqD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEnG,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB;YAC5D,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,CAAC,IAAI;gBACpB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;gBAClC,OAAM,CAAC;oBACN,GAAG,IAAI;oBACP,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;oBACzB,IAAI,EAAE;wBACL,QAAQ,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC1D,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC/D;oBACD,EAAE,EAAE;wBACH,QAAQ,EAAE,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;wBACxD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC7E;oBACD,KAAK,EAAE,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC3D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9E,CAAC,CAAA;YACH,CAAC;YACD,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,6DAA6D,CAAC,CAAC,CAAC,6DAA6D;YACvJ,UAAU,CAAC,IAAI;gBACd,IAAI,QAAQ,EAAE,CAAC;oBACd,OAAM,CAAC,kDAAkD,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACP,OAAM,CAAC,kDAAkD,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClE,CAAC;YACF,CAAC;SACD,CAAC,CAAC;QAGH,IAAI,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAEnE,OAAM,CAAC,IAAI,mCAAmC,CAAC;gBAC9C,QAAQ,EAAE,IAAI;gBACd,OAAO;gBACP,QAAQ,EAAE,sBAAsB;aAChC,CAAC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,CAAC,IAAI,IAAI,sBAAsB,CAAC,EAAE,CAAC;gBACvC,MAAK,CAAC,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,0DAA0D,sBAAsB,CAAC,EAAE,EAAE,CAAC,CAAC;YAE1G,IAAI,CAAC,CAAC,WAAW,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClC,MAAK,CAAC,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC,CAAC;YAC3F,CAAC;YAED,OAAM,CAAC,IAAI,0BAA0B,CAAC;gBACrC,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE;oBACR,GAAG,OAAO;oBACV,EAAE,EAAE;wBACH,GAAG,OAAO,CAAC,EAAE;wBACb,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS;qBAC/B;iBACD;gBACD,QAAQ,EAAE,sBAAsB;aAChC,CAAC,CAAC,CAAC;QACL,CAAC;IACF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAA8D;QACpF,OAAM,CAAC,MAAM,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAA8D;QACpF,OAAM,CAAC,MAAM,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA6D;QAClF,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,qDAAqD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAEnG,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;QAEhC,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAGpD;YACD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,IAAI;YACV,aAAa,EAAE,CAAC,IAAsE,EAAE,EAAE;gBACzF,OAAM,CAAC,4DAA4D,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;YACvF,CAAC;YACD,UAAU,EAAE,iDAAiD;SAC7D,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,8DAA8D,sBAAsB,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1H,OAAM,CAAC,sBAAsB,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAA+D;QACtF,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtD,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,mBAAmB;YAC7B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE;YAC1B,aAAa,EAAE,GAAG,EAAE,CAAC,8DAA8D,CAAC,OAAO,CAAC;YAC5F,UAAU,EAAE,mDAAmD;SAC/D,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,iDAAiD,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAElF,OAAM,CAAC,sBAAsB,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,oCAAoC,CAAC,OAAyF;QACnI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,8DAA8D,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEjJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAIpC;YACD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,sCAAsC;YAChD,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,CAAC,IAAI;gBACpB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;gBAClC,OAAM,CAAC;oBACN,GAAG,IAAI;oBACP,QAAQ,EAAE,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACrD,KAAK,EAAE,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC3D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9E,CAAC,CAAC;YACJ,CAAC;YACD,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,wFAAwF;YACvG,UAAU,EAAE,6EAA6E;SACzF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,mEAAmE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAEnG,OAAM,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,kCAAkC,CAAC,OAAuF;QAC/H,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,mDAAmD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEtI,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAIpD;YACD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,oCAAoC;YAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,CAAC,IAAI;gBACpB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;gBAElC,MAAM,YAAY,GAAG;oBACpB,GAAG,IAAI;oBACP,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9E,CAAA;gBAED,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBACpB,OAAM,CAAC;wBACN,GAAG,YAAY;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;qBACf,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,OAAM,CAAC;wBACN,GAAG,YAAY;wBACf,QAAQ,EAAE,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC;wBACrD,KAAK,EAAE,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC;qBAC3D,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YACD,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,sFAAsF;YACrG,UAAU,EAAE,2EAA2E;SACvF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,iDAAiD,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEtG,OAAM,CAAC,sBAAsB,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,iCAAiC,CAAC,OAAwE;QAC/G,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,mDAAmD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEtI,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAIpD;YACD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,4BAA4B;YACtC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,CAAC,IAAI;gBACpB,MAAM,IAAI,GAAG;oBACZ,cAAc,EAAE,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC;oBACjE,KAAK,EAAE,wCAAwC,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC3D,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE;iBACnD,CAAC;gBAEX,IAAI,6BAA6B,IAAI,IAAI,EAAE,CAAC;oBAC3C,OAAM,CAAC;wBACN,GAAG,IAAI;wBACP,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;qBAC7D,CAAC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACP,OAAM,CAAC;wBACN,GAAG,IAAI;wBACP,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wBAC3C,mBAAmB,EAAE,4BAA4B,CAAC,IAAI,CAAC,mBAAmB,CAAC;qBAC3E,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YACD,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,uEAAuE;YACtF,UAAU,EAAE,4DAA4D;SACxE,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,iDAAiD,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAEtG,OAAM,CAAC,sBAAsB,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,8BAA8B,CAAC,OAA2E;QAC/G,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,oEAAoE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAElH,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,kCAAkC;YAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO;YACb,gBAAgB,CAAC,IAAI;gBACpB,OAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxF,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC;oBAClE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;iBAClE,CAAC,CAAC;YACJ,CAAC;YACD,aAAa,EAAE,0EAA0E;YACzF,UAAU,EAAE,+DAA+D;SAC3E,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,iEAAiE,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAExH,OAAM,CAAC;YACN,SAAS,EAAE,sBAAsB,CAAC,SAAS;YAC3C,KAAK,EAAE,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAAsE;QACnG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,oEAAoE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAElH,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,0BAA0B;YACpC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO;YACb,gBAAgB,CAAC,IAAI;gBACpB,OAAM,CAAC;oBACN,GAAG,IAAI;oBACP,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE;oBAC5D,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAS,UAAU;wBACxD,OAAM,CAAC;4BACN,GAAG,UAAU;4BACb,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,kCAAkC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;4BAC1F,cAAc,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,4BAA4B,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;4BAC/G,mBAAmB,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,4BAA4B,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS;yBAC9H,CAAC,CAAA;oBACH,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;iBACd,CAAC,CAAC;YACJ,CAAC;YACD,aAAa,EAAE,qEAAqE;YACpF,UAAU,EAAE,0DAA0D;SACtE,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,qEAAqE,EAAE,uDAAuD,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAErL,OAAM,CAAC;YACN,SAAS,EAAE,sBAAsB,CAAC,SAAS;YAC3C,KAAK,EAAE,MAAM,CAAC,sBAAsB,CAAC,KAAK,CAAC;SAC3C,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAA8D;QACpF,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,wDAAwD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE3I,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,YAAY,CAIpD;YACD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,kBAAkB;YAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,gBAAgB,CAAC,IAAI;gBACpB,OAAM,CAAC;oBACN,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE;oBAC5D,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACzD,QAAQ,EAAE,4BAA4B,CAAC,EAAE,CAAC,QAAQ,CAAC;wBACnD,GAAG,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;4BACtC,EAAE,yBAAyB,EAAE,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAC;4BAC7D,EAAE,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,EAAE,CAC3C;qBACD,CAAC,CAAC;oBACH,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBACjB,QAAQ,EAAE,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;wBAC1D,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;wBAClC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;qBACxF,CAAC,CAAC,CAAC,SAAS;oBACb,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;wBACb,QAAQ,EAAE,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC;wBACxD,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW;wBAChC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,kCAAkC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;qBACpF,CAAC,CAAC,CAAC,SAAS;iBACb,CAAC,CAAC;YACJ,CAAC;YACD,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,6DAA6D;YAC5E,UAAU,EAAE,sEAAsE;SAClF,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,oDAAoD,sBAAsB,CAAC,YAAY,EAAE,CAAC,CAAC;QAE9G,OAAM,CAAC,sBAAsB,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,OAAgC;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAEtD,OAAO,IAAI,EAAE,CAAC;YACb,IAAI,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;gBACnC,MAAM;YACP,CAAC;YAED,IAAI,QAAQ,CAAC;YAEb,IAAI,CAAC;gBACJ,QAAQ,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,mDAAmD,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAC;gBAC7G,MAAK,CAAC,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC7B,OAAO;YACR,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC7B,IAAI,SAAkB,CAAC;gBACvB,IAAI,CAAC;oBACJ,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACR,MAAK,CAAC,IAAI,KAAK,CAAC,+DAA+D,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACpG,CAAC;gBACD,MAAK,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;YAClD,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;gBACtC,MAAK,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;YACjE,CAAC;YAED,IAAI,YAAgC,CAAC;YACrC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC7D,IAAI,gBAAgB,EAAE,CAAC;gBAEtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;oBACtC,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACP,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAClD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;wBACtC,YAAY,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;oBACtD,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBACnB,YAAY,GAAG,OAAO,EAAE,qBAAqB,IAAI,IAAI,CAAC;YACvD,CAAC;YAED,MAAM,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtD,CAAC;IACF,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAsD,EAAE,YAAqC;QACrH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAItC;YACD,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,CAAC,gBAAgB,CAAC,IAAI;gBAC1B,IAAI,UAAU,CAAC;gBACf,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;oBACzC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACP,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACjE,CAAC;gBAED,OAAM,CAAC;oBACN,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE;oBAC3D,UAAU,EAAE,UAAU;oBACtB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE,CAAC,CAAC;YACJ,CAAC;YACD,IAAI,EAAE,OAAO;YACb,aAAa,EAAE,qDAAqD;YACpE,UAAU,EAAE,0CAA0C;SACtD,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAE7E,IAAI,UAAU,CAAC;YAEf,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC;gBAC/D,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACP,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;YAClC,CAAC;YAED,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,EAAE,GAAG,YAAY,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnD,CAAC;IAED,2BAA2B,CAAC,QAA2B,EAAE,KAAyB;QACjF,MAAM,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAC3D,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvB,OAAM,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC;QAE9D,IAAI,CAAC,CAAC,cAAc,IAAI,gBAAgB,CAAC,EAAE,CAAC;YAC3C,OAAM,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAED,oEAAoE;QACpE,yEAAyE;QACzE,MAAM,wBAAwB,GAAI,gBAAgE,CAAC,cAAc,CAAC,CAAC;QAEnH,IAAI,CAAC,wBAAwB,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;YACtF,OAAM,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAED,MAAM,aAAa,GAAG,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE7D,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,OAAM,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAED,OAAM,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;CACD;AAED,MAAM,8BAA+B,SAAQ,4BAA4B;IAC/D,QAAQ,CAAW;IACnB,EAAE,CAAS;IACpB,2DAA2D;IAClD,OAAO,CAA2C;IAC3D,2DAA2D;IAClD,QAAQ,CAA2C;IAE5D,YAAY,MAA0B,EAAE,SAAyC,EAAE;QAClF,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtE,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAE3C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;aAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9B,CAAC;aAAM,IAAI,SAAS,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAChE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,MAAK,CAAC,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC,CAAC;QAChH,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAChC,CAAC;aAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,MAAK,CAAC,IAAI,KAAK,CAAC,+FAA+F,CAAC,CAAC,CAAC;QACnH,CAAC;IACF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAA4B,EAAE,MAA6B;QACxE,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClF,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACxB,OAAM,CAAC,IAAI,CAAC,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,gCAAgC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE;YACvF,OAAM,CAAC,IAAI,gCAAgC,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,OAAM,CAAC,SAAS,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAA4B,EAAE,MAA6B;QACxF,OAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAkB;QACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACxE,OAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,gBAAgB;IAChB,UAAU,CAAC,WAAmB;QAC7B,IAAI,WAAW,KAAK,yCAAyC,EAAE,CAAC;YAC/D,MAAK,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,OAAM,CAAC;YACN,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;IACJ,CAAC;CACD;AAED,eAAe,8BAA8B,CAAC","sourcesContent":["import type { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\n\nimport { getDefaultResolver } from '../../config.js';\n\nimport type {\n\tUserClient as KeetaNetUserClient\n} from '@keetanetwork/keetanet-client';\nimport type {\n\tKeetaAssetMovementAnchorGetTransferStatusResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tSupportedAssetsMetadata,\n\tProviderSearchInput,\n\tKeetaAssetMovementAnchorlistTransactionsRequest,\n\tKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingClientRequest,\n\tKeetaAssetMovementAnchorInitiateTransferClientRequest,\n\tKeetaNetAccount,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorlistTransactionsClientRequest,\n\tKeetaAssetMovementAnchorListForwardingAddressTemplateClientRequest,\n\tPersistentAddressTemplateData,\n\tKeetaAssetMovementAnchorGetTransferStatusClientRequest,\n\tKeetaAssetMovementAnchorShareKYCClientRequest,\n\tKeetaAssetMovementAnchorShareKYCRequest,\n\tKeetaAssetMovementAnchorShareKYCResponse,\n\tKeetaAssetMovementAnchorListPersistentForwardingClientRequest,\n\tKeetaPersistentForwardingAddressDetails,\n\tKeetaAssetMovementAnchorInitiateTransferResponse,\n\tKeetaAssetMovementAnchorExecuteTransferClientRequest,\n\tAnchorTokenLocationMetadata,\n\tAnchorCustomLocationMetadata,\n\tChainLocationString,\n\tAssetLocationLike,\n\tPerChainLocationMetadata,\n\tKeetaAssetMovementAnchorSimulateTransferResponse,\n\tKeetaAssetMovementAnchorSimulateTransferClientRequest,\n\tKeetaAssetMovementAnchorInitiateTransferRequest,\n\tKeetaAssetMovementAnchorSimulateTransferRequest\n} from './common.js';\nimport {\n\tassertKeetaSupportedAssetsMetadataItem,\n\tconvertAssetLocationToString,\n\tconvertAssetOrPairSearchInputToCanonical,\n\tconvertAssetSearchInputToCanonical,\n\tgetKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData,\n\tisKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorExecuteTransferRequestSigningData,\n\tgetKeetaAssetMovementAnchorGetTransferStatusRequestSigningData,\n\tgetKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\tgetKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\tgetKeetaAssetMovementAnchorShareKYCRequestSigningData,\n\tisKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tisKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tisKeetaAssetMovementAnchorExecuteTransferResponse,\n\tisKeetaAssetMovementAnchorGetExchangeStatusResponse,\n\tisKeetaAssetMovementAnchorInitiateTransferResponse,\n\tisKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\tisKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\tisKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tisKeetaAssetMovementAnchorShareKYCResponse,\n\ttoAssetLocationFromString,\n\tisExternalChainAsset,\n\tisAnchorTokenLocationMetadata,\n\tisKeetaAssetMovementAnchorSimulateTransferResponse,\n\tgetKeetaAssetMovementAnchorSimulateTransferRequestSigningData,\n\tErrors\n} from './common.js';\nimport type { Logger } from '../../lib/log/index.ts';\nimport Resolver from \"../../lib/resolver.js\";\nimport type { ServiceMetadata, ServiceMetadataAuthenticationType, ServiceMetadataEndpoint, SharedLookupCriteria } from '../../lib/resolver.ts';\nimport crypto from '../../lib/utils/crypto.js';\nimport type { BrandedString } from '../../lib/utils/brand.js';\nimport { createAssertEquals } from 'typia';\nimport type { ExtractOk, HTTPSignedField } from '../../lib/http-server/common.js';\nimport { addSignatureToURL } from '../../lib/http-server/common.js';\nimport type { Signable } from '../../lib/utils/signing.js';\nimport { SignData } from '../../lib/utils/signing.js';\nimport { KeetaAnchorError } from '../../lib/error.js';\nimport { KeetaNet } from '../../client/index.js';\nimport { resolveSharedAnchorMetadataLegalExtension, type SharedAnchorMetadataLegalExtension } from '../../lib/metadata.types.js';\nimport type { ExternalChainAsset, ExternalChainLocationType } from '../../lib/asset.js';\n\n// const PARANOID = true;\n\n/**\n * The configuration options for the Asset Movement (Inbound/Outbound) Anchor client.\n */\nexport type KeetaAssetMovementClientConfig = {\n\t/**\n\t * The ID of the client. This is used to identify the client in logs.\n\t * If not provided, a random ID will be generated.\n\t */\n\tid?: string;\n\t/**\n\t * The logger to use for logging messages. If not provided, no logging\n\t * will be done.\n\t */\n\tlogger?: Logger;\n\t/**\n\t * The resolver to use for resolving Asset Movement Anchor services. If not\n\t * provided, a default resolver will be created using the provided\n\t * client and network (if the network is also not provided and the\n\t * client is not a UserClient, an error occurs).\n\t */\n\tresolver?: Resolver;\n\t/**\n\t * The account to use for signing requests. If not provided, the\n\t * account associated with the provided client will be used. If there\n\t * is no account associated with the client, an error occurs.\n\t */\n\tsigner?: InstanceType<typeof KeetaNetLib.Account>;\n\t/**\n\t * Account to perform changes on. If not provided, the account\n\t * associated with the provided client will be used. If there is no\n\t * account associated with the client, an error occurs.\n\t */\n\taccount?: InstanceType<typeof KeetaNetLib.Account>;\n} & Omit<NonNullable<Parameters<typeof getDefaultResolver>[1]>, 'client'>;\n\n/**\n * An opaque type that represents a provider ID.\n */\ntype ProviderID = BrandedString<'AssetMovementProviderID'>;\n\n/**\n * An opaque type that represents an Asset Movement Anchor request ID\n */\n// type RequestID = BrandedString<'AssetMovementRequestID'>;\n\nconst KeetaAssetMovementAnchorClientAccessToken = Symbol('KeetaAssetMovementAnchorClientAccessToken');\n\nfunction typedAssetMovementServiceEntries<T extends object>(obj: T): [keyof T, T[keyof T]][] {\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treturn(Object.entries(obj) as [keyof T, T[keyof T]][]);\n}\n\nconst assertServiceMetadataEndpoint = createAssertEquals<ServiceMetadataEndpoint>();\n\n/**\n * A list of operations that can be performed by the Asset Movement Anchor service.\n */\ntype KeetaAssetMovementAnchorOperations = {\n\t[operation in keyof NonNullable<ServiceMetadata['services']['assetMovement']>[string]['operations']]?: {\n\t\turl: (params?: { [key: string]: string; }) => URL;\n\t\toptions: {\n\t\t\tauthentication: ServiceMetadataAuthenticationType;\n\t\t};\n\t};\n};\n\n/**\n * The service information for a KYC Anchor service.\n */\ninterface KeetaAssetMovementServiceInfo extends SharedAnchorMetadataLegalExtension {\n\toperations: {\n\t\t[operation in keyof KeetaAssetMovementAnchorOperations]: Promise<KeetaAssetMovementAnchorOperations[operation]>;\n\t};\n\n\tsupportedAssets: SupportedAssetsMetadata[];\n\tlocationMetadata?: AnchorCustomLocationMetadata;\n};\n\n/**\n * For each matching KYC Anchor service, this type describes the\n * operations available and the country codes that the service supports.\n */\ntype GetEndpointsResult = {\n\t[id: ProviderID]: KeetaAssetMovementServiceInfo;\n};\n\nfunction validateURL(url: string | undefined): URL {\n\tif (url === undefined || url === null) {\n\t\tthrow(new Error('Invalid URL: null or undefined'));\n\t}\n\n\tconst parsedURL = new URL(url);\n\n\treturn(parsedURL);\n}\n\nasync function getEndpoints(resolver: Resolver, request: ProviderSearchInput, shared?: SharedLookupCriteria, logger?: Logger): Promise<GetEndpointsResult | null> {\n\tconst asset = request.asset ? { asset: convertAssetOrPairSearchInputToCanonical(request.asset) } : undefined;\n\tconst from = request.from ? { from: convertAssetLocationToString(request.from) } : {};\n\tconst to = request.to ? { to: convertAssetLocationToString(request.to) } : {};\n\tconst rail = request.rail ? { rail: request.rail } : {};\n\tconst response = await resolver.lookup('assetMovement', {\n\t\t...asset,\n\t\t...from,\n\t\t...to,\n\t\t...rail\n\t}, shared);\n\n\tif (response === undefined) {\n\t\treturn(null);\n\t}\n\n\tconst serviceInfoPromises = Object.entries(response).map(async function([id, serviceInfo]): Promise<[ProviderID, KeetaAssetMovementServiceInfo]> {\n\t\tconst supportedAssetsMetadata = await Resolver.Metadata.fullyResolveValuizable(serviceInfo.supportedAssets);\n\n\t\tif (!Array.isArray(supportedAssetsMetadata)) {\n\t\t\tthrow(new Error('Invalid supportedAssets metadata: expected an array'));\n\t\t}\n\n\t\tconst supportedAssets = [];\n\t\tfor (const item of supportedAssetsMetadata) {\n\t\t\ttry {\n\t\t\t\tsupportedAssets.push(assertKeetaSupportedAssetsMetadataItem(item));\n\t\t\t} catch (error) {\n\t\t\t\tlogger?.debug('getEndpoints', `Failed to resolve supportedAssets metadata item for provider ${id}`, error, item);\n\t\t\t}\n\t\t}\n\n\t\tconst locationMetadata = await (async () => {\n\t\t\tlet locationMetadataVal;\n\t\t\tif (serviceInfo.locationMetadata) {\n\t\t\t\tlocationMetadataVal = await serviceInfo.locationMetadata('object');\n\t\t\t}\n\n\t\t\tif (!locationMetadataVal) {\n\t\t\t\treturn(undefined);\n\t\t\t}\n\n\t\t\tconst chainsResult = await Promise.allSettled(Object.entries(locationMetadataVal).map(async ([ location, assetsValue ]) => {\n\t\t\t\tconst parsedLocation = toAssetLocationFromString(location);\n\n\t\t\t\tif (parsedLocation.type !== 'chain') {\n\t\t\t\t\tthrow(new Error(`Invalid location type in AssetLocation string: ${parsedLocation.type}`));\n\t\t\t\t}\n\n\t\t\t\tif (parsedLocation.chain.type === 'keeta') {\n\t\t\t\t\tthrow(new Error('Keeta chain type is not supported in AssetLocation metadata')) ;\n\t\t\t\t}\n\n\t\t\t\tconst chainType = parsedLocation.chain.type;\n\n\t\t\t\t// We can assert here as we have validated the chain type in the parsing function\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\tconst locationString = convertAssetLocationToString(parsedLocation) as ChainLocationString<ExternalChainLocationType>;\n\n\t\t\t\tlet resolvedAssetsObject = undefined;\n\t\t\t\tif (assetsValue) {\n\t\t\t\t\tresolvedAssetsObject = await assetsValue('object');\n\t\t\t\t}\n\n\t\t\t\tif (!resolvedAssetsObject) {\n\t\t\t\t\treturn(null);\n\t\t\t\t}\n\n\t\t\t\tlet assets: {\n\t\t\t\t\t[AssetId in ExternalChainAsset<typeof chainType>]?: AnchorTokenLocationMetadata | undefined;\n\t\t\t\t} | undefined;\n\n\t\t\t\tif (resolvedAssetsObject.assets) {\n\t\t\t\t\tconst assetsValue = await resolvedAssetsObject.assets('object');\n\t\t\t\t\tconst resolvedAssets = await Promise.allSettled(Object.entries(assetsValue).map(async ([ assetId, assetMetadata ]) => {\n\t\t\t\t\t\tif (!isExternalChainAsset(assetId, chainType)) {\n\t\t\t\t\t\t\tthrow(new Error(`Invalid asset ID for chain type ${chainType}: ${assetId}`));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet assetMetadataVal;\n\t\t\t\t\t\tif (assetMetadata) {\n\t\t\t\t\t\t\tassetMetadataVal = await assetMetadata('object');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!assetMetadataVal) {\n\t\t\t\t\t\t\treturn(null);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst anchorTokenLocationMetadata = {\n\t\t\t\t\t\t\tdisplayName: await assetMetadataVal.displayName?.('string'),\n\t\t\t\t\t\t\tticker: await assetMetadataVal.ticker?.('string'),\n\t\t\t\t\t\t\tlogoURI: await assetMetadataVal.logoURI?.('string'),\n\t\t\t\t\t\t\tdecimalPlaces: await assetMetadataVal.decimalPlaces?.('primitive')\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isAnchorTokenLocationMetadata(anchorTokenLocationMetadata)) {\n\t\t\t\t\t\t\tthrow(new Error(`Invalid asset metadata for asset ID ${assetId} in chain type ${chainType}`));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn([ assetId, anchorTokenLocationMetadata ] as const);\n\t\t\t\t\t}));\n\n\t\t\t\t\tfor (const result of resolvedAssets) {\n\t\t\t\t\t\tif (result.status === 'rejected') {\n\t\t\t\t\t\t\tlogger?.debug('Failed to resolve asset metadata', result.reason);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!result.value) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!assets) {\n\t\t\t\t\t\t\tassets = {};\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tassets[result.value[0]] = result.value[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn([\n\t\t\t\t\tlocationString,\n\t\t\t\t\t{\n\t\t\t\t\t\t...(assets ? { assets } : {})\n\t\t\t\t\t}\n\t\t\t\t] as const)\n\t\t\t}));\n\n\t\t\tlet chains: AnchorCustomLocationMetadata | undefined;\n\t\t\tfor (const result of chainsResult) {\n\t\t\t\tif (result.status === 'rejected') {\n\t\t\t\t\tlogger?.debug('Failed to resolve location metadata', result.reason);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!result.value) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!chains) {\n\t\t\t\t\tchains = {};\n\t\t\t\t}\n\n\t\t\t\t// XXX:TODO Add comment\n\t\t\t\t// @ts-ignore\n\t\t\t\tchains[result.value[0]] = result.value[1];\n\t\t\t}\n\n\t\t\tif (!chains) {\n\t\t\t\treturn(undefined);\n\t\t\t}\n\n\t\t\treturn(chains);\n\t\t})();\n\n\t\tconst operations = await serviceInfo.operations('object');\n\t\tconst operationsFunctions: KeetaAssetMovementServiceInfo['operations'] = {};\n\t\tfor (const [ key, operation ] of Object.entries(operations)) {\n\t\t\tif (operation === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tObject.defineProperty(operationsFunctions, key, {\n\t\t\t\tget: async function() {\n\t\t\t\t\tconst endpointInfo = assertServiceMetadataEndpoint(await Resolver.Metadata.fullyResolveValuizable(operation));\n\n\t\t\t\t\tlet url;\n\t\t\t\t\tlet authentication: ServiceMetadataAuthenticationType = {\n\t\t\t\t\t\ttype: 'none',\n\t\t\t\t\t\tmethod: 'keeta-account'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (typeof endpointInfo === 'string') {\n\t\t\t\t\t\turl = endpointInfo;\n\t\t\t\t\t} else {\n\t\t\t\t\t\turl = endpointInfo.url;\n\t\t\t\t\t\tif (endpointInfo.options?.authentication) {\n\t\t\t\t\t\t\tauthentication = endpointInfo.options.authentication;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\turl: function(params?: { [key: string]: string; }): URL {\n\t\t\t\t\t\t\tlet substitutedURL;\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tsubstitutedURL = decodeURI(url)\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tlogger?.debug('getEndpoints', 'Failed to decode URI, using original URL for substitution', error, url);\n\n\t\t\t\t\t\t\t\tsubstitutedURL = url;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (const [paramKey, paramValue] of Object.entries(params ?? {})) {\n\t\t\t\t\t\t\t\tsubstitutedURL = substitutedURL.replace(`{${paramKey}}`, encodeURIComponent(paramValue));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn(validateURL(substitutedURL));\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: { authentication }\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t}\n\n\t\treturn([\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tid as unknown as ProviderID,\n\t\t\t{\n\t\t\t\t...(await resolveSharedAnchorMetadataLegalExtension(serviceInfo.legal, { logger })),\n\t\t\t\toperations: operationsFunctions,\n\t\t\t\tsupportedAssets: supportedAssets,\n\t\t\t\t...(locationMetadata ? { locationMetadata } : {})\n\t\t\t}\n\t\t]);\n\t});\n\n\tconst retval = Object.fromEntries(await Promise.all(serviceInfoPromises));\n\n\treturn(retval);\n}\n\ninterface KeetaAssetMovementAnchorBaseConfig {\n\tclient: KeetaNetUserClient;\n\tlogger?: Logger | undefined;\n}\n\nclass KeetaAssetMovementAnchorBase {\n\tprotected readonly logger?: Logger | undefined;\n\tprotected readonly client: KeetaNetUserClient;\n\n\tconstructor(config: KeetaAssetMovementAnchorBaseConfig) {\n\t\tthis.client = config.client;\n\t\tthis.logger = config.logger;\n\t}\n}\n\ntype SimulationOrTransferResponse = ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse> | ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>;\n\ninterface BaseKeetaAssetMovementTransferConstructorArguments<Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest | KeetaAssetMovementAnchorSimulateTransferClientRequest, Transfer extends SimulationOrTransferResponse> {\n\tprovider: KeetaAssetMovementAnchorProvider;\n\trequest: Request;\n\ttransfer: Transfer;\n}\n\nabstract class BaseKeetaAssetMovementTransfer<Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest | KeetaAssetMovementAnchorSimulateTransferClientRequest, Transfer extends SimulationOrTransferResponse> {\n\treadonly provider: KeetaAssetMovementAnchorProvider;\n\treadonly request: Request;\n\treadonly transfer: Transfer;\n\n\treadonly abstract isSimulation: Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest ? false : true;\n\n\tconstructor({ request, transfer, provider }: BaseKeetaAssetMovementTransferConstructorArguments<Request, Transfer>) {\n\t\tthis.provider = provider;\n\t\tthis.request = request;\n\t\tthis.transfer = transfer;\n\t}\n\n\tget instructions(): Transfer['instructionChoices'] {\n\t\treturn(this.transfer.instructionChoices);\n\t}\n}\n\n/**\n * Represents an in-progress Asset Movement request.\n */\nclass KeetaAssetMovementTransfer extends BaseKeetaAssetMovementTransfer<KeetaAssetMovementAnchorInitiateTransferClientRequest, ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>> {\n\treadonly isSimulation = false as const;\n\n\tget transferId(): string {\n\t\treturn(this.transfer.id);\n\t}\n\n\tasync getTransferStatus(): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tconst account = this.request.account ? { account: this.request.account } : undefined;\n\t\treturn(await this.provider.getTransferStatus({ id: this.transfer.id, ...account }));\n\t}\n\n\tasync executeTransfer(input: Omit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tconst account = this.request.account ? { account: this.request.account } : undefined;\n\t\treturn(await this.provider.executeTransfer({ id: this.transfer.id, ...input, ...account }));\n\t}\n}\n\nclass KeetaAssetMovementSimulatedTransfer extends BaseKeetaAssetMovementTransfer<KeetaAssetMovementAnchorSimulateTransferClientRequest, ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>> {\n\treadonly isSimulation = true as const;\n\n\tasync createTransfer(overrides?: {\n\t\tto: Partial<Pick<KeetaAssetMovementAnchorInitiateTransferClientRequest['to'], 'depositMessage' | 'recipient'>>;\n\t}): Promise<KeetaAssetMovementTransfer> {\n\t\tconst to = {\n\t\t\t...this.request.to,\n\t\t\t...overrides?.to\n\t\t};\n\n\t\tif (!to.recipient) {\n\t\t\tthrow(new Error('Recipient is required to create a transfer from a simulation'));\n\t\t}\n\n\t\treturn(await this.provider.initiateTransfer({\n\t\t\t...this.request,\n\t\t\tto: {\n\t\t\t\t...to,\n\t\t\t\trecipient: to.recipient\n\t\t\t}\n\t\t}));\n\t}\n}\n\ninterface AwaitPromiseURLOptions {\n\tdefaultPollIntervalMs?: number;\n\ttimeoutMs?: number;\n\tabortSignal?: AbortSignal;\n}\n\nexport class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBase {\n\treadonly serviceInfo: KeetaAssetMovementServiceInfo;\n\treadonly providerID: ProviderID;\n\tprivate readonly parent: KeetaAssetMovementAnchorClient;\n\n\tconstructor(serviceInfo: KeetaAssetMovementServiceInfo, providerID: ProviderID, parent: KeetaAssetMovementAnchorClient) {\n\t\tconst parentPrivate = parent._internals(KeetaAssetMovementAnchorClientAccessToken);\n\t\tsuper(parentPrivate);\n\n\t\tthis.serviceInfo = serviceInfo;\n\t\tthis.providerID = providerID;\n\t\tthis.parent = parent;\n\t}\n\n\tasync #getOperationData(operationName: keyof KeetaAssetMovementAnchorOperations, params?: { [key: string]: string; }) {\n\t\tconst endpoint = await this.serviceInfo.operations[operationName];\n\t\tif (endpoint === undefined) {\n\t\t\tthrow(new Errors.OperationNotSupported({}, `Asset Movement service does not support ${operationName} operation`));\n\t\t}\n\n\t\tif (endpoint.options.authentication.method !== 'keeta-account') {\n\t\t\tthrow(new Error(`Unsupported authentication method: ${endpoint.options.authentication.method}`));\n\t\t}\n\n\t\treturn({\n\t\t\turl: endpoint.url(params),\n\t\t\tauth: endpoint.options.authentication\n\t\t})\n\t}\n\n\tasync isOperationSupported(operationName: keyof KeetaAssetMovementAnchorOperations): Promise<boolean> {\n\t\ttry {\n\t\t\tawait this.#getOperationData(operationName);\n\t\t\treturn(true);\n\t\t} catch (error) {\n\t\t\tif (error instanceof Errors.OperationNotSupported) {\n\t\t\t\treturn(false);\n\t\t\t}\n\n\t\t\tthrow(error);\n\t\t}\n\t}\n\n\tasync #parseResponseError(data: unknown) {\n\t\tif (typeof data !== 'object' || data === null) {\n\t\t\tthrow(new Error('Response is not an error'));\n\t\t}\n\n\t\tif (!('ok' in data) || data.ok !== false) {\n\t\t\tthrow(new Error('Response is not an error'));\n\t\t}\n\n\t\tlet errorStr;\n\n\t\tlet parsedError: KeetaAnchorError | null = null;\n\t\ttry {\n\t\t\tparsedError = await KeetaAnchorError.fromJSON(data);\n\t\t} catch (error: unknown) {\n\t\t\tthis.logger?.debug('Failed to parse error response as KeetaAnchorError', error, data);\n\t\t}\n\n\t\tif (parsedError) {\n\t\t\treturn(parsedError);\n\t\t} else {\n\t\t\tif ('error' in data && typeof data.error === 'string') {\n\t\t\t\terrorStr = data.error;\n\t\t\t} else {\n\t\t\t\terrorStr = 'Unknown error';\n\t\t\t}\n\n\t\t\treturn(new Error(`asset movement request failed: ${errorStr}`));\n\t\t}\n\t}\n\n\tasync #makeRequest<\n\t\tResponse extends { ok: true } | { ok: false; error: string; },\n\t\tRequest = undefined,\n\t\tSerializedRequest = Request\n\t>(input: {\n\t\tmethod: 'GET' | 'POST';\n\t\tendpoint: keyof KeetaAssetMovementAnchorOperations;\n\t\taccount?: KeetaNetAccount | undefined;\n\t\tparams?: { [key: string]: string; } | undefined;\n\t\tbody?: Request | undefined;\n\t\tserializeRequest?: (body: Request) => (SerializedRequest | Promise<Omit<SerializedRequest, 'signed'>>);\n\n\t\tgetSignedData?: (request: SerializedRequest) => Signable;\n\t\tisResponse: (data: unknown) => data is Response;\n\t}): Promise<Extract<Response, { ok: true }>> {\n\t\tconst { url, auth } = await this.#getOperationData(input.endpoint, input.params);\n\n\t\tlet serializedRequest;\n\n\t\tif (input.body && input.serializeRequest) {\n\t\t\tserializedRequest = await input.serializeRequest(input.body);\n\t\t} else {\n\t\t\tserializedRequest = input.body;\n\t\t}\n\n\t\tlet signed: HTTPSignedField | undefined;\n\n\t\tif (auth.type === 'required' || (auth.type === 'optional' && input.account)) {\n\t\t\tif (!input.account) {\n\t\t\t\tthrow(new Error('Account information is required for this operation'));\n\t\t\t}\n\n\t\t\tif (!input.getSignedData) {\n\t\t\t\tthrow(new Error('getSignedData function is required for signing the request'));\n\t\t\t}\n\n\t\t\t// We need this assertion because TypeScript cannot infer that the type is correct here, it is correct in the arguments.\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tconst signable = input.getSignedData(serializedRequest as SerializedRequest);\n\n\t\t\tsigned = await SignData(input.account.assertAccount(), signable);\n\t\t}\n\n\t\tlet usingUrl = url;\n\t\tconst headers: { [key: string]: string } = {\n\t\t\t'Accept': 'application/json'\n\t\t};\n\t\tlet body: BodyInit | null = null;\n\t\tif (input.method === 'POST') {\n\t\t\theaders['Content-Type'] = 'application/json';\n\t\t\tbody = JSON.stringify({ ...serializedRequest, signed });\n\t\t} else {\n\t\t\tif (signed) {\n\t\t\t\tif (!input.account) {\n\t\t\t\t\tthrow(new Error('invariant: Account information is required for this operation, which should exist at this point'));\n\t\t\t\t}\n\n\t\t\t\tusingUrl = addSignatureToURL(usingUrl, { signedField: signed, account: input.account.assertAccount() });\n\t\t\t}\n\n\t\t\tif (input.body) {\n\t\t\t\tthrow(new Error('Body cannot be sent with GET requests'));\n\t\t\t}\n\t\t}\n\n\t\tconst requestInformation = await fetch(usingUrl, {\n\t\t\tmethod: input.method, headers, body\n\t\t});\n\n\t\tconst requestInformationJSON: unknown = await requestInformation.json();\n\t\tif (!input.isResponse(requestInformationJSON)) {\n\t\t\tthrow(new Error(`Invalid response from asset movement service: ${JSON.stringify(requestInformationJSON)}`));\n\t\t}\n\n\t\tif (!requestInformationJSON.ok) {\n\t\t\tthrow(await this.#parseResponseError(requestInformationJSON));\n\t\t}\n\n\t\t// We need this assertion because TypeScript cannot infer that the type is correct here, it is correct because we checked it above.\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\treturn(requestInformationJSON as Extract<Response, { ok: true }>);\n\t}\n\n\tasync #initiateOrSimulateTransfer(simulate: true, request: KeetaAssetMovementAnchorSimulateTransferClientRequest): Promise<KeetaAssetMovementSimulatedTransfer>;\n\tasync #initiateOrSimulateTransfer(simulate: false, request: KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer>;\n\tasync #initiateOrSimulateTransfer(simulate: boolean, request: KeetaAssetMovementAnchorSimulateTransferClientRequest | KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer | KeetaAssetMovementSimulatedTransfer> {\n\t\tthis.logger?.debug(`Starting Asset Movement Transfer for provider ID: ${String(this.providerID)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: simulate ? 'simulateTransfer' : 'initiateTransfer',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body): KeetaAssetMovementAnchorInitiateTransferRequest | KeetaAssetMovementAnchorSimulateTransferRequest {\n\t\t\t\tconst { account, ...rest } = body;\n\t\t\t\treturn({\n\t\t\t\t\t...rest,\n\t\t\t\t\tvalue: String(body.value),\n\t\t\t\t\tfrom: {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.from.location),\n\t\t\t\t\t\t...(request.from.source ? { source: request.from.source } : {})\n\t\t\t\t\t},\n\t\t\t\t\tto: {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.to.location),\n\t\t\t\t\t\t...(body.to.recipient ? { recipient: body.to.recipient } : {}),\n\t\t\t\t\t\t...(body.to.depositMessage ? { depositMessage: body.to.depositMessage } : {})\n\t\t\t\t\t},\n\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset),\n\t\t\t\t\t...(account ? { account: account.assertAccount().publicKeyString.get() } : {})\n\t\t\t\t})\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: simulate ? getKeetaAssetMovementAnchorSimulateTransferRequestSigningData : getKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\t\t\tisResponse(data): data is KeetaAssetMovementAnchorSimulateTransferResponse | KeetaAssetMovementAnchorInitiateTransferResponse {\n\t\t\t\tif (simulate) {\n\t\t\t\t\treturn(isKeetaAssetMovementAnchorSimulateTransferResponse(data));\n\t\t\t\t} else {\n\t\t\t\t\treturn(isKeetaAssetMovementAnchorInitiateTransferResponse(data));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\n\t\tif (simulate) {\n\t\t\tthis.logger?.debug(`asset movement simulation request successful`);\n\n\t\t\treturn(new KeetaAssetMovementSimulatedTransfer({\n\t\t\t\tprovider: this,\n\t\t\t\trequest,\n\t\t\t\ttransfer: requestInformationJSON\n\t\t\t}));\n\t\t} else {\n\t\t\tif (!('id' in requestInformationJSON)) {\n\t\t\t\tthrow(new Error('expected provider to return id but did not'));\n\t\t\t}\n\n\t\t\tthis.logger?.debug(`asset movement transfer request successful, request ID ${requestInformationJSON.id}`);\n\n\t\t\tif (!('recipient' in request.to)) {\n\t\t\t\tthrow(new Error('Recipient information is required in the request to create a transfer'));\n\t\t\t}\n\n\t\t\treturn(new KeetaAssetMovementTransfer({\n\t\t\t\tprovider: this,\n\t\t\t\trequest: {\n\t\t\t\t\t...request,\n\t\t\t\t\tto: {\n\t\t\t\t\t\t...request.to,\n\t\t\t\t\t\trecipient: request.to.recipient\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttransfer: requestInformationJSON\n\t\t\t}));\n\t\t}\n\t}\n\n\tasync initiateTransfer(request: KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer> {\n\t\treturn(await this.#initiateOrSimulateTransfer(false, request));\n\t}\n\n\tasync simulateTransfer(request: KeetaAssetMovementAnchorSimulateTransferClientRequest): Promise<KeetaAssetMovementSimulatedTransfer> {\n\t\treturn(await this.#initiateOrSimulateTransfer(true, request));\n\t}\n\n\tasync executeTransfer(request: KeetaAssetMovementAnchorExecuteTransferClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tthis.logger?.debug(`Starting Asset Movement Transfer for provider ID: ${String(this.providerID)}`);\n\n\t\tconst { id, ...rest } = request;\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorGetTransferStatusResponse,\n\t\t\tOmit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'executeTransfer',\n\t\t\tparams: { id: request.id },\n\t\t\taccount: request.account,\n\t\t\tbody: rest,\n\t\t\tgetSignedData: (body: Omit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>) => {\n\t\t\t\treturn(getKeetaAssetMovementAnchorExecuteTransferRequestSigningData({ id, ...body }));\n\t\t\t},\n\t\t\tisResponse: isKeetaAssetMovementAnchorExecuteTransferResponse\n\t\t});\n\n\t\tthis.logger?.debug(`asset movement execute transfer successful, transaction ID ${requestInformationJSON.transaction.id}`);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync getTransferStatus(request: KeetaAssetMovementAnchorGetTransferStatusClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: 'getTransferStatus',\n\t\t\taccount: request.account,\n\t\t\tparams: { id: request.id },\n\t\t\tgetSignedData: () => getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData(request),\n\t\t\tisResponse: isKeetaAssetMovementAnchorGetExchangeStatusResponse\n\t\t});\n\n\t\tthis.logger?.debug(`asset movement request successful, request ID ${request.id}`);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync initiatePersistentForwardingTemplate(request: KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse>> {\n\t\tthis.logger?.debug(`Initiating persistent forwarding template for provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst result = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\t\t\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest,\n\t\t\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'initiatePersistentForwardingTemplate',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\tconst { account, ...rest } = body;\n\t\t\t\treturn({\n\t\t\t\t\t...rest,\n\t\t\t\t\tlocation: convertAssetLocationToString(body.location),\n\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset),\n\t\t\t\t\t...(account ? { account: account.assertAccount().publicKeyString.get() } : {})\n\t\t\t\t});\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse\n\t\t});\n\n\t\tthis.logger?.debug(`initiate persistent forwarding template successful, session ID: ${result.id}`);\n\n\t\treturn(result);\n\t}\n\n\tasync createPersistentForwardingTemplate(request: KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingResponse>> {\n\t\tthis.logger?.debug(`Creating persistent forwarding for provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'createPersistentForwardingTemplate',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\tconst { account, ...rest }\t= body;\n\n\t\t\t\tconst sharedFields = {\n\t\t\t\t\t...rest,\n\t\t\t\t\t...(account ? { account: account.assertAccount().publicKeyString.get() } : {})\n\t\t\t\t}\n\n\t\t\t\tif ('data' in body) {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...sharedFields,\n\t\t\t\t\t\tdata: body.data\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...sharedFields,\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.location),\n\t\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse\n\t\t});\n\n\t\tthis.logger?.debug(`create persistent forwarding request successful`, requestInformationJSON.address);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync createPersistentForwardingAddress(request: KeetaAssetMovementAnchorCreatePersistentForwardingClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingResponse>> {\n\t\tthis.logger?.debug(`Creating persistent forwarding for provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingClientRequest,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'createPersistentForwarding',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\tconst base = {\n\t\t\t\t\tsourceLocation: convertAssetLocationToString(body.sourceLocation),\n\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset),\n\t\t\t\t\taccount: body.account?.assertAccount().publicKeyString.get()\n\t\t\t\t} as const;\n\n\t\t\t\tif ('persistentAddressTemplateId' in body) {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...base,\n\t\t\t\t\t\tpersistentAddressTemplateId: body.persistentAddressTemplateId\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...base,\n\t\t\t\t\t\tdestinationAddress: body.destinationAddress,\n\t\t\t\t\t\tdestinationLocation: convertAssetLocationToString(body.destinationLocation)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorCreatePersistentForwardingResponse\n\t\t});\n\n\t\tthis.logger?.debug(`create persistent forwarding request successful`, requestInformationJSON.address);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync listForwardingAddressTemplates(request: KeetaAssetMovementAnchorListForwardingAddressTemplateClientRequest): Promise<{ templates: PersistentAddressTemplateData[]; total: number; }> {\n\t\tthis.logger?.debug(`Listing persistent forwarding address templates for provider ID: ${String(this.providerID)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'listPersistentForwardingTemplate',\n\t\t\taccount: request.account,\n\t\t\tbody: request,\n\t\t\tserializeRequest(body) {\n\t\t\t\treturn({\n\t\t\t\t\t...(body.account ? { account: body.account.assertAccount().publicKeyString.get() } : {}),\n\t\t\t\t\tasset: body.asset?.map(a => convertAssetSearchInputToCanonical(a)),\n\t\t\t\t\tlocation: body.location?.map(l => convertAssetLocationToString(l))\n\t\t\t\t});\n\t\t\t},\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorListForwardingAddressTemplateResponse\n\t\t});\n\n\t\tthis.logger?.debug(`list persistent forwarding address templates request successful`, requestInformationJSON.templates);\n\n\t\treturn({\n\t\t\ttemplates: requestInformationJSON.templates,\n\t\t\ttotal: Number(requestInformationJSON.total)\n\t\t});\n\t}\n\n\tasync listForwardingAddresses(request: KeetaAssetMovementAnchorListPersistentForwardingClientRequest): Promise<{ addresses: KeetaPersistentForwardingAddressDetails[]; total: number; }> {\n\t\tthis.logger?.debug(`Listing persistent forwarding address templates for provider ID: ${String(this.providerID)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'listPersistentForwarding',\n\t\t\taccount: request.account,\n\t\t\tbody: request,\n\t\t\tserializeRequest(body) {\n\t\t\t\treturn({\n\t\t\t\t\t...body,\n\t\t\t\t\taccount: body.account?.assertAccount().publicKeyString.get(),\n\t\t\t\t\tsearch: body.search ? body.search.map(function(searchItem) {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\t...searchItem,\n\t\t\t\t\t\t\tasset: searchItem.asset ? convertAssetSearchInputToCanonical(searchItem.asset) : undefined,\n\t\t\t\t\t\t\tsourceLocation: searchItem.sourceLocation ? convertAssetLocationToString(searchItem.sourceLocation) : undefined,\n\t\t\t\t\t\t\tdestinationLocation: searchItem.destinationLocation ? convertAssetLocationToString(searchItem.destinationLocation) : undefined\n\t\t\t\t\t\t})\n\t\t\t\t\t}) : undefined\n\t\t\t\t});\n\t\t\t},\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorListPersistentForwardingResponse\n\t\t});\n\n\t\tthis.logger?.debug('KeetaAssetMovementAnchorProvider::listPersistentForwardingAddresses', `list persistent forwarding address request successful`, requestInformationJSON.addresses);\n\n\t\treturn({\n\t\t\taddresses: requestInformationJSON.addresses,\n\t\t\ttotal: Number(requestInformationJSON.total)\n\t\t});\n\t}\n\n\tasync listTransactions(request: KeetaAssetMovementAnchorlistTransactionsClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse>> {\n\t\tthis.logger?.debug(`List persistent forwarding transactions provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\t\t\tKeetaAssetMovementAnchorlistTransactionsClientRequest,\n\t\t\tKeetaAssetMovementAnchorlistTransactionsRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'listTransactions',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\treturn({\n\t\t\t\t\taccount: body.account?.assertAccount().publicKeyString.get(),\n\t\t\t\t\tpagination: body.pagination,\n\t\t\t\t\tpersistentAddresses: body.persistentAddresses?.map(pa => ({\n\t\t\t\t\t\tlocation: convertAssetLocationToString(pa.location),\n\t\t\t\t\t\t...('persistentAddressTemplate' in pa ?\n\t\t\t\t\t\t\t{ persistentAddressTemplate: pa.persistentAddressTemplate } :\n\t\t\t\t\t\t\t{ persistentAddress: pa.persistentAddress }\n\t\t\t\t\t\t)\n\t\t\t\t\t})),\n\t\t\t\t\tfrom: body.from ? {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.from.location),\n\t\t\t\t\t\tuserAddress: body.from.userAddress,\n\t\t\t\t\t\tasset: body.from.asset ? convertAssetSearchInputToCanonical(body.from.asset) : undefined\n\t\t\t\t\t} : undefined,\n\t\t\t\t\tto: body.to ? {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.to.location),\n\t\t\t\t\t\tuserAddress: body.to.userAddress,\n\t\t\t\t\t\tasset: body.to.asset ? convertAssetSearchInputToCanonical(body.to.asset) : undefined\n\t\t\t\t\t} : undefined\n\t\t\t\t});\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse\n\t\t});\n\n\t\tthis.logger?.debug(`list persistent transactions request successful, ${requestInformationJSON.transactions}`);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync #awaitPromiseURL(promiseURL: string, options?: AwaitPromiseURLOptions): Promise<void> {\n\t\tconst startTime = Date.now();\n\n\t\tconst timeout = options?.timeoutMs ?? (5 * 60 * 1000);\n\n\t\twhile (true) {\n\t\t\tif (options?.abortSignal?.aborted) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet response;\n\n\t\t\ttry {\n\t\t\t\tresponse = await fetch(promiseURL);\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger?.debug('KeetaAssetMovementAnchorProvider::awaitPromiseURL', 'Error fetching promise URL', error);\n\t\t\t\tthrow(new Error(`Error fetching promise URL: ${String(error)}`));\n\t\t\t}\n\n\t\t\tif (response.status === 200) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response.status !== 202) {\n\t\t\t\tlet errorData: unknown;\n\t\t\t\ttry {\n\t\t\t\t\terrorData = await response.json();\n\t\t\t\t} catch {\n\t\t\t\t\tthrow(new Error(`Error parsing error response json from promise, status code ${response.status}`));\n\t\t\t\t}\n\t\t\t\tthrow(await this.#parseResponseError(errorData));\n\t\t\t}\n\n\t\t\tif (Date.now() - startTime > timeout) {\n\t\t\t\tthrow(new Error('Timeout waiting for promise URL to complete'));\n\t\t\t}\n\n\t\t\tlet retryAfterMS: number | undefined;\n\t\t\tconst retryAfterHeader = response.headers.get('Retry-After');\n\t\t\tif (retryAfterHeader) {\n\n\t\t\t\tif (!isNaN(Number(retryAfterHeader))) {\n\t\t\t\t\tretryAfterMS = Number(retryAfterHeader) * 1000;\n\t\t\t\t} else {\n\t\t\t\t\tconst retryAfterDate = new Date(retryAfterHeader);\n\t\t\t\t\tif (!isNaN(retryAfterDate.getTime())) {\n\t\t\t\t\t\tretryAfterMS = retryAfterDate.getTime() - Date.now();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!retryAfterMS) {\n\t\t\t\tretryAfterMS = options?.defaultPollIntervalMs ?? 1000;\n\t\t\t}\n\n\t\t\tawait KeetaNet.lib.Utils.Helper.asleep(retryAfterMS);\n\t\t}\n\t}\n\n\tasync shareKYCAttributes(request: KeetaAssetMovementAnchorShareKYCClientRequest, awaitOptions?: AwaitPromiseURLOptions): Promise<void> {\n\t\tthis.logger?.debug('Sharing KYC attributes');\n\n\t\tconst response = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorShareKYCResponse,\n\t\t\tKeetaAssetMovementAnchorShareKYCClientRequest,\n\t\t\tKeetaAssetMovementAnchorShareKYCRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'shareKYC',\n\t\t\taccount: request.account,\n\t\t\tasync serializeRequest(body) {\n\t\t\t\tlet attributes;\n\t\t\t\tif (typeof body.attributes === 'string') {\n\t\t\t\t\tattributes = body.attributes;\n\t\t\t\t} else {\n\t\t\t\t\tattributes = await body.attributes.export({ format: 'string' });\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\taccount: body.account.assertAccount().publicKeyString.get(),\n\t\t\t\t\tattributes: attributes,\n\t\t\t\t\t...(body.tosAgreement ? { tosAgreement: body.tosAgreement } : {})\n\t\t\t\t});\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorShareKYCRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorShareKYCResponse\n\t\t});\n\n\t\tif (response.isPending && response.promiseURL) {\n\t\t\tthis.logger?.debug('KYC attribute sharing is pending, awaiting promise URL');\n\n\t\t\tlet promiseURL;\n\n\t\t\tif (response.promiseURL.startsWith('/')) {\n\t\t\t\tconst operationData = await this.#getOperationData('shareKYC');\n\t\t\t\tpromiseURL = new URL(response.promiseURL, operationData.url).toString();\n\t\t\t} else {\n\t\t\t\tpromiseURL = response.promiseURL;\n\t\t\t}\n\n\t\t\tawait this.#awaitPromiseURL(promiseURL, { ...awaitOptions });\n\t\t}\n\n\t\tthis.logger?.debug(`done sharing KYC attributes`);\n\t}\n\n\tgetAssetMetadataForLocation(location: AssetLocationLike, asset: ExternalChainAsset): AnchorTokenLocationMetadata | null {\n\t\tconst locationMetadata = this.serviceInfo.locationMetadata;\n\t\tif (!locationMetadata) {\n\t\t\treturn(null);\n\t\t}\n\n\t\tconst locationString = convertAssetLocationToString(location);\n\n\t\tif (!(locationString in locationMetadata)) {\n\t\t\treturn(null);\n\t\t}\n\n\t\t// We can assert here as we have validated the key is included above\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst locationSpecificMetadata = (locationMetadata as { [key: string]: PerChainLocationMetadata })[locationString];\n\n\t\tif (!locationSpecificMetadata?.assets || !(asset in locationSpecificMetadata.assets)) {\n\t\t\treturn(null);\n\t\t}\n\n\t\tconst assetMetadata = locationSpecificMetadata.assets[asset];\n\n\t\tif (!assetMetadata) {\n\t\t\treturn(null);\n\t\t}\n\n\t\treturn(assetMetadata);\n\t}\n}\n\nclass KeetaAssetMovementAnchorClient extends KeetaAssetMovementAnchorBase {\n\treadonly resolver: Resolver;\n\treadonly id: string;\n\t// eslint-disable-next-line no-unused-private-class-members\n\treadonly #signer: InstanceType<typeof KeetaNetLib.Account>;\n\t// eslint-disable-next-line no-unused-private-class-members\n\treadonly #account: InstanceType<typeof KeetaNetLib.Account>;\n\n\tconstructor(client: KeetaNetUserClient, config: KeetaAssetMovementClientConfig = {}) {\n\t\tsuper({ client, logger: config.logger });\n\t\tthis.resolver = config.resolver ?? getDefaultResolver(client, config);\n\t\tthis.id = config.id ?? crypto.randomUUID();\n\n\t\tif (config.signer) {\n\t\t\tthis.#signer = config.signer;\n\t\t} else if ('signer' in client && client.signer !== null) {\n\t\t\tthis.#signer = client.signer;\n\t\t} else if ('account' in client && client.account.hasPrivateKey) {\n\t\t\tthis.#signer = client.account;\n\t\t} else {\n\t\t\tthrow(new Error('KeetaAssetMovementAnchorClient requires a Signer or a UserClient with an associated Signer'));\n\t\t}\n\n\t\tif (config.account) {\n\t\t\tthis.#account = config.account;\n\t\t} else if ('account' in client) {\n\t\t\tthis.#account = client.account;\n\t\t} else {\n\t\t\tthrow(new Error('KeetaAssetMovementAnchorClient requires an Account or a UserClient with an associated Account'));\n\t\t}\n\t}\n\n\tasync #lookup(request: ProviderSearchInput, shared?: SharedLookupCriteria): Promise<KeetaAssetMovementAnchorProvider[] | null> {\n\t\tconst endpoints = await getEndpoints(this.resolver, request, shared, this.logger);\n\t\tif (endpoints === null) {\n\t\t\treturn(null);\n\t\t}\n\n\t\tconst providers = typedAssetMovementServiceEntries(endpoints).map(([id, serviceInfo]) => {\n\t\t\treturn(new KeetaAssetMovementAnchorProvider(serviceInfo, id, this));\n\t\t});\n\n\t\treturn(providers);\n\t}\n\n\tasync getProvidersForTransfer(request: ProviderSearchInput, shared?: SharedLookupCriteria): Promise<KeetaAssetMovementAnchorProvider[] | null> {\n\t\treturn(await this.#lookup(request, shared));\n\t}\n\n\tasync getProviderByID(providerID: string): Promise<KeetaAssetMovementAnchorProvider | null> {\n\t\tconst providers = await this.#lookup({}, { providerIDs: [providerID] });\n\t\treturn(providers?.[0] ?? null);\n\t}\n\n\t/** @internal */\n\t_internals(accessToken: symbol) {\n\t\tif (accessToken !== KeetaAssetMovementAnchorClientAccessToken) {\n\t\t\tthrow(new Error('invalid access token'));\n\t\t}\n\n\t\treturn({\n\t\t\tresolver: this.resolver,\n\t\t\tlogger: this.logger,\n\t\t\tclient: this.client\n\t\t});\n\t}\n}\n\nexport default KeetaAssetMovementAnchorClient;\n"]}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/asset-movement/client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { lib as KeetaNetLib } from '@keetanetwork/keetanet-client';\n\nimport { getDefaultResolver } from '../../config.js';\n\nimport type {\n\tUserClient as KeetaNetUserClient\n} from '@keetanetwork/keetanet-client';\nimport type {\n\tKeetaAssetMovementAnchorGetTransferStatusResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tSupportedAssetsMetadata,\n\tProviderSearchInput,\n\tKeetaAssetMovementAnchorlistTransactionsRequest,\n\tKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingClientRequest,\n\tKeetaAssetMovementAnchorInitiateTransferClientRequest,\n\tKeetaNetAccount,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorlistTransactionsClientRequest,\n\tKeetaAssetMovementAnchorListForwardingAddressTemplateClientRequest,\n\tPersistentAddressTemplateData,\n\tKeetaAssetMovementAnchorGetTransferStatusClientRequest,\n\tKeetaAssetMovementAnchorShareKYCClientRequest,\n\tKeetaAssetMovementAnchorShareKYCRequest,\n\tKeetaAssetMovementAnchorShareKYCResponse,\n\tKeetaAssetMovementAnchorListPersistentForwardingClientRequest,\n\tKeetaPersistentForwardingAddressDetails,\n\tKeetaAssetMovementAnchorInitiateTransferResponse,\n\tKeetaAssetMovementAnchorExecuteTransferClientRequest,\n\tAnchorTokenLocationMetadata,\n\tAnchorCustomLocationMetadata,\n\tChainLocationString,\n\tAssetLocationLike,\n\tPerChainLocationMetadata,\n\tKeetaAssetMovementAnchorSimulateTransferResponse,\n\tKeetaAssetMovementAnchorSimulateTransferClientRequest,\n\tKeetaAssetMovementAnchorInitiateTransferRequest,\n\tKeetaAssetMovementAnchorSimulateTransferRequest\n} from './common.js';\nimport {\n\tassertKeetaSupportedAssetsMetadataItem,\n\tconvertAssetLocationToString,\n\tconvertAssetOrPairSearchInputToCanonical,\n\tconvertAssetSearchInputToCanonical,\n\tgetKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData,\n\tisKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorExecuteTransferRequestSigningData,\n\tgetKeetaAssetMovementAnchorGetTransferStatusRequestSigningData,\n\tgetKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\tgetKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\tgetKeetaAssetMovementAnchorShareKYCRequestSigningData,\n\tisKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tisKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tisKeetaAssetMovementAnchorExecuteTransferResponse,\n\tisKeetaAssetMovementAnchorGetExchangeStatusResponse,\n\tisKeetaAssetMovementAnchorInitiateTransferResponse,\n\tisKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\tisKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\tisKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tisKeetaAssetMovementAnchorShareKYCResponse,\n\ttoAssetLocationFromString,\n\tisExternalChainAsset,\n\tisAnchorTokenLocationMetadata,\n\tisKeetaAssetMovementAnchorSimulateTransferResponse,\n\tgetKeetaAssetMovementAnchorSimulateTransferRequestSigningData,\n\tErrors\n} from './common.js';\nimport type { Logger } from '../../lib/log/index.ts';\nimport Resolver from \"../../lib/resolver.js\";\nimport type { ServiceMetadata, ServiceMetadataAuthenticationType, ServiceMetadataEndpoint, SharedLookupCriteria } from '../../lib/resolver.ts';\nimport crypto from '../../lib/utils/crypto.js';\nimport type { BrandedString } from '../../lib/utils/brand.js';\nimport { createAssertEquals } from 'typia';\nimport type { ExtractOk, HTTPSignedField } from '../../lib/http-server/common.js';\nimport { addSignatureToURL } from '../../lib/http-server/common.js';\nimport type { Signable } from '../../lib/utils/signing.js';\nimport { SignData } from '../../lib/utils/signing.js';\nimport { KeetaAnchorError } from '../../lib/error.js';\nimport { KeetaNet } from '../../client/index.js';\nimport { resolveSharedAnchorMetadataLegalExtension, type SharedAnchorMetadataLegalExtension, type AnchorMetadataLegalField } from '../../lib/metadata.types.js';\nimport type { ExternalChainAsset, ExternalChainLocationType } from '../../lib/asset.js';\n\n// const PARANOID = true;\n\n/**\n * The configuration options for the Asset Movement (Inbound/Outbound) Anchor client.\n */\nexport type KeetaAssetMovementClientConfig = {\n\t/**\n\t * The ID of the client. This is used to identify the client in logs.\n\t * If not provided, a random ID will be generated.\n\t */\n\tid?: string;\n\t/**\n\t * The logger to use for logging messages. If not provided, no logging\n\t * will be done.\n\t */\n\tlogger?: Logger;\n\t/**\n\t * The resolver to use for resolving Asset Movement Anchor services. If not\n\t * provided, a default resolver will be created using the provided\n\t * client and network (if the network is also not provided and the\n\t * client is not a UserClient, an error occurs).\n\t */\n\tresolver?: Resolver;\n\t/**\n\t * The account to use for signing requests. If not provided, the\n\t * account associated with the provided client will be used. If there\n\t * is no account associated with the client, an error occurs.\n\t */\n\tsigner?: InstanceType<typeof KeetaNetLib.Account>;\n\t/**\n\t * Account to perform changes on. If not provided, the account\n\t * associated with the provided client will be used. If there is no\n\t * account associated with the client, an error occurs.\n\t */\n\taccount?: InstanceType<typeof KeetaNetLib.Account>;\n} & Omit<NonNullable<Parameters<typeof getDefaultResolver>[1]>, 'client'>;\n\n/**\n * An opaque type that represents a provider ID.\n */\ntype ProviderID = BrandedString<'AssetMovementProviderID'>;\n\n/**\n * An opaque type that represents an Asset Movement Anchor request ID\n */\n// type RequestID = BrandedString<'AssetMovementRequestID'>;\n\nconst KeetaAssetMovementAnchorClientAccessToken = Symbol('KeetaAssetMovementAnchorClientAccessToken');\n\nfunction typedAssetMovementServiceEntries<T extends object>(obj: T): [keyof T, T[keyof T]][] {\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\treturn(Object.entries(obj) as [keyof T, T[keyof T]][]);\n}\n\nconst assertServiceMetadataEndpoint = createAssertEquals<ServiceMetadataEndpoint>();\n\n/**\n * A list of operations that can be performed by the Asset Movement Anchor service.\n */\ntype KeetaAssetMovementAnchorOperations = {\n\t[operation in keyof NonNullable<ServiceMetadata['services']['assetMovement']>[string]['operations']]?: {\n\t\turl: (params?: { [key: string]: string; }) => URL;\n\t\toptions: {\n\t\t\tauthentication: ServiceMetadataAuthenticationType;\n\t\t};\n\t};\n};\n\n/**\n * The service information for a KYC Anchor service.\n */\ninterface KeetaAssetMovementServiceInfo extends SharedAnchorMetadataLegalExtension {\n\toperations: {\n\t\t[operation in keyof KeetaAssetMovementAnchorOperations]: Promise<KeetaAssetMovementAnchorOperations[operation]>;\n\t};\n\n\tsupportedAssets: SupportedAssetsMetadata[];\n\tlocationMetadata?: AnchorCustomLocationMetadata;\n};\n\n/**\n * For each matching KYC Anchor service, this type describes the\n * operations available and the country codes that the service supports.\n */\ntype GetEndpointsResult = {\n\t[id: ProviderID]: KeetaAssetMovementServiceInfo;\n};\n\nfunction validateURL(url: string | undefined): URL {\n\tif (url === undefined || url === null) {\n\t\tthrow(new Error('Invalid URL: null or undefined'));\n\t}\n\n\tconst parsedURL = new URL(url);\n\n\treturn(parsedURL);\n}\n\nasync function getEndpoints(resolver: Resolver, request: ProviderSearchInput, shared?: SharedLookupCriteria, logger?: Logger): Promise<GetEndpointsResult | null> {\n\tconst asset = request.asset ? { asset: convertAssetOrPairSearchInputToCanonical(request.asset) } : undefined;\n\tconst from = request.from ? { from: convertAssetLocationToString(request.from) } : {};\n\tconst to = request.to ? { to: convertAssetLocationToString(request.to) } : {};\n\tconst rail = request.rail ? { rail: request.rail } : {};\n\tconst response = await resolver.lookup('assetMovement', {\n\t\t...asset,\n\t\t...from,\n\t\t...to,\n\t\t...rail\n\t}, shared);\n\n\tif (response === undefined) {\n\t\treturn(null);\n\t}\n\n\tconst serviceInfoPromises = Object.entries(response).map(async function([id, serviceInfo]): Promise<[ProviderID, KeetaAssetMovementServiceInfo]> {\n\t\tconst supportedAssetsMetadata = await Resolver.Metadata.fullyResolveValuizable(serviceInfo.supportedAssets);\n\n\t\tif (!Array.isArray(supportedAssetsMetadata)) {\n\t\t\tthrow(new Error('Invalid supportedAssets metadata: expected an array'));\n\t\t}\n\n\t\tconst supportedAssets = [];\n\t\tfor (const item of supportedAssetsMetadata) {\n\t\t\ttry {\n\t\t\t\tsupportedAssets.push(assertKeetaSupportedAssetsMetadataItem(item));\n\t\t\t} catch (error) {\n\t\t\t\tlogger?.debug('getEndpoints', `Failed to resolve supportedAssets metadata item for provider ${id}`, error, item);\n\t\t\t}\n\t\t}\n\n\t\tconst locationMetadata = await (async () => {\n\t\t\tlet locationMetadataVal;\n\t\t\tif (serviceInfo.locationMetadata) {\n\t\t\t\tlocationMetadataVal = await serviceInfo.locationMetadata('object');\n\t\t\t}\n\n\t\t\tif (!locationMetadataVal) {\n\t\t\t\treturn(undefined);\n\t\t\t}\n\n\t\t\tconst chainsResult = await Promise.allSettled(Object.entries(locationMetadataVal).map(async ([ location, assetsValue ]) => {\n\t\t\t\tconst parsedLocation = toAssetLocationFromString(location);\n\n\t\t\t\tif (parsedLocation.type !== 'chain') {\n\t\t\t\t\tthrow(new Error(`Invalid location type in AssetLocation string: ${parsedLocation.type}`));\n\t\t\t\t}\n\n\t\t\t\tif (parsedLocation.chain.type === 'keeta') {\n\t\t\t\t\tthrow(new Error('Keeta chain type is not supported in AssetLocation metadata')) ;\n\t\t\t\t}\n\n\t\t\t\tconst chainType = parsedLocation.chain.type;\n\n\t\t\t\t// We can assert here as we have validated the chain type in the parsing function\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\tconst locationString = convertAssetLocationToString(parsedLocation) as ChainLocationString<ExternalChainLocationType>;\n\n\t\t\t\tlet resolvedAssetsObject = undefined;\n\t\t\t\tif (assetsValue) {\n\t\t\t\t\tresolvedAssetsObject = await assetsValue('object');\n\t\t\t\t}\n\n\t\t\t\tif (!resolvedAssetsObject) {\n\t\t\t\t\treturn(null);\n\t\t\t\t}\n\n\t\t\t\tlet assets: {\n\t\t\t\t\t[AssetId in ExternalChainAsset<typeof chainType>]?: AnchorTokenLocationMetadata | undefined;\n\t\t\t\t} | undefined;\n\n\t\t\t\tif (resolvedAssetsObject.assets) {\n\t\t\t\t\tconst assetsValue = await resolvedAssetsObject.assets('object');\n\t\t\t\t\tconst resolvedAssets = await Promise.allSettled(Object.entries(assetsValue).map(async ([ assetId, assetMetadata ]) => {\n\t\t\t\t\t\tif (!isExternalChainAsset(assetId, chainType)) {\n\t\t\t\t\t\t\tthrow(new Error(`Invalid asset ID for chain type ${chainType}: ${assetId}`));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet assetMetadataVal;\n\t\t\t\t\t\tif (assetMetadata) {\n\t\t\t\t\t\t\tassetMetadataVal = await assetMetadata('object');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!assetMetadataVal) {\n\t\t\t\t\t\t\treturn(null);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst anchorTokenLocationMetadata = {\n\t\t\t\t\t\t\tdisplayName: await assetMetadataVal.displayName?.('string'),\n\t\t\t\t\t\t\tticker: await assetMetadataVal.ticker?.('string'),\n\t\t\t\t\t\t\tlogoURI: await assetMetadataVal.logoURI?.('string'),\n\t\t\t\t\t\t\tdecimalPlaces: await assetMetadataVal.decimalPlaces?.('primitive')\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (!isAnchorTokenLocationMetadata(anchorTokenLocationMetadata)) {\n\t\t\t\t\t\t\tthrow(new Error(`Invalid asset metadata for asset ID ${assetId} in chain type ${chainType}`));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn([ assetId, anchorTokenLocationMetadata ] as const);\n\t\t\t\t\t}));\n\n\t\t\t\t\tfor (const result of resolvedAssets) {\n\t\t\t\t\t\tif (result.status === 'rejected') {\n\t\t\t\t\t\t\tlogger?.debug('Failed to resolve asset metadata', result.reason);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!result.value) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!assets) {\n\t\t\t\t\t\t\tassets = {};\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tassets[result.value[0]] = result.value[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn([\n\t\t\t\t\tlocationString,\n\t\t\t\t\t{\n\t\t\t\t\t\t...(assets ? { assets } : {})\n\t\t\t\t\t}\n\t\t\t\t] as const)\n\t\t\t}));\n\n\t\t\tlet chains: AnchorCustomLocationMetadata | undefined;\n\t\t\tfor (const result of chainsResult) {\n\t\t\t\tif (result.status === 'rejected') {\n\t\t\t\t\tlogger?.debug('Failed to resolve location metadata', result.reason);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!result.value) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (!chains) {\n\t\t\t\t\tchains = {};\n\t\t\t\t}\n\n\t\t\t\t// XXX:TODO Add comment\n\t\t\t\t// @ts-ignore\n\t\t\t\tchains[result.value[0]] = result.value[1];\n\t\t\t}\n\n\t\t\tif (!chains) {\n\t\t\t\treturn(undefined);\n\t\t\t}\n\n\t\t\treturn(chains);\n\t\t})();\n\n\t\tconst operations = await serviceInfo.operations('object');\n\t\tconst operationsFunctions: KeetaAssetMovementServiceInfo['operations'] = {};\n\t\tfor (const [ key, operation ] of Object.entries(operations)) {\n\t\t\tif (operation === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tObject.defineProperty(operationsFunctions, key, {\n\t\t\t\tget: async function() {\n\t\t\t\t\tconst endpointInfo = assertServiceMetadataEndpoint(await Resolver.Metadata.fullyResolveValuizable(operation));\n\n\t\t\t\t\tlet url;\n\t\t\t\t\tlet authentication: ServiceMetadataAuthenticationType = {\n\t\t\t\t\t\ttype: 'none',\n\t\t\t\t\t\tmethod: 'keeta-account'\n\t\t\t\t\t};\n\n\t\t\t\t\tif (typeof endpointInfo === 'string') {\n\t\t\t\t\t\turl = endpointInfo;\n\t\t\t\t\t} else {\n\t\t\t\t\t\turl = endpointInfo.url;\n\t\t\t\t\t\tif (endpointInfo.options?.authentication) {\n\t\t\t\t\t\t\tauthentication = endpointInfo.options.authentication;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn({\n\t\t\t\t\t\turl: function(params?: { [key: string]: string; }): URL {\n\t\t\t\t\t\t\tlet substitutedURL;\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tsubstitutedURL = decodeURI(url)\n\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\tlogger?.debug('getEndpoints', 'Failed to decode URI, using original URL for substitution', error, url);\n\n\t\t\t\t\t\t\t\tsubstitutedURL = url;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (const [paramKey, paramValue] of Object.entries(params ?? {})) {\n\t\t\t\t\t\t\t\tsubstitutedURL = substitutedURL.replace(`{${paramKey}}`, encodeURIComponent(paramValue));\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn(validateURL(substitutedURL));\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: { authentication }\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\t\t}\n\n\t\treturn([\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tid as unknown as ProviderID,\n\t\t\t{\n\t\t\t\t...(await resolveSharedAnchorMetadataLegalExtension(serviceInfo.legal, { logger })),\n\t\t\t\toperations: operationsFunctions,\n\t\t\t\tsupportedAssets: supportedAssets,\n\t\t\t\t...(locationMetadata ? { locationMetadata } : {})\n\t\t\t}\n\t\t]);\n\t});\n\n\tconst retval = Object.fromEntries(await Promise.all(serviceInfoPromises));\n\n\treturn(retval);\n}\n\ninterface KeetaAssetMovementAnchorBaseConfig {\n\tclient: KeetaNetUserClient;\n\tlogger?: Logger | undefined;\n}\n\nclass KeetaAssetMovementAnchorBase {\n\tprotected readonly logger?: Logger | undefined;\n\tprotected readonly client: KeetaNetUserClient;\n\n\tconstructor(config: KeetaAssetMovementAnchorBaseConfig) {\n\t\tthis.client = config.client;\n\t\tthis.logger = config.logger;\n\t}\n}\n\ntype SimulationOrTransferResponse = ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse> | ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>;\n\ninterface BaseKeetaAssetMovementTransferConstructorArguments<Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest | KeetaAssetMovementAnchorSimulateTransferClientRequest, Transfer extends SimulationOrTransferResponse> {\n\tprovider: KeetaAssetMovementAnchorProvider;\n\trequest: Request;\n\ttransfer: Transfer;\n}\n\nabstract class BaseKeetaAssetMovementTransfer<Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest | KeetaAssetMovementAnchorSimulateTransferClientRequest, Transfer extends SimulationOrTransferResponse> {\n\treadonly provider: KeetaAssetMovementAnchorProvider;\n\treadonly request: Request;\n\treadonly transfer: Transfer;\n\n\treadonly abstract isSimulation: Request extends KeetaAssetMovementAnchorInitiateTransferClientRequest ? false : true;\n\n\tconstructor({ request, transfer, provider }: BaseKeetaAssetMovementTransferConstructorArguments<Request, Transfer>) {\n\t\tthis.provider = provider;\n\t\tthis.request = request;\n\t\tthis.transfer = transfer;\n\t}\n\n\tget instructions(): Transfer['instructionChoices'] {\n\t\treturn(this.transfer.instructionChoices);\n\t}\n}\n\n/**\n * Represents an in-progress Asset Movement request.\n */\nclass KeetaAssetMovementTransfer extends BaseKeetaAssetMovementTransfer<KeetaAssetMovementAnchorInitiateTransferClientRequest, ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>> {\n\treadonly isSimulation = false as const;\n\n\tget transferId(): string {\n\t\treturn(this.transfer.id);\n\t}\n\n\tasync getTransferStatus(): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tconst account = this.request.account ? { account: this.request.account } : undefined;\n\t\treturn(await this.provider.getTransferStatus({ id: this.transfer.id, ...account }));\n\t}\n\n\tasync executeTransfer(input: Omit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tconst account = this.request.account ? { account: this.request.account } : undefined;\n\t\treturn(await this.provider.executeTransfer({ id: this.transfer.id, ...input, ...account }));\n\t}\n}\n\nclass KeetaAssetMovementSimulatedTransfer extends BaseKeetaAssetMovementTransfer<KeetaAssetMovementAnchorSimulateTransferClientRequest, ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>> {\n\treadonly isSimulation = true as const;\n\n\tasync createTransfer(overrides?: {\n\t\tto: Partial<Pick<KeetaAssetMovementAnchorInitiateTransferClientRequest['to'], 'depositMessage' | 'recipient'>>;\n\t}): Promise<KeetaAssetMovementTransfer> {\n\t\tconst to = {\n\t\t\t...this.request.to,\n\t\t\t...overrides?.to\n\t\t};\n\n\t\tif (!to.recipient) {\n\t\t\tthrow(new Error('Recipient is required to create a transfer from a simulation'));\n\t\t}\n\n\t\treturn(await this.provider.initiateTransfer({\n\t\t\t...this.request,\n\t\t\tto: {\n\t\t\t\t...to,\n\t\t\t\trecipient: to.recipient\n\t\t\t}\n\t\t}));\n\t}\n}\n\ninterface AwaitPromiseURLOptions {\n\tdefaultPollIntervalMs?: number;\n\ttimeoutMs?: number;\n\tabortSignal?: AbortSignal;\n}\n\nexport class KeetaAssetMovementAnchorProvider extends KeetaAssetMovementAnchorBase {\n\treadonly serviceInfo: KeetaAssetMovementServiceInfo;\n\treadonly providerID: ProviderID;\n\tprivate readonly parent: KeetaAssetMovementAnchorClient;\n\n\tconstructor(serviceInfo: KeetaAssetMovementServiceInfo, providerID: ProviderID, parent: KeetaAssetMovementAnchorClient) {\n\t\tconst parentPrivate = parent._internals(KeetaAssetMovementAnchorClientAccessToken);\n\t\tsuper(parentPrivate);\n\n\t\tthis.serviceInfo = serviceInfo;\n\t\tthis.providerID = providerID;\n\t\tthis.parent = parent;\n\t}\n\n\tasync #getOperationData(operationName: keyof KeetaAssetMovementAnchorOperations, params?: { [key: string]: string; }) {\n\t\tconst endpoint = await this.serviceInfo.operations[operationName];\n\t\tif (endpoint === undefined) {\n\t\t\tthrow(new Errors.OperationNotSupported({}, `Asset Movement service does not support ${operationName} operation`));\n\t\t}\n\n\t\tif (endpoint.options.authentication.method !== 'keeta-account') {\n\t\t\tthrow(new Error(`Unsupported authentication method: ${endpoint.options.authentication.method}`));\n\t\t}\n\n\t\treturn({\n\t\t\turl: endpoint.url(params),\n\t\t\tauth: endpoint.options.authentication\n\t\t})\n\t}\n\n\tasync isOperationSupported(operationName: keyof KeetaAssetMovementAnchorOperations): Promise<boolean> {\n\t\ttry {\n\t\t\tawait this.#getOperationData(operationName);\n\t\t\treturn(true);\n\t\t} catch (error) {\n\t\t\tif (error instanceof Errors.OperationNotSupported) {\n\t\t\t\treturn(false);\n\t\t\t}\n\n\t\t\tthrow(error);\n\t\t}\n\t}\n\n\tasync #parseResponseError(data: unknown) {\n\t\tif (typeof data !== 'object' || data === null) {\n\t\t\tthrow(new Error('Response is not an error'));\n\t\t}\n\n\t\tif (!('ok' in data) || data.ok !== false) {\n\t\t\tthrow(new Error('Response is not an error'));\n\t\t}\n\n\t\tlet errorStr;\n\n\t\tlet parsedError: KeetaAnchorError | null = null;\n\t\ttry {\n\t\t\tparsedError = await KeetaAnchorError.fromJSON(data);\n\t\t} catch (error: unknown) {\n\t\t\tthis.logger?.debug('Failed to parse error response as KeetaAnchorError', error, data);\n\t\t}\n\n\t\tif (parsedError) {\n\t\t\treturn(parsedError);\n\t\t} else {\n\t\t\tif ('error' in data && typeof data.error === 'string') {\n\t\t\t\terrorStr = data.error;\n\t\t\t} else {\n\t\t\t\terrorStr = 'Unknown error';\n\t\t\t}\n\n\t\t\treturn(new Error(`asset movement request failed: ${errorStr}`));\n\t\t}\n\t}\n\n\tasync #makeRequest<\n\t\tResponse extends { ok: true } | { ok: false; error: string; },\n\t\tRequest = undefined,\n\t\tSerializedRequest = Request\n\t>(input: {\n\t\tmethod: 'GET' | 'POST';\n\t\tendpoint: keyof KeetaAssetMovementAnchorOperations;\n\t\taccount?: KeetaNetAccount | undefined;\n\t\tparams?: { [key: string]: string; } | undefined;\n\t\tbody?: Request | undefined;\n\t\tserializeRequest?: (body: Request) => (SerializedRequest | Promise<Omit<SerializedRequest, 'signed'>>);\n\n\t\tgetSignedData?: (request: SerializedRequest) => Signable;\n\t\tisResponse: (data: unknown) => data is Response;\n\t}): Promise<Extract<Response, { ok: true }>> {\n\t\tconst { url, auth } = await this.#getOperationData(input.endpoint, input.params);\n\n\t\tlet serializedRequest;\n\n\t\tif (input.body && input.serializeRequest) {\n\t\t\tserializedRequest = await input.serializeRequest(input.body);\n\t\t} else {\n\t\t\tserializedRequest = input.body;\n\t\t}\n\n\t\tlet signed: HTTPSignedField | undefined;\n\n\t\tif (auth.type === 'required' || (auth.type === 'optional' && input.account)) {\n\t\t\tif (!input.account) {\n\t\t\t\tthrow(new Error('Account information is required for this operation'));\n\t\t\t}\n\n\t\t\tif (!input.getSignedData) {\n\t\t\t\tthrow(new Error('getSignedData function is required for signing the request'));\n\t\t\t}\n\n\t\t\t// We need this assertion because TypeScript cannot infer that the type is correct here, it is correct in the arguments.\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tconst signable = input.getSignedData(serializedRequest as SerializedRequest);\n\n\t\t\tsigned = await SignData(input.account.assertAccount(), signable);\n\t\t}\n\n\t\tlet usingUrl = url;\n\t\tconst headers: { [key: string]: string } = {\n\t\t\t'Accept': 'application/json'\n\t\t};\n\t\tlet body: BodyInit | null = null;\n\t\tif (input.method === 'POST') {\n\t\t\theaders['Content-Type'] = 'application/json';\n\t\t\tbody = JSON.stringify({ ...serializedRequest, signed });\n\t\t} else {\n\t\t\tif (signed) {\n\t\t\t\tif (!input.account) {\n\t\t\t\t\tthrow(new Error('invariant: Account information is required for this operation, which should exist at this point'));\n\t\t\t\t}\n\n\t\t\t\tusingUrl = addSignatureToURL(usingUrl, { signedField: signed, account: input.account.assertAccount() });\n\t\t\t}\n\n\t\t\tif (input.body) {\n\t\t\t\tthrow(new Error('Body cannot be sent with GET requests'));\n\t\t\t}\n\t\t}\n\n\t\tconst requestInformation = await fetch(usingUrl, {\n\t\t\tmethod: input.method, headers, body\n\t\t});\n\n\t\tconst requestInformationJSON: unknown = await requestInformation.json();\n\t\tif (!input.isResponse(requestInformationJSON)) {\n\t\t\tthrow(new Error(`Invalid response from asset movement service: ${JSON.stringify(requestInformationJSON)}`));\n\t\t}\n\n\t\tif (!requestInformationJSON.ok) {\n\t\t\tthrow(await this.#parseResponseError(requestInformationJSON));\n\t\t}\n\n\t\t// We need this assertion because TypeScript cannot infer that the type is correct here, it is correct because we checked it above.\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\treturn(requestInformationJSON as Extract<Response, { ok: true }>);\n\t}\n\n\tasync #initiateOrSimulateTransfer(simulate: true, request: KeetaAssetMovementAnchorSimulateTransferClientRequest): Promise<KeetaAssetMovementSimulatedTransfer>;\n\tasync #initiateOrSimulateTransfer(simulate: false, request: KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer>;\n\tasync #initiateOrSimulateTransfer(simulate: boolean, request: KeetaAssetMovementAnchorSimulateTransferClientRequest | KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer | KeetaAssetMovementSimulatedTransfer> {\n\t\tthis.logger?.debug(`Starting Asset Movement Transfer for provider ID: ${String(this.providerID)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: simulate ? 'simulateTransfer' : 'initiateTransfer',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body): KeetaAssetMovementAnchorInitiateTransferRequest | KeetaAssetMovementAnchorSimulateTransferRequest {\n\t\t\t\tconst { account, ...rest } = body;\n\t\t\t\treturn({\n\t\t\t\t\t...rest,\n\t\t\t\t\tvalue: String(body.value),\n\t\t\t\t\tfrom: {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.from.location),\n\t\t\t\t\t\t...(request.from.source ? { source: request.from.source } : {})\n\t\t\t\t\t},\n\t\t\t\t\tto: {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.to.location),\n\t\t\t\t\t\t...(body.to.recipient ? { recipient: body.to.recipient } : {}),\n\t\t\t\t\t\t...(body.to.depositMessage ? { depositMessage: body.to.depositMessage } : {})\n\t\t\t\t\t},\n\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset),\n\t\t\t\t\t...(account ? { account: account.assertAccount().publicKeyString.get() } : {})\n\t\t\t\t})\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: simulate ? getKeetaAssetMovementAnchorSimulateTransferRequestSigningData : getKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\t\t\tisResponse(data): data is KeetaAssetMovementAnchorSimulateTransferResponse | KeetaAssetMovementAnchorInitiateTransferResponse {\n\t\t\t\tif (simulate) {\n\t\t\t\t\treturn(isKeetaAssetMovementAnchorSimulateTransferResponse(data));\n\t\t\t\t} else {\n\t\t\t\t\treturn(isKeetaAssetMovementAnchorInitiateTransferResponse(data));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\n\t\tif (simulate) {\n\t\t\tthis.logger?.debug(`asset movement simulation request successful`);\n\n\t\t\treturn(new KeetaAssetMovementSimulatedTransfer({\n\t\t\t\tprovider: this,\n\t\t\t\trequest,\n\t\t\t\ttransfer: requestInformationJSON\n\t\t\t}));\n\t\t} else {\n\t\t\tif (!('id' in requestInformationJSON)) {\n\t\t\t\tthrow(new Error('expected provider to return id but did not'));\n\t\t\t}\n\n\t\t\tthis.logger?.debug(`asset movement transfer request successful, request ID ${requestInformationJSON.id}`);\n\n\t\t\tif (!('recipient' in request.to)) {\n\t\t\t\tthrow(new Error('Recipient information is required in the request to create a transfer'));\n\t\t\t}\n\n\t\t\treturn(new KeetaAssetMovementTransfer({\n\t\t\t\tprovider: this,\n\t\t\t\trequest: {\n\t\t\t\t\t...request,\n\t\t\t\t\tto: {\n\t\t\t\t\t\t...request.to,\n\t\t\t\t\t\trecipient: request.to.recipient\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttransfer: requestInformationJSON\n\t\t\t}));\n\t\t}\n\t}\n\n\tasync initiateTransfer(request: KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer> {\n\t\treturn(await this.#initiateOrSimulateTransfer(false, request));\n\t}\n\n\tasync simulateTransfer(request: KeetaAssetMovementAnchorSimulateTransferClientRequest): Promise<KeetaAssetMovementSimulatedTransfer> {\n\t\treturn(await this.#initiateOrSimulateTransfer(true, request));\n\t}\n\n\tasync executeTransfer(request: KeetaAssetMovementAnchorExecuteTransferClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tthis.logger?.debug(`Starting Asset Movement Transfer for provider ID: ${String(this.providerID)}`);\n\n\t\tconst { id, ...rest } = request;\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorGetTransferStatusResponse,\n\t\t\tOmit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'executeTransfer',\n\t\t\tparams: { id: request.id },\n\t\t\taccount: request.account,\n\t\t\tbody: rest,\n\t\t\tgetSignedData: (body: Omit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>) => {\n\t\t\t\treturn(getKeetaAssetMovementAnchorExecuteTransferRequestSigningData({ id, ...body }));\n\t\t\t},\n\t\t\tisResponse: isKeetaAssetMovementAnchorExecuteTransferResponse\n\t\t});\n\n\t\tthis.logger?.debug(`asset movement execute transfer successful, transaction ID ${requestInformationJSON.transaction.id}`);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync getTransferStatus(request: KeetaAssetMovementAnchorGetTransferStatusClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>> {\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'GET',\n\t\t\tendpoint: 'getTransferStatus',\n\t\t\taccount: request.account,\n\t\t\tparams: { id: request.id },\n\t\t\tgetSignedData: () => getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData(request),\n\t\t\tisResponse: isKeetaAssetMovementAnchorGetExchangeStatusResponse\n\t\t});\n\n\t\tthis.logger?.debug(`asset movement request successful, request ID ${request.id}`);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync initiatePersistentForwardingTemplate(request: KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse>> {\n\t\tthis.logger?.debug(`Initiating persistent forwarding template for provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst result = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\t\t\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest,\n\t\t\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'initiatePersistentForwardingTemplate',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\tconst { account, ...rest } = body;\n\t\t\t\treturn({\n\t\t\t\t\t...rest,\n\t\t\t\t\tlocation: convertAssetLocationToString(body.location),\n\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset),\n\t\t\t\t\t...(account ? { account: account.assertAccount().publicKeyString.get() } : {})\n\t\t\t\t});\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse\n\t\t});\n\n\t\tthis.logger?.debug(`initiate persistent forwarding template successful, session ID: ${result.id}`);\n\n\t\treturn(result);\n\t}\n\n\tasync createPersistentForwardingTemplate(request: KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingResponse>> {\n\t\tthis.logger?.debug(`Creating persistent forwarding for provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'createPersistentForwardingTemplate',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\tconst { account, ...rest }\t= body;\n\n\t\t\t\tconst sharedFields = {\n\t\t\t\t\t...rest,\n\t\t\t\t\t...(account ? { account: account.assertAccount().publicKeyString.get() } : {})\n\t\t\t\t}\n\n\t\t\t\tif ('data' in body) {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...sharedFields,\n\t\t\t\t\t\tdata: body.data\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...sharedFields,\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.location),\n\t\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse\n\t\t});\n\n\t\tthis.logger?.debug(`create persistent forwarding request successful`, requestInformationJSON.address);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync createPersistentForwardingAddress(request: KeetaAssetMovementAnchorCreatePersistentForwardingClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingResponse>> {\n\t\tthis.logger?.debug(`Creating persistent forwarding for provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingClientRequest,\n\t\t\tKeetaAssetMovementAnchorCreatePersistentForwardingRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'createPersistentForwarding',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\tconst base = {\n\t\t\t\t\tsourceLocation: convertAssetLocationToString(body.sourceLocation),\n\t\t\t\t\tasset: convertAssetOrPairSearchInputToCanonical(body.asset),\n\t\t\t\t\taccount: body.account?.assertAccount().publicKeyString.get()\n\t\t\t\t} as const;\n\n\t\t\t\tif ('persistentAddressTemplateId' in body) {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...base,\n\t\t\t\t\t\tpersistentAddressTemplateId: body.persistentAddressTemplateId\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...base,\n\t\t\t\t\t\tdestinationAddress: body.destinationAddress,\n\t\t\t\t\t\tdestinationLocation: convertAssetLocationToString(body.destinationLocation)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorCreatePersistentForwardingResponse\n\t\t});\n\n\t\tthis.logger?.debug(`create persistent forwarding request successful`, requestInformationJSON.address);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync listForwardingAddressTemplates(request: KeetaAssetMovementAnchorListForwardingAddressTemplateClientRequest): Promise<{ templates: PersistentAddressTemplateData[]; total: number; }> {\n\t\tthis.logger?.debug(`Listing persistent forwarding address templates for provider ID: ${String(this.providerID)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'listPersistentForwardingTemplate',\n\t\t\taccount: request.account,\n\t\t\tbody: request,\n\t\t\tserializeRequest(body) {\n\t\t\t\treturn({\n\t\t\t\t\t...(body.account ? { account: body.account.assertAccount().publicKeyString.get() } : {}),\n\t\t\t\t\tasset: body.asset?.map(a => convertAssetSearchInputToCanonical(a)),\n\t\t\t\t\tlocation: body.location?.map(l => convertAssetLocationToString(l))\n\t\t\t\t});\n\t\t\t},\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorListForwardingAddressTemplateResponse\n\t\t});\n\n\t\tthis.logger?.debug(`list persistent forwarding address templates request successful`, requestInformationJSON.templates);\n\n\t\treturn({\n\t\t\ttemplates: requestInformationJSON.templates,\n\t\t\ttotal: Number(requestInformationJSON.total)\n\t\t});\n\t}\n\n\tasync listForwardingAddresses(request: KeetaAssetMovementAnchorListPersistentForwardingClientRequest): Promise<{ addresses: KeetaPersistentForwardingAddressDetails[]; total: number; }> {\n\t\tthis.logger?.debug(`Listing persistent forwarding address templates for provider ID: ${String(this.providerID)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'listPersistentForwarding',\n\t\t\taccount: request.account,\n\t\t\tbody: request,\n\t\t\tserializeRequest(body) {\n\t\t\t\treturn({\n\t\t\t\t\t...body,\n\t\t\t\t\taccount: body.account?.assertAccount().publicKeyString.get(),\n\t\t\t\t\tsearch: body.search ? body.search.map(function(searchItem) {\n\t\t\t\t\t\treturn({\n\t\t\t\t\t\t\t...searchItem,\n\t\t\t\t\t\t\tasset: searchItem.asset ? convertAssetSearchInputToCanonical(searchItem.asset) : undefined,\n\t\t\t\t\t\t\tsourceLocation: searchItem.sourceLocation ? convertAssetLocationToString(searchItem.sourceLocation) : undefined,\n\t\t\t\t\t\t\tdestinationLocation: searchItem.destinationLocation ? convertAssetLocationToString(searchItem.destinationLocation) : undefined\n\t\t\t\t\t\t})\n\t\t\t\t\t}) : undefined\n\t\t\t\t});\n\t\t\t},\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorListPersistentForwardingResponse\n\t\t});\n\n\t\tthis.logger?.debug('KeetaAssetMovementAnchorProvider::listPersistentForwardingAddresses', `list persistent forwarding address request successful`, requestInformationJSON.addresses);\n\n\t\treturn({\n\t\t\taddresses: requestInformationJSON.addresses,\n\t\t\ttotal: Number(requestInformationJSON.total)\n\t\t});\n\t}\n\n\tasync listTransactions(request: KeetaAssetMovementAnchorlistTransactionsClientRequest): Promise<ExtractOk<KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse>> {\n\t\tthis.logger?.debug(`List persistent forwarding transactions provider ID: ${String(this.providerID)}, request: ${JSON.stringify(request)}`);\n\n\t\tconst requestInformationJSON = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\t\t\tKeetaAssetMovementAnchorlistTransactionsClientRequest,\n\t\t\tKeetaAssetMovementAnchorlistTransactionsRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'listTransactions',\n\t\t\taccount: request.account,\n\t\t\tserializeRequest(body) {\n\t\t\t\treturn({\n\t\t\t\t\taccount: body.account?.assertAccount().publicKeyString.get(),\n\t\t\t\t\tpagination: body.pagination,\n\t\t\t\t\tpersistentAddresses: body.persistentAddresses?.map(pa => ({\n\t\t\t\t\t\tlocation: convertAssetLocationToString(pa.location),\n\t\t\t\t\t\t...('persistentAddressTemplate' in pa ?\n\t\t\t\t\t\t\t{ persistentAddressTemplate: pa.persistentAddressTemplate } :\n\t\t\t\t\t\t\t{ persistentAddress: pa.persistentAddress }\n\t\t\t\t\t\t)\n\t\t\t\t\t})),\n\t\t\t\t\tfrom: body.from ? {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.from.location),\n\t\t\t\t\t\tuserAddress: body.from.userAddress,\n\t\t\t\t\t\tasset: body.from.asset ? convertAssetSearchInputToCanonical(body.from.asset) : undefined\n\t\t\t\t\t} : undefined,\n\t\t\t\t\tto: body.to ? {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.to.location),\n\t\t\t\t\t\tuserAddress: body.to.userAddress,\n\t\t\t\t\t\tasset: body.to.asset ? convertAssetSearchInputToCanonical(body.to.asset) : undefined\n\t\t\t\t\t} : undefined\n\t\t\t\t});\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse\n\t\t});\n\n\t\tthis.logger?.debug(`list persistent transactions request successful, ${requestInformationJSON.transactions}`);\n\n\t\treturn(requestInformationJSON);\n\t}\n\n\tasync #awaitPromiseURL(promiseURL: string, options?: AwaitPromiseURLOptions): Promise<void> {\n\t\tconst startTime = Date.now();\n\n\t\tconst timeout = options?.timeoutMs ?? (5 * 60 * 1000);\n\n\t\twhile (true) {\n\t\t\tif (options?.abortSignal?.aborted) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tlet response;\n\n\t\t\ttry {\n\t\t\t\tresponse = await fetch(promiseURL);\n\t\t\t} catch (error) {\n\t\t\t\tthis.logger?.debug('KeetaAssetMovementAnchorProvider::awaitPromiseURL', 'Error fetching promise URL', error);\n\t\t\t\tthrow(new Error(`Error fetching promise URL: ${String(error)}`));\n\t\t\t}\n\n\t\t\tif (response.status === 200) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (response.status !== 202) {\n\t\t\t\tlet errorData: unknown;\n\t\t\t\ttry {\n\t\t\t\t\terrorData = await response.json();\n\t\t\t\t} catch {\n\t\t\t\t\tthrow(new Error(`Error parsing error response json from promise, status code ${response.status}`));\n\t\t\t\t}\n\t\t\t\tthrow(await this.#parseResponseError(errorData));\n\t\t\t}\n\n\t\t\tif (Date.now() - startTime > timeout) {\n\t\t\t\tthrow(new Error('Timeout waiting for promise URL to complete'));\n\t\t\t}\n\n\t\t\tlet retryAfterMS: number | undefined;\n\t\t\tconst retryAfterHeader = response.headers.get('Retry-After');\n\t\t\tif (retryAfterHeader) {\n\n\t\t\t\tif (!isNaN(Number(retryAfterHeader))) {\n\t\t\t\t\tretryAfterMS = Number(retryAfterHeader) * 1000;\n\t\t\t\t} else {\n\t\t\t\t\tconst retryAfterDate = new Date(retryAfterHeader);\n\t\t\t\t\tif (!isNaN(retryAfterDate.getTime())) {\n\t\t\t\t\t\tretryAfterMS = retryAfterDate.getTime() - Date.now();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!retryAfterMS) {\n\t\t\t\tretryAfterMS = options?.defaultPollIntervalMs ?? 1000;\n\t\t\t}\n\n\t\t\tawait KeetaNet.lib.Utils.Helper.asleep(retryAfterMS);\n\t\t}\n\t}\n\n\tasync shareKYCAttributes(request: KeetaAssetMovementAnchorShareKYCClientRequest, awaitOptions?: AwaitPromiseURLOptions): Promise<void> {\n\t\tthis.logger?.debug('Sharing KYC attributes');\n\n\t\tconst response = await this.#makeRequest<\n\t\t\tKeetaAssetMovementAnchorShareKYCResponse,\n\t\t\tKeetaAssetMovementAnchorShareKYCClientRequest,\n\t\t\tKeetaAssetMovementAnchorShareKYCRequest\n\t\t>({\n\t\t\tmethod: 'POST',\n\t\t\tendpoint: 'shareKYC',\n\t\t\taccount: request.account,\n\t\t\tasync serializeRequest(body) {\n\t\t\t\tlet attributes;\n\t\t\t\tif (typeof body.attributes === 'string') {\n\t\t\t\t\tattributes = body.attributes;\n\t\t\t\t} else {\n\t\t\t\t\tattributes = await body.attributes.export({ format: 'string' });\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\taccount: body.account.assertAccount().publicKeyString.get(),\n\t\t\t\t\tattributes: attributes,\n\t\t\t\t\t...(body.tosAgreement ? { tosAgreement: body.tosAgreement } : {})\n\t\t\t\t});\n\t\t\t},\n\t\t\tbody: request,\n\t\t\tgetSignedData: getKeetaAssetMovementAnchorShareKYCRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorShareKYCResponse\n\t\t});\n\n\t\tif (response.isPending && response.promiseURL) {\n\t\t\tthis.logger?.debug('KYC attribute sharing is pending, awaiting promise URL');\n\n\t\t\tlet promiseURL;\n\n\t\t\tif (response.promiseURL.startsWith('/')) {\n\t\t\t\tconst operationData = await this.#getOperationData('shareKYC');\n\t\t\t\tpromiseURL = new URL(response.promiseURL, operationData.url).toString();\n\t\t\t} else {\n\t\t\t\tpromiseURL = response.promiseURL;\n\t\t\t}\n\n\t\t\tawait this.#awaitPromiseURL(promiseURL, { ...awaitOptions });\n\t\t}\n\n\t\tthis.logger?.debug(`done sharing KYC attributes`);\n\t}\n\n\tgetAssetMetadataForLocation(location: AssetLocationLike, asset: ExternalChainAsset): AnchorTokenLocationMetadata | null {\n\t\tconst locationMetadata = this.serviceInfo.locationMetadata;\n\t\tif (!locationMetadata) {\n\t\t\treturn(null);\n\t\t}\n\n\t\tconst locationString = convertAssetLocationToString(location);\n\n\t\tif (!(locationString in locationMetadata)) {\n\t\t\treturn(null);\n\t\t}\n\n\t\t// We can assert here as we have validated the key is included above\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst locationSpecificMetadata = (locationMetadata as { [key: string]: PerChainLocationMetadata })[locationString];\n\n\t\tif (!locationSpecificMetadata?.assets || !(asset in locationSpecificMetadata.assets)) {\n\t\t\treturn(null);\n\t\t}\n\n\t\tconst assetMetadata = locationSpecificMetadata.assets[asset];\n\n\t\tif (!assetMetadata) {\n\t\t\treturn(null);\n\t\t}\n\n\t\treturn(assetMetadata);\n\t}\n\n\tgetLegalDisclaimers(): NonNullable<AnchorMetadataLegalField['disclaimers']> | null {\n\t\tconst disclaimers = this.serviceInfo.legal?.disclaimers;\n\t\tif (!disclaimers) {\n\t\t\treturn(null);\n\t\t}\n\n\t\treturn(disclaimers);\n\t}\n}\n\nclass KeetaAssetMovementAnchorClient extends KeetaAssetMovementAnchorBase {\n\treadonly resolver: Resolver;\n\treadonly id: string;\n\t// eslint-disable-next-line no-unused-private-class-members\n\treadonly #signer: InstanceType<typeof KeetaNetLib.Account>;\n\t// eslint-disable-next-line no-unused-private-class-members\n\treadonly #account: InstanceType<typeof KeetaNetLib.Account>;\n\n\tconstructor(client: KeetaNetUserClient, config: KeetaAssetMovementClientConfig = {}) {\n\t\tsuper({ client, logger: config.logger });\n\t\tthis.resolver = config.resolver ?? getDefaultResolver(client, config);\n\t\tthis.id = config.id ?? crypto.randomUUID();\n\n\t\tif (config.signer) {\n\t\t\tthis.#signer = config.signer;\n\t\t} else if ('signer' in client && client.signer !== null) {\n\t\t\tthis.#signer = client.signer;\n\t\t} else if ('account' in client && client.account.hasPrivateKey) {\n\t\t\tthis.#signer = client.account;\n\t\t} else {\n\t\t\tthrow(new Error('KeetaAssetMovementAnchorClient requires a Signer or a UserClient with an associated Signer'));\n\t\t}\n\n\t\tif (config.account) {\n\t\t\tthis.#account = config.account;\n\t\t} else if ('account' in client) {\n\t\t\tthis.#account = client.account;\n\t\t} else {\n\t\t\tthrow(new Error('KeetaAssetMovementAnchorClient requires an Account or a UserClient with an associated Account'));\n\t\t}\n\t}\n\n\tasync #lookup(request: ProviderSearchInput, shared?: SharedLookupCriteria): Promise<KeetaAssetMovementAnchorProvider[] | null> {\n\t\tconst endpoints = await getEndpoints(this.resolver, request, shared, this.logger);\n\t\tif (endpoints === null) {\n\t\t\treturn(null);\n\t\t}\n\n\t\tconst providers = typedAssetMovementServiceEntries(endpoints).map(([id, serviceInfo]) => {\n\t\t\treturn(new KeetaAssetMovementAnchorProvider(serviceInfo, id, this));\n\t\t});\n\n\t\treturn(providers);\n\t}\n\n\tasync getProvidersForTransfer(request: ProviderSearchInput, shared?: SharedLookupCriteria): Promise<KeetaAssetMovementAnchorProvider[] | null> {\n\t\treturn(await this.#lookup(request, shared));\n\t}\n\n\tasync getProviderByID(providerID: string): Promise<KeetaAssetMovementAnchorProvider | null> {\n\t\tconst providers = await this.#lookup({}, { providerIDs: [providerID] });\n\t\treturn(providers?.[0] ?? null);\n\t}\n\n\tasync getProviderLegalDisclaimersByID(providerID: string): Promise<Exclude<AnchorMetadataLegalField['disclaimers'], undefined> | null> {\n\t\tconst provider = await this.getProviderByID(providerID);\n\t\tif (!provider) {\n\t\t\treturn(null);\n\t\t}\n\n\t\tconst disclaimers = provider.serviceInfo.legal?.disclaimers;\n\t\tif (!disclaimers) {\n\t\t\treturn(null);\n\t\t}\n\n\t\treturn(disclaimers);\n\t}\n\n\tasync getProviderByAccount(account: NonNullable<SharedLookupCriteria['accounts']>[number]): Promise<KeetaAssetMovementAnchorProvider | null> {\n\t\tconst providers = await this.#lookup({}, { accounts: [account] });\n\t\treturn(providers?.[0] ?? null);\n\t}\n\n\t/** @internal */\n\t_internals(accessToken: symbol) {\n\t\tif (accessToken !== KeetaAssetMovementAnchorClientAccessToken) {\n\t\t\tthrow(new Error('invalid access token'));\n\t\t}\n\n\t\treturn({\n\t\t\tresolver: this.resolver,\n\t\t\tlogger: this.logger,\n\t\t\tclient: this.client\n\t\t});\n\t}\n}\n\nexport default KeetaAssetMovementAnchorClient;\n"]}
|
|
@@ -54,7 +54,7 @@ export interface Asset {
|
|
|
54
54
|
id: AssetMetadataTargetValue;
|
|
55
55
|
}
|
|
56
56
|
export type FiatPullRails = 'ACH_DEBIT' | 'CARD_PULL';
|
|
57
|
-
export type FiatPushRails = 'ACH' | 'WIRE' | 'PIX_PUSH' | 'SPEI_PUSH' | 'WIRE_INTL_PUSH' | 'SEPA_PUSH' | 'MOBILE_WALLET' | 'INTERAC_PUSH' | 'FPS_PUSH' | 'CARD_PUSH' | 'HK_FPS_PUSH' | 'BCR_PAY_PUSH' | 'DUIT_NOW_PUSH' | 'PAY_NOW_PUSH' | 'UPI_PUSH' | 'CA_PUSH' | 'AE_PUSH';
|
|
57
|
+
export type FiatPushRails = 'ACH' | 'WIRE' | 'PIX_PUSH' | 'SPEI_PUSH' | 'WIRE_INTL_PUSH' | 'SEPA_PUSH' | 'MOBILE_WALLET' | 'INTERAC_PUSH' | 'FPS_PUSH' | 'CARD_PUSH' | 'HK_FPS_PUSH' | 'BCR_PAY_PUSH' | 'DUIT_NOW_PUSH' | 'PAY_NOW_PUSH' | 'UPI_PUSH' | 'CA_PUSH' | 'AE_PUSH' | 'RTP_PUSH';
|
|
58
58
|
export type FiatRails = FiatPullRails | FiatPushRails;
|
|
59
59
|
export type CryptoRails = 'KEETA_SEND' | 'EVM_SEND' | 'EVM_CALL' | 'SOLANA_SEND' | 'BITCOIN_SEND' | 'TRON_SEND';
|
|
60
60
|
export type Rail = FiatRails | CryptoRails;
|