@otim/utils 0.0.4 → 0.0.6
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/dist/api/index.d.mts +1858 -7
- package/dist/api/index.d.mts.map +1 -0
- package/dist/api/index.d.ts +1857 -6
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1514 -1994
- package/dist/api/index.js.map +1 -7
- package/dist/api/index.mjs +1394 -1962
- package/dist/api/index.mjs.map +1 -7
- package/dist/api-urls-B-GTEiT3.d.mts +49 -0
- package/dist/api-urls-B-GTEiT3.d.mts.map +1 -0
- package/dist/api-urls-Cd20DG4i.js +171 -0
- package/dist/api-urls-Cd20DG4i.js.map +1 -0
- package/dist/api-urls-DJcIKBCy.mjs +135 -0
- package/dist/api-urls-DJcIKBCy.mjs.map +1 -0
- package/dist/api-urls-SKeIQMoZ.d.ts +49 -0
- package/dist/api-urls-SKeIQMoZ.d.ts.map +1 -0
- package/dist/chains/index.d.mts +13568 -16
- package/dist/chains/index.d.mts.map +1 -0
- package/dist/chains/index.d.ts +13567 -15
- package/dist/chains/index.d.ts.map +1 -1
- package/dist/chains/index.js +3615 -424
- package/dist/chains/index.js.map +1 -7
- package/dist/chains/index.mjs +3561 -440
- package/dist/chains/index.mjs.map +1 -7
- package/dist/chunk-kSYXY2_d.js +34 -0
- package/dist/client-factory-7xUSPC9I.mjs +42 -0
- package/dist/client-factory-7xUSPC9I.mjs.map +1 -0
- package/dist/client-factory-C3A4RPdj.d.ts +22 -0
- package/dist/client-factory-C3A4RPdj.d.ts.map +1 -0
- package/dist/client-factory-CTI_Nt35.js +49 -0
- package/dist/client-factory-CTI_Nt35.js.map +1 -0
- package/dist/client-factory-DOL0ZTWy.d.mts +22 -0
- package/dist/client-factory-DOL0ZTWy.d.mts.map +1 -0
- package/dist/constants.d.mts +14 -24
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.d.ts +13 -23
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +31 -46
- package/dist/constants.js.map +1 -7
- package/dist/constants.mjs +22 -26
- package/dist/constants.mjs.map +1 -7
- package/dist/date-CFzrYcjE.js +536 -0
- package/dist/date-CFzrYcjE.js.map +1 -0
- package/dist/date-gBac-Om9.mjs +313 -0
- package/dist/date-gBac-Om9.mjs.map +1 -0
- package/dist/defineProperty-DbMdhrDE.js +49 -0
- package/dist/defineProperty-DzhmunJg.mjs +43 -0
- package/dist/formatters/index.d.mts +1 -2
- package/dist/formatters/index.d.ts +1 -2
- package/dist/formatters/index.js +0 -19
- package/dist/formatters/index.mjs +1 -1
- package/dist/helpers/index.d.mts +562 -19
- package/dist/helpers/index.d.mts.map +1 -0
- package/dist/helpers/index.d.ts +561 -18
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/helpers/index.js +106 -1344
- package/dist/helpers/index.mjs +3 -1315
- package/dist/helpers-BNiSxjGq.mjs +895 -0
- package/dist/helpers-BNiSxjGq.mjs.map +1 -0
- package/dist/helpers-DoC7Xl12.js +1291 -0
- package/dist/helpers-DoC7Xl12.js.map +1 -0
- package/dist/index-Bv0kUz4w.d.ts +540 -0
- package/dist/index-Bv0kUz4w.d.ts.map +1 -0
- package/dist/index-DartTKk2.d.mts +540 -0
- package/dist/index-DartTKk2.d.mts.map +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +0 -2
- package/dist/index.mjs +1 -1
- package/dist/instructions/index.d.mts +687 -6
- package/dist/instructions/index.d.mts.map +1 -0
- package/dist/instructions/index.d.ts +686 -5
- package/dist/instructions/index.d.ts.map +1 -1
- package/dist/instructions/index.js +1912 -1091
- package/dist/instructions/index.js.map +1 -7
- package/dist/instructions/index.mjs +1887 -1058
- package/dist/instructions/index.mjs.map +1 -7
- package/dist/payments/index.d.mts +322 -16
- package/dist/payments/index.d.mts.map +1 -0
- package/dist/payments/index.d.ts +321 -15
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +616 -1258
- package/dist/payments/index.js.map +1 -7
- package/dist/payments/index.mjs +594 -1236
- package/dist/payments/index.mjs.map +1 -7
- package/dist/schemas/index.d.mts +2 -10
- package/dist/schemas/index.d.ts +2 -10
- package/dist/schemas/index.js +350 -393
- package/dist/schemas/index.js.map +1 -7
- package/dist/schemas/index.mjs +283 -371
- package/dist/schemas/index.mjs.map +1 -7
- package/dist/server/index.d.mts +354 -3
- package/dist/server/index.d.mts.map +1 -0
- package/dist/server/index.d.ts +353 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +248 -435
- package/dist/server/index.js.map +1 -7
- package/dist/server/index.mjs +199 -404
- package/dist/server/index.mjs.map +1 -7
- package/dist/server/react.d.mts +16 -0
- package/dist/server/react.d.mts.map +1 -0
- package/dist/server/react.d.ts +16 -0
- package/dist/server/react.d.ts.map +1 -0
- package/dist/server/react.js +30 -0
- package/dist/server/react.js.map +1 -0
- package/dist/server/react.mjs +28 -0
- package/dist/server/react.mjs.map +1 -0
- package/dist/wallet/wagmi/index.d.mts +23 -2
- package/dist/wallet/wagmi/index.d.mts.map +1 -0
- package/dist/wallet/wagmi/index.d.ts +22 -1
- package/dist/wallet/wagmi/index.d.ts.map +1 -1
- package/dist/wallet/wagmi/index.js +86 -417
- package/dist/wallet/wagmi/index.js.map +1 -7
- package/dist/wallet/wagmi/index.mjs +82 -418
- package/dist/wallet/wagmi/index.mjs.map +1 -7
- package/package.json +39 -28
- package/dist/api/api.d.mts +0 -18
- package/dist/api/api.d.ts +0 -18
- package/dist/api/api.d.ts.map +0 -1
- package/dist/api/core/error.d.mts +0 -74
- package/dist/api/core/error.d.ts +0 -74
- package/dist/api/core/error.d.ts.map +0 -1
- package/dist/api/core/index.d.mts +0 -4
- package/dist/api/core/index.d.ts +0 -4
- package/dist/api/core/index.d.ts.map +0 -1
- package/dist/api/core/instance.d.mts +0 -13
- package/dist/api/core/instance.d.ts +0 -13
- package/dist/api/core/instance.d.ts.map +0 -1
- package/dist/api/core/service.d.mts +0 -51
- package/dist/api/core/service.d.ts +0 -51
- package/dist/api/core/service.d.ts.map +0 -1
- package/dist/api/schemas/account.d.mts +0 -44
- package/dist/api/schemas/account.d.ts +0 -44
- package/dist/api/schemas/account.d.ts.map +0 -1
- package/dist/api/schemas/activity.d.mts +0 -277
- package/dist/api/schemas/activity.d.ts +0 -277
- package/dist/api/schemas/activity.d.ts.map +0 -1
- package/dist/api/schemas/auth.d.mts +0 -127
- package/dist/api/schemas/auth.d.ts +0 -127
- package/dist/api/schemas/auth.d.ts.map +0 -1
- package/dist/api/schemas/chain.d.mts +0 -15
- package/dist/api/schemas/chain.d.ts +0 -15
- package/dist/api/schemas/chain.d.ts.map +0 -1
- package/dist/api/schemas/config.d.mts +0 -33
- package/dist/api/schemas/config.d.ts +0 -33
- package/dist/api/schemas/config.d.ts.map +0 -1
- package/dist/api/schemas/contacts.d.mts +0 -27
- package/dist/api/schemas/contacts.d.ts +0 -27
- package/dist/api/schemas/contacts.d.ts.map +0 -1
- package/dist/api/schemas/index.d.mts +0 -12
- package/dist/api/schemas/index.d.ts +0 -12
- package/dist/api/schemas/index.d.ts.map +0 -1
- package/dist/api/schemas/instruction.d.mts +0 -446
- package/dist/api/schemas/instruction.d.ts +0 -446
- package/dist/api/schemas/instruction.d.ts.map +0 -1
- package/dist/api/schemas/integration.d.mts +0 -166
- package/dist/api/schemas/integration.d.ts +0 -166
- package/dist/api/schemas/integration.d.ts.map +0 -1
- package/dist/api/schemas/operating-account.d.mts +0 -11
- package/dist/api/schemas/operating-account.d.ts +0 -11
- package/dist/api/schemas/operating-account.d.ts.map +0 -1
- package/dist/api/schemas/payments.d.mts +0 -234
- package/dist/api/schemas/payments.d.ts +0 -234
- package/dist/api/schemas/payments.d.ts.map +0 -1
- package/dist/api/schemas/transaction.d.mts +0 -37
- package/dist/api/schemas/transaction.d.ts +0 -37
- package/dist/api/schemas/transaction.d.ts.map +0 -1
- package/dist/api/services/account.d.mts +0 -8
- package/dist/api/services/account.d.ts +0 -8
- package/dist/api/services/account.d.ts.map +0 -1
- package/dist/api/services/activity.d.mts +0 -7
- package/dist/api/services/activity.d.ts +0 -7
- package/dist/api/services/activity.d.ts.map +0 -1
- package/dist/api/services/auth.d.mts +0 -12
- package/dist/api/services/auth.d.ts +0 -12
- package/dist/api/services/auth.d.ts.map +0 -1
- package/dist/api/services/base.d.mts +0 -10
- package/dist/api/services/base.d.ts +0 -10
- package/dist/api/services/base.d.ts.map +0 -1
- package/dist/api/services/config.d.mts +0 -10
- package/dist/api/services/config.d.ts +0 -10
- package/dist/api/services/config.d.ts.map +0 -1
- package/dist/api/services/contacts.d.mts +0 -8
- package/dist/api/services/contacts.d.ts +0 -8
- package/dist/api/services/contacts.d.ts.map +0 -1
- package/dist/api/services/developer.d.mts +0 -6
- package/dist/api/services/developer.d.ts +0 -6
- package/dist/api/services/developer.d.ts.map +0 -1
- package/dist/api/services/index.d.mts +0 -13
- package/dist/api/services/index.d.ts +0 -13
- package/dist/api/services/index.d.ts.map +0 -1
- package/dist/api/services/instruction.d.mts +0 -12
- package/dist/api/services/instruction.d.ts +0 -12
- package/dist/api/services/instruction.d.ts.map +0 -1
- package/dist/api/services/integration.d.mts +0 -8
- package/dist/api/services/integration.d.ts +0 -8
- package/dist/api/services/integration.d.ts.map +0 -1
- package/dist/api/services/operating-account.d.mts +0 -8
- package/dist/api/services/operating-account.d.ts +0 -8
- package/dist/api/services/operating-account.d.ts.map +0 -1
- package/dist/api/services/payments.d.mts +0 -14
- package/dist/api/services/payments.d.ts +0 -14
- package/dist/api/services/payments.d.ts.map +0 -1
- package/dist/api/services/transaction.d.mts +0 -8
- package/dist/api/services/transaction.d.ts +0 -8
- package/dist/api/services/transaction.d.ts.map +0 -1
- package/dist/api/services/uniswap-token-list-service.d.mts +0 -66
- package/dist/api/services/uniswap-token-list-service.d.ts +0 -66
- package/dist/api/services/uniswap-token-list-service.d.ts.map +0 -1
- package/dist/api/utils/index.d.mts +0 -2
- package/dist/api/utils/index.d.ts +0 -2
- package/dist/api/utils/index.d.ts.map +0 -1
- package/dist/api/utils/pagination.d.mts +0 -32
- package/dist/api/utils/pagination.d.ts +0 -32
- package/dist/api/utils/pagination.d.ts.map +0 -1
- package/dist/chains/config/all-chains.d.mts +0 -4243
- package/dist/chains/config/all-chains.d.ts +0 -4243
- package/dist/chains/config/all-chains.d.ts.map +0 -1
- package/dist/chains/config/custom-chains.d.mts +0 -49
- package/dist/chains/config/custom-chains.d.ts +0 -49
- package/dist/chains/config/custom-chains.d.ts.map +0 -1
- package/dist/chains/config/mainnet-chains.d.mts +0 -1063
- package/dist/chains/config/mainnet-chains.d.ts +0 -1063
- package/dist/chains/config/mainnet-chains.d.ts.map +0 -1
- package/dist/chains/config/supported-chains.d.mts +0 -2172
- package/dist/chains/config/supported-chains.d.ts +0 -2172
- package/dist/chains/config/supported-chains.d.ts.map +0 -1
- package/dist/chains/config/testnet-chains.d.mts +0 -1110
- package/dist/chains/config/testnet-chains.d.ts +0 -1110
- package/dist/chains/config/testnet-chains.d.ts.map +0 -1
- package/dist/chains/lambda/chain-mapping.d.mts +0 -55
- package/dist/chains/lambda/chain-mapping.d.ts +0 -55
- package/dist/chains/lambda/chain-mapping.d.ts.map +0 -1
- package/dist/chains/lambda/index.d.mts +0 -2
- package/dist/chains/lambda/index.d.ts +0 -2
- package/dist/chains/lambda/index.d.ts.map +0 -1
- package/dist/chains/tokens/chain-tokens.d.mts +0 -6
- package/dist/chains/tokens/chain-tokens.d.ts +0 -6
- package/dist/chains/tokens/chain-tokens.d.ts.map +0 -1
- package/dist/chains/tokens/token-addresses.d.mts +0 -8
- package/dist/chains/tokens/token-addresses.d.ts +0 -8
- package/dist/chains/tokens/token-addresses.d.ts.map +0 -1
- package/dist/chains/tokens/token-metadata.d.mts +0 -5
- package/dist/chains/tokens/token-metadata.d.ts +0 -5
- package/dist/chains/tokens/token-metadata.d.ts.map +0 -1
- package/dist/chains/types.d.mts +0 -23
- package/dist/chains/types.d.ts +0 -23
- package/dist/chains/types.d.ts.map +0 -1
- package/dist/chains/utils/filter-tokens.d.mts +0 -3
- package/dist/chains/utils/filter-tokens.d.ts +0 -3
- package/dist/chains/utils/filter-tokens.d.ts.map +0 -1
- package/dist/chains/utils/stablecoin.d.mts +0 -7
- package/dist/chains/utils/stablecoin.d.ts +0 -7
- package/dist/chains/utils/stablecoin.d.ts.map +0 -1
- package/dist/chains/utils/token-maps.d.mts +0 -10
- package/dist/chains/utils/token-maps.d.ts +0 -10
- package/dist/chains/utils/token-maps.d.ts.map +0 -1
- package/dist/env.d.mts +0 -17
- package/dist/env.d.ts +0 -17
- package/dist/env.d.ts.map +0 -1
- package/dist/formatters/index.d.ts.map +0 -1
- package/dist/formatters/index.js.map +0 -7
- package/dist/formatters/index.mjs.map +0 -7
- package/dist/helpers/address.d.mts +0 -7
- package/dist/helpers/address.d.ts +0 -7
- package/dist/helpers/address.d.ts.map +0 -1
- package/dist/helpers/blockchain.d.mts +0 -41
- package/dist/helpers/blockchain.d.ts +0 -41
- package/dist/helpers/blockchain.d.ts.map +0 -1
- package/dist/helpers/date.d.mts +0 -70
- package/dist/helpers/date.d.ts +0 -70
- package/dist/helpers/date.d.ts.map +0 -1
- package/dist/helpers/datetime.d.mts +0 -57
- package/dist/helpers/datetime.d.ts +0 -57
- package/dist/helpers/datetime.d.ts.map +0 -1
- package/dist/helpers/domain.d.mts +0 -2
- package/dist/helpers/domain.d.ts +0 -2
- package/dist/helpers/domain.d.ts.map +0 -1
- package/dist/helpers/index.js.map +0 -7
- package/dist/helpers/index.mjs.map +0 -7
- package/dist/helpers/intl.d.mts +0 -20
- package/dist/helpers/intl.d.ts +0 -20
- package/dist/helpers/intl.d.ts.map +0 -1
- package/dist/helpers/logger.d.mts +0 -26
- package/dist/helpers/logger.d.ts +0 -26
- package/dist/helpers/logger.d.ts.map +0 -1
- package/dist/helpers/mask-options.d.mts +0 -10
- package/dist/helpers/mask-options.d.ts +0 -10
- package/dist/helpers/mask-options.d.ts.map +0 -1
- package/dist/helpers/num-formatter.d.mts +0 -3
- package/dist/helpers/num-formatter.d.ts +0 -3
- package/dist/helpers/num-formatter.d.ts.map +0 -1
- package/dist/helpers/polling.d.mts +0 -39
- package/dist/helpers/polling.d.ts +0 -39
- package/dist/helpers/polling.d.ts.map +0 -1
- package/dist/helpers/random.d.mts +0 -10
- package/dist/helpers/random.d.ts +0 -10
- package/dist/helpers/random.d.ts.map +0 -1
- package/dist/helpers/sdk-loader.d.mts +0 -25
- package/dist/helpers/sdk-loader.d.ts +0 -25
- package/dist/helpers/sdk-loader.d.ts.map +0 -1
- package/dist/helpers/signatures.d.mts +0 -17
- package/dist/helpers/signatures.d.ts +0 -17
- package/dist/helpers/signatures.d.ts.map +0 -1
- package/dist/helpers/string.d.mts +0 -17
- package/dist/helpers/string.d.ts +0 -17
- package/dist/helpers/string.d.ts.map +0 -1
- package/dist/helpers/types.d.mts +0 -39
- package/dist/helpers/types.d.ts +0 -39
- package/dist/helpers/types.d.ts.map +0 -1
- package/dist/helpers/url.d.mts +0 -11
- package/dist/helpers/url.d.ts +0 -11
- package/dist/helpers/url.d.ts.map +0 -1
- package/dist/helpers/window.d.mts +0 -37
- package/dist/helpers/window.d.ts +0 -37
- package/dist/helpers/window.d.ts.map +0 -1
- package/dist/helpers/zod.d.mts +0 -51
- package/dist/helpers/zod.d.ts +0 -51
- package/dist/helpers/zod.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -7
- package/dist/index.mjs.map +0 -7
- package/dist/instructions/actions/index.d.mts +0 -5
- package/dist/instructions/actions/index.d.ts +0 -5
- package/dist/instructions/actions/index.d.ts.map +0 -1
- package/dist/instructions/actions/refuel/index.d.mts +0 -15
- package/dist/instructions/actions/refuel/index.d.ts +0 -15
- package/dist/instructions/actions/refuel/index.d.ts.map +0 -1
- package/dist/instructions/actions/swap/index.d.mts +0 -19
- package/dist/instructions/actions/swap/index.d.ts +0 -19
- package/dist/instructions/actions/swap/index.d.ts.map +0 -1
- package/dist/instructions/actions/sweep/index.d.mts +0 -16
- package/dist/instructions/actions/sweep/index.d.ts +0 -16
- package/dist/instructions/actions/sweep/index.d.ts.map +0 -1
- package/dist/instructions/actions/transfer/index.d.mts +0 -13
- package/dist/instructions/actions/transfer/index.d.ts +0 -13
- package/dist/instructions/actions/transfer/index.d.ts.map +0 -1
- package/dist/instructions/activate.d.mts +0 -84
- package/dist/instructions/activate.d.ts +0 -84
- package/dist/instructions/activate.d.ts.map +0 -1
- package/dist/instructions/build.d.mts +0 -146
- package/dist/instructions/build.d.ts +0 -146
- package/dist/instructions/build.d.ts.map +0 -1
- package/dist/instructions/constants.d.mts +0 -9
- package/dist/instructions/constants.d.ts +0 -9
- package/dist/instructions/constants.d.ts.map +0 -1
- package/dist/instructions/contracts/artifacts/abi/build-instruction-action-arguments-abi.d.mts +0 -609
- package/dist/instructions/contracts/artifacts/abi/build-instruction-action-arguments-abi.d.ts +0 -609
- package/dist/instructions/contracts/artifacts/abi/build-instruction-action-arguments-abi.d.ts.map +0 -1
- package/dist/instructions/types.d.mts +0 -289
- package/dist/instructions/types.d.ts +0 -289
- package/dist/instructions/types.d.ts.map +0 -1
- package/dist/payments/action-names.d.mts +0 -16
- package/dist/payments/action-names.d.ts +0 -16
- package/dist/payments/action-names.d.ts.map +0 -1
- package/dist/payments/actions/index.d.mts +0 -5
- package/dist/payments/actions/index.d.ts +0 -5
- package/dist/payments/actions/index.d.ts.map +0 -1
- package/dist/payments/actions/sweep-cctp.d.mts +0 -15
- package/dist/payments/actions/sweep-cctp.d.ts +0 -15
- package/dist/payments/actions/sweep-cctp.d.ts.map +0 -1
- package/dist/payments/actions/sweep-erc20.d.mts +0 -12
- package/dist/payments/actions/sweep-erc20.d.ts +0 -12
- package/dist/payments/actions/sweep-erc20.d.ts.map +0 -1
- package/dist/payments/actions/sweep-uniswap-v3.d.mts +0 -17
- package/dist/payments/actions/sweep-uniswap-v3.d.ts +0 -17
- package/dist/payments/actions/sweep-uniswap-v3.d.ts.map +0 -1
- package/dist/payments/actions/sweep.d.mts +0 -12
- package/dist/payments/actions/sweep.d.ts +0 -12
- package/dist/payments/actions/sweep.d.ts.map +0 -1
- package/dist/payments/build.d.mts +0 -28
- package/dist/payments/build.d.ts +0 -28
- package/dist/payments/build.d.ts.map +0 -1
- package/dist/payments/chain-token-config-builder.d.mts +0 -10
- package/dist/payments/chain-token-config-builder.d.ts +0 -10
- package/dist/payments/chain-token-config-builder.d.ts.map +0 -1
- package/dist/payments/comprehensive-payment-request.d.mts +0 -26
- package/dist/payments/comprehensive-payment-request.d.ts +0 -26
- package/dist/payments/comprehensive-payment-request.d.ts.map +0 -1
- package/dist/payments/config/cctp.d.mts +0 -14
- package/dist/payments/config/cctp.d.ts +0 -14
- package/dist/payments/config/cctp.d.ts.map +0 -1
- package/dist/payments/config/index.d.mts +0 -3
- package/dist/payments/config/index.d.ts +0 -3
- package/dist/payments/config/index.d.ts.map +0 -1
- package/dist/payments/config/tokens.d.mts +0 -14
- package/dist/payments/config/tokens.d.ts +0 -14
- package/dist/payments/config/tokens.d.ts.map +0 -1
- package/dist/payments/instruction-registry.d.mts +0 -19
- package/dist/payments/instruction-registry.d.ts +0 -19
- package/dist/payments/instruction-registry.d.ts.map +0 -1
- package/dist/payments/payment-metadata-builder.d.mts +0 -56
- package/dist/payments/payment-metadata-builder.d.ts +0 -56
- package/dist/payments/payment-metadata-builder.d.ts.map +0 -1
- package/dist/payments/payment-metadata.d.mts +0 -15
- package/dist/payments/payment-metadata.d.ts +0 -15
- package/dist/payments/payment-metadata.d.ts.map +0 -1
- package/dist/payments/payment-request-token-resolver.d.mts +0 -25
- package/dist/payments/payment-request-token-resolver.d.ts +0 -25
- package/dist/payments/payment-request-token-resolver.d.ts.map +0 -1
- package/dist/payments/types.d.mts +0 -40
- package/dist/payments/types.d.ts +0 -40
- package/dist/payments/types.d.ts.map +0 -1
- package/dist/payments/validation.d.mts +0 -19
- package/dist/payments/validation.d.ts +0 -19
- package/dist/payments/validation.d.ts.map +0 -1
- package/dist/schemas/account.d.mts +0 -9
- package/dist/schemas/account.d.ts +0 -9
- package/dist/schemas/account.d.ts.map +0 -1
- package/dist/schemas/brand.d.mts +0 -7
- package/dist/schemas/brand.d.ts +0 -7
- package/dist/schemas/brand.d.ts.map +0 -1
- package/dist/schemas/contact.d.mts +0 -18
- package/dist/schemas/contact.d.ts +0 -18
- package/dist/schemas/contact.d.ts.map +0 -1
- package/dist/schemas/index.d.ts.map +0 -1
- package/dist/schemas/instruction.d.mts +0 -248
- package/dist/schemas/instruction.d.ts +0 -248
- package/dist/schemas/instruction.d.ts.map +0 -1
- package/dist/schemas/misc.d.mts +0 -36
- package/dist/schemas/misc.d.ts +0 -36
- package/dist/schemas/misc.d.ts.map +0 -1
- package/dist/schemas/payment.d.mts +0 -64
- package/dist/schemas/payment.d.ts +0 -64
- package/dist/schemas/payment.d.ts.map +0 -1
- package/dist/schemas/token.d.mts +0 -17
- package/dist/schemas/token.d.ts +0 -17
- package/dist/schemas/token.d.ts.map +0 -1
- package/dist/schemas/transaction.d.mts +0 -65
- package/dist/schemas/transaction.d.ts +0 -65
- package/dist/schemas/transaction.d.ts.map +0 -1
- package/dist/schemas/user.d.mts +0 -24
- package/dist/schemas/user.d.ts +0 -24
- package/dist/schemas/user.d.ts.map +0 -1
- package/dist/server/client.d.mts +0 -3
- package/dist/server/client.d.ts +0 -3
- package/dist/server/client.d.ts.map +0 -1
- package/dist/server/routes/account.d.mts +0 -4
- package/dist/server/routes/account.d.ts +0 -4
- package/dist/server/routes/account.d.ts.map +0 -1
- package/dist/server/routes/auth.d.mts +0 -28
- package/dist/server/routes/auth.d.ts +0 -28
- package/dist/server/routes/auth.d.ts.map +0 -1
- package/dist/server/routes/bridge.d.mts +0 -254
- package/dist/server/routes/bridge.d.ts +0 -254
- package/dist/server/routes/bridge.d.ts.map +0 -1
- package/dist/server/routes/config.d.mts +0 -3
- package/dist/server/routes/config.d.ts +0 -3
- package/dist/server/routes/config.d.ts.map +0 -1
- package/dist/server/routes/index.d.mts +0 -8
- package/dist/server/routes/index.d.ts +0 -8
- package/dist/server/routes/index.d.ts.map +0 -1
- package/dist/server/routes/instruction.d.mts +0 -4
- package/dist/server/routes/instruction.d.ts +0 -4
- package/dist/server/routes/instruction.d.ts.map +0 -1
- package/dist/server/routes/integration.d.mts +0 -4
- package/dist/server/routes/integration.d.ts +0 -4
- package/dist/server/routes/integration.d.ts.map +0 -1
- package/dist/server/routes/payments.d.mts +0 -5
- package/dist/server/routes/payments.d.ts +0 -5
- package/dist/server/routes/payments.d.ts.map +0 -1
- package/dist/server/routes/verify.d.mts +0 -3
- package/dist/server/routes/verify.d.ts +0 -3
- package/dist/server/routes/verify.d.ts.map +0 -1
- package/dist/wallet/wagmi/config.d.mts +0 -18
- package/dist/wallet/wagmi/config.d.ts +0 -18
- package/dist/wallet/wagmi/config.d.ts.map +0 -1
package/dist/payments/index.mjs
CHANGED
|
@@ -1,1285 +1,643 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { t as _defineProperty } from "../defineProperty-DzhmunJg.mjs";
|
|
2
|
+
import { P as isNumber, b as isValidDate } from "../date-gBac-Om9.mjs";
|
|
3
|
+
import { InstructionAction } from "@otim/utils/schemas";
|
|
4
|
+
import { DEFAULT_ADDRESS } from "@otim/utils/helpers";
|
|
5
|
+
import { arbitrum, base, baseSepolia, mainnet, optimism, sepolia } from "viem/chains";
|
|
6
|
+
import { isStablecoin } from "@otim/utils/chains";
|
|
7
|
+
import { eip712TypesMap } from "@otim/utils/instructions";
|
|
8
|
+
|
|
9
|
+
//#region src/payments/types.ts
|
|
10
|
+
const PaymentAction = {
|
|
11
|
+
Sweep: "Sweep",
|
|
12
|
+
SweepCCTP: "SweepCCTP",
|
|
13
|
+
SweepERC20: "SweepERC20",
|
|
14
|
+
SweepUniswapV3: "SweepUniswapV3",
|
|
15
|
+
SweepDepositERC4626: "SweepDepositERC4626"
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Orchestration type discriminant.
|
|
19
|
+
* Must match the Rust OrchestrationMetadata enum variants.
|
|
20
|
+
*/
|
|
21
|
+
const OrchestrationType = {
|
|
22
|
+
PaymentRequest: "PaymentRequest",
|
|
23
|
+
AutoEarn: "AutoEarn"
|
|
11
24
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Uniswap V3 fee tiers. Used to specify the fee tier for a Uniswap V3 swap.
|
|
27
|
+
* @see https://docs.uniswap.org/concepts/protocol/fees
|
|
28
|
+
*/
|
|
29
|
+
const UniswapV3FeeTier = {
|
|
30
|
+
Lowest: "100",
|
|
31
|
+
Low: "500",
|
|
32
|
+
Medium: "3000",
|
|
33
|
+
High: "10000"
|
|
17
34
|
};
|
|
18
35
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
arbitrum.id,
|
|
34
|
-
base.id,
|
|
35
|
-
sepolia.id,
|
|
36
|
-
optimismSepolia.id,
|
|
37
|
-
arbitrumSepolia.id,
|
|
38
|
-
baseSepolia.id
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/payments/config/cctp.ts
|
|
38
|
+
/**
|
|
39
|
+
* List of chains that support CCTP
|
|
40
|
+
* Only includes chains that have confirmed CCTP support from Circle
|
|
41
|
+
* @see https://developers.circle.com/stablecoins/docs/supported-domains
|
|
42
|
+
*/
|
|
43
|
+
const cctpSupportedChains = new Set([
|
|
44
|
+
mainnet.id,
|
|
45
|
+
optimism.id,
|
|
46
|
+
arbitrum.id,
|
|
47
|
+
base.id,
|
|
48
|
+
sepolia.id,
|
|
49
|
+
baseSepolia.id
|
|
39
50
|
]);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
/**
|
|
52
|
+
* CCTP Domain Mapping - Maps chain IDs to their Circle CCTP domain identifiers
|
|
53
|
+
* Source: https://developers.circle.com/stablecoins/docs/supported-domains
|
|
54
|
+
*
|
|
55
|
+
* Domain IDs are used by Circle's Cross-Chain Transfer Protocol (CCTP) to
|
|
56
|
+
* identify destination chains when burning and minting USDC across different
|
|
57
|
+
* networks.
|
|
58
|
+
*/
|
|
59
|
+
const cctpDomainMapping = {
|
|
60
|
+
[mainnet.id]: 0,
|
|
61
|
+
[optimism.id]: 2,
|
|
62
|
+
[arbitrum.id]: 3,
|
|
63
|
+
[base.id]: 6,
|
|
64
|
+
[sepolia.id]: 0,
|
|
65
|
+
[baseSepolia.id]: 6
|
|
49
66
|
};
|
|
50
67
|
var DefaultCCTPConfig = class {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
62
|
-
var defaultCCTPConfig = new DefaultCCTPConfig();
|
|
63
|
-
|
|
64
|
-
// src/helpers/blockchain.ts
|
|
65
|
-
import { isAddressEqual } from "viem";
|
|
66
|
-
var DEFAULT_ADDRESS = "0x0000000000000000000000000000000000000000";
|
|
67
|
-
|
|
68
|
-
// src/helpers/date.ts
|
|
69
|
-
import z from "zod";
|
|
70
|
-
var iso8601DateSchema = z.string().regex(
|
|
71
|
-
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/,
|
|
72
|
-
"Must be a valid ISO 8601 date format (e.g., 2024-12-31T23:59:59.000Z)"
|
|
73
|
-
);
|
|
74
|
-
var TimeUnit = {
|
|
75
|
-
Day: "day",
|
|
76
|
-
Month: "month",
|
|
77
|
-
Year: "year"
|
|
68
|
+
constructor() {
|
|
69
|
+
_defineProperty(this, "supportedChainIds", void 0);
|
|
70
|
+
this.supportedChainIds = cctpSupportedChains;
|
|
71
|
+
}
|
|
72
|
+
isSupported(chainId) {
|
|
73
|
+
return this.supportedChainIds.has(chainId);
|
|
74
|
+
}
|
|
75
|
+
getDomain(chainId) {
|
|
76
|
+
return cctpDomainMapping[chainId] ?? null;
|
|
77
|
+
}
|
|
78
78
|
};
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
return date.toString() === "Invalid Date";
|
|
95
|
-
};
|
|
96
|
-
var isValidDate = (date) => {
|
|
97
|
-
return !isDateInvalid(date) && !isNaN(date.getTime());
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
// src/helpers/types.ts
|
|
101
|
-
var isNumber = (value) => typeof value === "number";
|
|
102
|
-
|
|
103
|
-
// src/chains/utils/stablecoin.ts
|
|
104
|
-
var stablecoinSymbols = ["USDC", "USDT"];
|
|
105
|
-
function isStablecoin(symbol) {
|
|
106
|
-
if (typeof symbol === "string") {
|
|
107
|
-
return stablecoinSymbols.includes(
|
|
108
|
-
symbol
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
return symbol.every(
|
|
112
|
-
(s) => stablecoinSymbols.includes(s)
|
|
113
|
-
);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// src/payments/config/tokens.ts
|
|
79
|
+
const defaultCCTPConfig = new DefaultCCTPConfig();
|
|
80
|
+
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/payments/config/tokens.ts
|
|
83
|
+
/**
|
|
84
|
+
* Determines the recommended Uniswap V3 fee tier for a token pair
|
|
85
|
+
*
|
|
86
|
+
* Stable pairs (USDC/USDT swaps) use the Low fee tier (0.05%) since price
|
|
87
|
+
* volatility is minimal. All other pairs use the Medium fee tier (0.3%) to
|
|
88
|
+
* account for higher price volatility
|
|
89
|
+
*
|
|
90
|
+
* @param tokenIn - Symbol of the input token (e.g., "USDC", "USDT")
|
|
91
|
+
* @param tokenOut - Symbol of the output token (e.g., "USDC", "USDT")
|
|
92
|
+
* @returns The recommended Uniswap V3 fee tier for the swap
|
|
93
|
+
*/
|
|
117
94
|
function getRecommendedFeeTier(tokenIn, tokenOut) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
return UniswapV3FeeTier.Medium;
|
|
95
|
+
if (isStablecoin([tokenIn, tokenOut])) return UniswapV3FeeTier.Low;
|
|
96
|
+
return UniswapV3FeeTier.Medium;
|
|
122
97
|
}
|
|
123
98
|
|
|
124
|
-
|
|
125
|
-
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region src/payments/build.ts
|
|
101
|
+
const DEFAULT_SET_EPHEMERAL_TARGET = true;
|
|
126
102
|
function createPaymentRequestBuildPayload(params) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
payerAddress,
|
|
136
|
-
completionInstructions: completionInstructions.map(processInstruction),
|
|
137
|
-
instructions: instructions.map(processInstruction),
|
|
138
|
-
metadata,
|
|
139
|
-
maxRuns
|
|
140
|
-
};
|
|
103
|
+
const { payerAddress = null, completionInstructions, instructions = [], metadata = {}, maxRuns } = params;
|
|
104
|
+
return {
|
|
105
|
+
payerAddress,
|
|
106
|
+
completionInstructions: completionInstructions.map(processInstruction),
|
|
107
|
+
instructions: instructions.map(processInstruction),
|
|
108
|
+
metadata,
|
|
109
|
+
maxRuns
|
|
110
|
+
};
|
|
141
111
|
}
|
|
142
112
|
function processInstruction(spec) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
113
|
+
return {
|
|
114
|
+
chainId: spec.chainId,
|
|
115
|
+
salt: spec.salt ?? generateRandomSalt(),
|
|
116
|
+
maxExecutions: spec.maxExecutions,
|
|
117
|
+
actionArguments: spec.actionArguments,
|
|
118
|
+
setEphemeralTarget: spec.setEphemeralTarget ?? DEFAULT_SET_EPHEMERAL_TARGET
|
|
119
|
+
};
|
|
150
120
|
}
|
|
151
121
|
function generateRandomSalt() {
|
|
152
|
-
|
|
122
|
+
return Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);
|
|
153
123
|
}
|
|
154
124
|
function createDefaultFee(executionFee = 0, maxBaseFeePerGas = "0x0", maxPriorityFeePerGas = "0x0", token = DEFAULT_ADDRESS) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
125
|
+
return {
|
|
126
|
+
token,
|
|
127
|
+
executionFee,
|
|
128
|
+
maxBaseFeePerGas,
|
|
129
|
+
maxPriorityFeePerGas
|
|
130
|
+
};
|
|
161
131
|
}
|
|
162
132
|
function createFeeWithToken(token, maxPriorityFeePerGas) {
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
function resolveCCTPDomain(destinationChainId, cctpConfig) {
|
|
192
|
-
const domain = cctpConfig.getDomain(destinationChainId);
|
|
193
|
-
if (domain === null) {
|
|
194
|
-
throw new Error(`Chain ${destinationChainId} does not support CCTP`);
|
|
195
|
-
}
|
|
196
|
-
return domain;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// src/payments/actions/sweep-erc20.ts
|
|
200
|
-
function createSweepERC20ActionArguments(payload) {
|
|
201
|
-
return {
|
|
202
|
-
[PaymentAction.SweepERC20]: {
|
|
203
|
-
token: payload.token,
|
|
204
|
-
target: payload.target,
|
|
205
|
-
threshold: payload.threshold,
|
|
206
|
-
endBalance: payload.endBalance,
|
|
207
|
-
fee: payload.fee
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
// src/payments/actions/sweep-uniswap-v3.ts
|
|
213
|
-
function createSweepUniswapV3ActionArguments(payload) {
|
|
214
|
-
return {
|
|
215
|
-
[PaymentAction.SweepUniswapV3]: {
|
|
216
|
-
recipient: payload.recipient,
|
|
217
|
-
tokenIn: payload.tokenIn,
|
|
218
|
-
tokenOut: payload.tokenOut,
|
|
219
|
-
feeTier: payload.feeTier,
|
|
220
|
-
threshold: payload.threshold,
|
|
221
|
-
endBalance: payload.endBalance,
|
|
222
|
-
floorAmountOut: payload.floorAmountOut,
|
|
223
|
-
meanPriceLookBack: payload.meanPriceLookBack,
|
|
224
|
-
maxPriceDeviationBps: payload.maxPriceDeviationBps,
|
|
225
|
-
fee: payload.fee
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// src/payments/comprehensive-payment-request.ts
|
|
231
|
-
var USDC_SYMBOL = "USDC";
|
|
232
|
-
var USDT_SYMBOL = "USDT";
|
|
233
|
-
var MINIMUM_THRESHOLD = 1n;
|
|
234
|
-
var UNISWAP_MEAN_PRICE_LOOKBACK = 600;
|
|
235
|
-
var ZERO_BALANCE = 0n;
|
|
236
|
-
var USDT_MAX_PRICE_DEVIATION_BPS = 200;
|
|
237
|
-
var DEFAULT_MAX_PRICE_DEVIATION_BPS = 500;
|
|
238
|
-
var STABLE_SLIPPAGE_BPS = 1;
|
|
239
|
-
var NON_STABLE_SLIPPAGE_BPS = 50;
|
|
240
|
-
function createComprehensivePaymentRequest(params) {
|
|
241
|
-
const {
|
|
242
|
-
settlementChainId,
|
|
243
|
-
recipient,
|
|
244
|
-
amount,
|
|
245
|
-
ephemeralWalletAddress,
|
|
246
|
-
chainTokenConfigs,
|
|
247
|
-
payerAddress,
|
|
248
|
-
metadata,
|
|
249
|
-
feeToken,
|
|
250
|
-
cctpConfig = defaultCCTPConfig,
|
|
251
|
-
maxRuns = 1
|
|
252
|
-
} = params;
|
|
253
|
-
validateSettlementChainSupport(settlementChainId, cctpConfig);
|
|
254
|
-
const settlementConfig = findChainConfig(
|
|
255
|
-
settlementChainId,
|
|
256
|
-
chainTokenConfigs
|
|
257
|
-
);
|
|
258
|
-
const settlementUSDC = findSettlementUSDC(settlementConfig);
|
|
259
|
-
const threshold = calculateThreshold(amount, settlementUSDC.decimals);
|
|
260
|
-
const instructionFee = createFeeWithToken(feeToken);
|
|
261
|
-
const completionInstructions = createCompletionInstructions(
|
|
262
|
-
settlementChainId,
|
|
263
|
-
settlementUSDC.address,
|
|
264
|
-
recipient,
|
|
265
|
-
threshold,
|
|
266
|
-
instructionFee,
|
|
267
|
-
chainTokenConfigs
|
|
268
|
-
);
|
|
269
|
-
const instructions = createCrossChainInstructions(
|
|
270
|
-
chainTokenConfigs,
|
|
271
|
-
settlementChainId,
|
|
272
|
-
ephemeralWalletAddress,
|
|
273
|
-
instructionFee,
|
|
274
|
-
cctpConfig
|
|
275
|
-
);
|
|
276
|
-
return createPaymentRequestBuildPayload({
|
|
277
|
-
payerAddress,
|
|
278
|
-
completionInstructions,
|
|
279
|
-
instructions,
|
|
280
|
-
metadata,
|
|
281
|
-
maxRuns
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
function validateSettlementChainSupport(chainId, cctpConfig) {
|
|
285
|
-
if (!cctpConfig.isSupported(chainId)) {
|
|
286
|
-
throw new Error(`Settlement chain ${chainId} does not support CCTP`);
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
function findChainConfig(chainId, configs) {
|
|
290
|
-
const config = configs.find((c) => c.chainId === chainId);
|
|
291
|
-
if (!config) {
|
|
292
|
-
throw new Error(
|
|
293
|
-
`Settlement chain ${chainId} not found in chain token configs`
|
|
294
|
-
);
|
|
295
|
-
}
|
|
296
|
-
return config;
|
|
297
|
-
}
|
|
298
|
-
function findSettlementUSDC(settlementConfig) {
|
|
299
|
-
const usdc = settlementConfig.tokens.find(
|
|
300
|
-
(token) => token.symbol.toUpperCase() === USDC_SYMBOL
|
|
301
|
-
);
|
|
302
|
-
if (!usdc) {
|
|
303
|
-
throw new Error(
|
|
304
|
-
`Settlement chain ${settlementConfig.chainId} does not have USDC configured`
|
|
305
|
-
);
|
|
306
|
-
}
|
|
307
|
-
return {
|
|
308
|
-
address: usdc.address,
|
|
309
|
-
decimals: usdc.decimals
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
function calculateThreshold(amount, decimals) {
|
|
313
|
-
return toHex(parseUnits(amount, decimals));
|
|
314
|
-
}
|
|
315
|
-
function createCompletionInstructions(settlementChainId, settlementUSDCAddress, recipient, threshold, instructionFee, chainTokenConfigs) {
|
|
316
|
-
const instructions = [];
|
|
317
|
-
instructions.push(
|
|
318
|
-
createSettlementSweepInstruction(
|
|
319
|
-
settlementChainId,
|
|
320
|
-
settlementUSDCAddress,
|
|
321
|
-
recipient,
|
|
322
|
-
threshold,
|
|
323
|
-
instructionFee
|
|
324
|
-
)
|
|
325
|
-
);
|
|
326
|
-
const swapInstructions = createTokenSwapInstructions(
|
|
327
|
-
settlementChainId,
|
|
328
|
-
chainTokenConfigs,
|
|
329
|
-
recipient,
|
|
330
|
-
threshold,
|
|
331
|
-
instructionFee
|
|
332
|
-
);
|
|
333
|
-
instructions.push(...swapInstructions);
|
|
334
|
-
return instructions;
|
|
335
|
-
}
|
|
336
|
-
function createSettlementSweepInstruction(chainId, tokenAddress, recipient, threshold, fee) {
|
|
337
|
-
return {
|
|
338
|
-
chainId,
|
|
339
|
-
maxExecutions: 0,
|
|
340
|
-
actionArguments: createSweepERC20ActionArguments({
|
|
341
|
-
chainId,
|
|
342
|
-
maxExecutions: 0,
|
|
343
|
-
token: tokenAddress,
|
|
344
|
-
target: recipient,
|
|
345
|
-
threshold,
|
|
346
|
-
endBalance: toHex(ZERO_BALANCE),
|
|
347
|
-
fee
|
|
348
|
-
}),
|
|
349
|
-
setEphemeralTarget: false
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
function createTokenSwapInstructions(settlementChainId, chainTokenConfigs, settlementRecipient, threshold, instructionFee) {
|
|
353
|
-
const swapInstructions = [];
|
|
354
|
-
const settlementConfig = chainTokenConfigs.find(
|
|
355
|
-
(c) => c.chainId === settlementChainId
|
|
356
|
-
);
|
|
357
|
-
if (!settlementConfig) {
|
|
358
|
-
return swapInstructions;
|
|
359
|
-
}
|
|
360
|
-
const settlementUSDC = settlementConfig.tokens.find(
|
|
361
|
-
(t) => t.symbol.toUpperCase() === USDC_SYMBOL
|
|
362
|
-
);
|
|
363
|
-
if (!settlementUSDC) {
|
|
364
|
-
return swapInstructions;
|
|
365
|
-
}
|
|
366
|
-
for (const sourceToken of settlementConfig.tokens) {
|
|
367
|
-
if (sourceToken.symbol.toUpperCase() === USDC_SYMBOL) {
|
|
368
|
-
continue;
|
|
369
|
-
}
|
|
370
|
-
const swapInstruction = createSwapInstruction(
|
|
371
|
-
settlementChainId,
|
|
372
|
-
sourceToken,
|
|
373
|
-
settlementUSDC,
|
|
374
|
-
settlementRecipient,
|
|
375
|
-
threshold,
|
|
376
|
-
instructionFee
|
|
377
|
-
);
|
|
378
|
-
swapInstructions.push(swapInstruction);
|
|
379
|
-
}
|
|
380
|
-
return swapInstructions;
|
|
381
|
-
}
|
|
382
|
-
function createSwapInstruction(chainId, tokenIn, tokenOut, settlementRecipient, threshold, fee) {
|
|
383
|
-
const { instruction } = createSwapInstructionWithFloor(
|
|
384
|
-
chainId,
|
|
385
|
-
tokenIn,
|
|
386
|
-
tokenOut,
|
|
387
|
-
settlementRecipient,
|
|
388
|
-
threshold,
|
|
389
|
-
fee,
|
|
390
|
-
false
|
|
391
|
-
);
|
|
392
|
-
return instruction;
|
|
393
|
-
}
|
|
394
|
-
function createSwapInstructionWithFloor(chainId, tokenIn, tokenOut, recipient, threshold, fee, setEphemeralTarget) {
|
|
395
|
-
const feeTier = getRecommendedFeeTier(
|
|
396
|
-
tokenIn.symbol.toUpperCase(),
|
|
397
|
-
USDC_SYMBOL
|
|
398
|
-
);
|
|
399
|
-
const isStableToStableSwap = isStablecoin([
|
|
400
|
-
tokenIn.symbol.toUpperCase(),
|
|
401
|
-
tokenOut.symbol.toUpperCase()
|
|
402
|
-
]);
|
|
403
|
-
const slippageBps = isStableToStableSwap ? STABLE_SLIPPAGE_BPS : NON_STABLE_SLIPPAGE_BPS;
|
|
404
|
-
const maxPriceDeviationBps = tokenIn.symbol.toUpperCase() === USDT_SYMBOL ? USDT_MAX_PRICE_DEVIATION_BPS : DEFAULT_MAX_PRICE_DEVIATION_BPS;
|
|
405
|
-
const baseAmount = BigInt(threshold);
|
|
406
|
-
const afterFeeAmount = baseAmount * BigInt(1e6 - Number(feeTier)) / 1000000n;
|
|
407
|
-
const floorAmountOut = afterFeeAmount * BigInt(1e4 - slippageBps) / 10000n;
|
|
408
|
-
const instruction = {
|
|
409
|
-
chainId,
|
|
410
|
-
maxExecutions: 0,
|
|
411
|
-
actionArguments: createSweepUniswapV3ActionArguments({
|
|
412
|
-
chainId,
|
|
413
|
-
maxExecutions: 0,
|
|
414
|
-
recipient,
|
|
415
|
-
tokenIn: tokenIn.address,
|
|
416
|
-
tokenOut: tokenOut.address,
|
|
417
|
-
feeTier,
|
|
418
|
-
threshold,
|
|
419
|
-
endBalance: toHex(ZERO_BALANCE),
|
|
420
|
-
floorAmountOut: toHex(floorAmountOut),
|
|
421
|
-
meanPriceLookBack: UNISWAP_MEAN_PRICE_LOOKBACK,
|
|
422
|
-
maxPriceDeviationBps,
|
|
423
|
-
fee
|
|
424
|
-
}),
|
|
425
|
-
setEphemeralTarget
|
|
426
|
-
};
|
|
427
|
-
return { instruction, floorAmountOut };
|
|
428
|
-
}
|
|
429
|
-
function createCrossChainSwapInstructions(chainConfig, chainUSDC, ephemeralWalletAddress, instructionFee) {
|
|
430
|
-
const swapInstructions = [];
|
|
431
|
-
for (const sourceToken of chainConfig.tokens) {
|
|
432
|
-
if (sourceToken.symbol.toUpperCase() === USDC_SYMBOL) {
|
|
433
|
-
continue;
|
|
434
|
-
}
|
|
435
|
-
const feeTier = getRecommendedFeeTier(
|
|
436
|
-
sourceToken.symbol.toUpperCase(),
|
|
437
|
-
USDC_SYMBOL
|
|
438
|
-
);
|
|
439
|
-
const maxPriceDeviationBps = sourceToken.symbol.toUpperCase() === USDT_SYMBOL ? USDT_MAX_PRICE_DEVIATION_BPS : DEFAULT_MAX_PRICE_DEVIATION_BPS;
|
|
440
|
-
const instruction = {
|
|
441
|
-
chainId: chainConfig.chainId,
|
|
442
|
-
maxExecutions: 0,
|
|
443
|
-
actionArguments: createSweepUniswapV3ActionArguments({
|
|
444
|
-
chainId: chainConfig.chainId,
|
|
445
|
-
maxExecutions: 0,
|
|
446
|
-
recipient: ephemeralWalletAddress,
|
|
447
|
-
tokenIn: sourceToken.address,
|
|
448
|
-
tokenOut: chainUSDC.address,
|
|
449
|
-
feeTier,
|
|
450
|
-
threshold: toHex(MINIMUM_THRESHOLD),
|
|
451
|
-
endBalance: toHex(ZERO_BALANCE),
|
|
452
|
-
floorAmountOut: toHex(0n),
|
|
453
|
-
meanPriceLookBack: UNISWAP_MEAN_PRICE_LOOKBACK,
|
|
454
|
-
maxPriceDeviationBps,
|
|
455
|
-
fee: instructionFee
|
|
456
|
-
}),
|
|
457
|
-
setEphemeralTarget: true
|
|
458
|
-
};
|
|
459
|
-
swapInstructions.push(instruction);
|
|
460
|
-
}
|
|
461
|
-
return swapInstructions;
|
|
462
|
-
}
|
|
463
|
-
function createCrossChainInstructions(chainTokenConfigs, settlementChainId, ephemeralWalletAddress, instructionFee, cctpConfig) {
|
|
464
|
-
const instructions = [];
|
|
465
|
-
for (const chainConfig of chainTokenConfigs) {
|
|
466
|
-
if (chainConfig.chainId === settlementChainId) {
|
|
467
|
-
continue;
|
|
468
|
-
}
|
|
469
|
-
const chainUSDC = chainConfig.tokens.find(
|
|
470
|
-
(token) => token.symbol.toUpperCase() === USDC_SYMBOL
|
|
471
|
-
);
|
|
472
|
-
if (!chainUSDC || !cctpConfig.isSupported(chainConfig.chainId)) {
|
|
473
|
-
continue;
|
|
474
|
-
}
|
|
475
|
-
const swapInstructions = createCrossChainSwapInstructions(
|
|
476
|
-
chainConfig,
|
|
477
|
-
chainUSDC,
|
|
478
|
-
ephemeralWalletAddress,
|
|
479
|
-
instructionFee
|
|
480
|
-
);
|
|
481
|
-
instructions.push(...swapInstructions);
|
|
482
|
-
const bridgeInstruction = createCCTPBridgeInstruction(
|
|
483
|
-
chainConfig.chainId,
|
|
484
|
-
chainUSDC.address,
|
|
485
|
-
settlementChainId,
|
|
486
|
-
ephemeralWalletAddress,
|
|
487
|
-
toHex(MINIMUM_THRESHOLD),
|
|
488
|
-
instructionFee,
|
|
489
|
-
cctpConfig
|
|
490
|
-
);
|
|
491
|
-
instructions.push(bridgeInstruction);
|
|
492
|
-
}
|
|
493
|
-
return instructions;
|
|
494
|
-
}
|
|
495
|
-
function createCCTPBridgeInstruction(sourceChainId, tokenAddress, destinationChainId, ephemeralWalletAddress, threshold, fee, cctpConfig) {
|
|
496
|
-
return {
|
|
497
|
-
chainId: sourceChainId,
|
|
498
|
-
maxExecutions: 0,
|
|
499
|
-
actionArguments: createSweepCCTPActionArguments({
|
|
500
|
-
chainId: sourceChainId,
|
|
501
|
-
maxExecutions: 0,
|
|
502
|
-
token: tokenAddress,
|
|
503
|
-
destinationChainId,
|
|
504
|
-
destinationMintRecipient: ephemeralWalletAddress,
|
|
505
|
-
threshold,
|
|
506
|
-
endBalance: toHex(ZERO_BALANCE),
|
|
507
|
-
fee,
|
|
508
|
-
cctpConfig
|
|
509
|
-
}),
|
|
510
|
-
setEphemeralTarget: true
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
// src/payments/actions/sweep.ts
|
|
515
|
-
import { toHex as toHex2 } from "viem";
|
|
516
|
-
function createSweepActionArguments(payload) {
|
|
517
|
-
return {
|
|
518
|
-
[PaymentAction.Sweep]: {
|
|
519
|
-
target: payload.target,
|
|
520
|
-
threshold: payload.threshold,
|
|
521
|
-
endBalance: payload.endBalance,
|
|
522
|
-
gasLimit: toHex2(payload.gasLimit),
|
|
523
|
-
fee: payload.fee
|
|
524
|
-
}
|
|
525
|
-
};
|
|
526
|
-
}
|
|
527
|
-
|
|
528
|
-
// src/instructions/contracts/schemas/eip-712/actions/deactivate-instruction.json
|
|
529
|
-
var deactivate_instruction_default = {
|
|
530
|
-
types: {
|
|
531
|
-
Instruction: [
|
|
532
|
-
{ name: "salt", type: "uint256" },
|
|
533
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
534
|
-
{ name: "action", type: "address" },
|
|
535
|
-
{ name: "deactivateInstruction", type: "DeactivateInstruction" }
|
|
536
|
-
],
|
|
537
|
-
DeactivateInstruction: [
|
|
538
|
-
{ name: "instructionId", type: "bytes32" },
|
|
539
|
-
{ name: "fee", type: "Fee" }
|
|
540
|
-
],
|
|
541
|
-
Fee: [
|
|
542
|
-
{ name: "token", type: "address" },
|
|
543
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
544
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
545
|
-
{ name: "executionFee", type: "uint256" }
|
|
546
|
-
]
|
|
547
|
-
}
|
|
548
|
-
};
|
|
549
|
-
|
|
550
|
-
// src/instructions/contracts/schemas/eip-712/actions/refuel-erc20.json
|
|
551
|
-
var refuel_erc20_default = {
|
|
552
|
-
types: {
|
|
553
|
-
Instruction: [
|
|
554
|
-
{ name: "salt", type: "uint256" },
|
|
555
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
556
|
-
{ name: "action", type: "address" },
|
|
557
|
-
{ name: "refuelERC20", type: "RefuelERC20" }
|
|
558
|
-
],
|
|
559
|
-
RefuelERC20: [
|
|
560
|
-
{ name: "token", type: "address" },
|
|
561
|
-
{ name: "target", type: "address" },
|
|
562
|
-
{ name: "threshold", type: "uint256" },
|
|
563
|
-
{ name: "endBalance", type: "uint256" },
|
|
564
|
-
{ name: "fee", type: "Fee" }
|
|
565
|
-
],
|
|
566
|
-
Fee: [
|
|
567
|
-
{ name: "token", type: "address" },
|
|
568
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
569
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
570
|
-
{ name: "executionFee", type: "uint256" }
|
|
571
|
-
]
|
|
572
|
-
}
|
|
573
|
-
};
|
|
574
|
-
|
|
575
|
-
// src/instructions/contracts/schemas/eip-712/actions/refuel.json
|
|
576
|
-
var refuel_default = {
|
|
577
|
-
types: {
|
|
578
|
-
Instruction: [
|
|
579
|
-
{ name: "salt", type: "uint256" },
|
|
580
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
581
|
-
{ name: "action", type: "address" },
|
|
582
|
-
{ name: "refuel", type: "Refuel" }
|
|
583
|
-
],
|
|
584
|
-
Refuel: [
|
|
585
|
-
{ name: "target", type: "address" },
|
|
586
|
-
{ name: "threshold", type: "uint256" },
|
|
587
|
-
{ name: "endBalance", type: "uint256" },
|
|
588
|
-
{ name: "gasLimit", type: "uint256" },
|
|
589
|
-
{ name: "fee", type: "Fee" }
|
|
590
|
-
],
|
|
591
|
-
Fee: [
|
|
592
|
-
{ name: "token", type: "address" },
|
|
593
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
594
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
595
|
-
{ name: "executionFee", type: "uint256" }
|
|
596
|
-
]
|
|
597
|
-
}
|
|
598
|
-
};
|
|
599
|
-
|
|
600
|
-
// src/instructions/contracts/schemas/eip-712/actions/sweep-cctp.json
|
|
601
|
-
var sweep_cctp_default = {
|
|
602
|
-
types: {
|
|
603
|
-
Instruction: [
|
|
604
|
-
{ name: "salt", type: "uint256" },
|
|
605
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
606
|
-
{ name: "action", type: "address" },
|
|
607
|
-
{ name: "sweepCCTP", type: "SweepCCTP" }
|
|
608
|
-
],
|
|
609
|
-
SweepCCTP: [
|
|
610
|
-
{ name: "token", type: "address" },
|
|
611
|
-
{ name: "destinationDomain", type: "uint32" },
|
|
612
|
-
{ name: "destinationMintRecipient", type: "bytes32" },
|
|
613
|
-
{ name: "threshold", type: "uint256" },
|
|
614
|
-
{ name: "endBalance", type: "uint256" },
|
|
615
|
-
{ name: "fee", type: "Fee" }
|
|
616
|
-
],
|
|
617
|
-
Fee: [
|
|
618
|
-
{ name: "token", type: "address" },
|
|
619
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
620
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
621
|
-
{ name: "executionFee", type: "uint256" }
|
|
622
|
-
]
|
|
623
|
-
}
|
|
624
|
-
};
|
|
625
|
-
|
|
626
|
-
// src/instructions/contracts/schemas/eip-712/actions/sweep-deposit-account-erc20.json
|
|
627
|
-
var sweep_deposit_account_erc20_default = {
|
|
628
|
-
types: {
|
|
629
|
-
Instruction: [
|
|
630
|
-
{ name: "salt", type: "uint256" },
|
|
631
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
632
|
-
{ name: "action", type: "address" },
|
|
633
|
-
{ name: "sweepDepositAccountERC20", type: "SweepDepositAccountERC20" }
|
|
634
|
-
],
|
|
635
|
-
SweepDepositAccountERC20: [
|
|
636
|
-
{ name: "token", type: "address" },
|
|
637
|
-
{ name: "depositor", type: "address" },
|
|
638
|
-
{ name: "recipient", type: "address" },
|
|
639
|
-
{ name: "threshold", type: "uint256" },
|
|
640
|
-
{ name: "fee", type: "Fee" }
|
|
641
|
-
],
|
|
642
|
-
Fee: [
|
|
643
|
-
{ name: "token", type: "address" },
|
|
644
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
645
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
646
|
-
{ name: "executionFee", type: "uint256" }
|
|
647
|
-
]
|
|
648
|
-
}
|
|
649
|
-
};
|
|
650
|
-
|
|
651
|
-
// src/instructions/contracts/schemas/eip-712/actions/sweep-deposit-account.json
|
|
652
|
-
var sweep_deposit_account_default = {
|
|
653
|
-
types: {
|
|
654
|
-
Instruction: [
|
|
655
|
-
{ name: "salt", type: "uint256" },
|
|
656
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
657
|
-
{ name: "action", type: "address" },
|
|
658
|
-
{ name: "sweepDepositAccount", type: "SweepDepositAccount" }
|
|
659
|
-
],
|
|
660
|
-
SweepDepositAccount: [
|
|
661
|
-
{ name: "depositor", type: "address" },
|
|
662
|
-
{ name: "recipient", type: "address" },
|
|
663
|
-
{ name: "threshold", type: "uint256" },
|
|
664
|
-
{ name: "fee", type: "Fee" }
|
|
665
|
-
],
|
|
666
|
-
Fee: [
|
|
667
|
-
{ name: "token", type: "address" },
|
|
668
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
669
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
670
|
-
{ name: "executionFee", type: "uint256" }
|
|
671
|
-
]
|
|
672
|
-
}
|
|
673
|
-
};
|
|
674
|
-
|
|
675
|
-
// src/instructions/contracts/schemas/eip-712/actions/sweep-erc20.json
|
|
676
|
-
var sweep_erc20_default = {
|
|
677
|
-
types: {
|
|
678
|
-
Instruction: [
|
|
679
|
-
{ name: "salt", type: "uint256" },
|
|
680
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
681
|
-
{ name: "action", type: "address" },
|
|
682
|
-
{ name: "sweepERC20", type: "SweepERC20" }
|
|
683
|
-
],
|
|
684
|
-
SweepERC20: [
|
|
685
|
-
{ name: "token", type: "address" },
|
|
686
|
-
{ name: "target", type: "address" },
|
|
687
|
-
{ name: "threshold", type: "uint256" },
|
|
688
|
-
{ name: "endBalance", type: "uint256" },
|
|
689
|
-
{ name: "fee", type: "Fee" }
|
|
690
|
-
],
|
|
691
|
-
Fee: [
|
|
692
|
-
{ name: "token", type: "address" },
|
|
693
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
694
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
695
|
-
{ name: "executionFee", type: "uint256" }
|
|
696
|
-
]
|
|
697
|
-
}
|
|
698
|
-
};
|
|
699
|
-
|
|
700
|
-
// src/instructions/contracts/schemas/eip-712/actions/sweep-skip-cctp-deposit-account.json
|
|
701
|
-
var sweep_skip_cctp_deposit_account_default = {
|
|
702
|
-
types: {
|
|
703
|
-
Instruction: [
|
|
704
|
-
{ name: "salt", type: "uint256" },
|
|
705
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
706
|
-
{ name: "action", type: "address" },
|
|
707
|
-
{
|
|
708
|
-
name: "sweepSkipCCTPDepositAccount",
|
|
709
|
-
type: "SweepSkipCCTPDepositAccount"
|
|
710
|
-
}
|
|
711
|
-
],
|
|
712
|
-
SweepSkipCCTPDepositAccount: [
|
|
713
|
-
{ name: "depositor", type: "address" },
|
|
714
|
-
{ name: "destinationDomain", type: "uint32" },
|
|
715
|
-
{ name: "destinationMintRecipient", type: "bytes32" },
|
|
716
|
-
{ name: "threshold", type: "uint256" },
|
|
717
|
-
{ name: "fee", type: "Fee" }
|
|
718
|
-
],
|
|
719
|
-
Fee: [
|
|
720
|
-
{ name: "token", type: "address" },
|
|
721
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
722
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
723
|
-
{ name: "executionFee", type: "uint256" }
|
|
724
|
-
]
|
|
725
|
-
}
|
|
726
|
-
};
|
|
727
|
-
|
|
728
|
-
// src/instructions/contracts/schemas/eip-712/actions/sweep-uniswap-v3.json
|
|
729
|
-
var sweep_uniswap_v3_default = {
|
|
730
|
-
types: {
|
|
731
|
-
Instruction: [
|
|
732
|
-
{ name: "salt", type: "uint256" },
|
|
733
|
-
{ name: "maxExecutions", type: "uint256" },
|
|
734
|
-
{ name: "action", type: "address" },
|
|
735
|
-
{ name: "sweepUniswapV3", type: "SweepUniswapV3" }
|
|
736
|
-
],
|
|
737
|
-
SweepUniswapV3: [
|
|
738
|
-
{ name: "recipient", type: "address" },
|
|
739
|
-
{ name: "tokenIn", type: "address" },
|
|
740
|
-
{ name: "tokenOut", type: "address" },
|
|
741
|
-
{ name: "feeTier", type: "uint24" },
|
|
742
|
-
{ name: "threshold", type: "uint256" },
|
|
743
|
-
{ name: "endBalance", type: "uint256" },
|
|
744
|
-
{ name: "floorAmountOut", type: "uint256" },
|
|
745
|
-
{ name: "meanPriceLookBack", type: "uint32" },
|
|
746
|
-
{ name: "maxPriceDeviationBPS", type: "uint32" },
|
|
747
|
-
{ name: "fee", type: "Fee" }
|
|
748
|
-
],
|
|
749
|
-
Fee: [
|
|
750
|
-
{ name: "token", type: "address" },
|
|
751
|
-
{ name: "maxBaseFeePerGas", type: "uint256" },
|
|
752
|
-
{ name: "maxPriorityFeePerGas", type: "uint256" },
|
|
753
|
-
{ name: "executionFee", type: "uint256" }
|
|
754
|
-
]
|
|
755
|
-
}
|
|
133
|
+
return createDefaultFee(0, "0x0", maxPriorityFeePerGas ?? "0x0", token);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
//#endregion
|
|
137
|
+
//#region src/payments/instruction-registry.ts
|
|
138
|
+
const feeAbiComponent = {
|
|
139
|
+
name: "fee",
|
|
140
|
+
type: "tuple",
|
|
141
|
+
components: [
|
|
142
|
+
{
|
|
143
|
+
name: "token",
|
|
144
|
+
type: "address"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: "maxBaseFeePerGas",
|
|
148
|
+
type: "uint256"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: "maxPriorityFeePerGas",
|
|
152
|
+
type: "uint256"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: "executionFee",
|
|
156
|
+
type: "uint256"
|
|
157
|
+
}
|
|
158
|
+
]
|
|
756
159
|
};
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
}
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
];
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
]
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
{ name: "endBalance", type: "uint256" },
|
|
956
|
-
{ name: "floorAmountOut", type: "uint256" },
|
|
957
|
-
{ name: "meanPriceLookBack", type: "uint32" },
|
|
958
|
-
{ name: "maxPriceDeviationBPS", type: "uint32" },
|
|
959
|
-
feeAbiComponent
|
|
960
|
-
]
|
|
961
|
-
}
|
|
962
|
-
];
|
|
963
|
-
var sweepDepositAccountAbi = [
|
|
964
|
-
{
|
|
965
|
-
type: "tuple",
|
|
966
|
-
components: [
|
|
967
|
-
{ name: "depositor", type: "address" },
|
|
968
|
-
{ name: "recipient", type: "address" },
|
|
969
|
-
{ name: "threshold", type: "uint256" },
|
|
970
|
-
feeAbiComponent
|
|
971
|
-
]
|
|
972
|
-
}
|
|
973
|
-
];
|
|
974
|
-
var sweepDepositAccountERC20Abi = [
|
|
975
|
-
{
|
|
976
|
-
type: "tuple",
|
|
977
|
-
components: [
|
|
978
|
-
{ name: "token", type: "address" },
|
|
979
|
-
{ name: "depositor", type: "address" },
|
|
980
|
-
{ name: "recipient", type: "address" },
|
|
981
|
-
{ name: "threshold", type: "uint256" },
|
|
982
|
-
feeAbiComponent
|
|
983
|
-
]
|
|
984
|
-
}
|
|
985
|
-
];
|
|
986
|
-
var sweepSkipCCTPDepositAccountAbi = [
|
|
987
|
-
{
|
|
988
|
-
type: "tuple",
|
|
989
|
-
components: [
|
|
990
|
-
{ name: "depositor", type: "address" },
|
|
991
|
-
{ name: "destinationDomain", type: "uint32" },
|
|
992
|
-
{ name: "destinationMintRecipient", type: "bytes32" },
|
|
993
|
-
{ name: "threshold", type: "uint256" },
|
|
994
|
-
feeAbiComponent
|
|
995
|
-
]
|
|
996
|
-
}
|
|
997
|
-
];
|
|
998
|
-
var actionAbiMap = {
|
|
999
|
-
sweep: sweepAbi,
|
|
1000
|
-
sweepERC20: sweepERC20Abi,
|
|
1001
|
-
sweepCCTP: sweepCCTPAbi,
|
|
1002
|
-
sweepUniswapV3: sweepUniswapV3Abi,
|
|
1003
|
-
sweepDepositAccount: sweepDepositAccountAbi,
|
|
1004
|
-
sweepDepositAccountERC20: sweepDepositAccountERC20Abi,
|
|
1005
|
-
sweepSkipCCTPDepositAccount: sweepSkipCCTPDepositAccountAbi
|
|
160
|
+
const sweepAbi = [{
|
|
161
|
+
type: "tuple",
|
|
162
|
+
components: [
|
|
163
|
+
{
|
|
164
|
+
name: "target",
|
|
165
|
+
type: "address"
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
name: "threshold",
|
|
169
|
+
type: "uint256"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: "endBalance",
|
|
173
|
+
type: "uint256"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: "gasLimit",
|
|
177
|
+
type: "uint256"
|
|
178
|
+
},
|
|
179
|
+
feeAbiComponent
|
|
180
|
+
]
|
|
181
|
+
}];
|
|
182
|
+
const sweepERC20Abi = [{
|
|
183
|
+
type: "tuple",
|
|
184
|
+
components: [
|
|
185
|
+
{
|
|
186
|
+
name: "token",
|
|
187
|
+
type: "address"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: "target",
|
|
191
|
+
type: "address"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: "threshold",
|
|
195
|
+
type: "uint256"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
name: "endBalance",
|
|
199
|
+
type: "uint256"
|
|
200
|
+
},
|
|
201
|
+
feeAbiComponent
|
|
202
|
+
]
|
|
203
|
+
}];
|
|
204
|
+
const sweepCCTPAbi = [{
|
|
205
|
+
type: "tuple",
|
|
206
|
+
components: [
|
|
207
|
+
{
|
|
208
|
+
name: "token",
|
|
209
|
+
type: "address"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: "destinationDomain",
|
|
213
|
+
type: "uint32"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: "destinationMintRecipient",
|
|
217
|
+
type: "bytes32"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: "threshold",
|
|
221
|
+
type: "uint256"
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: "endBalance",
|
|
225
|
+
type: "uint256"
|
|
226
|
+
},
|
|
227
|
+
feeAbiComponent
|
|
228
|
+
]
|
|
229
|
+
}];
|
|
230
|
+
const sweepUniswapV3Abi = [{
|
|
231
|
+
type: "tuple",
|
|
232
|
+
components: [
|
|
233
|
+
{
|
|
234
|
+
name: "recipient",
|
|
235
|
+
type: "address"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
name: "tokenIn",
|
|
239
|
+
type: "address"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
name: "tokenOut",
|
|
243
|
+
type: "address"
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: "feeTier",
|
|
247
|
+
type: "uint24"
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
name: "threshold",
|
|
251
|
+
type: "uint256"
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: "endBalance",
|
|
255
|
+
type: "uint256"
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
name: "floorAmountOut",
|
|
259
|
+
type: "uint256"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
name: "meanPriceLookBack",
|
|
263
|
+
type: "uint32"
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
name: "maxPriceDeviationBPS",
|
|
267
|
+
type: "uint32"
|
|
268
|
+
},
|
|
269
|
+
feeAbiComponent
|
|
270
|
+
]
|
|
271
|
+
}];
|
|
272
|
+
const sweepSkipCCTPDepositAccountAbi = [{
|
|
273
|
+
type: "tuple",
|
|
274
|
+
components: [
|
|
275
|
+
{
|
|
276
|
+
name: "depositor",
|
|
277
|
+
type: "address"
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: "destinationDomain",
|
|
281
|
+
type: "uint32"
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: "destinationMintRecipient",
|
|
285
|
+
type: "bytes32"
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
name: "threshold",
|
|
289
|
+
type: "uint256"
|
|
290
|
+
},
|
|
291
|
+
feeAbiComponent
|
|
292
|
+
]
|
|
293
|
+
}];
|
|
294
|
+
const sweepDepositERC4626Abi = [{
|
|
295
|
+
type: "tuple",
|
|
296
|
+
components: [
|
|
297
|
+
{
|
|
298
|
+
name: "vault",
|
|
299
|
+
type: "address"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
name: "recipient",
|
|
303
|
+
type: "address"
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
name: "threshold",
|
|
307
|
+
type: "uint256"
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
name: "endBalance",
|
|
311
|
+
type: "uint256"
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: "minDeposit",
|
|
315
|
+
type: "uint256"
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
name: "minTotalShares",
|
|
319
|
+
type: "uint256"
|
|
320
|
+
},
|
|
321
|
+
feeAbiComponent
|
|
322
|
+
]
|
|
323
|
+
}];
|
|
324
|
+
const sweepWithdrawERC4626Abi = [{
|
|
325
|
+
type: "tuple",
|
|
326
|
+
components: [
|
|
327
|
+
{
|
|
328
|
+
name: "vault",
|
|
329
|
+
type: "address"
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
name: "recipient",
|
|
333
|
+
type: "address"
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
name: "threshold",
|
|
337
|
+
type: "uint256"
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
name: "endBalance",
|
|
341
|
+
type: "uint256"
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
name: "minWithdraw",
|
|
345
|
+
type: "uint256"
|
|
346
|
+
},
|
|
347
|
+
feeAbiComponent
|
|
348
|
+
]
|
|
349
|
+
}];
|
|
350
|
+
const actionAbiMap = {
|
|
351
|
+
[InstructionAction.Sweep]: sweepAbi,
|
|
352
|
+
[InstructionAction.SweepERC20]: sweepERC20Abi,
|
|
353
|
+
[InstructionAction.SweepCCTP]: sweepCCTPAbi,
|
|
354
|
+
[InstructionAction.SweepUniswapV3]: sweepUniswapV3Abi,
|
|
355
|
+
[InstructionAction.SweepSkipCCTPDepositAccount]: sweepSkipCCTPDepositAccountAbi,
|
|
356
|
+
[InstructionAction.SweepDepositERC4626]: sweepDepositERC4626Abi,
|
|
357
|
+
[InstructionAction.SweepWithdrawERC4626]: sweepWithdrawERC4626Abi
|
|
1006
358
|
};
|
|
1007
359
|
var InstructionTypeRegistry = class {
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
`Unsupported instruction type: ${actionName}. Available: ${availableTypes}`
|
|
1042
|
-
);
|
|
1043
|
-
}
|
|
360
|
+
constructor() {
|
|
361
|
+
_defineProperty(this, "registry", /* @__PURE__ */ new Map());
|
|
362
|
+
this.initializeDefaultTypes();
|
|
363
|
+
}
|
|
364
|
+
register(actionName, definition) {
|
|
365
|
+
this.registry.set(actionName, definition);
|
|
366
|
+
}
|
|
367
|
+
get(actionName) {
|
|
368
|
+
const definition = this.registry.get(actionName);
|
|
369
|
+
if (!definition) throw this.createUnsupportedTypeError(actionName);
|
|
370
|
+
return definition;
|
|
371
|
+
}
|
|
372
|
+
has(actionName) {
|
|
373
|
+
return this.registry.has(actionName);
|
|
374
|
+
}
|
|
375
|
+
getAvailableTypes() {
|
|
376
|
+
return Array.from(this.registry.keys());
|
|
377
|
+
}
|
|
378
|
+
initializeDefaultTypes() {
|
|
379
|
+
const actionNames = Object.keys(actionAbiMap);
|
|
380
|
+
for (const actionName of actionNames) {
|
|
381
|
+
const abi = actionAbiMap[actionName];
|
|
382
|
+
const eip712Types = eip712TypesMap[actionName];
|
|
383
|
+
if (abi && eip712Types) this.register(actionName, {
|
|
384
|
+
abi,
|
|
385
|
+
eip712Types
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
createUnsupportedTypeError(actionName) {
|
|
390
|
+
const availableTypes = this.getAvailableTypes().join(", ");
|
|
391
|
+
return /* @__PURE__ */ new Error(`Unsupported instruction type: ${actionName}. Available: ${availableTypes}`);
|
|
392
|
+
}
|
|
1044
393
|
};
|
|
1045
|
-
|
|
394
|
+
const instructionRegistry = new InstructionTypeRegistry();
|
|
1046
395
|
|
|
1047
|
-
|
|
396
|
+
//#endregion
|
|
397
|
+
//#region src/payments/action-names.ts
|
|
1048
398
|
function addActionNamesToInstructions(buildResponse, actionNames) {
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
}))
|
|
1062
|
-
};
|
|
399
|
+
const completionInstructionCount = buildResponse.completionInstructions.length;
|
|
400
|
+
return {
|
|
401
|
+
...buildResponse,
|
|
402
|
+
completionInstructions: buildResponse.completionInstructions.map((instruction, index) => ({
|
|
403
|
+
...instruction,
|
|
404
|
+
actionName: actionNames[index]
|
|
405
|
+
})),
|
|
406
|
+
instructions: buildResponse.instructions.map((instruction, index) => ({
|
|
407
|
+
...instruction,
|
|
408
|
+
actionName: actionNames[completionInstructionCount + index]
|
|
409
|
+
}))
|
|
410
|
+
};
|
|
1063
411
|
}
|
|
1064
412
|
function extractActionNamesMap(completionInstructions, instructions = []) {
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
actionNamesMap[index] = actionName;
|
|
1071
|
-
}
|
|
1072
|
-
return actionNamesMap;
|
|
1073
|
-
},
|
|
1074
|
-
{}
|
|
1075
|
-
);
|
|
413
|
+
return [...completionInstructions, ...instructions].reduce((actionNamesMap, instruction, index) => {
|
|
414
|
+
const actionName = getFirstActionArgumentKey(instruction.actionArguments);
|
|
415
|
+
if (actionName) actionNamesMap[index] = actionName;
|
|
416
|
+
return actionNamesMap;
|
|
417
|
+
}, {});
|
|
1076
418
|
}
|
|
1077
419
|
function getFirstActionArgumentKey(actionArguments) {
|
|
1078
|
-
|
|
1079
|
-
return keys[0];
|
|
420
|
+
return Object.keys(actionArguments)[0];
|
|
1080
421
|
}
|
|
1081
422
|
|
|
1082
|
-
|
|
423
|
+
//#endregion
|
|
424
|
+
//#region src/payments/validation.ts
|
|
1083
425
|
var SignatureValidator = class {
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
}
|
|
1091
|
-
static assertMinimumCount(context) {
|
|
1092
|
-
if (context.received < context.expected) {
|
|
1093
|
-
throw new Error(
|
|
1094
|
-
`Insufficient signatures: expected at least ${context.expected}, received ${context.received}`
|
|
1095
|
-
);
|
|
1096
|
-
}
|
|
1097
|
-
}
|
|
426
|
+
static assertExactCount(context) {
|
|
427
|
+
if (context.received !== context.expected) throw new Error(`Signature count mismatch: expected ${context.expected}, received ${context.received}`);
|
|
428
|
+
}
|
|
429
|
+
static assertMinimumCount(context) {
|
|
430
|
+
if (context.received < context.expected) throw new Error(`Insufficient signatures: expected at least ${context.expected}, received ${context.received}`);
|
|
431
|
+
}
|
|
1098
432
|
};
|
|
1099
433
|
function assertSignatureCount(signatures, expectedCount) {
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
434
|
+
SignatureValidator.assertExactCount({
|
|
435
|
+
expected: expectedCount,
|
|
436
|
+
received: signatures.length
|
|
437
|
+
});
|
|
1104
438
|
}
|
|
1105
439
|
function assertMinimumSignatures(signatures, minimumCount) {
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
440
|
+
SignatureValidator.assertMinimumCount({
|
|
441
|
+
expected: minimumCount,
|
|
442
|
+
received: signatures.length
|
|
443
|
+
});
|
|
1110
444
|
}
|
|
1111
445
|
|
|
1112
|
-
|
|
446
|
+
//#endregion
|
|
447
|
+
//#region src/payments/chain-token-config-builder.ts
|
|
1113
448
|
function createChainTokenConfigs(tokens) {
|
|
1114
|
-
|
|
1115
|
-
return convertToChainConfigs(tokensByChain);
|
|
449
|
+
return convertToChainConfigs(groupTokensByChainId(tokens));
|
|
1116
450
|
}
|
|
1117
451
|
function groupTokensByChainId(tokens) {
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
452
|
+
const grouped = /* @__PURE__ */ new Map();
|
|
453
|
+
for (const token of tokens) {
|
|
454
|
+
const chainTokens = grouped.get(token.chainId) ?? [];
|
|
455
|
+
chainTokens.push(token);
|
|
456
|
+
grouped.set(token.chainId, chainTokens);
|
|
457
|
+
}
|
|
458
|
+
return grouped;
|
|
1125
459
|
}
|
|
1126
460
|
function convertToChainConfigs(tokensByChain) {
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
}
|
|
1136
|
-
|
|
1137
|
-
|
|
461
|
+
return Array.from(tokensByChain.entries()).map(([chainId, tokens]) => ({
|
|
462
|
+
chainId,
|
|
463
|
+
tokens: tokens.map((token) => ({
|
|
464
|
+
symbol: token.symbol,
|
|
465
|
+
address: token.address,
|
|
466
|
+
decimals: token.decimals
|
|
467
|
+
}))
|
|
468
|
+
}));
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
//#endregion
|
|
472
|
+
//#region src/payments/payment-request-token-resolver.ts
|
|
1138
473
|
function isNativeToken(token) {
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
}
|
|
1142
|
-
return token.symbol === "ETH" || token.address.toLowerCase() === DEFAULT_ADDRESS.toLowerCase();
|
|
1143
|
-
}
|
|
1144
|
-
function resolvePreferredStablecoin({
|
|
1145
|
-
preferredToken,
|
|
1146
|
-
getStablecoinBySymbol
|
|
1147
|
-
}) {
|
|
1148
|
-
const stablecoin = getValidStablecoin(preferredToken);
|
|
1149
|
-
if (stablecoin) {
|
|
1150
|
-
return stablecoin;
|
|
1151
|
-
}
|
|
1152
|
-
return getDefaultStablecoin(getStablecoinBySymbol);
|
|
1153
|
-
}
|
|
1154
|
-
function getValidStablecoin(token) {
|
|
1155
|
-
if (!token || isNativeToken(token) || !isStablecoin(token.symbol)) {
|
|
1156
|
-
return null;
|
|
1157
|
-
}
|
|
1158
|
-
return token;
|
|
1159
|
-
}
|
|
1160
|
-
function getDefaultStablecoin(getStablecoinBySymbol) {
|
|
1161
|
-
const usdc = getStablecoinBySymbol("USDC");
|
|
1162
|
-
if (usdc) {
|
|
1163
|
-
return usdc;
|
|
1164
|
-
}
|
|
1165
|
-
const usdt = getStablecoinBySymbol("USDT");
|
|
1166
|
-
if (usdt) {
|
|
1167
|
-
return usdt;
|
|
1168
|
-
}
|
|
1169
|
-
return null;
|
|
474
|
+
if (!token) return false;
|
|
475
|
+
return token.symbol === "ETH" || token.address.toLowerCase() === DEFAULT_ADDRESS.toLowerCase();
|
|
1170
476
|
}
|
|
1171
477
|
function createTokenIdentifier(chainId, tokenAddress) {
|
|
1172
|
-
|
|
1173
|
-
}
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
478
|
+
return `${chainId}:${tokenAddress}`;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
//#endregion
|
|
482
|
+
//#region src/payments/payment-metadata-builder.ts
|
|
483
|
+
const DEFAULT_CURRENCY = "USD";
|
|
484
|
+
const DEFAULT_SOURCE = "Manual";
|
|
485
|
+
/**
|
|
486
|
+
* Formats a date to NaiveDateTime format expected by Rust backend.
|
|
487
|
+
* Converts ISO 8601 strings like "2025-01-15T00:00:00.000Z" to "2025-01-15T00:00:00".
|
|
488
|
+
*
|
|
489
|
+
* Rust's chrono::NaiveDateTime expects format without timezone suffix.
|
|
490
|
+
*
|
|
491
|
+
* @param dateInput - Date string or Date object to format
|
|
492
|
+
* @returns Formatted NaiveDateTime string
|
|
493
|
+
* @throws Error if date is invalid
|
|
494
|
+
*/
|
|
495
|
+
function formatToNaiveDateTime(dateInput) {
|
|
496
|
+
const date = typeof dateInput === "string" ? new Date(dateInput) : dateInput;
|
|
497
|
+
if (!isValidDate(date)) throw new Error(`Invalid date provided: ${String(dateInput)}`);
|
|
498
|
+
return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, "0")}-${String(date.getUTCDate()).padStart(2, "0")}T${String(date.getUTCHours()).padStart(2, "0")}:${String(date.getUTCMinutes()).padStart(2, "0")}:${String(date.getUTCSeconds()).padStart(2, "0")}`;
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Formats a numeric amount to a decimal string with 2 decimal places.
|
|
502
|
+
* Ensures consistent formatting for monetary values.
|
|
503
|
+
*
|
|
504
|
+
* @param amount - Numeric amount to format
|
|
505
|
+
* @returns Formatted amount string (e.g., "150.00")
|
|
506
|
+
*/
|
|
507
|
+
function formatAmount(amount) {
|
|
508
|
+
return amount.toFixed(2);
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Validates that a value is a safe, finite number suitable for monetary amounts.
|
|
512
|
+
* Excludes NaN and Infinity which could cause calculation errors downstream.
|
|
513
|
+
*
|
|
514
|
+
* @param value - Value to validate
|
|
515
|
+
* @returns True if value is a valid monetary amount
|
|
516
|
+
*/
|
|
517
|
+
function isValidMonetaryAmount(value) {
|
|
518
|
+
return isNumber(value) && Number.isFinite(value);
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Constructs payment metadata for manually created payment requests.
|
|
522
|
+
* Pure function with explicit input/output contract.
|
|
523
|
+
*
|
|
524
|
+
* @param params - Configuration for manual payment request
|
|
525
|
+
* @returns Immutable PaymentRequestMetadata object
|
|
526
|
+
*/
|
|
1180
527
|
function buildPaymentMetadata(params) {
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
528
|
+
const { tokenSymbol, note, dueDate, amountInUSD, fromAccountAddress, payer, source = DEFAULT_SOURCE } = params;
|
|
529
|
+
const baseMetadata = {
|
|
530
|
+
type: OrchestrationType.PaymentRequest,
|
|
531
|
+
token: tokenSymbol,
|
|
532
|
+
amountDue: formatAmount(amountInUSD),
|
|
533
|
+
currency: DEFAULT_CURRENCY,
|
|
534
|
+
dueDate: formatToNaiveDateTime(dueDate),
|
|
535
|
+
fromAccountAddress,
|
|
536
|
+
payer,
|
|
537
|
+
source
|
|
538
|
+
};
|
|
539
|
+
if (note !== void 0 && note !== "") return {
|
|
540
|
+
...baseMetadata,
|
|
541
|
+
note
|
|
542
|
+
};
|
|
543
|
+
return baseMetadata;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Constructs payment metadata from invoice integration data.
|
|
547
|
+
* Invoice fields are authoritative and override any defaults.
|
|
548
|
+
* Pure function ensuring consistent metadata structure for integrations.
|
|
549
|
+
*
|
|
550
|
+
* @param params - Invoice and account configuration
|
|
551
|
+
* @returns Immutable PaymentRequestMetadata object
|
|
552
|
+
*/
|
|
553
|
+
function buildPaymentMetadataFromInvoice(params) {
|
|
554
|
+
const { tokenSymbol, fromAccountAddress, payer, invoiceMetadata } = params;
|
|
555
|
+
const baseMetadata = {
|
|
556
|
+
type: OrchestrationType.PaymentRequest,
|
|
557
|
+
token: tokenSymbol,
|
|
558
|
+
amountDue: formatAmount(Number(invoiceMetadata.amount)),
|
|
559
|
+
currency: invoiceMetadata.currency,
|
|
560
|
+
dueDate: formatToNaiveDateTime(invoiceMetadata.dueDate),
|
|
561
|
+
fromAccountAddress,
|
|
562
|
+
payer,
|
|
563
|
+
source: invoiceMetadata.source,
|
|
564
|
+
invoiceId: invoiceMetadata.invoiceId,
|
|
565
|
+
invoiceNumber: invoiceMetadata.invoiceNumber
|
|
566
|
+
};
|
|
567
|
+
const optionalFields = {
|
|
568
|
+
...invoiceMetadata.description && { note: invoiceMetadata.description },
|
|
569
|
+
...invoiceMetadata.attachmentUrl && { attachmentUrl: invoiceMetadata.attachmentUrl },
|
|
570
|
+
...invoiceMetadata.attachmentName && { attachmentName: invoiceMetadata.attachmentName }
|
|
571
|
+
};
|
|
572
|
+
return {
|
|
573
|
+
...baseMetadata,
|
|
574
|
+
...optionalFields
|
|
575
|
+
};
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Merges invoice data from external integrations with base payment metadata.
|
|
579
|
+
* Invoice fields override manual entries to ensure accuracy and maintain
|
|
580
|
+
* audit trail through source/invoiceId tracking.
|
|
581
|
+
*
|
|
582
|
+
* @param params - Invoice and base metadata configuration
|
|
583
|
+
* @returns Immutable PaymentRequestMetadata with merged fields
|
|
584
|
+
*/
|
|
1209
585
|
function buildInvoiceMetadata(params) {
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
586
|
+
const { invoiceMetadata, baseMetadata } = params;
|
|
587
|
+
const mergedMetadata = {
|
|
588
|
+
...baseMetadata,
|
|
589
|
+
amountDue: formatAmount(Number(invoiceMetadata.amount)),
|
|
590
|
+
currency: invoiceMetadata.currency,
|
|
591
|
+
dueDate: formatToNaiveDateTime(invoiceMetadata.dueDate),
|
|
592
|
+
note: invoiceMetadata.description ?? baseMetadata.note,
|
|
593
|
+
source: invoiceMetadata.source,
|
|
594
|
+
invoiceId: invoiceMetadata.invoiceId,
|
|
595
|
+
invoiceNumber: invoiceMetadata.invoiceNumber
|
|
596
|
+
};
|
|
597
|
+
const attachmentFields = {
|
|
598
|
+
...invoiceMetadata.attachmentUrl && { attachmentUrl: invoiceMetadata.attachmentUrl },
|
|
599
|
+
...invoiceMetadata.attachmentName && { attachmentName: invoiceMetadata.attachmentName }
|
|
600
|
+
};
|
|
601
|
+
return {
|
|
602
|
+
...mergedMetadata,
|
|
603
|
+
...attachmentFields
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* Validates payment metadata structure before sending to backend API.
|
|
608
|
+
* Catches type mismatches and invalid values that would cause payment
|
|
609
|
+
* creation failures or blockchain transaction errors.
|
|
610
|
+
*
|
|
611
|
+
* Pure function returning immutable result object.
|
|
612
|
+
*
|
|
613
|
+
* @param metadata - Metadata to validate
|
|
614
|
+
* @returns Validation result with explicit errors array
|
|
615
|
+
*/
|
|
1228
616
|
function validatePaymentMetadata(metadata) {
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
}
|
|
1257
|
-
export {
|
|
1258
|
-
DefaultCCTPConfig,
|
|
1259
|
-
PaymentAction,
|
|
1260
|
-
SignatureValidator,
|
|
1261
|
-
UniswapV3FeeTier,
|
|
1262
|
-
addActionNamesToInstructions,
|
|
1263
|
-
assertMinimumSignatures,
|
|
1264
|
-
assertSignatureCount,
|
|
1265
|
-
buildInvoiceMetadata,
|
|
1266
|
-
buildPaymentMetadata,
|
|
1267
|
-
createChainTokenConfigs,
|
|
1268
|
-
createComprehensivePaymentRequest,
|
|
1269
|
-
createDefaultFee,
|
|
1270
|
-
createFeeWithToken,
|
|
1271
|
-
createPaymentRequestBuildPayload,
|
|
1272
|
-
createSweepActionArguments,
|
|
1273
|
-
createSweepCCTPActionArguments,
|
|
1274
|
-
createSweepERC20ActionArguments,
|
|
1275
|
-
createSweepUniswapV3ActionArguments,
|
|
1276
|
-
createTokenIdentifier,
|
|
1277
|
-
defaultCCTPConfig,
|
|
1278
|
-
extractActionNamesMap,
|
|
1279
|
-
getRecommendedFeeTier,
|
|
1280
|
-
instructionRegistry,
|
|
1281
|
-
isNativeToken,
|
|
1282
|
-
resolvePreferredStablecoin,
|
|
1283
|
-
validatePaymentMetadata
|
|
1284
|
-
};
|
|
1285
|
-
//# sourceMappingURL=index.mjs.map
|
|
617
|
+
const errors = [];
|
|
618
|
+
if (metadata.type !== OrchestrationType.PaymentRequest) errors.push(`Metadata type must be '${OrchestrationType.PaymentRequest}', got '${String(metadata.type)}'`);
|
|
619
|
+
if (!metadata.token || typeof metadata.token !== "string") errors.push("Token symbol is required and must be a string");
|
|
620
|
+
if (!metadata.amountDue || typeof metadata.amountDue !== "string") errors.push("Amount due is required and must be a string");
|
|
621
|
+
else {
|
|
622
|
+
const amount = parseFloat(metadata.amountDue);
|
|
623
|
+
if (!isValidMonetaryAmount(amount) || amount < 0) errors.push(`Amount must be a valid non-negative number, got '${metadata.amountDue}'`);
|
|
624
|
+
}
|
|
625
|
+
if (!metadata.currency || typeof metadata.currency !== "string") errors.push("Currency is required and must be a string");
|
|
626
|
+
if (!metadata.dueDate || typeof metadata.dueDate !== "string") errors.push("Due date is required and must be a string");
|
|
627
|
+
else if (!isValidDate(new Date(metadata.dueDate))) errors.push(`Due date must be a valid date string, got '${metadata.dueDate}'`);
|
|
628
|
+
if (!metadata.fromAccountAddress || typeof metadata.fromAccountAddress !== "string") errors.push("From account address is required and must be a string");
|
|
629
|
+
if (!metadata.payer) errors.push("Payer information is required");
|
|
630
|
+
else {
|
|
631
|
+
if (typeof metadata.payer.name !== "string") errors.push("Payer name must be a string");
|
|
632
|
+
if (!metadata.payer.address || typeof metadata.payer.address !== "string") errors.push("Payer address is required and must be a string");
|
|
633
|
+
}
|
|
634
|
+
if (!metadata.source || typeof metadata.source !== "string") errors.push("Source is required and must be a string");
|
|
635
|
+
return {
|
|
636
|
+
isValid: errors.length === 0,
|
|
637
|
+
errors
|
|
638
|
+
};
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
//#endregion
|
|
642
|
+
export { DefaultCCTPConfig, OrchestrationType, PaymentAction, SignatureValidator, UniswapV3FeeTier, addActionNamesToInstructions, assertMinimumSignatures, assertSignatureCount, buildInvoiceMetadata, buildPaymentMetadata, buildPaymentMetadataFromInvoice, createChainTokenConfigs, createDefaultFee, createFeeWithToken, createPaymentRequestBuildPayload, createTokenIdentifier, defaultCCTPConfig, extractActionNamesMap, getRecommendedFeeTier, instructionRegistry, isNativeToken, validatePaymentMetadata };
|
|
643
|
+
//# sourceMappingURL=index.mjs.map
|