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
package/README.md
CHANGED
|
@@ -33,24 +33,46 @@ Install the package:
|
|
|
33
33
|
pnpm i tapimo
|
|
34
34
|
```
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
Stateful features (webhook subscriptions, verified tokens) live in Postgres.
|
|
37
|
+
Provision a database and apply migrations with the CLI:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
DATABASE_URL=postgresql://… tapimo admin migrate
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The API is composed from route groups (apps) imported from `tapimo/apps`.
|
|
44
|
+
Create a base app with `App.create` and mount the apps you want:
|
|
45
|
+
|
|
46
|
+
<!-- prettier-ignore -->
|
|
47
|
+
```ts
|
|
48
|
+
import { App, Db } from 'tapimo'
|
|
49
|
+
import { data } from 'tapimo/apps'
|
|
50
|
+
|
|
51
|
+
const app = App.create({
|
|
52
|
+
db: Db.postgres({ connectionString: process.env.DATABASE_URL }),
|
|
53
|
+
}).route('/', data())
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
| App | Purpose | Resources (non-exhaustive) |
|
|
57
|
+
| ------------ | ------------------------------ | -------------------------------------- |
|
|
58
|
+
| `data()` | Chain and indexed data reads | Blocks, transactions, tokens, webhooks |
|
|
59
|
+
| `relay()` | Wallet relay & fee sponsorship | Relay |
|
|
60
|
+
| `platform()` | Tenancy and access management | Orgs, projects, members, API keys |
|
|
61
|
+
|
|
62
|
+
The composed app exposes a Web `fetch` method, and `App.listener` adapts it
|
|
63
|
+
to a Node.js request listener, so you can serve it from any runtime or
|
|
38
64
|
framework:
|
|
39
65
|
|
|
40
66
|
<!-- prettier-ignore -->
|
|
41
67
|
```ts
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
app.use(handler.listener) // Express
|
|
51
|
-
app.use((c) => handler.fetch(c.req.raw)) // Hono
|
|
52
|
-
export const GET = handler.fetch // Next.js
|
|
53
|
-
export const POST = handler.fetch // Next.js
|
|
68
|
+
createServer(App.listener(app)) // Node.js
|
|
69
|
+
Bun.serve({ fetch: app.fetch }) // Bun
|
|
70
|
+
Deno.serve({ fetch: app.fetch }) // Deno
|
|
71
|
+
server.all('*', (c) => app.fetch(c.request)) // Elysia
|
|
72
|
+
server.use(App.listener(app)) // Express
|
|
73
|
+
server.use((c) => app.fetch(c.req.raw)) // Hono
|
|
74
|
+
export const GET = app.fetch // Next.js
|
|
75
|
+
export const POST = app.fetch // Next.js
|
|
54
76
|
```
|
|
55
77
|
|
|
56
78
|
## Typed Client
|
|
@@ -114,6 +136,6 @@ token.symbol
|
|
|
114
136
|
pnpm install # Install dependencies
|
|
115
137
|
pnpm test # Run tests against live resources (like indexer)
|
|
116
138
|
pnpm test:local # Run tests against local resources
|
|
117
|
-
pnpm
|
|
118
|
-
pnpm
|
|
139
|
+
pnpm dev # Run Postgres plus the API and admin Workers
|
|
140
|
+
pnpm api:seed # Seed local KV with curated verified tokens from seeds/
|
|
119
141
|
```
|
package/dist/ApiKey.d.ts
CHANGED
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The resolved API-key resource and the reusable credential primitives
|
|
3
|
-
* source backend shares.
|
|
2
|
+
* The resolved API-key resource and the reusable credential primitives.
|
|
4
3
|
*
|
|
5
4
|
* Holds the resolved {@link ApiKey} type and its {@link schema}, the token
|
|
6
|
-
* format/generation ({@link generateToken}/{@link generateId}), the
|
|
7
|
-
* derivation ({@link keyFor}/{@link recordPrefix}), and log
|
|
8
|
-
* These live here — not in
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* `
|
|
13
|
-
* persistence.
|
|
5
|
+
* format/generation ({@link generateToken}/{@link generateId}), the
|
|
6
|
+
* storage-key derivation ({@link keyFor}/{@link recordPrefix}), and log
|
|
7
|
+
* {@link redact}ion. These live here — not in the persistence module — so
|
|
8
|
+
* issued and parsed credentials are byte-identical and cannot drift. The
|
|
9
|
+
* persisted record/mint-input shapes and provisioning (mint/list/revoke) live
|
|
10
|
+
* in `./ApiKeys.js`, which composes these primitives with the app's KV state
|
|
11
|
+
* store (`App.create({ kv })`).
|
|
14
12
|
*/
|
|
15
13
|
import * as z from 'zod/mini';
|
|
16
14
|
/** Zod schemas owned by the API-key module. */
|
|
17
15
|
export declare namespace schema {
|
|
18
16
|
/**
|
|
19
17
|
* Canonical schema for resolved API-key metadata, and the single source of
|
|
20
|
-
* truth for the {@link ApiKey} type. `
|
|
18
|
+
* truth for the {@link ApiKey} type. `ApiKeys` derives its persisted
|
|
21
19
|
* `Record` and `MintInput` schemas from this one, so the resolved and
|
|
22
20
|
* persisted shapes cannot drift.
|
|
23
21
|
*/
|
|
@@ -29,6 +27,7 @@ export declare namespace schema {
|
|
|
29
27
|
id: z.ZodMiniString<string>;
|
|
30
28
|
name: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
31
29
|
orgId: z.ZodMiniString<string>;
|
|
30
|
+
projectId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
32
31
|
rateLimits: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
|
|
33
32
|
perMinute: z.ZodMiniNumber<number>;
|
|
34
33
|
}, z.core.$strip>>>;
|
|
@@ -36,6 +35,8 @@ export declare namespace schema {
|
|
|
36
35
|
"*": "*";
|
|
37
36
|
"data:read": "data:read";
|
|
38
37
|
"indexer:query": "indexer:query";
|
|
38
|
+
"rpc-relay:read": "rpc-relay:read";
|
|
39
|
+
"rpc-relay:sponsor": "rpc-relay:sponsor";
|
|
39
40
|
"webhooks:read": "webhooks:read";
|
|
40
41
|
"webhooks:write": "webhooks:write";
|
|
41
42
|
}>>>;
|
|
@@ -60,6 +61,8 @@ export declare function generateToken(environment?: ApiKey['environment']): stri
|
|
|
60
61
|
export declare function generateId(): string;
|
|
61
62
|
/** Storage-key prefix under which key records are persisted, keyed by token hash. */
|
|
62
63
|
export declare const recordPrefix = "apikey:";
|
|
64
|
+
/** Hashes a plaintext token to its at-rest lookup hash (lowercase hex, no `0x`). */
|
|
65
|
+
export declare function hash(token: string): string;
|
|
63
66
|
/** Storage key under which the record for a plaintext token is persisted. */
|
|
64
67
|
export declare function keyFor(token: string): string;
|
|
65
68
|
//# sourceMappingURL=ApiKey.d.ts.map
|
package/dist/ApiKey.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiKey.d.ts","sourceRoot":"","sources":["../src/ApiKey.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ApiKey.d.ts","sourceRoot":"","sources":["../src/ApiKey.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAK7B,+CAA+C;AAC/C,yBAAiB,MAAM,CAAC;IACtB;;;;;OAKG;IACI,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;qBAkBjB,CAAA;CACH;AAED,mDAAmD;AACnD,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAA;AAEnD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI3C;AAiCD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,WAAW,GAAE,MAAM,CAAC,aAAa,CAAgB,GAAG,MAAM,CAEvF;AAED,mDAAmD;AACnD,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,qFAAqF;AACrF,eAAO,MAAM,YAAY,YAAY,CAAA;AAErC,oFAAoF;AACpF,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED,6EAA6E;AAC7E,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE5C"}
|
package/dist/ApiKey.js
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The resolved API-key resource and the reusable credential primitives
|
|
3
|
-
* source backend shares.
|
|
2
|
+
* The resolved API-key resource and the reusable credential primitives.
|
|
4
3
|
*
|
|
5
4
|
* Holds the resolved {@link ApiKey} type and its {@link schema}, the token
|
|
6
|
-
* format/generation ({@link generateToken}/{@link generateId}), the
|
|
7
|
-
* derivation ({@link keyFor}/{@link recordPrefix}), and log
|
|
8
|
-
* These live here — not in
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* `
|
|
13
|
-
* persistence.
|
|
5
|
+
* format/generation ({@link generateToken}/{@link generateId}), the
|
|
6
|
+
* storage-key derivation ({@link keyFor}/{@link recordPrefix}), and log
|
|
7
|
+
* {@link redact}ion. These live here — not in the persistence module — so
|
|
8
|
+
* issued and parsed credentials are byte-identical and cannot drift. The
|
|
9
|
+
* persisted record/mint-input shapes and provisioning (mint/list/revoke) live
|
|
10
|
+
* in `./ApiKeys.js`, which composes these primitives with the app's KV state
|
|
11
|
+
* store (`App.create({ kv })`).
|
|
14
12
|
*/
|
|
15
13
|
import { nanoid } from 'nanoid';
|
|
16
14
|
import { Hash, Hex } from 'ox';
|
|
@@ -22,7 +20,7 @@ export var schema;
|
|
|
22
20
|
(function (schema) {
|
|
23
21
|
/**
|
|
24
22
|
* Canonical schema for resolved API-key metadata, and the single source of
|
|
25
|
-
* truth for the {@link ApiKey} type. `
|
|
23
|
+
* truth for the {@link ApiKey} type. `ApiKeys` derives its persisted
|
|
26
24
|
* `Record` and `MintInput` schemas from this one, so the resolved and
|
|
27
25
|
* persisted shapes cannot drift.
|
|
28
26
|
*/
|
|
@@ -33,6 +31,7 @@ export var schema;
|
|
|
33
31
|
id: z.string().check(z.describe('Stable key id.')),
|
|
34
32
|
name: z.optional(z.string()).check(z.describe('Human-readable key name.')),
|
|
35
33
|
orgId: z.string().check(z.describe('Owning organization id.')),
|
|
34
|
+
projectId: z.optional(z.string()).check(z.describe('Owning project id (`prj_…`).')),
|
|
36
35
|
rateLimits: z
|
|
37
36
|
.optional(z.record(z.string(), RateLimit.schema.Limit))
|
|
38
37
|
.check(z.describe("Per-key quota overrides keyed by quota scope. The reserved '*' entry is the per-key default; any other key overrides that scope. Omit to inherit server config. The most specific match wins.")),
|
|
@@ -95,7 +94,7 @@ export function generateId() {
|
|
|
95
94
|
/** Storage-key prefix under which key records are persisted, keyed by token hash. */
|
|
96
95
|
export const recordPrefix = 'apikey:';
|
|
97
96
|
/** Hashes a plaintext token to its at-rest lookup hash (lowercase hex, no `0x`). */
|
|
98
|
-
function hash(token) {
|
|
97
|
+
export function hash(token) {
|
|
99
98
|
return Hash.sha256(Hex.fromString(token)).slice(2);
|
|
100
99
|
}
|
|
101
100
|
/** Storage key under which the record for a plaintext token is persisted. */
|
package/dist/ApiKey.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiKey.js","sourceRoot":"","sources":["../src/ApiKey.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ApiKey.js","sourceRoot":"","sources":["../src/ApiKey.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API-key persistence over the app's KV state store (`App.create({ kv })`).
|
|
3
|
+
*
|
|
4
|
+
* Records are keyed by token hash (`ApiKey.keyFor`) — the plaintext token is
|
|
5
|
+
* never stored — and validated against the scope catalog on read; unknown,
|
|
6
|
+
* corrupt, expired, or invalid records resolve to `null`. An `id → recordKey`
|
|
7
|
+
* index makes revoke-by-id O(1). The persisted {@link Record}/{@link
|
|
8
|
+
* MintInput} shapes live here (derived from `ApiKey.schema` so they cannot
|
|
9
|
+
* drift from the resolved shape), while the shared credential primitives
|
|
10
|
+
* (token format/generation, storage-key derivation, redaction) live in
|
|
11
|
+
* `./ApiKey.js`.
|
|
12
|
+
*/
|
|
13
|
+
import * as z from 'zod/mini';
|
|
14
|
+
import * as ApiKey from './ApiKey.js';
|
|
15
|
+
import type * as Store from './internal/Store.js';
|
|
16
|
+
/** Zod schemas owned by the API-keys module. */
|
|
17
|
+
export declare namespace schema {
|
|
18
|
+
/**
|
|
19
|
+
* Fields accepted when minting a key, and the single source of truth for the
|
|
20
|
+
* {@link MintInput} type and `mint` validation. Derived from the resolved
|
|
21
|
+
* `ApiKey.schema` (minus the generated `id`) so the scope vocabulary stays in
|
|
22
|
+
* lockstep with the resolved shape.
|
|
23
|
+
*/
|
|
24
|
+
const MintInput: z.ZodMiniObject<{
|
|
25
|
+
environment: z.ZodMiniDefault<z.ZodMiniEnum<{
|
|
26
|
+
production: "production";
|
|
27
|
+
sandbox: "sandbox";
|
|
28
|
+
}>>;
|
|
29
|
+
name: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
30
|
+
projectId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
31
|
+
rateLimits: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
|
|
32
|
+
perMinute: z.ZodMiniNumber<number>;
|
|
33
|
+
}, z.core.$strip>>>;
|
|
34
|
+
scopes: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniEnum<{
|
|
35
|
+
"*": "*";
|
|
36
|
+
"data:read": "data:read";
|
|
37
|
+
"indexer:query": "indexer:query";
|
|
38
|
+
"rpc-relay:read": "rpc-relay:read";
|
|
39
|
+
"rpc-relay:sponsor": "rpc-relay:sponsor";
|
|
40
|
+
"webhooks:read": "webhooks:read";
|
|
41
|
+
"webhooks:write": "webhooks:write";
|
|
42
|
+
}>>>;
|
|
43
|
+
createdBy: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
44
|
+
expiresAt: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
45
|
+
orgId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
46
|
+
}, z.core.$strip>;
|
|
47
|
+
/**
|
|
48
|
+
* A persisted API-key record: the resolved `ApiKey.schema` plus
|
|
49
|
+
* persistence/display fields. Extending the resolved schema keeps the resolved
|
|
50
|
+
* and persisted shapes in lockstep.
|
|
51
|
+
*/
|
|
52
|
+
const Record: z.ZodMiniObject<{
|
|
53
|
+
environment: z.ZodMiniDefault<z.ZodMiniEnum<{
|
|
54
|
+
production: "production";
|
|
55
|
+
sandbox: "sandbox";
|
|
56
|
+
}>>;
|
|
57
|
+
id: z.ZodMiniString<string>;
|
|
58
|
+
name: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
59
|
+
orgId: z.ZodMiniString<string>;
|
|
60
|
+
projectId: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
61
|
+
rateLimits: z.ZodMiniOptional<z.ZodMiniRecord<z.ZodMiniString<string>, z.ZodMiniObject<{
|
|
62
|
+
perMinute: z.ZodMiniNumber<number>;
|
|
63
|
+
}, z.core.$strip>>>;
|
|
64
|
+
scopes: z.ZodMiniReadonly<z.ZodMiniArray<z.ZodMiniEnum<{
|
|
65
|
+
"*": "*";
|
|
66
|
+
"data:read": "data:read";
|
|
67
|
+
"indexer:query": "indexer:query";
|
|
68
|
+
"rpc-relay:read": "rpc-relay:read";
|
|
69
|
+
"rpc-relay:sponsor": "rpc-relay:sponsor";
|
|
70
|
+
"webhooks:read": "webhooks:read";
|
|
71
|
+
"webhooks:write": "webhooks:write";
|
|
72
|
+
}>>>;
|
|
73
|
+
createdAt: z.ZodMiniString<string>;
|
|
74
|
+
createdBy: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
75
|
+
expiresAt: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
76
|
+
tokenLast4: z.ZodMiniString<string>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* A durable API-key record as persisted. A superset of the resolved
|
|
81
|
+
* `ApiKey.ApiKey` with provisioning/display metadata. The plaintext token is
|
|
82
|
+
* never stored — records are keyed by its hash (`ApiKey.keyFor`) and carry only
|
|
83
|
+
* `tokenLast4` for display.
|
|
84
|
+
*/
|
|
85
|
+
export type Record = z.output<typeof schema.Record>;
|
|
86
|
+
/**
|
|
87
|
+
* Fields accepted when minting a key via {@link mint}. Uses the schema's
|
|
88
|
+
* *input* type so defaulted fields (e.g. `environment`) are optional for
|
|
89
|
+
* callers — the default is applied during `mint`'s validation.
|
|
90
|
+
*/
|
|
91
|
+
export type MintInput = z.input<typeof schema.MintInput>;
|
|
92
|
+
/** Result of {@link mint}: the persisted record and its one-time token. */
|
|
93
|
+
export type MintResult = {
|
|
94
|
+
/** The persisted key record (metadata only — never the token). */
|
|
95
|
+
record: Record;
|
|
96
|
+
/** The plaintext token, shown once and unrecoverable afterward. */
|
|
97
|
+
token: string;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Mints a key: validates the input (e.g. rejects an unknown scope at the write
|
|
101
|
+
* boundary), persists its hashed record, and returns the record plus the
|
|
102
|
+
* one-time plaintext token (shown once, unrecoverable afterward).
|
|
103
|
+
*
|
|
104
|
+
* @param state - The KV state store holding key records.
|
|
105
|
+
* @param input - The key to mint.
|
|
106
|
+
* @returns The persisted record and its one-time token.
|
|
107
|
+
*/
|
|
108
|
+
export declare function mint(state: Store.State, input: MintInput): Promise<MintResult>;
|
|
109
|
+
/**
|
|
110
|
+
* Resolves a plaintext API key token to its metadata, or `null`. Expiry is
|
|
111
|
+
* enforced on read — not just via the store's native TTL — so it holds on
|
|
112
|
+
* backends that evict lazily and regardless of TTL granularity.
|
|
113
|
+
*
|
|
114
|
+
* @param state - The KV state store holding key records.
|
|
115
|
+
* @param token - The presented plaintext token.
|
|
116
|
+
* @returns The resolved key metadata, or `null`.
|
|
117
|
+
*/
|
|
118
|
+
export declare function resolve(state: Store.State, token: string): Promise<ApiKey.ApiKey | null>;
|
|
119
|
+
/**
|
|
120
|
+
* Reads a key record by id (metadata only — never the token), or `null`.
|
|
121
|
+
*
|
|
122
|
+
* @param state - The KV state store holding key records.
|
|
123
|
+
* @param id - The key id (`key_…`).
|
|
124
|
+
* @returns The record, or `null`.
|
|
125
|
+
*/
|
|
126
|
+
export declare function get(state: Store.State, id: string): Promise<Record | null>;
|
|
127
|
+
/**
|
|
128
|
+
* Lists key records (metadata only — never tokens), newest first. Expired or
|
|
129
|
+
* catalog-invalid records are skipped.
|
|
130
|
+
*
|
|
131
|
+
* @param state - The KV state store holding key records.
|
|
132
|
+
* @param options - Optional owner filter.
|
|
133
|
+
* @returns The records.
|
|
134
|
+
*/
|
|
135
|
+
export declare function list(state: Store.State, options?: list.Options): Promise<readonly Record[]>;
|
|
136
|
+
export declare namespace list {
|
|
137
|
+
/** Options for {@link list}. */
|
|
138
|
+
type Options = {
|
|
139
|
+
/** Restrict results to keys owned by this organization. */
|
|
140
|
+
orgId?: string | undefined;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Lists an organization's key records through the org index (no full scan),
|
|
145
|
+
* newest first. Dangling index entries (revoked or expired records) are
|
|
146
|
+
* skipped and lazily deleted.
|
|
147
|
+
*
|
|
148
|
+
* @param state - The KV state store holding key records.
|
|
149
|
+
* @param orgId - The owning organization id (`org_…`).
|
|
150
|
+
* @param options - Optional project filter.
|
|
151
|
+
* @returns The records.
|
|
152
|
+
*/
|
|
153
|
+
export declare function listByOrg(state: Store.State, orgId: string, options?: listByOrg.Options): Promise<readonly Record[]>;
|
|
154
|
+
export declare namespace listByOrg {
|
|
155
|
+
/** Options for {@link listByOrg}. */
|
|
156
|
+
type Options = {
|
|
157
|
+
/** Restrict results to keys attributed to this project. */
|
|
158
|
+
projectId?: string | undefined;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Revokes a key by id, deleting its record and index entries.
|
|
163
|
+
*
|
|
164
|
+
* @param state - The KV state store holding key records.
|
|
165
|
+
* @param id - The key id (`key_…`).
|
|
166
|
+
* @returns Whether a matching record was deleted.
|
|
167
|
+
*/
|
|
168
|
+
export declare function revoke(state: Store.State, id: string): Promise<boolean>;
|
|
169
|
+
/**
|
|
170
|
+
* Re-attributes a key to an organization and/or project, rewriting its record
|
|
171
|
+
* in place (same token hash) and moving the org index entry when the org
|
|
172
|
+
* changes. The backfill path for legacy keys.
|
|
173
|
+
*
|
|
174
|
+
* @param state - The KV state store holding key records.
|
|
175
|
+
* @param id - The key id (`key_…`).
|
|
176
|
+
* @param input - The attribution to apply.
|
|
177
|
+
* @returns The updated record, or `null` when the key is absent.
|
|
178
|
+
*/
|
|
179
|
+
export declare function attribute(state: Store.State, id: string, input: attribute.Input): Promise<Record | null>;
|
|
180
|
+
export declare namespace attribute {
|
|
181
|
+
/** Attribution applied by {@link attribute}; omitted fields keep their current value. */
|
|
182
|
+
type Input = {
|
|
183
|
+
/** New owning organization id (`org_…`). */
|
|
184
|
+
orgId?: string | undefined;
|
|
185
|
+
/** New owning project id (`prj_…`). */
|
|
186
|
+
projectId?: string | undefined;
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Rebuilds the `id` and `org` index entries for every stored record — the
|
|
191
|
+
* run-once backfill making legacy keys visible to org-scoped listing. Records
|
|
192
|
+
* themselves are never modified, so existing tokens keep resolving.
|
|
193
|
+
*
|
|
194
|
+
* @param state - The KV state store holding key records.
|
|
195
|
+
* @returns Scanned and indexed record counts.
|
|
196
|
+
*/
|
|
197
|
+
export declare function backfill(state: Store.State): Promise<backfill.Result>;
|
|
198
|
+
export declare namespace backfill {
|
|
199
|
+
/** Result of {@link backfill}. */
|
|
200
|
+
type Result = {
|
|
201
|
+
/** Records whose index entries were written. */
|
|
202
|
+
indexed: number;
|
|
203
|
+
/** Stored records scanned (including invalid or expired ones, skipped). */
|
|
204
|
+
scanned: number;
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=ApiKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiKeys.d.ts","sourceRoot":"","sources":["../src/ApiKeys.ts"],"names":[],"mappings":"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"}
|