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
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { TxEnvelopeTempo } from 'ox/tempo';
|
|
2
|
+
import { TransactionReceiptNotFoundError, } from 'viem';
|
|
3
|
+
import { getTransactionReceipt } from 'viem/actions';
|
|
4
|
+
import * as Db from '../../db/Db.js';
|
|
5
|
+
import * as SponsoredTransactions from '../../db/tables/sponsoredTransactions.js';
|
|
6
|
+
import * as Tidx from '../../internal/Tidx.js';
|
|
7
|
+
import * as Viem from '../../internal/Viem.js';
|
|
8
|
+
/**
|
|
9
|
+
* Runs one finalization pass over pending sponsored transactions: rows with a
|
|
10
|
+
* receipt finalize with the actual fee (`gasUsed × effectiveGasPrice`, in
|
|
11
|
+
* fee-token base units); rows still unmined past the pending TTL fail, as do
|
|
12
|
+
* hash-less fill intents the TTL outlives. Rows whose receipt lookup errors
|
|
13
|
+
* persist past the error TTL fail so they cannot monopolize every batch.
|
|
14
|
+
*
|
|
15
|
+
* @param db - The database holding `sponsored_transactions`.
|
|
16
|
+
* @param options - Finalization options.
|
|
17
|
+
* @returns Counters for the pass.
|
|
18
|
+
*/
|
|
19
|
+
export async function finalize(db, options) {
|
|
20
|
+
const { batchSize = 100, getClient, now = () => new Date(), pendingTtlMs = 3_600_000, receiptErrorTtlMs = 86_400_000, } = options;
|
|
21
|
+
const rows = await SponsoredTransactions.listPending(db, { limit: batchSize });
|
|
22
|
+
const result = { failed: 0, finalized: 0, pending: 0 };
|
|
23
|
+
for (const row of rows) {
|
|
24
|
+
// Fill intents carry no hash until reconciliation matches them on-chain;
|
|
25
|
+
// here only the TTL can settle them.
|
|
26
|
+
if (row.transactionHash === null) {
|
|
27
|
+
if (Date.parse(row.createdAt) + pendingTtlMs <= now().getTime()) {
|
|
28
|
+
await SponsoredTransactions.fail(db, row.id, now().toISOString());
|
|
29
|
+
result.failed++;
|
|
30
|
+
}
|
|
31
|
+
else
|
|
32
|
+
result.pending++;
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
let receipt;
|
|
36
|
+
try {
|
|
37
|
+
receipt = await getTransactionReceipt(getClient(row.chainId), {
|
|
38
|
+
hash: row.transactionHash,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
// Unmined transactions surface as a typed not-found; let the TTL decide.
|
|
43
|
+
if (error instanceof TransactionReceiptNotFoundError)
|
|
44
|
+
receipt = null;
|
|
45
|
+
else {
|
|
46
|
+
if (Date.parse(row.createdAt) + receiptErrorTtlMs <= now().getTime()) {
|
|
47
|
+
await SponsoredTransactions.fail(db, row.id, now().toISOString());
|
|
48
|
+
result.failed++;
|
|
49
|
+
}
|
|
50
|
+
else
|
|
51
|
+
result.pending++;
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (receipt) {
|
|
56
|
+
// A reverted transaction still finalizes: the fee payer paid its fees.
|
|
57
|
+
const feeAmount = receipt.gasUsed * receipt.effectiveGasPrice;
|
|
58
|
+
await SponsoredTransactions.finalize(db, row.id, {
|
|
59
|
+
feeAmount: feeAmount.toString(),
|
|
60
|
+
finalizedAt: now().toISOString(),
|
|
61
|
+
});
|
|
62
|
+
result.finalized++;
|
|
63
|
+
}
|
|
64
|
+
else if (Date.parse(row.createdAt) + pendingTtlMs <= now().getTime()) {
|
|
65
|
+
await SponsoredTransactions.fail(db, row.id, now().toISOString());
|
|
66
|
+
result.failed++;
|
|
67
|
+
}
|
|
68
|
+
else
|
|
69
|
+
result.pending++;
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Runs one reconciliation pass over pending fill intents (rows with no
|
|
75
|
+
* transaction hash): fetches the fee payer's recent on-chain transactions
|
|
76
|
+
* from TIDX, recomputes each candidate's fee-payer sign payload, and fills
|
|
77
|
+
* matching intents' hashes so the receipt pass can finalize them. Query or
|
|
78
|
+
* candidate errors leave intents for the next pass.
|
|
79
|
+
*
|
|
80
|
+
* @param db - The database holding `sponsored_transactions`.
|
|
81
|
+
* @param options - Reconciliation options.
|
|
82
|
+
* @returns Counters for the pass.
|
|
83
|
+
*/
|
|
84
|
+
export async function reconcile(db, options) {
|
|
85
|
+
const { batchSize = 100, candidateCap = 500, failedIntentTtlMs = 86_400_000, feePayer, getClient, getTidx, skewMs = 120_000, } = options;
|
|
86
|
+
const intents = await SponsoredTransactions.listIntents(db, {
|
|
87
|
+
failedSince: new Date(Date.now() - failedIntentTtlMs).toISOString(),
|
|
88
|
+
limit: batchSize,
|
|
89
|
+
});
|
|
90
|
+
const result = { matched: 0, scanned: 0 };
|
|
91
|
+
if (intents.length === 0)
|
|
92
|
+
return result;
|
|
93
|
+
const chains = new Map();
|
|
94
|
+
for (const intent of intents)
|
|
95
|
+
chains.set(intent.chainId, [...(chains.get(intent.chainId) ?? []), intent]); // prettier-ignore
|
|
96
|
+
for (const [chainId, rows] of chains) {
|
|
97
|
+
const bySignPayload = new Map(rows.map((row) => [row.signPayload, row]));
|
|
98
|
+
// The intent set bounds the scan window: no cursor state to persist.
|
|
99
|
+
const since = new Date(Math.min(...rows.map((row) => Date.parse(row.createdAt))) - skewMs).toISOString();
|
|
100
|
+
let candidates;
|
|
101
|
+
try {
|
|
102
|
+
// Dynamic filter values; the tidx client's query type wants literals.
|
|
103
|
+
const fetched = await getTidx(chainId).fetch({
|
|
104
|
+
chainId,
|
|
105
|
+
query: `SELECT hash, "from" FROM txs WHERE fee_payer = '${feePayer.toLowerCase()}' AND block_timestamp >= '${since}' ORDER BY block_timestamp ASC LIMIT ${candidateCap}`,
|
|
106
|
+
});
|
|
107
|
+
candidates = fetched.rows;
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Indexer outage must not fail intents; retry on the next pass.
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
for (const candidate of candidates) {
|
|
114
|
+
if (bySignPayload.size === 0)
|
|
115
|
+
break;
|
|
116
|
+
const hash = candidate['hash'];
|
|
117
|
+
const sender = candidate['from'];
|
|
118
|
+
if (!hash || !sender)
|
|
119
|
+
continue;
|
|
120
|
+
result.scanned++;
|
|
121
|
+
try {
|
|
122
|
+
const serialized = await getRawTransaction(getClient(chainId), hash);
|
|
123
|
+
if (!serialized?.startsWith(TxEnvelopeTempo.serializedType))
|
|
124
|
+
continue;
|
|
125
|
+
const signPayload = TxEnvelopeTempo.getFeePayerSignPayload(TxEnvelopeTempo.deserialize(serialized), { sender });
|
|
126
|
+
const intent = bySignPayload.get(signPayload);
|
|
127
|
+
if (!intent)
|
|
128
|
+
continue;
|
|
129
|
+
await SponsoredTransactions.assignTransactionHash(db, intent.id, hash);
|
|
130
|
+
bySignPayload.delete(signPayload);
|
|
131
|
+
result.matched++;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// Unresolvable candidate (lookup error, malformed envelope): skip it.
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Fetches a mined transaction's canonical envelope bytes.
|
|
142
|
+
* `eth_getRawTransactionByHash` is a node extension absent from viem's typed
|
|
143
|
+
* RPC schema, hence the request-fn narrowing.
|
|
144
|
+
*/
|
|
145
|
+
function getRawTransaction(client, hash) {
|
|
146
|
+
return client.request({ method: 'eth_getRawTransactionByHash', params: [hash] });
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Builds a scheduled sponsorship finalizer bound to a database and RPC config.
|
|
150
|
+
* A host runtime drives {@link createFinalizer.Finalizer.tick} on a timer (a
|
|
151
|
+
* Cloudflare `scheduled` cron handler, a self-host `setInterval`, …); each
|
|
152
|
+
* tick reconciles fill intents (when `feePayer` + `tidx` are configured) and
|
|
153
|
+
* runs one {@link finalize} pass, with memoized per-chain clients.
|
|
154
|
+
*/
|
|
155
|
+
export function createFinalizer(options) {
|
|
156
|
+
const clients = new Map();
|
|
157
|
+
const getClient = (chainId) => {
|
|
158
|
+
let client = clients.get(chainId);
|
|
159
|
+
if (!client) {
|
|
160
|
+
client = Viem.getClient({ chainId: chainId, rpc: options.rpc });
|
|
161
|
+
clients.set(chainId, client);
|
|
162
|
+
}
|
|
163
|
+
return client;
|
|
164
|
+
};
|
|
165
|
+
const getTidx = options.tidx
|
|
166
|
+
? Tidx.createGetClient({ defaultChainId: options.defaultChainId, tidx: options.tidx })
|
|
167
|
+
: undefined;
|
|
168
|
+
const feePayer = options.feePayer;
|
|
169
|
+
return {
|
|
170
|
+
async tick() {
|
|
171
|
+
// Resolve per tick so Workers factories build a fresh Hyperdrive-pooled
|
|
172
|
+
// connection each run.
|
|
173
|
+
const db = Db.get(options.db);
|
|
174
|
+
// Reconcile first so freshly matched intents finalize in the same tick.
|
|
175
|
+
const reconciled = feePayer && getTidx
|
|
176
|
+
? await reconcile(db, {
|
|
177
|
+
batchSize: options.batchSize,
|
|
178
|
+
feePayer,
|
|
179
|
+
getClient,
|
|
180
|
+
getTidx: (chainId) => getTidx(chainId),
|
|
181
|
+
})
|
|
182
|
+
: { matched: 0, scanned: 0 };
|
|
183
|
+
const finalized = await finalize(db, {
|
|
184
|
+
batchSize: options.batchSize,
|
|
185
|
+
getClient,
|
|
186
|
+
now: options.now,
|
|
187
|
+
pendingTtlMs: options.pendingTtlMs,
|
|
188
|
+
});
|
|
189
|
+
return { ...finalized, ...reconciled };
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=Sponsorships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sponsorships.js","sourceRoot":"","sources":["../../../src/apps/relay/Sponsorships.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/apps/relay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/apps/relay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import { Cli as incur_Cli, Fetch, type Openapi } from 'incur';
|
|
2
|
-
/**
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Creates an incur CLI backed by a hosted Tempo API, plus the super admin
|
|
4
|
+
* commands (`<cli> admin …`).
|
|
5
|
+
*/
|
|
6
|
+
export declare function from(url: string | URL, options?: from.Options): incur_Cli.Cli<{
|
|
7
|
+
[x: `${string} ${string} ${string}`]: {
|
|
8
|
+
args: {};
|
|
9
|
+
options: {
|
|
10
|
+
databaseUrl?: string | undefined;
|
|
11
|
+
dbSchema?: string | undefined;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
}, undefined, undefined, undefined>;
|
|
4
15
|
export declare namespace from {
|
|
5
16
|
/** Options for creating a Tempo API CLI from a hosted API. */
|
|
6
17
|
type Options = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAI7D;;;GAGG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE,IAAI,CAAC,OAAY;;;;;;;;oCAkBjE;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,OAAO,GAAG;QACb,uBAAuB;QACvB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,gBAAgB;QAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,wEAAwE;QACxE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,SAAS,CAAA;QAC3C,4EAA4E;QAC5E,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAA;QAC1C,4CAA4C;QAC5C,OAAO,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,SAAS,CAAA;QAC/C,mBAAmB;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF"}
|
package/dist/cli/Cli.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Cli as incur_Cli, Fetch } from 'incur';
|
|
2
|
+
import * as Admin from './commands/admin.js';
|
|
3
|
+
/**
|
|
4
|
+
* Creates an incur CLI backed by a hosted Tempo API, plus the super admin
|
|
5
|
+
* commands (`<cli> admin …`).
|
|
6
|
+
*/
|
|
7
|
+
export function from(url, options = {}) {
|
|
8
|
+
const { description = 'Tempo API CLI', name = 'tapimo', openapi = 'openapi.json', request, version = '0.0.0', } = options;
|
|
9
|
+
return incur_Cli
|
|
10
|
+
.create(name, {
|
|
11
|
+
description,
|
|
12
|
+
fetch: Fetch.fromRequest(url, request),
|
|
13
|
+
openapi,
|
|
14
|
+
openapiConfig: options.openapiConfig ?? { mode: 'namespace' },
|
|
15
|
+
version,
|
|
16
|
+
})
|
|
17
|
+
.command(Admin.admin);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../../src/cli/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAgB,MAAM,OAAO,CAAA;AAE7D,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,GAAiB,EAAE,OAAO,GAAiB,EAAE;IAChE,MAAM,EACJ,WAAW,GAAG,eAAe,EAC7B,IAAI,GAAG,QAAQ,EACf,OAAO,GAAG,cAAc,EACxB,OAAO,EACP,OAAO,GAAG,OAAO,GAClB,GAAG,OAAO,CAAA;IAEX,OAAO,SAAS;SACb,MAAM,CAAC,IAAI,EAAE;QACZ,WAAW;QACX,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;QACtC,OAAO;QACP,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;QAC7D,OAAO;KACR,CAAC;SACD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":""}
|
package/dist/cli/bin.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B,MAAM,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Cli as incur_Cli } from 'incur';
|
|
2
|
+
/**
|
|
3
|
+
* Super admin commands that run against a deployment's infrastructure rather
|
|
4
|
+
* than the hosted API (database migrations, …).
|
|
5
|
+
*/
|
|
6
|
+
export declare const admin: incur_Cli.Cli<{
|
|
7
|
+
[x: `${string} ${string}`]: {
|
|
8
|
+
args: {};
|
|
9
|
+
options: {
|
|
10
|
+
databaseUrl?: string | undefined;
|
|
11
|
+
dbSchema?: string | undefined;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
}, undefined, undefined, undefined>;
|
|
15
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAK,MAAM,OAAO,CAAA;AAmD3C;;;GAGG;AACH,eAAO,MAAM,KAAK;;;;;;;;mCAIC,CAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Cli as incur_Cli, z } from 'incur';
|
|
2
|
+
import * as Db from '../../db/Db.js';
|
|
3
|
+
/**
|
|
4
|
+
* Applies pending Postgres migrations, connecting directly via
|
|
5
|
+
* `--database-url` or `DATABASE_URL` (never through Hyperdrive — the migrate
|
|
6
|
+
* advisory lock needs session semantics); `--db-schema` scopes the session.
|
|
7
|
+
*/
|
|
8
|
+
const migrate = incur_Cli.create('migrate', {
|
|
9
|
+
description: 'Apply pending database migrations.',
|
|
10
|
+
env: z.object({
|
|
11
|
+
DATABASE_URL: z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Postgres connection string. Used when --database-url is omitted.'),
|
|
15
|
+
}),
|
|
16
|
+
options: z.object({
|
|
17
|
+
databaseUrl: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe('Postgres connection string. Overrides DATABASE_URL.'),
|
|
21
|
+
dbSchema: z.string().optional().describe('Postgres schema to create and scope the session to.'),
|
|
22
|
+
}),
|
|
23
|
+
async run(c) {
|
|
24
|
+
const connectionString = c.options.databaseUrl ?? c.env.DATABASE_URL;
|
|
25
|
+
if (!connectionString)
|
|
26
|
+
return c.error({
|
|
27
|
+
code: 'missing_database_url',
|
|
28
|
+
message: 'Set --database-url or DATABASE_URL to the Postgres connection string.',
|
|
29
|
+
});
|
|
30
|
+
const db = Db.postgres({
|
|
31
|
+
connectionString,
|
|
32
|
+
...(c.options.dbSchema ? { schema: c.options.dbSchema } : {}),
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
await db.migrate();
|
|
36
|
+
return { migrated: true };
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
/* v8 ignore next */
|
|
40
|
+
const message = error instanceof Error ? error.message : 'Migration failed.';
|
|
41
|
+
return c.error({
|
|
42
|
+
code: 'migrate_failed',
|
|
43
|
+
message,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
await db.close();
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
/**
|
|
52
|
+
* Super admin commands that run against a deployment's infrastructure rather
|
|
53
|
+
* than the hosted API (database migrations, …).
|
|
54
|
+
*/
|
|
55
|
+
export const admin = incur_Cli
|
|
56
|
+
.create('admin', {
|
|
57
|
+
description: 'Super admin commands for a Tempo API deployment.',
|
|
58
|
+
})
|
|
59
|
+
.command(migrate);
|
|
60
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/cli/commands/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEpC;;;;GAIG;AACH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE;IAC1C,WAAW,EAAE,oCAAoC;IACjD,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kEAAkE,CAAC;KAChF,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;QAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;KAChG,CAAC;IACF,KAAK,CAAC,GAAG,CAAC,CAAC;QACT,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAA;QACpE,IAAI,CAAC,gBAAgB;YACnB,OAAO,CAAC,CAAC,KAAK,CAAC;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,OAAO,EAAE,uEAAuE;aACjF,CAAC,CAAA;QACJ,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;YACrB,gBAAgB;YAChB,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAA;QACF,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;YAClB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oBAAoB;YACpB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAA;YAC5E,OAAO,CAAC,CAAC,KAAK,CAAC;gBACb,IAAI,EAAE,gBAAgB;gBACtB,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;CACF,CAAC,CAAA;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS;KAC3B,MAAM,CAAC,OAAO,EAAE;IACf,WAAW,EAAE,kDAAkD;CAChE,CAAC;KACD,OAAO,CAAC,OAAO,CAAC,CAAA"}
|
package/dist/cloudflare.d.ts
CHANGED
|
@@ -27,6 +27,13 @@ export declare class DurableObject extends CloudflareDurableObject {
|
|
|
27
27
|
}>;
|
|
28
28
|
/** Writes a string value, optionally with a time-to-live. */
|
|
29
29
|
put(key: string, value: string, options?: Store.Store.PutOptions): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Atomically compares-and-swaps a value.
|
|
32
|
+
*
|
|
33
|
+
* The compare and write run on the object's single thread behind its input
|
|
34
|
+
* gate, so concurrent callers cannot interleave between them.
|
|
35
|
+
*/
|
|
36
|
+
swap(key: string, expected: null | string, next: string, options?: Store.Store.PutOptions): Promise<boolean>;
|
|
30
37
|
}
|
|
31
38
|
export {};
|
|
32
39
|
//# sourceMappingURL=cloudflare.d.ts.map
|
package/dist/cloudflare.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,IAAI,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,KAAK,KAAK,GAAG,qBAAqB,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAA;AACrE,KAAK,WAAW,GAAG,qBAAqB,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAA;AAE3E,+EAA+E;AAC/E,qBAAa,aAAc,SAAQ,uBAAuB;;IAGxD,YAAY,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAMvC;IAED,qBAAqB;IACf,MAAM,CAAC,GAAG,EAAE,MAAM,iBAEvB;IAED,uEAAuE;IACjE,GAAG,CAAC,GAAG,EAAE,MAAM,0BAEpB;IAED;;;;;;;OAOG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,mBAE5D;IAED,kBAAkB;IACZ,IAAI,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;;;OAEtD;IAED,6DAA6D;IACvD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,iBAErE;CACF"}
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,IAAI,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAE5C,KAAK,KAAK,GAAG,qBAAqB,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAA;AACrE,KAAK,WAAW,GAAG,qBAAqB,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAA;AAE3E,+EAA+E;AAC/E,qBAAa,aAAc,SAAQ,uBAAuB;;IAGxD,YAAY,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAMvC;IAED,qBAAqB;IACf,MAAM,CAAC,GAAG,EAAE,MAAM,iBAEvB;IAED,uEAAuE;IACjE,GAAG,CAAC,GAAG,EAAE,MAAM,0BAEpB;IAED;;;;;;;OAOG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,mBAE5D;IAED,kBAAkB;IACZ,IAAI,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;;;OAEtD;IAED,6DAA6D;IACvD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,iBAErE;IAED;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,oBAE9F;CACF"}
|
package/dist/cloudflare.js
CHANGED
|
@@ -41,5 +41,14 @@ export class DurableObject extends CloudflareDurableObject {
|
|
|
41
41
|
async put(key, value, options) {
|
|
42
42
|
await this.#store.put(key, value, options);
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Atomically compares-and-swaps a value.
|
|
46
|
+
*
|
|
47
|
+
* The compare and write run on the object's single thread behind its input
|
|
48
|
+
* gate, so concurrent callers cannot interleave between them.
|
|
49
|
+
*/
|
|
50
|
+
async swap(key, expected, next, options) {
|
|
51
|
+
return this.#store.swap(key, expected, next, options);
|
|
52
|
+
}
|
|
44
53
|
}
|
|
45
54
|
//# sourceMappingURL=cloudflare.js.map
|
package/dist/cloudflare.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,kCAAkC;AAClC,aAAa;AACb,OAAO,EAAE,aAAa,IAAI,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAK5C,+EAA+E;AAC/E,MAAM,OAAO,aAAc,SAAQ,uBAAuB;IACxD,MAAM,CAAa;IAEnB,YAAY,GAAU,EAAE,GAAgB;QACtC,uEAAuE;QACvE,6EAA6E;QAC7E,KAAK,CAAC,GAAG,EAAE,GAAY,CAAC,CAAA;QACxB,MAAM,EAAE,OAAO,EAAE,GAAG,GAA+C,CAAA;QACnE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,OAAgC;QAC3D,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,OAA4C;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,OAAgC;QACpE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../src/cloudflare.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,kCAAkC;AAClC,aAAa;AACb,OAAO,EAAE,aAAa,IAAI,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAE7E,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAA;AAK5C,+EAA+E;AAC/E,MAAM,OAAO,aAAc,SAAQ,uBAAuB;IACxD,MAAM,CAAa;IAEnB,YAAY,GAAU,EAAE,GAAgB;QACtC,uEAAuE;QACvE,6EAA6E;QAC7E,KAAK,CAAC,GAAG,EAAE,GAAY,CAAC,CAAA;QACxB,MAAM,EAAE,OAAO,EAAE,GAAG,GAA+C,CAAA;QACnE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,OAAgC;QAC3D,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,OAA4C;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAED,6DAA6D;IAC7D,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,OAAgC;QACpE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,QAAuB,EAAE,IAAY,EAAE,OAAgC;QAC7F,OAAO,IAAI,CAAC,MAAM,CAAC,IAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC;CACF"}
|
package/dist/db/Db.d.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { type Compilable, type Dialect, Kysely } from 'kysely';
|
|
2
|
+
import type * as Invitations from './tables/invitations.js';
|
|
3
|
+
import type * as Memberships from './tables/memberships.js';
|
|
4
|
+
import type * as Organizations from './tables/organizations.js';
|
|
5
|
+
import type * as Projects from './tables/projects.js';
|
|
6
|
+
import type * as SponsoredTransactions from './tables/sponsoredTransactions.js';
|
|
7
|
+
import type * as Users from './tables/users.js';
|
|
8
|
+
import type * as VerifiedTokens from './tables/verifiedTokens.js';
|
|
9
|
+
import type * as WebhookDeliveries from './tables/webhookDeliveries.js';
|
|
10
|
+
import type * as WebhookSubscriptions from './tables/webhookSubscriptions.js';
|
|
11
|
+
/**
|
|
12
|
+
* Kysely schema with camelCase columns. {@link CamelCasePlugin} maps table
|
|
13
|
+
* records, queries, and {@link migrations} DDL to snake_case storage columns.
|
|
14
|
+
*/
|
|
15
|
+
export type Database = {
|
|
16
|
+
migrations: {
|
|
17
|
+
appliedAt: string;
|
|
18
|
+
checksum: string;
|
|
19
|
+
name: string;
|
|
20
|
+
/** SQL as applied; null on rows written before the column existed. */
|
|
21
|
+
sql: string | null;
|
|
22
|
+
};
|
|
23
|
+
invitations: Invitations.Table;
|
|
24
|
+
memberships: Memberships.Table;
|
|
25
|
+
organizations: Organizations.Table;
|
|
26
|
+
projects: Projects.Table;
|
|
27
|
+
sponsored_transactions: SponsoredTransactions.Table;
|
|
28
|
+
users: Users.Table;
|
|
29
|
+
verified_token_lists: VerifiedTokens.ListTable;
|
|
30
|
+
verified_tokens: VerifiedTokens.Table;
|
|
31
|
+
webhook_deliveries: WebhookDeliveries.Table;
|
|
32
|
+
webhook_subscriptions: WebhookSubscriptions.Table;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* A SQL-backed authoritative store: the underlying Kysely handle (table
|
|
36
|
+
* repository modules query through it), schema migrations, and transactions.
|
|
37
|
+
*/
|
|
38
|
+
export type Db = {
|
|
39
|
+
/** Closes the underlying connection/pool. */
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Underlying Kysely handle. Transaction-scoped {@link Db} values carry the
|
|
43
|
+
* transaction handle, so repositories called with `tx` run inside it. */
|
|
44
|
+
kysely: Kysely<Database>;
|
|
45
|
+
/** Applies any pending schema migrations; safe to call repeatedly and concurrently. */
|
|
46
|
+
migrate(): Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* Runs `fn` in a transaction — commits on return, rolls back on throw. `fn`
|
|
49
|
+
* receives a transaction-scoped {@link Db}; pass it (not the outer `Db`) to
|
|
50
|
+
* repositories so every query inside runs in the transaction.
|
|
51
|
+
*/
|
|
52
|
+
transaction<value>(fn: (tx: Db) => Promise<value>): Promise<value>;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* A {@link Db}, or a factory for per-request Workers/Hyperdrive connections.
|
|
56
|
+
* Node can pass a long-lived singleton. Resolve at the leaf with {@link get}.
|
|
57
|
+
*/
|
|
58
|
+
export type Source = Db | (() => Db);
|
|
59
|
+
/**
|
|
60
|
+
* Resolves a {@link Source} to a {@link Db}. Call at the request leaf so
|
|
61
|
+
* factories create per-request instances; singletons resolve to themselves.
|
|
62
|
+
*
|
|
63
|
+
* @param source - The database or factory.
|
|
64
|
+
* @returns The resolved {@link Db}.
|
|
65
|
+
*/
|
|
66
|
+
export declare function get(source: Source): Db;
|
|
67
|
+
/**
|
|
68
|
+
* One schema migration. `up` builds a single idempotent Kysely DDL statement;
|
|
69
|
+
* {@link Db.migrate} compiles it for the checksum, then applies it.
|
|
70
|
+
*/
|
|
71
|
+
type Migration = {
|
|
72
|
+
/** Unique, ordered migration name (e.g. `0001_organizations`). */
|
|
73
|
+
name: string;
|
|
74
|
+
/**
|
|
75
|
+
* Builds the migration's DDL against `db`. Use `.ifNotExists()` so the
|
|
76
|
+
* statement is safe to re-run without a wrapping transaction. */
|
|
77
|
+
up: (db: Kysely<Database>) => Compilable & {
|
|
78
|
+
execute(): Promise<unknown>;
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Ordered schema migrations for {@link Db.migrate}. Each `up` is one
|
|
83
|
+
* idempotent statement; compiled-SQL FNV-1a checksums reject edited applied
|
|
84
|
+
* migrations.
|
|
85
|
+
*/
|
|
86
|
+
export declare const migrations: readonly Migration[];
|
|
87
|
+
/**
|
|
88
|
+
* Builds a {@link Db} for any Kysely {@link Dialect}. All backends share
|
|
89
|
+
* migrations, repositories, and the required {@link CamelCasePlugin} mapping.
|
|
90
|
+
*
|
|
91
|
+
* @param dialect - The Kysely dialect for the target backend.
|
|
92
|
+
* @returns The database.
|
|
93
|
+
*/
|
|
94
|
+
export declare function from(dialect: Dialect): Db;
|
|
95
|
+
/**
|
|
96
|
+
* Creates a Postgres-backed {@link Db} via Kysely's `PostgresDialect`. Optional
|
|
97
|
+
* `schema` scopes every pooled connection and caps the pool for test isolation.
|
|
98
|
+
*
|
|
99
|
+
* @param options - Postgres options.
|
|
100
|
+
* @returns The database.
|
|
101
|
+
*/
|
|
102
|
+
export declare function postgres(options: postgres.Options): Db;
|
|
103
|
+
export declare namespace postgres {
|
|
104
|
+
/** Options for {@link postgres}. */
|
|
105
|
+
type Options = {
|
|
106
|
+
/** Postgres connection string (`postgresql://…`). */
|
|
107
|
+
connectionString: string;
|
|
108
|
+
/** Schema to create and scope the session to (isolates concurrent tests). */
|
|
109
|
+
schema?: string | undefined;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
export {};
|
|
113
|
+
//# sourceMappingURL=Db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/db/Db.ts"],"names":[],"mappings":"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"}
|