tapimo 0.7.1 → 0.8.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/README.md +10 -7
- package/dist/ApiKey.d.ts +3 -0
- package/dist/ApiKey.d.ts.map +1 -1
- package/dist/ApiKey.js +10 -0
- package/dist/ApiKey.js.map +1 -1
- package/dist/ApiKeys.d.ts +29 -8
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +24 -5
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +20680 -15487
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +250 -129
- 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 +667 -76
- 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 +107 -11
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +145 -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/organizations.d.ts +2 -0
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +74 -74
- 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 +4 -0
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +21 -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 +5666 -3934
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +90 -22
- 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 +56 -56
- 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 +65 -65
- package/dist/apps/data/routes/balances.d.ts +14 -14
- package/dist/apps/data/routes/balances.js +5 -5
- 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/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 +2574 -0
- package/dist/apps/data/routes/earn.d.ts.map +1 -0
- package/dist/apps/data/routes/earn.js +1574 -0
- package/dist/apps/data/routes/earn.js.map +1 -0
- package/dist/apps/data/routes/exchanges.d.ts +1626 -719
- 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/indexer.d.ts +35 -35
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +23 -3
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +33 -33
- 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 +6 -6
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +214 -22
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +1 -1
- 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 +115 -87
- 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 +54 -54
- 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/verified-tokens.d.ts +36 -36
- package/dist/apps/data/routes/webhooks.d.ts +370 -368
- 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/funding/Access.d.ts +16 -0
- package/dist/apps/funding/Access.d.ts.map +1 -0
- package/dist/apps/funding/Access.js +22 -0
- package/dist/apps/funding/Access.js.map +1 -0
- package/dist/apps/funding/App.d.ts +3183 -0
- package/dist/apps/funding/App.d.ts.map +1 -0
- package/dist/apps/funding/App.js +46 -0
- package/dist/apps/funding/App.js.map +1 -0
- package/dist/apps/funding/Inventory.d.ts +5 -0
- package/dist/apps/funding/Inventory.d.ts.map +1 -0
- package/dist/apps/funding/Inventory.js +25 -0
- package/dist/apps/funding/Inventory.js.map +1 -0
- package/dist/apps/funding/ProviderAttempts.d.ts +5 -0
- package/dist/apps/funding/ProviderAttempts.d.ts.map +1 -0
- package/dist/apps/funding/ProviderAttempts.js +24 -0
- package/dist/apps/funding/ProviderAttempts.js.map +1 -0
- package/dist/apps/funding/index.d.ts +2 -0
- package/dist/apps/funding/index.d.ts.map +1 -0
- package/dist/apps/funding/index.js +2 -0
- package/dist/apps/funding/index.js.map +1 -0
- package/dist/apps/funding/routes/chains.d.ts +169 -0
- package/dist/apps/funding/routes/chains.d.ts.map +1 -0
- package/dist/apps/funding/routes/chains.js +80 -0
- package/dist/apps/funding/routes/chains.js.map +1 -0
- package/dist/apps/funding/routes/deposit-addresses.d.ts +2388 -0
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -0
- package/dist/apps/funding/routes/deposit-addresses.js +860 -0
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -0
- package/dist/apps/funding/routes/providers.d.ts +91 -0
- package/dist/apps/funding/routes/providers.d.ts.map +1 -0
- package/dist/apps/funding/routes/providers.js +56 -0
- package/dist/apps/funding/routes/providers.js.map +1 -0
- package/dist/apps/{data/routes/funding.d.ts → funding/routes/quotes.d.ts} +26 -396
- package/dist/apps/funding/routes/quotes.d.ts.map +1 -0
- package/dist/apps/funding/routes/quotes.js +188 -0
- package/dist/apps/funding/routes/quotes.js.map +1 -0
- package/dist/apps/funding/routes/transfers.d.ts +1999 -0
- package/dist/apps/funding/routes/transfers.d.ts.map +1 -0
- package/dist/apps/funding/routes/transfers.js +614 -0
- package/dist/apps/funding/routes/transfers.js.map +1 -0
- package/dist/apps/index.d.ts +3 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +3 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/management/App.d.ts +839 -574
- package/dist/apps/management/App.d.ts.map +1 -1
- 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 +296 -19
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +77 -9
- 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 +17 -17
- 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 +38 -38
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +69 -69
- package/dist/apps/management/routes/orgs.d.ts +16 -16
- 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 +19 -19
- package/dist/apps/management/routes/scopes.d.ts +1 -1
- 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 +72 -72
- package/dist/apps/management/routes/verified-token-requests.d.ts +18 -18
- package/dist/apps/management/routes/webhooks.d.ts +122 -122
- 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/mcp.d.ts +2 -3
- package/dist/apps/mcp.d.ts.map +1 -1
- package/dist/apps/mcp.js +16 -14
- package/dist/apps/mcp.js.map +1 -1
- package/dist/apps/metadata.d.ts +4 -0
- package/dist/apps/metadata.d.ts.map +1 -1
- package/dist/apps/metadata.js +10 -0
- package/dist/apps/metadata.js.map +1 -1
- package/dist/apps/mpp/App.d.ts +57 -58
- 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/cloudflare.d.ts +50 -0
- package/dist/cloudflare.d.ts.map +1 -1
- package/dist/cloudflare.js +178 -0
- package/dist/cloudflare.js.map +1 -1
- package/dist/db/Db.d.ts +22 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +379 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +933 -1
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +289 -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 +172 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.js +218 -0
- package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
- package/dist/db/tables/fundingDepositRequestObservations.d.ts +45 -0
- package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +1 -0
- package/dist/db/tables/fundingDepositRequestObservations.js +46 -0
- package/dist/db/tables/fundingDepositRequestObservations.js.map +1 -0
- package/dist/db/tables/fundingDeposits.d.ts +171 -0
- package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
- package/dist/db/tables/fundingDeposits.js +182 -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 +37 -11
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +75 -16
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +17 -11
- 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 +10 -3
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +43 -11
- 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/IpAllowlist.d.ts +15 -0
- package/dist/internal/IpAllowlist.d.ts.map +1 -0
- package/dist/internal/IpAllowlist.js +27 -0
- package/dist/internal/IpAllowlist.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 +2 -2
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +4 -1
- 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 +49 -24
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +90 -12
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Viem.d.ts +90 -65
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +90 -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 +408 -0
- package/dist/internal/funding/Deposit.d.ts.map +1 -0
- package/dist/internal/funding/Deposit.js +318 -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 +48 -0
- package/dist/internal/funding/Evidence.d.ts.map +1 -0
- package/dist/internal/funding/Evidence.js +315 -0
- package/dist/internal/funding/Evidence.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts +1288 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -0
- package/dist/internal/funding/Provider.js +1086 -0
- package/dist/internal/funding/Provider.js.map +1 -0
- package/dist/internal/funding/Reconciliation.d.ts +127 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
- package/dist/internal/funding/Reconciliation.js +885 -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/SourceObservation.d.ts +108 -0
- package/dist/internal/funding/SourceObservation.d.ts.map +1 -0
- package/dist/internal/funding/SourceObservation.js +143 -0
- package/dist/internal/funding/SourceObservation.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 +14 -0
- package/dist/internal/funding/index.d.ts.map +1 -0
- package/dist/internal/funding/index.js +14 -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 +88 -0
- package/dist/internal/funding/providers/relay.d.ts.map +1 -0
- package/dist/internal/funding/providers/relay.js +871 -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 +10 -5
- package/src/ApiKey.test.ts +35 -0
- package/src/ApiKey.ts +27 -0
- package/src/ApiKeys.test.ts +40 -7
- package/src/ApiKeys.ts +46 -10
- package/src/App.test.ts +108 -15
- package/src/App.ts +296 -138
- package/src/Assets.ts +29 -4
- package/src/Client.test-d.ts +809 -37
- 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 +190 -22
- package/src/admin/apps/api-keys.ts +170 -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 +24 -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 +184 -3
- package/src/apps/data/App.test.ts +28 -23
- package/src/apps/data/App.ts +95 -36
- 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 +1391 -0
- package/src/apps/data/routes/earn.ts +2188 -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/indexer.test.ts +43 -34
- package/src/apps/data/routes/indexer.ts +21 -3
- 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 +245 -25
- package/src/apps/data/routes/tokenlist.ts +72 -19
- package/src/apps/data/routes/tokens.test.ts +6 -8
- 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/funding/Access.ts +26 -0
- package/src/apps/funding/App.test.ts +78 -0
- package/src/apps/funding/App.ts +63 -0
- package/src/apps/funding/Inventory.ts +30 -0
- package/src/apps/funding/ProviderAttempts.ts +26 -0
- package/src/apps/funding/index.ts +1 -0
- package/src/apps/funding/routes/chains.test.ts +78 -0
- package/src/apps/funding/routes/chains.ts +101 -0
- package/src/apps/funding/routes/deposit-addresses.test.ts +1628 -0
- package/src/apps/funding/routes/deposit-addresses.ts +1015 -0
- package/src/apps/funding/routes/providers.test.ts +165 -0
- package/src/apps/funding/routes/providers.ts +73 -0
- package/src/apps/funding/routes/quotes.test.ts +511 -0
- package/src/apps/funding/routes/quotes.ts +205 -0
- package/src/apps/funding/routes/transfers.test.ts +1255 -0
- package/src/apps/funding/routes/transfers.ts +704 -0
- package/src/apps/index.ts +3 -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 +103 -3
- package/src/apps/management/routes/api-keys.ts +98 -10
- 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/mcp.test.ts +17 -2
- package/src/apps/mcp.ts +18 -13
- package/src/apps/metadata.ts +12 -0
- 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 +128 -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/cloudflare.ts +279 -0
- package/src/db/Db.ts +501 -0
- package/src/db/Schema.ts +349 -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 +404 -0
- package/src/db/tables/fundingDepositRequestObservations.test.ts +106 -0
- package/src/db/tables/fundingDepositRequestObservations.ts +99 -0
- package/src/db/tables/fundingDeposits.test.ts +399 -0
- package/src/db/tables/fundingDeposits.ts +373 -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 +225 -5
- package/src/internal/Auth.ts +109 -20
- package/src/internal/Cache.test.ts +37 -3
- package/src/internal/Cache.ts +14 -10
- 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 +26 -7
- package/src/internal/EdgeCache.ts +48 -9
- 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/IpAllowlist.test.ts +52 -0
- package/src/internal/IpAllowlist.ts +39 -0
- package/src/internal/Log.test-d.ts +41 -8
- package/src/internal/Log.test.ts +196 -9
- 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 +4 -1
- 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 +240 -18
- package/src/internal/Tidx.ts +129 -33
- package/src/internal/VerifiedTokens.test.ts +15 -0
- package/src/internal/Viem.test.ts +198 -17
- package/src/internal/Viem.ts +127 -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 +522 -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 +425 -0
- package/src/internal/funding/Provider.test.ts +1328 -0
- package/src/internal/funding/Provider.ts +1911 -0
- package/src/internal/funding/Reconciliation.local.test.ts +511 -0
- package/src/internal/funding/Reconciliation.test.ts +3037 -0
- package/src/internal/funding/Reconciliation.ts +1202 -0
- package/src/internal/funding/Route.test.ts +66 -0
- package/src/internal/funding/Route.ts +29 -0
- package/src/internal/funding/SourceObservation.test.ts +301 -0
- package/src/internal/funding/SourceObservation.ts +267 -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 +21 -0
- package/src/internal/funding/index.ts +13 -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 +564 -0
- package/src/internal/funding/providers/relay.ts +1060 -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/apps/data/routes/funding.d.ts.map +0 -1
- package/dist/apps/data/routes/funding.js +0 -410
- package/dist/apps/data/routes/funding.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/apps/data/routes/funding.test.ts +0 -503
- package/src/apps/data/routes/funding.ts +0 -604
- package/src/internal/FundingQuotes.test.ts +0 -456
- package/src/internal/FundingQuotes.ts +0 -944
package/src/App.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Context } from 'hono'
|
|
2
2
|
import { Hono } from 'hono'
|
|
3
|
+
import { matchedRoutes } from 'hono/route'
|
|
3
4
|
import { compress as hono_compress } from 'hono/compress'
|
|
4
5
|
import { cors as hono_cors } from 'hono/cors'
|
|
5
6
|
import { HTTPException } from 'hono/http-exception'
|
|
6
7
|
import { requestId, type RequestIdVariables } from 'hono/request-id'
|
|
7
8
|
import { generateSpecs } from 'hono-openapi'
|
|
9
|
+
import type { Chain } from 'viem'
|
|
8
10
|
|
|
9
11
|
import type * as Analytics from './analytics/Analytics.js'
|
|
10
12
|
import * as ApiKey from './ApiKey.js'
|
|
@@ -18,6 +20,7 @@ import type * as Metrics from './Metrics.js'
|
|
|
18
20
|
import * as OpenApi from './internal/OpenApi.js'
|
|
19
21
|
import * as Store from './internal/Store.js'
|
|
20
22
|
import * as Path from './internal/Path.js'
|
|
23
|
+
import type * as Provider from './internal/Provider.js'
|
|
21
24
|
import * as Response from './internal/Response.js'
|
|
22
25
|
import * as Scope from './Scope.js'
|
|
23
26
|
import type * as Tidx from './internal/Tidx.js'
|
|
@@ -27,18 +30,23 @@ import * as Viem from './internal/Viem.js'
|
|
|
27
30
|
import openrpcSpec from './openrpc.json' with { type: 'json' }
|
|
28
31
|
|
|
29
32
|
import * as Metadata from './apps/metadata.js'
|
|
33
|
+
import * as Zones from './apps/Zones.js'
|
|
30
34
|
import * as Data from './apps/data/App.js'
|
|
35
|
+
import * as Funding from './apps/funding/App.js'
|
|
31
36
|
import * as Management from './apps/management/App.js'
|
|
32
37
|
import * as Mpp from './apps/mpp/App.js'
|
|
33
38
|
import * as Relay from './apps/relay/App.js'
|
|
34
39
|
|
|
35
40
|
export import data = Data.data
|
|
41
|
+
export import funding = Funding.funding
|
|
36
42
|
export import management = Management.management
|
|
37
43
|
export import mpp = Mpp.mpp
|
|
38
44
|
export import relay = Relay.relay
|
|
39
45
|
|
|
40
46
|
/** The chain-data route group; see {@link data}. */
|
|
41
47
|
export type DataApp = ReturnType<typeof data>
|
|
48
|
+
/** The inbound funding route group; see {@link funding}. */
|
|
49
|
+
export type FundingApp = ReturnType<typeof funding>
|
|
42
50
|
/** The management route group; see {@link management}. */
|
|
43
51
|
export type ManagementApp = ReturnType<typeof management>
|
|
44
52
|
/** The MPP credential relay route group; see {@link mpp}. */
|
|
@@ -62,6 +70,8 @@ export type Environment = {
|
|
|
62
70
|
dbCached: Db.Source
|
|
63
71
|
/** KV state store backing API-key records, or undefined when key auth is closed. */
|
|
64
72
|
kv: { store: Store.State } | undefined
|
|
73
|
+
/** Providers registered by the host application. */
|
|
74
|
+
providers: readonly Provider.Provider[]
|
|
65
75
|
/** Issuable API-key scope catalog, including host-defined entries. */
|
|
66
76
|
scopeCatalog: Scope.Catalog
|
|
67
77
|
/** Gets one static API asset. */
|
|
@@ -80,8 +90,8 @@ export type Environment = {
|
|
|
80
90
|
tidx: Tidx.getClient.Tidx | undefined
|
|
81
91
|
/** Verified-token feature configuration (refresh window), or undefined when the feature is disabled. Token rows live in `db`. */
|
|
82
92
|
verifiedTokens: { refreshMs?: number | undefined } | undefined
|
|
83
|
-
/** Zone
|
|
84
|
-
zones: ReadonlyMap<number,
|
|
93
|
+
/** Zone chains keyed by chain id; empty when none are configured. */
|
|
94
|
+
zones: ReadonlyMap<number, Chain>
|
|
85
95
|
/** Webhook feature configuration, or undefined when webhooks are disabled. Rows live in `db`. */
|
|
86
96
|
webhook: Webhook | undefined
|
|
87
97
|
} & EdgeCache.Variables &
|
|
@@ -107,8 +117,9 @@ export function from<const app extends Hono<any, any>>(app: app, metadata: creat
|
|
|
107
117
|
function compose(options: create.Options) {
|
|
108
118
|
return create(options)
|
|
109
119
|
.route('/', data())
|
|
120
|
+
.route('/', funding())
|
|
110
121
|
.route('/', relay())
|
|
111
|
-
.route('/', mpp())
|
|
122
|
+
.route('/', mpp({ state: Store.memory() }))
|
|
112
123
|
.route('/', management())
|
|
113
124
|
}
|
|
114
125
|
|
|
@@ -141,10 +152,28 @@ export type Asset = {
|
|
|
141
152
|
}
|
|
142
153
|
|
|
143
154
|
/** Gets one static API asset for a chain, or undefined when it is missing. */
|
|
144
|
-
export type GetAsset = (
|
|
155
|
+
export type GetAsset = ((
|
|
145
156
|
chainId: Viem.ChainId,
|
|
146
157
|
path: string,
|
|
147
|
-
) => Asset | undefined | Promise<Asset | undefined>
|
|
158
|
+
) => Asset | undefined | Promise<Asset | undefined>) & {
|
|
159
|
+
/** Lists public asset locations under a path prefix, when supported. */
|
|
160
|
+
list?: GetAsset.List | undefined
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export declare namespace GetAsset {
|
|
164
|
+
/** Lists public asset locations for a chain and path prefix. */
|
|
165
|
+
type List = (
|
|
166
|
+
chainId: Viem.ChainId,
|
|
167
|
+
path: string,
|
|
168
|
+
) => Promise<
|
|
169
|
+
readonly {
|
|
170
|
+
/** Internal asset-store key. */
|
|
171
|
+
key: string
|
|
172
|
+
/** Absolute public API URL for the asset. */
|
|
173
|
+
uri: string
|
|
174
|
+
}[]
|
|
175
|
+
>
|
|
176
|
+
}
|
|
148
177
|
|
|
149
178
|
/** Top-level OpenAPI `info.description`, rendered above the reference. */
|
|
150
179
|
const infoDescription = 'REST API for reading and interacting with Tempo'
|
|
@@ -170,12 +199,24 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
170
199
|
const store = options.cache?.store ?? Store.memory()
|
|
171
200
|
const scopeCatalog = Scope.extend(options.scopes)
|
|
172
201
|
const defaultChainId = options.defaultChainId ?? Viem.defaultChainId
|
|
173
|
-
const
|
|
202
|
+
const zones = new Map(
|
|
203
|
+
(options.zones === true ? Zones.chains : (options.zones ?? [])).map((zone) => [zone.id, zone]),
|
|
204
|
+
)
|
|
205
|
+
const getClient = Viem.createGetClient({
|
|
206
|
+
defaultChainId,
|
|
207
|
+
rpc: options.rpc,
|
|
208
|
+
zones: [...zones.values()],
|
|
209
|
+
})
|
|
210
|
+
const configuredRpcChainIds =
|
|
211
|
+
typeof options.rpc === 'function' ? [] : Viem.configuredChainIds(options.rpc?.url)
|
|
174
212
|
const supportedChainIds = new Set<number>([
|
|
175
213
|
...Object.keys(Viem.url).map(Number),
|
|
176
214
|
defaultChainId,
|
|
215
|
+
...configuredRpcChainIds,
|
|
177
216
|
...(options.supportedChainIds ?? []),
|
|
217
|
+
...zones.keys(),
|
|
178
218
|
])
|
|
219
|
+
const defaultChainRouteHandlers = new Set<unknown>()
|
|
179
220
|
|
|
180
221
|
// Build the app in two phases: register middleware imperatively, then chain
|
|
181
222
|
// route mounts so the merged Hono schema flows through the return type. The
|
|
@@ -242,6 +283,18 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
242
283
|
// side; `cached` falls back to `source` so consumers never branch.
|
|
243
284
|
const db = 'source' in options.db ? options.db : { source: options.db }
|
|
244
285
|
|
|
286
|
+
const providers = (() => {
|
|
287
|
+
const values = options.providers ?? []
|
|
288
|
+
const ids = new Set<string>()
|
|
289
|
+
for (const provider of values) {
|
|
290
|
+
if (provider.id.length === 0 || provider.id !== provider.id.trim().toLowerCase())
|
|
291
|
+
throw new InvalidProviderIdError(provider.id)
|
|
292
|
+
if (ids.has(provider.id)) throw new DuplicateProviderIdError(provider.id)
|
|
293
|
+
ids.add(provider.id)
|
|
294
|
+
}
|
|
295
|
+
return values
|
|
296
|
+
})()
|
|
297
|
+
|
|
245
298
|
// Normalize the `analytics` option: accept the bare source or `{ source }`,
|
|
246
299
|
// mirroring `db`. Undefined leaves usage analytics unconfigured (501).
|
|
247
300
|
const analytics =
|
|
@@ -269,10 +322,12 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
269
322
|
c.set('dbCached', db.cached ?? db.source)
|
|
270
323
|
c.set('getClient', (chainId) => getClient(chainId, Auth.getPrincipal(c)))
|
|
271
324
|
c.set('kv', options.kv)
|
|
325
|
+
c.set('providers', providers)
|
|
272
326
|
c.set('rpc', options.rpc)
|
|
273
327
|
c.set('scopeCatalog', scopeCatalog)
|
|
274
328
|
c.set('store', store)
|
|
275
329
|
c.set('supportedChainIds', supportedChainIds)
|
|
330
|
+
c.set('zones', zones)
|
|
276
331
|
await next()
|
|
277
332
|
})
|
|
278
333
|
|
|
@@ -299,6 +354,43 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
299
354
|
// routes. `auth: false` leaves policies unenforced (tests only).
|
|
300
355
|
if (auth.middleware) app.use('*', auth.middleware)
|
|
301
356
|
|
|
357
|
+
// Groups marked as default-chain consumers share the root Zone and sandbox
|
|
358
|
+
// policy without inheriting another group's chain selectors.
|
|
359
|
+
app.use('*', async (c, next) => {
|
|
360
|
+
const matched = matchedRoutes(c).some((route) => defaultChainRouteHandlers.has(route.handler))
|
|
361
|
+
if (!matched) return next()
|
|
362
|
+
|
|
363
|
+
const chainId = c.get('chainId')
|
|
364
|
+
const principal = Auth.getPrincipal(c)
|
|
365
|
+
if (c.get('zones').has(chainId)) {
|
|
366
|
+
const scopes = principal?.type === 'api_key' ? principal.apiKey.scopes : undefined
|
|
367
|
+
const allowed =
|
|
368
|
+
scopes?.includes(Scope.wildcard) ||
|
|
369
|
+
scopes?.includes(`zone:${chainId}:read`) ||
|
|
370
|
+
scopes?.includes(`zone:${chainId}:write`)
|
|
371
|
+
if (!allowed)
|
|
372
|
+
return Response.error(c, {
|
|
373
|
+
code: 'api_key_forbidden',
|
|
374
|
+
message: `Chain id ${chainId} is a zone. Use an API key granting \`zone:${chainId}:read\` or \`zone:${chainId}:write\`.`,
|
|
375
|
+
status: 403,
|
|
376
|
+
})
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
if (
|
|
380
|
+
principal?.type === 'api_key' &&
|
|
381
|
+
principal.environment === 'sandbox' &&
|
|
382
|
+
Viem.isMainnet(chainId)
|
|
383
|
+
)
|
|
384
|
+
return Response.error(c, {
|
|
385
|
+
code: 'api_key_forbidden',
|
|
386
|
+
message: 'Sandbox API keys only support testnet. Pass a testnet `chainId`.',
|
|
387
|
+
status: 403,
|
|
388
|
+
})
|
|
389
|
+
|
|
390
|
+
await next()
|
|
391
|
+
if (c.get('zones').has(chainId)) c.set('edgeCache', undefined)
|
|
392
|
+
})
|
|
393
|
+
|
|
302
394
|
// Collect each mounted group's OpenAPI metadata: Hono's `.route()` drops
|
|
303
395
|
// sub-app metadata, so a group attaches it to its instance (a WeakMap) and we
|
|
304
396
|
// read it back here. Patching the runtime method, not the type, keeps `hc`.
|
|
@@ -310,6 +402,15 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
310
402
|
metadata.push(entry)
|
|
311
403
|
for (const chainId of entry.supportedChainIds ?? []) supportedChainIds.add(chainId)
|
|
312
404
|
}
|
|
405
|
+
if (Metadata.usesDefaultChain(sub))
|
|
406
|
+
for (const route of sub.routes) {
|
|
407
|
+
if (route.method === 'ALL') continue
|
|
408
|
+
defaultChainRouteHandlers.add(route.handler)
|
|
409
|
+
EdgeCache.setEligibility(
|
|
410
|
+
route.handler,
|
|
411
|
+
(c: Context<Environment>) => !c.get('zones').has(c.get('chainId')),
|
|
412
|
+
)
|
|
413
|
+
}
|
|
313
414
|
return route(path, sub)
|
|
314
415
|
}) as typeof route
|
|
315
416
|
|
|
@@ -352,7 +453,11 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
352
453
|
return entry ? [...metadata, entry] : metadata
|
|
353
454
|
})()
|
|
354
455
|
const contributedSchemes = Object.assign({}, ...metadata_all.map((m) => m.securitySchemes ?? {})) // prettier-ignore
|
|
355
|
-
const tags =
|
|
456
|
+
const tags = [
|
|
457
|
+
...new Map(
|
|
458
|
+
metadata_all.flatMap((m) => (m.tags ?? []).map((tag) => [tag.name, tag] as const)),
|
|
459
|
+
).values(),
|
|
460
|
+
]
|
|
356
461
|
// Tag groups contributed under the same name merge into one sidebar group,
|
|
357
462
|
// deduped and filtered to defined tags (a group may list a tag another
|
|
358
463
|
// surface defines, e.g. `Auth` from the built-in session surface).
|
|
@@ -425,15 +530,15 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
425
530
|
// from each route's resolved auth policy (the single source of truth), so
|
|
426
531
|
// the anonymous option and `402` appear only where the public/MPP lanes
|
|
427
532
|
// are enabled, not on every operation via the document default.
|
|
428
|
-
applyAccess(generated.paths, Auth.describeAccess(app))
|
|
533
|
+
OpenApiDocument.applyAccess(generated.paths, Auth.describeAccess(app))
|
|
429
534
|
// Point the `/rpc` operation at the OpenRPC document via `x-openrpc`.
|
|
430
|
-
applyOpenrpcLink(generated.paths, basePath)
|
|
535
|
+
OpenApiDocument.applyOpenrpcLink(generated.paths, basePath)
|
|
431
536
|
// Re-order paths so list endpoints appear before get endpoints inside each
|
|
432
537
|
// tag group in the sidebar. We classify by operation summary, which every
|
|
433
538
|
// handler sets as either "List ..." or "Get ...". The reference groups by
|
|
434
539
|
// tag and preserves document path order within a tag, so reordering here
|
|
435
540
|
// drives the sidebar sub-item order.
|
|
436
|
-
return { ...generated, ...webhooksDoc, paths: sortPaths(generated.paths) }
|
|
541
|
+
return { ...generated, ...webhooksDoc, paths: OpenApiDocument.sortPaths(generated.paths) }
|
|
437
542
|
}
|
|
438
543
|
let finalized = false
|
|
439
544
|
const finalize = () => {
|
|
@@ -474,8 +579,8 @@ export function create<const path extends string = '/'>(options: create.Options<
|
|
|
474
579
|
* Hono type (which `testClient` needs); intersecting the listener onto the
|
|
475
580
|
* app degrades the typed proxy inference.
|
|
476
581
|
*/
|
|
477
|
-
export function listener(app: { fetch:
|
|
478
|
-
return getRequestListener(app.fetch)
|
|
582
|
+
export function listener(app: { fetch: NodeServer.Fetch }): Listener {
|
|
583
|
+
return NodeServer.getRequestListener(app.fetch)
|
|
479
584
|
}
|
|
480
585
|
|
|
481
586
|
export declare namespace create {
|
|
@@ -507,6 +612,8 @@ export declare namespace create {
|
|
|
507
612
|
metrics?: Metrics.Metrics | undefined
|
|
508
613
|
/** Base path to mount API handlers under. Provided as a literal via the `path` generic so the resulting Hono schema keeps typed route paths for `testClient`. */
|
|
509
614
|
path?: path | undefined
|
|
615
|
+
/** Providers available to mounted route groups. */
|
|
616
|
+
providers?: readonly Provider.Provider[] | undefined
|
|
510
617
|
/** Tempo RPC options, including per-request routing by request principal. */
|
|
511
618
|
rpc?: Viem.getClient.Rpc | undefined
|
|
512
619
|
/** OpenAPI `servers` for the generated document. Defaults to a single relative server (the host serving the doc), so the reference targets the deployment it is served from. Set the canonical public URL(s) here, e.g. `[{ url: 'https://api.tempo.xyz' }]`. */
|
|
@@ -515,6 +622,8 @@ export declare namespace create {
|
|
|
515
622
|
scopes?: readonly Scope.Entry[] | undefined
|
|
516
623
|
/** Extra chain ids served beyond the built-in chains and `defaultChainId`. */
|
|
517
624
|
supportedChainIds?: readonly number[] | undefined
|
|
625
|
+
/** Zone chains served by this deployment. Pass true to use the hosted Zone list. */
|
|
626
|
+
zones?: true | readonly Chain[] | undefined
|
|
518
627
|
}
|
|
519
628
|
|
|
520
629
|
/** KV state-store configuration. */
|
|
@@ -612,157 +721,206 @@ async function errorFromException(c: Context<Environment>, cause: HTTPException)
|
|
|
612
721
|
const response = cause.getResponse()
|
|
613
722
|
response.headers.set('tempo-request-id', requestId)
|
|
614
723
|
|
|
615
|
-
if (!isJson(response)) return response
|
|
724
|
+
if (!ResponseBody.isJson(response)) return response
|
|
616
725
|
|
|
617
726
|
const body = await response
|
|
618
727
|
.clone()
|
|
619
728
|
.json()
|
|
620
729
|
.catch(() => null)
|
|
621
|
-
if (!
|
|
730
|
+
if (!body || typeof body !== 'object' || Array.isArray(body)) return response
|
|
622
731
|
|
|
623
732
|
return c.json({ ...body, requestId }, cause.status, Object.fromEntries(response.headers))
|
|
624
733
|
}
|
|
625
734
|
|
|
626
|
-
|
|
627
|
-
//
|
|
628
|
-
//
|
|
629
|
-
// tokens" — `/
|
|
630
|
-
//
|
|
631
|
-
//
|
|
632
|
-
//
|
|
633
|
-
//
|
|
634
|
-
//
|
|
635
|
-
//
|
|
636
|
-
//
|
|
637
|
-
//
|
|
638
|
-
//
|
|
639
|
-
//
|
|
640
|
-
//
|
|
641
|
-
//
|
|
642
|
-
//
|
|
643
|
-
//
|
|
644
|
-
//
|
|
645
|
-
//
|
|
646
|
-
//
|
|
647
|
-
//
|
|
648
|
-
//
|
|
649
|
-
//
|
|
650
|
-
//
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
const
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
735
|
+
namespace OpenApiDocument {
|
|
736
|
+
// Reorder OpenAPI `paths` so reads come before writes within each tag group,
|
|
737
|
+
// and shallower paths come before deeper paths inside each bucket so root-level
|
|
738
|
+
// routes ("List tokens" — `/tokens`) win over nested ones ("List address
|
|
739
|
+
// tokens" — `/addresses/{address}/tokens`). Tie-break by original document
|
|
740
|
+
// order to keep registered grouping.
|
|
741
|
+
//
|
|
742
|
+
// A path is ranked as a unit because REST groups verbs onto shared paths (and
|
|
743
|
+
// the reference renders all methods of a path adjacently, in the fixed canonical
|
|
744
|
+
// method order GET→POST→PATCH→DELETE), so two operations on the same path can
|
|
745
|
+
// never be separated or reordered relative to each other.
|
|
746
|
+
//
|
|
747
|
+
// Read-only tags keep lists-before-gets (tiers 0/2). The `Webhooks` tag instead
|
|
748
|
+
// groups all reads (lists, then the item GET) ahead of the item writes, scoped
|
|
749
|
+
// to that tag so the read tags are untouched. The shared-path constraint means
|
|
750
|
+
// the desired "Create, all GETs (lists first), Update, Delete" can only be
|
|
751
|
+
// approximated: `Create webhook` shares `/webhooks` with `List webhooks`, and
|
|
752
|
+
// vocs renders GET before POST, so "List webhooks" unavoidably precedes
|
|
753
|
+
// "Create". `Get`/`Update`/`Delete` all share `/webhooks/{id}`, so they render
|
|
754
|
+
// adjacently as Get→Update→Delete. The `{id}` item is tiered right after the
|
|
755
|
+
// collection root, so `Get/Update/Delete` sit just below `List webhooks/Create`,
|
|
756
|
+
// ahead of the remaining lists and action POSTs. Tiers:
|
|
757
|
+
// 0 collection root (`GET`+`POST /webhooks`) → "List webhooks, Create webhook"
|
|
758
|
+
// 1 item (`GET`+`PATCH`+`DELETE /webhooks/{id}`) → "Get, Update, Delete"
|
|
759
|
+
// 2 other list-only paths (`/event-types`, `/deliveries`)
|
|
760
|
+
// 3 other writes/actions (`POST .../ping`, `.../retry`)
|
|
761
|
+
// Funding deposit paths preserve their resource-specific sidebar order.
|
|
762
|
+
const fundingDepositOperationOrder = [
|
|
763
|
+
'createFundingDepositAddress',
|
|
764
|
+
'reconcileFundingDepositAddress',
|
|
765
|
+
'getFundingDepositAddress',
|
|
766
|
+
'getFundingDeposit',
|
|
767
|
+
'listFundingDepositAddressDeposits',
|
|
768
|
+
'listFundingDeposits',
|
|
769
|
+
] as const
|
|
770
|
+
|
|
771
|
+
export function sortPaths(paths: PathsObject): PathsObject {
|
|
772
|
+
const entries = Object.entries(paths)
|
|
773
|
+
const rank = (entry: [string, PathItem]) => {
|
|
774
|
+
const operations = Object.values(entry[1])
|
|
775
|
+
const summaries = operations.flatMap((op) =>
|
|
776
|
+
isOperation(op) && op.summary ? [op.summary] : [],
|
|
777
|
+
)
|
|
778
|
+
const has = (prefix: string) => summaries.some((summary) => summary.startsWith(prefix))
|
|
779
|
+
if (operations.some((op) => isOperation(op) && op.tags?.includes('Webhooks'))) {
|
|
780
|
+
if (has('Create')) return 0
|
|
781
|
+
if (has('Get')) return 1
|
|
782
|
+
if (has('List')) return 2
|
|
783
|
+
return 3
|
|
784
|
+
}
|
|
785
|
+
if (operations.some((op) => isOperation(op) && op.tags?.includes('Deposit Addresses'))) {
|
|
786
|
+
const index = fundingDepositOperationOrder.findIndex((operationId) =>
|
|
787
|
+
operations.some((op) => isOperation(op) && op.operationId === operationId),
|
|
788
|
+
)
|
|
789
|
+
if (index >= 0) return index
|
|
790
|
+
}
|
|
791
|
+
if (/\/v1\/funding(?:\/|$)/.test(entry[0])) {
|
|
792
|
+
if (has('Create')) return 1
|
|
793
|
+
if (has('Get transfer')) return 2
|
|
794
|
+
return 0
|
|
795
|
+
}
|
|
796
|
+
if (has('List')) return has('Create') ? 1 : 0
|
|
797
|
+
if (has('Get')) return 2
|
|
798
|
+
if (has('Create')) return 3
|
|
799
|
+
return 4
|
|
664
800
|
}
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
801
|
+
const depth = (path: string) =>
|
|
802
|
+
path.endsWith('/rpc') ? 2 : path.split('/').filter(Boolean).length
|
|
803
|
+
const indexed = entries.map(
|
|
804
|
+
(entry, index) => [entry, index, rank(entry), depth(entry[0])] as const,
|
|
805
|
+
)
|
|
806
|
+
indexed.sort(([, ai, ar, ad], [, bi, br, bd]) => ar - br || ad - bd || ai - bi)
|
|
807
|
+
return Object.fromEntries(indexed.map(([entry]) => entry))
|
|
669
808
|
}
|
|
670
|
-
const depth = (path: string) =>
|
|
671
|
-
path.endsWith('/rpc') ? 2 : path.split('/').filter(Boolean).length
|
|
672
|
-
const indexed = entries.map(
|
|
673
|
-
(entry, index) => [entry, index, rank(entry), depth(entry[0])] as const,
|
|
674
|
-
)
|
|
675
|
-
indexed.sort(([, ai, ar, ad], [, bi, br, bd]) => ar - br || ad - bd || ai - bi)
|
|
676
|
-
return Object.fromEntries(indexed.map(([entry]) => entry))
|
|
677
|
-
}
|
|
678
809
|
|
|
679
|
-
/**
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
function applyAccess(paths: PathsObject, access: Record<string, Auth.OperationAccess>) {
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
810
|
+
/**
|
|
811
|
+
* Applies route security, required scopes, and payment responses from resolved access lanes.
|
|
812
|
+
* API keys support header, query, and bearer authentication.
|
|
813
|
+
*/
|
|
814
|
+
export function applyAccess(paths: PathsObject, access: Record<string, Auth.OperationAccess>) {
|
|
815
|
+
for (const item of Object.values(paths)) {
|
|
816
|
+
for (const op of Object.values(item as Record<string, unknown>)) {
|
|
817
|
+
if (!isMutableOperation(op)) continue
|
|
818
|
+
const lanes = access[op.operationId]
|
|
819
|
+
if (!lanes) continue
|
|
820
|
+
const security = [
|
|
821
|
+
...(lanes.apiKey ? [{ apiKey: [] }, { queryApiKey: [] }, { bearerAuth: [] }] : []),
|
|
822
|
+
...(lanes.session
|
|
823
|
+
? [{ session: [] }, ...(lanes.apiKey ? [] : [{ bearerAuth: [] }])]
|
|
824
|
+
: []),
|
|
825
|
+
...(lanes.public ? [{}] : []),
|
|
826
|
+
]
|
|
827
|
+
if (security.length > 0) op.security = security
|
|
828
|
+
if (lanes.scopes.length > 0) op['x-required-scopes'] = [...lanes.scopes]
|
|
829
|
+
if (lanes.mpp) op.responses = { ...op.responses, 402: OpenApi.paymentChallengeRef }
|
|
830
|
+
else if (op.responses) delete op.responses['402']
|
|
831
|
+
}
|
|
698
832
|
}
|
|
699
833
|
}
|
|
700
|
-
}
|
|
701
834
|
|
|
702
|
-
/**
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
function applyOpenrpcLink(paths: PathsObject, basePath: string) {
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
}
|
|
835
|
+
/**
|
|
836
|
+
* Links the JSON-RPC passthrough operation to the OpenRPC document (served at
|
|
837
|
+
* `{basePath}/openrpc.json`) via an `x-openrpc` vendor extension. The raw `/rpc`
|
|
838
|
+
* request body is opaque to OpenAPI, so this lets consumers discover the
|
|
839
|
+
* method/param/return schemas it accepts.
|
|
840
|
+
*
|
|
841
|
+
* The public `/openapi.json` keeps a URL reference (small, conventional). The
|
|
842
|
+
* docs handler instead inlines the document — see `inlineOpenrpc` in `tapimo/docs`.
|
|
843
|
+
*/
|
|
844
|
+
export function applyOpenrpcLink(paths: PathsObject, basePath: string) {
|
|
845
|
+
// `basePath` is `/` at the root mount and `/api` etc. otherwise; strip any
|
|
846
|
+
// trailing slash so the join never doubles up (`//openrpc.json`).
|
|
847
|
+
const url = `${basePath.replace(/\/$/, '')}/openrpc.json`
|
|
848
|
+
for (const item of Object.values(paths))
|
|
849
|
+
for (const op of Object.values(item as Record<string, unknown>))
|
|
850
|
+
if (isMutableOperation(op) && isRpcOperation(op)) op['x-openrpc'] = url
|
|
851
|
+
}
|
|
719
852
|
|
|
720
|
-
type PathsObject = Awaited<ReturnType<typeof generateSpecs>>['paths']
|
|
721
|
-
type PathItem = PathsObject[string]
|
|
722
|
-
type Operation = { summary?: string | undefined }
|
|
723
|
-
type MutableOperation = {
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
}
|
|
853
|
+
type PathsObject = Awaited<ReturnType<typeof generateSpecs>>['paths']
|
|
854
|
+
type PathItem = PathsObject[string]
|
|
855
|
+
type Operation = { operationId?: string | undefined; summary?: string | undefined }
|
|
856
|
+
type MutableOperation = {
|
|
857
|
+
operationId: string
|
|
858
|
+
responses?: Record<string, unknown> | undefined
|
|
859
|
+
security?: unknown
|
|
860
|
+
'x-openrpc'?: unknown
|
|
861
|
+
'x-required-scopes'?: unknown
|
|
862
|
+
}
|
|
730
863
|
|
|
731
|
-
function isRpcOperation(op: MutableOperation) {
|
|
732
|
-
|
|
733
|
-
}
|
|
864
|
+
function isRpcOperation(op: MutableOperation) {
|
|
865
|
+
return op.operationId === 'rpcRequest'
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
function isOperation(value: unknown): value is Operation {
|
|
869
|
+
return !!value && typeof value === 'object' && 'summary' in value
|
|
870
|
+
}
|
|
734
871
|
|
|
735
|
-
function
|
|
736
|
-
|
|
872
|
+
function isMutableOperation(value: unknown): value is MutableOperation {
|
|
873
|
+
return (
|
|
874
|
+
!!value &&
|
|
875
|
+
typeof value === 'object' &&
|
|
876
|
+
!Array.isArray(value) &&
|
|
877
|
+
'operationId' in value &&
|
|
878
|
+
typeof value.operationId === 'string'
|
|
879
|
+
)
|
|
880
|
+
}
|
|
737
881
|
}
|
|
738
882
|
|
|
739
|
-
|
|
740
|
-
|
|
883
|
+
namespace ResponseBody {
|
|
884
|
+
export function isJson(response: globalThis.Response) {
|
|
885
|
+
return response.headers.get('content-type')?.includes('application/json') ?? false
|
|
886
|
+
}
|
|
741
887
|
}
|
|
742
888
|
|
|
743
|
-
|
|
744
|
-
|
|
889
|
+
namespace NodeServer {
|
|
890
|
+
type GetRequestListener = (typeof import('@hono/node-server'))['getRequestListener']
|
|
891
|
+
export type Fetch = Parameters<GetRequestListener>[0]
|
|
892
|
+
type NodeRequestListener = ReturnType<GetRequestListener>
|
|
893
|
+
|
|
894
|
+
export function getRequestListener(fetch: Fetch): Listener {
|
|
895
|
+
let listener: NodeRequestListener | undefined
|
|
896
|
+
return async (incoming_, outgoing_) => {
|
|
897
|
+
// Resolve the Node-only adapter at call time. The split specifier keeps
|
|
898
|
+
// Worker bundlers from eagerly including a server adapter they never run.
|
|
899
|
+
if (listener === undefined) {
|
|
900
|
+
const nodeServer = (await import(
|
|
901
|
+
/* @vite-ignore */ ['@hono', 'node-server'].join('/')
|
|
902
|
+
)) as typeof import('@hono/node-server')
|
|
903
|
+
listener = nodeServer.getRequestListener(fetch)
|
|
904
|
+
}
|
|
905
|
+
return listener(incoming_ as never, outgoing_ as never)
|
|
906
|
+
}
|
|
907
|
+
}
|
|
745
908
|
}
|
|
746
909
|
|
|
747
|
-
|
|
748
|
-
|
|
910
|
+
/** Error thrown when an app registers the same provider identifier more than once. */
|
|
911
|
+
export class DuplicateProviderIdError extends Error {
|
|
912
|
+
override name = 'App.DuplicateProviderIdError'
|
|
913
|
+
|
|
914
|
+
constructor(id: string) {
|
|
915
|
+
super(`Duplicate provider id "${id}".`)
|
|
916
|
+
}
|
|
749
917
|
}
|
|
750
918
|
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
return async (incoming_, outgoing_) => {
|
|
758
|
-
// Resolve the Node-only adapter at call time. The split specifier keeps
|
|
759
|
-
// Worker bundlers from eagerly including a server adapter they never run.
|
|
760
|
-
if (listener === undefined) {
|
|
761
|
-
const nodeServer = (await import(
|
|
762
|
-
/* @vite-ignore */ ['@hono', 'node-server'].join('/')
|
|
763
|
-
)) as typeof import('@hono/node-server')
|
|
764
|
-
listener = nodeServer.getRequestListener(fetch)
|
|
765
|
-
}
|
|
766
|
-
return listener(incoming_ as never, outgoing_ as never)
|
|
919
|
+
/** Error thrown when an app registers a provider with a non-normalized identifier. */
|
|
920
|
+
export class InvalidProviderIdError extends Error {
|
|
921
|
+
override name = 'App.InvalidProviderIdError'
|
|
922
|
+
|
|
923
|
+
constructor(id: string) {
|
|
924
|
+
super(`Invalid provider id "${id}". Provider ids must be lowercase and trimmed.`)
|
|
767
925
|
}
|
|
768
926
|
}
|