tapimo 0.10.2 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.d.ts +4896 -2166
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +2 -2
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +15 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +7 -0
- package/dist/Assets.js.map +1 -1
- package/dist/Webhooks.d.ts +0 -75
- package/dist/Webhooks.d.ts.map +1 -1
- package/dist/Webhooks.js +1 -143
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +127 -78
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +115 -1
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +59 -6
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts +3 -3
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +4 -2
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +83 -83
- 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 -151
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/data/App.d.ts +5924 -4310
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +61 -9
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +62 -0
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
- package/dist/apps/data/ZoneSelection.js +44 -0
- package/dist/apps/data/ZoneSelection.js.map +1 -0
- package/dist/apps/data/routes/activities.d.ts +2368 -5
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +423 -114
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +131 -0
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +25 -25
- package/dist/apps/data/routes/balances.js +1 -1
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +1 -1
- package/dist/apps/data/routes/blocks.js +1 -1
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +135 -10
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +157 -25
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/exchanges.d.ts +829 -123
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +16 -13
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +26 -26
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +9 -11
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +54 -54
- package/dist/apps/data/routes/receipts.js +1 -1
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.js +24 -10
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +12 -12
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +16 -15
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +17 -3
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +34 -15
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +1 -1
- package/dist/apps/data/routes/transactions.js +1 -1
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +13 -13
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +7 -9
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +21 -21
- package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
- package/dist/apps/data/routes/webhooks.d.ts +1011 -151
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +126 -739
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +15 -15
- package/dist/apps/funding/App.d.ts +27 -27
- package/dist/apps/funding/routes/chains.d.ts.map +1 -1
- package/dist/apps/funding/routes/chains.js +5 -4
- package/dist/apps/funding/routes/chains.js.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts +18 -18
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.js +8 -8
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/funding/routes/providers.d.ts.map +1 -1
- package/dist/apps/funding/routes/providers.js +3 -2
- package/dist/apps/funding/routes/providers.js.map +1 -1
- package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
- package/dist/apps/funding/routes/quotes.js +2 -2
- package/dist/apps/funding/routes/quotes.js.map +1 -1
- package/dist/apps/funding/routes/transfers.d.ts +33 -33
- package/dist/apps/management/App.d.ts +1433 -322
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +19 -6
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +154 -94
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +76 -30
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +103 -30
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +91 -32
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +12 -12
- package/dist/apps/management/routes/faucet.d.ts.map +1 -1
- package/dist/apps/management/routes/faucet.js +23 -12
- package/dist/apps/management/routes/faucet.js.map +1 -1
- package/dist/apps/management/routes/invitations.d.ts +46 -13
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +79 -29
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +128 -83
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +100 -41
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +5 -5
- package/dist/apps/management/routes/me.d.ts.map +1 -1
- package/dist/apps/management/routes/me.js +14 -10
- package/dist/apps/management/routes/me.js.map +1 -1
- package/dist/apps/management/routes/members.d.ts +68 -47
- package/dist/apps/management/routes/members.d.ts.map +1 -1
- package/dist/apps/management/routes/members.js +37 -18
- package/dist/apps/management/routes/members.js.map +1 -1
- package/dist/apps/management/routes/orgs.d.ts +48 -8
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +48 -19
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +130 -68
- package/dist/apps/management/routes/projects.d.ts.map +1 -1
- package/dist/apps/management/routes/projects.js +72 -21
- package/dist/apps/management/routes/projects.js.map +1 -1
- package/dist/apps/management/routes/scopes.d.ts.map +1 -1
- package/dist/apps/management/routes/scopes.js +8 -5
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +38 -38
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +41 -31
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +34 -6
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.js +36 -17
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +1186 -197
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +106 -38
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Adapter.js +12 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -1
- package/dist/db/Db.d.ts +2 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +61 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +30 -2
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +28 -3
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +5 -1
- package/dist/db/tables/earnVaults.d.ts.map +1 -1
- package/dist/db/tables/earnVaults.js +5 -0
- package/dist/db/tables/earnVaults.js.map +1 -1
- package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
- package/dist/db/tables/webhookDeliveries.js +10 -0
- package/dist/db/tables/webhookDeliveries.js.map +1 -1
- package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
- package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
- package/dist/db/tables/webhookQueueCompletions.js +32 -0
- package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
- package/dist/db/tables/webhookQueueEvents.d.ts +16 -20
- package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
- package/dist/db/tables/webhookQueueEvents.js +68 -43
- package/dist/db/tables/webhookQueueEvents.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +47 -72
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +92 -105
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/internal/Auth.d.ts +8 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +13 -3
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +11 -7
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +41 -2
- package/dist/internal/EarnVaults.d.ts.map +1 -1
- package/dist/internal/EarnVaults.js +167 -0
- package/dist/internal/EarnVaults.js.map +1 -1
- package/dist/internal/MetricSink.d.ts +35 -125
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +50 -121
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +26 -22
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +128 -39
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +13 -8
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +16 -5
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +8 -8
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +10 -9
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +15 -6
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +45 -15
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +2 -0
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +16 -4
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/WebhookTransfer.d.ts +1 -55
- package/dist/internal/WebhookTransfer.d.ts.map +1 -1
- package/dist/internal/WebhookTransfer.js +1 -239
- package/dist/internal/WebhookTransfer.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +112 -56
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +124 -93
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/funding/Deposit.d.ts +2 -2
- package/dist/internal/funding/Deposit.d.ts.map +1 -1
- package/dist/internal/funding/Deposit.js +9 -8
- package/dist/internal/funding/Deposit.js.map +1 -1
- package/dist/internal/funding/DepositAddress.d.ts +4 -4
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
- package/dist/internal/funding/DepositAddress.js +9 -8
- package/dist/internal/funding/DepositAddress.js.map +1 -1
- package/dist/internal/funding/DepositWebhook.d.ts +25 -0
- package/dist/internal/funding/DepositWebhook.d.ts.map +1 -0
- package/dist/internal/funding/DepositWebhook.js +74 -0
- package/dist/internal/funding/DepositWebhook.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -1
- package/dist/internal/funding/Provider.js +13 -12
- package/dist/internal/funding/Provider.js.map +1 -1
- package/dist/internal/funding/Reconciliation.d.ts +6 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
- package/dist/internal/funding/Reconciliation.js +42 -10
- package/dist/internal/funding/Reconciliation.js.map +1 -1
- package/dist/internal/funding/index.d.ts +1 -0
- package/dist/internal/funding/index.d.ts.map +1 -1
- package/dist/internal/funding/index.js +1 -0
- package/dist/internal/funding/index.js.map +1 -1
- package/dist/internal/funding/providers/stargate.d.ts +19 -0
- package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
- package/dist/internal/funding/providers/stargate.js +143 -0
- package/dist/internal/funding/providers/stargate.js.map +1 -0
- package/dist/internal/webhookDestinations/slack.d.ts.map +1 -1
- package/dist/internal/webhookDestinations/slack.js +16 -0
- package/dist/internal/webhookDestinations/slack.js.map +1 -1
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -1
- package/package.json +2 -2
- package/src/App.test.ts +48 -0
- package/src/App.ts +7 -2
- package/src/Assets.test.ts +18 -0
- package/src/Assets.ts +22 -0
- package/src/Client.test-d.ts +287 -17
- package/src/Webhooks.ts +1 -220
- package/src/admin/apps/earn-vaults.test.ts +143 -0
- package/src/admin/apps/earn-vaults.ts +83 -6
- package/src/admin/apps/organizations.ts +6 -2
- package/src/admin/ui/src/routes/api-keys.tsx +36 -0
- package/src/admin/ui.generated.ts +151 -189
- package/src/apps/data/App.test.ts +31 -0
- package/src/apps/data/App.ts +64 -10
- package/src/apps/data/ZoneSelection.test.ts +196 -0
- package/src/apps/data/ZoneSelection.ts +108 -0
- package/src/apps/data/routes/activities.test.ts +435 -12
- package/src/apps/data/routes/activities.ts +562 -125
- package/src/apps/data/routes/balances.ts +1 -1
- package/src/apps/data/routes/blocks.ts +1 -1
- package/src/apps/data/routes/earn.test.ts +183 -23
- package/src/apps/data/routes/earn.ts +225 -29
- package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
- package/src/apps/data/routes/exchanges.test.ts +31 -1
- package/src/apps/data/routes/exchanges.ts +19 -15
- package/src/apps/data/routes/fee-amm.ts +18 -11
- package/src/apps/data/routes/receipts.ts +1 -1
- package/src/apps/data/routes/rpc.test.ts +75 -0
- package/src/apps/data/routes/rpc.ts +23 -9
- package/src/apps/data/routes/tokenlist.ts +21 -18
- package/src/apps/data/routes/tokens.test.ts +29 -0
- package/src/apps/data/routes/tokens.ts +38 -15
- package/src/apps/data/routes/transactions.ts +1 -1
- package/src/apps/data/routes/transfers.test.ts +3 -3
- package/src/apps/data/routes/transfers.ts +12 -9
- package/src/apps/data/routes/webhooks.test.ts +179 -1497
- package/src/apps/data/routes/webhooks.ts +156 -976
- package/src/apps/data/routes/zones.test.ts +19 -13
- package/src/apps/funding/routes/chains.test.ts +211 -7
- package/src/apps/funding/routes/chains.ts +19 -12
- package/src/apps/funding/routes/deposit-addresses.test.ts +394 -0
- package/src/apps/funding/routes/deposit-addresses.ts +84 -72
- package/src/apps/funding/routes/providers.ts +9 -5
- package/src/apps/funding/routes/quotes.test.ts +46 -0
- package/src/apps/funding/routes/quotes.ts +8 -5
- package/src/apps/funding/routes/transfers.test.ts +35 -32
- package/src/apps/management/Billing.test.ts +26 -0
- package/src/apps/management/Billing.ts +24 -7
- package/src/apps/management/routes/api-keys.test.ts +178 -0
- package/src/apps/management/routes/api-keys.ts +203 -144
- package/src/apps/management/routes/billing.test.ts +209 -0
- package/src/apps/management/routes/billing.ts +254 -177
- package/src/apps/management/routes/faucet.test.ts +39 -0
- package/src/apps/management/routes/faucet.ts +75 -41
- package/src/apps/management/routes/invitations.test.ts +216 -0
- package/src/apps/management/routes/invitations.ts +186 -109
- package/src/apps/management/routes/invite-links.test.ts +263 -1
- package/src/apps/management/routes/invite-links.ts +295 -214
- package/src/apps/management/routes/me.test.ts +49 -0
- package/src/apps/management/routes/me.ts +42 -32
- package/src/apps/management/routes/members.test.ts +124 -1
- package/src/apps/management/routes/members.ts +81 -51
- package/src/apps/management/routes/orgs.test.ts +176 -0
- package/src/apps/management/routes/orgs.ts +101 -59
- package/src/apps/management/routes/projects.test.ts +183 -0
- package/src/apps/management/routes/projects.ts +124 -60
- package/src/apps/management/routes/scopes.test.ts +44 -0
- package/src/apps/management/routes/scopes.ts +37 -28
- package/src/apps/management/routes/usage.test.ts +92 -0
- package/src/apps/management/routes/usage.ts +186 -151
- package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
- package/src/apps/management/routes/verified-token-requests.ts +166 -133
- package/src/apps/management/routes/webhooks.test.ts +313 -1
- package/src/apps/management/routes/webhooks.ts +220 -71
- package/src/apps/mpp/internal/Adapter.ts +13 -1
- package/src/db/Db.test.ts +42 -5
- package/src/db/Db.ts +85 -0
- package/src/db/Schema.ts +41 -3
- package/src/db/tables/earnVaults.test.ts +22 -0
- package/src/db/tables/earnVaults.ts +11 -1
- package/src/db/tables/organizations.test.ts +5 -2
- package/src/db/tables/webhookDeliveries.ts +13 -0
- package/src/db/tables/webhookQueueCompletions.ts +55 -0
- package/src/db/tables/webhookQueueEvents.ts +97 -57
- package/src/db/tables/webhookSubscriptions.ts +134 -144
- package/src/internal/Auth.ts +23 -5
- package/src/internal/Cache.ts +14 -7
- package/src/internal/EarnVaults.capabilities.test.ts +33 -0
- package/src/internal/EarnVaults.test.ts +79 -0
- package/src/internal/EarnVaults.ts +277 -0
- package/src/internal/MetricSink.test.ts +41 -373
- package/src/internal/MetricSink.ts +92 -273
- package/src/internal/OpenApi.ts +165 -49
- package/src/internal/Response.test.ts +95 -0
- package/src/internal/Response.ts +40 -2
- package/src/internal/Schema.test.ts +34 -0
- package/src/internal/Schema.ts +20 -9
- package/src/internal/Store.test.ts +186 -0
- package/src/internal/Store.ts +57 -17
- package/src/internal/Tidx.test.ts +19 -0
- package/src/internal/Tidx.ts +16 -4
- package/src/internal/WebhookTransfer.ts +1 -351
- package/src/internal/Webhooks.test.ts +222 -145
- package/src/internal/Webhooks.ts +234 -135
- package/src/internal/funding/Deposit.ts +71 -64
- package/src/internal/funding/DepositAddress.ts +50 -43
- package/src/internal/funding/DepositWebhook.test.ts +131 -0
- package/src/internal/funding/DepositWebhook.ts +101 -0
- package/src/internal/funding/Provider.ts +164 -142
- package/src/internal/funding/Reconciliation.test.ts +14 -0
- package/src/internal/funding/Reconciliation.ts +161 -86
- package/src/internal/funding/index.test.ts +1 -0
- package/src/internal/funding/index.ts +1 -0
- package/src/internal/funding/providers/index.test.ts +185 -0
- package/src/internal/funding/providers/stargate.ts +184 -0
- package/src/internal/webhookDestinations/slack.ts +15 -0
- package/src/providers/index.test.ts +1 -0
- package/src/providers/index.ts +9 -0
- package/src/Webhooks.bench.ts +0 -714
- package/src/Webhooks.memory.bench.ts +0 -250
- package/src/Webhooks.test.ts +0 -146
|
@@ -2,6 +2,7 @@ import { Hono } from 'hono';
|
|
|
2
2
|
import { Value as core_Value } from 'ox';
|
|
3
3
|
import { ContractFunctionExecutionError, ContractFunctionRevertedError, ContractFunctionZeroDataError, zeroAddress, } from 'viem';
|
|
4
4
|
import * as z from 'zod/mini';
|
|
5
|
+
import * as Scope from '../../../Scope.js';
|
|
5
6
|
import * as Db from '../../../db/Db.js';
|
|
6
7
|
import * as core_EarnVaults from '../../../db/tables/earnVaults.js';
|
|
7
8
|
import * as Auth from '../../../internal/Auth.js';
|
|
@@ -45,6 +46,11 @@ export function discoveryBatchLimit(options) {
|
|
|
45
46
|
const needed = options.limit + 1 - options.matches;
|
|
46
47
|
return Math.min(options.filtered ? needed * 2 : needed, options.remaining, scanLimit);
|
|
47
48
|
}
|
|
49
|
+
/** Returns whether API-key scopes grant read access to one private Zone. */
|
|
50
|
+
export function hasZoneAccess(options) {
|
|
51
|
+
const scopes = options.scopes ?? [];
|
|
52
|
+
return scopes.includes(Scope.wildcard) || scopes.includes(`zone:${options.chainId}:read`);
|
|
53
|
+
}
|
|
48
54
|
/** Zod schemas owned by the public Earn-vault resource. */
|
|
49
55
|
export var schema;
|
|
50
56
|
(function (schema) {
|
|
@@ -73,13 +79,13 @@ export var schema;
|
|
|
73
79
|
.check(z.describe('Yield venue, or null when the engine does not expose one.')),
|
|
74
80
|
}), 'Current vault engine.');
|
|
75
81
|
const include = z
|
|
76
|
-
.enum(['access', 'apy', 'capabilities', 'token.logoUri', 'tvl', 'zone'])
|
|
82
|
+
.enum(['access', 'apy', 'capabilities', 'token.logoUri', 'tvl', 'zone', 'zones'])
|
|
77
83
|
.check(z.describe('Optional vault fields to embed via `include`.'));
|
|
78
84
|
const includeQuery = Schema.includeQuery(include, 'Comma-separated vault fields to include, such as `apy,tvl`.');
|
|
79
85
|
// `apy` and `tvl` need indexer and FX access, so surfaces lacking either
|
|
80
86
|
// select from this reduced set instead.
|
|
81
87
|
const baseInclude = z
|
|
82
|
-
.enum(['access', 'capabilities', 'token.logoUri', 'zone'])
|
|
88
|
+
.enum(['access', 'capabilities', 'token.logoUri', 'zone', 'zones'])
|
|
83
89
|
.check(z.describe('Optional vault fields to embed via `include`.'));
|
|
84
90
|
const baseIncludeQuery = Schema.includeQuery(baseInclude, 'Comma-separated vault fields to include, such as `access,zone`.');
|
|
85
91
|
const zone = z
|
|
@@ -96,6 +102,24 @@ export var schema;
|
|
|
96
102
|
.check(z.describe('Tokens supported by private redemptions.'), z.meta({ examples: [['0x20c000000000000000000000ff04042ee92fd449']] })),
|
|
97
103
|
})
|
|
98
104
|
.check(z.describe('Private Zone route configured for a verified vault.'));
|
|
105
|
+
const zoneRoute = z
|
|
106
|
+
.strictObject({
|
|
107
|
+
chainId: Schema.ChainId.check(z.describe('Private Zone chain id.'), z.meta({ examples: [1424310001] })),
|
|
108
|
+
deploymentBlock: z
|
|
109
|
+
.number()
|
|
110
|
+
.check(z.int(), z.nonnegative(), z.describe('Parent-chain block that deployed the Earn router.'), z.meta({ examples: [31039238] })),
|
|
111
|
+
earnRouter: Schema.Address.check(z.describe('Parent-chain router for this Zone and Earn vault.'), z.meta({ examples: ['0x9144086a79dea966d8bf1b52125ebed8919fc45c'] })),
|
|
112
|
+
inputTokens: z
|
|
113
|
+
.array(Schema.Address)
|
|
114
|
+
.check(z.describe('Tokens accepted by private deposits.'), z.meta({ examples: [['0x20c000000000000000000000ff04042ee92fd449']] })),
|
|
115
|
+
name: z
|
|
116
|
+
.string()
|
|
117
|
+
.check(z.describe('Private Zone name.'), z.meta({ examples: ['zone-moderato-internal'] })),
|
|
118
|
+
outputTokens: z
|
|
119
|
+
.array(Schema.Address)
|
|
120
|
+
.check(z.describe('Tokens returned by private redemptions.'), z.meta({ examples: [['0x20c000000000000000000000ff04042ee92fd449']] })),
|
|
121
|
+
})
|
|
122
|
+
.check(z.describe('Verified Earn route through one private Zone.'));
|
|
99
123
|
const value = z.strictObject({
|
|
100
124
|
amount: Schema.DecimalString.check(z.describe('Value in base units at `decimals` precision.'), z.meta({ examples: ['125288750000'] })),
|
|
101
125
|
currency: z
|
|
@@ -146,6 +170,20 @@ export var schema;
|
|
|
146
170
|
zone: z
|
|
147
171
|
.optional(z.nullable(zone))
|
|
148
172
|
.check(z.describe('Curated private Zone route, when requested, or null when absent.')),
|
|
173
|
+
zones: z.optional(z.array(zoneRoute)).check(z.describe('Curated private Zone routes, when requested.'), z.meta({
|
|
174
|
+
examples: [
|
|
175
|
+
[
|
|
176
|
+
{
|
|
177
|
+
chainId: 1424310001,
|
|
178
|
+
deploymentBlock: 31039238,
|
|
179
|
+
earnRouter: '0x9144086a79dea966d8bf1b52125ebed8919fc45c',
|
|
180
|
+
inputTokens: ['0x20c000000000000000000000ff04042ee92fd449'],
|
|
181
|
+
name: 'zone-moderato-internal',
|
|
182
|
+
outputTokens: ['0x20c000000000000000000000ff04042ee92fd449'],
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
],
|
|
186
|
+
})),
|
|
149
187
|
});
|
|
150
188
|
/** One compatible Earn vault resolved from current chain state. */
|
|
151
189
|
schema.Vault = Schema.describe(vault, 'A compatible earn vault resolved from chain state.');
|
|
@@ -426,8 +464,8 @@ export function earn(options = {}) {
|
|
|
426
464
|
// as current-state rather than slow-changing metadata.
|
|
427
465
|
Cache.response({
|
|
428
466
|
cacheControl: Cache.policies.state,
|
|
429
|
-
key: (c) =>
|
|
430
|
-
name: 'tempo-api:earn-vaults:
|
|
467
|
+
key: (c) => vaultCacheKey(c, schema.getEarnVaults.Query),
|
|
468
|
+
name: 'tempo-api:earn-vaults:v3',
|
|
431
469
|
}), async (c) => {
|
|
432
470
|
if (Auth.narrowAccess)
|
|
433
471
|
return Auth.paidAccessError(c);
|
|
@@ -463,8 +501,8 @@ export function earn(options = {}) {
|
|
|
463
501
|
tags: ['Earn'],
|
|
464
502
|
}), Cache.response({
|
|
465
503
|
cacheControl: Cache.policies.state,
|
|
466
|
-
key: (c) =>
|
|
467
|
-
name: 'tempo-api:earn-vaults:
|
|
504
|
+
key: (c) => vaultCacheKey(c, schema.getVerifiedEarnVaults.Query),
|
|
505
|
+
name: 'tempo-api:earn-vaults:v3',
|
|
468
506
|
}), async (c) => {
|
|
469
507
|
if (Auth.narrowAccess)
|
|
470
508
|
return Auth.paidAccessError(c);
|
|
@@ -765,8 +803,8 @@ export function earn(options = {}) {
|
|
|
765
803
|
tags: ['Earn'],
|
|
766
804
|
}), Cache.response({
|
|
767
805
|
cacheControl: Cache.policies.state,
|
|
768
|
-
key: (c) =>
|
|
769
|
-
name: 'tempo-api:earn-vaults:
|
|
806
|
+
key: (c) => vaultCacheKey(c, schema.getEarnVault.Query),
|
|
807
|
+
name: 'tempo-api:earn-vaults:v3',
|
|
770
808
|
}), async (c) => {
|
|
771
809
|
if (Auth.narrowAccess)
|
|
772
810
|
return Auth.paidAccessError(c);
|
|
@@ -1549,12 +1587,18 @@ export async function listVaults(c, options) {
|
|
|
1549
1587
|
Promise.all(page.items.map(async (item) => {
|
|
1550
1588
|
const record = registry.get(item.vaultAddress.toLowerCase());
|
|
1551
1589
|
try {
|
|
1552
|
-
const
|
|
1590
|
+
const discovered = await resolveVaultDiscovery(c, {
|
|
1553
1591
|
chainId: options.chainId,
|
|
1554
1592
|
include: discoveryInclude(options),
|
|
1555
1593
|
vaultAddress: item.vaultAddress,
|
|
1556
1594
|
});
|
|
1557
|
-
|
|
1595
|
+
const { discovery, zoneRoutes } = await resolveVaultRoutes(c, {
|
|
1596
|
+
capability: options.capability,
|
|
1597
|
+
discovery: discovered,
|
|
1598
|
+
include,
|
|
1599
|
+
record,
|
|
1600
|
+
});
|
|
1601
|
+
return { discovery, position: item.position, record, zoneRoutes };
|
|
1558
1602
|
}
|
|
1559
1603
|
catch (cause) {
|
|
1560
1604
|
if (!record && isIncompatible(cause))
|
|
@@ -1602,7 +1646,7 @@ export async function listVaults(c, options) {
|
|
|
1602
1646
|
for (const [vault, apy] of missingApy ?? [])
|
|
1603
1647
|
apyByVault.set(vault, apy);
|
|
1604
1648
|
const apy = include.includes('apy') ? apyByVault : undefined;
|
|
1605
|
-
const data = page.map((match) => resolveVault(c, { ...match, apy, include, rates, snapshot, tokens }));
|
|
1649
|
+
const data = await Promise.all(page.map((match) => resolveVault(c, { ...match, apy, include, rates, snapshot, tokens })));
|
|
1606
1650
|
const last = matches[options.limit - 1];
|
|
1607
1651
|
const nextPosition = matches.length > options.limit ? last?.position : hasMore ? position : undefined;
|
|
1608
1652
|
return {
|
|
@@ -1621,6 +1665,7 @@ export async function listVerifiedVaults(c, options) {
|
|
|
1621
1665
|
const decoded = options.cursor ? Cursor.decode(options.cursor, ['address']) : undefined;
|
|
1622
1666
|
const cursor = decoded?.[0]?.toString().toLowerCase();
|
|
1623
1667
|
const candidates = records.filter((record) => !cursor || record.vaultAddress.toLowerCase() > cursor);
|
|
1668
|
+
const include = vaultInclude(options);
|
|
1624
1669
|
const matches = [];
|
|
1625
1670
|
let offset = 0;
|
|
1626
1671
|
while (offset < candidates.length && matches.length <= options.limit) {
|
|
@@ -1632,14 +1677,20 @@ export async function listVerifiedVaults(c, options) {
|
|
|
1632
1677
|
});
|
|
1633
1678
|
const batch = candidates.slice(offset, offset + batchSize);
|
|
1634
1679
|
offset += batch.length;
|
|
1635
|
-
const discovered = await Promise.all(batch.map(async (record) =>
|
|
1636
|
-
|
|
1680
|
+
const discovered = await Promise.all(batch.map(async (record) => {
|
|
1681
|
+
const discovered = await resolveVaultDiscovery(c, {
|
|
1637
1682
|
chainId: options.chainId,
|
|
1638
1683
|
include: discoveryInclude(options),
|
|
1639
1684
|
vaultAddress: Schema.Address.parse(record.vaultAddress.toLowerCase()),
|
|
1640
|
-
})
|
|
1641
|
-
|
|
1642
|
-
|
|
1685
|
+
});
|
|
1686
|
+
const { discovery, zoneRoutes } = await resolveVaultRoutes(c, {
|
|
1687
|
+
capability: options.capability,
|
|
1688
|
+
discovery: discovered,
|
|
1689
|
+
include,
|
|
1690
|
+
record,
|
|
1691
|
+
});
|
|
1692
|
+
return { discovery, record, zoneRoutes };
|
|
1693
|
+
}));
|
|
1643
1694
|
for (const match of discovered) {
|
|
1644
1695
|
if (!matchesVaultFilters(match.discovery, options))
|
|
1645
1696
|
continue;
|
|
@@ -1648,7 +1699,6 @@ export async function listVerifiedVaults(c, options) {
|
|
|
1648
1699
|
}
|
|
1649
1700
|
const page = matches.slice(0, options.limit);
|
|
1650
1701
|
const discoveries = page.map(({ discovery }) => discovery);
|
|
1651
|
-
const include = vaultInclude(options);
|
|
1652
1702
|
const [apy, rates, tokens] = await Promise.all([
|
|
1653
1703
|
resolvePageApy(c, {
|
|
1654
1704
|
chainId: options.chainId,
|
|
@@ -1659,7 +1709,7 @@ export async function listVerifiedVaults(c, options) {
|
|
|
1659
1709
|
resolvePageRates(c, { discoveries, include, oracle: options.oracle, snapshot }),
|
|
1660
1710
|
resolvePageTokens(c, { chainId: options.chainId, discoveries, include, snapshot }),
|
|
1661
1711
|
]);
|
|
1662
|
-
const data = page.map((match) => Response.validated(schema.VerifiedVault, resolveVault(c, { ...match, apy, include, rates, snapshot, tokens })));
|
|
1712
|
+
const data = await Promise.all(page.map(async (match) => Response.validated(schema.VerifiedVault, await resolveVault(c, { ...match, apy, include, rates, snapshot, tokens }))));
|
|
1663
1713
|
const last = matches[options.limit - 1];
|
|
1664
1714
|
return {
|
|
1665
1715
|
data,
|
|
@@ -1867,13 +1917,19 @@ export async function getVault(c, options) {
|
|
|
1867
1917
|
VerifiedTokens.snapshot(c, options.chainId),
|
|
1868
1918
|
]);
|
|
1869
1919
|
try {
|
|
1870
|
-
const
|
|
1920
|
+
const discovered = await resolveVaultDiscovery(c, {
|
|
1871
1921
|
chainId: options.chainId,
|
|
1872
1922
|
include: discoveryInclude({ capability: [], include: options.include }),
|
|
1873
1923
|
vaultAddress: options.vaultAddress,
|
|
1874
1924
|
});
|
|
1875
|
-
const discoveries = [discovery];
|
|
1876
1925
|
const include = vaultInclude(options);
|
|
1926
|
+
const { discovery, zoneRoutes } = await resolveVaultRoutes(c, {
|
|
1927
|
+
capability: [],
|
|
1928
|
+
discovery: discovered,
|
|
1929
|
+
include,
|
|
1930
|
+
record,
|
|
1931
|
+
});
|
|
1932
|
+
const discoveries = [discovery];
|
|
1877
1933
|
const [apy, rates, tokens] = await Promise.all([
|
|
1878
1934
|
resolvePageApy(c, {
|
|
1879
1935
|
chainId: options.chainId,
|
|
@@ -1885,7 +1941,7 @@ export async function getVault(c, options) {
|
|
|
1885
1941
|
resolvePageTokens(c, { chainId: options.chainId, discoveries, include, snapshot }),
|
|
1886
1942
|
]);
|
|
1887
1943
|
return {
|
|
1888
|
-
...resolveVault(c, {
|
|
1944
|
+
...(await resolveVault(c, {
|
|
1889
1945
|
apy,
|
|
1890
1946
|
discovery,
|
|
1891
1947
|
include,
|
|
@@ -1893,7 +1949,8 @@ export async function getVault(c, options) {
|
|
|
1893
1949
|
record,
|
|
1894
1950
|
snapshot,
|
|
1895
1951
|
tokens,
|
|
1896
|
-
|
|
1952
|
+
zoneRoutes,
|
|
1953
|
+
})),
|
|
1897
1954
|
...(rates ? { meta: { valuation: Valuation.pricing(rates, options.oracle) } } : {}),
|
|
1898
1955
|
};
|
|
1899
1956
|
}
|
|
@@ -1911,6 +1968,21 @@ function vaultInclude(options) {
|
|
|
1911
1968
|
return include;
|
|
1912
1969
|
return [...include, 'apy'];
|
|
1913
1970
|
}
|
|
1971
|
+
/** Builds an Earn-vault cache key partitioned by Zone-visible API keys. */
|
|
1972
|
+
export function vaultCacheKey(c, query) {
|
|
1973
|
+
const key = Cache.urlKey(c, query);
|
|
1974
|
+
const url = new URL(key);
|
|
1975
|
+
const includesRoutes = url.searchParams
|
|
1976
|
+
.getAll('include')
|
|
1977
|
+
.some((include) => include === 'zone' || include === 'zones');
|
|
1978
|
+
if (!includesRoutes)
|
|
1979
|
+
return key;
|
|
1980
|
+
const principal = Auth.getPrincipal(c);
|
|
1981
|
+
if (principal?.type !== 'api_key')
|
|
1982
|
+
return key;
|
|
1983
|
+
url.searchParams.set('principal', `${principal.type}:${principal.id}`);
|
|
1984
|
+
return url.toString();
|
|
1985
|
+
}
|
|
1914
1986
|
function discoveryInclude(options) {
|
|
1915
1987
|
const includeCapabilities = options.include.includes('capabilities') ||
|
|
1916
1988
|
options.include.includes('zone') ||
|
|
@@ -1937,6 +2009,39 @@ async function resolveVaultDiscovery(c, options) {
|
|
|
1937
2009
|
ttl: Ttl.seconds(30),
|
|
1938
2010
|
});
|
|
1939
2011
|
}
|
|
2012
|
+
async function resolveVaultRoutes(c, options) {
|
|
2013
|
+
const { discovery, record } = options;
|
|
2014
|
+
if (!record || record.zones.length === 0)
|
|
2015
|
+
return { discovery, zoneRoutes: [] };
|
|
2016
|
+
const principal = Auth.getPrincipal(c);
|
|
2017
|
+
const scopes = principal?.type === 'api_key' ? principal.apiKey.scopes : undefined;
|
|
2018
|
+
const includesRoutes = options.include.includes('zone') || options.include.includes('zones');
|
|
2019
|
+
const needsCapabilities = options.include.includes('capabilities') ||
|
|
2020
|
+
options.capability.includes('privateRouting') ||
|
|
2021
|
+
options.capability.includes('routerSwaps');
|
|
2022
|
+
const visibleRoutes = record.zones.filter((route) => hasZoneAccess({ chainId: route.chainId, scopes }));
|
|
2023
|
+
// Capabilities describe the vault; API-key scopes limit only the route metadata.
|
|
2024
|
+
const routes = needsCapabilities ? record.zones : includesRoutes ? visibleRoutes : [];
|
|
2025
|
+
if (routes.length === 0)
|
|
2026
|
+
return { discovery, zoneRoutes: [] };
|
|
2027
|
+
const resolved = await EarnVaults.resolveZoneRoutes({
|
|
2028
|
+
discovery,
|
|
2029
|
+
getClient: c.get('getClient'),
|
|
2030
|
+
routes,
|
|
2031
|
+
zones: [...c.get('zones').values()],
|
|
2032
|
+
});
|
|
2033
|
+
const capabilities = discovery.capabilities;
|
|
2034
|
+
if (needsCapabilities && !capabilities)
|
|
2035
|
+
throw new Error('Earn vault capabilities were not resolved.');
|
|
2036
|
+
return {
|
|
2037
|
+
discovery: capabilities
|
|
2038
|
+
? { ...discovery, capabilities: EarnVaults.addZoneRouteCapabilities(capabilities) }
|
|
2039
|
+
: discovery,
|
|
2040
|
+
zoneRoutes: includesRoutes
|
|
2041
|
+
? resolved.filter((route) => hasZoneAccess({ chainId: route.chainId, scopes }))
|
|
2042
|
+
: [],
|
|
2043
|
+
};
|
|
2044
|
+
}
|
|
1940
2045
|
// Measuring a rate costs indexer boundary queries plus historical quotes against
|
|
1941
2046
|
// an archive node, so an unrequested rate reaches neither.
|
|
1942
2047
|
function resolvePageApy(c, options) {
|
|
@@ -1986,8 +2091,11 @@ async function resolvePageTokens(c, options) {
|
|
|
1986
2091
|
snapshot: options.snapshot,
|
|
1987
2092
|
});
|
|
1988
2093
|
}
|
|
1989
|
-
function resolveVault(c, options) {
|
|
2094
|
+
async function resolveVault(c, options) {
|
|
1990
2095
|
const { discovery, record } = options;
|
|
2096
|
+
const principal = Auth.getPrincipal(c);
|
|
2097
|
+
const scopes = principal?.type === 'api_key' ? principal.apiKey.scopes : undefined;
|
|
2098
|
+
const zones = [...c.get('zones').values()].filter((zone) => hasZoneAccess({ chainId: zone.id, scopes }));
|
|
1991
2099
|
const valued = options.include.includes('tvl')
|
|
1992
2100
|
? Valuation.valuationFor({
|
|
1993
2101
|
amount: BigInt(discovery.state.totalAssets),
|
|
@@ -2011,7 +2119,8 @@ function resolveVault(c, options) {
|
|
|
2011
2119
|
formatted: valued.amount,
|
|
2012
2120
|
}
|
|
2013
2121
|
: null,
|
|
2014
|
-
|
|
2122
|
+
zoneRoutes: options.zoneRoutes,
|
|
2123
|
+
zones,
|
|
2015
2124
|
});
|
|
2016
2125
|
}
|
|
2017
2126
|
/** Serializes resolved onchain and curated fields into the shared vault contract. */
|
|
@@ -2051,11 +2160,32 @@ export function serializeVault(options) {
|
|
|
2051
2160
|
vaultAddress,
|
|
2052
2161
|
verified: record !== undefined,
|
|
2053
2162
|
...(options.include.includes('zone')
|
|
2054
|
-
? {
|
|
2163
|
+
? {
|
|
2164
|
+
zone: record
|
|
2165
|
+
? resolveZone({
|
|
2166
|
+
discovery,
|
|
2167
|
+
record,
|
|
2168
|
+
zoneRoutes: options.zoneRoutes,
|
|
2169
|
+
zones: options.zones,
|
|
2170
|
+
})
|
|
2171
|
+
: null,
|
|
2172
|
+
}
|
|
2055
2173
|
: {}),
|
|
2174
|
+
...(options.include.includes('zones') ? { zones: record ? options.zoneRoutes : [] } : {}),
|
|
2056
2175
|
});
|
|
2057
2176
|
}
|
|
2058
2177
|
function resolveZone(options) {
|
|
2178
|
+
if (options.record.zones.length > 0) {
|
|
2179
|
+
if (options.zoneRoutes.length !== 1)
|
|
2180
|
+
return null;
|
|
2181
|
+
const route = options.zoneRoutes[0];
|
|
2182
|
+
return {
|
|
2183
|
+
chainId: route.chainId,
|
|
2184
|
+
inputTokens: [...route.inputTokens],
|
|
2185
|
+
name: route.name,
|
|
2186
|
+
outputTokens: [...route.outputTokens],
|
|
2187
|
+
};
|
|
2188
|
+
}
|
|
2059
2189
|
if (!options.discovery.capabilities?.privateRouting)
|
|
2060
2190
|
return null;
|
|
2061
2191
|
const hasInputs = options.record.privateInputTokens.length > 0;
|
|
@@ -2065,6 +2195,8 @@ function resolveZone(options) {
|
|
|
2065
2195
|
if (hasInputs !== hasOutputs)
|
|
2066
2196
|
throw new Error('Private input and output tokens must both be configured.');
|
|
2067
2197
|
const configured = options.zones.filter((zone) => zone.sourceId === options.record.chainId);
|
|
2198
|
+
if (configured.length === 0)
|
|
2199
|
+
return null;
|
|
2068
2200
|
if (configured.length !== 1)
|
|
2069
2201
|
throw new Error(`Expected one Earn Zone for chain ${options.record.chainId}.`);
|
|
2070
2202
|
const zone = configured[0];
|