tapimo 0.11.0 → 0.13.0
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/App.d.ts +6396 -4575
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +39 -4
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +15 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +7 -0
- package/dist/Assets.js.map +1 -1
- package/dist/Scope.d.ts +2 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +17 -0
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +176 -78
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +84 -4
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +54 -0
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +123 -9
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +60 -7
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +4 -2
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +90 -90
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.js +71 -71
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/Zones.d.ts +16 -16
- package/dist/apps/Zones.js +4 -4
- package/dist/apps/data/App.d.ts +1699 -749
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +58 -9
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +62 -0
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
- package/dist/apps/data/ZoneSelection.js +44 -0
- package/dist/apps/data/ZoneSelection.js.map +1 -0
- package/dist/apps/data/routes/activities.d.ts +2417 -50
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +1896 -1293
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +471 -340
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +12 -12
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +44 -17
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +42 -42
- package/dist/apps/data/routes/blocks.d.ts.map +1 -1
- package/dist/apps/data/routes/blocks.js +22 -12
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +179 -179
- package/dist/apps/data/routes/earn.d.ts +144 -19
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +160 -28
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/exchanges.d.ts +719 -13
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +16 -13
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +2 -2
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +9 -11
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +34 -34
- package/dist/apps/data/routes/receipts.d.ts +363 -263
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +29 -11
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.js +24 -10
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +13 -13
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +16 -15
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +112 -98
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +85 -35
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +7 -2
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +38 -18
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +1 -1
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +25 -21
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +1 -1
- package/dist/apps/data/routes/valuation.d.ts.map +1 -1
- package/dist/apps/data/routes/valuation.js +12 -7
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts +3 -3
- package/dist/apps/data/routes/webhooks.d.ts +15 -15
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +2 -2
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +32 -32
- package/dist/apps/data/routes/zones.js +1 -1
- package/dist/apps/funding/App.d.ts +38 -27
- package/dist/apps/funding/App.d.ts.map +1 -1
- package/dist/apps/funding/routes/chains.d.ts.map +1 -1
- package/dist/apps/funding/routes/chains.js +5 -4
- package/dist/apps/funding/routes/chains.js.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts +16 -16
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.js +24 -19
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/funding/routes/providers.d.ts +13 -13
- package/dist/apps/funding/routes/providers.d.ts.map +1 -1
- package/dist/apps/funding/routes/providers.js +3 -2
- package/dist/apps/funding/routes/providers.js.map +1 -1
- package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
- package/dist/apps/funding/routes/quotes.js +2 -2
- package/dist/apps/funding/routes/quotes.js.map +1 -1
- package/dist/apps/funding/routes/transfers.d.ts +60 -48
- package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
- package/dist/apps/funding/routes/transfers.js +27 -19
- package/dist/apps/funding/routes/transfers.js.map +1 -1
- package/dist/apps/management/App.d.ts +4558 -3700
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +19 -6
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +786 -175
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +312 -34
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +103 -30
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +91 -32
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +35 -35
- package/dist/apps/management/routes/faucet.d.ts.map +1 -1
- package/dist/apps/management/routes/faucet.js +23 -12
- package/dist/apps/management/routes/faucet.js.map +1 -1
- package/dist/apps/management/routes/invitations.d.ts +46 -13
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +79 -29
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +120 -75
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +100 -41
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +5 -5
- package/dist/apps/management/routes/me.d.ts.map +1 -1
- package/dist/apps/management/routes/me.js +14 -10
- package/dist/apps/management/routes/me.js.map +1 -1
- package/dist/apps/management/routes/members.d.ts +99 -78
- package/dist/apps/management/routes/members.d.ts.map +1 -1
- package/dist/apps/management/routes/members.js +37 -18
- package/dist/apps/management/routes/members.js.map +1 -1
- package/dist/apps/management/routes/orgs.d.ts +48 -8
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +48 -19
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +108 -46
- package/dist/apps/management/routes/projects.d.ts.map +1 -1
- package/dist/apps/management/routes/projects.js +72 -21
- package/dist/apps/management/routes/projects.js.map +1 -1
- package/dist/apps/management/routes/scopes.d.ts.map +1 -1
- package/dist/apps/management/routes/scopes.js +8 -5
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +82 -82
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +41 -31
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +35 -7
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.js +36 -17
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +200 -183
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +80 -35
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Adapter.js +12 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -1
- package/dist/db/Db.d.ts +2 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +52 -1
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +26 -3
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +24 -5
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +5 -1
- package/dist/db/tables/earnVaults.d.ts.map +1 -1
- package/dist/db/tables/earnVaults.js +5 -0
- package/dist/db/tables/earnVaults.js.map +1 -1
- package/dist/db/tables/fundingCatalog.d.ts +4 -2
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
- package/dist/db/tables/fundingCatalog.js +5 -1
- package/dist/db/tables/fundingCatalog.js.map +1 -1
- package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
- package/dist/db/tables/webhookDeliveries.js +10 -0
- package/dist/db/tables/webhookDeliveries.js.map +1 -1
- package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
- package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
- package/dist/db/tables/webhookQueueCompletions.js +32 -0
- package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
- package/dist/db/tables/webhookQueueEvents.d.ts +14 -20
- package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
- package/dist/db/tables/webhookQueueEvents.js +68 -47
- package/dist/db/tables/webhookQueueEvents.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +16 -5
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +29 -5
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +9 -0
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/internal/Auth.d.ts +11 -2
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +19 -6
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +11 -7
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +43 -4
- package/dist/internal/EarnVaults.d.ts.map +1 -1
- package/dist/internal/EarnVaults.js +167 -0
- package/dist/internal/EarnVaults.js.map +1 -1
- package/dist/internal/Fetch.d.ts +23 -0
- package/dist/internal/Fetch.d.ts.map +1 -0
- package/dist/internal/Fetch.js +26 -0
- package/dist/internal/Fetch.js.map +1 -0
- package/dist/internal/Log.d.ts +3 -1
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +16 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +30 -24
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +140 -41
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +14 -9
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +16 -5
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +11 -10
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +14 -9
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +28 -6
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +121 -25
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +2 -0
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +23 -6
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Timeout.d.ts +36 -0
- package/dist/internal/Timeout.d.ts.map +1 -0
- package/dist/internal/Timeout.js +37 -0
- package/dist/internal/Timeout.js.map +1 -0
- package/dist/internal/Timing.d.ts +9 -0
- package/dist/internal/Timing.d.ts.map +1 -1
- package/dist/internal/Timing.js +7 -0
- package/dist/internal/Timing.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +3 -0
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +29 -12
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +37 -20
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/funding/Action.d.ts +9 -0
- package/dist/internal/funding/Action.d.ts.map +1 -1
- package/dist/internal/funding/Action.js +16 -8
- package/dist/internal/funding/Action.js.map +1 -1
- package/dist/internal/funding/Catalog.d.ts +9 -2
- package/dist/internal/funding/Catalog.d.ts.map +1 -1
- package/dist/internal/funding/Catalog.js +19 -8
- package/dist/internal/funding/Catalog.js.map +1 -1
- package/dist/internal/funding/Deposit.d.ts +2 -2
- package/dist/internal/funding/Deposit.d.ts.map +1 -1
- package/dist/internal/funding/Deposit.js +9 -8
- package/dist/internal/funding/Deposit.js.map +1 -1
- package/dist/internal/funding/DepositAddress.d.ts +4 -4
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
- package/dist/internal/funding/DepositAddress.js +9 -8
- package/dist/internal/funding/DepositAddress.js.map +1 -1
- package/dist/internal/funding/Provider.d.ts +68 -13
- package/dist/internal/funding/Provider.d.ts.map +1 -1
- package/dist/internal/funding/Provider.js +42 -20
- package/dist/internal/funding/Provider.js.map +1 -1
- package/dist/internal/funding/Transfer.d.ts +13 -12
- package/dist/internal/funding/Transfer.d.ts.map +1 -1
- package/dist/internal/funding/Transfer.js +23 -21
- package/dist/internal/funding/Transfer.js.map +1 -1
- package/dist/internal/funding/providers/stargate.d.ts +38 -0
- package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
- package/dist/internal/funding/providers/stargate.js +277 -0
- package/dist/internal/funding/providers/stargate.js.map +1 -0
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +1 -0
- package/dist/internal/index.js.map +1 -1
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -1
- package/package.json +3 -3
- package/src/App.test.ts +148 -0
- package/src/App.ts +45 -4
- package/src/Assets.test.ts +18 -0
- package/src/Assets.ts +22 -0
- package/src/Client.test-d.ts +311 -16
- package/src/Scope.test.ts +20 -0
- package/src/Scope.ts +16 -0
- package/src/admin/apps/api-keys.test.ts +75 -0
- package/src/admin/apps/api-keys.ts +64 -0
- package/src/admin/apps/earn-vaults.test.ts +143 -0
- package/src/admin/apps/earn-vaults.ts +84 -7
- package/src/admin/apps/organizations.ts +6 -2
- package/src/admin/ui/src/lib/api-keys.ts +19 -0
- package/src/admin/ui/src/routes/api-keys.tsx +125 -2
- package/src/admin/ui.generated.ts +71 -71
- package/src/apps/Zones.test.ts +4 -4
- package/src/apps/Zones.ts +4 -4
- package/src/apps/composition.test.ts +1 -1
- package/src/apps/data/App.test.ts +72 -0
- package/src/apps/data/App.ts +58 -10
- package/src/apps/data/ZoneSelection.test.ts +196 -0
- package/src/apps/data/ZoneSelection.ts +108 -0
- package/src/apps/data/routes/activities.test.ts +1843 -2
- package/src/apps/data/routes/activities.ts +2211 -1388
- package/src/apps/data/routes/balances.ts +134 -98
- package/src/apps/data/routes/blocks.test.ts +533 -0
- package/src/apps/data/routes/blocks.ts +36 -17
- package/src/apps/data/routes/earn.test.ts +187 -25
- package/src/apps/data/routes/earn.ts +228 -32
- package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
- package/src/apps/data/routes/exchanges.test.ts +31 -1
- package/src/apps/data/routes/exchanges.ts +19 -15
- package/src/apps/data/routes/fee-amm.ts +18 -11
- package/src/apps/data/routes/receipts.ts +48 -17
- package/src/apps/data/routes/rpc.test.ts +75 -0
- package/src/apps/data/routes/rpc.ts +23 -9
- package/src/apps/data/routes/tokenlist.ts +21 -18
- package/src/apps/data/routes/tokens.test.ts +607 -0
- package/src/apps/data/routes/tokens.ts +312 -231
- package/src/apps/data/routes/transactions.ts +69 -30
- package/src/apps/data/routes/transfers.test.ts +424 -3
- package/src/apps/data/routes/transfers.ts +57 -36
- package/src/apps/data/routes/valuation.ts +94 -78
- package/src/apps/data/routes/webhooks.ts +6 -2
- package/src/apps/data/routes/zones.test.ts +21 -15
- package/src/apps/data/routes/zones.ts +1 -1
- package/src/apps/funding/routes/chains.test.ts +211 -7
- package/src/apps/funding/routes/chains.ts +19 -12
- package/src/apps/funding/routes/deposit-addresses.test.ts +416 -0
- package/src/apps/funding/routes/deposit-addresses.ts +101 -84
- package/src/apps/funding/routes/providers.ts +9 -5
- package/src/apps/funding/routes/quotes.test.ts +42 -0
- package/src/apps/funding/routes/quotes.ts +8 -5
- package/src/apps/funding/routes/transfers.test.ts +430 -40
- package/src/apps/funding/routes/transfers.ts +76 -59
- package/src/apps/management/Billing.test.ts +26 -0
- package/src/apps/management/Billing.ts +24 -7
- package/src/apps/management/routes/api-keys.test.ts +398 -0
- package/src/apps/management/routes/api-keys.ts +481 -145
- package/src/apps/management/routes/billing.test.ts +209 -0
- package/src/apps/management/routes/billing.ts +254 -177
- package/src/apps/management/routes/faucet.test.ts +39 -0
- package/src/apps/management/routes/faucet.ts +75 -41
- package/src/apps/management/routes/invitations.test.ts +216 -0
- package/src/apps/management/routes/invitations.ts +186 -109
- package/src/apps/management/routes/invite-links.test.ts +263 -1
- package/src/apps/management/routes/invite-links.ts +295 -214
- package/src/apps/management/routes/me.test.ts +49 -0
- package/src/apps/management/routes/me.ts +42 -32
- package/src/apps/management/routes/members.test.ts +124 -1
- package/src/apps/management/routes/members.ts +81 -51
- package/src/apps/management/routes/orgs.test.ts +176 -0
- package/src/apps/management/routes/orgs.ts +101 -59
- package/src/apps/management/routes/projects.test.ts +183 -0
- package/src/apps/management/routes/projects.ts +124 -60
- package/src/apps/management/routes/scopes.test.ts +44 -0
- package/src/apps/management/routes/scopes.ts +37 -28
- package/src/apps/management/routes/usage.test.ts +92 -0
- package/src/apps/management/routes/usage.ts +186 -151
- package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
- package/src/apps/management/routes/verified-token-requests.ts +166 -133
- package/src/apps/management/routes/webhooks.test.ts +234 -0
- package/src/apps/management/routes/webhooks.ts +191 -78
- package/src/apps/mpp/internal/Adapter.ts +13 -1
- package/src/db/Db.test.ts +41 -0
- package/src/db/Db.ts +75 -1
- package/src/db/Schema.ts +33 -5
- package/src/db/tables/earnVaults.test.ts +22 -0
- package/src/db/tables/earnVaults.ts +11 -1
- package/src/db/tables/fundingCatalog.test.ts +16 -2
- package/src/db/tables/fundingCatalog.ts +9 -3
- package/src/db/tables/webhookDeliveries.ts +13 -0
- package/src/db/tables/webhookQueueCompletions.ts +55 -0
- package/src/db/tables/webhookQueueEvents.ts +95 -61
- package/src/db/tables/webhookSubscriptions.ts +45 -6
- package/src/handlers/internal/utils.test.ts +53 -0
- package/src/handlers/internal/utils.ts +15 -0
- package/src/internal/Auth.ts +35 -9
- package/src/internal/Cache.ts +14 -7
- package/src/internal/EarnVaults.capabilities.test.ts +33 -0
- package/src/internal/EarnVaults.test.ts +79 -0
- package/src/internal/EarnVaults.ts +277 -0
- package/src/internal/Fetch.test.ts +46 -0
- package/src/internal/Fetch.ts +56 -0
- package/src/internal/Log.test.ts +21 -0
- package/src/internal/Log.ts +20 -5
- package/src/internal/OpenApi.ts +177 -51
- package/src/internal/Response.test.ts +95 -0
- package/src/internal/Response.ts +41 -3
- package/src/internal/Schema.test.ts +18 -0
- package/src/internal/Schema.ts +19 -9
- package/src/internal/Store.test.ts +364 -0
- package/src/internal/Store.ts +153 -27
- package/src/internal/Tidx.test.ts +21 -1
- package/src/internal/Tidx.ts +23 -6
- package/src/internal/Timeout.test.ts +35 -0
- package/src/internal/Timeout.ts +73 -0
- package/src/internal/Timing.ts +16 -0
- package/src/internal/WebhookDestination.ts +3 -0
- package/src/internal/Webhooks.test.ts +122 -8
- package/src/internal/Webhooks.ts +59 -29
- package/src/internal/funding/Action.test.ts +41 -1
- package/src/internal/funding/Action.ts +69 -41
- package/src/internal/funding/Catalog.test.ts +34 -0
- package/src/internal/funding/Catalog.ts +28 -11
- package/src/internal/funding/Deposit.ts +71 -64
- package/src/internal/funding/DepositAddress.ts +50 -43
- package/src/internal/funding/Provider.test.ts +73 -0
- package/src/internal/funding/Provider.ts +246 -170
- package/src/internal/funding/Transfer.ts +133 -110
- package/src/internal/funding/providers/index.test.ts +22 -0
- package/src/internal/funding/providers/relay.test.ts +2 -2
- package/src/internal/funding/providers/stargate.test.ts +163 -0
- package/src/internal/funding/providers/stargate.ts +409 -0
- package/src/internal/index.test.ts +1 -0
- package/src/internal/index.ts +1 -0
- package/src/providers/index.test.ts +1 -0
- package/src/providers/index.ts +9 -0
|
@@ -4,6 +4,7 @@ import type * as Db from '../../db/Db.js'
|
|
|
4
4
|
import * as FundingTransferEvents from '../../db/tables/fundingTransferEvents.js'
|
|
5
5
|
import * as FundingTransfers from '../../db/tables/fundingTransfers.js'
|
|
6
6
|
import * as Id from '../Id.js'
|
|
7
|
+
import * as OpenApi from '../OpenApi.js'
|
|
7
8
|
import * as Schema from '../Schema.js'
|
|
8
9
|
import * as Action from './Action.js'
|
|
9
10
|
import * as Provider from './Provider.js'
|
|
@@ -91,22 +92,25 @@ export namespace schema {
|
|
|
91
92
|
)
|
|
92
93
|
|
|
93
94
|
/** Customer-safe explanation of a status that needs context. */
|
|
94
|
-
export const StatusReason =
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
export const StatusReason = OpenApi.component(
|
|
96
|
+
z
|
|
97
|
+
.object({
|
|
98
|
+
code: z
|
|
99
|
+
.enum(statusReasonCodes)
|
|
100
|
+
.check(
|
|
101
|
+
z.describe('Stable machine-readable reason code.'),
|
|
102
|
+
z.meta({ examples: ['destination_amount_below_minimum'] }),
|
|
103
|
+
),
|
|
104
|
+
message: z.string().check(
|
|
105
|
+
z.describe('Human-readable explanation of the reason.'),
|
|
106
|
+
z.meta({
|
|
107
|
+
examples: ['The verified destination amount did not satisfy the quoted minimum.'],
|
|
108
|
+
}),
|
|
101
109
|
),
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}),
|
|
107
|
-
),
|
|
108
|
-
})
|
|
109
|
-
.check(z.describe('Why the transfer is in its current status, when context is needed.'))
|
|
110
|
+
})
|
|
111
|
+
.check(z.describe('Why the transfer is in its current status, when context is needed.')),
|
|
112
|
+
'FundingTransferStatusReason',
|
|
113
|
+
)
|
|
110
114
|
|
|
111
115
|
/** Funding method selected at creation. */
|
|
112
116
|
export const Method = z
|
|
@@ -122,39 +126,45 @@ export namespace schema {
|
|
|
122
126
|
)
|
|
123
127
|
|
|
124
128
|
/** One fee applied to the transfer. */
|
|
125
|
-
export const Fee =
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
129
|
+
export const Fee = OpenApi.component(
|
|
130
|
+
z
|
|
131
|
+
.object({
|
|
132
|
+
amount: Schema.TokenAmount,
|
|
133
|
+
side: z
|
|
134
|
+
.enum(['destination', 'source'])
|
|
135
|
+
.check(
|
|
136
|
+
z.describe('Which side of the transfer the fee is taken from.'),
|
|
137
|
+
z.meta({ examples: ['destination'] }),
|
|
138
|
+
),
|
|
139
|
+
token: Provider.schema.TokenRef,
|
|
140
|
+
type: z
|
|
141
|
+
.enum(['provider'])
|
|
142
|
+
.check(z.describe('What the fee pays for.'), z.meta({ examples: ['provider'] })),
|
|
143
|
+
})
|
|
144
|
+
.check(z.describe('One fee applied to the transfer.')),
|
|
145
|
+
'FundingTransferFee',
|
|
146
|
+
)
|
|
140
147
|
|
|
141
148
|
/** Freshness and validity window of the selected quote. */
|
|
142
|
-
export const Quote =
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
149
|
+
export const Quote = OpenApi.component(
|
|
150
|
+
z
|
|
151
|
+
.object({
|
|
152
|
+
expiresAt: z.iso
|
|
153
|
+
.datetime()
|
|
154
|
+
.check(
|
|
155
|
+
z.describe('When the quoted terms stop being executable (ISO 8601).'),
|
|
156
|
+
z.meta({ examples: ['2026-07-30T04:01:00.000Z'] }),
|
|
157
|
+
),
|
|
158
|
+
sampledAt: z.iso
|
|
159
|
+
.datetime()
|
|
160
|
+
.check(
|
|
161
|
+
z.describe('When the provider produced the quote (ISO 8601).'),
|
|
162
|
+
z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
|
|
163
|
+
),
|
|
164
|
+
})
|
|
165
|
+
.check(z.describe('Freshness and validity window of the selected quote.')),
|
|
166
|
+
'FundingTransferQuote',
|
|
167
|
+
)
|
|
158
168
|
|
|
159
169
|
const hashesCheck = (description: string) => [
|
|
160
170
|
z.describe(description),
|
|
@@ -219,8 +229,8 @@ export namespace schema {
|
|
|
219
229
|
.check(z.describe('Quote terms and reconciled public fields of a funding transfer.'))
|
|
220
230
|
|
|
221
231
|
const fundingTransferFields = {
|
|
222
|
-
createdAt: z
|
|
223
|
-
.
|
|
232
|
+
createdAt: z.iso
|
|
233
|
+
.datetime()
|
|
224
234
|
.check(
|
|
225
235
|
z.describe('When the transfer was created (ISO 8601).'),
|
|
226
236
|
z.meta({ examples: ['2026-07-30T04:00:00.000Z'] }),
|
|
@@ -253,8 +263,8 @@ export namespace schema {
|
|
|
253
263
|
sourceTransactionHashes: snapshotFields.sourceTransactionHashes,
|
|
254
264
|
status: Status,
|
|
255
265
|
statusReason: z.optional(StatusReason),
|
|
256
|
-
updatedAt: z
|
|
257
|
-
.
|
|
266
|
+
updatedAt: z.iso
|
|
267
|
+
.datetime()
|
|
258
268
|
.check(
|
|
259
269
|
z.describe('When the transfer last materially changed (ISO 8601).'),
|
|
260
270
|
z.meta({ examples: ['2026-07-30T04:00:20.000Z'] }),
|
|
@@ -270,73 +280,86 @@ export namespace schema {
|
|
|
270
280
|
}
|
|
271
281
|
|
|
272
282
|
/** A funding transfer as returned by reads. Reads never include `action`. */
|
|
273
|
-
export const FundingTransfer =
|
|
274
|
-
.object(fundingTransferFields)
|
|
275
|
-
|
|
283
|
+
export const FundingTransfer = OpenApi.component(
|
|
284
|
+
z.object(fundingTransferFields).check(z.describe('One durable funding transfer.')),
|
|
285
|
+
'FundingTransfer',
|
|
286
|
+
)
|
|
276
287
|
|
|
277
288
|
/** A created funding transfer: the read shape plus the executable action. */
|
|
278
|
-
export const CreatedFundingTransfer =
|
|
279
|
-
|
|
280
|
-
|
|
289
|
+
export const CreatedFundingTransfer = OpenApi.component(
|
|
290
|
+
z
|
|
291
|
+
.object({ action: Action.schema.Action, ...fundingTransferFields })
|
|
292
|
+
.check(z.describe('The created funding transfer, including its one-time executable action.')),
|
|
293
|
+
'CreatedFundingTransfer',
|
|
294
|
+
)
|
|
281
295
|
|
|
282
296
|
/** Request body accepted by funding transfer creation. */
|
|
283
|
-
export const CreateRequest =
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
z.regex(/^[1-9]\d*$/),
|
|
289
|
-
z.describe('Amount in base units of the token the mode fixes.'),
|
|
290
|
-
z.meta({ examples: ['1000000'] }),
|
|
291
|
-
),
|
|
292
|
-
destinationToken: z
|
|
293
|
-
.string()
|
|
294
|
-
.check(
|
|
295
|
-
z.minLength(1),
|
|
296
|
-
z.describe('Tempo destination token symbol, contract address, or token key.'),
|
|
297
|
-
z.meta({ examples: ['pathusd'] }),
|
|
298
|
-
),
|
|
299
|
-
mode: Mode,
|
|
300
|
-
recipient: z
|
|
301
|
-
.string()
|
|
302
|
-
.check(
|
|
303
|
-
z.regex(/^0x[0-9a-fA-F]{40}$/),
|
|
304
|
-
z.describe('Final beneficiary of the transfer.'),
|
|
305
|
-
z.meta({ examples: [`0x${'11'.repeat(20)}`] }),
|
|
306
|
-
),
|
|
307
|
-
sender: z
|
|
308
|
-
.string()
|
|
309
|
-
.check(
|
|
310
|
-
z.regex(/^0x[0-9a-fA-F]{40}$/),
|
|
311
|
-
z.describe('Source-chain account that signs the funding action.'),
|
|
312
|
-
z.meta({ examples: [`0x${'22'.repeat(20)}`] }),
|
|
313
|
-
),
|
|
314
|
-
slippageBps: z.optional(
|
|
315
|
-
z
|
|
316
|
-
.number()
|
|
297
|
+
export const CreateRequest = OpenApi.component(
|
|
298
|
+
z
|
|
299
|
+
.strictObject({
|
|
300
|
+
amount: z
|
|
301
|
+
.string()
|
|
317
302
|
.check(
|
|
318
|
-
z.
|
|
319
|
-
z.
|
|
320
|
-
z.
|
|
321
|
-
z.describe('Maximum acceptable slippage in basis points.'),
|
|
322
|
-
z.meta({ examples: [50] }),
|
|
303
|
+
z.regex(/^[1-9]\d*$/),
|
|
304
|
+
z.describe('Amount in base units of the token the mode fixes.'),
|
|
305
|
+
z.meta({ examples: ['1000000'] }),
|
|
323
306
|
),
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
307
|
+
destinationToken: z
|
|
308
|
+
.string()
|
|
309
|
+
.check(
|
|
310
|
+
z.minLength(1),
|
|
311
|
+
z.describe('Tempo destination token symbol, contract address, or token key.'),
|
|
312
|
+
z.meta({ examples: ['pathusd'] }),
|
|
313
|
+
),
|
|
314
|
+
mode: Mode,
|
|
315
|
+
provider: z
|
|
316
|
+
.optional(z.string().check(z.minLength(1)))
|
|
317
|
+
.check(
|
|
318
|
+
z.describe('Funding provider ID. Omit to select the best available provider.'),
|
|
319
|
+
z.meta({ examples: ['relay'] }),
|
|
320
|
+
),
|
|
321
|
+
recipient: z
|
|
322
|
+
.string()
|
|
323
|
+
.check(
|
|
324
|
+
z.regex(/^0x[0-9a-fA-F]{40}$/),
|
|
325
|
+
z.describe('Final beneficiary of the transfer.'),
|
|
326
|
+
z.meta({ examples: [`0x${'11'.repeat(20)}`] }),
|
|
327
|
+
),
|
|
328
|
+
sender: z
|
|
329
|
+
.string()
|
|
330
|
+
.check(
|
|
331
|
+
z.regex(/^0x[0-9a-fA-F]{40}$/),
|
|
332
|
+
z.describe('Source-chain account that signs the funding action.'),
|
|
333
|
+
z.meta({ examples: [`0x${'22'.repeat(20)}`] }),
|
|
334
|
+
),
|
|
335
|
+
slippageBps: z.optional(
|
|
336
|
+
z
|
|
337
|
+
.number()
|
|
338
|
+
.check(
|
|
339
|
+
z.int(),
|
|
340
|
+
z.gte(0),
|
|
341
|
+
z.lte(10_000),
|
|
342
|
+
z.describe('Maximum acceptable slippage in basis points.'),
|
|
343
|
+
z.meta({ examples: [50] }),
|
|
344
|
+
),
|
|
337
345
|
),
|
|
338
|
-
|
|
339
|
-
|
|
346
|
+
sourceChain: z
|
|
347
|
+
.string()
|
|
348
|
+
.check(
|
|
349
|
+
z.describe('Source chain CAIP-2 id, slug, or alias.'),
|
|
350
|
+
z.meta({ examples: ['base', 'eip155:8453'] }),
|
|
351
|
+
),
|
|
352
|
+
sourceToken: z
|
|
353
|
+
.string()
|
|
354
|
+
.check(
|
|
355
|
+
z.minLength(1),
|
|
356
|
+
z.describe('Source token symbol, contract address, or token key.'),
|
|
357
|
+
z.meta({ examples: ['usdc'] }),
|
|
358
|
+
),
|
|
359
|
+
})
|
|
360
|
+
.check(z.describe('Funding transfer creation request.')),
|
|
361
|
+
'CreateFundingTransferRequest',
|
|
362
|
+
)
|
|
340
363
|
}
|
|
341
364
|
|
|
342
365
|
/** Stored public snapshot of a funding transfer (see {@link schema.Snapshot}). */
|
|
@@ -4,6 +4,7 @@ import * as Across from './across.js'
|
|
|
4
4
|
import * as Relay from './relay.js'
|
|
5
5
|
import * as Rhino from './rhino.js'
|
|
6
6
|
import * as Squid from './squid.js'
|
|
7
|
+
import * as Stargate from './stargate.js'
|
|
7
8
|
import * as Symbiosis from './symbiosis.js'
|
|
8
9
|
|
|
9
10
|
const now = () => new Date('2026-01-01T00:00:00.000Z')
|
|
@@ -21,6 +22,7 @@ const providers = [
|
|
|
21
22
|
integratorId: 'squid-integrator-id',
|
|
22
23
|
userAddress: '0x1111111111111111111111111111111111111111',
|
|
23
24
|
}),
|
|
25
|
+
Stargate.stargate(),
|
|
24
26
|
Symbiosis.symbiosis({ userAddress: '0x1111111111111111111111111111111111111111' }),
|
|
25
27
|
] as const
|
|
26
28
|
|
|
@@ -335,6 +337,12 @@ describe('funding providers', () => {
|
|
|
335
337
|
})
|
|
336
338
|
})
|
|
337
339
|
|
|
340
|
+
test('exposes Base and Ethereum Stargate quote candidates', () => {
|
|
341
|
+
expect(
|
|
342
|
+
['base', 'ethereum'].map((sourceChain) => quoteCandidate('stargate', { sourceChain }).id),
|
|
343
|
+
).toEqual(['base-usdc-tempo-usdce-stargate', 'ethereum-usdc-tempo-usdce-stargate'])
|
|
344
|
+
})
|
|
345
|
+
|
|
338
346
|
test('maps successful Symbiosis quotes to available quote results', async () => {
|
|
339
347
|
const requests: RecordedRequest[] = []
|
|
340
348
|
const candidate = quoteCandidate('symbiosis')
|
|
@@ -961,6 +969,20 @@ describe('funding providers', () => {
|
|
|
961
969
|
})
|
|
962
970
|
})
|
|
963
971
|
|
|
972
|
+
test('returns bounded Stargate failure diagnostics', () => {
|
|
973
|
+
expect(
|
|
974
|
+
FundingProvider.failure({
|
|
975
|
+
cause: new TypeError('network failure'),
|
|
976
|
+
operation: 'getQuote',
|
|
977
|
+
provider: getProvider('stargate'),
|
|
978
|
+
}),
|
|
979
|
+
).toEqual({
|
|
980
|
+
failure: 'network',
|
|
981
|
+
id: 'stargate',
|
|
982
|
+
operation: 'getQuote',
|
|
983
|
+
})
|
|
984
|
+
})
|
|
985
|
+
|
|
964
986
|
test('returns bounded Symbiosis failure diagnostics', () => {
|
|
965
987
|
expect(
|
|
966
988
|
FundingProvider.failure({
|
|
@@ -147,8 +147,8 @@ describe.skipIf(!apiKey)('relay.prepareTransfer (live)', () => {
|
|
|
147
147
|
expect(call.data).toMatch(/^0x[0-9a-fA-F]*$/)
|
|
148
148
|
expect(call.value).toBe('0x0')
|
|
149
149
|
}
|
|
150
|
-
expect(result.correlation
|
|
151
|
-
expect(result.correlation
|
|
150
|
+
expect(result.correlation?.requestId).toMatch(/^0x[0-9a-f]{64}$/)
|
|
151
|
+
expect(result.correlation?.checkEndpoint).toContain('/intents/status/v3')
|
|
152
152
|
expect(BigInt(result.destinationAmount) > 0n).toBe(true)
|
|
153
153
|
expect(BigInt(result.destinationAmountMin) > 0n).toBe(true)
|
|
154
154
|
expect(BigInt(result.destinationAmountMin) <= BigInt(result.destinationAmount)).toBe(true)
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { AbiFunction, Hex } from 'ox'
|
|
2
|
+
|
|
3
|
+
import type * as Action from '../Action.js'
|
|
4
|
+
import type * as Catalog from '../Catalog.js'
|
|
5
|
+
import * as FundingProvider from '../Provider.js'
|
|
6
|
+
import * as Stargate from './stargate.js'
|
|
7
|
+
|
|
8
|
+
const amount = 1_000_000n
|
|
9
|
+
const destinationToken = '0x20C000000000000000000000b9537d11c60E8b50'
|
|
10
|
+
const nativeFee = 10_000n
|
|
11
|
+
const otherAddress = '0x9999999999999999999999999999999999999999'
|
|
12
|
+
const pool = '0x27a16dc786820B16E5c9028b75B99F6f604b5d26'
|
|
13
|
+
const recipient = '0x1111111111111111111111111111111111111111'
|
|
14
|
+
const sender = '0x2222222222222222222222222222222222222222'
|
|
15
|
+
const sourceToken = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
|
|
16
|
+
|
|
17
|
+
const approve = AbiFunction.from('function approve(address spender, uint256 amount)')
|
|
18
|
+
const sendToken = AbiFunction.from(
|
|
19
|
+
'function sendToken((uint32 dstEid, bytes32 to, uint256 amountLD, uint256 minAmountLD, bytes extraOptions, bytes composeMsg, bytes oftCmd) sendParam, (uint256 nativeFee, uint256 lzTokenFee) fee, address refundAddress) payable returns ((bytes32 guid, uint64 nonce, (uint256 nativeFee, uint256 lzTokenFee) fee) msgReceipt, (uint256 amountSentLD, uint256 amountReceivedLD) oftReceipt, (uint72 ticketId, bytes passengerBytes) ticket)',
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
describe('stargate', () => {
|
|
23
|
+
test('creates a credential-free quote and transfer provider', () => {
|
|
24
|
+
expect(Stargate.stargate()).toMatchObject({
|
|
25
|
+
getQuote: expect.any(Function),
|
|
26
|
+
id: 'stargate',
|
|
27
|
+
name: 'Stargate',
|
|
28
|
+
prepareTransfer: expect.any(Function),
|
|
29
|
+
})
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
describe('validateAction', () => {
|
|
34
|
+
test('accepts the exact approval and Taxi send calls', () => {
|
|
35
|
+
expect(validate(action())).toEqual([{ to: pool, value: Hex.fromNumber(nativeFee) }])
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
test('rejects calls outside the curated Stargate route', () => {
|
|
39
|
+
const invalid = [
|
|
40
|
+
action({ approvalAmount: amount + 1n }),
|
|
41
|
+
action({ approvalSpender: otherAddress }),
|
|
42
|
+
action({ composeMsg: '0x01' }),
|
|
43
|
+
action({ destinationEid: 1 }),
|
|
44
|
+
action({ executionTarget: otherAddress }),
|
|
45
|
+
action({ extraOptions: '0x01' }),
|
|
46
|
+
action({ lzTokenFee: 1n }),
|
|
47
|
+
action({ minimumAmount: amount - 1n }),
|
|
48
|
+
action({ oftCmd: '0x01' }),
|
|
49
|
+
action({ recipient: otherAddress }),
|
|
50
|
+
action({ refundAddress: otherAddress }),
|
|
51
|
+
action({ sourceAmount: amount + 1n }),
|
|
52
|
+
]
|
|
53
|
+
for (const candidate of invalid)
|
|
54
|
+
expect(() => validate(candidate)).toThrowError(FundingProvider.ProviderPayloadError)
|
|
55
|
+
expect(() => validate(action(), { sourceTokenAddress: otherAddress })).toThrowError(
|
|
56
|
+
FundingProvider.ProviderPayloadError,
|
|
57
|
+
)
|
|
58
|
+
expect(() => validate(action(), { destinationTokenAddress: otherAddress })).toThrowError(
|
|
59
|
+
FundingProvider.ProviderPayloadError,
|
|
60
|
+
)
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('rejects malformed selectors and mismatched native value', () => {
|
|
64
|
+
const malformed = action()
|
|
65
|
+
malformed.calls[1]!.data = '0xdeadbeef'
|
|
66
|
+
expect(() => validate(malformed)).toThrowError(FundingProvider.ProviderPayloadError)
|
|
67
|
+
|
|
68
|
+
const mismatched = action()
|
|
69
|
+
mismatched.calls[1]!.value = Hex.fromNumber(nativeFee + 1n)
|
|
70
|
+
expect(() => validate(mismatched)).toThrowError(FundingProvider.ProviderPayloadError)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
test('rejects missing or mismatched route configuration', () => {
|
|
74
|
+
expect(() =>
|
|
75
|
+
Stargate.validateAction({
|
|
76
|
+
action: action(),
|
|
77
|
+
destinationTokenAddress: destinationToken,
|
|
78
|
+
recipient,
|
|
79
|
+
sender,
|
|
80
|
+
sourceAmount: amount.toString(),
|
|
81
|
+
sourceChainId: 'eip155:8453',
|
|
82
|
+
sourceTokenAddress: sourceToken,
|
|
83
|
+
}),
|
|
84
|
+
).toThrowError(FundingProvider.ProviderPayloadError)
|
|
85
|
+
expect(() => validate(action(), { configuration: { poolAddress: otherAddress } })).toThrowError(
|
|
86
|
+
FundingProvider.ProviderPayloadError,
|
|
87
|
+
)
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
function action(options: action.Options = {}): Action.EvmCalls {
|
|
92
|
+
const executionFee = options.nativeFee ?? nativeFee
|
|
93
|
+
const sendParam = {
|
|
94
|
+
amountLD: options.sourceAmount ?? amount,
|
|
95
|
+
composeMsg: options.composeMsg ?? '0x',
|
|
96
|
+
dstEid: options.destinationEid ?? 30_410,
|
|
97
|
+
extraOptions: options.extraOptions ?? '0x',
|
|
98
|
+
minAmountLD: options.minimumAmount ?? amount,
|
|
99
|
+
oftCmd: options.oftCmd ?? '0x',
|
|
100
|
+
to: Hex.padLeft(options.recipient ?? recipient, 32),
|
|
101
|
+
} as const
|
|
102
|
+
return {
|
|
103
|
+
calls: [
|
|
104
|
+
{
|
|
105
|
+
data: AbiFunction.encodeData(approve, [
|
|
106
|
+
options.approvalSpender ?? pool,
|
|
107
|
+
options.approvalAmount ?? amount,
|
|
108
|
+
]),
|
|
109
|
+
to: sourceToken,
|
|
110
|
+
value: '0x0',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
data: AbiFunction.encodeData(sendToken, [
|
|
114
|
+
sendParam,
|
|
115
|
+
{ lzTokenFee: options.lzTokenFee ?? 0n, nativeFee: executionFee },
|
|
116
|
+
options.refundAddress ?? sender,
|
|
117
|
+
]),
|
|
118
|
+
to: options.executionTarget ?? pool,
|
|
119
|
+
value: Hex.fromNumber(executionFee),
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
type: 'evm:calls',
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
declare namespace action {
|
|
127
|
+
type Options = {
|
|
128
|
+
approvalAmount?: bigint | undefined
|
|
129
|
+
approvalSpender?: `0x${string}` | undefined
|
|
130
|
+
composeMsg?: Hex.Hex | undefined
|
|
131
|
+
destinationEid?: number | undefined
|
|
132
|
+
executionTarget?: `0x${string}` | undefined
|
|
133
|
+
extraOptions?: Hex.Hex | undefined
|
|
134
|
+
lzTokenFee?: bigint | undefined
|
|
135
|
+
minimumAmount?: bigint | undefined
|
|
136
|
+
nativeFee?: bigint | undefined
|
|
137
|
+
oftCmd?: Hex.Hex | undefined
|
|
138
|
+
recipient?: Hex.Hex | undefined
|
|
139
|
+
refundAddress?: `0x${string}` | undefined
|
|
140
|
+
sourceAmount?: bigint | undefined
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function validate(candidate: Action.EvmCalls, options: validate.Options = {}) {
|
|
145
|
+
return Stargate.validateAction({
|
|
146
|
+
action: candidate,
|
|
147
|
+
configuration: options.configuration ?? { poolAddress: pool },
|
|
148
|
+
destinationTokenAddress: options.destinationTokenAddress ?? destinationToken,
|
|
149
|
+
recipient,
|
|
150
|
+
sender,
|
|
151
|
+
sourceAmount: amount.toString(),
|
|
152
|
+
sourceChainId: 'eip155:8453',
|
|
153
|
+
sourceTokenAddress: options.sourceTokenAddress ?? sourceToken,
|
|
154
|
+
})
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
declare namespace validate {
|
|
158
|
+
type Options = {
|
|
159
|
+
configuration?: Catalog.Configuration | undefined
|
|
160
|
+
destinationTokenAddress?: string | undefined
|
|
161
|
+
sourceTokenAddress?: string | undefined
|
|
162
|
+
}
|
|
163
|
+
}
|