@keetanetwork/anchor 0.0.58 → 0.0.61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/lib/chaining.d.ts +3 -3
  2. package/lib/chaining.d.ts.map +1 -1
  3. package/lib/chaining.js.map +1 -1
  4. package/lib/queue/drivers/queue_postgres.d.ts +20 -3
  5. package/lib/queue/drivers/queue_postgres.d.ts.map +1 -1
  6. package/lib/queue/drivers/queue_postgres.js +152 -40
  7. package/lib/queue/drivers/queue_postgres.js.map +1 -1
  8. package/lib/resolver.d.ts +10 -1
  9. package/lib/resolver.d.ts.map +1 -1
  10. package/lib/resolver.js +221 -245
  11. package/lib/resolver.js.map +1 -1
  12. package/npm-shrinkwrap.json +2 -2
  13. package/package.json +1 -1
  14. package/services/asset-movement/client.d.ts +20 -8
  15. package/services/asset-movement/client.d.ts.map +1 -1
  16. package/services/asset-movement/client.js +63 -22
  17. package/services/asset-movement/client.js.map +1 -1
  18. package/services/asset-movement/common.d.ts +33 -12
  19. package/services/asset-movement/common.d.ts.map +1 -1
  20. package/services/asset-movement/common.generated.d.ts +3 -0
  21. package/services/asset-movement/common.generated.d.ts.map +1 -1
  22. package/services/asset-movement/common.generated.js +24320 -7253
  23. package/services/asset-movement/common.generated.js.map +1 -1
  24. package/services/asset-movement/common.js +3 -0
  25. package/services/asset-movement/common.js.map +1 -1
  26. package/services/asset-movement/lib/data/addresses/bank-account/ca.d.ts +4 -0
  27. package/services/asset-movement/lib/data/addresses/bank-account/ca.d.ts.map +1 -0
  28. package/services/asset-movement/lib/data/addresses/bank-account/ca.js +49 -0
  29. package/services/asset-movement/lib/data/addresses/bank-account/ca.js.map +1 -0
  30. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.d.ts +4 -0
  31. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.d.ts.map +1 -1
  32. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.js +4 -0
  33. package/services/asset-movement/lib/data/addresses/bank-account/index.generated.js.map +1 -1
  34. package/services/asset-movement/lib/data/addresses/bank-account/interac.d.ts.map +1 -1
  35. package/services/asset-movement/lib/data/addresses/bank-account/interac.js +9 -20
  36. package/services/asset-movement/lib/data/addresses/bank-account/interac.js.map +1 -1
  37. package/services/asset-movement/lib/data/addresses/bank-account/pix.d.ts.map +1 -1
  38. package/services/asset-movement/lib/data/addresses/bank-account/pix.js +3 -2
  39. package/services/asset-movement/lib/data/addresses/bank-account/pix.js.map +1 -1
  40. package/services/asset-movement/lib/data/addresses/bank-account/uae.d.ts +4 -0
  41. package/services/asset-movement/lib/data/addresses/bank-account/uae.d.ts.map +1 -0
  42. package/services/asset-movement/lib/data/addresses/bank-account/uae.js +45 -0
  43. package/services/asset-movement/lib/data/addresses/bank-account/uae.js.map +1 -0
  44. package/services/asset-movement/lib/data/addresses/types.generated.d.ts +260 -52
  45. package/services/asset-movement/lib/data/addresses/types.generated.d.ts.map +1 -1
  46. package/services/asset-movement/lib/data/addresses/types.generated.js +252 -35
  47. package/services/asset-movement/lib/data/addresses/types.generated.js.map +1 -1
  48. package/services/asset-movement/lib/location.generated.js +3 -3
  49. package/services/asset-movement/server.d.ts +5 -1
  50. package/services/asset-movement/server.d.ts.map +1 -1
  51. package/services/asset-movement/server.js +23 -2
  52. package/services/asset-movement/server.js.map +1 -1
  53. package/services/storage/clients/contacts.generated.js +636 -312
  54. package/services/storage/clients/contacts.generated.js.map +1 -1
@@ -1,13 +1,13 @@
1
1
  import * as __typia_transform__assertGuard from "typia/lib/internal/_assertGuard.js";
2
2
  import { createAssert, createIs } from "typia";
3
3
  export const isTronNetworkAlias = (() => { return input => null !== input && undefined !== input && ("mainnet" === input || "shasta" === input || "nile" === input || "string" === typeof input && RegExp(/^custom:(.*)/).test(input)); })();
