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
package/src/App.test.ts
CHANGED
|
@@ -40,6 +40,37 @@ describe('create', () => {
|
|
|
40
40
|
expect(await store.get('status')).toMatchInlineSnapshot(`"ready"`)
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
+
test('keeps cache persistence alive via waitUntil', async () => {
|
|
44
|
+
const pending = Promise.withResolvers<void>()
|
|
45
|
+
const waited: Promise<unknown>[] = []
|
|
46
|
+
const store = Store.from({
|
|
47
|
+
...Store.memory(),
|
|
48
|
+
put: () => pending.promise,
|
|
49
|
+
type: 'cache',
|
|
50
|
+
})
|
|
51
|
+
const app = TestApp.create({ auth: false, cache: { store } })
|
|
52
|
+
app.get('/cache', async (c) =>
|
|
53
|
+
c.json(
|
|
54
|
+
await Store.memoize(async () => ({ value: 'fresh' }), {
|
|
55
|
+
key: 'app:cache',
|
|
56
|
+
store: c.get('store'),
|
|
57
|
+
ttl: 60_000,
|
|
58
|
+
}),
|
|
59
|
+
),
|
|
60
|
+
)
|
|
61
|
+
const executionCtx = {
|
|
62
|
+
passThroughOnException: () => {},
|
|
63
|
+
waitUntil: (promise: Promise<unknown>) => void waited.push(promise),
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const response = await app.request('/cache', undefined, undefined, executionCtx as never)
|
|
67
|
+
|
|
68
|
+
expect(response.status).toBe(200)
|
|
69
|
+
expect(waited).toHaveLength(1)
|
|
70
|
+
pending.resolve()
|
|
71
|
+
await Promise.all(waited)
|
|
72
|
+
})
|
|
73
|
+
|
|
43
74
|
test('leaves routes public without auth middleware', async () => {
|
|
44
75
|
const app = TestApp.create({ auth: false })
|
|
45
76
|
const response = await app.request('/v1/tokens/not-an-address')
|
|
@@ -47,6 +78,57 @@ describe('create', () => {
|
|
|
47
78
|
expect(response.status).toMatchInlineSnapshot(`400`)
|
|
48
79
|
})
|
|
49
80
|
|
|
81
|
+
test('bounds a stalled request with a 504 envelope', async () => {
|
|
82
|
+
vi.useFakeTimers()
|
|
83
|
+
try {
|
|
84
|
+
const app = TestApp.create({ auth: false })
|
|
85
|
+
app.get('/hang', () => new Promise<never>(() => {}))
|
|
86
|
+
|
|
87
|
+
const pending = app.request('/hang')
|
|
88
|
+
await vi.advanceTimersByTimeAsync(60_000)
|
|
89
|
+
const response = await pending
|
|
90
|
+
const { requestId, ...body } = (await response.json()) as Record<string, unknown>
|
|
91
|
+
|
|
92
|
+
expect(response.status).toMatchInlineSnapshot(`504`)
|
|
93
|
+
expect(requestId).toBeTypeOf('string')
|
|
94
|
+
expect(body).toMatchInlineSnapshot(`
|
|
95
|
+
{
|
|
96
|
+
"error": {
|
|
97
|
+
"code": "request_timeout",
|
|
98
|
+
"message": "Request timed out",
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
`)
|
|
102
|
+
} finally {
|
|
103
|
+
vi.useRealTimers()
|
|
104
|
+
}
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
test('exempts mutations and paid requests from the deadline', async () => {
|
|
108
|
+
vi.useFakeTimers()
|
|
109
|
+
try {
|
|
110
|
+
const app = TestApp.create({ auth: false })
|
|
111
|
+
const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
|
|
112
|
+
app.post('/slow', async (c) => {
|
|
113
|
+
await wait(90_000)
|
|
114
|
+
return c.json({ ok: true }, 200)
|
|
115
|
+
})
|
|
116
|
+
app.get('/slow-paid', async (c) => {
|
|
117
|
+
await wait(90_000)
|
|
118
|
+
return c.json({ ok: true }, 200)
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
const post = app.request('/slow', { method: 'POST' })
|
|
122
|
+
const paid = app.request('/slow-paid', { headers: { authorization: 'Payment credential' } })
|
|
123
|
+
await vi.advanceTimersByTimeAsync(90_000)
|
|
124
|
+
|
|
125
|
+
expect((await post).status).toMatchInlineSnapshot(`200`)
|
|
126
|
+
expect((await paid).status).toMatchInlineSnapshot(`200`)
|
|
127
|
+
} finally {
|
|
128
|
+
vi.useRealTimers()
|
|
129
|
+
}
|
|
130
|
+
})
|
|
131
|
+
|
|
50
132
|
test('serves public health check', async () => {
|
|
51
133
|
const app = TestApp.create({ path: 'api/' })
|
|
52
134
|
const response = await app.request('/api/health')
|
|
@@ -147,6 +229,54 @@ describe('create', () => {
|
|
|
147
229
|
`)
|
|
148
230
|
})
|
|
149
231
|
|
|
232
|
+
test('preserves named error schemas across generated documents', async () => {
|
|
233
|
+
const first = await (await TestApp.create().request('/openapi.json')).json()
|
|
234
|
+
const second = await (await TestApp.create().request('/openapi.json')).json()
|
|
235
|
+
|
|
236
|
+
expect(
|
|
237
|
+
[first, second].map((spec) => ({
|
|
238
|
+
forbidden: spec.components.schemas.ForbiddenError.type,
|
|
239
|
+
internal: spec.components.schemas.InternalError.type,
|
|
240
|
+
})),
|
|
241
|
+
).toEqual([
|
|
242
|
+
{ forbidden: 'object', internal: 'object' },
|
|
243
|
+
{ forbidden: 'object', internal: 'object' },
|
|
244
|
+
])
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
test('keeps standard and custom error component names distinct', async () => {
|
|
248
|
+
const spec = await (await TestApp.create().request('/openapi.json')).json()
|
|
249
|
+
const billing =
|
|
250
|
+
spec.paths['/v1/orgs/{orgId}/billing/stripe/checkout'].post.responses[501].content[
|
|
251
|
+
'application/json'
|
|
252
|
+
].schema.$ref
|
|
253
|
+
const funding =
|
|
254
|
+
spec.paths['/v1/funding/transfers/vault'].post.responses[501].content['application/json']
|
|
255
|
+
.schema.$ref
|
|
256
|
+
const billingName = billing.split('/').at(-1)
|
|
257
|
+
const fundingName = funding.split('/').at(-1)
|
|
258
|
+
|
|
259
|
+
expect({
|
|
260
|
+
billing: {
|
|
261
|
+
codes: spec.components.schemas[billingName].properties.error.properties.code.enum,
|
|
262
|
+
ref: billing,
|
|
263
|
+
},
|
|
264
|
+
funding: {
|
|
265
|
+
codes: spec.components.schemas[fundingName].properties.error.properties.code.enum,
|
|
266
|
+
ref: funding,
|
|
267
|
+
},
|
|
268
|
+
}).toEqual({
|
|
269
|
+
billing: {
|
|
270
|
+
codes: ['billing_unconfigured'],
|
|
271
|
+
ref: '#/components/schemas/NotImplementedError',
|
|
272
|
+
},
|
|
273
|
+
funding: {
|
|
274
|
+
codes: ['not_implemented'],
|
|
275
|
+
ref: '#/components/schemas/NotImplemented501Error',
|
|
276
|
+
},
|
|
277
|
+
})
|
|
278
|
+
})
|
|
279
|
+
|
|
150
280
|
test('authenticates a minted store-backed key and rejects after revoke', async () => {
|
|
151
281
|
const store = Store.memory()
|
|
152
282
|
const { record, token } = await ApiKeys.mint(store, {
|
|
@@ -453,6 +583,24 @@ describe('create', () => {
|
|
|
453
583
|
`)
|
|
454
584
|
})
|
|
455
585
|
|
|
586
|
+
test('passes the original request error to the configured logger', async () => {
|
|
587
|
+
const cause = new Error('boom')
|
|
588
|
+
let logged: Error | undefined
|
|
589
|
+
const app = TestApp.create({
|
|
590
|
+
logger: (_entry, error) => {
|
|
591
|
+
logged = error
|
|
592
|
+
},
|
|
593
|
+
})
|
|
594
|
+
app.get('/boom', () => {
|
|
595
|
+
throw cause
|
|
596
|
+
})
|
|
597
|
+
|
|
598
|
+
const response = await app.request('/boom')
|
|
599
|
+
|
|
600
|
+
expect(response.status).toBe(500)
|
|
601
|
+
expect(logged).toBe(cause)
|
|
602
|
+
})
|
|
603
|
+
|
|
456
604
|
test('logs the selected chain for anonymous edge-cache hits', async () => {
|
|
457
605
|
const entries: Log.Entry[] = []
|
|
458
606
|
const app = TestApp.create({
|
package/src/App.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { compress as hono_compress } from 'hono/compress'
|
|
|
5
5
|
import { cors as hono_cors } from 'hono/cors'
|
|
6
6
|
import { HTTPException } from 'hono/http-exception'
|
|
7
7
|
import { requestId, type RequestIdVariables } from 'hono/request-id'
|
|
8
|
+
import { timeout as hono_timeout } from 'hono/timeout'
|
|
8
9
|
import { generateSpecs } from 'hono-openapi'
|
|
9
10
|
import type { Chain } from 'viem'
|
|
10
11
|
|
|
@@ -91,6 +92,8 @@ export type Environment = {
|
|
|
91
92
|
tidx: Tidx.getClient.Tidx | undefined
|
|
92
93
|
/** Verified-token feature configuration (refresh window), or undefined when the feature is disabled. Token rows live in `db`. */
|
|
93
94
|
verifiedTokens: { refreshMs?: number | undefined } | undefined
|
|
95
|
+
/** Zone chain ids inferred from the current API key, or undefined for single-chain requests. */
|
|
96
|
+
zoneChainIds: readonly Viem.ChainId[] | undefined
|
|
94
97
|
/** Zone chains keyed by chain id; empty when none are configured. */
|
|
95
98
|
zones: ReadonlyMap<number, Chain>
|
|
96
99
|
/** Webhook feature configuration, or undefined when webhooks are disabled. Rows live in `db`. */
|
|
@@ -181,6 +184,10 @@ export declare namespace GetAsset {
|
|
|
181
184
|
/** Top-level OpenAPI `info.description`, rendered above the reference. */
|
|
182
185
|
const infoDescription = 'REST API for reading and interacting with Tempo'
|
|
183
186
|
|
|
187
|
+
// Comfortably above the slowest legitimate time-to-response observed in
|
|
188
|
+
// production (~40s tidx reads), far below the 17-100 minute stalls it bounds.
|
|
189
|
+
const requestTimeoutMs = 60_000
|
|
190
|
+
|
|
184
191
|
/** Creates the Tempo API Hono app. */
|
|
185
192
|
export function create<const path extends string = '/'>(options: create.Options<path>) {
|
|
186
193
|
const { path = '/' as path } = options
|
|
@@ -270,8 +277,8 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
270
277
|
base.use(
|
|
271
278
|
'*',
|
|
272
279
|
Log.middleware<Environment>({
|
|
273
|
-
emit: async (entry) => {
|
|
274
|
-
await log?.(entry)
|
|
280
|
+
emit: async (entry, cause) => {
|
|
281
|
+
await log?.(entry, cause)
|
|
275
282
|
recordRequest?.(entry)
|
|
276
283
|
// Return the analytics promise so `Log.middleware` extends the
|
|
277
284
|
// response with `waitUntil`; otherwise the async sink's `queue.send`
|
|
@@ -282,6 +289,30 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
282
289
|
}),
|
|
283
290
|
)
|
|
284
291
|
|
|
292
|
+
// Bounds time-to-response only; streaming bodies are unaffected. Without a
|
|
293
|
+
// deadline, a request stalled on an unbounded upstream wait pins its
|
|
294
|
+
// invocation (and isolate memory) until the client disconnects.
|
|
295
|
+
const deadline = hono_timeout(
|
|
296
|
+
requestTimeoutMs,
|
|
297
|
+
(c) =>
|
|
298
|
+
new HTTPException(504, {
|
|
299
|
+
res: Response.error(c, {
|
|
300
|
+
code: 'request_timeout',
|
|
301
|
+
message: 'Request timed out',
|
|
302
|
+
status: 504,
|
|
303
|
+
}),
|
|
304
|
+
}),
|
|
305
|
+
)
|
|
306
|
+
// Safe methods only: the expired handler is abandoned, not aborted, so a
|
|
307
|
+
// mutation could still commit after the 504. Paid requests are also exempt:
|
|
308
|
+
// MPP consumes payment before the handler, and the Payment-Receipt attaches
|
|
309
|
+
// only when the handler returns through the payment wrapper.
|
|
310
|
+
base.use('*', (c, next) => {
|
|
311
|
+
if (c.req.method !== 'GET' && c.req.method !== 'HEAD') return next()
|
|
312
|
+
if (Auth.hasPaymentCredential(c)) return next()
|
|
313
|
+
return deadline(c, next)
|
|
314
|
+
})
|
|
315
|
+
|
|
285
316
|
// Normalize the `db` option: the plain form is `{ source }` with no cached
|
|
286
317
|
// side; `cached` falls back to `source` so consumers never branch.
|
|
287
318
|
const db = 'source' in options.db ? options.db : { source: options.db }
|
|
@@ -329,7 +360,7 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
329
360
|
c.set('providers', providers)
|
|
330
361
|
c.set('rpc', options.rpc)
|
|
331
362
|
c.set('scopeCatalog', scopeCatalog)
|
|
332
|
-
c.set('store', store)
|
|
363
|
+
c.set('store', Store.withRequest(store, c.req, { waitUntil: getWaitUntil(c) }))
|
|
333
364
|
c.set('supportedChainIds', supportedChainIds)
|
|
334
365
|
c.set('zones', zones)
|
|
335
366
|
await next()
|
|
@@ -481,7 +512,7 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
481
512
|
documentation: {
|
|
482
513
|
components: {
|
|
483
514
|
headers: OpenApi.headerComponents,
|
|
484
|
-
responses: OpenApi.responseComponents,
|
|
515
|
+
responses: OpenApi.responseComponents(),
|
|
485
516
|
securitySchemes: {
|
|
486
517
|
apiKey: {
|
|
487
518
|
description:
|
|
@@ -893,6 +924,16 @@ namespace ResponseBody {
|
|
|
893
924
|
}
|
|
894
925
|
}
|
|
895
926
|
|
|
927
|
+
function getWaitUntil(c: { executionCtx?: { waitUntil(promise: Promise<unknown>): void } }) {
|
|
928
|
+
// `c.executionCtx` throws in runtimes without one, so cache persistence falls back to an awaited write.
|
|
929
|
+
try {
|
|
930
|
+
const context = c.executionCtx
|
|
931
|
+
return context ? context.waitUntil.bind(context) : undefined
|
|
932
|
+
} catch {
|
|
933
|
+
return undefined
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
|
|
896
937
|
namespace NodeServer {
|
|
897
938
|
type GetRequestListener = (typeof import('@hono/node-server'))['getRequestListener']
|
|
898
939
|
export type Fetch = Parameters<GetRequestListener>[0]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Assets from './Assets.js'
|
|
2
|
+
|
|
3
|
+
describe('url', () => {
|
|
4
|
+
test('builds hosted and base-path asset URLs', () => {
|
|
5
|
+
const options = {
|
|
6
|
+
chainId: 4217,
|
|
7
|
+
origin: 'https://api.tempo.xyz',
|
|
8
|
+
path: '/icons/0x20c000000000000000000000b9537d11c60e8b50',
|
|
9
|
+
} as const
|
|
10
|
+
|
|
11
|
+
expect(Assets.url(options)).toBe(
|
|
12
|
+
'https://api.tempo.xyz/assets/4217/icons/0x20c000000000000000000000b9537d11c60e8b50',
|
|
13
|
+
)
|
|
14
|
+
expect(Assets.url({ ...options, basePath: '/api/' })).toBe(
|
|
15
|
+
'https://api.tempo.xyz/api/assets/4217/icons/0x20c000000000000000000000b9537d11c60e8b50',
|
|
16
|
+
)
|
|
17
|
+
})
|
|
18
|
+
})
|
package/src/Assets.ts
CHANGED
|
@@ -24,6 +24,28 @@ export type Assets = {
|
|
|
24
24
|
put?: ((key: string, asset: Asset) => Promise<void>) | undefined
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/** Builds the public URL for an asset key using the same path shape as the data API. */
|
|
28
|
+
export function url(options: url.Options) {
|
|
29
|
+
const basePath = options.basePath?.replace(/^\/+|\/+$/g, '')
|
|
30
|
+
const path = options.path.replace(/^\/+/, '')
|
|
31
|
+
const pathname = [basePath, 'assets', String(options.chainId), path].filter(Boolean).join('/')
|
|
32
|
+
return new URL(`/${pathname}`, options.origin).toString()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export declare namespace url {
|
|
36
|
+
/** Inputs for building one public asset URL. */
|
|
37
|
+
type Options = {
|
|
38
|
+
/** Optional API base path mounted before `/assets`. */
|
|
39
|
+
basePath?: string | undefined
|
|
40
|
+
/** Chain that owns the asset. */
|
|
41
|
+
chainId: number
|
|
42
|
+
/** API origin that serves the asset. */
|
|
43
|
+
origin: string
|
|
44
|
+
/** Asset-store path below the chain id. */
|
|
45
|
+
path: string
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
27
49
|
/** Backs {@link Assets} with a Cloudflare R2 bucket. */
|
|
28
50
|
export function cloudflareR2(bucket: cloudflareR2.Bucket): Assets {
|
|
29
51
|
return {
|