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
|
@@ -16,6 +16,8 @@ import * as Idempotency from '../../../internal/Idempotency.js'
|
|
|
16
16
|
|
|
17
17
|
import * as Relay from '../../../internal/funding/providers/relay.js'
|
|
18
18
|
|
|
19
|
+
import * as Stargate from '../../../internal/funding/providers/stargate.js'
|
|
20
|
+
|
|
19
21
|
import * as TestApp from '../../../../test/App.js'
|
|
20
22
|
|
|
21
23
|
import * as TestFunding from '../../../../test/Funding.js'
|
|
@@ -29,8 +31,14 @@ const executableProviders = [
|
|
|
29
31
|
{
|
|
30
32
|
create: (_sender: string) =>
|
|
31
33
|
Relay.relay(process.env.RELAY_API_KEY ? { apiKey: process.env.RELAY_API_KEY } : {}),
|
|
34
|
+
destinationToken: 'pathusd',
|
|
32
35
|
id: 'relay',
|
|
33
36
|
},
|
|
37
|
+
{
|
|
38
|
+
create: (_sender: string) => Stargate.stargate(),
|
|
39
|
+
destinationToken: 'usdce',
|
|
40
|
+
id: 'stargate',
|
|
41
|
+
},
|
|
34
42
|
] as const
|
|
35
43
|
|
|
36
44
|
beforeAll(() => TestFunding.publish(db))
|
|
@@ -39,6 +47,29 @@ function create(options: TestApp.create.Options = {}) {
|
|
|
39
47
|
return TestApp.create({ ...options, db })
|
|
40
48
|
}
|
|
41
49
|
|
|
50
|
+
type ContractResponse = {
|
|
51
|
+
$ref?: string | undefined
|
|
52
|
+
content?: Record<string, { schema: unknown }> | undefined
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
type JsonSchema = {
|
|
56
|
+
$ref?: string | undefined
|
|
57
|
+
additionalProperties?: boolean | undefined
|
|
58
|
+
examples?: readonly unknown[] | undefined
|
|
59
|
+
properties?: Record<string, JsonSchema> | undefined
|
|
60
|
+
required?: readonly string[] | undefined
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
type ComponentSpec = {
|
|
64
|
+
components: { schemas: Record<string, JsonSchema> }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function dereference(spec: ComponentSpec, schema: JsonSchema): JsonSchema {
|
|
68
|
+
if (!schema.$ref) return schema
|
|
69
|
+
const name = schema.$ref.split('/').at(-1)!
|
|
70
|
+
return spec.components.schemas[name]!
|
|
71
|
+
}
|
|
72
|
+
|
|
42
73
|
describe('GET /funding/transfers', () => {
|
|
43
74
|
test('requires the funding:read scope', async () => {
|
|
44
75
|
const app = transfersApp()
|
|
@@ -359,6 +390,69 @@ describe('POST /funding/transfers', () => {
|
|
|
359
390
|
expect(row.providerState).toEqual({ requestId: `0x${'ab'.repeat(32)}` })
|
|
360
391
|
})
|
|
361
392
|
|
|
393
|
+
test('creates a transfer with the requested provider', async () => {
|
|
394
|
+
const app = transfersApp({ providers: [provider()] })
|
|
395
|
+
const response = await postTransfer(app, {
|
|
396
|
+
body: { ...createBody, provider: 'relay' },
|
|
397
|
+
idempotencyKey: nextIdempotencyKey(),
|
|
398
|
+
})
|
|
399
|
+
|
|
400
|
+
expect(response.status).toBe(200)
|
|
401
|
+
const body = await TestApp.json(response, Funding.schema.createFundingTransfer.Response)
|
|
402
|
+
expect(body.provider.id).toBe('relay')
|
|
403
|
+
})
|
|
404
|
+
|
|
405
|
+
test('rejects an unsupported provider', async () => {
|
|
406
|
+
const app = transfersApp({ providers: [provider()] })
|
|
407
|
+
const response = await postTransfer(app, {
|
|
408
|
+
body: { ...createBody, provider: 'bridge' },
|
|
409
|
+
idempotencyKey: nextIdempotencyKey(),
|
|
410
|
+
})
|
|
411
|
+
|
|
412
|
+
expect(response.status).toBe(400)
|
|
413
|
+
expect(((await response.json()) as { error: { code: string } }).error.code).toBe('body_invalid')
|
|
414
|
+
})
|
|
415
|
+
|
|
416
|
+
test('preserves a provider-specified native fee token', async () => {
|
|
417
|
+
const app = transfersApp({
|
|
418
|
+
providers: [
|
|
419
|
+
provider(async () => ({
|
|
420
|
+
...providerResponse(),
|
|
421
|
+
fees: [
|
|
422
|
+
{
|
|
423
|
+
amount: '1000000000000000',
|
|
424
|
+
side: 'source',
|
|
425
|
+
token: {
|
|
426
|
+
address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
|
|
427
|
+
currency: 'ETH',
|
|
428
|
+
decimals: 18,
|
|
429
|
+
name: 'Ether',
|
|
430
|
+
standard: 'native',
|
|
431
|
+
symbol: 'ETH',
|
|
432
|
+
tokenKey: 'eip155:8453/slip44:60',
|
|
433
|
+
verified: true,
|
|
434
|
+
},
|
|
435
|
+
},
|
|
436
|
+
],
|
|
437
|
+
})),
|
|
438
|
+
],
|
|
439
|
+
})
|
|
440
|
+
const response = await postTransfer(app, {
|
|
441
|
+
body: { ...createBody, destinationToken: 'pathusd', sourceToken: 'usdc' },
|
|
442
|
+
idempotencyKey: nextIdempotencyKey(),
|
|
443
|
+
})
|
|
444
|
+
expect(response.status).toBe(200)
|
|
445
|
+
const body = await TestApp.json(response, Funding.schema.createFundingTransfer.Response)
|
|
446
|
+
|
|
447
|
+
expect(body.fees).toMatchObject([
|
|
448
|
+
{
|
|
449
|
+
amount: { baseUnits: '1000000000000000', formatted: '0.001' },
|
|
450
|
+
side: 'source',
|
|
451
|
+
token: { standard: 'native', symbol: 'ETH' },
|
|
452
|
+
},
|
|
453
|
+
])
|
|
454
|
+
})
|
|
455
|
+
|
|
362
456
|
test('resolves token identifiers through the composed route', async () => {
|
|
363
457
|
const app = transfersApp({ providers: [provider()] })
|
|
364
458
|
const identifiers = [
|
|
@@ -590,7 +684,7 @@ describe.skipIf(!Anvil.available)('POST /funding/transfers (forked localnet)', (
|
|
|
590
684
|
(entry) =>
|
|
591
685
|
entry.route.source.chain.id === `eip155:${base.id}` &&
|
|
592
686
|
entry.route.source.symbol === 'USDC' &&
|
|
593
|
-
entry.route.destination.slug ===
|
|
687
|
+
entry.route.destination.slug === executable.destinationToken,
|
|
594
688
|
)!
|
|
595
689
|
const usdc = route.route.source
|
|
596
690
|
const amount = Value.from('10', usdc.decimals)
|
|
@@ -609,7 +703,12 @@ describe.skipIf(!Anvil.available)('POST /funding/transfers (forked localnet)', (
|
|
|
609
703
|
function createTransfer(idempotencyKey: string) {
|
|
610
704
|
const app = transfersApp({ providers: [executable.create(sender.address)] })
|
|
611
705
|
return postTransfer(app, {
|
|
612
|
-
body: {
|
|
706
|
+
body: {
|
|
707
|
+
...createBody,
|
|
708
|
+
amount: amount.toString(),
|
|
709
|
+
destinationToken: executable.destinationToken,
|
|
710
|
+
sender: sender.address,
|
|
711
|
+
},
|
|
613
712
|
idempotencyKey,
|
|
614
713
|
})
|
|
615
714
|
}
|
|
@@ -629,6 +728,14 @@ describe.skipIf(!Anvil.available)('POST /funding/transfers (forked localnet)', (
|
|
|
629
728
|
expect(transfer.action.type).toBe('evm:calls')
|
|
630
729
|
if (transfer.action.type !== 'evm:calls') return
|
|
631
730
|
expect(transfer.action.calls.length).toBeGreaterThan(0)
|
|
731
|
+
if (executable.id === 'stargate')
|
|
732
|
+
expect(transfer.fees).toMatchObject([
|
|
733
|
+
{
|
|
734
|
+
amount: { baseUnits: BigInt(transfer.action.calls.at(-1)!.value).toString() },
|
|
735
|
+
side: 'source',
|
|
736
|
+
token: { standard: 'native', symbol: 'ETH' },
|
|
737
|
+
},
|
|
738
|
+
])
|
|
632
739
|
|
|
633
740
|
const receipts = []
|
|
634
741
|
for (const call of transfer.action.calls) {
|
|
@@ -738,24 +845,318 @@ describe('POST /funding/transfers/{destination}', () => {
|
|
|
738
845
|
})
|
|
739
846
|
|
|
740
847
|
describe('funding transfers OpenAPI', () => {
|
|
848
|
+
test('publishes generator-ready transfer contracts', async () => {
|
|
849
|
+
const spec = await (await create({ auth: false }).request('/openapi.json')).json()
|
|
850
|
+
const detailPath = Object.keys(spec.paths).find((path) =>
|
|
851
|
+
path.includes('/v1/funding/transfers/{'),
|
|
852
|
+
)!
|
|
853
|
+
const operations = {
|
|
854
|
+
create: spec.paths['/v1/funding/transfers'].post,
|
|
855
|
+
createVault: spec.paths['/v1/funding/transfers/vault'].post,
|
|
856
|
+
createZone: spec.paths['/v1/funding/transfers/zone'].post,
|
|
857
|
+
get: spec.paths[detailPath].get,
|
|
858
|
+
list: spec.paths['/v1/funding/transfers'].get,
|
|
859
|
+
}
|
|
860
|
+
const summarize = (operation: (typeof operations)[keyof typeof operations]) => ({
|
|
861
|
+
errors: Object.fromEntries(
|
|
862
|
+
(Object.entries(operation.responses) as [string, ContractResponse][])
|
|
863
|
+
.filter(([status]) => Number(status) >= 400)
|
|
864
|
+
.map(([status, response]) => [
|
|
865
|
+
status,
|
|
866
|
+
response.$ref ?? response.content?.['application/json']?.schema,
|
|
867
|
+
]),
|
|
868
|
+
),
|
|
869
|
+
operationId: operation.operationId,
|
|
870
|
+
request: operation.requestBody?.content['application/json'].schema,
|
|
871
|
+
response: operation.responses[200]?.content?.['application/json']?.schema,
|
|
872
|
+
})
|
|
873
|
+
|
|
874
|
+
expect({
|
|
875
|
+
components: [
|
|
876
|
+
'CreateFundingTransferRequest',
|
|
877
|
+
'CreateFundingTransferVaultRequest',
|
|
878
|
+
'CreateFundingTransferZoneRequest',
|
|
879
|
+
'CreatedFundingTransfer',
|
|
880
|
+
'FundingAction',
|
|
881
|
+
'FundingActionCall',
|
|
882
|
+
'FundingEvmCallsAction',
|
|
883
|
+
'FundingTransfer',
|
|
884
|
+
'FundingTransferFee',
|
|
885
|
+
'FundingTransferList',
|
|
886
|
+
'FundingTransferQuote',
|
|
887
|
+
'FundingTransferStatusReason',
|
|
888
|
+
].filter((name) => spec.components.schemas[name]),
|
|
889
|
+
formats: {
|
|
890
|
+
createdAt: spec.components.schemas.FundingTransfer.properties.createdAt.format,
|
|
891
|
+
quoteExpiresAt: spec.components.schemas.FundingTransferQuote.properties.expiresAt.format,
|
|
892
|
+
quoteSampledAt: spec.components.schemas.FundingTransferQuote.properties.sampledAt.format,
|
|
893
|
+
updatedAt: spec.components.schemas.FundingTransfer.properties.updatedAt.format,
|
|
894
|
+
},
|
|
895
|
+
models: {
|
|
896
|
+
action: spec.components.schemas.FundingAction.oneOf,
|
|
897
|
+
createdAction: spec.components.schemas.CreatedFundingTransfer.properties.action,
|
|
898
|
+
evmCall: spec.components.schemas.FundingEvmCallsAction.properties.calls.items,
|
|
899
|
+
feeToken: spec.components.schemas.FundingTransferFee.properties.token,
|
|
900
|
+
list: spec.components.schemas.FundingTransferList.properties.data.items,
|
|
901
|
+
quote: spec.components.schemas.FundingTransfer.properties.quote,
|
|
902
|
+
statusReason: spec.components.schemas.FundingTransfer.properties.statusReason,
|
|
903
|
+
},
|
|
904
|
+
operations: {
|
|
905
|
+
create: summarize(operations.create),
|
|
906
|
+
createVault: summarize(operations.createVault),
|
|
907
|
+
createZone: summarize(operations.createZone),
|
|
908
|
+
get: summarize(operations.get),
|
|
909
|
+
list: summarize(operations.list),
|
|
910
|
+
},
|
|
911
|
+
operationErrorCodes: {
|
|
912
|
+
createInvalid:
|
|
913
|
+
spec.components.schemas.ApiKeyMalformedOrBodyInvalidOrIdempotencyKeyRequiredError
|
|
914
|
+
.properties.error.properties.code.enum,
|
|
915
|
+
idempotencyConflict:
|
|
916
|
+
spec.components.schemas.IdempotencyConflictOrIdempotencyInProgressError.properties.error
|
|
917
|
+
.properties.code.enum,
|
|
918
|
+
notImplemented:
|
|
919
|
+
spec.components.schemas.NotImplemented501Error.properties.error.properties.code.enum,
|
|
920
|
+
parametersInvalid:
|
|
921
|
+
spec.components.schemas.ApiKeyMalformedOrParamInvalidError.properties.error.properties
|
|
922
|
+
.code.enum,
|
|
923
|
+
queryInvalid:
|
|
924
|
+
spec.components.schemas.ApiKeyMalformedOrQueryInvalidError.properties.error.properties
|
|
925
|
+
.code.enum,
|
|
926
|
+
quoteNotAvailable:
|
|
927
|
+
spec.components.schemas.QuoteNotAvailableError.properties.error.properties.code.enum,
|
|
928
|
+
transferNotFound:
|
|
929
|
+
spec.components.schemas.FundingTransferNotFoundError.properties.error.properties.code
|
|
930
|
+
.enum,
|
|
931
|
+
},
|
|
932
|
+
}).toMatchInlineSnapshot(`
|
|
933
|
+
{
|
|
934
|
+
"components": [
|
|
935
|
+
"CreateFundingTransferRequest",
|
|
936
|
+
"CreateFundingTransferVaultRequest",
|
|
937
|
+
"CreateFundingTransferZoneRequest",
|
|
938
|
+
"CreatedFundingTransfer",
|
|
939
|
+
"FundingAction",
|
|
940
|
+
"FundingActionCall",
|
|
941
|
+
"FundingEvmCallsAction",
|
|
942
|
+
"FundingTransfer",
|
|
943
|
+
"FundingTransferFee",
|
|
944
|
+
"FundingTransferList",
|
|
945
|
+
"FundingTransferQuote",
|
|
946
|
+
"FundingTransferStatusReason",
|
|
947
|
+
],
|
|
948
|
+
"formats": {
|
|
949
|
+
"createdAt": "date-time",
|
|
950
|
+
"quoteExpiresAt": "date-time",
|
|
951
|
+
"quoteSampledAt": "date-time",
|
|
952
|
+
"updatedAt": "date-time",
|
|
953
|
+
},
|
|
954
|
+
"models": {
|
|
955
|
+
"action": [
|
|
956
|
+
{
|
|
957
|
+
"$ref": "#/components/schemas/FundingEvmCallsAction",
|
|
958
|
+
},
|
|
959
|
+
],
|
|
960
|
+
"createdAction": {
|
|
961
|
+
"$ref": "#/components/schemas/FundingAction",
|
|
962
|
+
},
|
|
963
|
+
"evmCall": {
|
|
964
|
+
"$ref": "#/components/schemas/FundingActionCall",
|
|
965
|
+
},
|
|
966
|
+
"feeToken": {
|
|
967
|
+
"$ref": "#/components/schemas/FundingToken",
|
|
968
|
+
},
|
|
969
|
+
"list": {
|
|
970
|
+
"$ref": "#/components/schemas/FundingTransfer",
|
|
971
|
+
},
|
|
972
|
+
"quote": {
|
|
973
|
+
"$ref": "#/components/schemas/FundingTransferQuote",
|
|
974
|
+
},
|
|
975
|
+
"statusReason": {
|
|
976
|
+
"$ref": "#/components/schemas/FundingTransferStatusReason",
|
|
977
|
+
},
|
|
978
|
+
},
|
|
979
|
+
"operationErrorCodes": {
|
|
980
|
+
"createInvalid": [
|
|
981
|
+
"api_key_malformed",
|
|
982
|
+
"body_invalid",
|
|
983
|
+
"idempotency_key_required",
|
|
984
|
+
],
|
|
985
|
+
"idempotencyConflict": [
|
|
986
|
+
"idempotency_conflict",
|
|
987
|
+
"idempotency_in_progress",
|
|
988
|
+
],
|
|
989
|
+
"notImplemented": [
|
|
990
|
+
"not_implemented",
|
|
991
|
+
],
|
|
992
|
+
"parametersInvalid": [
|
|
993
|
+
"api_key_malformed",
|
|
994
|
+
"param_invalid",
|
|
995
|
+
],
|
|
996
|
+
"queryInvalid": [
|
|
997
|
+
"api_key_malformed",
|
|
998
|
+
"query_invalid",
|
|
999
|
+
],
|
|
1000
|
+
"quoteNotAvailable": [
|
|
1001
|
+
"quote_not_available",
|
|
1002
|
+
],
|
|
1003
|
+
"transferNotFound": [
|
|
1004
|
+
"funding_transfer_not_found",
|
|
1005
|
+
],
|
|
1006
|
+
},
|
|
1007
|
+
"operations": {
|
|
1008
|
+
"create": {
|
|
1009
|
+
"errors": {
|
|
1010
|
+
"400": {
|
|
1011
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrBodyInvalidOrIdempotencyKeyRequiredError",
|
|
1012
|
+
},
|
|
1013
|
+
"401": {
|
|
1014
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
1015
|
+
},
|
|
1016
|
+
"403": {
|
|
1017
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
1018
|
+
},
|
|
1019
|
+
"404": {
|
|
1020
|
+
"$ref": "#/components/schemas/QuoteNotAvailableError",
|
|
1021
|
+
},
|
|
1022
|
+
"409": {
|
|
1023
|
+
"$ref": "#/components/schemas/IdempotencyConflictOrIdempotencyInProgressError",
|
|
1024
|
+
},
|
|
1025
|
+
"429": "#/components/responses/RateLimited",
|
|
1026
|
+
"500": "#/components/responses/InternalError",
|
|
1027
|
+
"502": {
|
|
1028
|
+
"$ref": "#/components/schemas/UpstreamError",
|
|
1029
|
+
},
|
|
1030
|
+
"504": "#/components/responses/RequestTimeout",
|
|
1031
|
+
},
|
|
1032
|
+
"operationId": "createFundingTransfer",
|
|
1033
|
+
"request": {
|
|
1034
|
+
"$ref": "#/components/schemas/CreateFundingTransferRequest",
|
|
1035
|
+
},
|
|
1036
|
+
"response": {
|
|
1037
|
+
"$ref": "#/components/schemas/CreatedFundingTransfer",
|
|
1038
|
+
},
|
|
1039
|
+
},
|
|
1040
|
+
"createVault": {
|
|
1041
|
+
"errors": {
|
|
1042
|
+
"400": {
|
|
1043
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrBodyInvalidOrIdempotencyKeyRequiredError",
|
|
1044
|
+
},
|
|
1045
|
+
"401": {
|
|
1046
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
1047
|
+
},
|
|
1048
|
+
"403": {
|
|
1049
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
1050
|
+
},
|
|
1051
|
+
"429": "#/components/responses/RateLimited",
|
|
1052
|
+
"500": "#/components/responses/InternalError",
|
|
1053
|
+
"501": {
|
|
1054
|
+
"$ref": "#/components/schemas/NotImplemented501Error",
|
|
1055
|
+
},
|
|
1056
|
+
"504": "#/components/responses/RequestTimeout",
|
|
1057
|
+
},
|
|
1058
|
+
"operationId": "createFundingTransferVault",
|
|
1059
|
+
"request": {
|
|
1060
|
+
"$ref": "#/components/schemas/CreateFundingTransferVaultRequest",
|
|
1061
|
+
},
|
|
1062
|
+
"response": undefined,
|
|
1063
|
+
},
|
|
1064
|
+
"createZone": {
|
|
1065
|
+
"errors": {
|
|
1066
|
+
"400": {
|
|
1067
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrBodyInvalidOrIdempotencyKeyRequiredError",
|
|
1068
|
+
},
|
|
1069
|
+
"401": {
|
|
1070
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
1071
|
+
},
|
|
1072
|
+
"403": {
|
|
1073
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
1074
|
+
},
|
|
1075
|
+
"429": "#/components/responses/RateLimited",
|
|
1076
|
+
"500": "#/components/responses/InternalError",
|
|
1077
|
+
"501": {
|
|
1078
|
+
"$ref": "#/components/schemas/NotImplemented501Error",
|
|
1079
|
+
},
|
|
1080
|
+
"504": "#/components/responses/RequestTimeout",
|
|
1081
|
+
},
|
|
1082
|
+
"operationId": "createFundingTransferZone",
|
|
1083
|
+
"request": {
|
|
1084
|
+
"$ref": "#/components/schemas/CreateFundingTransferZoneRequest",
|
|
1085
|
+
},
|
|
1086
|
+
"response": undefined,
|
|
1087
|
+
},
|
|
1088
|
+
"get": {
|
|
1089
|
+
"errors": {
|
|
1090
|
+
"400": {
|
|
1091
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidError",
|
|
1092
|
+
},
|
|
1093
|
+
"401": {
|
|
1094
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
1095
|
+
},
|
|
1096
|
+
"403": {
|
|
1097
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
1098
|
+
},
|
|
1099
|
+
"404": {
|
|
1100
|
+
"$ref": "#/components/schemas/FundingTransferNotFoundError",
|
|
1101
|
+
},
|
|
1102
|
+
"429": "#/components/responses/RateLimited",
|
|
1103
|
+
"500": "#/components/responses/InternalError",
|
|
1104
|
+
"502": {
|
|
1105
|
+
"$ref": "#/components/schemas/UpstreamError",
|
|
1106
|
+
},
|
|
1107
|
+
"504": "#/components/responses/RequestTimeout",
|
|
1108
|
+
},
|
|
1109
|
+
"operationId": "getFundingTransfer",
|
|
1110
|
+
"request": undefined,
|
|
1111
|
+
"response": {
|
|
1112
|
+
"$ref": "#/components/schemas/FundingTransfer",
|
|
1113
|
+
},
|
|
1114
|
+
},
|
|
1115
|
+
"list": {
|
|
1116
|
+
"errors": {
|
|
1117
|
+
"400": {
|
|
1118
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrQueryInvalidError",
|
|
1119
|
+
},
|
|
1120
|
+
"401": {
|
|
1121
|
+
"$ref": "#/components/schemas/AuthenticationError",
|
|
1122
|
+
},
|
|
1123
|
+
"403": {
|
|
1124
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
1125
|
+
},
|
|
1126
|
+
"429": "#/components/responses/RateLimited",
|
|
1127
|
+
"500": "#/components/responses/InternalError",
|
|
1128
|
+
"502": {
|
|
1129
|
+
"$ref": "#/components/schemas/UpstreamError",
|
|
1130
|
+
},
|
|
1131
|
+
"504": "#/components/responses/RequestTimeout",
|
|
1132
|
+
},
|
|
1133
|
+
"operationId": "listFundingTransfers",
|
|
1134
|
+
"request": undefined,
|
|
1135
|
+
"response": {
|
|
1136
|
+
"$ref": "#/components/schemas/FundingTransferList",
|
|
1137
|
+
},
|
|
1138
|
+
},
|
|
1139
|
+
},
|
|
1140
|
+
}
|
|
1141
|
+
`)
|
|
1142
|
+
})
|
|
1143
|
+
|
|
741
1144
|
test('publishes an executable account transfer example', async () => {
|
|
742
1145
|
const app = create({ auth: false })
|
|
743
|
-
type TokenSchema = { examples: string[] }
|
|
744
1146
|
type TransferExample = { destinationToken: { address: string } }
|
|
745
1147
|
type Operation = {
|
|
746
1148
|
requestBody: {
|
|
747
|
-
content: Record<string, { schema:
|
|
1149
|
+
content: Record<string, { schema: JsonSchema }>
|
|
748
1150
|
}
|
|
749
1151
|
responses: Record<string, { content: Record<string, { example: TransferExample }> }>
|
|
750
1152
|
}
|
|
751
|
-
type Spec = { paths: Record<string, { post: Operation }> }
|
|
1153
|
+
type Spec = ComponentSpec & { paths: Record<string, { post: Operation }> }
|
|
752
1154
|
const spec = (await (await app.request('/openapi.json')).json()) as Spec
|
|
753
1155
|
const operation = spec.paths['/v1/funding/transfers']!.post
|
|
1156
|
+
const request = dereference(spec, operation.requestBody.content['application/json']!.schema)
|
|
754
1157
|
|
|
755
1158
|
expect({
|
|
756
|
-
request:
|
|
757
|
-
operation.requestBody.content['application/json']!.schema.properties.destinationToken
|
|
758
|
-
.examples,
|
|
1159
|
+
request: request.properties!['destinationToken']!.examples,
|
|
759
1160
|
response:
|
|
760
1161
|
operation.responses['200']!.content['application/json']!.example.destinationToken.address,
|
|
761
1162
|
}).toEqual({
|
|
@@ -766,33 +1167,23 @@ describe('funding transfers OpenAPI', () => {
|
|
|
766
1167
|
|
|
767
1168
|
test('publishes human-readable deposit address route examples', async () => {
|
|
768
1169
|
const app = create({ auth: false })
|
|
769
|
-
type Property = { examples: string[] }
|
|
770
1170
|
type Operation = {
|
|
771
1171
|
requestBody: {
|
|
772
|
-
content: Record<
|
|
773
|
-
string,
|
|
774
|
-
{
|
|
775
|
-
schema: {
|
|
776
|
-
properties: {
|
|
777
|
-
destinationToken: Property
|
|
778
|
-
sourceChain: Property
|
|
779
|
-
sourceToken: Property
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
}
|
|
783
|
-
>
|
|
1172
|
+
content: Record<string, { schema: JsonSchema }>
|
|
784
1173
|
}
|
|
785
1174
|
}
|
|
786
|
-
type Spec = { paths: Record<string, { post: Operation }> }
|
|
1175
|
+
type Spec = ComponentSpec & { paths: Record<string, { post: Operation }> }
|
|
787
1176
|
const spec = (await (await app.request('/openapi.json')).json()) as Spec
|
|
788
|
-
const properties =
|
|
1177
|
+
const properties = dereference(
|
|
1178
|
+
spec,
|
|
789
1179
|
spec.paths['/v1/funding/deposit-addresses']!.post.requestBody.content['application/json']!
|
|
790
|
-
.schema
|
|
1180
|
+
.schema,
|
|
1181
|
+
).properties!
|
|
791
1182
|
|
|
792
1183
|
expect({
|
|
793
|
-
destinationToken: properties
|
|
794
|
-
sourceChain: properties
|
|
795
|
-
sourceToken: properties
|
|
1184
|
+
destinationToken: properties['destinationToken']!.examples,
|
|
1185
|
+
sourceChain: properties['sourceChain']!.examples,
|
|
1186
|
+
sourceToken: properties['sourceToken']!.examples,
|
|
796
1187
|
}).toMatchInlineSnapshot(`
|
|
797
1188
|
{
|
|
798
1189
|
"destinationToken": [
|
|
@@ -949,30 +1340,22 @@ describe('funding transfers OpenAPI', () => {
|
|
|
949
1340
|
|
|
950
1341
|
test('publishes concrete creation schemas', async () => {
|
|
951
1342
|
const app = create({ auth: false })
|
|
952
|
-
|
|
1343
|
+
type Spec = ComponentSpec & {
|
|
953
1344
|
paths: Record<
|
|
954
1345
|
string,
|
|
955
1346
|
{
|
|
956
1347
|
post?: {
|
|
957
1348
|
requestBody: {
|
|
958
|
-
content: Record<
|
|
959
|
-
string,
|
|
960
|
-
{
|
|
961
|
-
schema: {
|
|
962
|
-
additionalProperties?: boolean
|
|
963
|
-
properties: object
|
|
964
|
-
required?: readonly string[] | undefined
|
|
965
|
-
}
|
|
966
|
-
}
|
|
967
|
-
>
|
|
1349
|
+
content: Record<string, { schema: JsonSchema }>
|
|
968
1350
|
}
|
|
969
1351
|
responses: Record<string, unknown>
|
|
970
1352
|
}
|
|
971
1353
|
}
|
|
972
1354
|
>
|
|
973
1355
|
}
|
|
1356
|
+
const spec = (await (await app.request('/openapi.json')).json()) as Spec
|
|
974
1357
|
const creationSchema = (path: string) =>
|
|
975
|
-
spec.paths[path]!.post!.requestBody.content['application/json']!.schema
|
|
1358
|
+
dereference(spec, spec.paths[path]!.post!.requestBody.content['application/json']!.schema)
|
|
976
1359
|
expect(
|
|
977
1360
|
creationSchema('/v1/funding/deposit-addresses').required?.includes('subsidize') ?? false,
|
|
978
1361
|
).toMatchInlineSnapshot(`false`)
|
|
@@ -980,7 +1363,7 @@ describe('funding transfers OpenAPI', () => {
|
|
|
980
1363
|
const schema = creationSchema(path)
|
|
981
1364
|
return {
|
|
982
1365
|
additionalProperties: schema.additionalProperties,
|
|
983
|
-
properties: Object.keys(schema.properties),
|
|
1366
|
+
properties: Object.keys(schema.properties!),
|
|
984
1367
|
}
|
|
985
1368
|
}
|
|
986
1369
|
|
|
@@ -1002,6 +1385,7 @@ describe('funding transfers OpenAPI', () => {
|
|
|
1002
1385
|
"amount",
|
|
1003
1386
|
"destinationToken",
|
|
1004
1387
|
"mode",
|
|
1388
|
+
"provider",
|
|
1005
1389
|
"recipient",
|
|
1006
1390
|
"sender",
|
|
1007
1391
|
"slippageBps",
|
|
@@ -1025,11 +1409,13 @@ describe('funding transfers OpenAPI', () => {
|
|
|
1025
1409
|
"200",
|
|
1026
1410
|
"400",
|
|
1027
1411
|
"401",
|
|
1412
|
+
"403",
|
|
1028
1413
|
"404",
|
|
1029
1414
|
"409",
|
|
1030
1415
|
"429",
|
|
1031
1416
|
"500",
|
|
1032
1417
|
"502",
|
|
1418
|
+
"504",
|
|
1033
1419
|
],
|
|
1034
1420
|
"vault": {
|
|
1035
1421
|
"additionalProperties": false,
|
|
@@ -1047,9 +1433,11 @@ describe('funding transfers OpenAPI', () => {
|
|
|
1047
1433
|
"vaultResponses": [
|
|
1048
1434
|
"400",
|
|
1049
1435
|
"401",
|
|
1436
|
+
"403",
|
|
1050
1437
|
"429",
|
|
1051
1438
|
"500",
|
|
1052
1439
|
"501",
|
|
1440
|
+
"504",
|
|
1053
1441
|
],
|
|
1054
1442
|
"zone": {
|
|
1055
1443
|
"additionalProperties": false,
|
|
@@ -1069,9 +1457,11 @@ describe('funding transfers OpenAPI', () => {
|
|
|
1069
1457
|
"zoneResponses": [
|
|
1070
1458
|
"400",
|
|
1071
1459
|
"401",
|
|
1460
|
+
"403",
|
|
1072
1461
|
"429",
|
|
1073
1462
|
"500",
|
|
1074
1463
|
"501",
|
|
1464
|
+
"504",
|
|
1075
1465
|
],
|
|
1076
1466
|
}
|
|
1077
1467
|
`)
|