tapimo 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ApiKeys.d.ts +24 -7
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +17 -5
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +12104 -7861
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +191 -128
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +10 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +17 -4
- package/dist/Assets.js.map +1 -1
- package/dist/Scope.d.ts +19 -8
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +25 -9
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +1 -1
- package/dist/admin/App.d.ts +601 -20
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +12 -2
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +94 -11
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +141 -32
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +1069 -0
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
- package/dist/admin/apps/earn-vaults.js +409 -0
- package/dist/admin/apps/earn-vaults.js.map +1 -0
- package/dist/admin/apps/verified-tokens.d.ts +166 -166
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +151 -95
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts +2 -0
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +18 -2
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +22 -1
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +59 -39
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/Zones.d.ts +8335 -0
- package/dist/apps/Zones.d.ts.map +1 -0
- package/dist/apps/Zones.js +38 -0
- package/dist/apps/Zones.js.map +1 -0
- package/dist/apps/data/App.d.ts +14377 -10165
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +91 -19
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FxOracle.d.ts +1 -1
- package/dist/apps/data/FxOracle.d.ts.map +1 -1
- package/dist/apps/data/index.d.ts +0 -1
- package/dist/apps/data/index.d.ts.map +1 -1
- package/dist/apps/data/index.js +0 -1
- package/dist/apps/data/index.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +32 -32
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +130 -65
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +312 -312
- package/dist/apps/data/routes/balances.d.ts +18 -18
- package/dist/apps/data/routes/balances.js +5 -5
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +176 -176
- package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
- package/dist/apps/data/routes/coingecko.js +62 -35
- package/dist/apps/data/routes/coingecko.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +2144 -0
- package/dist/apps/data/routes/earn.d.ts.map +1 -0
- package/dist/apps/data/routes/earn.js +947 -0
- package/dist/apps/data/routes/earn.js.map +1 -0
- package/dist/apps/data/routes/exchanges.d.ts +1231 -324
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +656 -193
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +59 -8
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +4092 -387
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +1403 -256
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +5 -5
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +19 -2
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +265 -265
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +11 -11
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.d.ts +5 -5
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +211 -22
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +36 -36
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +49 -9
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +116 -88
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +198 -91
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +55 -55
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +78 -39
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +78 -29
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +165 -67
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +10 -10
- package/dist/apps/data/routes/valuation.js +2 -2
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +34 -9
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +5 -3
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +175 -65
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +281 -0
- package/dist/apps/data/routes/zones.d.ts.map +1 -0
- package/dist/apps/data/routes/zones.js +252 -0
- package/dist/apps/data/routes/zones.js.map +1 -0
- package/dist/apps/docs/reference.js +6 -5
- package/dist/apps/docs/reference.js.map +1 -1
- package/dist/apps/index.d.ts +2 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +2 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/management/App.d.ts +670 -670
- package/dist/apps/management/Billing.d.ts +8 -0
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +12 -0
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/Error.d.ts +12 -0
- package/dist/apps/management/Error.d.ts.map +1 -0
- package/dist/apps/management/Error.js +10 -0
- package/dist/apps/management/Error.js.map +1 -0
- package/dist/apps/management/routes/api-keys.d.ts +5 -5
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +2 -8
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +119 -119
- package/dist/apps/management/routes/faucet.d.ts +35 -35
- package/dist/apps/management/routes/invitations.d.ts +62 -62
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +4 -10
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +30 -30
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +78 -78
- package/dist/apps/management/routes/orgs.d.ts +48 -48
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +2 -8
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +9 -9
- package/dist/apps/management/routes/scopes.js +2 -2
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +80 -80
- package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
- package/dist/apps/management/routes/webhooks.d.ts +50 -50
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +15 -3
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/App.d.ts +55 -56
- package/dist/apps/mpp/App.d.ts.map +1 -1
- package/dist/apps/mpp/App.js +192 -27
- package/dist/apps/mpp/App.js.map +1 -1
- package/dist/apps/mpp/Mpp.d.ts +0 -20
- package/dist/apps/mpp/Mpp.d.ts.map +1 -1
- package/dist/apps/mpp/Mpp.js +0 -24
- package/dist/apps/mpp/Mpp.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Adapter.js +66 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -0
- package/dist/apps/mpp/internal/Error.d.ts +4 -0
- package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Error.js +41 -0
- package/dist/apps/mpp/internal/Error.js.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.js +28 -0
- package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
- package/dist/apps/mpp/internal/Policy.d.ts +46 -0
- package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Policy.js +57 -0
- package/dist/apps/mpp/internal/Policy.js.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.js +18 -0
- package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
- package/dist/apps/mpp/internal/Screening.d.ts +35 -0
- package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Screening.js +20 -0
- package/dist/apps/mpp/internal/Screening.js.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.js +103 -0
- package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
- package/dist/apps/mpp/internal/Utils.d.ts +7 -0
- package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Utils.js +24 -0
- package/dist/apps/mpp/internal/Utils.js.map +1 -0
- package/dist/apps/relay/App.js +184 -24
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/relay/Sponsorships.d.ts +4 -0
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +16 -7
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/db/Db.d.ts +20 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +342 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +921 -1
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +269 -1
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +68 -0
- package/dist/db/tables/earnVaults.d.ts.map +1 -0
- package/dist/db/tables/earnVaults.js +72 -0
- package/dist/db/tables/earnVaults.js.map +1 -0
- package/dist/db/tables/fundingCatalog.d.ts +56 -0
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
- package/dist/db/tables/fundingCatalog.js +85 -0
- package/dist/db/tables/fundingCatalog.js.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.js +206 -0
- package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
- package/dist/db/tables/fundingDeposits.d.ts +115 -0
- package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
- package/dist/db/tables/fundingDeposits.js +100 -0
- package/dist/db/tables/fundingDeposits.js.map +1 -0
- package/dist/db/tables/fundingIdempotency.d.ts +91 -0
- package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
- package/dist/db/tables/fundingIdempotency.js +103 -0
- package/dist/db/tables/fundingIdempotency.js.map +1 -0
- package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
- package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferEvents.js +18 -0
- package/dist/db/tables/fundingTransferEvents.js.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.js +27 -0
- package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
- package/dist/db/tables/fundingTransfers.d.ts +82 -0
- package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
- package/dist/db/tables/fundingTransfers.js +89 -0
- package/dist/db/tables/fundingTransfers.js.map +1 -0
- package/dist/db/tables/organizations.d.ts +8 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +35 -0
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/projects.d.ts +8 -0
- package/dist/db/tables/projects.d.ts.map +1 -1
- package/dist/db/tables/projects.js +16 -0
- package/dist/db/tables/projects.js.map +1 -1
- package/dist/db/tables/requestUsage.d.ts +13 -0
- package/dist/db/tables/requestUsage.d.ts.map +1 -1
- package/dist/db/tables/requestUsage.js +16 -0
- package/dist/db/tables/requestUsage.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +4 -2
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +14 -4
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/users.d.ts +8 -0
- package/dist/db/tables/users.d.ts.map +1 -1
- package/dist/db/tables/users.js +16 -0
- package/dist/db/tables/users.js.map +1 -1
- package/dist/db/tables/verifiedTokens.d.ts +14 -7
- package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
- package/dist/db/tables/verifiedTokens.js +9 -7
- package/dist/db/tables/verifiedTokens.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +24 -3
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/relay.js +108 -108
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +26 -0
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +35 -2
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +16 -10
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/Cursor.js +1 -1
- package/dist/internal/Cursor.js.map +1 -1
- package/dist/internal/EarnRates.d.ts +89 -0
- package/dist/internal/EarnRates.d.ts.map +1 -0
- package/dist/internal/EarnRates.js +266 -0
- package/dist/internal/EarnRates.js.map +1 -0
- package/dist/internal/EarnVaults.d.ts +171 -0
- package/dist/internal/EarnVaults.d.ts.map +1 -0
- package/dist/internal/EarnVaults.js +547 -0
- package/dist/internal/EarnVaults.js.map +1 -0
- package/dist/internal/EdgeCache.d.ts +9 -2
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +36 -9
- package/dist/internal/EdgeCache.js.map +1 -1
- package/dist/internal/Id.d.ts +11 -0
- package/dist/internal/Id.d.ts.map +1 -1
- package/dist/internal/Id.js +13 -0
- package/dist/internal/Id.js.map +1 -1
- package/dist/internal/Idempotency.d.ts +83 -0
- package/dist/internal/Idempotency.d.ts.map +1 -0
- package/dist/internal/Idempotency.js +113 -0
- package/dist/internal/Idempotency.js.map +1 -0
- package/dist/internal/Log.d.ts +64 -9
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +29 -7
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +47 -1
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +1 -1
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +3 -0
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Provider.d.ts +14 -0
- package/dist/internal/Provider.d.ts.map +1 -0
- package/dist/internal/Provider.js +5 -0
- package/dist/internal/Provider.js.map +1 -0
- package/dist/internal/Schema.d.ts +8 -3
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +24 -13
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +6 -0
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +35 -0
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +43 -24
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +79 -11
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Viem.d.ts +82 -65
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +83 -12
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +34 -28
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +9 -0
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +15 -10
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/exchange/Provider.d.ts +219 -0
- package/dist/internal/exchange/Provider.d.ts.map +1 -0
- package/dist/internal/exchange/Provider.js +117 -0
- package/dist/internal/exchange/Provider.js.map +1 -0
- package/dist/internal/exchange/index.d.ts +2 -0
- package/dist/internal/exchange/index.d.ts.map +1 -0
- package/dist/internal/exchange/index.js +2 -0
- package/dist/internal/exchange/index.js.map +1 -0
- package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
- package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
- package/dist/internal/exchange/providers/uniswap.js +553 -0
- package/dist/internal/exchange/providers/uniswap.js.map +1 -0
- package/dist/internal/funding/Action.d.ts +55 -0
- package/dist/internal/funding/Action.d.ts.map +1 -0
- package/dist/internal/funding/Action.js +74 -0
- package/dist/internal/funding/Action.js.map +1 -0
- package/dist/internal/funding/Catalog.d.ts +107 -0
- package/dist/internal/funding/Catalog.d.ts.map +1 -0
- package/dist/internal/funding/Catalog.js +270 -0
- package/dist/internal/funding/Catalog.js.map +1 -0
- package/dist/internal/funding/Chain.d.ts +76 -0
- package/dist/internal/funding/Chain.d.ts.map +1 -0
- package/dist/internal/funding/Chain.js +38 -0
- package/dist/internal/funding/Chain.js.map +1 -0
- package/dist/internal/funding/Deposit.d.ts +366 -0
- package/dist/internal/funding/Deposit.d.ts.map +1 -0
- package/dist/internal/funding/Deposit.js +286 -0
- package/dist/internal/funding/Deposit.js.map +1 -0
- package/dist/internal/funding/DepositAddress.d.ts +345 -0
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
- package/dist/internal/funding/DepositAddress.js +189 -0
- package/dist/internal/funding/DepositAddress.js.map +1 -0
- package/dist/internal/funding/Evidence.d.ts +52 -0
- package/dist/internal/funding/Evidence.d.ts.map +1 -0
- package/dist/internal/funding/Evidence.js +314 -0
- package/dist/internal/funding/Evidence.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts +1186 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -0
- package/dist/internal/funding/Provider.js +1081 -0
- package/dist/internal/funding/Provider.js.map +1 -0
- package/dist/internal/funding/Reconciliation.d.ts +113 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
- package/dist/internal/funding/Reconciliation.js +676 -0
- package/dist/internal/funding/Reconciliation.js.map +1 -0
- package/dist/internal/funding/Route.d.ts +21 -0
- package/dist/internal/funding/Route.d.ts.map +1 -0
- package/dist/internal/funding/Route.js +5 -0
- package/dist/internal/funding/Route.js.map +1 -0
- package/dist/internal/funding/Subsidy.d.ts +113 -0
- package/dist/internal/funding/Subsidy.d.ts.map +1 -0
- package/dist/internal/funding/Subsidy.js +138 -0
- package/dist/internal/funding/Subsidy.js.map +1 -0
- package/dist/internal/funding/Token.d.ts +41 -0
- package/dist/internal/funding/Token.d.ts.map +1 -0
- package/dist/internal/funding/Token.js +22 -0
- package/dist/internal/funding/Token.js.map +1 -0
- package/dist/internal/funding/Transfer.d.ts +643 -0
- package/dist/internal/funding/Transfer.d.ts.map +1 -0
- package/dist/internal/funding/Transfer.js +332 -0
- package/dist/internal/funding/Transfer.js.map +1 -0
- package/dist/internal/funding/index.d.ts +13 -0
- package/dist/internal/funding/index.d.ts.map +1 -0
- package/dist/internal/funding/index.js +13 -0
- package/dist/internal/funding/index.js.map +1 -0
- package/dist/internal/funding/providers/across.d.ts +21 -0
- package/dist/internal/funding/providers/across.d.ts.map +1 -0
- package/dist/internal/funding/providers/across.js +117 -0
- package/dist/internal/funding/providers/across.js.map +1 -0
- package/dist/internal/funding/providers/relay.d.ts +46 -0
- package/dist/internal/funding/providers/relay.d.ts.map +1 -0
- package/dist/internal/funding/providers/relay.js +464 -0
- package/dist/internal/funding/providers/relay.js.map +1 -0
- package/dist/internal/funding/providers/rhino.d.ts +15 -0
- package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
- package/dist/internal/funding/providers/rhino.js +116 -0
- package/dist/internal/funding/providers/rhino.js.map +1 -0
- package/dist/internal/funding/providers/squid.d.ts +19 -0
- package/dist/internal/funding/providers/squid.d.ts.map +1 -0
- package/dist/internal/funding/providers/squid.js +120 -0
- package/dist/internal/funding/providers/squid.js.map +1 -0
- package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
- package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
- package/dist/internal/funding/providers/symbiosis.js +176 -0
- package/dist/internal/funding/providers/symbiosis.js.map +1 -0
- package/dist/internal/index.d.ts +5 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +5 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/webhookDestinations/url.js +61 -57
- package/dist/internal/webhookDestinations/url.js.map +1 -1
- package/dist/providers/index.d.ts +43 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/package.json +9 -4
- package/src/ApiKeys.test.ts +11 -7
- package/src/ApiKeys.ts +37 -9
- package/src/App.test.ts +85 -10
- package/src/App.ts +224 -137
- package/src/Assets.ts +29 -4
- package/src/Client.test-d.ts +650 -30
- package/src/Scope.test.ts +19 -0
- package/src/Scope.ts +28 -11
- package/src/Webhooks.test.ts +25 -0
- package/src/Webhooks.ts +1 -1
- package/src/admin/App.test.ts +9 -2
- package/src/admin/App.ts +32 -9
- package/src/admin/apps/api-keys.test.ts +167 -23
- package/src/admin/apps/api-keys.ts +166 -28
- package/src/admin/apps/earn-vaults.test.ts +338 -0
- package/src/admin/apps/earn-vaults.ts +572 -0
- package/src/admin/apps/scopes.test.ts +16 -1
- package/src/admin/ui/plugin.ts +2 -2
- package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
- package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
- package/src/admin/ui/src/components/Page.tsx +1 -1
- package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
- package/src/admin/ui/src/lib/api-keys.ts +37 -7
- package/src/admin/ui/src/lib/client.ts +1 -1
- package/src/admin/ui/src/lib/config.ts +1 -1
- package/src/admin/ui/src/lib/early-access.ts +8 -9
- package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
- package/src/admin/ui/src/lib/format.ts +13 -0
- package/src/admin/ui/src/lib/organizations.test.ts +14 -4
- package/src/admin/ui/src/lib/organizations.ts +7 -1
- package/src/admin/ui/src/lib/response.ts +22 -0
- package/src/admin/ui/src/lib/scopes.test.ts +19 -11
- package/src/admin/ui/src/lib/scopes.ts +28 -7
- package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
- package/src/admin/ui/src/routeTree.gen.ts +70 -7
- package/src/admin/ui/src/router.tsx +2 -2
- package/src/admin/ui/src/routes/__root.tsx +9 -8
- package/src/admin/ui/src/routes/api-keys.tsx +475 -64
- package/src/admin/ui/src/routes/early-access.tsx +5 -12
- package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
- package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
- package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
- package/src/admin/ui/src/routes/organizations.tsx +4 -7
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
- package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
- package/src/admin/ui/vite.config.ts +4 -1
- package/src/admin/ui.generated.ts +189 -95
- package/src/analytics/Analytics.test.ts +69 -10
- package/src/analytics/Analytics.ts +20 -1
- package/src/analytics/tables/requestEvents.ts +79 -37
- package/src/apps/Zones.test.ts +33 -0
- package/src/apps/Zones.ts +40 -0
- package/src/apps/composition.test.ts +84 -1
- package/src/apps/data/App.test.ts +38 -9
- package/src/apps/data/App.ts +96 -33
- package/src/apps/data/FxOracle.ts +1 -1
- package/src/apps/data/index.ts +0 -1
- package/src/apps/data/routes/activities.test.ts +82 -6
- package/src/apps/data/routes/activities.ts +131 -71
- package/src/apps/data/routes/balances.test.ts +50 -37
- package/src/apps/data/routes/balances.ts +5 -5
- package/src/apps/data/routes/blocks.test.ts +2 -0
- package/src/apps/data/routes/coingecko.test.ts +22 -0
- package/src/apps/data/routes/coingecko.ts +84 -48
- package/src/apps/data/routes/earn.test.ts +1108 -0
- package/src/apps/data/routes/earn.ts +1391 -0
- package/src/apps/data/routes/exchanges.test.ts +82 -33
- package/src/apps/data/routes/exchanges.ts +842 -227
- package/src/apps/data/routes/fee-amm.test.ts +4 -6
- package/src/apps/data/routes/fee-amm.ts +69 -12
- package/src/apps/data/routes/funding.test.ts +2712 -221
- package/src/apps/data/routes/funding.ts +1604 -387
- package/src/apps/data/routes/indexer.test.ts +43 -34
- package/src/apps/data/routes/indexer.ts +19 -2
- package/src/apps/data/routes/receipts.test.ts +5 -3
- package/src/apps/data/routes/receipts.ts +13 -11
- package/src/apps/data/routes/rpc.test.ts +446 -28
- package/src/apps/data/routes/rpc.ts +243 -25
- package/src/apps/data/routes/tokenlist.test.ts +15 -0
- package/src/apps/data/routes/tokenlist.ts +88 -22
- package/src/apps/data/routes/tokens.ts +262 -86
- package/src/apps/data/routes/transactions.test.ts +2 -0
- package/src/apps/data/routes/transactions.ts +77 -42
- package/src/apps/data/routes/transfers.test.ts +166 -4
- package/src/apps/data/routes/transfers.ts +216 -78
- package/src/apps/data/routes/valuation.test.ts +62 -9
- package/src/apps/data/routes/valuation.ts +2 -2
- package/src/apps/data/routes/verified-tokens.test.ts +51 -0
- package/src/apps/data/routes/verified-tokens.ts +52 -15
- package/src/apps/data/routes/webhooks.test.ts +432 -33
- package/src/apps/data/routes/webhooks.ts +189 -79
- package/src/apps/data/routes/zones.test.ts +473 -0
- package/src/apps/data/routes/zones.ts +338 -0
- package/src/apps/docs/reference.ts +8 -6
- package/src/apps/index.ts +2 -1
- package/src/apps/management/Billing.test.ts +29 -0
- package/src/apps/management/Billing.ts +23 -0
- package/src/apps/management/Error.ts +12 -0
- package/src/apps/management/routes/api-keys.test.ts +5 -3
- package/src/apps/management/routes/api-keys.ts +2 -9
- package/src/apps/management/routes/invitations.ts +4 -11
- package/src/apps/management/routes/orgs.ts +2 -9
- package/src/apps/management/routes/scopes.test.ts +7 -2
- package/src/apps/management/routes/scopes.ts +2 -2
- package/src/apps/management/routes/webhooks.test.ts +6 -1
- package/src/apps/management/routes/webhooks.ts +15 -3
- package/src/apps/mpp/App.ts +276 -29
- package/src/apps/mpp/Mpp.test.ts +631 -26
- package/src/apps/mpp/Mpp.ts +0 -42
- package/src/apps/mpp/internal/Adapter.ts +108 -3
- package/src/apps/mpp/internal/Error.test.ts +33 -0
- package/src/apps/mpp/internal/Error.ts +44 -6
- package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
- package/src/apps/mpp/internal/Idempotency.ts +59 -5
- package/src/apps/mpp/internal/Policy.test.ts +122 -0
- package/src/apps/mpp/internal/Policy.ts +98 -0
- package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
- package/src/apps/mpp/internal/ScreenManager.ts +41 -0
- package/src/apps/mpp/internal/Screening.ts +40 -3
- package/src/apps/mpp/internal/Sponsorship.ts +144 -0
- package/src/apps/mpp/internal/Utils.ts +30 -0
- package/src/apps/relay/App.test.ts +495 -64
- package/src/apps/relay/App.ts +234 -24
- package/src/apps/relay/Sponsorships.test.ts +51 -0
- package/src/apps/relay/Sponsorships.ts +19 -7
- package/src/db/Db.ts +439 -0
- package/src/db/Schema.ts +325 -2
- package/src/db/tables/earnVaults.test.ts +185 -0
- package/src/db/tables/earnVaults.ts +151 -0
- package/src/db/tables/fundingCatalog.test.ts +108 -0
- package/src/db/tables/fundingCatalog.ts +157 -0
- package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
- package/src/db/tables/fundingDepositAddresses.ts +376 -0
- package/src/db/tables/fundingDeposits.test.ts +261 -0
- package/src/db/tables/fundingDeposits.ts +229 -0
- package/src/db/tables/fundingIdempotency.test.ts +182 -0
- package/src/db/tables/fundingIdempotency.ts +180 -0
- package/src/db/tables/fundingTransferEvents.ts +28 -0
- package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
- package/src/db/tables/fundingTransferTransactions.ts +37 -0
- package/src/db/tables/fundingTransfers.test.ts +89 -0
- package/src/db/tables/fundingTransfers.ts +153 -0
- package/src/db/tables/organizations.test.ts +88 -0
- package/src/db/tables/organizations.ts +42 -1
- package/src/db/tables/projects.ts +16 -0
- package/src/db/tables/requestUsage.ts +23 -0
- package/src/db/tables/sponsoredTransactions.test.ts +52 -2
- package/src/db/tables/sponsoredTransactions.ts +18 -6
- package/src/db/tables/users.ts +16 -0
- package/src/db/tables/verifiedTokens.ts +19 -14
- package/src/db/tables/webhookSubscriptions.ts +58 -3
- package/src/handlers/relay.test.ts +2 -0
- package/src/handlers/relay.ts +95 -99
- package/src/internal/Auth.test.ts +48 -0
- package/src/internal/Auth.ts +61 -2
- package/src/internal/Cache.ts +13 -9
- package/src/internal/Cursor.test.ts +2 -2
- package/src/internal/Cursor.ts +1 -1
- package/src/internal/EarnRates.test.ts +125 -0
- package/src/internal/EarnRates.ts +409 -0
- package/src/internal/EarnVaults.test.ts +195 -0
- package/src/internal/EarnVaults.ts +876 -0
- package/src/internal/EdgeCache.test.ts +37 -5
- package/src/internal/EdgeCache.ts +39 -7
- package/src/internal/Id.ts +14 -0
- package/src/internal/Idempotency.test.ts +109 -0
- package/src/internal/Idempotency.ts +237 -0
- package/src/internal/Log.test-d.ts +41 -8
- package/src/internal/Log.test.ts +189 -8
- package/src/internal/Log.ts +124 -17
- package/src/internal/MetricSink.test.ts +244 -4
- package/src/internal/MetricSink.ts +51 -1
- package/src/internal/OpenApi.ts +3 -0
- package/src/internal/Provider.test.ts +17 -0
- package/src/internal/Provider.ts +17 -0
- package/src/internal/Schema.test.ts +13 -0
- package/src/internal/Schema.ts +41 -24
- package/src/internal/Store.test.ts +25 -0
- package/src/internal/Store.ts +46 -0
- package/src/internal/Tidx.local.test.ts +78 -3
- package/src/internal/Tidx.test.ts +212 -18
- package/src/internal/Tidx.ts +112 -32
- package/src/internal/VerifiedTokens.test.ts +15 -0
- package/src/internal/Viem.test.ts +170 -17
- package/src/internal/Viem.ts +111 -28
- package/src/internal/WebhookDestination.ts +25 -23
- package/src/internal/Webhooks.test.ts +59 -0
- package/src/internal/Webhooks.ts +34 -10
- package/src/internal/exchange/Provider.test.ts +216 -0
- package/src/internal/exchange/Provider.ts +326 -0
- package/src/internal/exchange/index.test.ts +6 -0
- package/src/internal/exchange/index.ts +1 -0
- package/src/internal/exchange/providers/uniswap.test.ts +122 -0
- package/src/internal/exchange/providers/uniswap.ts +682 -0
- package/src/internal/funding/Action.test.ts +138 -0
- package/src/internal/funding/Action.ts +117 -0
- package/src/internal/funding/Catalog.test.ts +311 -0
- package/src/internal/funding/Catalog.ts +347 -0
- package/src/internal/funding/Chain.test.ts +79 -0
- package/src/internal/funding/Chain.ts +120 -0
- package/src/internal/funding/Deposit.test.ts +26 -0
- package/src/internal/funding/Deposit.ts +453 -0
- package/src/internal/funding/DepositAddress.test.ts +18 -0
- package/src/internal/funding/DepositAddress.ts +312 -0
- package/src/internal/funding/Evidence.test.ts +297 -0
- package/src/internal/funding/Evidence.ts +430 -0
- package/src/internal/funding/Provider.test.ts +1328 -0
- package/src/internal/funding/Provider.ts +1796 -0
- package/src/internal/funding/Reconciliation.local.test.ts +504 -0
- package/src/internal/funding/Reconciliation.test.ts +2020 -0
- package/src/internal/funding/Reconciliation.ts +930 -0
- package/src/internal/funding/Route.test.ts +66 -0
- package/src/internal/funding/Route.ts +29 -0
- package/src/internal/funding/Subsidy.local.test.ts +152 -0
- package/src/internal/funding/Subsidy.test.ts +75 -0
- package/src/internal/funding/Subsidy.ts +260 -0
- package/src/internal/funding/Token.test.ts +47 -0
- package/src/internal/funding/Token.ts +59 -0
- package/src/internal/funding/Transfer.test.ts +369 -0
- package/src/internal/funding/Transfer.ts +522 -0
- package/src/internal/funding/index.test.ts +20 -0
- package/src/internal/funding/index.ts +12 -0
- package/src/internal/funding/providers/across.ts +149 -0
- package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
- package/src/internal/funding/providers/relay.test.ts +474 -0
- package/src/internal/funding/providers/relay.ts +559 -0
- package/src/internal/funding/providers/rhino.ts +139 -0
- package/src/internal/funding/providers/squid.ts +151 -0
- package/src/internal/funding/providers/symbiosis.ts +221 -0
- package/src/internal/index.test.ts +5 -1
- package/src/internal/index.ts +5 -1
- package/src/internal/webhookDestinations/url.ts +49 -45
- package/src/providers/index.test.ts +14 -0
- package/src/providers/index.ts +54 -0
- package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
- package/dist/apps/data/FundingQuoteProviders.js +0 -775
- package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
- package/dist/internal/FundingQuotes.d.ts +0 -864
- package/dist/internal/FundingQuotes.d.ts.map +0 -1
- package/dist/internal/FundingQuotes.js +0 -672
- package/dist/internal/FundingQuotes.js.map +0 -1
- package/src/apps/data/FundingQuoteProviders.ts +0 -1043
- package/src/internal/FundingQuotes.test.ts +0 -456
- package/src/internal/FundingQuotes.ts +0 -944
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { AbiFunction, Address, Solidity } from 'ox';
|
|
2
|
+
import * as z from 'zod/mini';
|
|
3
|
+
/**
|
|
4
|
+
* Executable source-chain actions returned by funding transfer creation. A
|
|
5
|
+
* strict discriminated union: transfer reads never include an action.
|
|
6
|
+
*/
|
|
7
|
+
const approve = AbiFunction.from('function approve(address spender, uint256 amount)');
|
|
8
|
+
const approveSelector = AbiFunction.getSelector(approve);
|
|
9
|
+
/** Zod schemas owned by funding actions. */
|
|
10
|
+
export var schema;
|
|
11
|
+
(function (schema) {
|
|
12
|
+
/** One unsigned EVM call, in the exchange quote API's call shape. */
|
|
13
|
+
schema.Call = z
|
|
14
|
+
.object({
|
|
15
|
+
data: z
|
|
16
|
+
.string()
|
|
17
|
+
.check(z.regex(/^0x(?:[0-9a-fA-F]{2})*$/), z.describe('ABI-encoded calldata.'), z.meta({ examples: ['0x095ea7b3'] })),
|
|
18
|
+
to: z
|
|
19
|
+
.string()
|
|
20
|
+
.check(z.regex(/^0x[0-9a-fA-F]{40}$/), z.describe('Contract the call targets.'), z.meta({ examples: [`0x${'44'.repeat(20)}`] })),
|
|
21
|
+
value: z
|
|
22
|
+
.string()
|
|
23
|
+
.check(z.regex(/^0x[0-9a-fA-F]+$/), z.describe('Native value to send, as hex.'), z.meta({ examples: ['0x0'] })),
|
|
24
|
+
})
|
|
25
|
+
.check(z.describe('One unsigned EVM call.'));
|
|
26
|
+
/** Ordered unsigned EVM calls the caller signs and submits on the source chain. */
|
|
27
|
+
schema.EvmCalls = z
|
|
28
|
+
.object({
|
|
29
|
+
calls: z
|
|
30
|
+
.array(schema.Call)
|
|
31
|
+
.check(z.minLength(1), z.describe('Calls in submission order; they may require separate transactions.')),
|
|
32
|
+
type: z.literal('evm:calls').check(z.describe('Action kind.')),
|
|
33
|
+
})
|
|
34
|
+
.check(z.describe('Ordered unsigned EVM calls to sign and submit on the source chain.'));
|
|
35
|
+
/** Executable source-chain action attached to a creation response. */
|
|
36
|
+
schema.Action = z
|
|
37
|
+
.discriminatedUnion('type', [schema.EvmCalls])
|
|
38
|
+
.check(z.describe('Executable source-chain action. Never returned by transfer reads.'));
|
|
39
|
+
})(schema || (schema = {}));
|
|
40
|
+
/**
|
|
41
|
+
* Validates prepared EVM calls before persistence. Token calls, approval
|
|
42
|
+
* targets, spenders, amounts, selectors, and native value must match the route.
|
|
43
|
+
*/
|
|
44
|
+
export function validateEvmCalls(options) {
|
|
45
|
+
const action = schema.EvmCalls.safeParse(options.action);
|
|
46
|
+
if (!action.success)
|
|
47
|
+
throw new InvalidActionError('Malformed EVM calls.');
|
|
48
|
+
for (const [index, call] of action.data.calls.entries()) {
|
|
49
|
+
if (BigInt(call.value) !== 0n)
|
|
50
|
+
throw new InvalidActionError('Stablecoin funding calls must not carry native value.');
|
|
51
|
+
const targetsSourceToken = Address.isEqual(call.to, options.sourceTokenAddress);
|
|
52
|
+
const selector = call.data.slice(0, approveSelector.length).toLowerCase();
|
|
53
|
+
if (targetsSourceToken && selector !== approveSelector)
|
|
54
|
+
throw new InvalidActionError('Unsupported source token call.');
|
|
55
|
+
if (selector !== approveSelector)
|
|
56
|
+
continue;
|
|
57
|
+
if (!targetsSourceToken)
|
|
58
|
+
throw new InvalidActionError('Approval must target the source token.');
|
|
59
|
+
if (call.data.length !== approveSelector.length + 128)
|
|
60
|
+
throw new InvalidActionError('Malformed approval calldata.');
|
|
61
|
+
const [spender, amount] = AbiFunction.decodeData(approve, call.data);
|
|
62
|
+
if (!action.data.calls
|
|
63
|
+
.slice(index + 1)
|
|
64
|
+
.some((next) => Address.isEqual(next.to, spender)))
|
|
65
|
+
throw new InvalidActionError('Approval spender must match a later prepared executor.');
|
|
66
|
+
if (amount >= Solidity.maxUint256 || amount > BigInt(options.sourceAmount))
|
|
67
|
+
throw new InvalidActionError('Approval must stay bounded to the route amount.');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** Error thrown when a provider returns an action outside the route's bounds. */
|
|
71
|
+
export class InvalidActionError extends Error {
|
|
72
|
+
name = 'Funding.Action.InvalidActionError';
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=Action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Action.js","sourceRoot":"","sources":["../../../src/internal/funding/Action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { Context } from 'hono';
|
|
2
|
+
import * as z from 'zod/mini';
|
|
3
|
+
import type * as App from '../../App.js';
|
|
4
|
+
import * as Db from '../../db/Db.js';
|
|
5
|
+
import * as core_Catalog from '../../db/tables/fundingCatalog.js';
|
|
6
|
+
import * as Chain from './Chain.js';
|
|
7
|
+
import * as Route from './Route.js';
|
|
8
|
+
import * as Token from './Token.js';
|
|
9
|
+
/** Funding catalog schemas. */
|
|
10
|
+
export declare namespace schema {
|
|
11
|
+
/** Funding capabilities enabled on one provider route. */
|
|
12
|
+
const Capabilities: z.ZodMiniObject<{
|
|
13
|
+
depositAddress: z.ZodMiniOptional<z.ZodMiniLiteral<true>>;
|
|
14
|
+
transfer: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
15
|
+
modes: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniEnum<{
|
|
16
|
+
exactDestination: "exactDestination";
|
|
17
|
+
exactSource: "exactSource";
|
|
18
|
+
}>>>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
/** Complete funding catalog content accepted by the publish boundary. */
|
|
22
|
+
const Data: z.ZodMiniObject<{
|
|
23
|
+
chainTokens: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniObject<{
|
|
24
|
+
address: z.ZodMiniString<string>;
|
|
25
|
+
chainId: z.ZodMiniString<string>;
|
|
26
|
+
decimals: z.ZodMiniNumber<number>;
|
|
27
|
+
name: z.ZodMiniNullable<z.ZodMiniString<string>>;
|
|
28
|
+
standard: z.ZodMiniString<string>;
|
|
29
|
+
tokenId: z.ZodMiniString<string>;
|
|
30
|
+
}, z.core.$strip>>>;
|
|
31
|
+
chains: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniObject<{
|
|
32
|
+
id: z.ZodMiniString<string>;
|
|
33
|
+
parentChainId: z.ZodMiniNullable<z.ZodMiniString<string>>;
|
|
34
|
+
aliases: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniString<string>>>;
|
|
35
|
+
name: z.ZodMiniString<string>;
|
|
36
|
+
rpcUrls: z.ZodMiniDefault<z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniURL>>>;
|
|
37
|
+
slug: z.ZodMiniString<string>;
|
|
38
|
+
}, z.core.$strip>>>;
|
|
39
|
+
routes: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniObject<{
|
|
40
|
+
capabilities: z.ZodMiniOptional<z.ZodMiniNullable<z.ZodMiniObject<{
|
|
41
|
+
depositAddress: z.ZodMiniOptional<z.ZodMiniLiteral<true>>;
|
|
42
|
+
transfer: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
43
|
+
modes: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniEnum<{
|
|
44
|
+
exactDestination: "exactDestination";
|
|
45
|
+
exactSource: "exactSource";
|
|
46
|
+
}>>>;
|
|
47
|
+
}, z.core.$strip>>;
|
|
48
|
+
}, z.core.$strip>>>;
|
|
49
|
+
destinationChainId: z.ZodMiniString<string>;
|
|
50
|
+
destinationTokenId: z.ZodMiniString<string>;
|
|
51
|
+
providerId: z.ZodMiniString<string>;
|
|
52
|
+
sourceChainId: z.ZodMiniString<string>;
|
|
53
|
+
sourceTokenId: z.ZodMiniString<string>;
|
|
54
|
+
}, z.core.$strip>>>;
|
|
55
|
+
tokens: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniObject<{
|
|
56
|
+
currency: z.ZodMiniString<string>;
|
|
57
|
+
id: z.ZodMiniString<string>;
|
|
58
|
+
name: z.ZodMiniString<string>;
|
|
59
|
+
symbol: z.ZodMiniString<string>;
|
|
60
|
+
}, z.core.$strip>>>;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
}
|
|
63
|
+
/** Funding capabilities enabled on one provider route. */
|
|
64
|
+
export type Capabilities = z.output<typeof schema.Capabilities>;
|
|
65
|
+
/** One hydrated provider route in a funding catalog snapshot. */
|
|
66
|
+
export type ProviderRoute = {
|
|
67
|
+
/** Funding capabilities; absent means the route is quote-only. */
|
|
68
|
+
capabilities?: Capabilities | undefined;
|
|
69
|
+
/** Funding provider that supports the route. */
|
|
70
|
+
providerId: string;
|
|
71
|
+
/** Hydrated source-to-destination funding route. */
|
|
72
|
+
route: Route.Route;
|
|
73
|
+
};
|
|
74
|
+
/** Compiled and indexed funding catalog. */
|
|
75
|
+
export type Snapshot = {
|
|
76
|
+
/** Funding chains indexed by CAIP-2 id, slug, and alias. */
|
|
77
|
+
chainsByKey: ReadonlyMap<string, Chain.Chain>;
|
|
78
|
+
/** Hydrated provider routes in stable catalog order. */
|
|
79
|
+
routes: readonly ProviderRoute[];
|
|
80
|
+
/** Hydrated routes grouped by provider id. */
|
|
81
|
+
routesByProvider: ReadonlyMap<string, readonly Route.Route[]>;
|
|
82
|
+
/** Canonical funding tokens indexed by stable id. */
|
|
83
|
+
tokensById: ReadonlyMap<string, Token.Token>;
|
|
84
|
+
/** ISO timestamp of the catalog's last publish. */
|
|
85
|
+
updatedAt: string;
|
|
86
|
+
/** Opaque catalog version. */
|
|
87
|
+
version: string;
|
|
88
|
+
};
|
|
89
|
+
/** Compiles stored funding catalog rows into a validated snapshot. */
|
|
90
|
+
export declare function compile(rows: core_Catalog.Rows): Snapshot;
|
|
91
|
+
/** Reads and compiles the current funding catalog from Postgres. */
|
|
92
|
+
export declare function read(db: Db.Db): Promise<Snapshot>;
|
|
93
|
+
/** Publishes a complete funding catalog and primes the current isolate. */
|
|
94
|
+
export declare function publish(db: Db.Db, input: publish.Input): Promise<Snapshot>;
|
|
95
|
+
export declare namespace publish {
|
|
96
|
+
/** Complete funding catalog content. */
|
|
97
|
+
type Input = z.input<typeof schema.Data>;
|
|
98
|
+
}
|
|
99
|
+
/** Replaces the current isolate's compiled catalog snapshot. */
|
|
100
|
+
export declare function prime(source: Db.Source, snapshot: Snapshot): Snapshot;
|
|
101
|
+
/** Returns the current funding catalog snapshot with soft background refresh. */
|
|
102
|
+
export declare function snapshot(c: Context<App.Environment>): Promise<Snapshot>;
|
|
103
|
+
/** Error thrown when funding catalog references cannot be compiled. */
|
|
104
|
+
export declare class InvalidCatalogError extends Error {
|
|
105
|
+
name: string;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=Catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Catalog.d.ts","sourceRoot":"","sources":["../../../src/internal/funding/Catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEpC,OAAO,KAAK,YAAY,MAAM,mCAAmC,CAAA;AAEjE,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAOnC,+BAA+B;AAC/B,yBAAiB,MAAM,CAAC;IAqBtB,0DAA0D;IACnD,MAAM,YAAY;;;;;;;;qBAetB,CAAA;IAQH,yEAAyE;IAClE,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBASwC,CAAA;CAC1D;AAED,0DAA0D;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC,CAAA;AAE/D,iEAAiE;AACjE,MAAM,MAAM,aAAa,GAAG;IAC1B,kEAAkE;IAClE,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;IACvC,gDAAgD;IAChD,UAAU,EAAE,MAAM,CAAA;IAClB,oDAAoD;IACpD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;CACnB,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,QAAQ,GAAG;IACrB,4DAA4D;IAC5D,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC7C,wDAAwD;IACxD,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;IAChC,8CAA8C;IAC9C,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAC7D,qDAAqD;IACrD,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5C,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAA;IACjB,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,sEAAsE;AACtE,wBAAgB,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,GAAG,QAAQ,CAqGzD;AAED,oEAAoE;AACpE,wBAAsB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAEvD;AAED,2EAA2E;AAC3E,wBAAsB,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAYhF;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,wCAAwC;IACxC,KAAK,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAA;CACzC;AAED,gEAAgE;AAChE,wBAAgB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAGrE;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgBvE;AAsFD,uEAAuE;AACvE,qBAAa,mBAAoB,SAAQ,KAAK;IACnC,IAAI,SAAwC;CACtD"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import * as z from 'zod/mini';
|
|
2
|
+
import * as Db from '../../db/Db.js';
|
|
3
|
+
import * as db_Schema from '../../db/Schema.js';
|
|
4
|
+
import * as core_Catalog from '../../db/tables/fundingCatalog.js';
|
|
5
|
+
import * as Timing from '../Timing.js';
|
|
6
|
+
import * as Chain from './Chain.js';
|
|
7
|
+
import * as Route from './Route.js';
|
|
8
|
+
import * as Token from './Token.js';
|
|
9
|
+
import * as Transfer from './Transfer.js';
|
|
10
|
+
const defaultRefreshMs = 10_000;
|
|
11
|
+
const emptyUpdatedAt = '1970-01-01T00:00:00.000Z';
|
|
12
|
+
const emptyVersion = 'empty';
|
|
13
|
+
/** Funding catalog schemas. */
|
|
14
|
+
export var schema;
|
|
15
|
+
(function (schema) {
|
|
16
|
+
const ChainId = z
|
|
17
|
+
.string()
|
|
18
|
+
.check(z.regex(/^(?:eip155:\d+|solana:[^:]+|tron:[^:]+)$/), z.describe('CAIP-2 funding chain identifier.'));
|
|
19
|
+
const Chain = z.extend(db_Schema.FundingChain, {
|
|
20
|
+
id: ChainId,
|
|
21
|
+
parentChainId: z.nullable(ChainId),
|
|
22
|
+
});
|
|
23
|
+
const TransferCapability = z
|
|
24
|
+
.object({
|
|
25
|
+
modes: z
|
|
26
|
+
.readonly(z.array(z.enum(Transfer.modes)))
|
|
27
|
+
.check(z.minLength(1), z.describe('Amount modes enabled for funding transfers.')),
|
|
28
|
+
})
|
|
29
|
+
.check(z.describe('Funding transfer capability enabled on one provider route.'));
|
|
30
|
+
/** Funding capabilities enabled on one provider route. */
|
|
31
|
+
schema.Capabilities = z
|
|
32
|
+
.object({
|
|
33
|
+
depositAddress: z
|
|
34
|
+
.optional(z.literal(true))
|
|
35
|
+
.check(z.describe('Deposit-address funding support enabled on the route.')),
|
|
36
|
+
transfer: z
|
|
37
|
+
.optional(TransferCapability)
|
|
38
|
+
.check(z.describe('Funding transfer support enabled on the route.')),
|
|
39
|
+
})
|
|
40
|
+
.check(z.refine((capabilities) => capabilities.depositAddress !== undefined || capabilities.transfer !== undefined), z.describe('Funding capabilities enabled on one provider route.'));
|
|
41
|
+
// Absent or null `capabilities` keeps a route quote-only, so transfer and
|
|
42
|
+
// deposit-address support enable through reviewed seed edits.
|
|
43
|
+
const Route = z.extend(db_Schema.FundingRoute, {
|
|
44
|
+
capabilities: z.optional(z.nullable(schema.Capabilities)),
|
|
45
|
+
});
|
|
46
|
+
/** Complete funding catalog content accepted by the publish boundary. */
|
|
47
|
+
schema.Data = z
|
|
48
|
+
.object({
|
|
49
|
+
chainTokens: z
|
|
50
|
+
.readonly(z.array(db_Schema.FundingChainToken))
|
|
51
|
+
.check(z.describe('Chain-scoped funding tokens.')),
|
|
52
|
+
chains: z.readonly(z.array(Chain)).check(z.describe('Funding chains.')),
|
|
53
|
+
routes: z.readonly(z.array(Route)).check(z.describe('Funding provider routes.')),
|
|
54
|
+
tokens: z.readonly(z.array(db_Schema.FundingToken)).check(z.describe('Funding tokens.')),
|
|
55
|
+
})
|
|
56
|
+
.check(z.describe('Complete funding catalog content.'));
|
|
57
|
+
})(schema || (schema = {}));
|
|
58
|
+
/** Compiles stored funding catalog rows into a validated snapshot. */
|
|
59
|
+
export function compile(rows) {
|
|
60
|
+
const data = normalize({
|
|
61
|
+
chainTokens: rows.chainTokens,
|
|
62
|
+
chains: rows.chains,
|
|
63
|
+
routes: rows.routes,
|
|
64
|
+
tokens: rows.tokens,
|
|
65
|
+
});
|
|
66
|
+
if (!rows.catalog && hasContent(data))
|
|
67
|
+
throw new InvalidCatalogError('Catalog content exists without a version head.');
|
|
68
|
+
const chainIds = new Set(data.chains.map((chain) => chain.id));
|
|
69
|
+
const chainsById = new Map();
|
|
70
|
+
const chainsByKey = new Map();
|
|
71
|
+
for (const row of data.chains) {
|
|
72
|
+
if (row.parentChainId && !chainIds.has(row.parentChainId))
|
|
73
|
+
throw new InvalidCatalogError(`Unknown parent chain "${row.parentChainId}".`);
|
|
74
|
+
const chain = Chain.from({
|
|
75
|
+
aliases: row.aliases,
|
|
76
|
+
id: row.id,
|
|
77
|
+
name: row.name,
|
|
78
|
+
...(row.parentChainId ? { parentChainId: row.parentChainId } : {}),
|
|
79
|
+
rpcUrls: row.rpcUrls,
|
|
80
|
+
slug: row.slug,
|
|
81
|
+
});
|
|
82
|
+
if (chainsById.has(chain.id))
|
|
83
|
+
throw new InvalidCatalogError(`Duplicate chain "${chain.id}".`);
|
|
84
|
+
chainsById.set(chain.id, chain);
|
|
85
|
+
for (const key of [chain.id, chain.slug, ...chain.aliases]) {
|
|
86
|
+
const normalized = normalizeKey(key);
|
|
87
|
+
if (chainsByKey.has(normalized))
|
|
88
|
+
throw new InvalidCatalogError(`Duplicate chain key "${key}".`);
|
|
89
|
+
chainsByKey.set(normalized, chain);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const configs = new Map();
|
|
93
|
+
const placements = new Set();
|
|
94
|
+
const tokenIds = new Set(data.tokens.map((token) => token.id));
|
|
95
|
+
for (const row of data.chainTokens) {
|
|
96
|
+
const chain = chainsById.get(row.chainId);
|
|
97
|
+
if (!chain)
|
|
98
|
+
throw new InvalidCatalogError(`Unknown chain "${row.chainId}" for token placement.`);
|
|
99
|
+
if (!tokenIds.has(row.tokenId))
|
|
100
|
+
throw new InvalidCatalogError(`Unknown token "${row.tokenId}" for token placement.`);
|
|
101
|
+
const placement = placementKey(row.chainId, row.tokenId);
|
|
102
|
+
if (placements.has(placement))
|
|
103
|
+
throw new InvalidCatalogError(`Duplicate token placement "${placement}".`);
|
|
104
|
+
placements.add(placement);
|
|
105
|
+
const chains = configs.get(row.tokenId) ?? {};
|
|
106
|
+
chains[chain.id] = {
|
|
107
|
+
address: row.address,
|
|
108
|
+
decimals: row.decimals,
|
|
109
|
+
...(row.name ? { name: row.name } : {}),
|
|
110
|
+
standard: row.standard,
|
|
111
|
+
};
|
|
112
|
+
configs.set(row.tokenId, chains);
|
|
113
|
+
}
|
|
114
|
+
const tokensById = new Map();
|
|
115
|
+
for (const row of data.tokens) {
|
|
116
|
+
if (tokensById.has(row.id))
|
|
117
|
+
throw new InvalidCatalogError(`Duplicate token "${row.id}".`);
|
|
118
|
+
tokensById.set(row.id, Token.from({
|
|
119
|
+
chains: configs.get(row.id) ?? {},
|
|
120
|
+
currency: row.currency,
|
|
121
|
+
name: row.name,
|
|
122
|
+
slug: row.id,
|
|
123
|
+
symbol: row.symbol,
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
const routes = [];
|
|
127
|
+
const routesByProvider = new Map();
|
|
128
|
+
for (const row of data.routes) {
|
|
129
|
+
const route = {
|
|
130
|
+
destination: resolvePlacement(chainsById, tokensById, row.destinationChainId, row.destinationTokenId),
|
|
131
|
+
source: resolvePlacement(chainsById, tokensById, row.sourceChainId, row.sourceTokenId),
|
|
132
|
+
};
|
|
133
|
+
routes.push({
|
|
134
|
+
...(row.capabilities ? { capabilities: row.capabilities } : {}),
|
|
135
|
+
providerId: row.providerId,
|
|
136
|
+
route,
|
|
137
|
+
});
|
|
138
|
+
const providerRoutes = routesByProvider.get(row.providerId);
|
|
139
|
+
if (providerRoutes)
|
|
140
|
+
providerRoutes.push(route);
|
|
141
|
+
else
|
|
142
|
+
routesByProvider.set(row.providerId, [route]);
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
chainsByKey,
|
|
146
|
+
routes,
|
|
147
|
+
routesByProvider,
|
|
148
|
+
tokensById,
|
|
149
|
+
updatedAt: rows.catalog?.updatedAt ?? emptyUpdatedAt,
|
|
150
|
+
version: rows.catalog?.version ?? emptyVersion,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/** Reads and compiles the current funding catalog from Postgres. */
|
|
154
|
+
export async function read(db) {
|
|
155
|
+
return compile(await core_Catalog.read(db));
|
|
156
|
+
}
|
|
157
|
+
/** Publishes a complete funding catalog and primes the current isolate. */
|
|
158
|
+
export async function publish(db, input) {
|
|
159
|
+
const data = normalize(input);
|
|
160
|
+
compile({
|
|
161
|
+
catalog: { id: 'default', updatedAt: emptyUpdatedAt, version: 'validation' },
|
|
162
|
+
...data,
|
|
163
|
+
});
|
|
164
|
+
// Absent `capabilities` persists as null; both mean indicative-only.
|
|
165
|
+
await core_Catalog.publish(db, {
|
|
166
|
+
...data,
|
|
167
|
+
routes: data.routes.map((route) => ({ ...route, capabilities: route.capabilities ?? null })),
|
|
168
|
+
});
|
|
169
|
+
return prime(db, await read(db));
|
|
170
|
+
}
|
|
171
|
+
/** Replaces the current isolate's compiled catalog snapshot. */
|
|
172
|
+
export function prime(source, snapshot) {
|
|
173
|
+
cells.set(source, { checkedAt: Date.now(), snapshot });
|
|
174
|
+
return snapshot;
|
|
175
|
+
}
|
|
176
|
+
/** Returns the current funding catalog snapshot with soft background refresh. */
|
|
177
|
+
export function snapshot(c) {
|
|
178
|
+
return Timing.time(c, 'funding_catalog', async () => {
|
|
179
|
+
const source = c.get('dbCached');
|
|
180
|
+
const cell = cells.get(source);
|
|
181
|
+
if (cell && Date.now() - cell.checkedAt < defaultRefreshMs)
|
|
182
|
+
return cell.snapshot;
|
|
183
|
+
if (cell) {
|
|
184
|
+
const pending = refresh(c, source, cell);
|
|
185
|
+
try {
|
|
186
|
+
c.executionCtx.waitUntil(pending);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
void pending;
|
|
190
|
+
}
|
|
191
|
+
return cell.snapshot;
|
|
192
|
+
}
|
|
193
|
+
return refresh(c, source, undefined);
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
const cells = new WeakMap();
|
|
197
|
+
const refreshing = new WeakMap();
|
|
198
|
+
function refresh(c, source, current) {
|
|
199
|
+
const existing = refreshing.get(source);
|
|
200
|
+
if (existing)
|
|
201
|
+
return existing;
|
|
202
|
+
const pending = (async () => {
|
|
203
|
+
try {
|
|
204
|
+
const db = Db.get(source);
|
|
205
|
+
if (current) {
|
|
206
|
+
const head = await Timing.time(c, 'funding_catalog_head', () => core_Catalog.head(db));
|
|
207
|
+
if (!head || head.version === current.snapshot.version) {
|
|
208
|
+
cells.set(source, { checkedAt: Date.now(), snapshot: current.snapshot });
|
|
209
|
+
return current.snapshot;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
const next = await read(db);
|
|
213
|
+
cells.set(source, { checkedAt: Date.now(), snapshot: next });
|
|
214
|
+
return next;
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
if (!current)
|
|
218
|
+
throw error;
|
|
219
|
+
console.error('[funding-catalog] refresh failed; serving last good snapshot', error);
|
|
220
|
+
cells.set(source, { checkedAt: Date.now(), snapshot: current.snapshot });
|
|
221
|
+
return current.snapshot;
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
refreshing.delete(source);
|
|
225
|
+
}
|
|
226
|
+
})();
|
|
227
|
+
refreshing.set(source, pending);
|
|
228
|
+
return pending;
|
|
229
|
+
}
|
|
230
|
+
function hasContent(data) {
|
|
231
|
+
return (data.chains.length > 0 ||
|
|
232
|
+
data.tokens.length > 0 ||
|
|
233
|
+
data.chainTokens.length > 0 ||
|
|
234
|
+
data.routes.length > 0);
|
|
235
|
+
}
|
|
236
|
+
function normalize(input) {
|
|
237
|
+
const data = schema.Data.parse(input);
|
|
238
|
+
return {
|
|
239
|
+
...data,
|
|
240
|
+
chainTokens: data.chainTokens.map((token) => ({
|
|
241
|
+
...token,
|
|
242
|
+
address: token.chainId.startsWith('eip155:') ? token.address.toLowerCase() : token.address,
|
|
243
|
+
})),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function normalizeKey(key) {
|
|
247
|
+
return key.trim().toLowerCase();
|
|
248
|
+
}
|
|
249
|
+
function placementKey(chainId, tokenId) {
|
|
250
|
+
return `${chainId}:${tokenId}`;
|
|
251
|
+
}
|
|
252
|
+
function resolvePlacement(chains, tokens, chainId, tokenId) {
|
|
253
|
+
const chain = chains.get(chainId);
|
|
254
|
+
if (!chain)
|
|
255
|
+
throw new InvalidCatalogError(`Unknown route chain "${chainId}".`);
|
|
256
|
+
const token = tokens.get(tokenId);
|
|
257
|
+
if (!token)
|
|
258
|
+
throw new InvalidCatalogError(`Unknown route token "${tokenId}".`);
|
|
259
|
+
try {
|
|
260
|
+
return Token.resolve(token, chain);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
throw new InvalidCatalogError(`Unknown route token placement "${placementKey(chainId, tokenId)}".`);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/** Error thrown when funding catalog references cannot be compiled. */
|
|
267
|
+
export class InvalidCatalogError extends Error {
|
|
268
|
+
name = 'Funding.Catalog.InvalidCatalogError';
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=Catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Catalog.js","sourceRoot":"","sources":["../../../src/internal/funding/Catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as Token from './Token.js';
|
|
2
|
+
/** Canonical identifier for a funding chain. */
|
|
3
|
+
export type Id = `eip155:${number}` | `solana:${string}` | `tron:${string}`;
|
|
4
|
+
/** Chain metadata for a funding token. */
|
|
5
|
+
export type Chain = Callable & ((Base & {
|
|
6
|
+
/** Address encoding used by accounts and tokens on the chain. */
|
|
7
|
+
addressFormat: 'hex';
|
|
8
|
+
/** Chain execution family. */
|
|
9
|
+
kind: 'evm';
|
|
10
|
+
}) | (Base & {
|
|
11
|
+
/** Address encoding used by accounts and tokens on the chain. */
|
|
12
|
+
addressFormat: 'base58';
|
|
13
|
+
/** Chain execution family. */
|
|
14
|
+
kind: 'solana';
|
|
15
|
+
}) | (Base & {
|
|
16
|
+
/** Address encoding used by accounts and tokens on the chain. */
|
|
17
|
+
addressFormat: 'base58check';
|
|
18
|
+
/** Chain execution family. */
|
|
19
|
+
kind: 'tron';
|
|
20
|
+
}));
|
|
21
|
+
type Callable = (options: Callable.Options) => Selection;
|
|
22
|
+
declare namespace Callable {
|
|
23
|
+
/** Tokens selected for a funding route on this chain. */
|
|
24
|
+
type Options = {
|
|
25
|
+
/** Token definitions to resolve on the chain. */
|
|
26
|
+
tokens: readonly Token.Token[];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Tokens resolved for one funding chain. */
|
|
30
|
+
export type Selection = {
|
|
31
|
+
/** Chain shared by every selected token. */
|
|
32
|
+
chain: Chain;
|
|
33
|
+
/** Chain-scoped funding tokens. */
|
|
34
|
+
tokens: readonly Token.Resolved[];
|
|
35
|
+
};
|
|
36
|
+
type Base = {
|
|
37
|
+
/** Caller-facing aliases accepted for this chain. */
|
|
38
|
+
aliases: readonly string[];
|
|
39
|
+
/** CAIP-2 chain identifier. */
|
|
40
|
+
id: Id;
|
|
41
|
+
/** Human-readable chain name. */
|
|
42
|
+
name: string;
|
|
43
|
+
/** Parent chain identifier when this chain is a Zone. */
|
|
44
|
+
parentChainId?: Id | undefined;
|
|
45
|
+
/** Public RPC endpoints used for funding-chain evidence. */
|
|
46
|
+
rpcUrls: readonly string[];
|
|
47
|
+
/** Stable chain segment used in quote identifiers. */
|
|
48
|
+
slug: string;
|
|
49
|
+
};
|
|
50
|
+
/** Creates funding chain metadata from a CAIP-2 identifier. */
|
|
51
|
+
export declare function from(options: from.Options): Chain;
|
|
52
|
+
export declare namespace from {
|
|
53
|
+
/** Funding chain definition. */
|
|
54
|
+
type Options = {
|
|
55
|
+
/** Additional caller-facing aliases accepted for this chain. */
|
|
56
|
+
aliases?: readonly string[] | undefined;
|
|
57
|
+
/** CAIP-2 chain identifier. */
|
|
58
|
+
id: Id;
|
|
59
|
+
/** Human-readable chain name. */
|
|
60
|
+
name: string;
|
|
61
|
+
/** Parent chain identifier when this chain is a Zone. */
|
|
62
|
+
parentChainId?: Id | undefined;
|
|
63
|
+
/** Public RPC endpoints used for funding-chain evidence. */
|
|
64
|
+
rpcUrls?: readonly string[] | undefined;
|
|
65
|
+
/** Stable chain segment used in quote identifiers. */
|
|
66
|
+
slug: string;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Returns the numeric portion of an EIP-155 CAIP-2 chain identifier. */
|
|
70
|
+
export declare function eip155Id(chain: Chain): string;
|
|
71
|
+
/** Error thrown when a funding chain identifier is invalid for an operation. */
|
|
72
|
+
export declare class InvalidIdError extends Error {
|
|
73
|
+
name: string;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=Chain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chain.d.ts","sourceRoot":"","sources":["../../../src/internal/funding/Chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,gDAAgD;AAChD,MAAM,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,GAAG,UAAU,MAAM,EAAE,GAAG,QAAQ,MAAM,EAAE,CAAA;AAE3E,0CAA0C;AAC1C,MAAM,MAAM,KAAK,GAAG,QAAQ,GAC1B,CACI,CAAC,IAAI,GAAG;IACN,iEAAiE;IACjE,aAAa,EAAE,KAAK,CAAA;IACpB,8BAA8B;IAC9B,IAAI,EAAE,KAAK,CAAA;CACZ,CAAC,GACF,CAAC,IAAI,GAAG;IACN,iEAAiE;IACjE,aAAa,EAAE,QAAQ,CAAA;IACvB,8BAA8B;IAC9B,IAAI,EAAE,QAAQ,CAAA;CACf,CAAC,GACF,CAAC,IAAI,GAAG;IACN,iEAAiE;IACjE,aAAa,EAAE,aAAa,CAAA;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAA;CACb,CAAC,CACL,CAAA;AAEH,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAA;AAExD,OAAO,WAAW,QAAQ,CAAC;IACzB,yDAAyD;IACzD,KAAK,OAAO,GAAG;QACb,iDAAiD;QACjD,MAAM,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,CAAA;KAC/B,CAAA;CACF;AAED,6CAA6C;AAC7C,MAAM,MAAM,SAAS,GAAG;IACtB,4CAA4C;IAC5C,KAAK,EAAE,KAAK,CAAA;IACZ,mCAAmC;IACnC,MAAM,EAAE,SAAS,KAAK,CAAC,QAAQ,EAAE,CAAA;CAClC,CAAA;AAED,KAAK,IAAI,GAAG;IACV,qDAAqD;IACrD,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,+BAA+B;IAC/B,EAAE,EAAE,EAAE,CAAA;IACN,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,yDAAyD;IACzD,aAAa,CAAC,EAAE,EAAE,GAAG,SAAS,CAAA;IAC9B,4DAA4D;IAC5D,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1B,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,+DAA+D;AAC/D,wBAAgB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK,CA2BjD;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,gCAAgC;IAChC,KAAK,OAAO,GAAG;QACb,gEAAgE;QAChE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;QACvC,+BAA+B;QAC/B,EAAE,EAAE,EAAE,CAAA;QACN,iCAAiC;QACjC,IAAI,EAAE,MAAM,CAAA;QACZ,yDAAyD;QACzD,aAAa,CAAC,EAAE,EAAE,GAAG,SAAS,CAAA;QAC9B,4DAA4D;QAC5D,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;QACvC,sDAAsD;QACtD,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAI7C;AAED,gFAAgF;AAChF,qBAAa,cAAe,SAAQ,KAAK;IAC9B,IAAI,SAAiC;CAC/C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as Token from './Token.js';
|
|
2
|
+
/** Creates funding chain metadata from a CAIP-2 identifier. */
|
|
3
|
+
export function from(options) {
|
|
4
|
+
const { aliases = [], id, name, parentChainId, rpcUrls = [], slug } = options;
|
|
5
|
+
const base = { aliases, id, name, ...(parentChainId ? { parentChainId } : {}), rpcUrls, slug };
|
|
6
|
+
const metadata = (() => {
|
|
7
|
+
if (id.startsWith('eip155:'))
|
|
8
|
+
return { ...base, addressFormat: 'hex', kind: 'evm' };
|
|
9
|
+
if (id.startsWith('solana:'))
|
|
10
|
+
return { ...base, addressFormat: 'base58', kind: 'solana' };
|
|
11
|
+
if (id.startsWith('tron:'))
|
|
12
|
+
return { ...base, addressFormat: 'base58check', kind: 'tron' };
|
|
13
|
+
throw new InvalidIdError();
|
|
14
|
+
})();
|
|
15
|
+
function select(parameters) {
|
|
16
|
+
const chain = select;
|
|
17
|
+
return {
|
|
18
|
+
chain,
|
|
19
|
+
tokens: parameters.tokens.map((token) => Token.resolve(token, chain)),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
return Object.defineProperties(select, Object.fromEntries(Object.entries(metadata).map(([key, value]) => [
|
|
23
|
+
key,
|
|
24
|
+
{ configurable: true, enumerable: true, value },
|
|
25
|
+
])));
|
|
26
|
+
}
|
|
27
|
+
/** Returns the numeric portion of an EIP-155 CAIP-2 chain identifier. */
|
|
28
|
+
export function eip155Id(chain) {
|
|
29
|
+
const match = /^eip155:(\d+)$/.exec(chain.id);
|
|
30
|
+
if (!match?.[1])
|
|
31
|
+
throw new InvalidIdError();
|
|
32
|
+
return match[1];
|
|
33
|
+
}
|
|
34
|
+
/** Error thrown when a funding chain identifier is invalid for an operation. */
|
|
35
|
+
export class InvalidIdError extends Error {
|
|
36
|
+
name = 'Funding.Chain.InvalidIdError';
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=Chain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chain.js","sourceRoot":"","sources":["../../../src/internal/funding/Chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AA6DnC,+DAA+D;AAC/D,MAAM,UAAU,IAAI,CAAC,OAAqB;IACxC,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAC7E,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC9F,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAW,CAAA;QAC5F,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAC1B,OAAO,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAW,CAAA;QACtE,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;YACxB,OAAO,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAW,CAAA;QACzE,MAAM,IAAI,cAAc,EAAE,CAAA;IAC5B,CAAC,CAAC,EAAE,CAAA;IACJ,SAAS,MAAM,CAAC,UAA4B;QAC1C,MAAM,KAAK,GAAG,MAAe,CAAA;QAC7B,OAAO;YACL,KAAK;YACL,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACtE,CAAA;IACH,CAAC;IACD,OAAO,MAAM,CAAC,gBAAgB,CAC5B,MAAM,EACN,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;QAC7C,GAAG;QACH,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;KAChD,CAAC,CACH,CACO,CAAA;AACZ,CAAC;AAoBD,yEAAyE;AACzE,MAAM,UAAU,QAAQ,CAAC,KAAY;IACnC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,cAAc,EAAE,CAAA;IAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,gFAAgF;AAChF,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,GAAG,8BAA8B,CAAA;CAC/C"}
|