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,49 +1,38 @@
|
|
|
1
1
|
import type { Context } from 'hono'
|
|
2
2
|
|
|
3
|
+
import * as TestApp from '../../test/App.js'
|
|
3
4
|
import type * as App from '../App.js'
|
|
4
|
-
import * as
|
|
5
|
+
import * as Db from '../db/Db.js'
|
|
6
|
+
import * as core_VerifiedTokens from '../db/tables/verifiedTokens.js'
|
|
5
7
|
import * as VerifiedTokens from './VerifiedTokens.js'
|
|
6
8
|
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
+
// Publishes a list at an explicit version so `read`/`snapshot` can load it
|
|
10
|
+
// (the write API generates monotonic versions; tests pin readable ones). Skips
|
|
11
|
+
// a matching version so vitest retries on a shared db stay idempotent.
|
|
9
12
|
async function seed(
|
|
10
|
-
|
|
13
|
+
db: Db.Db,
|
|
11
14
|
chainId: number,
|
|
12
15
|
version: string,
|
|
13
16
|
list: readonly VerifiedTokens.Token[],
|
|
14
17
|
) {
|
|
15
|
-
|
|
16
|
-
await
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
`verified-token:v1:${chainId}:head`,
|
|
22
|
-
JSON.stringify({ chainId, count: list.length, schema: 1, updatedAt, version }),
|
|
23
|
-
)
|
|
18
|
+
if ((await core_VerifiedTokens.head(db, chainId))?.version === version) return
|
|
19
|
+
await core_VerifiedTokens.publish(db, chainId, {
|
|
20
|
+
tokens: list,
|
|
21
|
+
updatedAt: '2024-01-01T00:00:00.000Z',
|
|
22
|
+
version,
|
|
23
|
+
})
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
counts,
|
|
32
|
-
store: Store.from({
|
|
33
|
-
...store,
|
|
34
|
-
get(key: string) {
|
|
35
|
-
if (key.endsWith(':head')) counts.head++
|
|
36
|
-
else if (key.includes(':snapshot:')) counts.snapshot++
|
|
37
|
-
return store.get(key)
|
|
38
|
-
},
|
|
39
|
-
}),
|
|
40
|
-
}
|
|
41
|
-
}
|
|
26
|
+
// A database whose every query fails (nothing listens on port 1), proving a
|
|
27
|
+
// code path performed zero database I/O when a test passes with it.
|
|
28
|
+
const unreachable = () =>
|
|
29
|
+
Db.postgres({ connectionString: 'postgresql://postgres:postgres@127.0.0.1:1/none' })
|
|
42
30
|
|
|
43
|
-
// Minimal context
|
|
44
|
-
|
|
31
|
+
// Minimal context serving the verified-tokens feature config and the app db
|
|
32
|
+
// (both the fresh and cached bindings, as `App.create` sets them).
|
|
33
|
+
function context(db: Db.Db, config?: App.data.VerifiedTokens): Context<App.Environment> {
|
|
45
34
|
return {
|
|
46
|
-
get: (key: string) => (key === 'verifiedTokens' ? config : undefined),
|
|
35
|
+
get: (key: string) => (key === 'verifiedTokens' ? (config ?? {}) : key === 'db' || key === 'dbCached' ? db : undefined), // prettier-ignore
|
|
47
36
|
} as unknown as Context<App.Environment>
|
|
48
37
|
}
|
|
49
38
|
|
|
@@ -111,14 +100,14 @@ describe('compile', () => {
|
|
|
111
100
|
})
|
|
112
101
|
|
|
113
102
|
describe('read', () => {
|
|
114
|
-
test('returns null when the chain has no
|
|
115
|
-
expect(await VerifiedTokens.read(
|
|
103
|
+
test('returns null when the chain has no list', async () => {
|
|
104
|
+
expect(await VerifiedTokens.read(TestApp.database(), 4217)).toBe(null)
|
|
116
105
|
})
|
|
117
106
|
|
|
118
|
-
test('compiles the snapshot
|
|
119
|
-
const
|
|
120
|
-
await seed(
|
|
121
|
-
const snapshot = await VerifiedTokens.read(
|
|
107
|
+
test('compiles the latest snapshot', async () => {
|
|
108
|
+
const db = TestApp.database()
|
|
109
|
+
await seed(db, 4217, 'v1', tokens)
|
|
110
|
+
const snapshot = await VerifiedTokens.read(db, 4217)
|
|
122
111
|
expect(snapshot?.version).toBe('v1')
|
|
123
112
|
expect(snapshot?.list.map((token) => token.symbol)).toMatchInlineSnapshot(`
|
|
124
113
|
[
|
|
@@ -129,21 +118,13 @@ describe('read', () => {
|
|
|
129
118
|
`)
|
|
130
119
|
})
|
|
131
120
|
|
|
132
|
-
test('
|
|
133
|
-
const
|
|
134
|
-
await
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
schema: 1,
|
|
140
|
-
updatedAt: '2024-01-01T00:00:00.000Z',
|
|
141
|
-
version: 'ghost',
|
|
142
|
-
}),
|
|
143
|
-
)
|
|
144
|
-
await expect(VerifiedTokens.read(store, 4217)).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
145
|
-
`[VerifiedTokens.TornStateError: verified-token head for chain 4217 points at missing snapshot version "ghost".]`,
|
|
146
|
-
)
|
|
121
|
+
test('serves the latest publish as the head', async () => {
|
|
122
|
+
const db = TestApp.database()
|
|
123
|
+
await seed(db, 4217, 'v1', tokens)
|
|
124
|
+
await seed(db, 4217, 'v2', tokens.slice(0, 1))
|
|
125
|
+
const snapshot = await VerifiedTokens.read(db, 4217)
|
|
126
|
+
expect(snapshot?.version).toBe('v2')
|
|
127
|
+
expect(snapshot?.list.map((token) => token.symbol)).toEqual(['aUSD'])
|
|
147
128
|
})
|
|
148
129
|
})
|
|
149
130
|
|
|
@@ -157,51 +138,54 @@ describe('snapshot', () => {
|
|
|
157
138
|
expect(snapshot.list).toEqual([])
|
|
158
139
|
})
|
|
159
140
|
|
|
160
|
-
// The following cases run in order and share the module-level per-isolate
|
|
161
|
-
// for chain 42431: cold load → fresh → soft-stale
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
141
|
+
// The following cases run in order and share the module-level per-isolate
|
|
142
|
+
// cache for chain 42431 (and one seeded db): cold load → fresh → soft-stale
|
|
143
|
+
// unchanged → soft-stale changed.
|
|
144
|
+
const db = TestApp.database()
|
|
145
|
+
|
|
146
|
+
test('cold-loads from the database when a list exists', async () => {
|
|
147
|
+
await seed(db, 42431, 'v1', tokens)
|
|
148
|
+
const snapshot = await VerifiedTokens.snapshot(context(db), 42431)
|
|
166
149
|
expect(snapshot.version).toBe('v1')
|
|
167
150
|
expect(snapshot.byAddress.size).toBe(tokens.length)
|
|
168
151
|
})
|
|
169
152
|
|
|
170
|
-
test('serves fresh lookups with zero
|
|
171
|
-
|
|
172
|
-
|
|
153
|
+
test('serves fresh lookups with zero database I/O', async () => {
|
|
154
|
+
// Every query against this db fails, so a pass proves the fresh window
|
|
155
|
+
// never touched the database.
|
|
156
|
+
const snapshot = await VerifiedTokens.snapshot(
|
|
157
|
+
context(unreachable(), { refreshMs: 60_000 }),
|
|
158
|
+
42431,
|
|
159
|
+
)
|
|
173
160
|
expect(snapshot.version).toBe('v1')
|
|
174
|
-
expect(counts).toEqual({ head: 0, snapshot: 0 })
|
|
175
161
|
})
|
|
176
162
|
|
|
177
|
-
test('soft-stale
|
|
178
|
-
const base = Store.memory()
|
|
179
|
-
await seed(base, 42431, 'v1', tokens)
|
|
180
|
-
const { counts, store } = counting(base)
|
|
163
|
+
test('soft-stale keeps serving an unchanged version', async () => {
|
|
181
164
|
// refreshMs 0 forces the soft-stale path; the current snapshot is returned
|
|
182
165
|
// immediately and the head-only refresh runs in the background.
|
|
183
|
-
const snapshot = await VerifiedTokens.snapshot(context({ refreshMs: 0
|
|
166
|
+
const snapshot = await VerifiedTokens.snapshot(context(db, { refreshMs: 0 }), 42431)
|
|
184
167
|
expect(snapshot.version).toBe('v1')
|
|
185
168
|
await flush()
|
|
186
|
-
expect(counts).toEqual({ head: 1, snapshot: 0 })
|
|
187
169
|
})
|
|
188
170
|
|
|
189
171
|
test('soft-stale recompiles when the version changed', async () => {
|
|
190
|
-
|
|
191
|
-
await seed(store, 42431, 'v2', tokens.slice(0, 1))
|
|
172
|
+
await seed(db, 42431, 'v2', tokens.slice(0, 1))
|
|
192
173
|
// Stale call returns the existing v1 immediately, refreshes to v2 in background.
|
|
193
|
-
const stale = await VerifiedTokens.snapshot(context({ refreshMs: 0
|
|
174
|
+
const stale = await VerifiedTokens.snapshot(context(db, { refreshMs: 0 }), 42431)
|
|
194
175
|
expect(stale.version).toBe('v1')
|
|
195
|
-
|
|
196
|
-
//
|
|
197
|
-
|
|
198
|
-
|
|
176
|
+
// The refresh round-trips Postgres, so poll the (fresh-window, zero-I/O)
|
|
177
|
+
// cell until it lands rather than racing a single macrotask.
|
|
178
|
+
await vi.waitFor(async () => {
|
|
179
|
+
const fresh = await VerifiedTokens.snapshot(context(db, { refreshMs: 60_000 }), 42431)
|
|
180
|
+
expect(fresh.version).toBe('v2')
|
|
181
|
+
})
|
|
182
|
+
const fresh = await VerifiedTokens.snapshot(context(db, { refreshMs: 60_000 }), 42431)
|
|
199
183
|
expect(fresh.list.map((token) => token.symbol)).toEqual(['aUSD'])
|
|
200
184
|
})
|
|
201
185
|
|
|
202
|
-
test('cold-loads an empty snapshot when the
|
|
203
|
-
// Chain 4217 has no configured cell yet and an empty
|
|
204
|
-
const snapshot = await VerifiedTokens.snapshot(context(
|
|
186
|
+
test('cold-loads an empty snapshot when the chain has no rows', async () => {
|
|
187
|
+
// Chain 4217 has no configured cell yet and an empty database → empty snapshot.
|
|
188
|
+
const snapshot = await VerifiedTokens.snapshot(context(TestApp.database()), 4217)
|
|
205
189
|
expect(snapshot.version).toBe('empty')
|
|
206
190
|
expect(snapshot.list).toEqual([])
|
|
207
191
|
})
|
|
@@ -217,9 +201,9 @@ const newToken = {
|
|
|
217
201
|
|
|
218
202
|
describe('replace', () => {
|
|
219
203
|
test('publishes the list and round-trips through read', async () => {
|
|
220
|
-
const
|
|
221
|
-
const { snapshot } = await VerifiedTokens.replace(
|
|
222
|
-
const read = await VerifiedTokens.read(
|
|
204
|
+
const db = TestApp.database()
|
|
205
|
+
const { snapshot } = await VerifiedTokens.replace(db, 42431, tokens)
|
|
206
|
+
const read = await VerifiedTokens.read(db, 42431)
|
|
223
207
|
expect(read?.version).toBe(snapshot.version)
|
|
224
208
|
expect(read?.list.map((token) => token.symbol)).toEqual(['aUSD', 'bEUR', 'cUSD'])
|
|
225
209
|
// Addresses are normalized to lowercase on write.
|
|
@@ -227,16 +211,16 @@ describe('replace', () => {
|
|
|
227
211
|
})
|
|
228
212
|
|
|
229
213
|
test('advances the head version on each publish', async () => {
|
|
230
|
-
const
|
|
231
|
-
const first = await VerifiedTokens.replace(
|
|
232
|
-
const second = await VerifiedTokens.replace(
|
|
214
|
+
const db = TestApp.database()
|
|
215
|
+
const first = await VerifiedTokens.replace(db, 42431, tokens)
|
|
216
|
+
const second = await VerifiedTokens.replace(db, 42431, tokens.slice(0, 1))
|
|
233
217
|
expect(second.snapshot.version > first.snapshot.version).toBe(true)
|
|
234
218
|
})
|
|
235
219
|
|
|
236
220
|
test('rejects a duplicate address in the input', async () => {
|
|
237
|
-
const
|
|
221
|
+
const db = TestApp.database()
|
|
238
222
|
await expect(
|
|
239
|
-
VerifiedTokens.replace(
|
|
223
|
+
VerifiedTokens.replace(db, 42431, [tokens[0]!, tokens[0]!]),
|
|
240
224
|
).rejects.toThrowErrorMatchingInlineSnapshot(
|
|
241
225
|
`[VerifiedTokens.DuplicateAddressError: verified token 0xaaa0000000000000000000000000000000000001 already exists on chain 42431.]`,
|
|
242
226
|
)
|
|
@@ -245,35 +229,35 @@ describe('replace', () => {
|
|
|
245
229
|
|
|
246
230
|
describe('create', () => {
|
|
247
231
|
test('appends a token preserving order', async () => {
|
|
248
|
-
const
|
|
249
|
-
await VerifiedTokens.replace(
|
|
250
|
-
const { snapshot, token } = await VerifiedTokens.create(
|
|
232
|
+
const db = TestApp.database()
|
|
233
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
234
|
+
const { snapshot, token } = await VerifiedTokens.create(db, { ...newToken, chainId: 42431 })
|
|
251
235
|
expect(token.address).toBe('0xddd0000000000000000000000000000000000004')
|
|
252
236
|
expect(snapshot.list.map((t) => t.symbol)).toEqual(['aUSD', 'bEUR', 'cUSD', 'dGBP'])
|
|
253
237
|
})
|
|
254
238
|
|
|
255
239
|
test('rejects a duplicate address', async () => {
|
|
256
|
-
const
|
|
257
|
-
await VerifiedTokens.replace(
|
|
258
|
-
await expect(
|
|
259
|
-
VerifiedTokens.
|
|
260
|
-
)
|
|
240
|
+
const db = TestApp.database()
|
|
241
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
242
|
+
await expect(VerifiedTokens.create(db, { ...tokens[0]!, chainId: 42431 })).rejects.toThrowError(
|
|
243
|
+
VerifiedTokens.DuplicateAddressError,
|
|
244
|
+
)
|
|
261
245
|
})
|
|
262
246
|
|
|
263
247
|
test('rejects a case-insensitive duplicate symbol', async () => {
|
|
264
|
-
const
|
|
265
|
-
await VerifiedTokens.replace(
|
|
248
|
+
const db = TestApp.database()
|
|
249
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
266
250
|
await expect(
|
|
267
|
-
VerifiedTokens.create(
|
|
251
|
+
VerifiedTokens.create(db, { ...newToken, chainId: 42431, symbol: 'AUSD' }),
|
|
268
252
|
).rejects.toThrowError(VerifiedTokens.DuplicateSymbolError)
|
|
269
253
|
})
|
|
270
254
|
})
|
|
271
255
|
|
|
272
256
|
describe('patch', () => {
|
|
273
257
|
test('edits fields in place, preserving order', async () => {
|
|
274
|
-
const
|
|
275
|
-
await VerifiedTokens.replace(
|
|
276
|
-
const { snapshot, token } = await VerifiedTokens.patch(
|
|
258
|
+
const db = TestApp.database()
|
|
259
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
260
|
+
const { snapshot, token } = await VerifiedTokens.patch(db, 42431, tokens[1]!.address, {
|
|
277
261
|
name: 'Beta Euro',
|
|
278
262
|
})
|
|
279
263
|
expect(token.name).toBe('Beta Euro')
|
|
@@ -283,35 +267,35 @@ describe('patch', () => {
|
|
|
283
267
|
})
|
|
284
268
|
|
|
285
269
|
test('throws NotFoundError for an unknown address', async () => {
|
|
286
|
-
const
|
|
287
|
-
await VerifiedTokens.replace(
|
|
270
|
+
const db = TestApp.database()
|
|
271
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
288
272
|
await expect(
|
|
289
|
-
VerifiedTokens.patch(
|
|
273
|
+
VerifiedTokens.patch(db, 42431, newToken.address, { name: 'x' }),
|
|
290
274
|
).rejects.toThrowError(VerifiedTokens.NotFoundError)
|
|
291
275
|
})
|
|
292
276
|
|
|
293
277
|
test('rejects an If-Match version mismatch', async () => {
|
|
294
|
-
const
|
|
295
|
-
await VerifiedTokens.replace(
|
|
278
|
+
const db = TestApp.database()
|
|
279
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
296
280
|
await expect(
|
|
297
|
-
VerifiedTokens.patch(
|
|
281
|
+
VerifiedTokens.patch(db, 42431, tokens[0]!.address, { name: 'x' }, { ifMatch: 'stale' }),
|
|
298
282
|
).rejects.toThrowError(VerifiedTokens.VersionMismatchError)
|
|
299
283
|
})
|
|
300
284
|
})
|
|
301
285
|
|
|
302
286
|
describe('remove', () => {
|
|
303
287
|
test('removes a token and publishes', async () => {
|
|
304
|
-
const
|
|
305
|
-
await VerifiedTokens.replace(
|
|
306
|
-
const { snapshot } = await VerifiedTokens.remove(
|
|
288
|
+
const db = TestApp.database()
|
|
289
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
290
|
+
const { snapshot } = await VerifiedTokens.remove(db, 42431, tokens[0]!.address)
|
|
307
291
|
expect(snapshot.list.map((t) => t.symbol)).toEqual(['bEUR', 'cUSD'])
|
|
308
292
|
expect(snapshot.byAddress.has(tokens[0]!.address.toLowerCase())).toBe(false)
|
|
309
293
|
})
|
|
310
294
|
|
|
311
295
|
test('throws NotFoundError for an unknown address', async () => {
|
|
312
|
-
const
|
|
313
|
-
await VerifiedTokens.replace(
|
|
314
|
-
await expect(VerifiedTokens.remove(
|
|
296
|
+
const db = TestApp.database()
|
|
297
|
+
await VerifiedTokens.replace(db, 42431, tokens)
|
|
298
|
+
await expect(VerifiedTokens.remove(db, 42431, newToken.address)).rejects.toThrowError(
|
|
315
299
|
VerifiedTokens.NotFoundError,
|
|
316
300
|
)
|
|
317
301
|
})
|
|
@@ -326,8 +310,8 @@ describe('prime', () => {
|
|
|
326
310
|
version: 'primed',
|
|
327
311
|
})
|
|
328
312
|
VerifiedTokens.prime(42431, primed)
|
|
329
|
-
// Within the fresh window the primed snapshot is served with no
|
|
330
|
-
const snapshot = await VerifiedTokens.snapshot(context({ refreshMs: 60_000
|
|
313
|
+
// Within the fresh window the primed snapshot is served with no database read.
|
|
314
|
+
const snapshot = await VerifiedTokens.snapshot(context(unreachable(), { refreshMs: 60_000 }), 42431) // prettier-ignore
|
|
331
315
|
expect(snapshot).toBe(primed)
|
|
332
316
|
})
|
|
333
317
|
})
|