tapimo 0.5.3 → 0.7.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 +15830 -7220
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +9 -1
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +4 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +1011 -412
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +4 -0
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +2 -1
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/early-access.d.ts +148 -0
- package/dist/admin/apps/early-access.d.ts.map +1 -0
- package/dist/admin/apps/early-access.js +133 -0
- package/dist/admin/apps/early-access.js.map +1 -0
- package/dist/admin/apps/organizations.d.ts +124 -1
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +97 -6
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +526 -1
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.js +214 -1
- package/dist/admin/apps/verified-tokens.js.map +1 -1
- 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 +95 -75
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +20 -0
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +18 -0
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +36 -7
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/data/App.d.ts +6260 -4924
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +11 -6
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts +34 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.js +194 -16
- package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
- package/dist/apps/data/FxOracle.d.ts +71 -0
- package/dist/apps/data/FxOracle.d.ts.map +1 -0
- package/dist/apps/data/FxOracle.js +97 -0
- package/dist/apps/data/FxOracle.js.map +1 -0
- package/dist/apps/data/index.d.ts +1 -0
- package/dist/apps/data/index.d.ts.map +1 -1
- package/dist/apps/data/index.js +1 -0
- package/dist/apps/data/index.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +3599 -1382
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +250 -88
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +872 -251
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/addresses.js +11 -9
- package/dist/apps/data/routes/addresses.js.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +77 -26
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +88 -45
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +39 -39
- package/dist/apps/data/routes/coingecko.d.ts +54 -54
- package/dist/apps/data/routes/exchanges.d.ts +856 -105
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +518 -76
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +81 -67
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +76 -91
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +80 -36
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +65 -31
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +392 -315
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +152 -77
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +167 -174
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +15 -13
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +277 -536
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +96 -77
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +157 -81
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +272 -130
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +307 -0
- package/dist/apps/data/routes/valuation.d.ts.map +1 -0
- package/dist/apps/data/routes/valuation.js +292 -0
- package/dist/apps/data/routes/valuation.js.map +1 -0
- package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +7 -5
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +103 -123
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +124 -25
- package/dist/apps/data/routes/webhooks.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 +8554 -1692
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/App.js +12 -1
- package/dist/apps/management/App.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +7 -0
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +17 -3
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +157 -162
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +31 -23
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +232 -0
- package/dist/apps/management/routes/faucet.d.ts.map +1 -0
- package/dist/apps/management/routes/faucet.js +154 -0
- package/dist/apps/management/routes/faucet.js.map +1 -0
- package/dist/apps/management/routes/invitations.d.ts +60 -60
- package/dist/apps/management/routes/invite-links.d.ts +49 -20
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +26 -1
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +6 -6
- package/dist/apps/management/routes/orgs.d.ts +42 -42
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +5 -0
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +44 -44
- package/dist/apps/management/routes/usage.d.ts +3 -0
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +4 -0
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +697 -0
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -0
- package/dist/apps/management/routes/verified-token-requests.js +271 -0
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -0
- package/dist/apps/management/routes/webhooks.d.ts +6977 -0
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -0
- package/dist/apps/management/routes/webhooks.js +573 -0
- package/dist/apps/management/routes/webhooks.js.map +1 -0
- package/dist/apps/mpp/App.d.ts +363 -0
- package/dist/apps/mpp/App.d.ts.map +1 -0
- package/dist/apps/mpp/App.js +72 -0
- package/dist/apps/mpp/App.js.map +1 -0
- package/dist/apps/mpp/Mpp.d.ts +178 -0
- package/dist/apps/mpp/Mpp.d.ts.map +1 -0
- package/dist/apps/mpp/Mpp.js +183 -0
- package/dist/apps/mpp/Mpp.js.map +1 -0
- package/dist/apps/mpp/index.d.ts +3 -0
- package/dist/apps/mpp/index.d.ts.map +1 -0
- package/dist/apps/mpp/index.js +3 -0
- package/dist/apps/mpp/index.js.map +1 -0
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +56 -9
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/db/Db.d.ts +6 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +110 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +53 -0
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +56 -0
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earlyAccess.d.ts +50 -0
- package/dist/db/tables/earlyAccess.d.ts.map +1 -0
- package/dist/db/tables/earlyAccess.js +63 -0
- package/dist/db/tables/earlyAccess.js.map +1 -0
- package/dist/db/tables/enabledBillingSources.d.ts +73 -0
- package/dist/db/tables/enabledBillingSources.d.ts.map +1 -0
- package/dist/db/tables/enabledBillingSources.js +69 -0
- package/dist/db/tables/enabledBillingSources.js.map +1 -0
- package/dist/db/tables/invitations.d.ts.map +1 -1
- package/dist/db/tables/invitations.js +3 -0
- package/dist/db/tables/invitations.js.map +1 -1
- package/dist/db/tables/inviteLinks.d.ts +10 -2
- package/dist/db/tables/inviteLinks.d.ts.map +1 -1
- package/dist/db/tables/inviteLinks.js +10 -1
- package/dist/db/tables/inviteLinks.js.map +1 -1
- package/dist/db/tables/organizations.d.ts +5 -2
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +13 -2
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +2 -0
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +2 -0
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/verifiedTokenRequests.d.ts +94 -0
- package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -0
- package/dist/db/tables/verifiedTokenRequests.js +120 -0
- package/dist/db/tables/verifiedTokenRequests.js.map +1 -0
- package/dist/db/tables/webhookSubscriptions.d.ts +14 -0
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +16 -0
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts +1 -16
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +17 -6
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +37 -5
- package/dist/handlers/relay.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 +14 -47
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/FundingQuotes.d.ts +147 -47
- package/dist/internal/FundingQuotes.d.ts.map +1 -1
- package/dist/internal/FundingQuotes.js +119 -33
- package/dist/internal/FundingQuotes.js.map +1 -1
- package/dist/internal/Log.d.ts +37 -5
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +52 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +24 -0
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +2 -2
- 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/Response.d.ts +2 -2
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +12 -4
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +14 -5
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +23 -5
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Value.d.ts +18 -0
- package/dist/internal/Value.d.ts.map +1 -1
- package/dist/internal/Value.js +11 -1
- package/dist/internal/Value.js.map +1 -1
- package/dist/internal/VerifiedTokens.d.ts.map +1 -1
- package/dist/internal/VerifiedTokens.js +10 -1
- package/dist/internal/VerifiedTokens.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +24 -3
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +34 -8
- package/dist/internal/Webhooks.js.map +1 -1
- package/package.json +7 -2
- package/src/App.test.ts +9 -4
- package/src/App.ts +23 -3
- package/src/Client.test-d.ts +733 -20
- package/src/Scope.ts +5 -0
- package/src/admin/App.test.ts +4 -0
- package/src/admin/App.ts +4 -0
- package/src/admin/apps/early-access.test.ts +125 -0
- package/src/admin/apps/early-access.ts +176 -0
- package/src/admin/apps/organizations.test.ts +86 -2
- package/src/admin/apps/organizations.ts +155 -31
- package/src/admin/apps/scopes.test.ts +5 -0
- package/src/admin/apps/verified-tokens.test.ts +201 -0
- package/src/admin/apps/verified-tokens.ts +532 -286
- package/src/admin/ui/plugin.ts +2 -1
- package/src/admin/ui/src/lib/early-access.ts +63 -0
- package/src/admin/ui/src/lib/organizations.test.ts +81 -1
- package/src/admin/ui/src/lib/organizations.ts +92 -0
- package/src/admin/ui/src/lib/verified-tokens.ts +79 -0
- package/src/admin/ui/src/routeTree.gen.ts +33 -2
- package/src/admin/ui/src/routes/__root.tsx +2 -1
- package/src/admin/ui/src/routes/api-keys.tsx +1 -1
- package/src/admin/ui/src/routes/early-access.tsx +162 -0
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +103 -0
- package/src/admin/ui/src/routes/verified-tokens.tsx +230 -19
- package/src/admin/ui.generated.ts +95 -94
- package/src/analytics/Analytics.test.ts +83 -0
- package/src/analytics/Analytics.ts +20 -0
- package/src/analytics/tables/requestEvents.ts +60 -7
- package/src/apps/composition.test.ts +11 -2
- package/src/apps/data/App.test.ts +1 -1
- package/src/apps/data/App.ts +22 -14
- package/src/apps/data/FundingQuoteProviders.test.ts +297 -4
- package/src/apps/data/FundingQuoteProviders.ts +255 -29
- package/src/apps/data/FxOracle.test.ts +118 -0
- package/src/apps/data/FxOracle.ts +153 -0
- package/src/apps/data/index.ts +1 -0
- package/src/apps/data/routes/activities.test.ts +177 -3
- package/src/apps/data/routes/activities.ts +441 -132
- package/src/apps/data/routes/addresses.ts +19 -9
- package/src/apps/data/routes/balances.test.ts +148 -11
- package/src/apps/data/routes/balances.ts +140 -51
- package/src/apps/data/routes/exchanges.test.ts +544 -9
- package/src/apps/data/routes/exchanges.ts +690 -103
- package/src/apps/data/routes/fee-amm.test.ts +47 -23
- package/src/apps/data/routes/fee-amm.ts +98 -119
- package/src/apps/data/routes/funding.test.ts +113 -8
- package/src/apps/data/routes/funding.ts +77 -51
- package/src/apps/data/routes/receipts.test.ts +129 -23
- package/src/apps/data/routes/receipts.ts +205 -100
- package/src/apps/data/routes/tokens.test.ts +43 -0
- package/src/apps/data/routes/tokens.ts +28 -13
- package/src/apps/data/routes/transactions.test.ts +72 -19
- package/src/apps/data/routes/transactions.ts +162 -92
- package/src/apps/data/routes/transfers.test.ts +341 -31
- package/src/apps/data/routes/transfers.ts +358 -158
- package/src/apps/data/routes/valuation.test.ts +437 -0
- package/src/apps/data/routes/valuation.ts +423 -0
- package/src/apps/data/routes/verified-tokens.ts +14 -2
- package/src/apps/data/routes/webhooks.test.ts +56 -8
- package/src/apps/data/routes/webhooks.ts +144 -27
- package/src/apps/index.ts +2 -1
- package/src/apps/management/App.ts +13 -0
- package/src/apps/management/routes/api-keys.test.ts +14 -0
- package/src/apps/management/routes/api-keys.ts +27 -3
- package/src/apps/management/routes/billing.test.ts +152 -20
- package/src/apps/management/routes/billing.ts +34 -18
- package/src/apps/management/routes/faucet.test.ts +87 -0
- package/src/apps/management/routes/faucet.ts +201 -0
- package/src/apps/management/routes/invite-links.test.ts +117 -0
- package/src/apps/management/routes/invite-links.ts +43 -1
- package/src/apps/management/routes/me.test.ts +9 -99
- package/src/apps/management/routes/orgs.test.ts +45 -2
- package/src/apps/management/routes/orgs.ts +6 -0
- package/src/apps/management/routes/scopes.test.ts +1 -0
- package/src/apps/management/routes/usage.test.ts +6 -0
- package/src/apps/management/routes/usage.ts +7 -0
- package/src/apps/management/routes/verified-token-requests.test.ts +377 -0
- package/src/apps/management/routes/verified-token-requests.ts +397 -0
- package/src/apps/management/routes/webhooks.test.ts +426 -0
- package/src/apps/management/routes/webhooks.ts +672 -0
- package/src/apps/mpp/App.ts +86 -0
- package/src/apps/mpp/Mpp.test.ts +193 -0
- package/src/apps/mpp/Mpp.ts +353 -0
- package/src/apps/mpp/index.ts +2 -0
- package/src/apps/mpp/internal/Adapter.ts +11 -0
- package/src/apps/mpp/internal/Error.ts +9 -0
- package/src/apps/mpp/internal/Idempotency.ts +7 -0
- package/src/apps/mpp/internal/Screening.ts +10 -0
- package/src/apps/relay/App.test.ts +88 -6
- package/src/apps/relay/App.ts +61 -9
- package/src/db/Db.test.ts +19 -0
- package/src/db/Db.ts +125 -0
- package/src/db/Schema.ts +68 -0
- package/src/db/tables/earlyAccess.ts +86 -0
- package/src/db/tables/enabledBillingSources.test.ts +303 -0
- package/src/db/tables/enabledBillingSources.ts +118 -0
- package/src/db/tables/invitations.ts +3 -0
- package/src/db/tables/inviteLinks.ts +22 -3
- package/src/db/tables/organizations.test.ts +103 -0
- package/src/db/tables/organizations.ts +18 -2
- package/src/db/tables/sponsoredTransactions.ts +4 -0
- package/src/db/tables/verifiedTokenRequests.test.ts +200 -0
- package/src/db/tables/verifiedTokenRequests.ts +182 -0
- package/src/db/tables/webhookSubscriptions.ts +31 -0
- package/src/handlers/internal/utils.ts +22 -6
- package/src/handlers/relay.errors.test.ts +153 -0
- package/src/handlers/relay.ts +42 -7
- package/src/internal/Auth.test.ts +3 -3
- package/src/internal/Auth.ts +15 -47
- package/src/internal/FundingQuotes.test.ts +161 -6
- package/src/internal/FundingQuotes.ts +141 -39
- package/src/internal/Log.test-d.ts +21 -0
- package/src/internal/Log.test.ts +141 -0
- package/src/internal/Log.ts +93 -6
- package/src/internal/MetricSink.test.ts +215 -0
- package/src/internal/MetricSink.ts +24 -0
- package/src/internal/OpenApi.ts +3 -0
- package/src/internal/Response.test.ts +28 -0
- package/src/internal/Response.ts +12 -4
- package/src/internal/Schema.ts +50 -5
- package/src/internal/Value.test.ts +20 -0
- package/src/internal/Value.ts +24 -1
- package/src/internal/VerifiedTokens.ts +9 -1
- package/src/internal/Webhooks.test.ts +140 -0
- package/src/internal/Webhooks.ts +53 -9
|
@@ -15,7 +15,7 @@ import * as Webhooks from '../../../internal/Webhooks.js';
|
|
|
15
15
|
import * as Receipts from './receipts.js';
|
|
16
16
|
import * as Transactions from './transactions.js';
|
|
17
17
|
import * as Transfers from './transfers.js';
|
|
18
|
-
/** Default cap on
|
|
18
|
+
/** Default cap on live subscriptions per owner, overridable via `webhook.maxPerOwner`. */
|
|
19
19
|
const defaultMaxPerOwner = 100;
|
|
20
20
|
/**
|
|
21
21
|
* Lifetime of an MPP-payer-owned subscription. A payer pays once, so the
|
|
@@ -816,10 +816,13 @@ export function webhooks(options = {}) {
|
|
|
816
816
|
responses: OpenApi.responses({
|
|
817
817
|
errors: {
|
|
818
818
|
400: {
|
|
819
|
-
codes: ['chain_id_unsupported'],
|
|
820
|
-
description: '
|
|
819
|
+
codes: ['body_invalid', 'chain_id_unsupported', 'filters_invalid', 'url_invalid'],
|
|
820
|
+
description: 'The request, destination, filters, or chain are invalid.',
|
|
821
|
+
},
|
|
822
|
+
403: {
|
|
823
|
+
codes: ['limit_exceeded'],
|
|
824
|
+
description: 'You have reached the webhook subscription limit.',
|
|
821
825
|
},
|
|
822
|
-
403: 'You have reached the webhook subscription limit.',
|
|
823
826
|
},
|
|
824
827
|
success: {
|
|
825
828
|
description: 'The created webhook subscription, including the one-time signing secret.',
|
|
@@ -845,12 +848,9 @@ export function webhooks(options = {}) {
|
|
|
845
848
|
return unauthorized(c);
|
|
846
849
|
const body = c.req.valid('json');
|
|
847
850
|
const chainId = body.chainId ?? c.get('chainId');
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
message: 'Webhook subscriptions do not support Zone chains.',
|
|
852
|
-
status: 400,
|
|
853
|
-
});
|
|
851
|
+
const supportedChainIds = new Set(webhook.supportedChainIds);
|
|
852
|
+
if (!supportedChainIds.has(chainId))
|
|
853
|
+
return Response.unsupportedChainId(c, chainId, supportedChainIds);
|
|
854
854
|
try {
|
|
855
855
|
const subscription = await Webhooks.createSubscription(db, {
|
|
856
856
|
chainId,
|
|
@@ -864,7 +864,7 @@ export function webhooks(options = {}) {
|
|
|
864
864
|
return c.json(Response.validated(schema.createWebhook.Response, toCreated(subscription)), 200);
|
|
865
865
|
}
|
|
866
866
|
catch (cause) {
|
|
867
|
-
return
|
|
867
|
+
return createMutationError(c, cause);
|
|
868
868
|
}
|
|
869
869
|
})
|
|
870
870
|
.get('/v1/webhooks', Auth.policy({ apiKey: { scopes: ['webhooks:read'] } }), OpenApi.validate('query', schema.listWebhooks.Query, {
|
|
@@ -1189,6 +1189,16 @@ export function webhooks(options = {}) {
|
|
|
1189
1189
|
operationId: 'updateWebhook',
|
|
1190
1190
|
responses: OpenApi.responses({
|
|
1191
1191
|
errors: {
|
|
1192
|
+
400: {
|
|
1193
|
+
codes: [
|
|
1194
|
+
'body_invalid',
|
|
1195
|
+
'destination_transition_invalid',
|
|
1196
|
+
'filters_invalid',
|
|
1197
|
+
'param_invalid',
|
|
1198
|
+
'url_invalid',
|
|
1199
|
+
],
|
|
1200
|
+
description: 'The update, destination, or filters are invalid.',
|
|
1201
|
+
},
|
|
1192
1202
|
404: {
|
|
1193
1203
|
description: 'No webhook subscription was found for that ID.',
|
|
1194
1204
|
codes: ['webhook_not_found'],
|
|
@@ -1240,7 +1250,7 @@ export function webhooks(options = {}) {
|
|
|
1240
1250
|
return c.json(Response.validated(schema.updateWebhook.Response, toPublic(subscription)), 200);
|
|
1241
1251
|
}
|
|
1242
1252
|
catch (cause) {
|
|
1243
|
-
return
|
|
1253
|
+
return updateMutationError(c, cause);
|
|
1244
1254
|
}
|
|
1245
1255
|
})
|
|
1246
1256
|
.delete('/v1/webhooks/:id{wh_[A-Za-z0-9_-]+}', Auth.policy({ apiKey: { scopes: ['webhooks:write'] } }), OpenApi.validate('param', schema.deleteWebhook.Params, {
|
|
@@ -1376,12 +1386,13 @@ export async function poll(options) {
|
|
|
1376
1386
|
let accepted;
|
|
1377
1387
|
let failed = false;
|
|
1378
1388
|
for (const item of page.items) {
|
|
1379
|
-
//
|
|
1380
|
-
//
|
|
1381
|
-
// payloads) can render `amount` in token units. Non-fatal on failure.
|
|
1389
|
+
// Token metadata is best-effort for webhooks: transfers use it for display,
|
|
1390
|
+
// while transactions expose fee-token references without blocking delivery.
|
|
1382
1391
|
const data = eventType === 'token:transfer'
|
|
1383
1392
|
? await withTokenMetadata(item.data, { cache: cache_metadata, chainId, client })
|
|
1384
|
-
:
|
|
1393
|
+
: eventType === 'transaction:included'
|
|
1394
|
+
? await withFeeTokenMetadata(item.data, { cache: cache_metadata, chainId, client })
|
|
1395
|
+
: item.data;
|
|
1385
1396
|
const envelope = Webhooks.buildEnvelope({
|
|
1386
1397
|
blockNumber: item.cursor[0],
|
|
1387
1398
|
createdAt: now(),
|
|
@@ -1430,21 +1441,31 @@ async function withTokenMetadata(data, deps) {
|
|
|
1430
1441
|
if (typeof address !== 'string')
|
|
1431
1442
|
return data;
|
|
1432
1443
|
const token = await resolveTokenMetadata(address, deps);
|
|
1433
|
-
return token
|
|
1444
|
+
return token
|
|
1445
|
+
? {
|
|
1446
|
+
...data,
|
|
1447
|
+
token: { decimals: token.decimals, symbol: token.symbol },
|
|
1448
|
+
}
|
|
1449
|
+
: data;
|
|
1434
1450
|
}
|
|
1435
1451
|
/**
|
|
1436
|
-
* Resolves
|
|
1452
|
+
* Resolves core token metadata via `token.getMetadata`, memoized per
|
|
1437
1453
|
* `(chainId, address)` with a short TTL so a busy transfer stream shares one RPC
|
|
1438
|
-
* lookup per token. Returns `undefined` on any failure
|
|
1454
|
+
* lookup per token. Returns `undefined` on any failure; metadata is a rendering
|
|
1439
1455
|
* nicety, never a delivery blocker.
|
|
1440
1456
|
*/
|
|
1441
1457
|
async function resolveTokenMetadata(address, deps) {
|
|
1442
1458
|
try {
|
|
1443
1459
|
return await Store.memoize(async () => {
|
|
1444
1460
|
const meta = await deps.client.token.getMetadata({ token: address });
|
|
1445
|
-
return {
|
|
1461
|
+
return {
|
|
1462
|
+
currency: meta.currency,
|
|
1463
|
+
decimals: meta.decimals,
|
|
1464
|
+
name: meta.name,
|
|
1465
|
+
symbol: meta.symbol,
|
|
1466
|
+
};
|
|
1446
1467
|
}, {
|
|
1447
|
-
key: `webhook:token-meta:
|
|
1468
|
+
key: `webhook:token-meta:v2:${deps.chainId}:${address}`,
|
|
1448
1469
|
store: deps.cache,
|
|
1449
1470
|
ttl: Ttl.minutes(5),
|
|
1450
1471
|
});
|
|
@@ -1454,6 +1475,60 @@ async function resolveTokenMetadata(address, deps) {
|
|
|
1454
1475
|
return undefined;
|
|
1455
1476
|
}
|
|
1456
1477
|
}
|
|
1478
|
+
/** Returns the address from an unenriched or enriched fee-token value. */
|
|
1479
|
+
function feeTokenAddress(value) {
|
|
1480
|
+
if (typeof value === 'string')
|
|
1481
|
+
return value;
|
|
1482
|
+
if (typeof value !== 'object' || value === null)
|
|
1483
|
+
return undefined;
|
|
1484
|
+
const address = value['address'];
|
|
1485
|
+
return typeof address === 'string' ? address : undefined;
|
|
1486
|
+
}
|
|
1487
|
+
/** Replaces an address-valued fee token with its resolved reference, or omits it on failure. */
|
|
1488
|
+
function withResolvedFeeToken(data, metadata) {
|
|
1489
|
+
const address = feeTokenAddress(data['feeToken']);
|
|
1490
|
+
if (!address)
|
|
1491
|
+
return data;
|
|
1492
|
+
const result = { ...data };
|
|
1493
|
+
delete result['feeToken'];
|
|
1494
|
+
const token = metadata.get(address.toLowerCase());
|
|
1495
|
+
if (token)
|
|
1496
|
+
result['feeToken'] = { address, ...token };
|
|
1497
|
+
return result;
|
|
1498
|
+
}
|
|
1499
|
+
/** Adds best-effort fee-token references to a transaction and its embedded receipt. */
|
|
1500
|
+
async function withFeeTokenMetadata(data, deps) {
|
|
1501
|
+
if (typeof data !== 'object' || data === null)
|
|
1502
|
+
return data;
|
|
1503
|
+
const transaction = data;
|
|
1504
|
+
const meta = transaction['meta'];
|
|
1505
|
+
const receipt = typeof meta === 'object' && meta !== null
|
|
1506
|
+
? meta['receipt']
|
|
1507
|
+
: undefined;
|
|
1508
|
+
const addresses = new Set();
|
|
1509
|
+
const transactionAddress = feeTokenAddress(transaction['feeToken']);
|
|
1510
|
+
if (transactionAddress)
|
|
1511
|
+
addresses.add(transactionAddress.toLowerCase());
|
|
1512
|
+
if (typeof receipt === 'object' && receipt !== null) {
|
|
1513
|
+
const receiptAddress = feeTokenAddress(receipt['feeToken']);
|
|
1514
|
+
if (receiptAddress)
|
|
1515
|
+
addresses.add(receiptAddress.toLowerCase());
|
|
1516
|
+
}
|
|
1517
|
+
if (addresses.size === 0)
|
|
1518
|
+
return data;
|
|
1519
|
+
const resolved = await Promise.all([...addresses].map(async (address) => [address, await resolveTokenMetadata(address, deps)]));
|
|
1520
|
+
const metadata = new Map(resolved.filter((entry) => entry[1] !== undefined));
|
|
1521
|
+
const result = withResolvedFeeToken(transaction, metadata);
|
|
1522
|
+
if (typeof receipt !== 'object' || receipt === null)
|
|
1523
|
+
return result;
|
|
1524
|
+
return {
|
|
1525
|
+
...result,
|
|
1526
|
+
meta: {
|
|
1527
|
+
...meta,
|
|
1528
|
+
receipt: withResolvedFeeToken(receipt, metadata),
|
|
1529
|
+
},
|
|
1530
|
+
};
|
|
1531
|
+
}
|
|
1457
1532
|
/** Returns the live RPC head block number for the chain. */
|
|
1458
1533
|
export async function getRpcHead(client) {
|
|
1459
1534
|
return Number(await client.getBlockNumber());
|
|
@@ -2080,8 +2155,8 @@ const txFields = {
|
|
|
2080
2155
|
* Scans included transactions over the confirmed window. Each block is fetched
|
|
2081
2156
|
* with full transactions via `eth_getBlockByNumber(n, true)`; receipts are
|
|
2082
2157
|
* fetched lazily (only when a `status`/`gasUsed`/`feePayer` filter needs them).
|
|
2083
|
-
* The delivered payload
|
|
2084
|
-
*
|
|
2158
|
+
* The delivered payload starts from `Transactions.humanizeTransaction`; the
|
|
2159
|
+
* poller then resolves its fee-token references.
|
|
2085
2160
|
*/
|
|
2086
2161
|
async function scanTxs(options) {
|
|
2087
2162
|
const { cache, cursor, filters, maxBlocks, safeBlock } = options;
|
|
@@ -2121,7 +2196,13 @@ async function scanTxs(options) {
|
|
|
2121
2196
|
if (includeReceipt && receipt) {
|
|
2122
2197
|
const r = Receipts.schema.Rpc.Receipt.safeParse(receipt);
|
|
2123
2198
|
if (r.success)
|
|
2124
|
-
data = {
|
|
2199
|
+
data = {
|
|
2200
|
+
...data,
|
|
2201
|
+
meta: {
|
|
2202
|
+
...data['meta'],
|
|
2203
|
+
receipt: Receipts.humanizeReceipt(r.data),
|
|
2204
|
+
},
|
|
2205
|
+
};
|
|
2125
2206
|
}
|
|
2126
2207
|
items.push({ cursor: [n, index], data });
|
|
2127
2208
|
}
|
|
@@ -2228,7 +2309,7 @@ function redactDestination(destination) {
|
|
|
2228
2309
|
return { ...destination, token: redactedBetterstackToken };
|
|
2229
2310
|
return destination;
|
|
2230
2311
|
}
|
|
2231
|
-
function
|
|
2312
|
+
function createMutationError(c, cause) {
|
|
2232
2313
|
if (cause instanceof Webhooks.InvalidUrlError)
|
|
2233
2314
|
return Response.error(c, { code: 'url_invalid', message: cause.message, status: 400 });
|
|
2234
2315
|
if (cause instanceof Webhooks.InvalidFilterError)
|
|
@@ -2242,6 +2323,24 @@ function mutationError(c, cause) {
|
|
|
2242
2323
|
return Response.error(c, { code: 'limit_exceeded', message: cause.message, status: 403 });
|
|
2243
2324
|
return Response.upstream(c, cause);
|
|
2244
2325
|
}
|
|
2326
|
+
function updateMutationError(c, cause) {
|
|
2327
|
+
if (cause instanceof Webhooks.InvalidDestinationTransitionError)
|
|
2328
|
+
return Response.error(c, {
|
|
2329
|
+
code: 'destination_transition_invalid',
|
|
2330
|
+
message: cause.message,
|
|
2331
|
+
status: 400,
|
|
2332
|
+
});
|
|
2333
|
+
if (cause instanceof Webhooks.InvalidUrlError)
|
|
2334
|
+
return Response.error(c, { code: 'url_invalid', message: cause.message, status: 400 });
|
|
2335
|
+
if (cause instanceof Webhooks.InvalidFilterError)
|
|
2336
|
+
return Response.error(c, {
|
|
2337
|
+
code: 'filters_invalid',
|
|
2338
|
+
details: cause.details,
|
|
2339
|
+
message: cause.message,
|
|
2340
|
+
status: 400,
|
|
2341
|
+
});
|
|
2342
|
+
return Response.upstream(c, cause);
|
|
2343
|
+
}
|
|
2245
2344
|
function notFound(c) {
|
|
2246
2345
|
return Response.error(c, {
|
|
2247
2346
|
code: 'webhook_not_found',
|