tapimo 0.7.0 → 0.7.2
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/ApiKeys.d.ts +24 -7
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +17 -5
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +12104 -7861
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +191 -128
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +10 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +17 -4
- package/dist/Assets.js.map +1 -1
- package/dist/Scope.d.ts +19 -8
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +25 -9
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +1 -1
- package/dist/admin/App.d.ts +601 -20
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +12 -2
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +94 -11
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +141 -32
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +1069 -0
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
- package/dist/admin/apps/earn-vaults.js +409 -0
- package/dist/admin/apps/earn-vaults.js.map +1 -0
- package/dist/admin/apps/verified-tokens.d.ts +166 -166
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +151 -95
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts +2 -0
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +18 -2
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +22 -1
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +59 -39
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/Zones.d.ts +8335 -0
- package/dist/apps/Zones.d.ts.map +1 -0
- package/dist/apps/Zones.js +38 -0
- package/dist/apps/Zones.js.map +1 -0
- package/dist/apps/data/App.d.ts +14377 -10165
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +91 -19
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FxOracle.d.ts +1 -1
- package/dist/apps/data/FxOracle.d.ts.map +1 -1
- package/dist/apps/data/index.d.ts +0 -1
- package/dist/apps/data/index.d.ts.map +1 -1
- package/dist/apps/data/index.js +0 -1
- package/dist/apps/data/index.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +32 -32
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +130 -65
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +312 -312
- package/dist/apps/data/routes/balances.d.ts +18 -18
- package/dist/apps/data/routes/balances.js +5 -5
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +176 -176
- package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
- package/dist/apps/data/routes/coingecko.js +62 -35
- package/dist/apps/data/routes/coingecko.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +2144 -0
- package/dist/apps/data/routes/earn.d.ts.map +1 -0
- package/dist/apps/data/routes/earn.js +947 -0
- package/dist/apps/data/routes/earn.js.map +1 -0
- package/dist/apps/data/routes/exchanges.d.ts +1231 -324
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +656 -193
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +59 -8
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +4092 -387
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +1403 -256
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +5 -5
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +19 -2
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +265 -265
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +11 -11
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.d.ts +5 -5
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +211 -22
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +36 -36
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +49 -9
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +116 -88
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +198 -91
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +55 -55
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +78 -39
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +78 -29
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +165 -67
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +10 -10
- package/dist/apps/data/routes/valuation.js +2 -2
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +34 -9
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +5 -3
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +175 -65
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +281 -0
- package/dist/apps/data/routes/zones.d.ts.map +1 -0
- package/dist/apps/data/routes/zones.js +252 -0
- package/dist/apps/data/routes/zones.js.map +1 -0
- package/dist/apps/docs/reference.js +6 -5
- package/dist/apps/docs/reference.js.map +1 -1
- package/dist/apps/index.d.ts +2 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +2 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/management/App.d.ts +670 -670
- package/dist/apps/management/Billing.d.ts +8 -0
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +12 -0
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/Error.d.ts +12 -0
- package/dist/apps/management/Error.d.ts.map +1 -0
- package/dist/apps/management/Error.js +10 -0
- package/dist/apps/management/Error.js.map +1 -0
- package/dist/apps/management/routes/api-keys.d.ts +5 -5
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +2 -8
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +119 -119
- package/dist/apps/management/routes/faucet.d.ts +35 -35
- package/dist/apps/management/routes/invitations.d.ts +62 -62
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +4 -10
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +30 -30
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +78 -78
- package/dist/apps/management/routes/orgs.d.ts +48 -48
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +2 -8
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +9 -9
- package/dist/apps/management/routes/scopes.js +2 -2
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +80 -80
- package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
- package/dist/apps/management/routes/webhooks.d.ts +50 -50
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +15 -3
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/App.d.ts +55 -56
- package/dist/apps/mpp/App.d.ts.map +1 -1
- package/dist/apps/mpp/App.js +192 -27
- package/dist/apps/mpp/App.js.map +1 -1
- package/dist/apps/mpp/Mpp.d.ts +0 -20
- package/dist/apps/mpp/Mpp.d.ts.map +1 -1
- package/dist/apps/mpp/Mpp.js +0 -24
- package/dist/apps/mpp/Mpp.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Adapter.js +66 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -0
- package/dist/apps/mpp/internal/Error.d.ts +4 -0
- package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Error.js +41 -0
- package/dist/apps/mpp/internal/Error.js.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.js +28 -0
- package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
- package/dist/apps/mpp/internal/Policy.d.ts +46 -0
- package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Policy.js +57 -0
- package/dist/apps/mpp/internal/Policy.js.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.js +18 -0
- package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
- package/dist/apps/mpp/internal/Screening.d.ts +35 -0
- package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Screening.js +20 -0
- package/dist/apps/mpp/internal/Screening.js.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.js +103 -0
- package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
- package/dist/apps/mpp/internal/Utils.d.ts +7 -0
- package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Utils.js +24 -0
- package/dist/apps/mpp/internal/Utils.js.map +1 -0
- package/dist/apps/relay/App.js +184 -24
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/relay/Sponsorships.d.ts +4 -0
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +16 -7
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/db/Db.d.ts +20 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +342 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +921 -1
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +269 -1
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +68 -0
- package/dist/db/tables/earnVaults.d.ts.map +1 -0
- package/dist/db/tables/earnVaults.js +72 -0
- package/dist/db/tables/earnVaults.js.map +1 -0
- package/dist/db/tables/fundingCatalog.d.ts +56 -0
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
- package/dist/db/tables/fundingCatalog.js +85 -0
- package/dist/db/tables/fundingCatalog.js.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.js +206 -0
- package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
- package/dist/db/tables/fundingDeposits.d.ts +115 -0
- package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
- package/dist/db/tables/fundingDeposits.js +100 -0
- package/dist/db/tables/fundingDeposits.js.map +1 -0
- package/dist/db/tables/fundingIdempotency.d.ts +91 -0
- package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
- package/dist/db/tables/fundingIdempotency.js +103 -0
- package/dist/db/tables/fundingIdempotency.js.map +1 -0
- package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
- package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferEvents.js +18 -0
- package/dist/db/tables/fundingTransferEvents.js.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.js +27 -0
- package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
- package/dist/db/tables/fundingTransfers.d.ts +82 -0
- package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
- package/dist/db/tables/fundingTransfers.js +89 -0
- package/dist/db/tables/fundingTransfers.js.map +1 -0
- package/dist/db/tables/organizations.d.ts +8 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +35 -0
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/projects.d.ts +8 -0
- package/dist/db/tables/projects.d.ts.map +1 -1
- package/dist/db/tables/projects.js +16 -0
- package/dist/db/tables/projects.js.map +1 -1
- package/dist/db/tables/requestUsage.d.ts +13 -0
- package/dist/db/tables/requestUsage.d.ts.map +1 -1
- package/dist/db/tables/requestUsage.js +16 -0
- package/dist/db/tables/requestUsage.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +4 -2
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +14 -4
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/users.d.ts +8 -0
- package/dist/db/tables/users.d.ts.map +1 -1
- package/dist/db/tables/users.js +16 -0
- package/dist/db/tables/users.js.map +1 -1
- package/dist/db/tables/verifiedTokens.d.ts +14 -7
- package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
- package/dist/db/tables/verifiedTokens.js +9 -7
- package/dist/db/tables/verifiedTokens.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +24 -3
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/relay.js +108 -108
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +26 -0
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +35 -2
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +16 -10
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/Cursor.js +1 -1
- package/dist/internal/Cursor.js.map +1 -1
- package/dist/internal/EarnRates.d.ts +89 -0
- package/dist/internal/EarnRates.d.ts.map +1 -0
- package/dist/internal/EarnRates.js +266 -0
- package/dist/internal/EarnRates.js.map +1 -0
- package/dist/internal/EarnVaults.d.ts +171 -0
- package/dist/internal/EarnVaults.d.ts.map +1 -0
- package/dist/internal/EarnVaults.js +547 -0
- package/dist/internal/EarnVaults.js.map +1 -0
- package/dist/internal/EdgeCache.d.ts +9 -2
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +36 -9
- package/dist/internal/EdgeCache.js.map +1 -1
- package/dist/internal/Id.d.ts +11 -0
- package/dist/internal/Id.d.ts.map +1 -1
- package/dist/internal/Id.js +13 -0
- package/dist/internal/Id.js.map +1 -1
- package/dist/internal/Idempotency.d.ts +83 -0
- package/dist/internal/Idempotency.d.ts.map +1 -0
- package/dist/internal/Idempotency.js +113 -0
- package/dist/internal/Idempotency.js.map +1 -0
- package/dist/internal/Log.d.ts +64 -9
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +29 -7
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +47 -1
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +1 -1
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +3 -0
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Provider.d.ts +14 -0
- package/dist/internal/Provider.d.ts.map +1 -0
- package/dist/internal/Provider.js +5 -0
- package/dist/internal/Provider.js.map +1 -0
- package/dist/internal/Schema.d.ts +8 -3
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +24 -13
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +6 -0
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +35 -0
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +43 -24
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +79 -11
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Viem.d.ts +82 -65
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +83 -12
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +34 -28
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +9 -0
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +15 -10
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/exchange/Provider.d.ts +219 -0
- package/dist/internal/exchange/Provider.d.ts.map +1 -0
- package/dist/internal/exchange/Provider.js +117 -0
- package/dist/internal/exchange/Provider.js.map +1 -0
- package/dist/internal/exchange/index.d.ts +2 -0
- package/dist/internal/exchange/index.d.ts.map +1 -0
- package/dist/internal/exchange/index.js +2 -0
- package/dist/internal/exchange/index.js.map +1 -0
- package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
- package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
- package/dist/internal/exchange/providers/uniswap.js +553 -0
- package/dist/internal/exchange/providers/uniswap.js.map +1 -0
- package/dist/internal/funding/Action.d.ts +55 -0
- package/dist/internal/funding/Action.d.ts.map +1 -0
- package/dist/internal/funding/Action.js +74 -0
- package/dist/internal/funding/Action.js.map +1 -0
- package/dist/internal/funding/Catalog.d.ts +107 -0
- package/dist/internal/funding/Catalog.d.ts.map +1 -0
- package/dist/internal/funding/Catalog.js +270 -0
- package/dist/internal/funding/Catalog.js.map +1 -0
- package/dist/internal/funding/Chain.d.ts +76 -0
- package/dist/internal/funding/Chain.d.ts.map +1 -0
- package/dist/internal/funding/Chain.js +38 -0
- package/dist/internal/funding/Chain.js.map +1 -0
- package/dist/internal/funding/Deposit.d.ts +366 -0
- package/dist/internal/funding/Deposit.d.ts.map +1 -0
- package/dist/internal/funding/Deposit.js +286 -0
- package/dist/internal/funding/Deposit.js.map +1 -0
- package/dist/internal/funding/DepositAddress.d.ts +345 -0
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
- package/dist/internal/funding/DepositAddress.js +189 -0
- package/dist/internal/funding/DepositAddress.js.map +1 -0
- package/dist/internal/funding/Evidence.d.ts +52 -0
- package/dist/internal/funding/Evidence.d.ts.map +1 -0
- package/dist/internal/funding/Evidence.js +314 -0
- package/dist/internal/funding/Evidence.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts +1186 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -0
- package/dist/internal/funding/Provider.js +1081 -0
- package/dist/internal/funding/Provider.js.map +1 -0
- package/dist/internal/funding/Reconciliation.d.ts +113 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
- package/dist/internal/funding/Reconciliation.js +676 -0
- package/dist/internal/funding/Reconciliation.js.map +1 -0
- package/dist/internal/funding/Route.d.ts +21 -0
- package/dist/internal/funding/Route.d.ts.map +1 -0
- package/dist/internal/funding/Route.js +5 -0
- package/dist/internal/funding/Route.js.map +1 -0
- package/dist/internal/funding/Subsidy.d.ts +113 -0
- package/dist/internal/funding/Subsidy.d.ts.map +1 -0
- package/dist/internal/funding/Subsidy.js +138 -0
- package/dist/internal/funding/Subsidy.js.map +1 -0
- package/dist/internal/funding/Token.d.ts +41 -0
- package/dist/internal/funding/Token.d.ts.map +1 -0
- package/dist/internal/funding/Token.js +22 -0
- package/dist/internal/funding/Token.js.map +1 -0
- package/dist/internal/funding/Transfer.d.ts +643 -0
- package/dist/internal/funding/Transfer.d.ts.map +1 -0
- package/dist/internal/funding/Transfer.js +332 -0
- package/dist/internal/funding/Transfer.js.map +1 -0
- package/dist/internal/funding/index.d.ts +13 -0
- package/dist/internal/funding/index.d.ts.map +1 -0
- package/dist/internal/funding/index.js +13 -0
- package/dist/internal/funding/index.js.map +1 -0
- package/dist/internal/funding/providers/across.d.ts +21 -0
- package/dist/internal/funding/providers/across.d.ts.map +1 -0
- package/dist/internal/funding/providers/across.js +117 -0
- package/dist/internal/funding/providers/across.js.map +1 -0
- package/dist/internal/funding/providers/relay.d.ts +46 -0
- package/dist/internal/funding/providers/relay.d.ts.map +1 -0
- package/dist/internal/funding/providers/relay.js +464 -0
- package/dist/internal/funding/providers/relay.js.map +1 -0
- package/dist/internal/funding/providers/rhino.d.ts +15 -0
- package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
- package/dist/internal/funding/providers/rhino.js +116 -0
- package/dist/internal/funding/providers/rhino.js.map +1 -0
- package/dist/internal/funding/providers/squid.d.ts +19 -0
- package/dist/internal/funding/providers/squid.d.ts.map +1 -0
- package/dist/internal/funding/providers/squid.js +120 -0
- package/dist/internal/funding/providers/squid.js.map +1 -0
- package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
- package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
- package/dist/internal/funding/providers/symbiosis.js +176 -0
- package/dist/internal/funding/providers/symbiosis.js.map +1 -0
- package/dist/internal/index.d.ts +5 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +5 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/webhookDestinations/url.js +61 -57
- package/dist/internal/webhookDestinations/url.js.map +1 -1
- package/dist/providers/index.d.ts +43 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/package.json +9 -4
- package/src/ApiKeys.test.ts +11 -7
- package/src/ApiKeys.ts +37 -9
- package/src/App.test.ts +85 -10
- package/src/App.ts +224 -137
- package/src/Assets.ts +29 -4
- package/src/Client.test-d.ts +650 -30
- package/src/Scope.test.ts +19 -0
- package/src/Scope.ts +28 -11
- package/src/Webhooks.test.ts +25 -0
- package/src/Webhooks.ts +1 -1
- package/src/admin/App.test.ts +9 -2
- package/src/admin/App.ts +32 -9
- package/src/admin/apps/api-keys.test.ts +167 -23
- package/src/admin/apps/api-keys.ts +166 -28
- package/src/admin/apps/earn-vaults.test.ts +338 -0
- package/src/admin/apps/earn-vaults.ts +572 -0
- package/src/admin/apps/scopes.test.ts +16 -1
- package/src/admin/ui/plugin.ts +2 -2
- package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
- package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
- package/src/admin/ui/src/components/Page.tsx +1 -1
- package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
- package/src/admin/ui/src/lib/api-keys.ts +37 -7
- package/src/admin/ui/src/lib/client.ts +1 -1
- package/src/admin/ui/src/lib/config.ts +1 -1
- package/src/admin/ui/src/lib/early-access.ts +8 -9
- package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
- package/src/admin/ui/src/lib/format.ts +13 -0
- package/src/admin/ui/src/lib/organizations.test.ts +14 -4
- package/src/admin/ui/src/lib/organizations.ts +7 -1
- package/src/admin/ui/src/lib/response.ts +22 -0
- package/src/admin/ui/src/lib/scopes.test.ts +19 -11
- package/src/admin/ui/src/lib/scopes.ts +28 -7
- package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
- package/src/admin/ui/src/routeTree.gen.ts +70 -7
- package/src/admin/ui/src/router.tsx +2 -2
- package/src/admin/ui/src/routes/__root.tsx +9 -8
- package/src/admin/ui/src/routes/api-keys.tsx +475 -64
- package/src/admin/ui/src/routes/early-access.tsx +5 -12
- package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
- package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
- package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
- package/src/admin/ui/src/routes/organizations.tsx +4 -7
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
- package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
- package/src/admin/ui/vite.config.ts +4 -1
- package/src/admin/ui.generated.ts +189 -95
- package/src/analytics/Analytics.test.ts +69 -10
- package/src/analytics/Analytics.ts +20 -1
- package/src/analytics/tables/requestEvents.ts +79 -37
- package/src/apps/Zones.test.ts +33 -0
- package/src/apps/Zones.ts +40 -0
- package/src/apps/composition.test.ts +84 -1
- package/src/apps/data/App.test.ts +38 -9
- package/src/apps/data/App.ts +96 -33
- package/src/apps/data/FxOracle.ts +1 -1
- package/src/apps/data/index.ts +0 -1
- package/src/apps/data/routes/activities.test.ts +82 -6
- package/src/apps/data/routes/activities.ts +131 -71
- package/src/apps/data/routes/balances.test.ts +50 -37
- package/src/apps/data/routes/balances.ts +5 -5
- package/src/apps/data/routes/blocks.test.ts +2 -0
- package/src/apps/data/routes/coingecko.test.ts +22 -0
- package/src/apps/data/routes/coingecko.ts +84 -48
- package/src/apps/data/routes/earn.test.ts +1108 -0
- package/src/apps/data/routes/earn.ts +1391 -0
- package/src/apps/data/routes/exchanges.test.ts +82 -33
- package/src/apps/data/routes/exchanges.ts +842 -227
- package/src/apps/data/routes/fee-amm.test.ts +4 -6
- package/src/apps/data/routes/fee-amm.ts +69 -12
- package/src/apps/data/routes/funding.test.ts +2712 -221
- package/src/apps/data/routes/funding.ts +1604 -387
- package/src/apps/data/routes/indexer.test.ts +43 -34
- package/src/apps/data/routes/indexer.ts +19 -2
- package/src/apps/data/routes/receipts.test.ts +5 -3
- package/src/apps/data/routes/receipts.ts +13 -11
- package/src/apps/data/routes/rpc.test.ts +446 -28
- package/src/apps/data/routes/rpc.ts +243 -25
- package/src/apps/data/routes/tokenlist.test.ts +15 -0
- package/src/apps/data/routes/tokenlist.ts +88 -22
- package/src/apps/data/routes/tokens.ts +262 -86
- package/src/apps/data/routes/transactions.test.ts +2 -0
- package/src/apps/data/routes/transactions.ts +77 -42
- package/src/apps/data/routes/transfers.test.ts +166 -4
- package/src/apps/data/routes/transfers.ts +216 -78
- package/src/apps/data/routes/valuation.test.ts +62 -9
- package/src/apps/data/routes/valuation.ts +2 -2
- package/src/apps/data/routes/verified-tokens.test.ts +51 -0
- package/src/apps/data/routes/verified-tokens.ts +52 -15
- package/src/apps/data/routes/webhooks.test.ts +432 -33
- package/src/apps/data/routes/webhooks.ts +189 -79
- package/src/apps/data/routes/zones.test.ts +473 -0
- package/src/apps/data/routes/zones.ts +338 -0
- package/src/apps/docs/reference.ts +8 -6
- package/src/apps/index.ts +2 -1
- package/src/apps/management/Billing.test.ts +29 -0
- package/src/apps/management/Billing.ts +23 -0
- package/src/apps/management/Error.ts +12 -0
- package/src/apps/management/routes/api-keys.test.ts +5 -3
- package/src/apps/management/routes/api-keys.ts +2 -9
- package/src/apps/management/routes/invitations.ts +4 -11
- package/src/apps/management/routes/orgs.ts +2 -9
- package/src/apps/management/routes/scopes.test.ts +7 -2
- package/src/apps/management/routes/scopes.ts +2 -2
- package/src/apps/management/routes/webhooks.test.ts +6 -1
- package/src/apps/management/routes/webhooks.ts +15 -3
- package/src/apps/mpp/App.ts +276 -29
- package/src/apps/mpp/Mpp.test.ts +631 -26
- package/src/apps/mpp/Mpp.ts +0 -42
- package/src/apps/mpp/internal/Adapter.ts +108 -3
- package/src/apps/mpp/internal/Error.test.ts +33 -0
- package/src/apps/mpp/internal/Error.ts +44 -6
- package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
- package/src/apps/mpp/internal/Idempotency.ts +59 -5
- package/src/apps/mpp/internal/Policy.test.ts +122 -0
- package/src/apps/mpp/internal/Policy.ts +98 -0
- package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
- package/src/apps/mpp/internal/ScreenManager.ts +41 -0
- package/src/apps/mpp/internal/Screening.ts +40 -3
- package/src/apps/mpp/internal/Sponsorship.ts +144 -0
- package/src/apps/mpp/internal/Utils.ts +30 -0
- package/src/apps/relay/App.test.ts +495 -64
- package/src/apps/relay/App.ts +234 -24
- package/src/apps/relay/Sponsorships.test.ts +51 -0
- package/src/apps/relay/Sponsorships.ts +19 -7
- package/src/db/Db.ts +439 -0
- package/src/db/Schema.ts +325 -2
- package/src/db/tables/earnVaults.test.ts +185 -0
- package/src/db/tables/earnVaults.ts +151 -0
- package/src/db/tables/fundingCatalog.test.ts +108 -0
- package/src/db/tables/fundingCatalog.ts +157 -0
- package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
- package/src/db/tables/fundingDepositAddresses.ts +376 -0
- package/src/db/tables/fundingDeposits.test.ts +261 -0
- package/src/db/tables/fundingDeposits.ts +229 -0
- package/src/db/tables/fundingIdempotency.test.ts +182 -0
- package/src/db/tables/fundingIdempotency.ts +180 -0
- package/src/db/tables/fundingTransferEvents.ts +28 -0
- package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
- package/src/db/tables/fundingTransferTransactions.ts +37 -0
- package/src/db/tables/fundingTransfers.test.ts +89 -0
- package/src/db/tables/fundingTransfers.ts +153 -0
- package/src/db/tables/organizations.test.ts +88 -0
- package/src/db/tables/organizations.ts +42 -1
- package/src/db/tables/projects.ts +16 -0
- package/src/db/tables/requestUsage.ts +23 -0
- package/src/db/tables/sponsoredTransactions.test.ts +52 -2
- package/src/db/tables/sponsoredTransactions.ts +18 -6
- package/src/db/tables/users.ts +16 -0
- package/src/db/tables/verifiedTokens.ts +19 -14
- package/src/db/tables/webhookSubscriptions.ts +58 -3
- package/src/handlers/relay.test.ts +2 -0
- package/src/handlers/relay.ts +95 -99
- package/src/internal/Auth.test.ts +48 -0
- package/src/internal/Auth.ts +61 -2
- package/src/internal/Cache.ts +13 -9
- package/src/internal/Cursor.test.ts +2 -2
- package/src/internal/Cursor.ts +1 -1
- package/src/internal/EarnRates.test.ts +125 -0
- package/src/internal/EarnRates.ts +409 -0
- package/src/internal/EarnVaults.test.ts +195 -0
- package/src/internal/EarnVaults.ts +876 -0
- package/src/internal/EdgeCache.test.ts +37 -5
- package/src/internal/EdgeCache.ts +39 -7
- package/src/internal/Id.ts +14 -0
- package/src/internal/Idempotency.test.ts +109 -0
- package/src/internal/Idempotency.ts +237 -0
- package/src/internal/Log.test-d.ts +41 -8
- package/src/internal/Log.test.ts +189 -8
- package/src/internal/Log.ts +124 -17
- package/src/internal/MetricSink.test.ts +244 -4
- package/src/internal/MetricSink.ts +51 -1
- package/src/internal/OpenApi.ts +3 -0
- package/src/internal/Provider.test.ts +17 -0
- package/src/internal/Provider.ts +17 -0
- package/src/internal/Schema.test.ts +13 -0
- package/src/internal/Schema.ts +41 -24
- package/src/internal/Store.test.ts +25 -0
- package/src/internal/Store.ts +46 -0
- package/src/internal/Tidx.local.test.ts +78 -3
- package/src/internal/Tidx.test.ts +212 -18
- package/src/internal/Tidx.ts +112 -32
- package/src/internal/VerifiedTokens.test.ts +15 -0
- package/src/internal/Viem.test.ts +170 -17
- package/src/internal/Viem.ts +111 -28
- package/src/internal/WebhookDestination.ts +25 -23
- package/src/internal/Webhooks.test.ts +59 -0
- package/src/internal/Webhooks.ts +34 -10
- package/src/internal/exchange/Provider.test.ts +216 -0
- package/src/internal/exchange/Provider.ts +326 -0
- package/src/internal/exchange/index.test.ts +6 -0
- package/src/internal/exchange/index.ts +1 -0
- package/src/internal/exchange/providers/uniswap.test.ts +122 -0
- package/src/internal/exchange/providers/uniswap.ts +682 -0
- package/src/internal/funding/Action.test.ts +138 -0
- package/src/internal/funding/Action.ts +117 -0
- package/src/internal/funding/Catalog.test.ts +311 -0
- package/src/internal/funding/Catalog.ts +347 -0
- package/src/internal/funding/Chain.test.ts +79 -0
- package/src/internal/funding/Chain.ts +120 -0
- package/src/internal/funding/Deposit.test.ts +26 -0
- package/src/internal/funding/Deposit.ts +453 -0
- package/src/internal/funding/DepositAddress.test.ts +18 -0
- package/src/internal/funding/DepositAddress.ts +312 -0
- package/src/internal/funding/Evidence.test.ts +297 -0
- package/src/internal/funding/Evidence.ts +430 -0
- package/src/internal/funding/Provider.test.ts +1328 -0
- package/src/internal/funding/Provider.ts +1796 -0
- package/src/internal/funding/Reconciliation.local.test.ts +504 -0
- package/src/internal/funding/Reconciliation.test.ts +2020 -0
- package/src/internal/funding/Reconciliation.ts +930 -0
- package/src/internal/funding/Route.test.ts +66 -0
- package/src/internal/funding/Route.ts +29 -0
- package/src/internal/funding/Subsidy.local.test.ts +152 -0
- package/src/internal/funding/Subsidy.test.ts +75 -0
- package/src/internal/funding/Subsidy.ts +260 -0
- package/src/internal/funding/Token.test.ts +47 -0
- package/src/internal/funding/Token.ts +59 -0
- package/src/internal/funding/Transfer.test.ts +369 -0
- package/src/internal/funding/Transfer.ts +522 -0
- package/src/internal/funding/index.test.ts +20 -0
- package/src/internal/funding/index.ts +12 -0
- package/src/internal/funding/providers/across.ts +149 -0
- package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
- package/src/internal/funding/providers/relay.test.ts +474 -0
- package/src/internal/funding/providers/relay.ts +559 -0
- package/src/internal/funding/providers/rhino.ts +139 -0
- package/src/internal/funding/providers/squid.ts +151 -0
- package/src/internal/funding/providers/symbiosis.ts +221 -0
- package/src/internal/index.test.ts +5 -1
- package/src/internal/index.ts +5 -1
- package/src/internal/webhookDestinations/url.ts +49 -45
- package/src/providers/index.test.ts +14 -0
- package/src/providers/index.ts +54 -0
- package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
- package/dist/apps/data/FundingQuoteProviders.js +0 -775
- package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
- package/dist/internal/FundingQuotes.d.ts +0 -864
- package/dist/internal/FundingQuotes.d.ts.map +0 -1
- package/dist/internal/FundingQuotes.js +0 -672
- package/dist/internal/FundingQuotes.js.map +0 -1
- package/src/apps/data/FundingQuoteProviders.ts +0 -1043
- package/src/internal/FundingQuotes.test.ts +0 -456
- package/src/internal/FundingQuotes.ts +0 -944
|
@@ -15,7 +15,7 @@ import type * as Tidx from '../../../internal/Tidx.js'
|
|
|
15
15
|
import * as Ttl from '../../../internal/Ttl.js'
|
|
16
16
|
import * as Value from '../../../internal/Value.js'
|
|
17
17
|
import type * as Viem from '../../../internal/Viem.js'
|
|
18
|
-
import
|
|
18
|
+
import * as WebhookDestination from '../../../internal/WebhookDestination.js'
|
|
19
19
|
import * as Webhooks from '../../../internal/Webhooks.js'
|
|
20
20
|
import * as Receipts from './receipts.js'
|
|
21
21
|
import * as Transactions from './transactions.js'
|
|
@@ -1355,6 +1355,12 @@ export function webhooks(options: webhooks.Options = {}) {
|
|
|
1355
1355
|
return Response.unsupportedChainId(c, chainId, supportedChainIds)
|
|
1356
1356
|
|
|
1357
1357
|
try {
|
|
1358
|
+
// Preserve destination errors before the creation-time RPC dependency.
|
|
1359
|
+
WebhookDestination.assertDestination(body.destination)
|
|
1360
|
+
const maxPerOwner = webhook.maxPerOwner ?? defaultMaxPerOwner
|
|
1361
|
+
if ((await Webhooks.countSubscriptions(db, owner)) >= maxPerOwner)
|
|
1362
|
+
throw new Webhooks.LimitExceededError(maxPerOwner)
|
|
1363
|
+
const startBlockNumber = await getRpcHead(c.get('getClient')(chainId))
|
|
1358
1364
|
const subscription = await Webhooks.createSubscription(
|
|
1359
1365
|
db,
|
|
1360
1366
|
{
|
|
@@ -1366,7 +1372,10 @@ export function webhooks(options: webhooks.Options = {}) {
|
|
|
1366
1372
|
owner,
|
|
1367
1373
|
...(owner.type === 'mpp' ? { ttl: mppTtlMs } : {}),
|
|
1368
1374
|
},
|
|
1369
|
-
{
|
|
1375
|
+
{
|
|
1376
|
+
maxPerOwner,
|
|
1377
|
+
startBlockNumber,
|
|
1378
|
+
},
|
|
1370
1379
|
)
|
|
1371
1380
|
return c.json(
|
|
1372
1381
|
Response.validated(schema.createWebhook.Response, toCreated(subscription)),
|
|
@@ -1878,18 +1887,17 @@ export declare namespace webhooks {
|
|
|
1878
1887
|
* can equal it).
|
|
1879
1888
|
*/
|
|
1880
1889
|
const endOfBlockIndex = 2_147_483_647
|
|
1890
|
+
const scanPageSize = 100
|
|
1881
1891
|
|
|
1882
1892
|
/** A scanned row paired with its `(block, index)` keyset position. */
|
|
1883
1893
|
type ScanItem = { cursor: readonly [number, number]; data: unknown }
|
|
1884
1894
|
|
|
1885
1895
|
/**
|
|
1886
|
-
* The result of scanning one subscription
|
|
1896
|
+
* The result of scanning one subscription page. Two flavours:
|
|
1887
1897
|
*
|
|
1888
|
-
* - **window** (the RPC scanners):
|
|
1889
|
-
*
|
|
1890
|
-
*
|
|
1891
|
-
* clean scan even when no rows matched — a rare-filter subscription never
|
|
1892
|
-
* rescans the same empty range.
|
|
1898
|
+
* - **window** (the RPC scanners): `scannedThrough` is the highest block fully
|
|
1899
|
+
* scanned. A batch-limited page omits it, so the poller resumes after the last
|
|
1900
|
+
* dispatched row instead of skipping later matches.
|
|
1893
1901
|
* - **keyset** (the TIDX legacy scanners): rows come back `LIMIT`-bounded, so
|
|
1894
1902
|
* the page only reports whether `hasMore` rows remain past it; the poller
|
|
1895
1903
|
* advances only past the last dispatched row (jumping to the window end only
|
|
@@ -1901,6 +1909,27 @@ type ScanPage = {
|
|
|
1901
1909
|
scannedThrough?: number | undefined
|
|
1902
1910
|
}
|
|
1903
1911
|
|
|
1912
|
+
/** Per-subscription state retained between fair scan passes. */
|
|
1913
|
+
type PollState = {
|
|
1914
|
+
cursor: string
|
|
1915
|
+
remaining: number
|
|
1916
|
+
safeBlock: number
|
|
1917
|
+
subscription: Webhooks.Subscription
|
|
1918
|
+
}
|
|
1919
|
+
|
|
1920
|
+
/** Returns `candidate` only when it is lexicographically after `current`. */
|
|
1921
|
+
function laterCursor(current: string, candidate: string): string {
|
|
1922
|
+
const before = Cursor.decode(current, ['int', 'int'])
|
|
1923
|
+
const after = Cursor.decode(candidate, ['int', 'int'])
|
|
1924
|
+
if (!after) return current
|
|
1925
|
+
if (!before) return candidate
|
|
1926
|
+
const [beforeBlock, beforeIndex] = before as [number, number]
|
|
1927
|
+
const [afterBlock, afterIndex] = after as [number, number]
|
|
1928
|
+
return afterBlock > beforeBlock || (afterBlock === beforeBlock && afterIndex > beforeIndex)
|
|
1929
|
+
? candidate
|
|
1930
|
+
: current
|
|
1931
|
+
}
|
|
1932
|
+
|
|
1904
1933
|
/**
|
|
1905
1934
|
* Polls the chain over RPC for new events and dispatches a signed envelope per
|
|
1906
1935
|
* matching row, advancing each active subscription's `(block, index)` keyset
|
|
@@ -1921,10 +1950,12 @@ type ScanPage = {
|
|
|
1921
1950
|
*
|
|
1922
1951
|
* Cursor advances only past successfully dispatched rows, so a dispatch failure
|
|
1923
1952
|
* pauses that subscription at the last good position and the next tick resumes.
|
|
1953
|
+
* Scan failures leave that subscription unchanged; the first error is rethrown
|
|
1954
|
+
* after the remaining subscriptions run.
|
|
1924
1955
|
*/
|
|
1925
1956
|
export async function poll(options: poll.Options): Promise<poll.Result> {
|
|
1926
1957
|
const {
|
|
1927
|
-
batchSize =
|
|
1958
|
+
batchSize = 200,
|
|
1928
1959
|
cache: cache_metadata = Store.memory(),
|
|
1929
1960
|
chainId,
|
|
1930
1961
|
client,
|
|
@@ -1967,80 +1998,134 @@ export async function poll(options: poll.Options): Promise<poll.Result> {
|
|
|
1967
1998
|
scanned: 0,
|
|
1968
1999
|
subscriptions: 0,
|
|
1969
2000
|
}
|
|
2001
|
+
const scanErrors: unknown[] = []
|
|
1970
2002
|
|
|
1971
2003
|
for (const eventType of eventTypes) {
|
|
1972
2004
|
const legacy = eventType === 'token:transfer'
|
|
1973
2005
|
const safeBlock = legacy ? Math.max(0, (await resolveTidxHead()) - confirmations) : rpcSafeBlock
|
|
1974
2006
|
const subscriptions = await Webhooks.listActive(db, chainId, eventType)
|
|
2007
|
+
let states: PollState[] = []
|
|
1975
2008
|
for (const subscription of subscriptions) {
|
|
1976
2009
|
result.subscriptions++
|
|
1977
|
-
|
|
2010
|
+
let cursor = await Webhooks.getCursor(db, subscription.id)
|
|
1978
2011
|
if (cursor === null) {
|
|
1979
|
-
//
|
|
1980
|
-
// confirmed
|
|
1981
|
-
|
|
1982
|
-
|
|
2012
|
+
// Legacy subscriptions without a creation checkpoint anchor at the
|
|
2013
|
+
// current confirmed head, avoiding a genesis backfill.
|
|
2014
|
+
await Webhooks.compareAndSetCursor(db, {
|
|
2015
|
+
cursor: Cursor.encode([safeBlock, endOfBlockIndex]),
|
|
2016
|
+
expectedCursor: null,
|
|
2017
|
+
subscriptionId: subscription.id,
|
|
2018
|
+
})
|
|
1983
2019
|
continue
|
|
1984
2020
|
}
|
|
1985
|
-
const
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
2021
|
+
const checkpoint = Cursor.decode(cursor, ['int'])
|
|
2022
|
+
if (checkpoint) {
|
|
2023
|
+
// Creation checkpoints record the live head without finalizing it. Rebase
|
|
2024
|
+
// to this poller's confirmed boundary so replacement blocks stay eligible.
|
|
2025
|
+
const confirmedCursor = Cursor.encode([
|
|
2026
|
+
Math.max(0, (checkpoint[0] as number) - confirmations),
|
|
2027
|
+
endOfBlockIndex,
|
|
2028
|
+
])
|
|
2029
|
+
const committed = await Webhooks.compareAndSetCursor(db, {
|
|
2030
|
+
cursor: confirmedCursor,
|
|
2031
|
+
expectedCursor: cursor,
|
|
2032
|
+
subscriptionId: subscription.id,
|
|
2033
|
+
})
|
|
2034
|
+
if (!committed) continue
|
|
2035
|
+
cursor = confirmedCursor
|
|
2036
|
+
}
|
|
2037
|
+
const window = legacy ? undefined : scanWindow(cursor, safeBlock, maxBlocks)
|
|
2038
|
+
states.push({
|
|
1989
2039
|
cursor,
|
|
1990
|
-
|
|
1991
|
-
safeBlock,
|
|
2040
|
+
remaining: batchSize,
|
|
2041
|
+
safeBlock: window?.to ?? safeBlock,
|
|
1992
2042
|
subscription,
|
|
1993
|
-
tidx,
|
|
1994
2043
|
})
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
const
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2044
|
+
}
|
|
2045
|
+
|
|
2046
|
+
// Every subscription gets one bounded page before any subscription gets a
|
|
2047
|
+
// continuation page, preserving fairness while allowing catch-up.
|
|
2048
|
+
while (states.length > 0) {
|
|
2049
|
+
const continuations: PollState[] = []
|
|
2050
|
+
for (const state of states) {
|
|
2051
|
+
const { subscription } = state
|
|
2052
|
+
let page: ScanPage
|
|
2053
|
+
try {
|
|
2054
|
+
page = await scanSubscription({
|
|
2055
|
+
batchSize: Math.min(scanPageSize, state.remaining),
|
|
2056
|
+
cache,
|
|
2057
|
+
client,
|
|
2058
|
+
cursor: state.cursor,
|
|
2059
|
+
maxBlocks,
|
|
2060
|
+
safeBlock: state.safeBlock,
|
|
2061
|
+
subscription,
|
|
2062
|
+
tidx,
|
|
2063
|
+
})
|
|
2064
|
+
} catch (error) {
|
|
2065
|
+
scanErrors.push(error)
|
|
2066
|
+
continue
|
|
2067
|
+
}
|
|
2068
|
+
result.scanned += page.items.length
|
|
2069
|
+
state.remaining -= page.items.length
|
|
2070
|
+
|
|
2071
|
+
let accepted: readonly [number, number] | undefined
|
|
2072
|
+
let failed = false
|
|
2073
|
+
for (const item of page.items) {
|
|
2074
|
+
// Token metadata is best-effort for webhooks: transfers use it for display,
|
|
2075
|
+
// while transactions expose fee-token references without blocking delivery.
|
|
2076
|
+
const data =
|
|
2077
|
+
eventType === 'token:transfer'
|
|
2078
|
+
? await withTokenMetadata(item.data, { cache: cache_metadata, chainId, client })
|
|
2079
|
+
: eventType === 'transaction:included'
|
|
2080
|
+
? await withFeeTokenMetadata(item.data, { cache: cache_metadata, chainId, client })
|
|
2081
|
+
: item.data
|
|
2082
|
+
const envelope = Webhooks.buildEnvelope({
|
|
2083
|
+
blockNumber: item.cursor[0],
|
|
2084
|
+
createdAt: now(),
|
|
2085
|
+
data,
|
|
2086
|
+
logIndex: item.cursor[1],
|
|
2087
|
+
subscription,
|
|
2088
|
+
})
|
|
2089
|
+
const delivered = await dispatch({ envelope, subscription })
|
|
2090
|
+
if (!delivered.ok) {
|
|
2091
|
+
result.failed++
|
|
2092
|
+
failed = true
|
|
2093
|
+
break
|
|
2094
|
+
}
|
|
2095
|
+
accepted = item.cursor
|
|
2096
|
+
result.dispatched++
|
|
2020
2097
|
}
|
|
2021
|
-
accepted = item.cursor
|
|
2022
|
-
result.dispatched++
|
|
2023
|
-
}
|
|
2024
2098
|
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2099
|
+
// Persist every accepted page before another subscription begins its
|
|
2100
|
+
// continuation, so a later scan failure retains completed work.
|
|
2101
|
+
const candidate = (() => {
|
|
2102
|
+
if (failed) return accepted ? Cursor.encode([...accepted]) : undefined
|
|
2103
|
+
if (page.scannedThrough !== undefined)
|
|
2104
|
+
return Cursor.encode([page.scannedThrough, endOfBlockIndex])
|
|
2105
|
+
if (accepted) return Cursor.encode([...accepted])
|
|
2106
|
+
if (!page.hasMore) return Cursor.encode([state.safeBlock, endOfBlockIndex])
|
|
2107
|
+
return undefined
|
|
2108
|
+
})()
|
|
2109
|
+
const cursor = candidate ? laterCursor(state.cursor, candidate) : state.cursor
|
|
2110
|
+
const progressed = cursor !== state.cursor
|
|
2111
|
+
let committed = false
|
|
2112
|
+
if (progressed) {
|
|
2113
|
+
committed = await Webhooks.compareAndSetCursor(db, {
|
|
2114
|
+
cursor,
|
|
2115
|
+
expectedCursor: state.cursor,
|
|
2116
|
+
subscriptionId: subscription.id,
|
|
2117
|
+
})
|
|
2118
|
+
if (committed) state.cursor = cursor
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2121
|
+
if (!failed && page.hasMore === true && committed && state.remaining > 0)
|
|
2122
|
+
continuations.push(state)
|
|
2123
|
+
}
|
|
2124
|
+
states = continuations
|
|
2041
2125
|
}
|
|
2042
2126
|
}
|
|
2043
2127
|
|
|
2128
|
+
if (scanErrors.length > 0) throw scanErrors[0]
|
|
2044
2129
|
return result
|
|
2045
2130
|
}
|
|
2046
2131
|
|
|
@@ -2054,7 +2139,7 @@ export declare namespace poll {
|
|
|
2054
2139
|
}
|
|
2055
2140
|
/** Options for {@link poll}. */
|
|
2056
2141
|
type Options = {
|
|
2057
|
-
/** Max matching rows scanned per subscription per tick (default
|
|
2142
|
+
/** Max matching rows scanned per subscription per tick (default 200). */
|
|
2058
2143
|
batchSize?: number | undefined
|
|
2059
2144
|
/** Cache store for the token-metadata memoize (defaults to a fresh in-memory store; pass a persistent one to share lookups across ticks). */
|
|
2060
2145
|
cache?: Store.Store | undefined
|
|
@@ -2269,6 +2354,7 @@ async function scanSubscription(options: {
|
|
|
2269
2354
|
|
|
2270
2355
|
if (subscription.eventType === 'log:emitted')
|
|
2271
2356
|
return scanLogs({
|
|
2357
|
+
batchSize,
|
|
2272
2358
|
cache,
|
|
2273
2359
|
client,
|
|
2274
2360
|
cursor,
|
|
@@ -2279,6 +2365,7 @@ async function scanSubscription(options: {
|
|
|
2279
2365
|
|
|
2280
2366
|
if (subscription.eventType === 'block:created')
|
|
2281
2367
|
return scanBlocks({
|
|
2368
|
+
batchSize,
|
|
2282
2369
|
cache,
|
|
2283
2370
|
cursor,
|
|
2284
2371
|
filters: parseFilters('block:created', subscription.filters),
|
|
@@ -2288,6 +2375,7 @@ async function scanSubscription(options: {
|
|
|
2288
2375
|
|
|
2289
2376
|
if (subscription.eventType === 'transaction:included')
|
|
2290
2377
|
return scanTxs({
|
|
2378
|
+
batchSize,
|
|
2291
2379
|
cache,
|
|
2292
2380
|
cursor,
|
|
2293
2381
|
filters: parseFilters('transaction:included', subscription.filters),
|
|
@@ -2302,6 +2390,9 @@ async function scanSubscription(options: {
|
|
|
2302
2390
|
{ tidx },
|
|
2303
2391
|
{ chainId, cursor, limit: batchSize, order: 'asc', toBlock: safeBlock, ...filters },
|
|
2304
2392
|
)
|
|
2393
|
+
// A cap-truncated fallback sample is an arbitrary subset: dispatching it
|
|
2394
|
+
// would advance the cursor past unseen matches. Hold position and retry.
|
|
2395
|
+
if (page.capped) return { hasMore: true, items: [] }
|
|
2305
2396
|
return { hasMore: page.hasMore, items: page.items }
|
|
2306
2397
|
}
|
|
2307
2398
|
|
|
@@ -2485,7 +2576,7 @@ type RpcBlock = Awaited<ReturnType<Viem.getClient.ReturnType['getBlock']>>
|
|
|
2485
2576
|
/** Per-tick lazy cache of fetched block headers, full blocks, and receipts. */
|
|
2486
2577
|
type ChainCache = {
|
|
2487
2578
|
/** Full raw block (with transactions) via `eth_getBlockByNumber(n, true)`. */
|
|
2488
|
-
block(n: number): Promise<Record<string, unknown
|
|
2579
|
+
block(n: number): Promise<Record<string, unknown>>
|
|
2489
2580
|
/** Viem-formatted block header (transaction hashes only) via `getBlock`. */
|
|
2490
2581
|
header(n: number): Promise<RpcBlock | undefined>
|
|
2491
2582
|
/** Receipts for a block keyed by lowercased transaction hash. */
|
|
@@ -2495,7 +2586,7 @@ type ChainCache = {
|
|
|
2495
2586
|
/** Builds a per-tick {@link ChainCache} bound to a viem client. */
|
|
2496
2587
|
function createChainCache(client: Viem.getClient.ReturnType): ChainCache {
|
|
2497
2588
|
const headers = new Map<number, Promise<RpcBlock | undefined>>()
|
|
2498
|
-
const blocks = new Map<number, Promise<Record<string, unknown
|
|
2589
|
+
const blocks = new Map<number, Promise<Record<string, unknown>>>()
|
|
2499
2590
|
const receipts = new Map<number, Promise<Map<string, Record<string, unknown>>>>()
|
|
2500
2591
|
return {
|
|
2501
2592
|
block(n) {
|
|
@@ -2506,7 +2597,10 @@ function createChainCache(client: Viem.getClient.ReturnType): ChainCache {
|
|
|
2506
2597
|
p = rpc<Record<string, unknown> | null>(client, 'eth_getBlockByNumber', [
|
|
2507
2598
|
blockTag(n),
|
|
2508
2599
|
true,
|
|
2509
|
-
]).then((
|
|
2600
|
+
]).then((block) => {
|
|
2601
|
+
if (!block) throw new BlockUnavailableError(n)
|
|
2602
|
+
return block
|
|
2603
|
+
})
|
|
2510
2604
|
blocks.set(n, p)
|
|
2511
2605
|
}
|
|
2512
2606
|
return p
|
|
@@ -2514,9 +2608,7 @@ function createChainCache(client: Viem.getClient.ReturnType): ChainCache {
|
|
|
2514
2608
|
header(n) {
|
|
2515
2609
|
let p = headers.get(n)
|
|
2516
2610
|
if (!p) {
|
|
2517
|
-
p = client
|
|
2518
|
-
.getBlock({ blockNumber: BigInt(n), includeTransactions: false })
|
|
2519
|
-
.catch(() => undefined)
|
|
2611
|
+
p = client.getBlock({ blockNumber: BigInt(n), includeTransactions: false })
|
|
2520
2612
|
headers.set(n, p)
|
|
2521
2613
|
}
|
|
2522
2614
|
return p
|
|
@@ -2744,6 +2836,7 @@ function decodeScanLog(log: ScanLog, event: AbiEvent): ScanLog {
|
|
|
2744
2836
|
* all operators are re-checked in JS over the narrow window.
|
|
2745
2837
|
*/
|
|
2746
2838
|
async function scanLogs(options: {
|
|
2839
|
+
batchSize: number
|
|
2747
2840
|
cache: ChainCache
|
|
2748
2841
|
client: Viem.getClient.ReturnType
|
|
2749
2842
|
cursor: string | undefined
|
|
@@ -2751,7 +2844,7 @@ async function scanLogs(options: {
|
|
|
2751
2844
|
maxBlocks: number
|
|
2752
2845
|
safeBlock: number
|
|
2753
2846
|
}): Promise<ScanPage> {
|
|
2754
|
-
const { cache, client, cursor, filters, maxBlocks, safeBlock } = options
|
|
2847
|
+
const { batchSize, cache, client, cursor, filters, maxBlocks, safeBlock } = options
|
|
2755
2848
|
const f = filters as z.output<typeof schema.LogFilters>
|
|
2756
2849
|
const window = scanWindow(cursor, safeBlock, maxBlocks)
|
|
2757
2850
|
if (!window) return { items: [], scannedThrough: undefined }
|
|
@@ -2807,7 +2900,10 @@ async function scanLogs(options: {
|
|
|
2807
2900
|
const header = await cache.header(blockNumber)
|
|
2808
2901
|
const timestamp = blockIso(header)
|
|
2809
2902
|
const data = toLogEvent(log, timestamp, f.signature, event)
|
|
2810
|
-
if (data)
|
|
2903
|
+
if (data) {
|
|
2904
|
+
items.push({ cursor: [data.blockNumber, data.logIndex], data })
|
|
2905
|
+
if (items.length >= batchSize) return { hasMore: true, items }
|
|
2906
|
+
}
|
|
2811
2907
|
}
|
|
2812
2908
|
return { items, scannedThrough: window.to }
|
|
2813
2909
|
}
|
|
@@ -2908,13 +3004,14 @@ function toBlockEvent(block: RpcBlock): BlockEventData | undefined {
|
|
|
2908
3004
|
* empty filter is a per-block heartbeat.
|
|
2909
3005
|
*/
|
|
2910
3006
|
async function scanBlocks(options: {
|
|
3007
|
+
batchSize: number
|
|
2911
3008
|
cache: ChainCache
|
|
2912
3009
|
cursor: string | undefined
|
|
2913
3010
|
filters: Record<string, unknown>
|
|
2914
3011
|
maxBlocks: number
|
|
2915
3012
|
safeBlock: number
|
|
2916
3013
|
}): Promise<ScanPage> {
|
|
2917
|
-
const { cache, cursor, filters, maxBlocks, safeBlock } = options
|
|
3014
|
+
const { batchSize, cache, cursor, filters, maxBlocks, safeBlock } = options
|
|
2918
3015
|
const f = filters as z.output<typeof schema.BlockFilters>
|
|
2919
3016
|
const window = scanWindow(cursor, safeBlock, maxBlocks)
|
|
2920
3017
|
if (!window) return { items: [], scannedThrough: undefined }
|
|
@@ -2926,7 +3023,10 @@ async function scanBlocks(options: {
|
|
|
2926
3023
|
if (!block) continue
|
|
2927
3024
|
if (!matchesBlock(block, f)) continue
|
|
2928
3025
|
const data = toBlockEvent(block)
|
|
2929
|
-
if (data)
|
|
3026
|
+
if (data) {
|
|
3027
|
+
items.push({ cursor: [data.number, 0], data })
|
|
3028
|
+
if (items.length >= batchSize) return { hasMore: true, items }
|
|
3029
|
+
}
|
|
2930
3030
|
}
|
|
2931
3031
|
return { items, scannedThrough: window.to }
|
|
2932
3032
|
}
|
|
@@ -2979,13 +3079,14 @@ const txFields = {
|
|
|
2979
3079
|
* poller then resolves its fee-token references.
|
|
2980
3080
|
*/
|
|
2981
3081
|
async function scanTxs(options: {
|
|
3082
|
+
batchSize: number
|
|
2982
3083
|
cache: ChainCache
|
|
2983
3084
|
cursor: string | undefined
|
|
2984
3085
|
filters: Record<string, unknown>
|
|
2985
3086
|
maxBlocks: number
|
|
2986
3087
|
safeBlock: number
|
|
2987
3088
|
}): Promise<ScanPage> {
|
|
2988
|
-
const { cache, cursor, filters, maxBlocks, safeBlock } = options
|
|
3089
|
+
const { batchSize, cache, cursor, filters, maxBlocks, safeBlock } = options
|
|
2989
3090
|
const f = filters as z.output<typeof schema.TxFilters>
|
|
2990
3091
|
const window = scanWindow(cursor, safeBlock, maxBlocks)
|
|
2991
3092
|
if (!window) return { items: [], scannedThrough: undefined }
|
|
@@ -2999,10 +3100,10 @@ async function scanTxs(options: {
|
|
|
2999
3100
|
const items: ScanItem[] = []
|
|
3000
3101
|
for (let n = window.from; n <= window.to; n++) {
|
|
3001
3102
|
const block = await cache.block(n)
|
|
3002
|
-
const txs = Array.isArray(block
|
|
3103
|
+
const txs = Array.isArray(block['transactions']) ? (block['transactions'] as unknown[]) : []
|
|
3003
3104
|
if (txs.length === 0) continue
|
|
3004
3105
|
const receipts = needsReceipt || includeReceipt ? await cache.receipts(n) : undefined
|
|
3005
|
-
const timestamp = asString(block
|
|
3106
|
+
const timestamp = asString(block['timestamp'])
|
|
3006
3107
|
|
|
3007
3108
|
for (let i = 0; i < txs.length; i++) {
|
|
3008
3109
|
const tx = txs[i] as Record<string, unknown>
|
|
@@ -3028,6 +3129,7 @@ async function scanTxs(options: {
|
|
|
3028
3129
|
}
|
|
3029
3130
|
}
|
|
3030
3131
|
items.push({ cursor: [n, index], data })
|
|
3132
|
+
if (items.length >= batchSize) return { hasMore: true, items }
|
|
3031
3133
|
}
|
|
3032
3134
|
}
|
|
3033
3135
|
return { items, scannedThrough: window.to }
|
|
@@ -3195,3 +3297,11 @@ function unauthorized(c: Context<App.Environment>) {
|
|
|
3195
3297
|
status: 401,
|
|
3196
3298
|
})
|
|
3197
3299
|
}
|
|
3300
|
+
|
|
3301
|
+
class BlockUnavailableError extends Error {
|
|
3302
|
+
override name = 'Webhooks.BlockUnavailableError'
|
|
3303
|
+
|
|
3304
|
+
constructor(blockNumber: number) {
|
|
3305
|
+
super(`Block ${blockNumber} is unavailable.`)
|
|
3306
|
+
}
|
|
3307
|
+
}
|