4
- export const assertBankAccountType = (() => { const _iv1 = new Set(["bcr-pay", "card", "clabe", "duit-now", "fps", "hk-fps", "iban-swift", "interac", "pay-now", "pix", "upi", "us"]); const _av2 = new Set(["bcr-pay", "card", "clabe", "duit-now", "fps", "hk-fps", "iban-swift", "interac", "pay-now", "pix", "upi", "us"]); const __is = input => true === _iv1.has(input); let _errorFactory; return (input, errorFactory) => {
4
+ export const assertBankAccountType = (() => { const _iv1 = new Set(["bcr-pay", "ca", "card", "clabe", "duit-now", "fps", "hk-fps", "iban-swift", "interac", "pay-now", "pix", "uae", "upi", "us"]); const _av2 = new Set(["bcr-pay", "ca", "card", "clabe", "duit-now", "fps", "hk-fps", "iban-swift", "interac", "pay-now", "pix", "uae", "upi", "us"]); const __is = input => true === _iv1.has(input); let _errorFactory; return (input, errorFactory) => {
5
5
  if (false === __is(input)) {
6
6
  _errorFactory = errorFactory;
7
7
  ((input, _path, _exceptionable = true) => true === _av2.has(input) || __typia_transform__assertGuard._assertGuard(true, {
8
8
  method: "createAssert",
9
9
  path: _path + "",
10
- expected: "(\"bcr-pay\" | \"card\" | \"clabe\" | \"duit-now\" | \"fps\" | \"hk-fps\" | \"iban-swift\" | \"interac\" | \"pay-now\" | \"pix\" | \"upi\" | \"us\")",
10
+ expected: "(\"bcr-pay\" | \"ca\" | \"card\" | \"clabe\" | \"duit-now\" | \"fps\" | \"hk-fps\" | \"iban-swift\" | \"interac\" | \"pay-now\" | \"pix\" | \"uae\" | \"upi\" | \"us\")",
11
11
  value: input
12
12
  }, _errorFactory))(input, "$input", true);
13
13
  }
@@ -25,7 +25,7 @@ export const assertMobileWalletAccountType = (() => { const _iv1 = new Set(["air
25
25
  }
26
26
  return input;
27
27
  }; })();
28
- export const isAssetLocationLike = (() => { const _iv1 = new Set(["bank-account:bcr-pay", "bank-account:card", "bank-account:clabe", "bank-account:duit-now", "bank-account:fps", "bank-account:hk-fps", "bank-account:iban-swift", "bank-account:interac", "bank-account:pay-now", "bank-account:pix", "bank-account:upi", "bank-account:us", "mobile-wallet:airtel-money", "mobile-wallet:bkash", "mobile-wallet:easy-paisa", "mobile-wallet:finja-wallet", "mobile-wallet:jazz-cash", "mobile-wallet:mtn-mobile-money", "mobile-wallet:nagad", "mobile-wallet:naya-pay", "mobile-wallet:paypal", "mobile-wallet:rocket", "mobile-wallet:sada-pay", "mobile-wallet:venmo"]); const _iv2 = new Set(["bcr-pay", "card", "clabe", "duit-now", "fps", "hk-fps", "iban-swift", "interac", "pay-now", "pix", "upi", "us"]); const _iv3 = new Set(["airtel-money", "bkash", "easy-paisa", "finja-wallet", "jazz-cash", "mtn-mobile-money", "nagad", "naya-pay", "paypal", "rocket", "sada-pay", "venmo"]); const _io0 = input => "chain" === input.type && ("object" === typeof input.chain && null !== input.chain && _iu0(input.chain)); const _io1 = input => "keeta" === input.type && "bigint" === typeof input.networkId; const _io2 = input => "evm" === input.type && "bigint" === typeof input.chainId; const _io3 = input => "solana" === input.type && "string" === typeof input.genesisHash; const _io4 = input => "bitcoin" === input.type && "string" === typeof input.magicBytes; const _io5 = input => "tron" === input.type && (null !== input.networkAlias && undefined !== input.networkAlias && ("mainnet" === input.networkAlias || "shasta" === input.networkAlias || "nile" === input.networkAlias || "string" === typeof input.networkAlias && RegExp(/^custom:(.*)/).test(input.networkAlias))); const _io6 = input => "object" === typeof input.account && null !== input.account && _io7(input.account) && "bank-account" === input.type; const _io7 = input => true === _iv2.has(input.type); const _io8 = input => "object" === typeof input.account && null !== input.account && _io9(input.account) && "mobile-wallet" === input.type; const _io9 = input => true === _iv3.has(input.type); const _iu0 = input => (() => {
28
+ export const isAssetLocationLike = (() => { const _iv1 = new Set(["bank-account:bcr-pay", "bank-account:ca", "bank-account:card", "bank-account:clabe", "bank-account:duit-now", "bank-account:fps", "bank-account:hk-fps", "bank-account:iban-swift", "bank-account:interac", "bank-account:pay-now", "bank-account:pix", "bank-account:uae", "bank-account:upi", "bank-account:us", "mobile-wallet:airtel-money", "mobile-wallet:bkash", "mobile-wallet:easy-paisa", "mobile-wallet:finja-wallet", "mobile-wallet:jazz-cash", "mobile-wallet:mtn-mobile-money", "mobile-wallet:nagad", "mobile-wallet:naya-pay", "mobile-wallet:paypal", "mobile-wallet:rocket", "mobile-wallet:sada-pay", "mobile-wallet:venmo"]); const _iv2 = new Set(["bcr-pay", "ca", "card", "clabe", "duit-now", "fps", "hk-fps", "iban-swift", "interac", "pay-now", "pix", "uae", "upi", "us"]); const _iv3 = new Set(["airtel-money", "bkash", "easy-paisa", "finja-wallet", "jazz-cash", "mtn-mobile-money", "nagad", "naya-pay", "paypal", "rocket", "sada-pay", "venmo"]); const _io0 = input => "chain" === input.type && ("object" === typeof input.chain && null !== input.chain && _iu0(input.chain)); const _io1 = input => "keeta" === input.type && "bigint" === typeof input.networkId; const _io2 = input => "evm" === input.type && "bigint" === typeof input.chainId; const _io3 = input => "solana" === input.type && "string" === typeof input.genesisHash; const _io4 = input => "bitcoin" === input.type && "string" === typeof input.magicBytes; const _io5 = input => "tron" === input.type && (null !== input.networkAlias && undefined !== input.networkAlias && ("mainnet" === input.networkAlias || "shasta" === input.networkAlias || "nile" === input.networkAlias || "string" === typeof input.networkAlias && RegExp(/^custom:(.*)/).test(input.networkAlias))); const _io6 = input => "object" === typeof input.account && null !== input.account && _io7(input.account) && "bank-account" === input.type; const _io7 = input => true === _iv2.has(input.type); const _io8 = input => "object" === typeof input.account && null !== input.account && _io9(input.account) && "mobile-wallet" === input.type; const _io9 = input => true === _iv3.has(input.type); const _iu0 = input => (() => {
29
29
  if ("keeta" === input.type)
30
30
  return _io1(input);
31
31
  else if ("evm" === input.type)
@@ -1,5 +1,5 @@
1
1
  import * as KeetaAnchorHTTPServer from '../../lib/http-server/index.js';
2
- import type { KeetaAssetMovementAnchorCreatePersistentForwardingRequest, KeetaAssetMovementAnchorCreatePersistentForwardingResponse, KeetaAssetMovementAnchorInitiateTransferRequest, KeetaAssetMovementAnchorInitiateTransferResponse, KeetaAssetMovementAnchorGetTransferStatusResponse, KeetaAssetMovementAnchorlistTransactionsRequest, KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse, KeetaAssetMovementAnchorListPersistentForwardingRequest, KeetaAssetMovementAnchorListPersistentForwardingResponse, KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest, KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse, KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse, KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest, KeetaAssetMovementAnchorListForwardingAddressTemplateRequest, KeetaAssetMovementAnchorListForwardingAddressTemplateResponse, KeetaAssetMovementAnchorShareKYCRequest, KeetaAssetMovementAnchorShareKYCResponse, KeetaAssetMovementAnchorExecuteTransferRequest, KeetaAssetMovementAnchorExecuteTransferResponse } from './common.ts';
2
+ import type { KeetaAssetMovementAnchorCreatePersistentForwardingRequest, KeetaAssetMovementAnchorCreatePersistentForwardingResponse, KeetaAssetMovementAnchorInitiateTransferRequest, KeetaAssetMovementAnchorInitiateTransferResponse, KeetaAssetMovementAnchorGetTransferStatusResponse, KeetaAssetMovementAnchorlistTransactionsRequest, KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse, KeetaAssetMovementAnchorListPersistentForwardingRequest, KeetaAssetMovementAnchorListPersistentForwardingResponse, KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest, KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse, KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse, KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest, KeetaAssetMovementAnchorListForwardingAddressTemplateRequest, KeetaAssetMovementAnchorListForwardingAddressTemplateResponse, KeetaAssetMovementAnchorShareKYCRequest, KeetaAssetMovementAnchorShareKYCResponse, KeetaAssetMovementAnchorExecuteTransferRequest, KeetaAssetMovementAnchorExecuteTransferResponse, KeetaAssetMovementAnchorSimulateTransferRequest, KeetaAssetMovementAnchorSimulateTransferResponse } from './common.ts';
3
3
  import type { ServiceMetadata } from '../../lib/resolver.ts';
4
4
  import type Account from '@keetanetwork/keetanet-client/lib/account.js';
5
5
  import type { ExtractOk } from '../../lib/http-server/common.js';
@@ -41,6 +41,10 @@ export interface KeetaAnchorAssetMovementServerConfig extends KeetaAnchorHTTPSer
41
41
  * Method to initiate a transfer
42
42
  */
43
43
  initiateTransfer?: (request: KeetaAssetMovementAnchorInitiateTransferRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>>;
44
+ /**
45
+ * Method to initiate a transfer
46
+ */
47
+ simulateTransfer?: (request: KeetaAssetMovementAnchorSimulateTransferRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>>;
44
48
  /**
45
49
  * Method to get the status of a transfer
46
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/services/asset-movement/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/services/asset-movement/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,qBAAqB,MAAM,gCAAgC,CAAC;AAKxE,OAAO,KAAK,EACX,yDAAyD,EACzD,0DAA0D,EAC1D,+CAA+C,EAC/C,gDAAgD,EAChD,iDAAiD,EACjD,+CAA+C,EAC/C,oEAAoE,EACpE,uDAAuD,EACvD,wDAAwD,EACxD,0EAA0E,EAC1E,2EAA2E,EAC3E,yEAAyE,EACzE,wEAAwE,EACxE,4DAA4D,EAC5D,6DAA6D,EAC7D,uCAAuC,EACvC,wCAAwC,EACxC,8CAA8C,EAC9C,+CAA+C,EAC/C,+CAA+C,EAC/C,gDAAgD,EAChD,MAAM,aAAa,CAAC;AAqCrB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,OAAO,MAAM,8CAA8C,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAgC,MAAM,iCAAiC,CAAC;AAG/F,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AAEtF,KAAK,4BAA4B,GAAG,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtG,MAAM,WAAW,oCAAqC,SAAQ,qBAAqB,CAAC,2BAA2B;IAC9G;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IAErD;;OAEG;IACH,aAAa,EAAE,kCAAkC,GAAG,IAAI,CAAC,4BAA4B,EAAE,iBAAiB,GAAG,kBAAkB,CAAC,GAAG;QAChI,sBAAsB,CAAC,EAAE,OAAO,CAAC;QAEjC;;;WAGG;QACH,oCAAoC,CAAC,EAAE,CAAC,OAAO,EAAE,0EAA0E,KAAK,OAAO,CAAC,SAAS,CAAC,2EAA2E,CAAC,CAAC,CAAC;QAEhO;;;WAGG;QACH,kCAAkC,CAAC,EAAE,CAAC,OAAO,EAAE,wEAAwE,KAAK,OAAO,CAAC,SAAS,CAAC,yEAAyE,CAAC,CAAC,CAAC;QAE1N;;WAEG;QACH,gCAAgC,CAAC,EAAE,CAAC,OAAO,EAAE,4DAA4D,KAAK,OAAO,CAAC,SAAS,CAAC,6DAA6D,CAAC,CAAC,CAAC;QAEhM;;WAEG;QACH,0BAA0B,CAAC,EAAE,CAAC,OAAO,EAAE,yDAAyD,KAAK,OAAO,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAC,CAAC;QAEpL;;WAEG;QACH,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,uDAAuD,KAAK,OAAO,CAAC,SAAS,CAAC,wDAAwD,CAAC,CAAC,CAAC;QAE9K;;WAEG;QACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,+CAA+C,KAAK,OAAO,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAEtJ;;WAEG;QACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,+CAA+C,KAAK,OAAO,CAAC,SAAS,CAAC,gDAAgD,CAAC,CAAC,CAAC;QAEtJ;;WAEG;QACH,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC,SAAS,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAE3I;;WAEG;QACH,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,+CAA+C,KAAK,OAAO,CAAC,SAAS,CAAC,oEAAoE,CAAC,CAAC,CAAC;QAE1K;;WAEG;QACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,uCAAuC,KAAK,OAAO,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAE9H;;WAEG;QACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,8CAA8C,GAAG;YAAE,EAAE,EAAE,MAAM,CAAC;SAAE,KAAK,OAAO,CAAC,SAAS,CAAC,+CAA+C,CAAC,CAAC,CAAC;KACrK,CAAA;CACD;AAuBD,qBAAa,qCAAsC,SAAQ,qBAAqB,CAAC,wBAAwB,CAAC,oCAAoC,CAAE,YAAW,QAAQ,CAAC,oCAAoC,CAAC;IACxM,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,oCAAoC,CAAC,UAAU,CAAC,CAAC,CAAC;IACjF,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,oCAAoC,CAAC,eAAe,CAAC,CAAC,CAAC;gBAE/E,MAAM,EAAE,oCAAoC;cAOxC,UAAU,CAAC,MAAM,EAAE,oCAAoC,GAAG,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC;IA+VzG,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;CAmDnG"}
@@ -1,7 +1,7 @@
1
1
  import * as KeetaAnchorHTTPServer from '../../lib/http-server/index.js';
2
2
  import { KeetaNet } from '../../client/index.js';
3
3
  import { KeetaAnchorUserError } from '../../lib/error.js';
4
- import { assertKeetaAssetMovementAnchorCreatePersistentForwardingRequest, assertKeetaAssetMovementAnchorCreatePersistentForwardingResponse, assertKeetaAssetMovementAnchorInitiateTransferRequest, assertKeetaAssetMovementAnchorInitiateTransferResponse, assertKeetaAssetMovementAnchorGetTransferStatusResponse, assertKeetaAssetMovementAnchorlistTransactionsRequest, assertKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse, assertKeetaAssetMovementAnchorListPersistentForwardingRequest, assertKeetaAssetMovementAnchorListPersistentForwardingResponse, assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest, assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData, assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest, assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData, assertKeetaAssetMovementAnchorListForwardingAddressTemplateRequest, assertKeetaAssetMovementAnchorListForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData, getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData, getKeetaAssetMovementAnchorInitiateTransferRequestSigningData, assertKeetaAssetMovementAnchorShareKYCResponse, assertKeetaAssetMovementAnchorShareKYCRequest, getKeetaAssetMovementAnchorShareKYCRequestSigningData, convertAssetLocationToString, commonJSONStringify, getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorlistTransactionsRequestSigningData, getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorExecuteTransferRequestSigningData, assertKeetaAssetMovementAnchorExecuteTransferRequest, assertKeetaAssetMovementAnchorExecuteTransferResponse } from './common.js';
4
+ import { assertKeetaAssetMovementAnchorCreatePersistentForwardingRequest, assertKeetaAssetMovementAnchorCreatePersistentForwardingResponse, assertKeetaAssetMovementAnchorInitiateTransferRequest, assertKeetaAssetMovementAnchorInitiateTransferResponse, assertKeetaAssetMovementAnchorGetTransferStatusResponse, assertKeetaAssetMovementAnchorlistTransactionsRequest, assertKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse, assertKeetaAssetMovementAnchorListPersistentForwardingRequest, assertKeetaAssetMovementAnchorListPersistentForwardingResponse, assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest, assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData, assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest, assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData, assertKeetaAssetMovementAnchorListForwardingAddressTemplateRequest, assertKeetaAssetMovementAnchorListForwardingAddressTemplateResponse, getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData, getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData, getKeetaAssetMovementAnchorInitiateTransferRequestSigningData, assertKeetaAssetMovementAnchorShareKYCResponse, assertKeetaAssetMovementAnchorShareKYCRequest, getKeetaAssetMovementAnchorShareKYCRequestSigningData, convertAssetLocationToString, commonJSONStringify, getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorlistTransactionsRequestSigningData, getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData, getKeetaAssetMovementAnchorExecuteTransferRequestSigningData, assertKeetaAssetMovementAnchorExecuteTransferRequest, assertKeetaAssetMovementAnchorExecuteTransferResponse, getKeetaAssetMovementAnchorSimulateTransferRequestSigningData, assertKeetaAssetMovementAnchorSimulateTransferRequest, assertKeetaAssetMovementAnchorSimulateTransferResponse } from './common.js';
5
5
  import { VerifySignedData } from '../../lib/utils/signing.js';
6
6
  import { assertHTTPSignedField, parseSignatureFromURL } from '../../lib/http-server/common.js';
7
7
  ;
@@ -63,7 +63,7 @@ export class KeetaNetAssetMovementAnchorHTTPServer extends KeetaAnchorHTTPServer
63
63
  if (typeof handler !== 'function') {
64
64
  throw (new Error(`internal error: handler for ${String(input.handlerName)} is not a function`));
65
65
  }
66
- const authenticationRequired = config.assetMovement.authenticationRequired === true;
66
+ const authenticationRequired = config.assetMovement.authenticationRequired === true && (input.overrideAllowUnauthenticated !== true);
67
67
  routes[`${input.method} /api/${input.pathName ?? input.handlerName}`] = async function (params, postData, _ignore_headers, url) {
68
68
  let request;
69
69
  if (input.method === 'GET') {
@@ -185,6 +185,26 @@ export class KeetaNetAssetMovementAnchorHTTPServer extends KeetaAnchorHTTPServer
185
185
  });
186
186
  }
187
187
  });
188
+ addRoute({
189
+ method: 'POST',
190
+ handlerName: 'simulateTransfer',
191
+ overrideAllowUnauthenticated: true,
192
+ getSigningData: getKeetaAssetMovementAnchorSimulateTransferRequestSigningData,
193
+ assertRequest: assertKeetaAssetMovementAnchorSimulateTransferRequest,
194
+ assertResponse: assertKeetaAssetMovementAnchorSimulateTransferResponse,
195
+ serializeResponse(data) {
196
+ return ({
197
+ ...data,
198
+ instructionChoices: data.instructionChoices.map(function (choice) {
199
+ const ret = { ...choice };
200
+ if ('location' in ret) {
201
+ ret.location = convertAssetLocationToString(ret.location);
202
+ }
203
+ return (ret);
204
+ })
205
+ });
206
+ }
207
+ });
188
208
  addRoute({
189
209
  method: 'POST',
190
210
  handlerName: 'executeTransfer',
@@ -310,6 +330,7 @@ export class KeetaNetAssetMovementAnchorHTTPServer extends KeetaAnchorHTTPServer
310
330
  const operations = {};
311
331
  const routes = [
312
332
  'initiateTransfer',
333
+ 'simulateTransfer',
313
334
  'listTransactions',
314
335
  'initiatePersistentForwardingTemplate',
315
336
  'createPersistentForwardingTemplate',
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/services/asset-movement/server.ts"],"names":[],"mappings":"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","sourcesContent":["import * as KeetaAnchorHTTPServer from '../../lib/http-server/index.js';\nimport { KeetaNet } from '../../client/index.js';\nimport {\n\tKeetaAnchorUserError\n} from '../../lib/error.js';\nimport type {\n\tKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tKeetaAssetMovementAnchorInitiateTransferRequest,\n\tKeetaAssetMovementAnchorInitiateTransferResponse,\n\tKeetaAssetMovementAnchorGetTransferStatusResponse,\n\tKeetaAssetMovementAnchorlistTransactionsRequest,\n\tKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tKeetaAssetMovementAnchorListPersistentForwardingRequest,\n\tKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorListForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorShareKYCRequest,\n\tKeetaAssetMovementAnchorShareKYCResponse,\n\tKeetaAssetMovementAnchorExecuteTransferRequest,\n\tKeetaAssetMovementAnchorExecuteTransferResponse\n} from './common.ts';\nimport {\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tassertKeetaAssetMovementAnchorInitiateTransferRequest,\n\tassertKeetaAssetMovementAnchorInitiateTransferResponse,\n\tassertKeetaAssetMovementAnchorGetTransferStatusResponse,\n\tassertKeetaAssetMovementAnchorlistTransactionsRequest,\n\tassertKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tassertKeetaAssetMovementAnchorListPersistentForwardingRequest,\n\tassertKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\tassertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\tassertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData,\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\tassertKeetaAssetMovementAnchorListForwardingAddressTemplateRequest,\n\tassertKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorGetTransferStatusRequestSigningData,\n\tgetKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\tassertKeetaAssetMovementAnchorShareKYCResponse,\n\tassertKeetaAssetMovementAnchorShareKYCRequest,\n\tgetKeetaAssetMovementAnchorShareKYCRequestSigningData,\n\tconvertAssetLocationToString,\n\tcommonJSONStringify,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\tgetKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorExecuteTransferRequestSigningData,\n\tassertKeetaAssetMovementAnchorExecuteTransferRequest,\n\tassertKeetaAssetMovementAnchorExecuteTransferResponse\n} from './common.js';\nimport type { ServiceMetadata } from '../../lib/resolver.ts';\nimport type { Signable } from '../../lib/utils/signing.js';\nimport { VerifySignedData } from '../../lib/utils/signing.js';\nimport type Account from '@keetanetwork/keetanet-client/lib/account.js';\nimport type { ExtractOk, HTTPSignedFieldURLParameters } from '../../lib/http-server/common.js';\nimport { assertHTTPSignedField, parseSignatureFromURL } from '../../lib/http-server/common.js';\nimport type { JSONSerializable } from '@keetanetwork/keetanet-client/lib/utils/conversion.js';\nimport type { SharedAnchorMetadataLegalExtension } from '../../lib/metadata.types.js';\n\ntype AssetMovementServiceMetadata = NonNullable<ServiceMetadata['services']['assetMovement']>[string];\n\nexport interface KeetaAnchorAssetMovementServerConfig extends KeetaAnchorHTTPServer.KeetaAnchorHTTPServerConfig {\n\t/**\n\t * The data to use for the index page (optional)\n\t */\n\thomepage?: string | (() => Promise<string> | string);\n\n\t/**\n\t * Configuration for asset movement operations\n\t */\n\tassetMovement: SharedAnchorMetadataLegalExtension & Pick<AssetMovementServiceMetadata, 'supportedAssets' | 'locationMetadata'> & {\n\t\tauthenticationRequired?: boolean;\n\n\t\t/**\n\t\t * Method to initiate the two-step creation of a persistent forwarding address template.\n\t\t * Returns a session ID and provider-specific data (e.g. a Plaid link token) for the client to complete.\n\t\t */\n\t\tinitiatePersistentForwardingTemplate?: (request: KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse>>;\n\n\t\t/**\n\t\t * Method to create a persistent forwarding address template.\n\t\t * Accepts either a direct resolved address or a session completion payload (e.g. Plaid public token).\n\t\t */\n\t\tcreatePersistentForwardingTemplate?: (request: KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse>>;\n\n\t\t/**\n\t\t * Method to list persistent forwarding address templates\n\t\t */\n\t\tlistPersistentForwardingTemplate?: (request: KeetaAssetMovementAnchorListForwardingAddressTemplateRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorListForwardingAddressTemplateResponse>>;\n\n\t\t/**\n\t\t * Method to create a persistent forwarding address\n\t\t */\n\t\tcreatePersistentForwarding?: (request: KeetaAssetMovementAnchorCreatePersistentForwardingRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingResponse>>;\n\n\t\t/**\n\t\t * Method to list persistent forwarding addresses\n\t\t */\n\t\tlistPersistentForwarding?: (request: KeetaAssetMovementAnchorListPersistentForwardingRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorListPersistentForwardingResponse>>;\n\n\t\t/**\n\t\t * Method to initiate a transfer\n\t\t */\n\t\tinitiateTransfer?: (request: KeetaAssetMovementAnchorInitiateTransferRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>>;\n\n\t\t/**\n\t\t * Method to get the status of a transfer\n\t\t */\n\t\tgetTransferStatus?: (id: string, account: Account.Account | null) => Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>>;\n\n\t\t/**\n\t\t * Method to list transactions\n\t\t */\n\t\tlistTransactions?: (request: KeetaAssetMovementAnchorlistTransactionsRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse>>;\n\n\t\t/**\n\t\t * Method to share KYC (Know Your Customer) information\n\t\t */\n\t\tshareKYC?: (request: KeetaAssetMovementAnchorShareKYCRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorShareKYCResponse>>;\n\n\t\t/**\n\t\t * Method to execute a transfer instruction, used for pull based transactions\n\t\t */\n\t\texecuteTransfer?: (request: KeetaAssetMovementAnchorExecuteTransferRequest & { id: string; }) => Promise<ExtractOk<KeetaAssetMovementAnchorExecuteTransferResponse>>;\n\t}\n};\n\nfunction serializeTransactionResponse(transaction: ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>['transaction']): ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>['transaction'] {\n\treturn({\n\t\t...transaction,\n\t\tfrom: {\n\t\t\t...transaction.from,\n\t\t\tlocation: convertAssetLocationToString(transaction.from.location)\n\t\t},\n\t\tto: {\n\t\t\t...transaction.to,\n\t\t\tlocation: convertAssetLocationToString(transaction.to.location)\n\t\t}\n\t});\n}\n\nfunction serializePersistentAddressTemplateResponse(template: ExtractOk<KeetaAssetMovementAnchorListForwardingAddressTemplateResponse>['templates'][number]): ExtractOk<KeetaAssetMovementAnchorListForwardingAddressTemplateResponse>['templates'][number] {\n\treturn({\n\t\t...template,\n\t\tlocation: convertAssetLocationToString(template.location)\n\t});\n}\n\nexport class KeetaNetAssetMovementAnchorHTTPServer extends KeetaAnchorHTTPServer.KeetaNetAnchorHTTPServer<KeetaAnchorAssetMovementServerConfig> implements Required<KeetaAnchorAssetMovementServerConfig> {\n\treadonly homepage: NonNullable<KeetaAnchorAssetMovementServerConfig['homepage']>;\n\treadonly assetMovement: NonNullable<KeetaAnchorAssetMovementServerConfig['assetMovement']>;\n\n\tconstructor(config: KeetaAnchorAssetMovementServerConfig) {\n\t\tsuper(config);\n\n\t\tthis.homepage = config.homepage ?? '';\n\t\tthis.assetMovement = config.assetMovement;\n\t}\n\n\tprotected async initRoutes(config: KeetaAnchorAssetMovementServerConfig): Promise<KeetaAnchorHTTPServer.Routes> {\n\t\tconst routes: KeetaAnchorHTTPServer.Routes = {};\n\n\t\t/**\n\t\t * If a homepage is provided, setup the route for it\n\t\t */\n\t\tif ('homepage' in config) {\n\t\t\troutes['GET /'] = async function() {\n\t\t\t\tlet homepageData: string;\n\t\t\t\tif (typeof config.homepage === 'string') {\n\t\t\t\t\thomepageData = config.homepage;\n\t\t\t\t} else {\n\t\t\t\t\tif (!config.homepage) {\n\t\t\t\t\t\tthrow(new Error('internal error: No homepage function provided'));\n\t\t\t\t\t}\n\n\t\t\t\t\thomepageData = await config.homepage();\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: homepageData,\n\t\t\t\t\tcontentType: 'text/html'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tfunction addRoute<\n\t\t\tHandlerName extends keyof KeetaAnchorAssetMovementServerConfig['assetMovement'],\n\t\t\tSerializedRequest extends { [key: string]: unknown } | undefined,\n\t\t\tResponse\n\t\t>(input: {\n\t\t\tmethod: 'GET' | 'POST';\n\t\t\thandlerName: HandlerName;\n\t\t\tpathName?: string;\n\t\t\tassertRequest?: (data: unknown) => SerializedRequest;\n\t\t\tserializeResponse?: (data: ExtractOk<Response>) => unknown;\n\t\t\tassertResponse: (data: unknown) => Response;\n\t\t\tgetSigningData?: (data: SerializedRequest, params: Map<string, string>) => Signable;\n\t\t\tparseRequestToArgs?: (params: {\n\t\t\t\tparams: Map<string, string>;\n\t\t\t\tbody: SerializedRequest | undefined,\n\t\t\t\turl: URL,\n\t\t\t\taccount: Account.Account | null\n\t\t\t\t// Typescript needs any here, but eslint does not like it\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t}) => NonNullable<KeetaAnchorAssetMovementServerConfig['assetMovement'][HandlerName]> extends (...args: infer R extends any[]) => any ? R : never;\n\t\t\tgetSignatureFieldAccountFromRequest?: (params: { body: JSONSerializable | undefined, url: URL }) => Partial<HTTPSignedFieldURLParameters>;\n\t\t}) {\n\t\t\tconst handler = config.assetMovement[input.handlerName];\n\t\t\tif (handler === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof handler !== 'function') {\n\t\t\t\tthrow(new Error(`internal error: handler for ${String(input.handlerName)} is not a function`));\n\t\t\t}\n\n\t\t\tconst authenticationRequired = config.assetMovement.authenticationRequired === true;\n\n\t\t\troutes[`${input.method} /api/${input.pathName ?? input.handlerName}`] = async function(params, postData, _ignore_headers, url) {\n\t\t\t\tlet request: SerializedRequest;\n\t\t\t\tif (input.method === 'GET') {\n\t\t\t\t\t// For GET requests, we do not expect a body\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\t\trequest = undefined as SerializedRequest;\n\t\t\t\t} else {\n\t\t\t\t\tif (!input.assertRequest) {\n\t\t\t\t\t\tthrow(new Error('input.assertRequest is required when method = POST'));\n\t\t\t\t\t}\n\t\t\t\t\trequest = input.assertRequest(postData);\n\t\t\t\t}\n\n\t\t\t\tlet account: Account.Account | null = null;\n\t\t\t\tif (authenticationRequired || (request !== undefined && 'signed' in request)) {\n\t\t\t\t\tlet signed;\n\t\t\t\t\tif (input.getSignatureFieldAccountFromRequest !== undefined) {\n\t\t\t\t\t\tconst parsed = input.getSignatureFieldAccountFromRequest({ body: postData, url });\n\n\t\t\t\t\t\tif (!parsed.account || !parsed.signedField) {\n\t\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing authentication information'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccount = parsed.account;\n\t\t\t\t\t\tsigned = parsed.signedField;\n\t\t\t\t\t} else if (request) {\n\t\t\t\t\t\tif (!('account' in request) || !('signed' in request)) {\n\t\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing authentication information'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof request.account !== 'string') {\n\t\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid account public key'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccount = KeetaNet.lib.Account.fromPublicKeyString(request.account).assertAccount();\n\t\t\t\t\t\tsigned = assertHTTPSignedField(request.signed);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new Error('when request is not defined, getSignatureFieldAccountFromRequest must be provided'));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst signable = input.getSigningData ? input.getSigningData(request, params) : [];\n\n\t\t\t\t\tconst valid = await VerifySignedData(account, signable, signed);\n\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid signature'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tlet parsedRequest: any[];\n\t\t\t\tif (input.parseRequestToArgs) {\n\t\t\t\t\tparsedRequest = input.parseRequestToArgs({ body: request, params, url, account: account ?? null });\n\t\t\t\t} else {\n\t\t\t\t\tparsedRequest = [ request, account ];\n\t\t\t\t}\n\n\t\t\t\t// @ts-ignore\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tconst result = await handler(...parsedRequest);\n\n\t\t\t\tif ('ok' in result && (result.ok !== undefined && result.ok !== true)) {\n\t\t\t\t\tthrow(new Error('internal error: response serialization must not have ok field'));\n\t\t\t\t}\n\n\t\t\t\tconst resp = input.assertResponse({ ...result, ok: true });\n\n\t\t\t\tlet serialized;\n\t\t\t\tif (input.serializeResponse) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\t\tserialized = input.serializeResponse(resp as ExtractOk<Response>);\n\t\t\t\t} else {\n\t\t\t\t\tserialized = resp;\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: commonJSONStringify(serialized)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'createPersistentForwarding',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\tsourceLocation: data.sourceLocation ? convertAssetLocationToString(data.sourceLocation) : undefined,\n\t\t\t\t\tdestinationLocation: data.destinationLocation ? convertAssetLocationToString(data.destinationLocation) : undefined\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'listPersistentForwarding',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorListPersistentForwardingRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\taddresses: data.addresses.map(addr => ({\n\t\t\t\t\t\t...addr,\n\t\t\t\t\t\tsourceLocation: addr.sourceLocation ? convertAssetLocationToString(addr.sourceLocation) : undefined,\n\t\t\t\t\t\tdestinationLocation: addr.destinationLocation ? convertAssetLocationToString(addr.destinationLocation) : undefined\n\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'initiateTransfer',\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorInitiateTransferRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorInitiateTransferResponse,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\tinstructionChoices: data.instructionChoices.map(function(choice) {\n\t\t\t\t\t\tconst ret = { ...choice };\n\t\t\t\t\t\tif ('location' in ret) {\n\t\t\t\t\t\t\tret.location = convertAssetLocationToString(ret.location);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn(ret);\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'executeTransfer',\n\t\t\tpathName: 'executeTransfer/:id',\n\t\t\tgetSigningData: function(data, params) {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\t\t\t\treturn(getKeetaAssetMovementAnchorExecuteTransferRequestSigningData({\n\t\t\t\t\tid: id,\n\t\t\t\t\t...data\n\t\t\t\t}));\n\t\t\t},\n\t\t\tparseRequestToArgs: ({ body, params }) => {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\n\t\t\t\tif (!body) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid request body'));\n\t\t\t\t}\n\n\t\t\t\treturn([ { id, ...body } ] as const);\n\t\t\t},\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorExecuteTransferRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorExecuteTransferResponse,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttransaction: serializeTransactionResponse(data.transaction)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'GET',\n\t\t\thandlerName: 'getTransferStatus',\n\t\t\tpathName: 'getTransferStatus/:id',\n\t\t\tassertRequest: (input) => {\n\t\t\t\tif (input !== undefined) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('No body expected for getTransferStatus'));\n\t\t\t\t}\n\n\t\t\t\treturn(undefined);\n\t\t\t},\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorGetTransferStatusResponse,\n\t\t\tgetSignatureFieldAccountFromRequest: ({ url }) => parseSignatureFromURL(url),\n\t\t\tparseRequestToArgs: ({ params, account }) => {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\n\t\t\t\treturn([ id, account ] as const);\n\t\t\t},\n\t\t\tgetSigningData(_ignore_request, params) {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\n\t\t\t\treturn(getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData({ id }));\n\t\t\t},\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttransaction: serializeTransactionResponse(data.transaction)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'listTransactions',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorlistTransactionsRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttransactions: data.transactions.map(tx => serializeTransactionResponse(tx))\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'initiatePersistentForwardingTemplate',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'createPersistentForwardingTemplate',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\t...(serializePersistentAddressTemplateResponse(data))\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'listPersistentForwardingTemplate',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorListForwardingAddressTemplateRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttemplates: data.templates.map(template => serializePersistentAddressTemplateResponse(template))\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'shareKYC',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorShareKYCRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorShareKYCResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorShareKYCRequestSigningData\n\t\t});\n\n\t\treturn(routes);\n\t}\n\n\tasync serviceMetadata(): Promise<NonNullable<ServiceMetadata['services']['assetMovement']>[string]> {\n\t\tconst operations: NonNullable<ServiceMetadata['services']['assetMovement']>[string]['operations'] = {};\n\n\t\tconst routes = [\n\t\t\t'initiateTransfer',\n\t\t\t'listTransactions',\n\t\t\t'initiatePersistentForwardingTemplate',\n\t\t\t'createPersistentForwardingTemplate',\n\t\t\t'listPersistentForwardingTemplate',\n\t\t\t'createPersistentForwarding',\n\t\t\t'listPersistentForwarding',\n\t\t\t'shareKYC',\n\t\t\t[ 'getTransferStatus', 'getTransferStatus/{id}' ],\n\t\t\t[ 'executeTransfer', 'executeTransfer/{id}' ]\n\t\t] as const satisfies ((keyof typeof operations) | [ keyof typeof operations, string ])[];\n\n\t\tfor (const routeInput of routes) {\n\t\t\tlet op;\n\t\t\tlet url;\n\t\t\tif (Array.isArray(routeInput)) {\n\t\t\t\top = routeInput[0];\n\t\t\t\turl = routeInput[1];\n\t\t\t} else {\n\t\t\t\top = routeInput;\n\t\t\t\turl = routeInput;\n\t\t\t}\n\n\t\t\tif (this.assetMovement[op] !== undefined) {\n\t\t\t\tconst computedURL = (new URL(`/api/${url}`, this.url)).toString();\n\t\t\t\tif (this.assetMovement.authenticationRequired) {\n\t\t\t\t\toperations[op] = {\n\t\t\t\t\t\turl: computedURL,\n\t\t\t\t\t\toptions: { authentication: { method: 'keeta-account', type: 'required' }}\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\toperations[op] = computedURL;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(operations).length === 0) {\n\t\t\tthrow(new KeetaAnchorUserError('No operations are supported on this server'));\n\t\t}\n\t\treturn({\n\t\t\t...(this.assetMovement.legal ? { legal: this.assetMovement.legal } : {}),\n\t\t\t...(this.assetMovement.locationMetadata ? { locationMetadata: this.assetMovement.locationMetadata } : {}),\n\t\t\toperations: operations,\n\t\t\tsupportedAssets: this.assetMovement.supportedAssets\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/services/asset-movement/server.ts"],"names":[],"mappings":"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","sourcesContent":["import * as KeetaAnchorHTTPServer from '../../lib/http-server/index.js';\nimport { KeetaNet } from '../../client/index.js';\nimport {\n\tKeetaAnchorUserError\n} from '../../lib/error.js';\nimport type {\n\tKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tKeetaAssetMovementAnchorInitiateTransferRequest,\n\tKeetaAssetMovementAnchorInitiateTransferResponse,\n\tKeetaAssetMovementAnchorGetTransferStatusResponse,\n\tKeetaAssetMovementAnchorlistTransactionsRequest,\n\tKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tKeetaAssetMovementAnchorListPersistentForwardingRequest,\n\tKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorListForwardingAddressTemplateRequest,\n\tKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\tKeetaAssetMovementAnchorShareKYCRequest,\n\tKeetaAssetMovementAnchorShareKYCResponse,\n\tKeetaAssetMovementAnchorExecuteTransferRequest,\n\tKeetaAssetMovementAnchorExecuteTransferResponse,\n\tKeetaAssetMovementAnchorSimulateTransferRequest,\n\tKeetaAssetMovementAnchorSimulateTransferResponse\n} from './common.ts';\nimport {\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\tassertKeetaAssetMovementAnchorInitiateTransferRequest,\n\tassertKeetaAssetMovementAnchorInitiateTransferResponse,\n\tassertKeetaAssetMovementAnchorGetTransferStatusResponse,\n\tassertKeetaAssetMovementAnchorlistTransactionsRequest,\n\tassertKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\tassertKeetaAssetMovementAnchorListPersistentForwardingRequest,\n\tassertKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\tassertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\tassertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData,\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\tassertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\tassertKeetaAssetMovementAnchorListForwardingAddressTemplateRequest,\n\tassertKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\tgetKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\tgetKeetaAssetMovementAnchorGetTransferStatusRequestSigningData,\n\tgetKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\tassertKeetaAssetMovementAnchorShareKYCResponse,\n\tassertKeetaAssetMovementAnchorShareKYCRequest,\n\tgetKeetaAssetMovementAnchorShareKYCRequestSigningData,\n\tconvertAssetLocationToString,\n\tcommonJSONStringify,\n\tgetKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\tgetKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\tgetKeetaAssetMovementAnchorExecuteTransferRequestSigningData,\n\tassertKeetaAssetMovementAnchorExecuteTransferRequest,\n\tassertKeetaAssetMovementAnchorExecuteTransferResponse,\n\tgetKeetaAssetMovementAnchorSimulateTransferRequestSigningData,\n\tassertKeetaAssetMovementAnchorSimulateTransferRequest,\n\tassertKeetaAssetMovementAnchorSimulateTransferResponse\n} from './common.js';\nimport type { ServiceMetadata } from '../../lib/resolver.ts';\nimport type { Signable } from '../../lib/utils/signing.js';\nimport { VerifySignedData } from '../../lib/utils/signing.js';\nimport type Account from '@keetanetwork/keetanet-client/lib/account.js';\nimport type { ExtractOk, HTTPSignedFieldURLParameters } from '../../lib/http-server/common.js';\nimport { assertHTTPSignedField, parseSignatureFromURL } from '../../lib/http-server/common.js';\nimport type { JSONSerializable } from '@keetanetwork/keetanet-client/lib/utils/conversion.js';\nimport type { SharedAnchorMetadataLegalExtension } from '../../lib/metadata.types.js';\n\ntype AssetMovementServiceMetadata = NonNullable<ServiceMetadata['services']['assetMovement']>[string];\n\nexport interface KeetaAnchorAssetMovementServerConfig extends KeetaAnchorHTTPServer.KeetaAnchorHTTPServerConfig {\n\t/**\n\t * The data to use for the index page (optional)\n\t */\n\thomepage?: string | (() => Promise<string> | string);\n\n\t/**\n\t * Configuration for asset movement operations\n\t */\n\tassetMovement: SharedAnchorMetadataLegalExtension & Pick<AssetMovementServiceMetadata, 'supportedAssets' | 'locationMetadata'> & {\n\t\tauthenticationRequired?: boolean;\n\n\t\t/**\n\t\t * Method to initiate the two-step creation of a persistent forwarding address template.\n\t\t * Returns a session ID and provider-specific data (e.g. a Plaid link token) for the client to complete.\n\t\t */\n\t\tinitiatePersistentForwardingTemplate?: (request: KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse>>;\n\n\t\t/**\n\t\t * Method to create a persistent forwarding address template.\n\t\t * Accepts either a direct resolved address or a session completion payload (e.g. Plaid public token).\n\t\t */\n\t\tcreatePersistentForwardingTemplate?: (request: KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse>>;\n\n\t\t/**\n\t\t * Method to list persistent forwarding address templates\n\t\t */\n\t\tlistPersistentForwardingTemplate?: (request: KeetaAssetMovementAnchorListForwardingAddressTemplateRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorListForwardingAddressTemplateResponse>>;\n\n\t\t/**\n\t\t * Method to create a persistent forwarding address\n\t\t */\n\t\tcreatePersistentForwarding?: (request: KeetaAssetMovementAnchorCreatePersistentForwardingRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorCreatePersistentForwardingResponse>>;\n\n\t\t/**\n\t\t * Method to list persistent forwarding addresses\n\t\t */\n\t\tlistPersistentForwarding?: (request: KeetaAssetMovementAnchorListPersistentForwardingRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorListPersistentForwardingResponse>>;\n\n\t\t/**\n\t\t * Method to initiate a transfer\n\t\t */\n\t\tinitiateTransfer?: (request: KeetaAssetMovementAnchorInitiateTransferRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorInitiateTransferResponse>>;\n\n\t\t/**\n\t\t * Method to initiate a transfer\n\t\t */\n\t\tsimulateTransfer?: (request: KeetaAssetMovementAnchorSimulateTransferRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorSimulateTransferResponse>>;\n\n\t\t/**\n\t\t * Method to get the status of a transfer\n\t\t */\n\t\tgetTransferStatus?: (id: string, account: Account.Account | null) => Promise<ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>>;\n\n\t\t/**\n\t\t * Method to list transactions\n\t\t */\n\t\tlistTransactions?: (request: KeetaAssetMovementAnchorlistTransactionsRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse>>;\n\n\t\t/**\n\t\t * Method to share KYC (Know Your Customer) information\n\t\t */\n\t\tshareKYC?: (request: KeetaAssetMovementAnchorShareKYCRequest) => Promise<ExtractOk<KeetaAssetMovementAnchorShareKYCResponse>>;\n\n\t\t/**\n\t\t * Method to execute a transfer instruction, used for pull based transactions\n\t\t */\n\t\texecuteTransfer?: (request: KeetaAssetMovementAnchorExecuteTransferRequest & { id: string; }) => Promise<ExtractOk<KeetaAssetMovementAnchorExecuteTransferResponse>>;\n\t}\n};\n\nfunction serializeTransactionResponse(transaction: ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>['transaction']): ExtractOk<KeetaAssetMovementAnchorGetTransferStatusResponse>['transaction'] {\n\treturn({\n\t\t...transaction,\n\t\tfrom: {\n\t\t\t...transaction.from,\n\t\t\tlocation: convertAssetLocationToString(transaction.from.location)\n\t\t},\n\t\tto: {\n\t\t\t...transaction.to,\n\t\t\tlocation: convertAssetLocationToString(transaction.to.location)\n\t\t}\n\t});\n}\n\nfunction serializePersistentAddressTemplateResponse(template: ExtractOk<KeetaAssetMovementAnchorListForwardingAddressTemplateResponse>['templates'][number]): ExtractOk<KeetaAssetMovementAnchorListForwardingAddressTemplateResponse>['templates'][number] {\n\treturn({\n\t\t...template,\n\t\tlocation: convertAssetLocationToString(template.location)\n\t});\n}\n\nexport class KeetaNetAssetMovementAnchorHTTPServer extends KeetaAnchorHTTPServer.KeetaNetAnchorHTTPServer<KeetaAnchorAssetMovementServerConfig> implements Required<KeetaAnchorAssetMovementServerConfig> {\n\treadonly homepage: NonNullable<KeetaAnchorAssetMovementServerConfig['homepage']>;\n\treadonly assetMovement: NonNullable<KeetaAnchorAssetMovementServerConfig['assetMovement']>;\n\n\tconstructor(config: KeetaAnchorAssetMovementServerConfig) {\n\t\tsuper(config);\n\n\t\tthis.homepage = config.homepage ?? '';\n\t\tthis.assetMovement = config.assetMovement;\n\t}\n\n\tprotected async initRoutes(config: KeetaAnchorAssetMovementServerConfig): Promise<KeetaAnchorHTTPServer.Routes> {\n\t\tconst routes: KeetaAnchorHTTPServer.Routes = {};\n\n\t\t/**\n\t\t * If a homepage is provided, setup the route for it\n\t\t */\n\t\tif ('homepage' in config) {\n\t\t\troutes['GET /'] = async function() {\n\t\t\t\tlet homepageData: string;\n\t\t\t\tif (typeof config.homepage === 'string') {\n\t\t\t\t\thomepageData = config.homepage;\n\t\t\t\t} else {\n\t\t\t\t\tif (!config.homepage) {\n\t\t\t\t\t\tthrow(new Error('internal error: No homepage function provided'));\n\t\t\t\t\t}\n\n\t\t\t\t\thomepageData = await config.homepage();\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: homepageData,\n\t\t\t\t\tcontentType: 'text/html'\n\t\t\t\t});\n\t\t\t};\n\t\t}\n\n\t\tfunction addRoute<\n\t\t\tHandlerName extends keyof KeetaAnchorAssetMovementServerConfig['assetMovement'],\n\t\t\tSerializedRequest extends { [key: string]: unknown } | undefined,\n\t\t\tResponse\n\t\t>(input: {\n\t\t\tmethod: 'GET' | 'POST';\n\t\t\thandlerName: HandlerName;\n\t\t\tpathName?: string;\n\t\t\toverrideAllowUnauthenticated?: boolean;\n\t\t\tassertRequest?: (data: unknown) => SerializedRequest;\n\t\t\tserializeResponse?: (data: ExtractOk<Response>) => unknown;\n\t\t\tassertResponse: (data: unknown) => Response;\n\t\t\tgetSigningData?: (data: SerializedRequest, params: Map<string, string>) => Signable;\n\t\t\tparseRequestToArgs?: (params: {\n\t\t\t\tparams: Map<string, string>;\n\t\t\t\tbody: SerializedRequest | undefined,\n\t\t\t\turl: URL,\n\t\t\t\taccount: Account.Account | null\n\t\t\t\t// Typescript needs any here, but eslint does not like it\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t}) => NonNullable<KeetaAnchorAssetMovementServerConfig['assetMovement'][HandlerName]> extends (...args: infer R extends any[]) => any ? R : never;\n\t\t\tgetSignatureFieldAccountFromRequest?: (params: { body: JSONSerializable | undefined, url: URL }) => Partial<HTTPSignedFieldURLParameters>;\n\t\t}) {\n\t\t\tconst handler = config.assetMovement[input.handlerName];\n\t\t\tif (handler === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof handler !== 'function') {\n\t\t\t\tthrow(new Error(`internal error: handler for ${String(input.handlerName)} is not a function`));\n\t\t\t}\n\n\t\t\tconst authenticationRequired = config.assetMovement.authenticationRequired === true && (input.overrideAllowUnauthenticated !== true);\n\n\t\t\troutes[`${input.method} /api/${input.pathName ?? input.handlerName}`] = async function(params, postData, _ignore_headers, url) {\n\t\t\t\tlet request: SerializedRequest;\n\t\t\t\tif (input.method === 'GET') {\n\t\t\t\t\t// For GET requests, we do not expect a body\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\t\trequest = undefined as SerializedRequest;\n\t\t\t\t} else {\n\t\t\t\t\tif (!input.assertRequest) {\n\t\t\t\t\t\tthrow(new Error('input.assertRequest is required when method = POST'));\n\t\t\t\t\t}\n\t\t\t\t\trequest = input.assertRequest(postData);\n\t\t\t\t}\n\n\t\t\t\tlet account: Account.Account | null = null;\n\t\t\t\tif (authenticationRequired || (request !== undefined && 'signed' in request)) {\n\t\t\t\t\tlet signed;\n\t\t\t\t\tif (input.getSignatureFieldAccountFromRequest !== undefined) {\n\t\t\t\t\t\tconst parsed = input.getSignatureFieldAccountFromRequest({ body: postData, url });\n\n\t\t\t\t\t\tif (!parsed.account || !parsed.signedField) {\n\t\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing authentication information'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccount = parsed.account;\n\t\t\t\t\t\tsigned = parsed.signedField;\n\t\t\t\t\t} else if (request) {\n\t\t\t\t\t\tif (!('account' in request) || !('signed' in request)) {\n\t\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing authentication information'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof request.account !== 'string') {\n\t\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid account public key'));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\taccount = KeetaNet.lib.Account.fromPublicKeyString(request.account).assertAccount();\n\t\t\t\t\t\tsigned = assertHTTPSignedField(request.signed);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow(new Error('when request is not defined, getSignatureFieldAccountFromRequest must be provided'));\n\t\t\t\t\t}\n\n\t\t\t\t\tconst signable = input.getSigningData ? input.getSigningData(request, params) : [];\n\n\t\t\t\t\tconst valid = await VerifySignedData(account, signable, signed);\n\n\t\t\t\t\tif (!valid) {\n\t\t\t\t\t\tthrow(new KeetaAnchorUserError('Invalid signature'));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tlet parsedRequest: any[];\n\t\t\t\tif (input.parseRequestToArgs) {\n\t\t\t\t\tparsedRequest = input.parseRequestToArgs({ body: request, params, url, account: account ?? null });\n\t\t\t\t} else {\n\t\t\t\t\tparsedRequest = [ request, account ];\n\t\t\t\t}\n\n\t\t\t\t// @ts-ignore\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tconst result = await handler(...parsedRequest);\n\n\t\t\t\tif ('ok' in result && (result.ok !== undefined && result.ok !== true)) {\n\t\t\t\t\tthrow(new Error('internal error: response serialization must not have ok field'));\n\t\t\t\t}\n\n\t\t\t\tconst resp = input.assertResponse({ ...result, ok: true });\n\n\t\t\t\tlet serialized;\n\t\t\t\tif (input.serializeResponse) {\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\t\tserialized = input.serializeResponse(resp as ExtractOk<Response>);\n\t\t\t\t} else {\n\t\t\t\t\tserialized = resp;\n\t\t\t\t}\n\n\t\t\t\treturn({\n\t\t\t\t\toutput: commonJSONStringify(serialized)\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'createPersistentForwarding',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorCreatePersistentForwardingRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorCreatePersistentForwardingResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorCreatePersistentForwardingRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\tsourceLocation: data.sourceLocation ? convertAssetLocationToString(data.sourceLocation) : undefined,\n\t\t\t\t\tdestinationLocation: data.destinationLocation ? convertAssetLocationToString(data.destinationLocation) : undefined\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'listPersistentForwarding',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorListPersistentForwardingRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorListPersistentForwardingResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorListPersistentForwardingRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\taddresses: data.addresses.map(addr => ({\n\t\t\t\t\t\t...addr,\n\t\t\t\t\t\tsourceLocation: addr.sourceLocation ? convertAssetLocationToString(addr.sourceLocation) : undefined,\n\t\t\t\t\t\tdestinationLocation: addr.destinationLocation ? convertAssetLocationToString(addr.destinationLocation) : undefined\n\t\t\t\t\t}))\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'initiateTransfer',\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorInitiateTransferRequestSigningData,\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorInitiateTransferRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorInitiateTransferResponse,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\tinstructionChoices: data.instructionChoices.map(function(choice) {\n\t\t\t\t\t\tconst ret = { ...choice };\n\t\t\t\t\t\tif ('location' in ret) {\n\t\t\t\t\t\t\tret.location = convertAssetLocationToString(ret.location);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn(ret);\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'simulateTransfer',\n\t\t\toverrideAllowUnauthenticated: true,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorSimulateTransferRequestSigningData,\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorSimulateTransferRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorSimulateTransferResponse,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\tinstructionChoices: data.instructionChoices.map(function(choice) {\n\t\t\t\t\t\tconst ret = { ...choice };\n\t\t\t\t\t\tif ('location' in ret) {\n\t\t\t\t\t\t\tret.location = convertAssetLocationToString(ret.location);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn(ret);\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'executeTransfer',\n\t\t\tpathName: 'executeTransfer/:id',\n\t\t\tgetSigningData: function(data, params) {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\t\t\t\treturn(getKeetaAssetMovementAnchorExecuteTransferRequestSigningData({\n\t\t\t\t\tid: id,\n\t\t\t\t\t...data\n\t\t\t\t}));\n\t\t\t},\n\t\t\tparseRequestToArgs: ({ body, params }) => {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\n\t\t\t\tif (!body) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid request body'));\n\t\t\t\t}\n\n\t\t\t\treturn([ { id, ...body } ] as const);\n\t\t\t},\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorExecuteTransferRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorExecuteTransferResponse,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttransaction: serializeTransactionResponse(data.transaction)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'GET',\n\t\t\thandlerName: 'getTransferStatus',\n\t\t\tpathName: 'getTransferStatus/:id',\n\t\t\tassertRequest: (input) => {\n\t\t\t\tif (input !== undefined) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('No body expected for getTransferStatus'));\n\t\t\t\t}\n\n\t\t\t\treturn(undefined);\n\t\t\t},\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorGetTransferStatusResponse,\n\t\t\tgetSignatureFieldAccountFromRequest: ({ url }) => parseSignatureFromURL(url),\n\t\t\tparseRequestToArgs: ({ params, account }) => {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\n\t\t\t\treturn([ id, account ] as const);\n\t\t\t},\n\t\t\tgetSigningData(_ignore_request, params) {\n\t\t\t\tconst id = params.get('id');\n\t\t\t\tif (typeof id !== 'string' || id.length === 0) {\n\t\t\t\t\tthrow(new KeetaAnchorUserError('Missing or invalid id parameter'));\n\t\t\t\t}\n\n\t\t\t\treturn(getKeetaAssetMovementAnchorGetTransferStatusRequestSigningData({ id }));\n\t\t\t},\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttransaction: serializeTransactionResponse(data.transaction)\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'listTransactions',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorlistTransactionsRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorlistPersistentForwardingTransactionsResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorlistTransactionsRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttransactions: data.transactions.map(tx => serializeTransactionResponse(tx))\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'initiatePersistentForwardingTemplate',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorInitiatePersistentForwardingAddressTemplateRequestSigningData\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'createPersistentForwardingTemplate',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorCreatePersistentForwardingAddressTemplateRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\t...(serializePersistentAddressTemplateResponse(data))\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'listPersistentForwardingTemplate',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorListForwardingAddressTemplateRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorListForwardingAddressTemplateResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorListForwardingAddressTemplateRequestSigningData,\n\t\t\tserializeResponse(data) {\n\t\t\t\treturn({\n\t\t\t\t\t...data,\n\t\t\t\t\ttemplates: data.templates.map(template => serializePersistentAddressTemplateResponse(template))\n\t\t\t\t})\n\t\t\t}\n\t\t});\n\n\t\taddRoute({\n\t\t\tmethod: 'POST',\n\t\t\thandlerName: 'shareKYC',\n\t\t\tassertRequest: assertKeetaAssetMovementAnchorShareKYCRequest,\n\t\t\tassertResponse: assertKeetaAssetMovementAnchorShareKYCResponse,\n\t\t\tgetSigningData: getKeetaAssetMovementAnchorShareKYCRequestSigningData\n\t\t});\n\n\t\treturn(routes);\n\t}\n\n\tasync serviceMetadata(): Promise<NonNullable<ServiceMetadata['services']['assetMovement']>[string]> {\n\t\tconst operations: NonNullable<ServiceMetadata['services']['assetMovement']>[string]['operations'] = {};\n\n\t\tconst routes = [\n\t\t\t'initiateTransfer',\n\t\t\t'simulateTransfer',\n\t\t\t'listTransactions',\n\t\t\t'initiatePersistentForwardingTemplate',\n\t\t\t'createPersistentForwardingTemplate',\n\t\t\t'listPersistentForwardingTemplate',\n\t\t\t'createPersistentForwarding',\n\t\t\t'listPersistentForwarding',\n\t\t\t'shareKYC',\n\t\t\t[ 'getTransferStatus', 'getTransferStatus/{id}' ],\n\t\t\t[ 'executeTransfer', 'executeTransfer/{id}' ]\n\t\t] as const satisfies ((keyof typeof operations) | [ keyof typeof operations, string ])[];\n\n\t\tfor (const routeInput of routes) {\n\t\t\tlet op;\n\t\t\tlet url;\n\t\t\tif (Array.isArray(routeInput)) {\n\t\t\t\top = routeInput[0];\n\t\t\t\turl = routeInput[1];\n\t\t\t} else {\n\t\t\t\top = routeInput;\n\t\t\t\turl = routeInput;\n\t\t\t}\n\n\t\t\tif (this.assetMovement[op] !== undefined) {\n\t\t\t\tconst computedURL = (new URL(`/api/${url}`, this.url)).toString();\n\t\t\t\tif (this.assetMovement.authenticationRequired) {\n\t\t\t\t\toperations[op] = {\n\t\t\t\t\t\turl: computedURL,\n\t\t\t\t\t\toptions: { authentication: { method: 'keeta-account', type: 'required' }}\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\toperations[op] = computedURL;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(operations).length === 0) {\n\t\t\tthrow(new KeetaAnchorUserError('No operations are supported on this server'));\n\t\t}\n\t\treturn({\n\t\t\t...(this.assetMovement.legal ? { legal: this.assetMovement.legal } : {}),\n\t\t\t...(this.assetMovement.locationMetadata ? { locationMetadata: this.assetMovement.locationMetadata } : {}),\n\t\t\toperations: operations,\n\t\t\tsupportedAssets: this.assetMovement.supportedAssets\n\t\t});\n\t}\n}\n"]}