tapimo 0.0.2 → 0.2.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 +38 -16
- package/dist/ApiKey.d.ts +14 -11
- package/dist/ApiKey.d.ts.map +1 -1
- package/dist/ApiKey.js +11 -12
- package/dist/ApiKey.js.map +1 -1
- package/dist/ApiKeys.d.ts +207 -0
- package/dist/ApiKeys.d.ts.map +1 -0
- package/dist/ApiKeys.js +282 -0
- package/dist/ApiKeys.js.map +1 -0
- package/dist/App.d.ts +6771 -3819
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +145 -317
- package/dist/App.js.map +1 -1
- package/dist/Handler.d.ts +86 -0
- package/dist/Handler.d.ts.map +1 -0
- package/dist/Handler.js +83 -0
- package/dist/Handler.js.map +1 -0
- package/dist/Scope.d.ts +14 -4
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +16 -4
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +5 -7
- package/dist/Webhooks.d.ts.map +1 -1
- package/dist/Webhooks.js +11 -4
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/Access.d.ts +1 -3
- package/dist/admin/Access.d.ts.map +1 -1
- package/dist/admin/Access.js +1 -3
- package/dist/admin/Access.js.map +1 -1
- package/dist/admin/App.d.ts +167 -205
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +2 -4
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +105 -5
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +75 -9
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/scopes.d.ts +6 -0
- package/dist/admin/apps/scopes.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +35 -149
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.js +18 -39
- 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 +1 -1
- package/dist/apps/data/App.d.ts +19176 -0
- package/dist/apps/data/App.d.ts.map +1 -0
- package/dist/apps/data/App.js +236 -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} +49 -49
- 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} +183 -183
- 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} +460 -460
- 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} +94 -94
- 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/{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} +6 -6
- package/dist/apps/data/routes/receipts.d.ts.map +1 -0
- package/dist/apps/{receipts.js → data/routes/receipts.js} +12 -12
- package/dist/apps/data/routes/receipts.js.map +1 -0
- package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +4 -4
- package/dist/apps/data/routes/rpc.d.ts.map +1 -0
- package/dist/apps/{rpc.js → data/routes/rpc.js} +6 -6
- package/dist/apps/data/routes/rpc.js.map +1 -0
- package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +4 -4
- 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} +11 -11
- 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} +288 -288
- 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} +35 -35
- 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} +42 -42
- 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} +66 -63
- package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
- package/dist/apps/{webhooks.js → data/routes/webhooks.js} +67 -59
- package/dist/apps/data/routes/webhooks.js.map +1 -0
- package/dist/apps/docs/App.d.ts +27 -0
- package/dist/apps/docs/App.d.ts.map +1 -0
- package/dist/apps/docs/App.js +122 -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/index.d.ts +4 -0
- package/dist/apps/index.d.ts.map +1 -0
- package/dist/apps/index.js +4 -0
- package/dist/apps/index.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 +2985 -0
- package/dist/apps/platform/App.d.ts.map +1 -0
- package/dist/apps/platform/App.js +74 -0
- package/dist/apps/platform/App.js.map +1 -0
- package/dist/apps/platform/index.d.ts +2 -0
- package/dist/apps/platform/index.d.ts.map +1 -0
- package/dist/apps/platform/index.js +2 -0
- package/dist/apps/platform/index.js.map +1 -0
- package/dist/apps/platform/routes/api-keys.d.ts +681 -0
- package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
- package/dist/apps/platform/routes/api-keys.js +328 -0
- package/dist/apps/platform/routes/api-keys.js.map +1 -0
- package/dist/apps/platform/routes/invitations.d.ts +733 -0
- package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
- package/dist/apps/platform/routes/invitations.js +413 -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 +582 -0
- package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
- package/dist/apps/platform/routes/orgs.js +265 -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/relay/App.d.ts +41 -0
- package/dist/apps/relay/App.d.ts.map +1 -0
- package/dist/apps/relay/App.js +103 -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 +193 -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.d.ts → cli/Cli.d.ts} +13 -2
- package/dist/cli/Cli.d.ts.map +1 -0
- package/dist/cli/Cli.js +19 -0
- package/dist/cli/Cli.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +4 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +60 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cloudflare.d.ts +7 -0
- package/dist/cloudflare.d.ts.map +1 -1
- package/dist/cloudflare.js +9 -0
- package/dist/cloudflare.js.map +1 -1
- package/dist/db/Db.d.ts +113 -0
- package/dist/db/Db.d.ts.map +1 -0
- package/dist/db/Db.js +402 -0
- package/dist/db/Db.js.map +1 -0
- package/dist/db/Schema.d.ts +168 -0
- package/dist/db/Schema.d.ts.map +1 -0
- package/dist/db/Schema.js +229 -0
- package/dist/db/Schema.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 +123 -0
- package/dist/db/tables/organizations.d.ts.map +1 -0
- package/dist/db/tables/organizations.js +170 -0
- package/dist/db/tables/organizations.js.map +1 -0
- 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/sponsoredTransactions.d.ts +120 -0
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
- package/dist/db/tables/sponsoredTransactions.js +161 -0
- package/dist/db/tables/sponsoredTransactions.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/db/tables/verifiedTokens.d.ts +53 -0
- package/dist/db/tables/verifiedTokens.d.ts.map +1 -0
- package/dist/db/tables/verifiedTokens.js +74 -0
- package/dist/db/tables/verifiedTokens.js.map +1 -0
- package/dist/db/tables/webhookDeliveries.d.ts +71 -0
- package/dist/db/tables/webhookDeliveries.d.ts.map +1 -0
- package/dist/db/tables/webhookDeliveries.js +119 -0
- package/dist/db/tables/webhookDeliveries.js.map +1 -0
- package/dist/db/tables/webhookSubscriptions.d.ts +158 -0
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -0
- package/dist/db/tables/webhookSubscriptions.js +272 -0
- package/dist/db/tables/webhookSubscriptions.js.map +1 -0
- package/dist/handlers/internal/executionError.d.ts +25 -0
- package/dist/handlers/internal/executionError.d.ts.map +1 -0
- package/dist/handlers/internal/executionError.js +186 -0
- package/dist/handlers/internal/executionError.js.map +1 -0
- package/dist/handlers/internal/multisig.d.ts +233 -0
- package/dist/handlers/internal/multisig.d.ts.map +1 -0
- package/dist/handlers/internal/multisig.js +542 -0
- package/dist/handlers/internal/multisig.js.map +1 -0
- package/dist/handlers/internal/requestListener.d.ts +124 -0
- package/dist/handlers/internal/requestListener.d.ts.map +1 -0
- package/dist/handlers/internal/requestListener.js +173 -0
- package/dist/handlers/internal/requestListener.js.map +1 -0
- package/dist/handlers/internal/sponsorship.d.ts +113 -0
- package/dist/handlers/internal/sponsorship.d.ts.map +1 -0
- package/dist/handlers/internal/sponsorship.js +128 -0
- package/dist/handlers/internal/sponsorship.js.map +1 -0
- package/dist/handlers/internal/types.d.ts +284 -0
- package/dist/handlers/internal/types.d.ts.map +1 -0
- package/dist/handlers/internal/types.js +2 -0
- package/dist/handlers/internal/types.js.map +1 -0
- package/dist/handlers/internal/utils.d.ts +34 -0
- package/dist/handlers/internal/utils.d.ts.map +1 -0
- package/dist/handlers/internal/utils.js +131 -0
- package/dist/handlers/internal/utils.js.map +1 -0
- package/dist/handlers/relay.d.ts +123 -0
- package/dist/handlers/relay.d.ts.map +1 -0
- package/dist/handlers/relay.js +1278 -0
- package/dist/handlers/relay.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/internal/Auth.d.ts +224 -16
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +572 -33
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Log.d.ts +7 -3
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +4 -0
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +0 -19
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +0 -57
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/RpcSchema.d.ts +10 -0
- package/dist/internal/RpcSchema.d.ts.map +1 -0
- package/dist/internal/RpcSchema.js +2 -0
- package/dist/internal/RpcSchema.js.map +1 -0
- package/dist/internal/Store.d.ts +49 -4
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +81 -5
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/VerifiedTokens.d.ts +15 -34
- package/dist/internal/VerifiedTokens.d.ts.map +1 -1
- package/dist/internal/VerifiedTokens.js +115 -159
- package/dist/internal/VerifiedTokens.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 +50 -36
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +92 -205
- package/dist/internal/Webhooks.js.map +1 -1
- package/package.json +37 -6
- package/src/ApiKey.test.ts +3 -3
- package/src/ApiKey.ts +11 -12
- package/src/ApiKeys.test.ts +278 -0
- package/src/ApiKeys.ts +358 -0
- package/src/App.test-d.ts +1 -1
- package/src/App.test.ts +40508 -19083
- package/src/App.ts +239 -416
- package/src/Client.test-d.ts +307 -16
- package/src/Handler.ts +154 -0
- package/src/Scope.ts +17 -4
- package/src/Webhooks.test.ts +8 -7
- package/src/Webhooks.ts +13 -7
- package/src/admin/Access.ts +1 -3
- package/src/admin/App.ts +19 -24
- package/src/admin/apps/api-keys.test.ts +70 -18
- package/src/admin/apps/api-keys.ts +92 -9
- package/src/admin/apps/scopes.test.ts +8 -0
- package/src/admin/apps/verified-tokens.test.ts +3 -30
- package/src/admin/apps/verified-tokens.ts +18 -37
- package/src/admin/ui.generated.ts +1 -1
- package/src/apps/composition.test.ts +66 -0
- package/src/apps/data/App.ts +295 -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} +6 -5
- package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
- package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +4 -4
- 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} +2 -2
- 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/{indexer.test.ts → data/routes/indexer.test.ts} +27 -6
- package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
- package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +4 -4
- package/src/apps/{receipts.ts → data/routes/receipts.ts} +13 -13
- package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +142 -13
- package/src/apps/{rpc.ts → data/routes/rpc.ts} +7 -7
- package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +8 -10
- package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
- package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +6 -5
- package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
- package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +4 -4
- package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
- package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +3 -3
- package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
- package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +27 -15
- package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
- package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +137 -150
- package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +83 -81
- package/src/apps/docs/App.ts +136 -0
- package/src/apps/docs/index.ts +1 -0
- package/src/apps/index.ts +3 -0
- package/src/apps/metadata.ts +23 -0
- package/src/apps/platform/App.ts +130 -0
- package/src/apps/platform/index.ts +1 -0
- package/src/apps/platform/routes/api-keys.test.ts +330 -0
- package/src/apps/platform/routes/api-keys.ts +427 -0
- package/src/apps/platform/routes/invitations.test.ts +361 -0
- package/src/apps/platform/routes/invitations.ts +519 -0
- package/src/apps/platform/routes/me.test.ts +121 -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 +343 -0
- package/src/apps/platform/routes/projects.test.ts +181 -0
- package/src/apps/platform/routes/projects.ts +367 -0
- package/src/apps/relay/App.test.ts +484 -0
- package/src/apps/relay/App.ts +128 -0
- package/src/apps/relay/Sponsorships.test.ts +375 -0
- package/src/apps/relay/Sponsorships.ts +305 -0
- package/src/apps/relay/index.ts +2 -0
- package/src/{Cli.test.ts → cli/Cli.test.ts} +10 -9
- package/src/{Cli.ts → cli/Cli.ts} +16 -9
- package/src/cli/bin.ts +4 -0
- package/src/cli/commands/admin.test.ts +71 -0
- package/src/cli/commands/admin.ts +60 -0
- package/src/cloudflare.ts +10 -0
- package/src/db/Db.test.ts +84 -0
- package/src/db/Db.ts +542 -0
- package/src/db/Schema.ts +301 -0
- package/src/db/tables/invitations.ts +198 -0
- package/src/db/tables/memberships.ts +208 -0
- package/src/db/tables/organizations.test.ts +160 -0
- package/src/db/tables/organizations.ts +232 -0
- package/src/db/tables/projects.ts +107 -0
- package/src/db/tables/sponsoredTransactions.test.ts +218 -0
- package/src/db/tables/sponsoredTransactions.ts +236 -0
- package/src/db/tables/users.ts +85 -0
- package/src/db/tables/verifiedTokens.ts +111 -0
- package/src/db/tables/webhookDeliveries.ts +159 -0
- package/src/db/tables/webhookSubscriptions.ts +358 -0
- package/src/handlers/internal/executionError.ts +207 -0
- package/src/handlers/internal/multisig.test.ts +818 -0
- package/src/handlers/internal/multisig.ts +823 -0
- package/src/handlers/internal/requestListener.ts +273 -0
- package/src/handlers/internal/sponsorship.ts +245 -0
- package/src/handlers/internal/types.ts +378 -0
- package/src/handlers/internal/utils.ts +153 -0
- package/src/handlers/relay.test.ts +2035 -0
- package/src/handlers/relay.ts +1623 -0
- package/src/index.ts +4 -2
- package/src/internal/Auth.test.ts +337 -21
- package/src/internal/Auth.ts +783 -44
- package/src/internal/Cursor.test.ts +3 -2
- package/src/internal/Log.test.ts +1 -1
- package/src/internal/Log.ts +11 -3
- package/src/internal/MetricSink.ts +1 -1
- package/src/internal/OpenApi.ts +0 -59
- package/src/internal/RateLimit.test.ts +1 -1
- package/src/internal/RpcSchema.ts +10 -0
- package/src/internal/Store.test.ts +150 -10
- package/src/internal/Store.ts +136 -11
- package/src/internal/Tidx.local.test.ts +1 -1
- package/src/internal/VerifiedTokens.test.ts +99 -115
- package/src/internal/VerifiedTokens.ts +123 -175
- package/src/internal/WebhookDestination.test.ts +1 -1
- package/src/internal/Webhooks.test.ts +111 -111
- package/src/internal/Webhooks.ts +103 -221
- package/dist/ApiKeySource.d.ts +0 -166
- package/dist/ApiKeySource.d.ts.map +0 -1
- package/dist/ApiKeySource.js +0 -234
- package/dist/ApiKeySource.js.map +0 -1
- package/dist/Cli.d.ts.map +0 -1
- package/dist/Cli.js +0 -13
- package/dist/Cli.js.map +0 -1
- 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/seeds/31318/icons/0x20c0000000000000000000000000000000000000.svg +0 -1
- package/seeds/31318/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
- package/seeds/31318/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
- package/seeds/31318/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
- package/seeds/31318/verified-tokens.json +0 -30
- package/seeds/4217/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
- package/seeds/4217/icons/0x20c000000000000000000000048c8f36df1c9a4a.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000000520792dcccccccc.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000000a6da882d075a4c3.svg +0 -4
- package/seeds/4217/icons/0x20c000000000000000000000111111111e910f0f.svg +0 -30
- package/seeds/4217/icons/0x20c00000000000000000000014f22ca97301eb73.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000001621e21f71cf12fb.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000002f52d5cc21a3207b.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000003158081efd85bfc2.svg +0 -11
- package/seeds/4217/icons/0x20c0000000000000000000003554d28269e0f3c2.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000383a23bacb546ab9.svg +0 -1
- package/seeds/4217/icons/0x20c00000000000000000000042109aef2f8b28e1.png +0 -0
- package/seeds/4217/icons/0x20c0000000000000000000005c0bac7cef389a11.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000006fd9a167923ba194.png +0 -0
- package/seeds/4217/icons/0x20c0000000000000000000007f7ba549dd0251b9.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000008191667423f70e67.svg +0 -5
- package/seeds/4217/icons/0x20c0000000000000000000008ee4fcff88888888.svg +0 -1
- package/seeds/4217/icons/0x20c0000000000000000000009a4a4b17e0dc6651.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000ab02d39df30bd17e.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000ae247a1130450f09.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000aeed2ec36a54d0e5.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000b9537d11c60e8b50.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000bd95bfb69fbe6ce3.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000c412ec89d0c08be5.svg +0 -1
- package/seeds/4217/icons/0x20c000000000000000000000f047dd7018e50367.png +0 -0
- package/seeds/4217/verified-tokens.json +0 -177
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
- package/seeds/42431/icons/0x20c0000000000000000000009e8d7eb59b783726.svg +0 -1
- package/seeds/42431/icons/0x20c000000000000000000000d72572838bbee59c.svg +0 -1
- package/seeds/42431/verified-tokens.json +0 -44
- package/seeds/openrpc/README.md +0 -27
- package/seeds/openrpc/execution-apis.json +0 -8989
- package/src/ApiKeySource.test-d.ts +0 -11
- package/src/ApiKeySource.test.ts +0 -295
- package/src/ApiKeySource.ts +0 -303
- /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
- /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type * as Viem from '
|
|
2
|
-
import * as TestApp from '
|
|
3
|
-
import * as Runtime from '
|
|
1
|
+
import type * as Viem from '../../../internal/Viem.js'
|
|
2
|
+
import * as TestApp from '../../../../test/App.js'
|
|
3
|
+
import * as Runtime from '../../../../test/runtime.js'
|
|
4
4
|
|
|
5
5
|
const runtime = Runtime.get()
|
|
6
6
|
|
|
@@ -227,16 +227,14 @@ describe('POST /rpc', () => {
|
|
|
227
227
|
try {
|
|
228
228
|
const app = TestApp.create({
|
|
229
229
|
auth: {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
],
|
|
239
|
-
}),
|
|
230
|
+
keys: [
|
|
231
|
+
{
|
|
232
|
+
id: 'key_indexer_only',
|
|
233
|
+
orgId: 'org_test',
|
|
234
|
+
scopes: ['indexer:query'],
|
|
235
|
+
token: 'secret_indexer_key',
|
|
236
|
+
},
|
|
237
|
+
],
|
|
240
238
|
},
|
|
241
239
|
})
|
|
242
240
|
const response = await app.fetch(
|
|
@@ -266,6 +264,137 @@ describe('POST /rpc', () => {
|
|
|
266
264
|
})
|
|
267
265
|
})
|
|
268
266
|
|
|
267
|
+
describe('POST /rpc/relay', () => {
|
|
268
|
+
test('rejects anonymous callers', async () => {
|
|
269
|
+
const app = TestApp.create()
|
|
270
|
+
|
|
271
|
+
const response = await app.fetch(
|
|
272
|
+
new Request('http://tempo-api.test/rpc/relay', {
|
|
273
|
+
body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
|
|
274
|
+
method: 'POST',
|
|
275
|
+
}),
|
|
276
|
+
)
|
|
277
|
+
const body = (await response.json()) as Record<string, unknown>
|
|
278
|
+
const { requestId, ...stable } = body
|
|
279
|
+
|
|
280
|
+
expect(response.status).toMatchInlineSnapshot(`401`)
|
|
281
|
+
expect(typeof requestId).toMatchInlineSnapshot(`"string"`)
|
|
282
|
+
expect(stable).toMatchInlineSnapshot(`
|
|
283
|
+
{
|
|
284
|
+
"error": {
|
|
285
|
+
"code": "api_key_missing",
|
|
286
|
+
"message": "Missing API key",
|
|
287
|
+
},
|
|
288
|
+
}
|
|
289
|
+
`)
|
|
290
|
+
})
|
|
291
|
+
|
|
292
|
+
test('rejects keys missing the relay scope', async () => {
|
|
293
|
+
// The shared test key holds the data/indexer scopes only.
|
|
294
|
+
const app = TestApp.create()
|
|
295
|
+
|
|
296
|
+
const response = await app.fetch(
|
|
297
|
+
new Request('http://tempo-api.test/rpc/relay', {
|
|
298
|
+
body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
|
|
299
|
+
headers: { 'tempo-api-key': TestApp.key.token },
|
|
300
|
+
method: 'POST',
|
|
301
|
+
}),
|
|
302
|
+
)
|
|
303
|
+
const body = (await response.json()) as Record<string, unknown>
|
|
304
|
+
const { requestId, ...stable } = body
|
|
305
|
+
|
|
306
|
+
expect(response.status).toMatchInlineSnapshot(`403`)
|
|
307
|
+
expect(typeof requestId).toMatchInlineSnapshot(`"string"`)
|
|
308
|
+
expect(stable).toMatchInlineSnapshot(`
|
|
309
|
+
{
|
|
310
|
+
"error": {
|
|
311
|
+
"code": "api_key_forbidden",
|
|
312
|
+
"message": "API key missing required scope",
|
|
313
|
+
},
|
|
314
|
+
}
|
|
315
|
+
`)
|
|
316
|
+
})
|
|
317
|
+
|
|
318
|
+
test('routes chain-scoped mounts to the relay pipeline', async () => {
|
|
319
|
+
const fetch = mockRpc()
|
|
320
|
+
|
|
321
|
+
try {
|
|
322
|
+
const app = TestApp.create({
|
|
323
|
+
auth: {
|
|
324
|
+
keys: [
|
|
325
|
+
{
|
|
326
|
+
id: 'key_relay',
|
|
327
|
+
orgId: 'org_test',
|
|
328
|
+
scopes: ['rpc-relay:read'],
|
|
329
|
+
token: 'secret_relay_key',
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
},
|
|
333
|
+
rpc: { url: () => 'https://internal.rpc.test/json-rpc' },
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
// Without a fee payer configured the relay pipeline answers this method
|
|
337
|
+
// itself; a proxied request would return the mock upstream's result.
|
|
338
|
+
const response = await app.fetch(
|
|
339
|
+
new Request('http://tempo-api.test/rpc/relay/42431', {
|
|
340
|
+
body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_signRawTransaction', params: ['0x76'] }), // prettier-ignore
|
|
341
|
+
headers: { 'tempo-api-key': 'secret_relay_key' },
|
|
342
|
+
method: 'POST',
|
|
343
|
+
}),
|
|
344
|
+
)
|
|
345
|
+
|
|
346
|
+
expect(response.status).toMatchInlineSnapshot(`200`)
|
|
347
|
+
const body = (await response.json()) as { error?: { message: string } | undefined }
|
|
348
|
+
expect(body.error?.message).toMatchInlineSnapshot(
|
|
349
|
+
`"eth_signRawTransaction requires a fee payer to be configured on the relay. Set the \`feePayer\` option in \`Handler.relay()\` to enable transaction sponsorship."`,
|
|
350
|
+
)
|
|
351
|
+
expect(fetch.calls).toMatchInlineSnapshot(`[]`)
|
|
352
|
+
} finally {
|
|
353
|
+
fetch.restore()
|
|
354
|
+
}
|
|
355
|
+
})
|
|
356
|
+
|
|
357
|
+
test('proxies for keys holding rpc-relay:read', async () => {
|
|
358
|
+
const fetch = mockRpc()
|
|
359
|
+
|
|
360
|
+
try {
|
|
361
|
+
const app = TestApp.create({
|
|
362
|
+
auth: {
|
|
363
|
+
keys: [
|
|
364
|
+
{
|
|
365
|
+
id: 'key_relay',
|
|
366
|
+
orgId: 'org_test',
|
|
367
|
+
scopes: ['rpc-relay:read'],
|
|
368
|
+
token: 'secret_relay_key',
|
|
369
|
+
},
|
|
370
|
+
],
|
|
371
|
+
},
|
|
372
|
+
rpc: { url: () => 'https://internal.rpc.test/json-rpc' },
|
|
373
|
+
})
|
|
374
|
+
|
|
375
|
+
const response = await app.fetch(
|
|
376
|
+
new Request('http://tempo-api.test/rpc/relay', {
|
|
377
|
+
body: JSON.stringify({ id: 1, jsonrpc: '2.0', method: 'eth_chainId' }),
|
|
378
|
+
headers: { 'tempo-api-key': 'secret_relay_key' },
|
|
379
|
+
method: 'POST',
|
|
380
|
+
}),
|
|
381
|
+
)
|
|
382
|
+
|
|
383
|
+
expect(response.status).toMatchInlineSnapshot(`200`)
|
|
384
|
+
expect(await response.json()).toMatchInlineSnapshot(`
|
|
385
|
+
{
|
|
386
|
+
"id": 1,
|
|
387
|
+
"jsonrpc": "2.0",
|
|
388
|
+
"result": "0xa5bf",
|
|
389
|
+
}
|
|
390
|
+
`)
|
|
391
|
+
expect(fetch.calls[0]?.url).toMatchInlineSnapshot(`"https://internal.rpc.test/json-rpc"`)
|
|
392
|
+
} finally {
|
|
393
|
+
fetch.restore()
|
|
394
|
+
}
|
|
395
|
+
})
|
|
396
|
+
})
|
|
397
|
+
|
|
269
398
|
function mockRpc() {
|
|
270
399
|
const original = globalThis.fetch
|
|
271
400
|
const calls: {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Hono, type Context, type TypedResponse } from 'hono'
|
|
2
2
|
import * as z from 'zod/mini'
|
|
3
3
|
|
|
4
|
-
import type * as App from '
|
|
5
|
-
import * as Auth from '
|
|
6
|
-
import * as OpenApi from '
|
|
7
|
-
import * as Response from '
|
|
8
|
-
import * as Schema from '
|
|
9
|
-
import * as Viem from '
|
|
4
|
+
import type * as App from '../../../App.js'
|
|
5
|
+
import * as Auth from '../../../internal/Auth.js'
|
|
6
|
+
import * as OpenApi from '../../../internal/OpenApi.js'
|
|
7
|
+
import * as Response from '../../../internal/Response.js'
|
|
8
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
9
|
+
import * as Viem from '../../../internal/Viem.js'
|
|
10
10
|
|
|
11
11
|
// Request headers that must not be forwarded upstream: hop-by-hop headers, the
|
|
12
12
|
// inbound host, and any caller auth so the consumer's Tempo API credentials never
|
|
@@ -101,7 +101,7 @@ export namespace schema {
|
|
|
101
101
|
/** Creates the raw Tempo RPC passthrough handler. */
|
|
102
102
|
export function rpc() {
|
|
103
103
|
return new Hono<App.Environment>().post(
|
|
104
|
-
'/:chain{mainnet|testnet|[0-9]+}?',
|
|
104
|
+
'/rpc/:chain{(mainnet|testnet|[0-9]+)}?',
|
|
105
105
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, public: true }),
|
|
106
106
|
OpenApi.describeRoute({
|
|
107
107
|
description:
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import * as
|
|
4
|
-
import * as Runtime from '../../test/runtime.js'
|
|
5
|
-
import * as VerifiedTokens from '../internal/VerifiedTokens.js'
|
|
1
|
+
import * as TestApp from '../../../../test/App.js'
|
|
2
|
+
import * as Runtime from '../../../../test/runtime.js'
|
|
3
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
6
4
|
import * as Tokenlist from './tokenlist.js'
|
|
7
5
|
|
|
8
6
|
/** Reader key for the data routes. */
|
|
@@ -11,7 +9,7 @@ const reader = {
|
|
|
11
9
|
orgId: 'org_test',
|
|
12
10
|
scopes: ['data:read'],
|
|
13
11
|
token: 'secret_reader',
|
|
14
|
-
} satisfies TestApp.
|
|
12
|
+
} satisfies TestApp.kvStore.Key
|
|
15
13
|
|
|
16
14
|
/** A known list published into the store before exercising the read endpoint. */
|
|
17
15
|
const seedList = [
|
|
@@ -27,11 +25,11 @@ function as(key: { token: string }) {
|
|
|
27
25
|
|
|
28
26
|
/** Client whose verified-token store holds a published {@link seedList} snapshot. */
|
|
29
27
|
async function seeded() {
|
|
30
|
-
const
|
|
31
|
-
await VerifiedTokens.replace(
|
|
28
|
+
const db = TestApp.database()
|
|
29
|
+
await VerifiedTokens.replace(db, chainId, seedList)
|
|
32
30
|
return TestApp.client({
|
|
33
|
-
auth: {
|
|
34
|
-
|
|
31
|
+
auth: { keys: [reader] },
|
|
32
|
+
db,
|
|
35
33
|
})
|
|
36
34
|
}
|
|
37
35
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { Hono } from 'hono'
|
|
2
2
|
import * as z from 'zod/mini'
|
|
3
3
|
|
|
4
|
-
import type * as App from '
|
|
5
|
-
import * as Auth from '
|
|
6
|
-
import * as Cache from '
|
|
7
|
-
import * as OpenApi from '
|
|
8
|
-
import * as Response from '
|
|
9
|
-
import * as Schema from '
|
|
10
|
-
import * as VerifiedTokens from '
|
|
11
|
-
import * as Viem from '
|
|
4
|
+
import type * as App from '../../../App.js'
|
|
5
|
+
import * as Auth from '../../../internal/Auth.js'
|
|
6
|
+
import * as Cache from '../../../internal/Cache.js'
|
|
7
|
+
import * as OpenApi from '../../../internal/OpenApi.js'
|
|
8
|
+
import * as Response from '../../../internal/Response.js'
|
|
9
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
10
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
11
|
+
import * as Viem from '../../../internal/Viem.js'
|
|
12
12
|
import { getTokenLogo } from './tokens.js'
|
|
13
13
|
|
|
14
14
|
/** Zod schemas owned by the tokenlist resource. */
|
|
@@ -124,7 +124,7 @@ export namespace schema {
|
|
|
124
124
|
*/
|
|
125
125
|
export function tokenlist() {
|
|
126
126
|
return new Hono<App.Environment>().get(
|
|
127
|
-
'/',
|
|
127
|
+
'/v1/tokenlist',
|
|
128
128
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
129
129
|
OpenApi.validate('query', schema.getTokenList.Query, {
|
|
130
130
|
code: 'query_invalid',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Schema } from '
|
|
1
|
+
import { Schema } from 'tapimo'
|
|
2
2
|
|
|
3
|
-
import * as TestApp from '
|
|
4
|
-
import * as Runtime from '
|
|
3
|
+
import * as TestApp from '../../../../test/App.js'
|
|
4
|
+
import * as Runtime from '../../../../test/runtime.js'
|
|
5
5
|
import * as Tokens from './tokens.js'
|
|
6
6
|
|
|
7
7
|
// Verified enrichment is store-backed now that the build-time bundle is gone, so
|
|
@@ -10,9 +10,10 @@ import * as Tokens from './tokens.js'
|
|
|
10
10
|
// verified tokens the bundle used to provide; a test can still override
|
|
11
11
|
// `verifiedTokens`.
|
|
12
12
|
const runtime = Runtime.get()
|
|
13
|
-
const
|
|
13
|
+
const db = TestApp.database()
|
|
14
|
+
await TestApp.verifiedSeed(db, runtime.chainId)
|
|
14
15
|
function app(options: TestApp.create.Options = {}) {
|
|
15
|
-
return TestApp.client({
|
|
16
|
+
return TestApp.client({ db, ...options })
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
const verifiedTokenCount = 6
|
|
@@ -3,20 +3,20 @@ import { AbiEvent, AbiParameters } from 'ox'
|
|
|
3
3
|
import { type Address, ContractFunctionExecutionError } from 'viem'
|
|
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 Path from '
|
|
12
|
-
import * as Response from '
|
|
13
|
-
import * as Schema from '
|
|
14
|
-
import * as Store from '
|
|
15
|
-
import * as Tidx from '
|
|
16
|
-
import * as Timing from '
|
|
17
|
-
import * as Ttl from '
|
|
18
|
-
import * as Value from '
|
|
19
|
-
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 Path from '../../../internal/Path.js'
|
|
12
|
+
import * as Response from '../../../internal/Response.js'
|
|
13
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
14
|
+
import * as Store from '../../../internal/Store.js'
|
|
15
|
+
import * as Tidx from '../../../internal/Tidx.js'
|
|
16
|
+
import * as Timing from '../../../internal/Timing.js'
|
|
17
|
+
import * as Ttl from '../../../internal/Ttl.js'
|
|
18
|
+
import * as Value from '../../../internal/Value.js'
|
|
19
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
20
20
|
import * as Transactions from './transactions.js'
|
|
21
21
|
|
|
22
22
|
const tokenCreatedSignature =
|
|
@@ -552,7 +552,7 @@ export namespace schema {
|
|
|
552
552
|
export function tokens() {
|
|
553
553
|
return new Hono<App.Environment>()
|
|
554
554
|
.get(
|
|
555
|
-
'/',
|
|
555
|
+
'/v1/tokens',
|
|
556
556
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
557
557
|
OpenApi.validate('query', schema.getTokens.Query, {
|
|
558
558
|
code: 'query_invalid',
|
|
@@ -622,7 +622,7 @@ export function tokens() {
|
|
|
622
622
|
},
|
|
623
623
|
)
|
|
624
624
|
.get(
|
|
625
|
-
|
|
625
|
+
`/v1/tokens/:symbol{${schema.getTokenBySymbol.routePattern}}`,
|
|
626
626
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
627
627
|
OpenApi.validate('param', schema.getTokenBySymbol.Params, {
|
|
628
628
|
code: 'symbol_invalid',
|
|
@@ -694,7 +694,7 @@ export function tokens() {
|
|
|
694
694
|
},
|
|
695
695
|
)
|
|
696
696
|
.get(
|
|
697
|
-
'/:token',
|
|
697
|
+
'/v1/tokens/:token',
|
|
698
698
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
699
699
|
OpenApi.validate('param', schema.getToken.Params, {
|
|
700
700
|
code: 'token_invalid',
|
|
@@ -749,7 +749,7 @@ export function tokens() {
|
|
|
749
749
|
},
|
|
750
750
|
)
|
|
751
751
|
.get(
|
|
752
|
-
'/:token/logo',
|
|
752
|
+
'/v1/tokens/:token/logo',
|
|
753
753
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
754
754
|
OpenApi.validate('param', schema.getTokenLogo.Params, {
|
|
755
755
|
code: 'token_invalid',
|
|
@@ -839,7 +839,7 @@ export function tokens() {
|
|
|
839
839
|
},
|
|
840
840
|
)
|
|
841
841
|
.get(
|
|
842
|
-
'/:token/holders',
|
|
842
|
+
'/v1/tokens/:token/holders',
|
|
843
843
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
844
844
|
OpenApi.validate('param', schema.getTokenHolders.Params, {
|
|
845
845
|
code: 'token_invalid',
|
|
@@ -930,7 +930,7 @@ export function tokens() {
|
|
|
930
930
|
},
|
|
931
931
|
)
|
|
932
932
|
.get(
|
|
933
|
-
'/:token/transactions',
|
|
933
|
+
'/v1/tokens/:token/transactions',
|
|
934
934
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
935
935
|
OpenApi.validate('param', schema.getTokenTransactions.Params, {
|
|
936
936
|
code: 'token_invalid',
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Schema } from '
|
|
1
|
+
import { Schema } from 'tapimo'
|
|
2
2
|
import { Hex } from 'ox'
|
|
3
3
|
import { zeroHash } from 'viem'
|
|
4
4
|
|
|
5
|
-
import * as TestApp from '
|
|
6
|
-
import * as Runtime from '
|
|
7
|
-
import * as Viem from '
|
|
5
|
+
import * as TestApp from '../../../../test/App.js'
|
|
6
|
+
import * as Runtime from '../../../../test/runtime.js'
|
|
7
|
+
import * as Viem from '../../../../test/Viem.js'
|
|
8
8
|
import * as Transactions from './transactions.js'
|
|
9
9
|
|
|
10
10
|
/** The decoded `type` names a humanized transaction may report. */
|
|
@@ -2,19 +2,19 @@ import { Hono, type Context } from 'hono'
|
|
|
2
2
|
import { Hex } from 'ox'
|
|
3
3
|
import * as z from 'zod/mini'
|
|
4
4
|
|
|
5
|
-
import type * as App from '
|
|
6
|
-
import * as Auth from '
|
|
7
|
-
import * as Cache from '
|
|
8
|
-
import * as Cursor from '
|
|
9
|
-
import * as OpenApi from '
|
|
10
|
-
import * as Response from '
|
|
11
|
-
import * as Schema from '
|
|
12
|
-
import * as Store from '
|
|
13
|
-
import type * as Tidx from '
|
|
14
|
-
import * as Timing from '
|
|
15
|
-
import * as Ttl from '
|
|
16
|
-
import * as Value from '
|
|
17
|
-
import * as VerifiedTokens from '
|
|
5
|
+
import type * as App from '../../../App.js'
|
|
6
|
+
import * as Auth from '../../../internal/Auth.js'
|
|
7
|
+
import * as Cache from '../../../internal/Cache.js'
|
|
8
|
+
import * as Cursor from '../../../internal/Cursor.js'
|
|
9
|
+
import * as OpenApi from '../../../internal/OpenApi.js'
|
|
10
|
+
import * as Response from '../../../internal/Response.js'
|
|
11
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
12
|
+
import * as Store from '../../../internal/Store.js'
|
|
13
|
+
import type * as Tidx from '../../../internal/Tidx.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 Receipts from './receipts.js'
|
|
19
19
|
import * as Tokens from './tokens.js'
|
|
20
20
|
|
|
@@ -595,7 +595,7 @@ export namespace schema {
|
|
|
595
595
|
export function transactions() {
|
|
596
596
|
return new Hono<App.Environment>()
|
|
597
597
|
.get(
|
|
598
|
-
'/',
|
|
598
|
+
'/v1/transactions',
|
|
599
599
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
600
600
|
OpenApi.validate('query', schema.getTransactions.Query, {
|
|
601
601
|
code: 'query_invalid',
|
|
@@ -692,7 +692,7 @@ export function transactions() {
|
|
|
692
692
|
},
|
|
693
693
|
)
|
|
694
694
|
.get(
|
|
695
|
-
'/:transactionHash',
|
|
695
|
+
'/v1/transactions/:transactionHash',
|
|
696
696
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
697
697
|
OpenApi.validate('param', schema.getTransaction.Params, {
|
|
698
698
|
code: 'transaction_invalid',
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type * as z from 'zod/mini'
|
|
2
|
-
import { Schema } from '
|
|
2
|
+
import { Schema } from 'tapimo'
|
|
3
3
|
|
|
4
|
-
import * as TestApp from '
|
|
5
|
-
import * as Runtime from '
|
|
4
|
+
import * as TestApp from '../../../../test/App.js'
|
|
5
|
+
import * as Runtime from '../../../../test/runtime.js'
|
|
6
6
|
import * as Transfers from './transfers.js'
|
|
7
7
|
|
|
8
8
|
describe('GET /transfers', () => {
|
|
@@ -3,20 +3,20 @@ import { Address, Hex } from 'ox'
|
|
|
3
3
|
import { 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 Mpp from '
|
|
11
|
-
import * as OpenApi from '
|
|
12
|
-
import * as Response from '
|
|
13
|
-
import * as Schema from '
|
|
14
|
-
import * as Store from '
|
|
15
|
-
import type * as Tidx from '
|
|
16
|
-
import * as Timing from '
|
|
17
|
-
import * as Ttl from '
|
|
18
|
-
import * as Value from '
|
|
19
|
-
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 Mpp from '../../../internal/Mpp.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 Store from '../../../internal/Store.js'
|
|
15
|
+
import type * as Tidx from '../../../internal/Tidx.js'
|
|
16
|
+
import * as Timing from '../../../internal/Timing.js'
|
|
17
|
+
import * as Ttl from '../../../internal/Ttl.js'
|
|
18
|
+
import * as Value from '../../../internal/Value.js'
|
|
19
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
20
20
|
import * as Tokens from './tokens.js'
|
|
21
21
|
|
|
22
22
|
// TIP-20 tokens emit the standard ERC-20 Transfer event. Supplying the
|
|
@@ -285,7 +285,7 @@ export namespace schema {
|
|
|
285
285
|
/** Creates transfer handlers. */
|
|
286
286
|
export function transfers() {
|
|
287
287
|
return new Hono<App.Environment>().get(
|
|
288
|
-
'/',
|
|
288
|
+
'/v1/transfers',
|
|
289
289
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
290
290
|
OpenApi.validate('query', schema.getTransfers.Query, {
|
|
291
291
|
code: 'query_invalid',
|
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import * as
|
|
4
|
-
import * as Runtime from '../../test/runtime.js'
|
|
5
|
-
import * as VerifiedTokens from '../internal/VerifiedTokens.js'
|
|
1
|
+
import * as TestApp from '../../../../test/App.js'
|
|
2
|
+
import * as Runtime from '../../../../test/runtime.js'
|
|
3
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
6
4
|
import * as Verified from './verified-tokens.js'
|
|
7
5
|
|
|
8
|
-
// Mutations live in the admin API (`cadent/admin`) and are covered in
|
|
9
|
-
// `../admin/apps/verified-tokens.test.ts`; these tests cover the public reads,
|
|
10
|
-
// seeded by publishing a snapshot through the same core module the admin
|
|
11
|
-
// writes use.
|
|
12
|
-
|
|
13
6
|
/** Reader key for the data routes. */
|
|
14
7
|
const reader = {
|
|
15
8
|
id: 'key_reader',
|
|
16
9
|
orgId: 'org_test',
|
|
17
10
|
scopes: ['data:read'],
|
|
18
11
|
token: 'secret_reader',
|
|
19
|
-
} satisfies TestApp.
|
|
12
|
+
} satisfies TestApp.kvStore.Key
|
|
20
13
|
|
|
21
14
|
/** An address not present in the seed list. */
|
|
22
15
|
const unknownAddress = '0x20c00000000000000000000000000000000000ff'
|
|
@@ -36,11 +29,11 @@ function as(key: { token: string }) {
|
|
|
36
29
|
|
|
37
30
|
/** Client whose verified-token store holds a published {@link seedList} snapshot. */
|
|
38
31
|
async function seeded() {
|
|
39
|
-
const
|
|
40
|
-
await VerifiedTokens.replace(
|
|
32
|
+
const db = TestApp.database()
|
|
33
|
+
await VerifiedTokens.replace(db, chainId, seedList)
|
|
41
34
|
return TestApp.client({
|
|
42
|
-
auth: {
|
|
43
|
-
|
|
35
|
+
auth: { keys: [reader] },
|
|
36
|
+
db,
|
|
44
37
|
})
|
|
45
38
|
}
|
|
46
39
|
|
|
@@ -55,6 +48,25 @@ describe('GET /verified-tokens', () => {
|
|
|
55
48
|
expect(body.data[1]?.logoUri).toBeUndefined()
|
|
56
49
|
})
|
|
57
50
|
|
|
51
|
+
test('reads through `db.cached` when configured', async () => {
|
|
52
|
+
// Seed only the cached source: the list serving from it proves the
|
|
53
|
+
// snapshot path resolves `cached`, not `source`. `refreshMs: 0` forces a
|
|
54
|
+
// head check against this app's database (the per-isolate snapshot cell
|
|
55
|
+
// is keyed by chain id, so a prior test's cell could otherwise satisfy
|
|
56
|
+
// the read).
|
|
57
|
+
const cached = TestApp.database()
|
|
58
|
+
await VerifiedTokens.replace(cached, chainId, seedList)
|
|
59
|
+
const client = TestApp.client({
|
|
60
|
+
auth: { keys: [reader] },
|
|
61
|
+
db: { cached, source: TestApp.database() },
|
|
62
|
+
verifiedTokens: { refreshMs: 0 },
|
|
63
|
+
})
|
|
64
|
+
const response = await client.v1['verified-tokens'].$get({ query: {} }, as(reader))
|
|
65
|
+
expect(response.status).toBe(200)
|
|
66
|
+
const body = await TestApp.json(response, Verified.schema.listVerifiedTokens.Response)
|
|
67
|
+
expect(body.data.map((token) => token.address)).toEqual(seedList.map((token) => token.address))
|
|
68
|
+
})
|
|
69
|
+
|
|
58
70
|
test('filters by currency (case-insensitive)', async () => {
|
|
59
71
|
const response = await (
|
|
60
72
|
await seeded()
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type Context, Hono } from 'hono'
|
|
2
2
|
import * as z from 'zod/mini'
|
|
3
3
|
|
|
4
|
-
import type * as App from '
|
|
5
|
-
import * as Auth from '
|
|
6
|
-
import * as Cache from '
|
|
7
|
-
import * as OpenApi from '
|
|
8
|
-
import * as Response from '
|
|
9
|
-
import * as Schema from '
|
|
10
|
-
import * as VerifiedTokens from '
|
|
4
|
+
import type * as App from '../../../App.js'
|
|
5
|
+
import * as Auth from '../../../internal/Auth.js'
|
|
6
|
+
import * as Cache from '../../../internal/Cache.js'
|
|
7
|
+
import * as OpenApi from '../../../internal/OpenApi.js'
|
|
8
|
+
import * as Response from '../../../internal/Response.js'
|
|
9
|
+
import * as Schema from '../../../internal/Schema.js'
|
|
10
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js'
|
|
11
11
|
|
|
12
12
|
/** Zod schemas owned by the verified-tokens resource. */
|
|
13
13
|
export namespace schema {
|
|
@@ -138,7 +138,7 @@ export namespace schema {
|
|
|
138
138
|
export function verifiedTokens() {
|
|
139
139
|
return new Hono<App.Environment>()
|
|
140
140
|
.get(
|
|
141
|
-
'/',
|
|
141
|
+
'/v1/verified-tokens',
|
|
142
142
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
143
143
|
OpenApi.validate('query', schema.listVerifiedTokens.Query, {
|
|
144
144
|
code: 'query_invalid',
|
|
@@ -183,7 +183,7 @@ export function verifiedTokens() {
|
|
|
183
183
|
},
|
|
184
184
|
)
|
|
185
185
|
.get(
|
|
186
|
-
'/currencies',
|
|
186
|
+
'/v1/verified-tokens/currencies',
|
|
187
187
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
188
188
|
OpenApi.validate('query', schema.getVerifiedTokenCurrencies.Query, {
|
|
189
189
|
code: 'query_invalid',
|
|
@@ -230,7 +230,7 @@ export function verifiedTokens() {
|
|
|
230
230
|
},
|
|
231
231
|
)
|
|
232
232
|
.get(
|
|
233
|
-
'/:address',
|
|
233
|
+
'/v1/verified-tokens/:address',
|
|
234
234
|
Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }),
|
|
235
235
|
OpenApi.validate('param', schema.Params, {
|
|
236
236
|
code: 'address_invalid',
|