@keetanetwork/anchor 0.0.53 → 0.0.58
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/asset.d.ts +18 -4
- package/lib/asset.d.ts.map +1 -1
- package/lib/asset.js +18 -0
- package/lib/asset.js.map +1 -1
- package/lib/chaining-graph.cli.d.ts +2 -0
- package/lib/chaining-graph.cli.d.ts.map +1 -0
- package/lib/chaining-graph.cli.js +257 -0
- package/lib/chaining-graph.cli.js.map +1 -0
- package/lib/chaining.d.ts +247 -0
- package/lib/chaining.d.ts.map +1 -0
- package/lib/chaining.js +1187 -0
- package/lib/chaining.js.map +1 -0
- package/lib/metadata.types.d.ts +28 -0
- package/lib/metadata.types.d.ts.map +1 -0
- package/lib/metadata.types.generated.d.ts +3 -0
- package/lib/metadata.types.generated.d.ts.map +1 -0
- package/lib/metadata.types.generated.js +15 -0
- package/lib/metadata.types.generated.js.map +1 -0
- package/lib/metadata.types.js +50 -0
- package/lib/metadata.types.js.map +1 -0
- package/lib/resolver.d.ts +15 -19
- package/lib/resolver.d.ts.map +1 -1
- package/lib/resolver.js +1101 -469
- package/lib/resolver.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/services/asset-movement/client.d.ts +12 -5
- package/services/asset-movement/client.d.ts.map +1 -1
- package/services/asset-movement/client.js +190 -9
- package/services/asset-movement/client.js.map +1 -1
- package/services/asset-movement/common.d.ts +119 -60
- package/services/asset-movement/common.d.ts.map +1 -1
- package/services/asset-movement/common.generated.d.ts +48 -0
- package/services/asset-movement/common.generated.d.ts.map +1 -0
- package/services/asset-movement/common.generated.js +37425 -0
- package/services/asset-movement/common.generated.js.map +1 -0
- package/services/asset-movement/common.js +22 -35368
- package/services/asset-movement/common.js.map +1 -1
- package/services/asset-movement/lib/location.d.ts +10 -1
- package/services/asset-movement/lib/location.d.ts.map +1 -1
- package/services/asset-movement/lib/location.generated.d.ts +2 -1
- package/services/asset-movement/lib/location.generated.d.ts.map +1 -1
- package/services/asset-movement/lib/location.generated.js +23 -0
- package/services/asset-movement/lib/location.generated.js.map +1 -1
- package/services/asset-movement/lib/location.js +3 -0
- package/services/asset-movement/lib/location.js.map +1 -1
- package/services/asset-movement/server.d.ts +17 -6
- package/services/asset-movement/server.d.ts.map +1 -1
- package/services/asset-movement/server.js +47 -2
- package/services/asset-movement/server.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 +8 -3
- package/services/fx/client.js.map +1 -1
- package/services/fx/server.d.ts +2 -1
- package/services/fx/server.d.ts.map +1 -1
- package/services/fx/server.js +3 -0
- package/services/fx/server.js.map +1 -1
- package/services/storage/clients/contacts.generated.js +142 -90
- package/services/storage/clients/contacts.generated.js.map +1 -1
- package/services/storage/common.d.ts +7 -1
- package/services/storage/common.d.ts.map +1 -1
- package/services/storage/common.js.map +1 -1
- package/services/storage/server.js +1 -1
- package/services/storage/server.js.map +1 -1
- package/services/storage/test-utils.d.ts +1 -0
- package/services/storage/test-utils.d.ts.map +1 -1
- package/services/storage/test-utils.js +3 -0
- package/services/storage/test-utils.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
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\tAssetTransferInstructions,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingClientRequest,\n\tKeetaAssetMovementAnchorInitiateTransferClientRequest,\n\tKeetaNetAccount,\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} from './common.js';\nimport {\n\tassertKeetaSupportedAssetsMetadata,\n\tconvertAssetLocationToString,\n\tconvertAssetOrPairSearchInputToCanonical,\n\tconvertAssetSearchInputToCanonical,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorGetTransferStatusRequestSigningData,\n\tgetKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\tgetKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\tgetKeetaAssetMovementAnchorShareKYCRequestSigningData,\n\tisKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tisKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tisKeetaAssetMovementAnchorGetExchangeStatusResponse,\n\tisKeetaAssetMovementAnchorInitiateTransferResponse,\n\tisKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\tisKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\tisKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tisKeetaAssetMovementAnchorShareKYCResponse\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';\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 */\ntype KeetaAssetMovementServiceInfo = {\n\toperations: {\n\t\t[operation in keyof KeetaAssetMovementAnchorOperations]: Promise<KeetaAssetMovementAnchorOperations[operation]>;\n\t};\n\n\tsupportedAssets: SupportedAssetsMetadata[];\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\t\tconst supportedAssets = assertKeetaSupportedAssetsMetadata(supportedAssetsMetadata);\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\toperations: operationsFunctions,\n\t\t\t\tsupportedAssets: supportedAssets\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\n/**\n * Represents an in-progress Asset Movement request.\n */\nclass KeetaAssetMovementTransfer {\n\tprivate readonly provider: KeetaAssetMovementAnchorProvider;\n\tprivate request: KeetaAssetMovementAnchorInitiateTransferClientRequest;\n\tprivate transfer: ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>;\n\n\tconstructor(provider: KeetaAssetMovementAnchorProvider, request: KeetaAssetMovementAnchorInitiateTransferClientRequest, transfer: ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>) {\n\t\tthis.provider = provider;\n\t\tthis.request = request;\n\t\tthis.transfer = transfer;\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\tget transferId(): string {\n\t\treturn(this.transfer.id);\n\t}\n\n\tget instructions(): AssetTransferInstructions[] {\n\t\treturn(this.transfer.instructionChoices);\n\t}\n}\n\n\ninterface AwaitPromiseURLOptions {\n\tdefaultPollIntervalMs?: number;\n\ttimeoutMs?: number;\n\tabortSignal?: AbortSignal;\n}\n\nclass 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 Error(`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 #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 initiateTransfer(request: KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer> {\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: 'initiateTransfer',\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\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},\n\t\t\t\t\tto: {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.to.location),\n\t\t\t\t\t\trecipient: body.to.recipient\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: getKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorInitiateTransferResponse\n\t\t});\n\n\t\tthis.logger?.debug(`asset movement request successful, request ID ${requestInformationJSON.id}`);\n\n\t\treturn(new KeetaAssetMovementTransfer(this, request, 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 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\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: 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\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): Promise<KeetaAssetMovementAnchorProvider[] | null> {\n\t\treturn(await this.#lookup(request));\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\tAssetTransferInstructions,\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} 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} 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\n/**\n * Represents an in-progress Asset Movement request.\n */\nclass KeetaAssetMovementTransfer {\n\tprivate readonly provider: KeetaAssetMovementAnchorProvider;\n\tprivate request: KeetaAssetMovementAnchorInitiateTransferClientRequest;\n\tprivate transfer: ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>;\n\n\tconstructor(provider: KeetaAssetMovementAnchorProvider, request: KeetaAssetMovementAnchorInitiateTransferClientRequest, transfer: ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>) {\n\t\tthis.provider = provider;\n\t\tthis.request = request;\n\t\tthis.transfer = transfer;\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\tget transferId(): string {\n\t\treturn(this.transfer.id);\n\t}\n\n\tget instructions(): AssetTransferInstructions[] {\n\t\treturn(this.transfer.instructionChoices);\n\t}\n}\n\n\ninterface AwaitPromiseURLOptions {\n\tdefaultPollIntervalMs?: number;\n\ttimeoutMs?: number;\n\tabortSignal?: AbortSignal;\n}\n\nclass 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 Error(`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 #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 initiateTransfer(request: KeetaAssetMovementAnchorInitiateTransferClientRequest): Promise<KeetaAssetMovementTransfer> {\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: 'initiateTransfer',\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\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},\n\t\t\t\t\tto: {\n\t\t\t\t\t\tlocation: convertAssetLocationToString(body.to.location),\n\t\t\t\t\t\trecipient: body.to.recipient\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: getKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\t\t\tisResponse: isKeetaAssetMovementAnchorInitiateTransferResponse\n\t\t});\n\n\t\tthis.logger?.debug(`asset movement request successful, request ID ${requestInformationJSON.id}`);\n\n\t\treturn(new KeetaAssetMovementTransfer(this, request, requestInformationJSON));\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\t\t\t\tif ('data' in body) {\n\t\t\t\t\treturn({\n\t\t\t\t\t\t...rest,\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...rest,\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\t...(account ? { account: account.assertAccount().publicKeyString.get() } : {})\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,19 +1,22 @@
|
|
|
1
1
|
import type { ServiceMetadata } from '../../lib/resolver.ts';
|
|
2
2
|
import type * as CurrencyInfo from '@keetanetwork/currency-info';
|
|
3
|
-
import type { AccountKeyAlgorithm, IdentifierKeyAlgorithm, TokenPublicKeyString } from '@keetanetwork/keetanet-client/lib/account.js';
|
|
4
|
-
import type { ToJSONSerializable } from '@keetanetwork/keetanet-client/lib/utils/conversion.js';
|
|
3
|
+
import type { AccountKeyAlgorithm, GenericAccount, IdentifierKeyAlgorithm, TokenPublicKeyString } from '@keetanetwork/keetanet-client/lib/account.js';
|
|
4
|
+
import type { JSONSerializable, ToJSONSerializable } from '@keetanetwork/keetanet-client/lib/utils/conversion.js';
|
|
5
5
|
import type { HTTPSignedField } from '../../lib/http-server/common.js';
|
|
6
6
|
import type { Signable } from '../../lib/utils/signing.js';
|
|
7
7
|
import type { SharableCertificateAttributes } from '../../lib/certificates.js';
|
|
8
8
|
import * as KeetaNet from '@keetanetwork/keetanet-client';
|
|
9
9
|
import { KeetaAnchorUserError } from '../../lib/error.js';
|
|
10
|
-
import type { AssetLocationLike, AssetLocationString, AssetLocationInput, AssetLocationCanonical } from './lib/location.js';
|
|
10
|
+
import type { AssetLocationLike, AssetLocationString, AssetLocationInput, AssetLocationCanonical, ChainLocationString } from './lib/location.js';
|
|
11
11
|
import type { BankAccountAddressObfuscated, BankAccountAddressResolved, MobileWalletAddressObfuscated, MobileWalletAddressResolved } from './lib/data/addresses/types.generated.js';
|
|
12
|
-
import type { HexString, KeetaNetAccount, MovableAsset, MovableAssetSearchCanonical, CurrencySearchCanonical } from '../../lib/asset.js';
|
|
12
|
+
import type { HexString, KeetaNetAccount, MovableAsset, MovableAssetSearchCanonical, CurrencySearchCanonical, ExternalChainLocationType, ExternalChainAsset } from '../../lib/asset.js';
|
|
13
|
+
import type { ClientRenderableContent } from '../../lib/metadata.types.js';
|
|
14
|
+
import type { TokenMetadata } from '../../lib/token-metadata.js';
|
|
13
15
|
export * from './lib/data/addresses/types.generated.js';
|
|
14
16
|
export * from './lib/location.js';
|
|
17
|
+
export * from './common.generated.js';
|
|
15
18
|
export type { HexString, KeetaNetAccount, KeetaNetTokenPublicKeyString, EVMAsset, TronAsset, SolanaAsset, ChainAssetString, MovableAssetSearchInput, MovableAssetSearchCanonical, MovableAsset, CurrencySearchCanonical, CurrencySearchInput, TokenSearchInput, TokenSearchCanonical } from '../../lib/asset.js';
|
|
16
|
-
export { toEVMAsset, parseEVMAsset, isEVMAsset, toTronAsset, parseTronAsset, isTronAsset, toSolanaAsset, parseSolanaAsset, isSolanaAsset, convertAssetSearchInputToCanonical } from '../../lib/asset.js';
|
|
19
|
+
export { toEVMAsset, parseEVMAsset, isEVMAsset, toTronAsset, parseTronAsset, isTronAsset, toSolanaAsset, parseSolanaAsset, isSolanaAsset, convertAssetSearchInputToCanonical, isExternalChainAsset } from '../../lib/asset.js';
|
|
17
20
|
export type ISOCountryCode = CurrencyInfo.ISOCountryCode;
|
|
18
21
|
type RailOrRails = Rail | Rail[];
|
|
19
22
|
/**
|
|
@@ -42,11 +45,13 @@ export type ProviderSearchInput = {
|
|
|
42
45
|
export interface Asset {
|
|
43
46
|
location?: AssetLocationString;
|
|
44
47
|
/**
|
|
45
|
-
* Keeta token public key string,
|
|
48
|
+
* Keeta token public key string, external chain asset, ticker, or a currency code
|
|
46
49
|
*/
|
|
47
|
-
id:
|
|
50
|
+
id: AssetMetadataTargetValue;
|
|
48
51
|
}
|
|
49
|
-
export type
|
|
52
|
+
export type FiatPullRails = 'ACH_DEBIT' | 'CARD_PULL';
|
|
53
|
+
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';
|
|
54
|
+
export type FiatRails = FiatPullRails | FiatPushRails;
|
|
50
55
|
export type CryptoRails = 'KEETA_SEND' | 'EVM_SEND' | 'EVM_CALL' | 'SOLANA_SEND' | 'BITCOIN_SEND' | 'TRON_SEND';
|
|
51
56
|
export type Rail = FiatRails | CryptoRails;
|
|
52
57
|
export interface AssetWithRails extends Asset {
|
|
@@ -75,20 +80,25 @@ export interface AssetPath {
|
|
|
75
80
|
*/
|
|
76
81
|
kycProviders?: string[];
|
|
77
82
|
}
|
|
78
|
-
export
|
|
83
|
+
export interface AnchorTokenLocationMetadata extends TokenMetadata {
|
|
84
|
+
displayName?: string;
|
|
85
|
+
ticker?: `$${string}`;
|
|
86
|
+
}
|
|
87
|
+
export type PerChainLocationMetadata<Chain extends ExternalChainLocationType = ExternalChainLocationType> = {
|
|
88
|
+
assets?: {
|
|
89
|
+
[AssetId in ExternalChainAsset<Chain>]?: AnchorTokenLocationMetadata | undefined;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
export type AnchorCustomLocationMetadata = {
|
|
93
|
+
[Chain in ExternalChainLocationType]?: {
|
|
94
|
+
[Location in ChainLocationString<Chain>]?: PerChainLocationMetadata<Chain> | undefined;
|
|
95
|
+
};
|
|
96
|
+
}[ExternalChainLocationType];
|
|
97
|
+
export type AssetMetadataTargetValue = TokenPublicKeyString | CurrencySearchCanonical | `$${string}` | ExternalChainAsset;
|
|
79
98
|
export interface SupportedAssetsMetadata {
|
|
80
99
|
asset: AssetMetadataTargetValue | [AssetMetadataTargetValue, AssetMetadataTargetValue];
|
|
81
100
|
paths: AssetPath[];
|
|
82
101
|
}
|
|
83
|
-
/**
|
|
84
|
-
* This is the type of content that can be rendered directly in a client application.
|
|
85
|
-
*
|
|
86
|
-
* There is no guarantee on if/how this content will be displayed, so it should not be used for critical information, rather as a way to provide the user additional context about a transfer.
|
|
87
|
-
*/
|
|
88
|
-
export type ClientRenderableContent = {
|
|
89
|
-
type: 'markdown' | 'plaintext';
|
|
90
|
-
content: string;
|
|
91
|
-
};
|
|
92
102
|
export interface RailWithExtendedDetails {
|
|
93
103
|
rail: Rail;
|
|
94
104
|
/**
|
|
@@ -159,15 +169,21 @@ export declare function convertAssetOrPairSearchInputToCanonical(input: AssetPai
|
|
|
159
169
|
export declare function convertAssetOrPairSearchInputToCanonical(input: AssetOrPair): AssetOrPairCanonical;
|
|
160
170
|
export type Operations = NonNullable<ServiceMetadata['services']['assetMovement']>[string]['operations'];
|
|
161
171
|
export type OperationNames = keyof Operations;
|
|
162
|
-
export type
|
|
172
|
+
export type PersistentAddressRecipient = {
|
|
163
173
|
type: 'persistent-address';
|
|
164
174
|
persistentAddressId: string;
|
|
165
175
|
};
|
|
176
|
+
export type PersistentAddressTemplateRecipient = {
|
|
177
|
+
type: 'persistent-address-template';
|
|
178
|
+
persistentAddressTemplateId: string;
|
|
179
|
+
};
|
|
180
|
+
export type PersistentAddressOrTemplateRecipient = PersistentAddressRecipient | PersistentAddressTemplateRecipient;
|
|
181
|
+
export type RecipientResolved = AddressResolved | PersistentAddressOrTemplateRecipient;
|
|
166
182
|
/**
|
|
167
183
|
* Optional deposit message to include with the transfer, ex: for wire this is a reference note.
|
|
168
184
|
*/
|
|
169
185
|
type AddressDepositMessage = string;
|
|
170
|
-
type ConvertToExternalRequest<Internal extends object, Overrides
|
|
186
|
+
type ConvertToExternalRequest<Internal extends object, Overrides, Signed = {
|
|
171
187
|
signed?: HTTPSignedField | undefined;
|
|
172
188
|
}> = ToJSONSerializable<Omit<Internal, keyof Overrides>> & Overrides & Signed;
|
|
173
189
|
/**
|
|
@@ -261,9 +277,9 @@ export type AssetTransferInstructions = ({
|
|
|
261
277
|
*/
|
|
262
278
|
location: AssetLocationLike;
|
|
263
279
|
/**
|
|
264
|
-
* The keeta
|
|
280
|
+
* The keeta wallet address to send to
|
|
265
281
|
*/
|
|
266
|
-
sendToAddress:
|
|
282
|
+
sendToAddress: ReturnType<GenericAccount['publicKeyString']['get']>;
|
|
267
283
|
/**
|
|
268
284
|
* Amount to send, as a string in the asset's smallest unit.
|
|
269
285
|
*/
|
|
@@ -271,9 +287,9 @@ export type AssetTransferInstructions = ({
|
|
|
271
287
|
/**
|
|
272
288
|
* The token address to send.
|
|
273
289
|
*/
|
|
274
|
-
tokenAddress:
|
|
290
|
+
tokenAddress: TokenPublicKeyString;
|
|
275
291
|
/**
|
|
276
|
-
* If provided, the value to put in the external
|
|
292
|
+
* If provided, the value to put in the external field of the send operation.
|
|
277
293
|
*/
|
|
278
294
|
external?: string;
|
|
279
295
|
} | {
|
|
@@ -316,7 +332,7 @@ export type AssetTransferInstructions = ({
|
|
|
316
332
|
*/
|
|
317
333
|
contractMethodArgs: string[];
|
|
318
334
|
} | {
|
|
319
|
-
type:
|
|
335
|
+
type: FiatPushRails;
|
|
320
336
|
/**
|
|
321
337
|
* The resolved bank account address details to send funds to
|
|
322
338
|
*/
|
|
@@ -326,6 +342,17 @@ export type AssetTransferInstructions = ({
|
|
|
326
342
|
* Amount to send, as a string in the asset's smallest unit (e.g. cents for USD).
|
|
327
343
|
*/
|
|
328
344
|
value: string;
|
|
345
|
+
} |
|
|
346
|
+
/**
|
|
347
|
+
* Instructions when pulling funds from a persistent address.
|
|
348
|
+
* If the user wants to execute this instruction, they will need to call the executeInstruction endpoint with the transfer id
|
|
349
|
+
*/
|
|
350
|
+
{
|
|
351
|
+
type: FiatPullRails;
|
|
352
|
+
/**
|
|
353
|
+
* The previously created persistent address template or persistent address to pull funds from
|
|
354
|
+
*/
|
|
355
|
+
pullFrom: PersistentAddressOrTemplateRecipient;
|
|
329
356
|
} | {
|
|
330
357
|
type: 'TRON_SEND';
|
|
331
358
|
location: AssetLocationLike;
|
|
@@ -393,6 +420,24 @@ export type KeetaAssetMovementAnchorInitiateTransferResponse = ({
|
|
|
393
420
|
ok: false;
|
|
394
421
|
error: string;
|
|
395
422
|
});
|
|
423
|
+
export interface KeetaAssetMovementAnchorExecuteTransferClientRequest {
|
|
424
|
+
account?: KeetaNetAccount;
|
|
425
|
+
/**
|
|
426
|
+
* The ID of the transfer to execute the instruction for, which was returned in the initiate transfer response
|
|
427
|
+
*/
|
|
428
|
+
id: string;
|
|
429
|
+
/**
|
|
430
|
+
* The instruction to execute
|
|
431
|
+
*/
|
|
432
|
+
instruction: Pick<Extract<AssetTransferInstructions, {
|
|
433
|
+
type: FiatPullRails;
|
|
434
|
+
}>, 'pullFrom' | 'type'>;
|
|
435
|
+
}
|
|
436
|
+
export type KeetaAssetMovementAnchorExecuteTransferRequest = ConvertToExternalRequest<Omit<KeetaAssetMovementAnchorExecuteTransferClientRequest, 'id'>, unknown>;
|
|
437
|
+
export declare function getKeetaAssetMovementAnchorExecuteTransferRequestSigningData(input: (KeetaAssetMovementAnchorExecuteTransferRequest | KeetaAssetMovementAnchorExecuteTransferClientRequest) & {
|
|
438
|
+
id: string;
|
|
439
|
+
}): Signable;
|
|
440
|
+
export type KeetaAssetMovementAnchorExecuteTransferResponse = KeetaAssetMovementAnchorGetTransferStatusResponse;
|
|
396
441
|
export interface KeetaAssetMovementAnchorGetTransferStatusClientRequest {
|
|
397
442
|
account?: KeetaNetAccount;
|
|
398
443
|
id: string;
|
|
@@ -499,17 +544,64 @@ export type PersistentAddressTemplateData = {
|
|
|
499
544
|
asset: MovableAsset;
|
|
500
545
|
address: AddressObfuscated;
|
|
501
546
|
};
|
|
547
|
+
export type KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest = {
|
|
548
|
+
account?: KeetaNetAccount;
|
|
549
|
+
asset: MovableAsset;
|
|
550
|
+
location: AssetLocationLike;
|
|
551
|
+
};
|
|
552
|
+
export type KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest = ConvertToExternalRequest<KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest, {
|
|
553
|
+
asset: AssetOrPairCanonical;
|
|
554
|
+
location: AssetLocationCanonical;
|
|
555
|
+
}>;
|
|
556
|
+
export declare function getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData(input: KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateClientRequest | KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest): Signable;
|
|
557
|
+
export type PersistentForwardingTemplateSessionData = {
|
|
558
|
+
type: 'plaid';
|
|
559
|
+
plaidLinkToken: string;
|
|
560
|
+
} | {
|
|
561
|
+
type: 'other';
|
|
562
|
+
[key: string]: JSONSerializable;
|
|
563
|
+
};
|
|
564
|
+
export type KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse = ({
|
|
565
|
+
ok: true;
|
|
566
|
+
id: string;
|
|
567
|
+
expiresAt: string;
|
|
568
|
+
data: PersistentForwardingTemplateSessionData;
|
|
569
|
+
} | {
|
|
570
|
+
ok: false;
|
|
571
|
+
error: string;
|
|
572
|
+
});
|
|
573
|
+
export type PersistentForwardingTemplateCompletionData = {
|
|
574
|
+
type: 'plaid';
|
|
575
|
+
plaidPublicToken: string;
|
|
576
|
+
plaidAccountId: string;
|
|
577
|
+
} | {
|
|
578
|
+
type: 'other';
|
|
579
|
+
[key: string]: JSONSerializable;
|
|
580
|
+
};
|
|
502
581
|
export type KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest = {
|
|
503
582
|
account?: KeetaNetAccount;
|
|
504
583
|
asset: MovableAsset;
|
|
505
584
|
location: AssetLocationLike;
|
|
506
585
|
address: AddressResolved;
|
|
586
|
+
} | {
|
|
587
|
+
account?: KeetaNetAccount;
|
|
588
|
+
id?: string;
|
|
589
|
+
data: PersistentForwardingTemplateCompletionData;
|
|
507
590
|
};
|
|
508
|
-
export type KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest = ConvertToExternalRequest<
|
|
591
|
+
export type KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest = ConvertToExternalRequest<{
|
|
592
|
+
account?: KeetaNetAccount;
|
|
593
|
+
asset: MovableAsset;
|
|
594
|
+
location: AssetLocationLike;
|
|
595
|
+
address: AddressResolved;
|
|
596
|
+
}, {
|
|
509
597
|
asset: AssetOrPairCanonical;
|
|
510
598
|
location: AssetLocationCanonical;
|
|
511
599
|
address: AddressResolved;
|
|
512
|
-
}
|
|
600
|
+
}> | ConvertToExternalRequest<{
|
|
601
|
+
account?: KeetaNetAccount;
|
|
602
|
+
id?: string;
|
|
603
|
+
data: PersistentForwardingTemplateCompletionData;
|
|
604
|
+
}, unknown>;
|
|
513
605
|
export declare function getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData(input: KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateClientRequest | KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest): Signable;
|
|
514
606
|
export type KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse = (({
|
|
515
607
|
ok: true;
|
|
@@ -703,36 +795,6 @@ export type KeetaAssetMovementAnchorShareKYCResponse = (({
|
|
|
703
795
|
ok: false;
|
|
704
796
|
error: string;
|
|
705
797
|
});
|
|
706
|
-
export declare const assertKeetaSupportedAssetsMetadata: (input: unknown) => SupportedAssetsMetadata[];
|
|
707
|
-
export declare const assertKeetaAssetMovementAnchorCreatePersistentForwardingRequest: (input: unknown) => KeetaAssetMovementAnchorCreatePersistentForwardingRequest;
|
|
708
|
-
export declare const assertKeetaAssetMovementAnchorCreatePersistentForwardingResponse: (input: unknown) => KeetaAssetMovementAnchorCreatePersistentForwardingResponse;
|
|
709
|
-
export declare const assertKeetaAssetMovementAnchorInitiateTransferRequest: (input: unknown) => KeetaAssetMovementAnchorInitiateTransferRequest;
|
|
710
|
-
export declare const assertKeetaAssetMovementAnchorInitiateTransferResponse: (input: unknown) => KeetaAssetMovementAnchorInitiateTransferResponse;
|
|
711
|
-
export declare const assertKeetaAssetMovementAnchorGetTransferStatusRequest: (input: unknown) => KeetaAssetMovementAnchorGetTransferStatusRequest;
|
|
712
|
-
export declare const assertKeetaAssetMovementAnchorGetTransferStatusResponse: (input: unknown) => KeetaAssetMovementAnchorGetTransferStatusResponse;
|
|
713
|
-
export declare const assertKeetaAssetMovementAnchorlistTransactionsRequest: (input: unknown) => KeetaAssetMovementAnchorlistTransactionsRequest;
|
|
714
|
-
export declare const assertKeetaAssetMovementAnchorListPersistentForwardingRequest: (input: unknown) => KeetaAssetMovementAnchorListPersistentForwardingRequest;
|
|
715
|
-
export declare const assertKeetaAssetMovementAnchorListPersistentForwardingResponse: (input: unknown) => KeetaAssetMovementAnchorListPersistentForwardingResponse;
|
|
716
|
-
export declare const assertKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse: (input: unknown) => KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse;
|
|
717
|
-
export declare const assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest: (input: unknown) => KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest;
|
|
718
|
-
export declare const assertKeetaAssetMovementAnchorListForwardingAddressTemplateRequest: (input: unknown) => KeetaAssetMovementAnchorListForwardingAddressTemplateRequest;
|
|
719
|
-
export declare const assertKeetaAssetMovementAnchorListForwardingAddressTemplateResponse: (input: unknown) => KeetaAssetMovementAnchorListForwardingAddressTemplateResponse;
|
|
720
|
-
export declare const assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse: (input: unknown) => KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse;
|
|
721
|
-
export declare const assertBankAccountAddressObfuscated: (input: unknown) => BankAccountAddressObfuscated;
|
|
722
|
-
export declare const assertBankAccountAddressResolved: (input: unknown) => BankAccountAddressResolved;
|
|
723
|
-
export declare const assertKeetaAssetMovementAnchorShareKYCRequest: (input: unknown) => KeetaAssetMovementAnchorShareKYCRequest;
|
|
724
|
-
export declare const assertKeetaAssetMovementAnchorShareKYCResponse: (input: unknown) => KeetaAssetMovementAnchorShareKYCResponse;
|
|
725
|
-
export declare const isKeetaAssetMovementAnchorInitiateTransferRequest: (input: unknown) => input is KeetaAssetMovementAnchorInitiateTransferRequest;
|
|
726
|
-
export declare const isKeetaAssetMovementAnchorGetTransferStatusRequest: (input: unknown) => input is KeetaAssetMovementAnchorGetTransferStatusRequest;
|
|
727
|
-
export declare const isKeetaAssetMovementAnchorListForwardingAddressTemplateRequest: (input: unknown) => input is KeetaAssetMovementAnchorListForwardingAddressTemplateRequest;
|
|
728
|
-
export declare const isKeetaAssetMovementAnchorListForwardingAddressTemplateResponse: (input: unknown) => input is KeetaAssetMovementAnchorListForwardingAddressTemplateResponse;
|
|
729
|
-
export declare const isKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse: (input: unknown) => input is KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse;
|
|
730
|
-
export declare const isKeetaAssetMovementAnchorCreatePersistentForwardingResponse: (input: unknown) => input is KeetaAssetMovementAnchorCreatePersistentForwardingResponse;
|
|
731
|
-
export declare const isKeetaAssetMovementAnchorInitiateTransferResponse: (input: unknown) => input is KeetaAssetMovementAnchorInitiateTransferResponse;
|
|
732
|
-
export declare const isKeetaAssetMovementAnchorGetExchangeStatusResponse: (input: unknown) => input is KeetaAssetMovementAnchorGetTransferStatusResponse;
|
|
733
|
-
export declare const isKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse: (input: unknown) => input is KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse;
|
|
734
|
-
export declare const isKeetaAssetMovementAnchorShareKYCResponse: (input: unknown) => input is KeetaAssetMovementAnchorShareKYCResponse;
|
|
735
|
-
export declare const isKeetaAssetMovementAnchorListPersistentForwardingResponse: (input: unknown) => input is KeetaAssetMovementAnchorListPersistentForwardingResponse;
|
|
736
798
|
type Account = InstanceType<typeof KeetaNet.lib.Account<Exclude<AccountKeyAlgorithm, IdentifierKeyAlgorithm>>>;
|
|
737
799
|
type KeetaAssetMovementAnchorKYCExternalURLFlow = {
|
|
738
800
|
type: 'url-flow';
|
|
@@ -747,7 +809,6 @@ export interface KeetaAssetMovementAnchorKYCShareNeededErrorJSONProperties {
|
|
|
747
809
|
value: string;
|
|
748
810
|
}[][];
|
|
749
811
|
}
|
|
750
|
-
export declare const assertKeetaAssetMovementAnchorKYCShareNeededErrorJSONProperties: (input: unknown) => KeetaAssetMovementAnchorKYCShareNeededErrorJSONProperties;
|
|
751
812
|
type KeetaAssetMovementAnchorKYCShareNeededErrorJSON = ReturnType<KeetaAnchorUserError['toJSON']> & KeetaAssetMovementAnchorKYCShareNeededErrorJSONProperties;
|
|
752
813
|
declare class KeetaAssetMovementAnchorKYCShareNeededError extends KeetaAnchorUserError {
|
|
753
814
|
static readonly name: string;
|
|
@@ -781,7 +842,6 @@ declare class KeetaAssetMovementAnchorKYCShareNeededError extends KeetaAnchorUse
|
|
|
781
842
|
export interface KeetaAssetMovementAnchorAdditionalKYCNeededErrorJSONProperties {
|
|
782
843
|
toCompleteFlow: KeetaAssetMovementAnchorKYCExternalURLFlow | undefined;
|
|
783
844
|
}
|
|
784
|
-
export declare const assertKeetaAssetMovementAnchorAdditionalKYCNeededErrorJSONProperties: (input: unknown) => KeetaAssetMovementAnchorAdditionalKYCNeededErrorJSONProperties;
|
|
785
845
|
type KeetaAssetMovementAnchorAdditionalKYCNeededErrorJSON = ReturnType<KeetaAnchorUserError['toJSON']> & KeetaAssetMovementAnchorAdditionalKYCNeededErrorJSONProperties;
|
|
786
846
|
declare class KeetaAssetMovementAnchorAdditionalKYCNeededError extends KeetaAnchorUserError {
|
|
787
847
|
static readonly name: string;
|
|
@@ -802,7 +862,6 @@ export interface KeetaAssetMovementAnchorOperationNotSupportedErrorJSONPropertie
|
|
|
802
862
|
forAsset?: AssetOrPair | undefined;
|
|
803
863
|
forRail?: Rail | undefined;
|
|
804
864
|
}
|
|
805
|
-
export declare const assertKeetaAssetMovementAnchorOperationNotSupportedErrorJSONProperties: (input: unknown) => KeetaAssetMovementAnchorOperationNotSupportedErrorJSONProperties;
|
|
806
865
|
type KeetaAssetMovementAnchorOperationNotSupportedErrorJSON = ReturnType<KeetaAnchorUserError['toJSON']> & KeetaAssetMovementAnchorOperationNotSupportedErrorJSONProperties;
|
|
807
866
|
declare class KeetaAssetMovementAnchorOperationNotSupportedError extends KeetaAnchorUserError implements KeetaAssetMovementAnchorOperationNotSupportedErrorJSONProperties {
|
|
808
867
|
static readonly name: string;
|