tapimo 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -16
- package/dist/ApiKey.d.ts +4 -1
- package/dist/ApiKey.d.ts.map +1 -1
- package/dist/ApiKey.js +6 -2
- package/dist/ApiKey.js.map +1 -1
- package/dist/ApiKeys.d.ts +98 -3
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +150 -1
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +7917 -2315
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +141 -329
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +20 -4
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +23 -4
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +2 -2
- package/dist/Webhooks.d.ts.map +1 -1
- package/dist/Webhooks.js +2 -2
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +203 -120
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +111 -6
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +67 -0
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/scopes.d.ts +12 -1
- package/dist/admin/apps/scopes.d.ts.map +1 -1
- package/dist/admin/apps/scopes.js +3 -0
- package/dist/admin/apps/scopes.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +116 -116
- package/dist/admin/apps/verified-tokens.js +1 -1
- package/dist/admin/apps/verified-tokens.js.map +1 -1
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.js +13 -13
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts +151 -0
- package/dist/analytics/Analytics.d.ts.map +1 -0
- package/dist/analytics/Analytics.js +212 -0
- package/dist/analytics/Analytics.js.map +1 -0
- package/dist/analytics/tables/requestEvents.d.ts +215 -0
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -0
- package/dist/analytics/tables/requestEvents.js +264 -0
- package/dist/analytics/tables/requestEvents.js.map +1 -0
- package/dist/apps/data/App.d.ts +19576 -0
- package/dist/apps/data/App.d.ts.map +1 -0
- package/dist/apps/data/App.js +272 -0
- package/dist/apps/data/App.js.map +1 -0
- package/dist/apps/data/index.d.ts +3 -0
- package/dist/apps/data/index.d.ts.map +1 -0
- package/dist/apps/data/index.js +3 -0
- package/dist/apps/data/index.js.map +1 -0
- package/dist/apps/{activities.d.ts → data/routes/activities.d.ts} +32 -32
- package/dist/apps/{activities.d.ts.map → data/routes/activities.d.ts.map} +1 -1
- package/dist/apps/{activities.js → data/routes/activities.js} +13 -13
- package/dist/apps/data/routes/activities.js.map +1 -0
- package/dist/apps/{addresses.d.ts → data/routes/addresses.d.ts} +22 -22
- package/dist/apps/{addresses.d.ts.map → data/routes/addresses.d.ts.map} +1 -1
- package/dist/apps/{addresses.js → data/routes/addresses.js} +5 -5
- package/dist/apps/data/routes/addresses.js.map +1 -0
- package/dist/apps/{balances.d.ts → data/routes/balances.d.ts} +4 -4
- package/dist/apps/data/routes/balances.d.ts.map +1 -0
- package/dist/apps/{balances.js → data/routes/balances.js} +42 -11
- package/dist/apps/data/routes/balances.js.map +1 -0
- package/dist/apps/{blocks.d.ts → data/routes/blocks.d.ts} +47 -47
- package/dist/apps/data/routes/blocks.d.ts.map +1 -0
- package/dist/apps/{blocks.js → data/routes/blocks.js} +13 -13
- package/dist/apps/data/routes/blocks.js.map +1 -0
- package/dist/apps/{coingecko.d.ts → data/routes/coingecko.d.ts} +8 -8
- package/dist/apps/data/routes/coingecko.d.ts.map +1 -0
- package/dist/apps/{coingecko.js → data/routes/coingecko.js} +13 -13
- package/dist/apps/data/routes/coingecko.js.map +1 -0
- package/dist/apps/{exchanges.d.ts → data/routes/exchanges.d.ts} +108 -108
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -0
- package/dist/apps/{exchanges.js → data/routes/exchanges.js} +19 -19
- package/dist/apps/data/routes/exchanges.js.map +1 -0
- package/dist/apps/{fee-amm.d.ts → data/routes/fee-amm.d.ts} +39 -39
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -0
- package/dist/apps/{fee-amm.js → data/routes/fee-amm.js} +17 -17
- package/dist/apps/data/routes/fee-amm.js.map +1 -0
- package/dist/apps/data/routes/funding.d.ts +765 -0
- package/dist/apps/data/routes/funding.d.ts.map +1 -0
- package/dist/apps/data/routes/funding.js +383 -0
- package/dist/apps/data/routes/funding.js.map +1 -0
- package/dist/apps/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
- package/dist/apps/data/routes/indexer.d.ts.map +1 -0
- package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
- package/dist/apps/data/routes/indexer.js.map +1 -0
- package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +49 -49
- package/dist/apps/data/routes/receipts.d.ts.map +1 -0
- package/dist/apps/{receipts.js → data/routes/receipts.js} +14 -20
- package/dist/apps/data/routes/receipts.js.map +1 -0
- package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +33 -40
- package/dist/apps/data/routes/rpc.d.ts.map +1 -0
- package/dist/apps/{rpc.js → data/routes/rpc.js} +35 -7
- package/dist/apps/data/routes/rpc.js.map +1 -0
- package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +40 -40
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
- package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
- package/dist/apps/data/routes/tokenlist.js.map +1 -0
- package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +468 -468
- package/dist/apps/data/routes/tokens.d.ts.map +1 -0
- package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
- package/dist/apps/data/routes/tokens.js.map +1 -0
- package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +304 -304
- package/dist/apps/data/routes/transactions.d.ts.map +1 -0
- package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
- package/dist/apps/data/routes/transactions.js.map +1 -0
- package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +62 -62
- package/dist/apps/data/routes/transfers.d.ts.map +1 -0
- package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
- package/dist/apps/data/routes/transfers.js.map +1 -0
- package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +6 -6
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
- package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
- package/dist/apps/data/routes/verified-tokens.js.map +1 -0
- package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +17 -17
- package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
- package/dist/apps/{webhooks.js → data/routes/webhooks.js} +38 -34
- package/dist/apps/data/routes/webhooks.js.map +1 -0
- package/dist/apps/docs/App.d.ts +29 -0
- package/dist/apps/docs/App.d.ts.map +1 -0
- package/dist/apps/docs/App.js +54 -0
- package/dist/apps/docs/App.js.map +1 -0
- package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
- package/dist/apps/docs/fonts.d.ts.map +1 -0
- package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
- package/dist/apps/docs/fonts.js.map +1 -0
- package/dist/apps/docs/index.d.ts +2 -0
- package/dist/apps/docs/index.d.ts.map +1 -0
- package/dist/apps/docs/index.js +2 -0
- package/dist/apps/docs/index.js.map +1 -0
- package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
- package/dist/apps/docs/logo.d.ts.map +1 -0
- package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
- package/dist/apps/docs/logo.js.map +1 -0
- package/dist/apps/docs/reference.d.ts +21 -0
- package/dist/apps/docs/reference.d.ts.map +1 -0
- package/dist/apps/docs/reference.js +112 -0
- package/dist/apps/docs/reference.js.map +1 -0
- package/dist/apps/index.d.ts +5 -0
- package/dist/apps/index.d.ts.map +1 -0
- package/dist/apps/index.js +5 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/mcp.d.ts +76 -0
- package/dist/apps/mcp.d.ts.map +1 -0
- package/dist/apps/mcp.js +188 -0
- package/dist/apps/mcp.js.map +1 -0
- package/dist/apps/metadata.d.ts +7 -0
- package/dist/apps/metadata.d.ts.map +1 -0
- package/dist/apps/metadata.js +15 -0
- package/dist/apps/metadata.js.map +1 -0
- package/dist/apps/platform/App.d.ts +5262 -0
- package/dist/apps/platform/App.d.ts.map +1 -0
- package/dist/apps/platform/App.js +84 -0
- package/dist/apps/platform/App.js.map +1 -0
- package/dist/apps/platform/Billing.d.ts +279 -0
- package/dist/apps/platform/Billing.d.ts.map +1 -0
- package/dist/apps/platform/Billing.js +477 -0
- package/dist/apps/platform/Billing.js.map +1 -0
- package/dist/apps/platform/index.d.ts +3 -0
- package/dist/apps/platform/index.d.ts.map +1 -0
- package/dist/apps/platform/index.js +3 -0
- package/dist/apps/platform/index.js.map +1 -0
- package/dist/apps/platform/routes/api-keys.d.ts +973 -0
- package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
- package/dist/apps/platform/routes/api-keys.js +430 -0
- package/dist/apps/platform/routes/api-keys.js.map +1 -0
- package/dist/apps/platform/routes/billing.d.ts +1520 -0
- package/dist/apps/platform/routes/billing.d.ts.map +1 -0
- package/dist/apps/platform/routes/billing.js +795 -0
- package/dist/apps/platform/routes/billing.js.map +1 -0
- package/dist/apps/platform/routes/invitations.d.ts +851 -0
- package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
- package/dist/apps/platform/routes/invitations.js +471 -0
- package/dist/apps/platform/routes/invitations.js.map +1 -0
- package/dist/apps/platform/routes/me.d.ts +95 -0
- package/dist/apps/platform/routes/me.d.ts.map +1 -0
- package/dist/apps/platform/routes/me.js +81 -0
- package/dist/apps/platform/routes/me.js.map +1 -0
- package/dist/apps/platform/routes/members.d.ts +554 -0
- package/dist/apps/platform/routes/members.d.ts.map +1 -0
- package/dist/apps/platform/routes/members.js +251 -0
- package/dist/apps/platform/routes/members.js.map +1 -0
- package/dist/apps/platform/routes/orgs.d.ts +596 -0
- package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
- package/dist/apps/platform/routes/orgs.js +276 -0
- package/dist/apps/platform/routes/orgs.js.map +1 -0
- package/dist/apps/platform/routes/projects.d.ts +740 -0
- package/dist/apps/platform/routes/projects.d.ts.map +1 -0
- package/dist/apps/platform/routes/projects.js +286 -0
- package/dist/apps/platform/routes/projects.js.map +1 -0
- package/dist/apps/platform/routes/scopes.d.ts +107 -0
- package/dist/apps/platform/routes/scopes.d.ts.map +1 -0
- package/dist/apps/platform/routes/scopes.js +66 -0
- package/dist/apps/platform/routes/scopes.js.map +1 -0
- package/dist/apps/platform/routes/usage.d.ts +588 -0
- package/dist/apps/platform/routes/usage.d.ts.map +1 -0
- package/dist/apps/platform/routes/usage.js +391 -0
- package/dist/apps/platform/routes/usage.js.map +1 -0
- package/dist/apps/relay/App.d.ts +44 -0
- package/dist/apps/relay/App.d.ts.map +1 -0
- package/dist/apps/relay/App.js +211 -0
- package/dist/apps/relay/App.js.map +1 -0
- package/dist/apps/relay/Sponsorships.d.ts +107 -0
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
- package/dist/apps/relay/Sponsorships.js +194 -0
- package/dist/apps/relay/Sponsorships.js.map +1 -0
- package/dist/apps/relay/index.d.ts +3 -0
- package/dist/apps/relay/index.d.ts.map +1 -0
- package/dist/apps/relay/index.js +3 -0
- package/dist/apps/relay/index.js.map +1 -0
- package/dist/cli/Cli.d.ts +9 -2
- package/dist/cli/Cli.d.ts.map +1 -1
- package/dist/cli/Cli.js +12 -4
- package/dist/cli/Cli.js.map +1 -1
- package/dist/cli/commands/admin.d.ts +5 -1
- package/dist/cli/commands/admin.d.ts.map +1 -1
- package/dist/cli/commands/admin.js +82 -3
- package/dist/cli/commands/admin.js.map +1 -1
- package/dist/db/Db.d.ts +17 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +254 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +159 -0
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +187 -2
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/billingSettings.d.ts +55 -0
- package/dist/db/tables/billingSettings.d.ts.map +1 -0
- package/dist/db/tables/billingSettings.js +70 -0
- package/dist/db/tables/billingSettings.js.map +1 -0
- package/dist/db/tables/invitations.d.ts +84 -0
- package/dist/db/tables/invitations.d.ts.map +1 -0
- package/dist/db/tables/invitations.js +165 -0
- package/dist/db/tables/invitations.js.map +1 -0
- package/dist/db/tables/memberships.d.ts +108 -0
- package/dist/db/tables/memberships.d.ts.map +1 -0
- package/dist/db/tables/memberships.js +153 -0
- package/dist/db/tables/memberships.js.map +1 -0
- package/dist/db/tables/organizations.d.ts +48 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +97 -2
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/projects.d.ts +65 -0
- package/dist/db/tables/projects.d.ts.map +1 -0
- package/dist/db/tables/projects.js +75 -0
- package/dist/db/tables/projects.js.map +1 -0
- package/dist/db/tables/requestUsage.d.ts +121 -0
- package/dist/db/tables/requestUsage.d.ts.map +1 -0
- package/dist/db/tables/requestUsage.js +150 -0
- package/dist/db/tables/requestUsage.js.map +1 -0
- package/dist/db/tables/sponsoredTransactions.d.ts +239 -0
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
- package/dist/db/tables/sponsoredTransactions.js +314 -0
- package/dist/db/tables/sponsoredTransactions.js.map +1 -0
- package/dist/db/tables/stripeCustomers.d.ts +81 -0
- package/dist/db/tables/stripeCustomers.d.ts.map +1 -0
- package/dist/db/tables/stripeCustomers.js +120 -0
- package/dist/db/tables/stripeCustomers.js.map +1 -0
- package/dist/db/tables/users.d.ts +48 -0
- package/dist/db/tables/users.d.ts.map +1 -0
- package/dist/db/tables/users.js +65 -0
- package/dist/db/tables/users.js.map +1 -0
- package/dist/handlers/internal/executionError.d.ts.map +1 -1
- package/dist/handlers/internal/executionError.js +2 -0
- package/dist/handlers/internal/executionError.js.map +1 -1
- package/dist/handlers/internal/multisig.d.ts +2 -6
- package/dist/handlers/internal/multisig.d.ts.map +1 -1
- package/dist/handlers/internal/multisig.js +11 -36
- package/dist/handlers/internal/multisig.js.map +1 -1
- package/dist/handlers/internal/sponsorship.d.ts +35 -2
- package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
- package/dist/handlers/internal/sponsorship.js +53 -14
- package/dist/handlers/internal/sponsorship.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts +10 -3
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +14 -6
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/handlers/relay.d.ts +6 -2
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +16 -2
- package/dist/handlers/relay.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/Auth.d.ts +222 -6
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +625 -74
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +4 -1
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/EdgeCache.d.ts +10 -0
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +39 -8
- package/dist/internal/EdgeCache.js.map +1 -1
- package/dist/internal/Fees.d.ts +27 -0
- package/dist/internal/Fees.d.ts.map +1 -0
- package/dist/internal/Fees.js +48 -0
- package/dist/internal/Fees.js.map +1 -0
- package/dist/internal/FundingRoutes.d.ts +183 -0
- package/dist/internal/FundingRoutes.d.ts.map +1 -0
- package/dist/internal/FundingRoutes.js +490 -0
- package/dist/internal/FundingRoutes.js.map +1 -0
- package/dist/internal/Id.d.ts +15 -0
- package/dist/internal/Id.d.ts.map +1 -0
- package/dist/internal/Id.js +22 -0
- package/dist/internal/Id.js.map +1 -0
- package/dist/internal/Log.d.ts +9 -3
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +7 -0
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +10 -20
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +8 -58
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/RateLimit.d.ts +25 -0
- package/dist/internal/RateLimit.d.ts.map +1 -1
- package/dist/internal/RateLimit.js +51 -0
- package/dist/internal/RateLimit.js.map +1 -1
- package/dist/internal/Response.d.ts +1 -1
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Schema.d.ts +8 -0
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +7 -0
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +7 -1
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +16 -2
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Viem.d.ts +84 -0
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Webhooks.d.ts +1 -1
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +3 -3
- package/dist/internal/Webhooks.js.map +1 -1
- package/package.json +33 -6
- package/src/ApiKey.ts +10 -2
- package/src/ApiKeys.test.ts +155 -1
- package/src/ApiKeys.ts +203 -1
- package/src/App.test.ts +64 -75741
- package/src/App.ts +218 -420
- package/src/Client.test-d.ts +657 -15
- package/src/Scope.ts +26 -4
- package/src/Webhooks.ts +2 -2
- package/src/admin/apps/api-keys.test.ts +51 -0
- package/src/admin/apps/api-keys.ts +84 -0
- package/src/admin/apps/scopes.test.ts +11 -1
- package/src/admin/apps/scopes.ts +3 -0
- package/src/admin/apps/verified-tokens.ts +1 -1
- package/src/admin/ui/src/components/Page.tsx +2 -3
- package/src/admin/ui/src/routes/__root.tsx +2 -2
- package/src/admin/ui/src/routes/api-keys.tsx +2 -2
- package/src/admin/ui.generated.ts +13 -13
- package/src/analytics/Analytics.test.ts +527 -0
- package/src/analytics/Analytics.ts +318 -0
- package/src/analytics/tables/requestEvents.ts +523 -0
- package/src/apps/composition.test.ts +66 -0
- package/src/apps/data/App.test.ts +72 -0
- package/src/apps/data/App.ts +330 -0
- package/src/apps/data/index.ts +2 -0
- package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
- package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
- package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
- package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +2 -2
- package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
- package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +3 -3
- package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
- package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
- package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
- package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +1 -1
- package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
- package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
- package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
- package/src/apps/data/routes/funding.test.ts +214 -0
- package/src/apps/data/routes/funding.ts +584 -0
- package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +26 -5
- package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
- package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +3 -3
- package/src/apps/{receipts.ts → data/routes/receipts.ts} +15 -22
- package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +122 -7
- package/src/apps/{rpc.ts → data/routes/rpc.ts} +38 -8
- package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +3 -3
- package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
- package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +2 -2
- package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
- package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +3 -3
- package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
- package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +2 -2
- package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
- package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +3 -3
- package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
- package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +7 -7
- package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +50 -43
- package/src/apps/docs/App.ts +65 -0
- package/src/apps/docs/index.ts +1 -0
- package/src/apps/docs/reference.ts +132 -0
- package/src/apps/index.ts +4 -0
- package/src/apps/mcp.test.ts +206 -0
- package/src/apps/mcp.ts +250 -0
- package/src/apps/metadata.ts +23 -0
- package/src/apps/platform/App.ts +169 -0
- package/src/apps/platform/Billing.test.ts +530 -0
- package/src/apps/platform/Billing.ts +682 -0
- package/src/apps/platform/index.ts +2 -0
- package/src/apps/platform/routes/api-keys.test.ts +493 -0
- package/src/apps/platform/routes/api-keys.ts +543 -0
- package/src/apps/platform/routes/billing.test.ts +1100 -0
- package/src/apps/platform/routes/billing.ts +966 -0
- package/src/apps/platform/routes/invitations.test.ts +409 -0
- package/src/apps/platform/routes/invitations.ts +587 -0
- package/src/apps/platform/routes/me.test.ts +351 -0
- package/src/apps/platform/routes/me.ts +106 -0
- package/src/apps/platform/routes/members.test.ts +195 -0
- package/src/apps/platform/routes/members.ts +313 -0
- package/src/apps/platform/routes/orgs.test.ts +313 -0
- package/src/apps/platform/routes/orgs.ts +365 -0
- package/src/apps/platform/routes/projects.test.ts +181 -0
- package/src/apps/platform/routes/projects.ts +367 -0
- package/src/apps/platform/routes/scopes.test.ts +29 -0
- package/src/apps/platform/routes/scopes.ts +85 -0
- package/src/apps/platform/routes/usage.test.ts +422 -0
- package/src/apps/platform/routes/usage.ts +527 -0
- package/src/apps/relay/App.test.ts +933 -0
- package/src/apps/relay/App.ts +236 -0
- package/src/apps/relay/Sponsorships.test.ts +375 -0
- package/src/apps/relay/Sponsorships.ts +306 -0
- package/src/apps/relay/index.ts +2 -0
- package/src/cli/Cli.test.ts +25 -2
- package/src/cli/Cli.ts +18 -3
- package/src/cli/commands/admin.test.ts +83 -0
- package/src/cli/commands/admin.ts +91 -3
- package/src/db/Db.ts +296 -0
- package/src/db/Schema.ts +241 -2
- package/src/db/tables/billingSettings.test.ts +87 -0
- package/src/db/tables/billingSettings.ts +108 -0
- package/src/db/tables/invitations.ts +198 -0
- package/src/db/tables/memberships.ts +208 -0
- package/src/db/tables/organizations.test.ts +38 -2
- package/src/db/tables/organizations.ts +117 -2
- package/src/db/tables/projects.ts +107 -0
- package/src/db/tables/requestUsage.ts +231 -0
- package/src/db/tables/sponsoredTransactions.test.ts +325 -0
- package/src/db/tables/sponsoredTransactions.ts +464 -0
- package/src/db/tables/stripeCustomers.test.ts +109 -0
- package/src/db/tables/stripeCustomers.ts +162 -0
- package/src/db/tables/users.ts +85 -0
- package/src/handlers/internal/executionError.ts +2 -0
- package/src/handlers/internal/multisig.test.ts +84 -10
- package/src/handlers/internal/multisig.ts +15 -50
- package/src/handlers/internal/sponsorship.ts +106 -20
- package/src/handlers/internal/utils.ts +19 -7
- package/src/handlers/{internal/relay.localnet.test.ts → relay.test.ts} +2 -2
- package/src/handlers/relay.ts +23 -5
- package/src/index.ts +1 -0
- package/src/internal/Auth.test.ts +491 -25
- package/src/internal/Auth.ts +839 -84
- package/src/internal/Cache.ts +5 -1
- package/src/internal/Cursor.test.ts +3 -2
- package/src/internal/EdgeCache.test.ts +27 -4
- package/src/internal/EdgeCache.ts +47 -9
- package/src/internal/Fees.test.ts +32 -0
- package/src/internal/Fees.ts +51 -0
- package/src/internal/FundingRoutes.ts +583 -0
- package/src/internal/Id.test.ts +17 -0
- package/src/internal/Id.ts +24 -0
- package/src/internal/Log.test.ts +2 -1
- package/src/internal/Log.ts +16 -3
- package/src/internal/MetricSink.ts +1 -1
- package/src/internal/OpenApi.ts +12 -60
- package/src/internal/RateLimit.test.ts +84 -0
- package/src/internal/RateLimit.ts +70 -0
- package/src/internal/Response.ts +1 -1
- package/src/internal/Schema.ts +8 -0
- package/src/internal/Store.test.ts +52 -0
- package/src/internal/Store.ts +24 -5
- package/src/internal/Tidx.local.test.ts +1 -1
- package/src/internal/VerifiedTokens.test.ts +1 -1
- package/src/internal/WebhookDestination.test.ts +1 -1
- package/src/internal/Webhooks.test.ts +7 -7
- package/src/internal/Webhooks.ts +4 -4
- package/dist/apps/activities.js.map +0 -1
- package/dist/apps/addresses.js.map +0 -1
- package/dist/apps/balances.d.ts.map +0 -1
- package/dist/apps/balances.js.map +0 -1
- package/dist/apps/blocks.d.ts.map +0 -1
- package/dist/apps/blocks.js.map +0 -1
- package/dist/apps/coingecko.d.ts.map +0 -1
- package/dist/apps/coingecko.js.map +0 -1
- package/dist/apps/exchanges.d.ts.map +0 -1
- package/dist/apps/exchanges.js.map +0 -1
- package/dist/apps/fee-amm.d.ts.map +0 -1
- package/dist/apps/fee-amm.js.map +0 -1
- package/dist/apps/indexer.d.ts.map +0 -1
- package/dist/apps/indexer.js.map +0 -1
- package/dist/apps/receipts.d.ts.map +0 -1
- package/dist/apps/receipts.js.map +0 -1
- package/dist/apps/rpc.d.ts.map +0 -1
- package/dist/apps/rpc.js.map +0 -1
- package/dist/apps/tokenlist.d.ts.map +0 -1
- package/dist/apps/tokenlist.js.map +0 -1
- package/dist/apps/tokens.d.ts.map +0 -1
- package/dist/apps/tokens.js.map +0 -1
- package/dist/apps/transactions.d.ts.map +0 -1
- package/dist/apps/transactions.js.map +0 -1
- package/dist/apps/transfers.d.ts.map +0 -1
- package/dist/apps/transfers.js.map +0 -1
- package/dist/apps/verified-tokens.d.ts.map +0 -1
- package/dist/apps/verified-tokens.js.map +0 -1
- package/dist/apps/webhooks.js.map +0 -1
- package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
- package/dist/internal/OpenApi.fonts.js.map +0 -1
- package/dist/internal/OpenApi.logo.d.ts.map +0 -1
- package/dist/internal/OpenApi.logo.js.map +0 -1
- package/src/handlers/internal/multisig.localnet.test.ts +0 -146
- /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
- /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
|
@@ -5,14 +5,14 @@ import { type Address as ViemAddress, formatUnits } from 'viem'
|
|
|
5
5
|
import { Addresses, Tick } from 'viem/tempo'
|
|
6
6
|
import * as z from 'zod/mini'
|
|
7
7
|
|
|
8
|
-
import type * as App from '
|
|
9
|
-
import * as Auth from '
|
|
10
|
-
import * as Cache from '
|
|
11
|
-
import * as OpenApi from '
|
|
12
|
-
import * as Response from '
|
|
13
|
-
import * as Schema from '
|
|
14
|
-
import * as Timing from '
|
|
15
|
-
import * as Value from '
|
|
8
|
+
import type * as App from '../../../App.js'
|
|
9
|
+
import * as Auth from '../../../internal/Auth.js'
|
|
10
|
+
import * as Cache from '../../../internal/Cache.js'
|
|
11
|
+
import * as OpenApi from '../../../internal/OpenApi.js'
|
|
12
|
+
import * as Response from '../../../internal/Response.js'
|
|
13
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
14
|
+
import * as Timing from '../../../internal/Timing.js'
|
|
15
|
+
import * as Value from '../../../internal/Value.js'
|
|
16
16
|
import { resolveBookQuotes, resolveBookReserves, resolveOrderStates } from './exchanges.js'
|
|
17
17
|
import { getTokenMetadata } from './tokens.js'
|
|
18
18
|
|
|
@@ -484,9 +484,9 @@ const guardChainId = createMiddleware<App.Environment>(async (c, next) => {
|
|
|
484
484
|
|
|
485
485
|
export function coingecko() {
|
|
486
486
|
return new Hono<App.Environment>()
|
|
487
|
-
.use('/:chainId/*', guardChainId)
|
|
487
|
+
.use('/gecko/:chainId/*', guardChainId)
|
|
488
488
|
.get(
|
|
489
|
-
'/:chainId/latest-block',
|
|
489
|
+
'/gecko/:chainId/latest-block',
|
|
490
490
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
491
491
|
OpenApi.validate('param', schema.ChainIdParam, {
|
|
492
492
|
code: 'chain_id_invalid',
|
|
@@ -527,7 +527,7 @@ export function coingecko() {
|
|
|
527
527
|
},
|
|
528
528
|
)
|
|
529
529
|
.get(
|
|
530
|
-
'/:chainId/assets/:address',
|
|
530
|
+
'/gecko/:chainId/assets/:address',
|
|
531
531
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
532
532
|
OpenApi.validate('param', schema.AssetParams, {
|
|
533
533
|
code: 'address_invalid',
|
|
@@ -578,7 +578,7 @@ export function coingecko() {
|
|
|
578
578
|
},
|
|
579
579
|
)
|
|
580
580
|
.get(
|
|
581
|
-
'/:chainId/pairs',
|
|
581
|
+
'/gecko/:chainId/pairs',
|
|
582
582
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
583
583
|
OpenApi.validate('param', schema.ChainIdParam, {
|
|
584
584
|
code: 'chain_id_invalid',
|
|
@@ -649,7 +649,7 @@ export function coingecko() {
|
|
|
649
649
|
},
|
|
650
650
|
)
|
|
651
651
|
.get(
|
|
652
|
-
'/:chainId/pairs/:pairId',
|
|
652
|
+
'/gecko/:chainId/pairs/:pairId',
|
|
653
653
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
654
654
|
OpenApi.validate('param', schema.PairParams, {
|
|
655
655
|
code: 'pair_id_invalid',
|
|
@@ -711,7 +711,7 @@ export function coingecko() {
|
|
|
711
711
|
},
|
|
712
712
|
)
|
|
713
713
|
.get(
|
|
714
|
-
'/:chainId/events',
|
|
714
|
+
'/gecko/:chainId/events',
|
|
715
715
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
716
716
|
OpenApi.validate('param', schema.ChainIdParam, {
|
|
717
717
|
code: 'chain_id_invalid',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as z from 'zod/mini'
|
|
2
2
|
import { Schema } from 'tapimo'
|
|
3
3
|
|
|
4
|
-
import * as TestApp from '
|
|
4
|
+
import * as TestApp from '../../../../test/App.js'
|
|
5
5
|
import * as Exchanges from './exchanges.js'
|
|
6
6
|
|
|
7
7
|
type OrdersResponse = z.output<typeof Exchanges.schema.getOrders.Response>
|
|
@@ -10,18 +10,18 @@ import {
|
|
|
10
10
|
import { Actions, Addresses, Tick } from 'viem/tempo'
|
|
11
11
|
import * as z from 'zod/mini'
|
|
12
12
|
|
|
13
|
-
import type * as App from '
|
|
14
|
-
import * as Auth from '
|
|
15
|
-
import * as Cache from '
|
|
16
|
-
import * as Cursor from '
|
|
17
|
-
import * as OpenApi from '
|
|
18
|
-
import * as Response from '
|
|
19
|
-
import * as Schema from '
|
|
20
|
-
import * as Store from '
|
|
21
|
-
import * as Timing from '
|
|
22
|
-
import * as Ttl from '
|
|
23
|
-
import * as Value from '
|
|
24
|
-
import * as VerifiedTokens from '
|
|
13
|
+
import type * as App from '../../../App.js'
|
|
14
|
+
import * as Auth from '../../../internal/Auth.js'
|
|
15
|
+
import * as Cache from '../../../internal/Cache.js'
|
|
16
|
+
import * as Cursor from '../../../internal/Cursor.js'
|
|
17
|
+
import * as OpenApi from '../../../internal/OpenApi.js'
|
|
18
|
+
import * as Response from '../../../internal/Response.js'
|
|
19
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
20
|
+
import * as Store from '../../../internal/Store.js'
|
|
21
|
+
import * as Timing from '../../../internal/Timing.js'
|
|
22
|
+
import * as Ttl from '../../../internal/Ttl.js'
|
|
23
|
+
import * as Value from '../../../internal/Value.js'
|
|
24
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
25
25
|
import * as Tokens from './tokens.js'
|
|
26
26
|
|
|
27
27
|
// Stablecoin DEX precompile. Pair lifecycle is announced by `PairCreated` from
|
|
@@ -1312,7 +1312,7 @@ export namespace schema {
|
|
|
1312
1312
|
export function exchanges() {
|
|
1313
1313
|
return new Hono<App.Environment>()
|
|
1314
1314
|
.get(
|
|
1315
|
-
'/swaps',
|
|
1315
|
+
'/v1/exchange/swaps',
|
|
1316
1316
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
1317
1317
|
OpenApi.validate('query', schema.getSwaps.Query, {
|
|
1318
1318
|
code: 'query_invalid',
|
|
@@ -1422,7 +1422,7 @@ export function exchanges() {
|
|
|
1422
1422
|
},
|
|
1423
1423
|
)
|
|
1424
1424
|
.get(
|
|
1425
|
-
'/pairs',
|
|
1425
|
+
'/v1/exchange/pairs',
|
|
1426
1426
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
1427
1427
|
OpenApi.validate('query', schema.getPairs.Query, {
|
|
1428
1428
|
code: 'query_invalid',
|
|
@@ -1529,7 +1529,7 @@ export function exchanges() {
|
|
|
1529
1529
|
.get(
|
|
1530
1530
|
// Single trading pair detail. The base address alone identifies the
|
|
1531
1531
|
// pair (its quote is intrinsic to the base token on-chain).
|
|
1532
|
-
'/pairs/:base',
|
|
1532
|
+
'/v1/exchange/pairs/:base',
|
|
1533
1533
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
1534
1534
|
OpenApi.validate('param', schema.getPair.Params, {
|
|
1535
1535
|
code: 'pair_invalid',
|
|
@@ -1622,7 +1622,7 @@ export function exchanges() {
|
|
|
1622
1622
|
)
|
|
1623
1623
|
.get(
|
|
1624
1624
|
// Resting-order feed, optionally scoped to one pair via `base`.
|
|
1625
|
-
'/orders',
|
|
1625
|
+
'/v1/exchange/orders',
|
|
1626
1626
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
1627
1627
|
OpenApi.validate('query', schema.getOrders.Query, {
|
|
1628
1628
|
code: 'query_invalid',
|
|
@@ -1747,7 +1747,7 @@ export function exchanges() {
|
|
|
1747
1747
|
.get(
|
|
1748
1748
|
// Single-order detail. The path-param schema rejects non-decimal
|
|
1749
1749
|
// `orderId` values, surfacing the canonical `order_invalid` error.
|
|
1750
|
-
'/orders/:orderId',
|
|
1750
|
+
'/v1/exchange/orders/:orderId',
|
|
1751
1751
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
1752
1752
|
OpenApi.validate('param', schema.getOrder.Params, {
|
|
1753
1753
|
code: 'order_invalid',
|
|
@@ -1856,7 +1856,7 @@ export function exchanges() {
|
|
|
1856
1856
|
)
|
|
1857
1857
|
.get(
|
|
1858
1858
|
// Paginated fill history for a single order.
|
|
1859
|
-
'/orders/:orderId/fills',
|
|
1859
|
+
'/v1/exchange/orders/:orderId/fills',
|
|
1860
1860
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
1861
1861
|
OpenApi.validate('param', schema.getOrderFills.Params, {
|
|
1862
1862
|
code: 'order_invalid',
|
|
@@ -1945,7 +1945,7 @@ export function exchanges() {
|
|
|
1945
1945
|
.get(
|
|
1946
1946
|
// OHLC (candlestick) aggregations for a single pair, addressed by its
|
|
1947
1947
|
// base token.
|
|
1948
|
-
'/pairs/:base/ohlc',
|
|
1948
|
+
'/v1/exchange/pairs/:base/ohlc',
|
|
1949
1949
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
1950
1950
|
OpenApi.validate('param', schema.getPairOhlc.Params, {
|
|
1951
1951
|
code: 'pair_invalid',
|
|
@@ -2053,7 +2053,7 @@ export function exchanges() {
|
|
|
2053
2053
|
.get(
|
|
2054
2054
|
// Orderbook depth (cumulative size per tick) for a single pair,
|
|
2055
2055
|
// addressed by its base token.
|
|
2056
|
-
'/pairs/:base/depth',
|
|
2056
|
+
'/v1/exchange/pairs/:base/depth',
|
|
2057
2057
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
2058
2058
|
OpenApi.validate('param', schema.getPairDepth.Params, {
|
|
2059
2059
|
code: 'pair_invalid',
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Abis, Addresses } from 'viem/tempo'
|
|
2
2
|
|
|
3
|
-
import * as TestApp from '
|
|
4
|
-
import * as Runtime from '
|
|
5
|
-
import * as TestViem from '
|
|
3
|
+
import * as TestApp from '../../../../test/App.js'
|
|
4
|
+
import * as Runtime from '../../../../test/runtime.js'
|
|
5
|
+
import * as TestViem from '../../../../test/Viem.js'
|
|
6
6
|
import * as FeeAmm from './fee-amm.js'
|
|
7
7
|
|
|
8
8
|
/** Validator-side token with live fee-AMM activity on Tempo Moderato. */
|
|
@@ -3,18 +3,18 @@ import { AbiEvent, AbiParameters, Hash, type Hex, Value as core_Value } from 'ox
|
|
|
3
3
|
import { Abis, Addresses } from 'viem/tempo'
|
|
4
4
|
import * as z from 'zod/mini'
|
|
5
5
|
|
|
6
|
-
import type * as App from '
|
|
7
|
-
import * as Auth from '
|
|
8
|
-
import * as Cache from '
|
|
9
|
-
import * as Cursor from '
|
|
10
|
-
import * as OpenApi from '
|
|
11
|
-
import * as Response from '
|
|
12
|
-
import * as Schema from '
|
|
13
|
-
import * as Store from '
|
|
14
|
-
import * as Timing from '
|
|
15
|
-
import * as Ttl from '
|
|
16
|
-
import * as Value from '
|
|
17
|
-
import * as VerifiedTokens from '
|
|
6
|
+
import type * as App from '../../../App.js'
|
|
7
|
+
import * as Auth from '../../../internal/Auth.js'
|
|
8
|
+
import * as Cache from '../../../internal/Cache.js'
|
|
9
|
+
import * as Cursor from '../../../internal/Cursor.js'
|
|
10
|
+
import * as OpenApi from '../../../internal/OpenApi.js'
|
|
11
|
+
import * as Response from '../../../internal/Response.js'
|
|
12
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
13
|
+
import * as Store from '../../../internal/Store.js'
|
|
14
|
+
import * as Timing from '../../../internal/Timing.js'
|
|
15
|
+
import * as Ttl from '../../../internal/Ttl.js'
|
|
16
|
+
import * as Value from '../../../internal/Value.js'
|
|
17
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
18
18
|
import * as Tokens from './tokens.js'
|
|
19
19
|
|
|
20
20
|
// The protocol Fee AMM lives at the reserved FeeManager address. Pools are
|
|
@@ -308,7 +308,7 @@ export namespace schema {
|
|
|
308
308
|
export function feeAmm() {
|
|
309
309
|
return new Hono<App.Environment>()
|
|
310
310
|
.get(
|
|
311
|
-
'/pools',
|
|
311
|
+
'/v1/fee-amm/pools',
|
|
312
312
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
313
313
|
OpenApi.validate('query', schema.getFeeAmmPools.Query, {
|
|
314
314
|
code: 'query_invalid',
|
|
@@ -420,7 +420,7 @@ export function feeAmm() {
|
|
|
420
420
|
},
|
|
421
421
|
)
|
|
422
422
|
.get(
|
|
423
|
-
'/mints',
|
|
423
|
+
'/v1/fee-amm/mints',
|
|
424
424
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
425
425
|
OpenApi.validate('query', schema.getFeeAmmMints.Query, {
|
|
426
426
|
code: 'query_invalid',
|
|
@@ -520,8 +520,8 @@ export function feeAmm() {
|
|
|
520
520
|
* Discovers fee pools by aggregating the FeeManager's `Mint` logs into one
|
|
521
521
|
* row per `(userToken, validatorToken)` pair, paginated and ordered by mint
|
|
522
522
|
* count (most active first), so the real fee pools (thousands to millions of
|
|
523
|
-
* mints) lead the head pages and the
|
|
524
|
-
*
|
|
523
|
+
* mints) lead the head pages and the spam pairs (mint count 1) sink to the
|
|
524
|
+
* tail.
|
|
525
525
|
*
|
|
526
526
|
* Keyset pagination on `(mint_count, topic2, topic3)`: `mint_count` ranks the
|
|
527
527
|
* page (mutable — it grows as pools mint — so this is best-effort across mint
|
|
@@ -568,7 +568,7 @@ function listPools(c: Context<App.Environment>, options: listPools.Options) {
|
|
|
568
568
|
|
|
569
569
|
// Raw-`logs` ClickHouse aggregate (dynamic query, hence the cast):
|
|
570
570
|
// ordering is by mint count so the head pages surface the real fee
|
|
571
|
-
// pools and the
|
|
571
|
+
// pools and the single-mint spam pairs sink to the tail. Fetch one extra
|
|
572
572
|
// row to detect `hasMore` without a separate count query.
|
|
573
573
|
const result = await tidx.fetch({
|
|
574
574
|
chainId,
|
|
@@ -669,7 +669,7 @@ declare namespace listPools {
|
|
|
669
669
|
* Addresses are lowercased to match the indexer's stored casing.
|
|
670
670
|
*
|
|
671
671
|
* The set is intentionally gated to the verified list rather than every pooled
|
|
672
|
-
* token: anyone can mint a
|
|
672
|
+
* token: anyone can mint a single-mint spam pool, so the raw set of pool
|
|
673
673
|
* `userToken`s is unbounded (tens of thousands on busy chains) and those
|
|
674
674
|
* liquidity-less pools can't actually settle fees. Restricting to verified
|
|
675
675
|
* tokens keeps the set small (a handful of USD stablecoins), bounds the scan
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { Schema } from 'tapimo'
|
|
2
|
+
|
|
3
|
+
import * as TestApp from '../../../../test/App.js'
|
|
4
|
+
import * as Funding from './funding.js'
|
|
5
|
+
|
|
6
|
+
describe('GET /funding/routes', () => {
|
|
7
|
+
test('returns static inventory-backed route candidates', async () => {
|
|
8
|
+
const response = await TestApp.client().v1.funding.routes.$get(
|
|
9
|
+
{
|
|
10
|
+
query: {
|
|
11
|
+
destinationToken: 'USDC.e',
|
|
12
|
+
sourceAmount: '1000000',
|
|
13
|
+
sourceChain: 'base',
|
|
14
|
+
sourceToken: 'USDC',
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
TestApp.auth,
|
|
18
|
+
)
|
|
19
|
+
expect(response.status).toBe(200)
|
|
20
|
+
const body = await TestApp.json(response, Funding.schema.listFundingRoutes.Response)
|
|
21
|
+
|
|
22
|
+
expect(body.data.map((route) => route.provider.id)).toEqual([
|
|
23
|
+
'across',
|
|
24
|
+
'relay',
|
|
25
|
+
'bridge',
|
|
26
|
+
'bungee',
|
|
27
|
+
])
|
|
28
|
+
expect(body.data[0]).toMatchObject({
|
|
29
|
+
destinationChain: { id: 'eip155:4217', name: 'Tempo' },
|
|
30
|
+
destinationToken: { symbol: 'USDC.e' },
|
|
31
|
+
id: 'base-usdc-tempo-usdce-across',
|
|
32
|
+
quality: { liquiditySource: 'staticInventory', tier: 'unknown' },
|
|
33
|
+
sourceAmount: { amount: '1000000', formatted: '1' },
|
|
34
|
+
sourceChain: { id: 'eip155:8453', name: 'Base' },
|
|
35
|
+
sourceToken: { symbol: 'USDC' },
|
|
36
|
+
status: 'unknown',
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
test('converts decimal source amounts after resolving the source token', async () => {
|
|
41
|
+
const response = await TestApp.client().v1.funding.routes.$get(
|
|
42
|
+
{
|
|
43
|
+
query: {
|
|
44
|
+
provider: 'relay',
|
|
45
|
+
sourceAmount: '1.25',
|
|
46
|
+
sourceAmountUnits: 'decimal',
|
|
47
|
+
sourceChain: 'eip155:8453',
|
|
48
|
+
sourceToken: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
TestApp.auth,
|
|
52
|
+
)
|
|
53
|
+
expect(response.status).toBe(200)
|
|
54
|
+
const body = await TestApp.json(response, Funding.schema.listFundingRoutes.Response)
|
|
55
|
+
|
|
56
|
+
expect(body.data).toHaveLength(1)
|
|
57
|
+
expect(body.data[0]?.sourceAmount).toMatchObject({
|
|
58
|
+
amount: '1250000',
|
|
59
|
+
formatted: '1.25',
|
|
60
|
+
})
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
test('does not case-fold non-EVM source token identifiers', async () => {
|
|
64
|
+
const solanaMint = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'
|
|
65
|
+
const exactResponse = await TestApp.client().v1.funding.routes.$get(
|
|
66
|
+
{
|
|
67
|
+
query: {
|
|
68
|
+
sourceAmount: '1000000',
|
|
69
|
+
sourceChain: 'solana',
|
|
70
|
+
sourceToken: solanaMint,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
TestApp.auth,
|
|
74
|
+
)
|
|
75
|
+
expect(exactResponse.status).toBe(200)
|
|
76
|
+
const exactBody = await TestApp.json(exactResponse, Funding.schema.listFundingRoutes.Response)
|
|
77
|
+
expect(exactBody.data.map((route) => route.provider.id)).toEqual(['bridge'])
|
|
78
|
+
|
|
79
|
+
const lowercasedSolanaResponse = await TestApp.client().v1.funding.routes.$get(
|
|
80
|
+
{
|
|
81
|
+
query: {
|
|
82
|
+
sourceAmount: '1000000',
|
|
83
|
+
sourceChain: 'solana',
|
|
84
|
+
sourceToken: solanaMint.toLowerCase(),
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
TestApp.auth,
|
|
88
|
+
)
|
|
89
|
+
expect(lowercasedSolanaResponse.status).toBe(200)
|
|
90
|
+
const lowercasedSolanaBody = await TestApp.json(
|
|
91
|
+
lowercasedSolanaResponse,
|
|
92
|
+
Funding.schema.listFundingRoutes.Response,
|
|
93
|
+
)
|
|
94
|
+
expect(lowercasedSolanaBody.data).toEqual([])
|
|
95
|
+
|
|
96
|
+
const lowercasedTronResponse = await TestApp.client().v1.funding.routes.$get(
|
|
97
|
+
{
|
|
98
|
+
query: {
|
|
99
|
+
sourceAmount: '1000000',
|
|
100
|
+
sourceChain: 'tron',
|
|
101
|
+
sourceToken: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'.toLowerCase(),
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
TestApp.auth,
|
|
105
|
+
)
|
|
106
|
+
expect(lowercasedTronResponse.status).toBe(200)
|
|
107
|
+
const lowercasedTronBody = await TestApp.json(
|
|
108
|
+
lowercasedTronResponse,
|
|
109
|
+
Funding.schema.listFundingRoutes.Response,
|
|
110
|
+
)
|
|
111
|
+
expect(lowercasedTronBody.data).toEqual([])
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
test('returns no candidates for an unsupported source token', async () => {
|
|
115
|
+
const response = await TestApp.client().v1.funding.routes.$get(
|
|
116
|
+
{
|
|
117
|
+
query: {
|
|
118
|
+
sourceAmount: '1.234567890',
|
|
119
|
+
sourceAmountUnits: 'decimal',
|
|
120
|
+
sourceChain: 'base',
|
|
121
|
+
sourceToken: 'DAI',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
TestApp.auth,
|
|
125
|
+
)
|
|
126
|
+
expect(response.status).toBe(200)
|
|
127
|
+
const body = await TestApp.json(response, Funding.schema.listFundingRoutes.Response)
|
|
128
|
+
expect(body.data).toEqual([])
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
test('rejects amounts that cannot be represented in source decimals', async () => {
|
|
132
|
+
const response = await TestApp.client().v1.funding.routes.$get(
|
|
133
|
+
{
|
|
134
|
+
query: {
|
|
135
|
+
sourceAmount: '1.0000001',
|
|
136
|
+
sourceAmountUnits: 'decimal',
|
|
137
|
+
sourceChain: 'base',
|
|
138
|
+
sourceToken: 'USDC',
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
TestApp.auth,
|
|
142
|
+
)
|
|
143
|
+
expect(response.status).toBe(400)
|
|
144
|
+
const body = await TestApp.json(response, Schema.ErrorResponse)
|
|
145
|
+
expect(body.error.code).toBe('query_invalid')
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
test('rejects unimplemented include parameters', async () => {
|
|
149
|
+
const response = await TestApp.create().request(
|
|
150
|
+
'/v1/funding/routes?sourceChain=base&sourceToken=USDC&sourceAmount=1000000&include=quotes',
|
|
151
|
+
{ headers: TestApp.auth.headers },
|
|
152
|
+
)
|
|
153
|
+
expect(response.status).toBe(400)
|
|
154
|
+
const body = await TestApp.json(response, Schema.ErrorResponse)
|
|
155
|
+
expect(body.error.code).toBe('query_invalid')
|
|
156
|
+
})
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
describe('GET /funding/chains', () => {
|
|
160
|
+
test('lists source chain and stablecoin inventory', async () => {
|
|
161
|
+
const response = await TestApp.client().v1.funding.chains.$get(undefined, TestApp.auth)
|
|
162
|
+
expect(response.status).toBe(200)
|
|
163
|
+
const body = await TestApp.json(response, Funding.schema.listFundingChains.Response)
|
|
164
|
+
|
|
165
|
+
expect(body.data.map((chain) => chain.id)).toEqual([
|
|
166
|
+
'eip155:1',
|
|
167
|
+
'eip155:8453',
|
|
168
|
+
'eip155:56',
|
|
169
|
+
'solana:mainnet',
|
|
170
|
+
'tron:mainnet',
|
|
171
|
+
])
|
|
172
|
+
expect(body.data.find((chain) => chain.id === 'solana:mainnet')?.tokens).toEqual(
|
|
173
|
+
expect.arrayContaining([expect.objectContaining({ symbol: 'USDC', standard: 'SPL' })]),
|
|
174
|
+
)
|
|
175
|
+
})
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
describe('GET /providers', () => {
|
|
179
|
+
test('lists providers filtered by capability', async () => {
|
|
180
|
+
const response = await TestApp.client().v1.providers.$get(
|
|
181
|
+
{ query: { capability: 'fundingRoutes' } },
|
|
182
|
+
TestApp.auth,
|
|
183
|
+
)
|
|
184
|
+
expect(response.status).toBe(200)
|
|
185
|
+
const body = await TestApp.json(response, Funding.schema.listProviders.Response)
|
|
186
|
+
|
|
187
|
+
expect(body.data.map((provider) => provider.id)).toEqual([
|
|
188
|
+
'across',
|
|
189
|
+
'relay',
|
|
190
|
+
'bridge',
|
|
191
|
+
'bungee',
|
|
192
|
+
'lifi',
|
|
193
|
+
])
|
|
194
|
+
expect(body.data.every((provider) => provider.capabilities.includes('fundingRoutes'))).toBe(
|
|
195
|
+
true,
|
|
196
|
+
)
|
|
197
|
+
expect(body.data.map((provider) => provider.status)).toEqual([
|
|
198
|
+
'inventoryOnly',
|
|
199
|
+
'inventoryOnly',
|
|
200
|
+
'inventoryOnly',
|
|
201
|
+
'inventoryOnly',
|
|
202
|
+
'planned',
|
|
203
|
+
])
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
test('rejects unsupported provider capabilities', async () => {
|
|
207
|
+
const response = await TestApp.create().request('/v1/providers?capability=settlement', {
|
|
208
|
+
headers: TestApp.auth.headers,
|
|
209
|
+
})
|
|
210
|
+
expect(response.status).toBe(400)
|
|
211
|
+
const body = await TestApp.json(response, Schema.ErrorResponse)
|
|
212
|
+
expect(body.error.code).toBe('query_invalid')
|
|
213
|
+
})
|
|
214
|
+
})
|