tapimo 0.7.1 → 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 +99 -43
- 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 +12125 -7913
- 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 +1625 -718
- 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 +108 -108
- 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 +30 -30
- 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 +263 -263
- 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 +39 -8
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +114 -86
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +194 -91
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +53 -53
- 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 +76 -27
- 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 +42 -42
- package/dist/apps/data/routes/valuation.js +2 -2
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +369 -367
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +161 -59
- 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 +2 -2
- 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 +2 -2
- 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/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 +183 -23
- 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 +15 -6
- 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 +16 -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 +2 -2
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +1 -1
- 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 +8 -1
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +33 -7
- 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 +6 -1
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +20 -11
- 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 +113 -43
- 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 +28 -11
- 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.ts +72 -19
- package/src/apps/data/routes/tokens.ts +258 -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/webhooks.test.ts +386 -43
- package/src/apps/data/routes/webhooks.ts +172 -71
- 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 +493 -62
- package/src/apps/relay/App.ts +233 -23
- package/src/apps/relay/Sponsorships.test.ts +49 -0
- package/src/apps/relay/Sponsorships.ts +18 -6
- 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.ts +16 -0
- package/src/db/tables/projects.ts +16 -0
- package/src/db/tables/requestUsage.ts +23 -0
- package/src/db/tables/sponsoredTransactions.test.ts +11 -0
- package/src/db/tables/sponsoredTransactions.ts +3 -3
- 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 +19 -0
- package/src/internal/EdgeCache.ts +35 -5
- 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.ts +27 -17
- 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
package/src/handlers/relay.ts
CHANGED
|
@@ -152,7 +152,7 @@ export function relay(options: relay.Options = {}): Handler {
|
|
|
152
152
|
: undefined
|
|
153
153
|
const externalFeePayerUrl =
|
|
154
154
|
typeof parameters['feePayer'] === 'string'
|
|
155
|
-
?
|
|
155
|
+
? ExternalFeePayerUrl.normalize(parameters['feePayer'], {
|
|
156
156
|
allowUnsafe: internal_allowUnsafeUrls,
|
|
157
157
|
})
|
|
158
158
|
: undefined
|
|
@@ -1563,118 +1563,114 @@ function mergeCallsFromRequest(
|
|
|
1563
1563
|
return merged
|
|
1564
1564
|
}
|
|
1565
1565
|
|
|
1566
|
-
|
|
1567
|
-
function normalizeExternalFeePayerUrl(
|
|
1568
|
-
value: string,
|
|
1569
|
-
options: normalizeExternalFeePayerUrl.Options = {},
|
|
1570
|
-
): string {
|
|
1571
|
-
let url: URL
|
|
1572
|
-
try {
|
|
1573
|
-
url = new URL(value)
|
|
1574
|
-
} catch {
|
|
1575
|
-
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL.' })
|
|
1576
|
-
}
|
|
1577
|
-
|
|
1578
|
-
const allowUnsafe = options.allowUnsafe === true
|
|
1579
|
-
if (url.protocol !== 'http:' && url.protocol !== 'https:')
|
|
1580
|
-
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL protocol.' })
|
|
1581
|
-
if (!allowUnsafe && url.protocol !== 'https:')
|
|
1582
|
-
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL protocol.' })
|
|
1583
|
-
if (!allowUnsafe && isUnsafeHostname(url.hostname))
|
|
1584
|
-
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL host.' })
|
|
1585
|
-
|
|
1586
|
-
url.username = ''
|
|
1587
|
-
url.password = ''
|
|
1588
|
-
url.hash = ''
|
|
1589
|
-
return url.href
|
|
1590
|
-
}
|
|
1591
|
-
|
|
1592
|
-
declare namespace normalizeExternalFeePayerUrl {
|
|
1566
|
+
namespace ExternalFeePayerUrl {
|
|
1593
1567
|
type Options = {
|
|
1594
1568
|
/** Whether to allow non-HTTPS or local/private external fee payer URLs. */
|
|
1595
1569
|
allowUnsafe?: boolean | undefined
|
|
1596
1570
|
}
|
|
1597
|
-
}
|
|
1598
1571
|
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
return isUnsafeIpv6(ipv6)
|
|
1608
|
-
}
|
|
1572
|
+
/** Normalizes external fee-payer relay URLs before forwarding fill payloads. */
|
|
1573
|
+
export function normalize(value: string, options: Options = {}): string {
|
|
1574
|
+
let url: URL
|
|
1575
|
+
try {
|
|
1576
|
+
url = new URL(value)
|
|
1577
|
+
} catch {
|
|
1578
|
+
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL.' })
|
|
1579
|
+
}
|
|
1609
1580
|
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1581
|
+
const allowUnsafe = options.allowUnsafe === true
|
|
1582
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:')
|
|
1583
|
+
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL protocol.' })
|
|
1584
|
+
if (!allowUnsafe && url.protocol !== 'https:')
|
|
1585
|
+
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL protocol.' })
|
|
1586
|
+
if (!allowUnsafe && isUnsafeHostname(url.hostname))
|
|
1587
|
+
throw new RpcResponse.InvalidParamsError({ message: 'Invalid fee payer URL host.' })
|
|
1588
|
+
|
|
1589
|
+
url.username = ''
|
|
1590
|
+
url.password = ''
|
|
1591
|
+
url.hash = ''
|
|
1592
|
+
return url.href
|
|
1593
|
+
}
|
|
1616
1594
|
|
|
1617
|
-
function
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1595
|
+
function isUnsafeHostname(hostname: string): boolean {
|
|
1596
|
+
const host = normalizeHostname(hostname)
|
|
1597
|
+
if (host === 'localhost' || host.endsWith('.localhost')) return true
|
|
1598
|
+
const ipv4 = parseIpv4(host)
|
|
1599
|
+
if (ipv4) return isUnsafeIpv4(ipv4)
|
|
1600
|
+
if (!host.includes(':')) return false
|
|
1601
|
+
const ipv6 = parseIpv6(host)
|
|
1602
|
+
if (!ipv6) return true
|
|
1603
|
+
return isUnsafeIpv6(ipv6)
|
|
1604
|
+
}
|
|
1624
1605
|
|
|
1625
|
-
function
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
if (a === 192 && b === 168) return true
|
|
1632
|
-
if (a >= 224) return true
|
|
1633
|
-
return false
|
|
1634
|
-
}
|
|
1606
|
+
function normalizeHostname(hostname: string): string {
|
|
1607
|
+
return hostname
|
|
1608
|
+
.toLowerCase()
|
|
1609
|
+
.replace(/^\[|\]$/g, '')
|
|
1610
|
+
.split('%')[0]!
|
|
1611
|
+
}
|
|
1635
1612
|
|
|
1636
|
-
function
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1613
|
+
function parseIpv4(value: string): [number, number, number, number] | undefined {
|
|
1614
|
+
const parts = value.split('.')
|
|
1615
|
+
if (parts.length !== 4 || parts.some((part) => !/^\d+$/.test(part))) return undefined
|
|
1616
|
+
const numbers = parts.map((part) => Number(part))
|
|
1617
|
+
if (numbers.some((part) => !Number.isInteger(part) || part < 0 || part > 255)) return undefined
|
|
1618
|
+
return numbers as [number, number, number, number]
|
|
1619
|
+
}
|
|
1641
1620
|
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1621
|
+
function isUnsafeIpv4(parts: [number, number, number, number]): boolean {
|
|
1622
|
+
const [a, b] = parts
|
|
1623
|
+
if (a === 0 || a === 10 || a === 127) return true
|
|
1624
|
+
if (a === 100 && b >= 64 && b <= 127) return true
|
|
1625
|
+
if (a === 169 && b === 254) return true
|
|
1626
|
+
if (a === 172 && b >= 16 && b <= 31) return true
|
|
1627
|
+
if (a === 192 && b === 168) return true
|
|
1628
|
+
return a >= 224
|
|
1629
|
+
}
|
|
1646
1630
|
|
|
1647
|
-
|
|
1648
|
-
|
|
1631
|
+
function parseIpv6(
|
|
1632
|
+
value: string,
|
|
1633
|
+
): [number, number, number, number, number, number, number, number] | undefined {
|
|
1634
|
+
const halves = value.split('::')
|
|
1635
|
+
if (halves.length > 2) return undefined
|
|
1649
1636
|
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
return numbers as [number, number, number, number, number, number, number, number]
|
|
1655
|
-
}
|
|
1637
|
+
const left = halves[0] ? halves[0].split(':') : []
|
|
1638
|
+
const right = halves[1] ? halves[1].split(':') : []
|
|
1639
|
+
const missing = halves.length === 2 ? 8 - left.length - right.length : 0
|
|
1640
|
+
if (missing < 0) return undefined
|
|
1656
1641
|
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
if (parts.every((part) => part === 0)) return true
|
|
1660
|
-
if (parts.slice(0, 7).every((part) => part === 0) && parts[7] === 1) return true
|
|
1661
|
-
if ((a & 0xfe00) === 0xfc00) return true
|
|
1662
|
-
if ((a & 0xffc0) === 0xfe80) return true
|
|
1663
|
-
if ((a & 0xffc0) === 0xfec0) return true
|
|
1664
|
-
if ((a & 0xff00) === 0xff00) return true
|
|
1665
|
-
|
|
1666
|
-
const ipv4 = ipv4FromIpv6(parts)
|
|
1667
|
-
if (ipv4) return isUnsafeIpv4(ipv4)
|
|
1668
|
-
return false
|
|
1669
|
-
}
|
|
1642
|
+
const parts = [...left, ...Array(missing).fill('0'), ...right]
|
|
1643
|
+
if (parts.length !== 8) return undefined
|
|
1670
1644
|
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
)
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1645
|
+
const numbers = parts.map((part) =>
|
|
1646
|
+
/^[\da-f]{1,4}$/i.test(part) ? Number.parseInt(part, 16) : NaN,
|
|
1647
|
+
)
|
|
1648
|
+
if (numbers.some((part) => !Number.isInteger(part) || part < 0 || part > 0xffff))
|
|
1649
|
+
return undefined
|
|
1650
|
+
return numbers as [number, number, number, number, number, number, number, number]
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1653
|
+
function isUnsafeIpv6(parts: [number, number, number, number, number, number, number, number]) {
|
|
1654
|
+
const [a] = parts
|
|
1655
|
+
if (parts.every((part) => part === 0)) return true
|
|
1656
|
+
if (parts.slice(0, 7).every((part) => part === 0) && parts[7] === 1) return true
|
|
1657
|
+
if ((a & 0xfe00) === 0xfc00) return true
|
|
1658
|
+
if ((a & 0xffc0) === 0xfe80) return true
|
|
1659
|
+
if ((a & 0xffc0) === 0xfec0) return true
|
|
1660
|
+
if ((a & 0xff00) === 0xff00) return true
|
|
1661
|
+
|
|
1662
|
+
const ipv4 = ipv4FromIpv6(parts)
|
|
1663
|
+
return ipv4 ? isUnsafeIpv4(ipv4) : false
|
|
1664
|
+
}
|
|
1665
|
+
|
|
1666
|
+
function ipv4FromIpv6(
|
|
1667
|
+
parts: [number, number, number, number, number, number, number, number],
|
|
1668
|
+
): [number, number, number, number] | undefined {
|
|
1669
|
+
const mapped = parts.slice(0, 5).every((part) => part === 0) && parts[5] === 0xffff
|
|
1670
|
+
const compatible = parts.slice(0, 6).every((part) => part === 0)
|
|
1671
|
+
if (!mapped && !compatible) return undefined
|
|
1672
|
+
return [parts[6]! >> 8, parts[6]! & 0xff, parts[7]! >> 8, parts[7]! & 0xff]
|
|
1673
|
+
}
|
|
1678
1674
|
}
|
|
1679
1675
|
|
|
1680
1676
|
/**
|
|
@@ -1889,6 +1889,54 @@ describe('ensureProject', () => {
|
|
|
1889
1889
|
})
|
|
1890
1890
|
})
|
|
1891
1891
|
|
|
1892
|
+
describe('parseCredential', () => {
|
|
1893
|
+
test('parses credentials keyed by chain id', () => {
|
|
1894
|
+
const credential = Auth.parseCredential(
|
|
1895
|
+
JSON.stringify({ 4217: 'mainnet:secret', 421700001: 'zone:secret' }),
|
|
1896
|
+
)
|
|
1897
|
+
|
|
1898
|
+
expect(credential).toEqual({ 4217: 'mainnet:secret', 421700001: 'zone:secret' })
|
|
1899
|
+
})
|
|
1900
|
+
|
|
1901
|
+
test('supports a shared credential', () => {
|
|
1902
|
+
expect(Auth.parseCredential('shared:secret')).toBe('shared:secret')
|
|
1903
|
+
})
|
|
1904
|
+
|
|
1905
|
+
test('rejects malformed credential maps', () => {
|
|
1906
|
+
expect(() => Auth.parseCredential('{"4217":1}')).toThrowErrorMatchingInlineSnapshot(
|
|
1907
|
+
`[Error: Expected a credential or a chain-id-to-credential JSON object.]`,
|
|
1908
|
+
)
|
|
1909
|
+
})
|
|
1910
|
+
})
|
|
1911
|
+
|
|
1912
|
+
describe('resolveCredential', () => {
|
|
1913
|
+
test('infers Basic auth from a credential containing a colon', () => {
|
|
1914
|
+
expect(Auth.resolveCredential({ chainId: 4217, value: 'user:password' })).toEqual({
|
|
1915
|
+
basicAuth: 'user:password',
|
|
1916
|
+
})
|
|
1917
|
+
})
|
|
1918
|
+
|
|
1919
|
+
test('infers Bearer auth from a credential without a colon', () => {
|
|
1920
|
+
expect(Auth.resolveCredential({ chainId: 4217, value: 'bearer-token' })).toEqual({
|
|
1921
|
+
basicAuth: undefined,
|
|
1922
|
+
bearerAuth: 'bearer-token',
|
|
1923
|
+
})
|
|
1924
|
+
})
|
|
1925
|
+
|
|
1926
|
+
test('selects a credential by chain id', () => {
|
|
1927
|
+
const value = JSON.stringify({ 4217: 'mainnet:secret', 421700001: 'zone-token' })
|
|
1928
|
+
|
|
1929
|
+
expect(Auth.resolveCredential({ chainId: 4217, value })).toEqual({
|
|
1930
|
+
basicAuth: 'mainnet:secret',
|
|
1931
|
+
})
|
|
1932
|
+
expect(Auth.resolveCredential({ chainId: 421700001, value })).toEqual({
|
|
1933
|
+
basicAuth: undefined,
|
|
1934
|
+
bearerAuth: 'zone-token',
|
|
1935
|
+
})
|
|
1936
|
+
expect(Auth.resolveCredential({ chainId: 42431, value })).toEqual({ basicAuth: undefined })
|
|
1937
|
+
})
|
|
1938
|
+
})
|
|
1939
|
+
|
|
1892
1940
|
function createScopedApp(options: {
|
|
1893
1941
|
auth?: Auth.Context | undefined
|
|
1894
1942
|
routes: readonly { path: string; policy: Auth.require.Policy }[]
|
package/src/internal/Auth.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { findTargetHandler } from 'hono/utils/handler'
|
|
|
9
9
|
import { Challenge, Credential, type Method } from 'mppx'
|
|
10
10
|
import { Mppx, tempo } from 'mppx/hono'
|
|
11
11
|
import { Addresses } from 'viem/tempo'
|
|
12
|
+
import { tempoMainnet } from 'viem/tempo/chains'
|
|
12
13
|
import * as z from 'zod/mini'
|
|
13
14
|
|
|
14
15
|
import type * as App from '../App.js'
|
|
@@ -26,7 +27,6 @@ import * as Response from './Response.js'
|
|
|
26
27
|
import * as Schema from './Schema.js'
|
|
27
28
|
import * as Scope from '../Scope.js'
|
|
28
29
|
import * as Users from '../db/tables/users.js'
|
|
29
|
-
import * as Viem from './Viem.js'
|
|
30
30
|
|
|
31
31
|
const policySymbol = Symbol('tempo-api.auth.policy')
|
|
32
32
|
const mppManagementSymbol = Symbol('tempo-api.auth.mpp-management')
|
|
@@ -1451,7 +1451,7 @@ export function require<environment extends Environment = Environment>(
|
|
|
1451
1451
|
if (
|
|
1452
1452
|
apiKey.environment === 'sandbox' &&
|
|
1453
1453
|
explicitChain !== undefined &&
|
|
1454
|
-
|
|
1454
|
+
explicitChain === tempoMainnet.id
|
|
1455
1455
|
)
|
|
1456
1456
|
return jsonError(c, {
|
|
1457
1457
|
code: 'api_key_forbidden',
|
|
@@ -1644,6 +1644,65 @@ type RateLimitAccess = PaymentAccess & {
|
|
|
1644
1644
|
rateLimit: RateLimit.Result
|
|
1645
1645
|
}
|
|
1646
1646
|
|
|
1647
|
+
/** Shared or per-chain credentials. */
|
|
1648
|
+
export type ChainCredential = string | Record<number, string>
|
|
1649
|
+
|
|
1650
|
+
/** Parses shared or per-chain credentials from an environment value. */
|
|
1651
|
+
export function parseCredential(value: ChainCredential | undefined): parseCredential.ReturnType {
|
|
1652
|
+
if (!value) return undefined
|
|
1653
|
+
if (typeof value !== 'string') return value
|
|
1654
|
+
const credentials = (() => {
|
|
1655
|
+
try {
|
|
1656
|
+
return JSON.parse(value) as unknown
|
|
1657
|
+
} catch {
|
|
1658
|
+
return value
|
|
1659
|
+
}
|
|
1660
|
+
})()
|
|
1661
|
+
if (typeof credentials === 'string') return credentials
|
|
1662
|
+
if (
|
|
1663
|
+
!credentials ||
|
|
1664
|
+
typeof credentials !== 'object' ||
|
|
1665
|
+
Array.isArray(credentials) ||
|
|
1666
|
+
Object.values(credentials).some((credential) => typeof credential !== 'string')
|
|
1667
|
+
)
|
|
1668
|
+
throw new Error('Expected a credential or a chain-id-to-credential JSON object.')
|
|
1669
|
+
return credentials as Record<number, string>
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
export declare namespace parseCredential {
|
|
1673
|
+
/** Parsed shared or per-chain credentials. */
|
|
1674
|
+
type ReturnType = ChainCredential | undefined
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
/** Resolves a chain credential and infers its HTTP authorization scheme. */
|
|
1678
|
+
export function resolveCredential(
|
|
1679
|
+
options: resolveCredential.Options,
|
|
1680
|
+
): resolveCredential.ReturnType {
|
|
1681
|
+
const credentials = parseCredential(options.value)
|
|
1682
|
+
const credential = typeof credentials === 'string' ? credentials : credentials?.[options.chainId]
|
|
1683
|
+
if (!credential) return { basicAuth: undefined }
|
|
1684
|
+
if (credential.includes(':')) return { basicAuth: credential }
|
|
1685
|
+
return { basicAuth: undefined, bearerAuth: credential }
|
|
1686
|
+
}
|
|
1687
|
+
|
|
1688
|
+
export declare namespace resolveCredential {
|
|
1689
|
+
/** Options for resolving a chain credential. */
|
|
1690
|
+
type Options = {
|
|
1691
|
+
/** Chain id selecting a per-chain credential. */
|
|
1692
|
+
chainId: number
|
|
1693
|
+
/** Shared or per-chain credentials. */
|
|
1694
|
+
value?: ChainCredential | undefined
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
/** Resolved HTTP authorization credentials. */
|
|
1698
|
+
type ReturnType = {
|
|
1699
|
+
/** Basic credentials inferred from a value containing a colon. */
|
|
1700
|
+
basicAuth: string | undefined
|
|
1701
|
+
/** Bearer credential inferred from a value without a colon. */
|
|
1702
|
+
bearerAuth?: string | undefined
|
|
1703
|
+
}
|
|
1704
|
+
}
|
|
1705
|
+
|
|
1647
1706
|
/**
|
|
1648
1707
|
* How long to wait for the rate-limit counter before failing open. A hot
|
|
1649
1708
|
* counter backend (e.g. a single Durable Object serving one busy quota bucket)
|
package/src/internal/Cache.ts
CHANGED
|
@@ -140,7 +140,7 @@ export function response<environment extends Env>(
|
|
|
140
140
|
let res = result instanceof Response ? new Response(result.body, result) : c.res
|
|
141
141
|
if (
|
|
142
142
|
result instanceof Response &&
|
|
143
|
-
|
|
143
|
+
Etag.matches(res.headers.get('ETag'), c.req.header('If-None-Match'))
|
|
144
144
|
)
|
|
145
145
|
res = notModified(res)
|
|
146
146
|
|
|
@@ -158,7 +158,9 @@ export function response<environment extends Env>(
|
|
|
158
158
|
|
|
159
159
|
// `markCacheable` lets the edge layer pay its store lookup only on routes
|
|
160
160
|
// that mount this middleware; everything else skips the read.
|
|
161
|
-
return EdgeCache.markCacheable(middleware
|
|
161
|
+
return EdgeCache.markCacheable(middleware, {
|
|
162
|
+
key: options.key as (c: Context) => Promise<string> | string,
|
|
163
|
+
})
|
|
162
164
|
}
|
|
163
165
|
|
|
164
166
|
export declare namespace response {
|
|
@@ -214,9 +216,15 @@ export function urlKey<
|
|
|
214
216
|
return url.toString()
|
|
215
217
|
}
|
|
216
218
|
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
219
|
+
namespace Etag {
|
|
220
|
+
export function matches(etag: string | null, ifNoneMatch: string | undefined) {
|
|
221
|
+
if (!etag || !ifNoneMatch) return false
|
|
222
|
+
return ifNoneMatch.split(/,\s*/).some((tag) => stripWeak(tag) === stripWeak(etag))
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
function stripWeak(etag: string) {
|
|
226
|
+
return etag.replace(/^W\//, '')
|
|
227
|
+
}
|
|
220
228
|
}
|
|
221
229
|
|
|
222
230
|
function notModified(response: Response) {
|
|
@@ -248,10 +256,6 @@ function setCacheHeaders(
|
|
|
248
256
|
headers.set('Vary', Array.from(vary.values()).join(', '))
|
|
249
257
|
}
|
|
250
258
|
|
|
251
|
-
function stripWeak(etag: string) {
|
|
252
|
-
return etag.replace(/^W\//, '')
|
|
253
|
-
}
|
|
254
|
-
|
|
255
259
|
// Derive the shared-cache policy from a route's client `Cache-Control`. A
|
|
256
260
|
// positive `s-maxage`/`max-age` (and no `no-store`/`no-cache`) is what makes a
|
|
257
261
|
// route eligible for the anonymous edge cache; the `private` directive only
|
|
@@ -19,10 +19,10 @@ describe('Cursor', () => {
|
|
|
19
19
|
})
|
|
20
20
|
|
|
21
21
|
test('round-trips a timestamp/id tuple', () => {
|
|
22
|
-
const token = Cursor.encode(['2026-01-01T00:00:00.000Z', '
|
|
22
|
+
const token = Cursor.encode(['2026-01-01T00:00:00.000Z', 'source:transaction-0'])
|
|
23
23
|
expect(Cursor.decode(token, ['timestamp', 'id'])).toEqual([
|
|
24
24
|
'2026-01-01T00:00:00.000Z',
|
|
25
|
-
'
|
|
25
|
+
'source:transaction-0',
|
|
26
26
|
])
|
|
27
27
|
})
|
|
28
28
|
|
package/src/internal/Cursor.ts
CHANGED
|
@@ -138,7 +138,7 @@ function isValid(value: unknown, field: Field): boolean {
|
|
|
138
138
|
case 'address':
|
|
139
139
|
return typeof value === 'string' && /^0x[0-9a-fA-F]{40}$/.test(value)
|
|
140
140
|
case 'id':
|
|
141
|
-
return typeof value === 'string' && /^[A-Za-z0-
|
|
141
|
+
return typeof value === 'string' && /^[A-Za-z0-9:_-]+$/.test(value)
|
|
142
142
|
case 'timestamp':
|
|
143
143
|
return typeof value === 'string' && !Number.isNaN(Date.parse(value))
|
|
144
144
|
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as EarnRates from './EarnRates.js'
|
|
2
|
+
|
|
3
|
+
describe('schema.Window', () => {
|
|
4
|
+
test('stays absent when omitted', () => {
|
|
5
|
+
expect(EarnRates.schema.Window.parse(undefined)).toBeUndefined()
|
|
6
|
+
})
|
|
7
|
+
|
|
8
|
+
test('accepts every selectable window and nothing else', () => {
|
|
9
|
+
expect(
|
|
10
|
+
['1h', '1d', '7d', '30d'].map((value) => EarnRates.schema.Window.parse(value)),
|
|
11
|
+
).toStrictEqual(['1h', '1d', '7d', '30d'])
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
test('rejects windows outside the selectable set', () => {
|
|
15
|
+
expect(
|
|
16
|
+
['0h', '24h', '36h', '168h', '7x', '1w', '-1d', '1.5d', '721h', '31d', '90d', ''].map(
|
|
17
|
+
(value) => EarnRates.schema.Window.safeParse(value).success,
|
|
18
|
+
),
|
|
19
|
+
).toStrictEqual([
|
|
20
|
+
false,
|
|
21
|
+
false,
|
|
22
|
+
false,
|
|
23
|
+
false,
|
|
24
|
+
false,
|
|
25
|
+
false,
|
|
26
|
+
false,
|
|
27
|
+
false,
|
|
28
|
+
false,
|
|
29
|
+
false,
|
|
30
|
+
false,
|
|
31
|
+
false,
|
|
32
|
+
])
|
|
33
|
+
})
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
describe('asOf', () => {
|
|
37
|
+
test('rounds down to a fifteen-minute UTC bucket', () => {
|
|
38
|
+
vi.useFakeTimers()
|
|
39
|
+
try {
|
|
40
|
+
vi.setSystemTime(new Date('2026-07-21T09:14:59.999Z'))
|
|
41
|
+
const inBucket = EarnRates.asOf()
|
|
42
|
+
vi.setSystemTime(new Date('2026-07-21T09:29:59.000Z'))
|
|
43
|
+
expect([inBucket, EarnRates.asOf()]).toMatchInlineSnapshot(`
|
|
44
|
+
[
|
|
45
|
+
"2026-07-21T09:00:00.000Z",
|
|
46
|
+
"2026-07-21T09:15:00.000Z",
|
|
47
|
+
]
|
|
48
|
+
`)
|
|
49
|
+
} finally {
|
|
50
|
+
vi.useRealTimers()
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
test('withholds the newest thirty seconds', () => {
|
|
55
|
+
vi.useFakeTimers()
|
|
56
|
+
try {
|
|
57
|
+
vi.setSystemTime(new Date('2026-07-21T09:15:20.000Z'))
|
|
58
|
+
expect(EarnRates.asOf()).toMatchInlineSnapshot(`"2026-07-21T09:00:00.000Z"`)
|
|
59
|
+
} finally {
|
|
60
|
+
vi.useRealTimers()
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
describe('annualize', () => {
|
|
66
|
+
const day = 24 * 60 * 60
|
|
67
|
+
|
|
68
|
+
test('annualizes share-price growth over the measured window', () => {
|
|
69
|
+
expect([
|
|
70
|
+
EarnRates.annualize({
|
|
71
|
+
end: { price: 1_010_000n, timestamp: 7 * day },
|
|
72
|
+
start: { price: 1_000_000n, timestamp: 0 },
|
|
73
|
+
}),
|
|
74
|
+
EarnRates.annualize({
|
|
75
|
+
end: { price: 1_000_500n, timestamp: 30 * day },
|
|
76
|
+
start: { price: 1_000_000n, timestamp: 0 },
|
|
77
|
+
}),
|
|
78
|
+
]).toMatchInlineSnapshot(`
|
|
79
|
+
[
|
|
80
|
+
"0.680075",
|
|
81
|
+
"0.006100",
|
|
82
|
+
]
|
|
83
|
+
`)
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
test('reports a drawdown as a negative ratio', () => {
|
|
87
|
+
expect(
|
|
88
|
+
EarnRates.annualize({
|
|
89
|
+
end: { price: 990_000n, timestamp: 30 * day },
|
|
90
|
+
start: { price: 1_000_000n, timestamp: 0 },
|
|
91
|
+
}),
|
|
92
|
+
).toMatchInlineSnapshot(`"-0.115099"`)
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
test('leaves an unmeasurable window unannualized', () => {
|
|
96
|
+
expect([
|
|
97
|
+
// Reversed and zero-length windows.
|
|
98
|
+
EarnRates.annualize({
|
|
99
|
+
end: { price: 1_000_000n, timestamp: 0 },
|
|
100
|
+
start: { price: 1_000_000n, timestamp: day },
|
|
101
|
+
}),
|
|
102
|
+
EarnRates.annualize({
|
|
103
|
+
end: { price: 1_000_000n, timestamp: 0 },
|
|
104
|
+
start: { price: 1_000_000n, timestamp: 0 },
|
|
105
|
+
}),
|
|
106
|
+
// A vault with no starting price has no growth to measure.
|
|
107
|
+
EarnRates.annualize({
|
|
108
|
+
end: { price: 1_000_000n, timestamp: day },
|
|
109
|
+
start: { price: 0n, timestamp: 0 },
|
|
110
|
+
}),
|
|
111
|
+
// Growth too steep to express as a decimal ratio.
|
|
112
|
+
EarnRates.annualize({
|
|
113
|
+
end: { price: 1_010_000n, timestamp: 3600 },
|
|
114
|
+
start: { price: 1_000_000n, timestamp: 0 },
|
|
115
|
+
}),
|
|
116
|
+
]).toMatchInlineSnapshot(`
|
|
117
|
+
[
|
|
118
|
+
null,
|
|
119
|
+
null,
|
|
120
|
+
null,
|
|
121
|
+
null,
|
|
122
|
+
]
|
|
123
|
+
`)
|
|
124
|
+
})
|
|
125
|
+
})
|