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,120 @@
|
|
|
1
|
+
import type { Selectable } from 'kysely';
|
|
2
|
+
import type * as Db from '../Db.js';
|
|
3
|
+
import type * as db_Schema from '../Schema.js';
|
|
4
|
+
/** Columns of the `sponsored_transactions` table, derived from `Schema.SponsoredTransaction`. */
|
|
5
|
+
export type Table = db_Schema.SponsoredTransaction;
|
|
6
|
+
/** A stored sponsored-transaction row. */
|
|
7
|
+
export type Record = Selectable<Table>;
|
|
8
|
+
/**
|
|
9
|
+
* Records one sponsorship commitment as `pending`, keyed by its fee-payer
|
|
10
|
+
* sign payload. Written after fee-payer signing and before any broadcast, so
|
|
11
|
+
* no sponsored transaction goes unrecorded; a later recording site for the
|
|
12
|
+
* same envelope (raw submission after a fill intent) upgrades the row with
|
|
13
|
+
* its transaction hash, reopening failed rows for finalization.
|
|
14
|
+
*
|
|
15
|
+
* @param db - The database.
|
|
16
|
+
* @param input - Attribution and envelope facts captured at signing time.
|
|
17
|
+
* @returns The stored record.
|
|
18
|
+
*/
|
|
19
|
+
export declare function upsert(db: Db.Db, input: upsert.Input): Promise<Record>;
|
|
20
|
+
export declare namespace upsert {
|
|
21
|
+
/** Attribution and envelope facts recorded at sponsorship time. */
|
|
22
|
+
type Input = {
|
|
23
|
+
/** API key id (`key_…`) that requested sponsorship. */
|
|
24
|
+
apiKeyId: string;
|
|
25
|
+
/** Whether the sponsorship accrues billable spend; false for sandbox. */
|
|
26
|
+
billable: boolean;
|
|
27
|
+
/** Chain the sponsored transaction targets. */
|
|
28
|
+
chainId: number;
|
|
29
|
+
/** Key environment the sponsorship was requested under. */
|
|
30
|
+
environment: Table['environment'];
|
|
31
|
+
/** Fee token the sponsorship resolved, when known. */
|
|
32
|
+
feeToken?: string | undefined;
|
|
33
|
+
/** Organization id (`org_…`) the spend attributes to. */
|
|
34
|
+
orgId: string;
|
|
35
|
+
/** Project id (`prj_…`) the spend attributes to. */
|
|
36
|
+
projectId: string;
|
|
37
|
+
/** Fee-payer sign payload — a stable identity for the sponsored envelope. */
|
|
38
|
+
signPayload: string;
|
|
39
|
+
/** Serialized sponsored transaction, kept for observability beyond log retention. */
|
|
40
|
+
transaction: string;
|
|
41
|
+
/** Transaction hash; omit for fill intents, whose senders have not signed yet. */
|
|
42
|
+
transactionHash?: string | undefined;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Reads one sponsorship row by id.
|
|
47
|
+
*
|
|
48
|
+
* @param db - The database.
|
|
49
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
50
|
+
* @returns The record, or `undefined` when absent.
|
|
51
|
+
*/
|
|
52
|
+
export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
|
|
53
|
+
/**
|
|
54
|
+
* Lists pending sponsorships, oldest first, for the finalization job.
|
|
55
|
+
*
|
|
56
|
+
* @param db - The database.
|
|
57
|
+
* @param options - Paging options.
|
|
58
|
+
* @returns The pending records.
|
|
59
|
+
*/
|
|
60
|
+
export declare function listPending(db: Db.Db, options?: listPending.Options): Promise<Record[]>;
|
|
61
|
+
export declare namespace listPending {
|
|
62
|
+
/** Options for {@link listPending}. */
|
|
63
|
+
type Options = {
|
|
64
|
+
/** Maximum rows to return. */
|
|
65
|
+
limit?: number | undefined;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Lists hash-less fill intents, oldest first, for the reconciliation pass.
|
|
70
|
+
* Failed intents are included only when the caller supplies a recovery floor.
|
|
71
|
+
*
|
|
72
|
+
* @param db - The database.
|
|
73
|
+
* @param options - Paging options.
|
|
74
|
+
* @returns The pending intents.
|
|
75
|
+
*/
|
|
76
|
+
export declare function listIntents(db: Db.Db, options?: listIntents.Options): Promise<Record[]>;
|
|
77
|
+
export declare namespace listIntents {
|
|
78
|
+
/** Options for {@link listIntents}. */
|
|
79
|
+
type Options = listPending.Options & {
|
|
80
|
+
/** Include failed intents whose terminal timestamp is at or after this ISO timestamp. */
|
|
81
|
+
failedSince?: string | undefined;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Fills a reconciled intent's transaction hash and reopens failed intents.
|
|
86
|
+
* A no-op once another pass already assigned the hash.
|
|
87
|
+
*
|
|
88
|
+
* @param db - The database.
|
|
89
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
90
|
+
* @param transactionHash - The matched on-chain transaction hash.
|
|
91
|
+
*/
|
|
92
|
+
export declare function assignTransactionHash(db: Db.Db, id: string, transactionHash: string): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Transitions a pending sponsorship to `finalized` with the receipt's actual
|
|
95
|
+
* fee. A no-op when the row is no longer pending (idempotent re-runs).
|
|
96
|
+
*
|
|
97
|
+
* @param db - The database.
|
|
98
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
99
|
+
* @param input - The finalized fee facts.
|
|
100
|
+
*/
|
|
101
|
+
export declare function finalize(db: Db.Db, id: string, input: finalize.Input): Promise<void>;
|
|
102
|
+
export declare namespace finalize {
|
|
103
|
+
/** Fee facts resolved from the transaction receipt. */
|
|
104
|
+
type Input = {
|
|
105
|
+
/** Actual fee paid in fee-token base units. */
|
|
106
|
+
feeAmount: string;
|
|
107
|
+
/** When the sponsorship finalized (ISO 8601). */
|
|
108
|
+
finalizedAt: string;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Transitions a pending sponsorship to `failed` (never landed within the
|
|
113
|
+
* pending TTL). A no-op when the row is no longer pending.
|
|
114
|
+
*
|
|
115
|
+
* @param db - The database.
|
|
116
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
117
|
+
* @param finalizedAt - When the sponsorship was marked failed (ISO 8601).
|
|
118
|
+
*/
|
|
119
|
+
export declare function fail(db: Db.Db, id: string, finalizedAt: string): Promise<void>;
|
|
120
|
+
//# sourceMappingURL=sponsoredTransactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sponsoredTransactions.d.ts","sourceRoot":"","sources":["../../../src/db/tables/sponsoredTransactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { sql } from 'kysely';
|
|
2
|
+
import { nanoid } from 'nanoid';
|
|
3
|
+
/**
|
|
4
|
+
* Records one sponsorship commitment as `pending`, keyed by its fee-payer
|
|
5
|
+
* sign payload. Written after fee-payer signing and before any broadcast, so
|
|
6
|
+
* no sponsored transaction goes unrecorded; a later recording site for the
|
|
7
|
+
* same envelope (raw submission after a fill intent) upgrades the row with
|
|
8
|
+
* its transaction hash, reopening failed rows for finalization.
|
|
9
|
+
*
|
|
10
|
+
* @param db - The database.
|
|
11
|
+
* @param input - Attribution and envelope facts captured at signing time.
|
|
12
|
+
* @returns The stored record.
|
|
13
|
+
*/
|
|
14
|
+
export async function upsert(db, input) {
|
|
15
|
+
const record = {
|
|
16
|
+
apiKeyId: input.apiKeyId,
|
|
17
|
+
billable: input.billable,
|
|
18
|
+
chainId: input.chainId,
|
|
19
|
+
createdAt: new Date().toISOString(),
|
|
20
|
+
environment: input.environment,
|
|
21
|
+
feeAmount: null,
|
|
22
|
+
feeToken: input.feeToken ?? null,
|
|
23
|
+
finalizedAt: null,
|
|
24
|
+
id: `stx_${nanoid()}`,
|
|
25
|
+
orgId: input.orgId,
|
|
26
|
+
projectId: input.projectId,
|
|
27
|
+
signPayload: input.signPayload,
|
|
28
|
+
status: 'pending',
|
|
29
|
+
transaction: input.transaction,
|
|
30
|
+
transactionHash: input.transactionHash ?? null,
|
|
31
|
+
};
|
|
32
|
+
return await db.kysely
|
|
33
|
+
.insertInto('sponsored_transactions')
|
|
34
|
+
.values(record)
|
|
35
|
+
.onConflict((oc) => oc.column('signPayload').doUpdateSet((eb) => ({
|
|
36
|
+
// A raw submission fills the intent's hash; a duplicate intent never
|
|
37
|
+
// clears an already-known hash.
|
|
38
|
+
transactionHash: eb.fn.coalesce(eb.ref('excluded.transactionHash'), eb.ref('sponsored_transactions.transactionHash')),
|
|
39
|
+
createdAt: sql `CASE WHEN ${eb.ref('sponsored_transactions.status')} = 'failed' THEN ${eb.ref('excluded.createdAt')} ELSE ${eb.ref('sponsored_transactions.createdAt')} END`,
|
|
40
|
+
finalizedAt: sql `CASE WHEN ${eb.ref('sponsored_transactions.status')} = 'failed' THEN NULL ELSE ${eb.ref('sponsored_transactions.finalizedAt')} END`,
|
|
41
|
+
status: sql `CASE WHEN ${eb.ref('sponsored_transactions.status')} = 'failed' THEN 'pending' ELSE ${eb.ref('sponsored_transactions.status')} END`,
|
|
42
|
+
})))
|
|
43
|
+
.returningAll()
|
|
44
|
+
.executeTakeFirstOrThrow();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Reads one sponsorship row by id.
|
|
48
|
+
*
|
|
49
|
+
* @param db - The database.
|
|
50
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
51
|
+
* @returns The record, or `undefined` when absent.
|
|
52
|
+
*/
|
|
53
|
+
export function get(db, id) {
|
|
54
|
+
return db.kysely
|
|
55
|
+
.selectFrom('sponsored_transactions')
|
|
56
|
+
.selectAll()
|
|
57
|
+
.where('id', '=', id)
|
|
58
|
+
.executeTakeFirst();
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Lists pending sponsorships, oldest first, for the finalization job.
|
|
62
|
+
*
|
|
63
|
+
* @param db - The database.
|
|
64
|
+
* @param options - Paging options.
|
|
65
|
+
* @returns The pending records.
|
|
66
|
+
*/
|
|
67
|
+
export function listPending(db, options = {}) {
|
|
68
|
+
let query = db.kysely
|
|
69
|
+
.selectFrom('sponsored_transactions')
|
|
70
|
+
.selectAll()
|
|
71
|
+
.where('status', '=', 'pending')
|
|
72
|
+
// `id` breaks same-millisecond `createdAt` ties for a deterministic scan.
|
|
73
|
+
.orderBy('createdAt', 'asc')
|
|
74
|
+
.orderBy('id', 'asc');
|
|
75
|
+
if (options.limit !== undefined)
|
|
76
|
+
query = query.limit(options.limit);
|
|
77
|
+
return query.execute();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Lists hash-less fill intents, oldest first, for the reconciliation pass.
|
|
81
|
+
* Failed intents are included only when the caller supplies a recovery floor.
|
|
82
|
+
*
|
|
83
|
+
* @param db - The database.
|
|
84
|
+
* @param options - Paging options.
|
|
85
|
+
* @returns The pending intents.
|
|
86
|
+
*/
|
|
87
|
+
export function listIntents(db, options = {}) {
|
|
88
|
+
let query = db.kysely
|
|
89
|
+
.selectFrom('sponsored_transactions')
|
|
90
|
+
.selectAll()
|
|
91
|
+
.where(intentStatus(options.failedSince))
|
|
92
|
+
.where('transactionHash', 'is', null)
|
|
93
|
+
// `pending` sorts after `failed`; descending keeps active intents first.
|
|
94
|
+
.orderBy('status', 'desc')
|
|
95
|
+
.orderBy('createdAt', 'asc')
|
|
96
|
+
.orderBy('id', 'asc');
|
|
97
|
+
if (options.limit !== undefined)
|
|
98
|
+
query = query.limit(options.limit);
|
|
99
|
+
return query.execute();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Fills a reconciled intent's transaction hash and reopens failed intents.
|
|
103
|
+
* A no-op once another pass already assigned the hash.
|
|
104
|
+
*
|
|
105
|
+
* @param db - The database.
|
|
106
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
107
|
+
* @param transactionHash - The matched on-chain transaction hash.
|
|
108
|
+
*/
|
|
109
|
+
export async function assignTransactionHash(db, id, transactionHash) {
|
|
110
|
+
await db.kysely
|
|
111
|
+
.updateTable('sponsored_transactions')
|
|
112
|
+
.set({ finalizedAt: null, status: 'pending', transactionHash })
|
|
113
|
+
.where('id', '=', id)
|
|
114
|
+
.where('status', 'in', ['failed', 'pending'])
|
|
115
|
+
.where('transactionHash', 'is', null)
|
|
116
|
+
.execute();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Transitions a pending sponsorship to `finalized` with the receipt's actual
|
|
120
|
+
* fee. A no-op when the row is no longer pending (idempotent re-runs).
|
|
121
|
+
*
|
|
122
|
+
* @param db - The database.
|
|
123
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
124
|
+
* @param input - The finalized fee facts.
|
|
125
|
+
*/
|
|
126
|
+
export async function finalize(db, id, input) {
|
|
127
|
+
await db.kysely
|
|
128
|
+
.updateTable('sponsored_transactions')
|
|
129
|
+
.set({ feeAmount: input.feeAmount, finalizedAt: input.finalizedAt, status: 'finalized' })
|
|
130
|
+
.where('id', '=', id)
|
|
131
|
+
.where('status', '=', 'pending')
|
|
132
|
+
.execute();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Transitions a pending sponsorship to `failed` (never landed within the
|
|
136
|
+
* pending TTL). A no-op when the row is no longer pending.
|
|
137
|
+
*
|
|
138
|
+
* @param db - The database.
|
|
139
|
+
* @param id - The sponsored-transaction id (`stx_…`).
|
|
140
|
+
* @param finalizedAt - When the sponsorship was marked failed (ISO 8601).
|
|
141
|
+
*/
|
|
142
|
+
export async function fail(db, id, finalizedAt) {
|
|
143
|
+
await db.kysely
|
|
144
|
+
.updateTable('sponsored_transactions')
|
|
145
|
+
.set({ finalizedAt, status: 'failed' })
|
|
146
|
+
.where('id', '=', id)
|
|
147
|
+
.where('status', '=', 'pending')
|
|
148
|
+
.execute();
|
|
149
|
+
}
|
|
150
|
+
/** Intent status predicate; failed rows are recovery candidates only briefly. */
|
|
151
|
+
function intentStatus(failedSince) {
|
|
152
|
+
return (eb) => {
|
|
153
|
+
if (failedSince === undefined)
|
|
154
|
+
return eb('status', '=', 'pending');
|
|
155
|
+
return eb.or([
|
|
156
|
+
eb('status', '=', 'pending'),
|
|
157
|
+
eb.and([eb('status', '=', 'failed'), eb('finalizedAt', '>=', failedSince)]),
|
|
158
|
+
]);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=sponsoredTransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sponsoredTransactions.js","sourceRoot":"","sources":["../../../src/db/tables/sponsoredTransactions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { Selectable } from 'kysely';
|
|
2
|
+
import type * as Db from '../Db.js';
|
|
3
|
+
import type * as db_Schema from '../Schema.js';
|
|
4
|
+
/** Columns of the `users` table, derived from `Schema.User`. */
|
|
5
|
+
export type Table = db_Schema.User;
|
|
6
|
+
/** A stored user row. */
|
|
7
|
+
export type Record = Selectable<Table>;
|
|
8
|
+
/**
|
|
9
|
+
* Reads a user by id (`usr_…`).
|
|
10
|
+
*
|
|
11
|
+
* @param db - The database.
|
|
12
|
+
* @param id - The user id.
|
|
13
|
+
* @returns The record, or `undefined` when absent.
|
|
14
|
+
*/
|
|
15
|
+
export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
|
|
16
|
+
/**
|
|
17
|
+
* Reads a user by wallet address (compared lowercase).
|
|
18
|
+
*
|
|
19
|
+
* @param db - The database.
|
|
20
|
+
* @param address - The wallet address.
|
|
21
|
+
* @returns The record, or `undefined` when absent.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getByAddress(db: Db.Db, address: string): Promise<Record | undefined>;
|
|
24
|
+
/**
|
|
25
|
+
* Inserts a user for `address` when absent and returns the stored record.
|
|
26
|
+
* Existing users are returned unchanged, so repeated sign-ins are idempotent.
|
|
27
|
+
*
|
|
28
|
+
* @param db - The database.
|
|
29
|
+
* @param input - The user to ensure.
|
|
30
|
+
* @returns The stored record.
|
|
31
|
+
*/
|
|
32
|
+
export declare function upsertByAddress(db: Db.Db, input: upsertByAddress.Input): Promise<Record>;
|
|
33
|
+
export declare namespace upsertByAddress {
|
|
34
|
+
/** Fields accepted when ensuring a user. */
|
|
35
|
+
type Input = {
|
|
36
|
+
/** Wallet address that signed in (stored lowercase). */
|
|
37
|
+
address: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Sets a user's verified email, bumping `updatedAt`.
|
|
42
|
+
*
|
|
43
|
+
* @param db - The database.
|
|
44
|
+
* @param id - The user id (`usr_…`).
|
|
45
|
+
* @param email - The verified email.
|
|
46
|
+
*/
|
|
47
|
+
export declare function setEmail(db: Db.Db, id: string, email: string): Promise<void>;
|
|
48
|
+
//# sourceMappingURL=users.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/db/tables/users.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,gEAAgE;AAChE,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAA;AAElC,yBAAyB;AACzB,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMpF;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAe9F;AAED,MAAM,CAAC,OAAO,WAAW,eAAe,CAAC;IACvC,4CAA4C;IAC5C,KAAK,KAAK,GAAG;QACX,wDAAwD;QACxD,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
/**
|
|
3
|
+
* Reads a user by id (`usr_…`).
|
|
4
|
+
*
|
|
5
|
+
* @param db - The database.
|
|
6
|
+
* @param id - The user id.
|
|
7
|
+
* @returns The record, or `undefined` when absent.
|
|
8
|
+
*/
|
|
9
|
+
export function get(db, id) {
|
|
10
|
+
return db.kysely.selectFrom('users').selectAll().where('id', '=', id).executeTakeFirst();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Reads a user by wallet address (compared lowercase).
|
|
14
|
+
*
|
|
15
|
+
* @param db - The database.
|
|
16
|
+
* @param address - The wallet address.
|
|
17
|
+
* @returns The record, or `undefined` when absent.
|
|
18
|
+
*/
|
|
19
|
+
export function getByAddress(db, address) {
|
|
20
|
+
return db.kysely
|
|
21
|
+
.selectFrom('users')
|
|
22
|
+
.selectAll()
|
|
23
|
+
.where('address', '=', address.toLowerCase())
|
|
24
|
+
.executeTakeFirst();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Inserts a user for `address` when absent and returns the stored record.
|
|
28
|
+
* Existing users are returned unchanged, so repeated sign-ins are idempotent.
|
|
29
|
+
*
|
|
30
|
+
* @param db - The database.
|
|
31
|
+
* @param input - The user to ensure.
|
|
32
|
+
* @returns The stored record.
|
|
33
|
+
*/
|
|
34
|
+
export async function upsertByAddress(db, input) {
|
|
35
|
+
const address = input.address.toLowerCase();
|
|
36
|
+
const now = new Date().toISOString();
|
|
37
|
+
const inserted = await db.kysely
|
|
38
|
+
.insertInto('users')
|
|
39
|
+
.values({ address, createdAt: now, email: null, id: `usr_${nanoid()}`, updatedAt: now })
|
|
40
|
+
.onConflict((oc) => oc.column('address').doNothing())
|
|
41
|
+
.returningAll()
|
|
42
|
+
.executeTakeFirst();
|
|
43
|
+
if (inserted)
|
|
44
|
+
return inserted;
|
|
45
|
+
return db.kysely
|
|
46
|
+
.selectFrom('users')
|
|
47
|
+
.selectAll()
|
|
48
|
+
.where('address', '=', address)
|
|
49
|
+
.executeTakeFirstOrThrow();
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Sets a user's verified email, bumping `updatedAt`.
|
|
53
|
+
*
|
|
54
|
+
* @param db - The database.
|
|
55
|
+
* @param id - The user id (`usr_…`).
|
|
56
|
+
* @param email - The verified email.
|
|
57
|
+
*/
|
|
58
|
+
export async function setEmail(db, id, email) {
|
|
59
|
+
await db.kysely
|
|
60
|
+
.updateTable('users')
|
|
61
|
+
.set({ email, updatedAt: new Date().toISOString() })
|
|
62
|
+
.where('id', '=', id)
|
|
63
|
+
.execute();
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=users.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/db/tables/users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAW/B;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAU;IACvC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;AAC1F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAAS,EAAE,OAAe;IACrD,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,OAAO,CAAC;SACnB,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;SAC5C,gBAAgB,EAAE,CAAA;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAS,EAAE,KAA4B;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM;SAC7B,UAAU,CAAC,OAAO,CAAC;SACnB,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SACvF,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;SACpD,YAAY,EAAE;SACd,gBAAgB,EAAE,CAAA;IACrB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,OAAO,CAAC;SACnB,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,uBAAuB,EAAE,CAAA;AAC9B,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAS,EAAE,EAAU,EAAE,KAAa;IACjE,MAAM,EAAE,CAAC,MAAM;SACZ,WAAW,CAAC,OAAO,CAAC;SACpB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;SACnD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;SACpB,OAAO,EAAE,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Selectable } from 'kysely';
|
|
2
|
+
import type * as VerifiedTokens from '../../internal/VerifiedTokens.js';
|
|
3
|
+
import type * as Db from '../Db.js';
|
|
4
|
+
import type * as db_Schema from '../Schema.js';
|
|
5
|
+
/** Columns of the `verified_tokens` table, derived from `Schema.VerifiedToken`. */
|
|
6
|
+
export type Table = db_Schema.VerifiedToken;
|
|
7
|
+
/** Columns of the `verified_token_lists` table, derived from `Schema.VerifiedTokenList`. */
|
|
8
|
+
export type ListTable = db_Schema.VerifiedTokenList;
|
|
9
|
+
/** A stored verified-token row. */
|
|
10
|
+
export type Row = Selectable<Table>;
|
|
11
|
+
/** A chain's list-level metadata. */
|
|
12
|
+
export type Meta = Selectable<ListTable>;
|
|
13
|
+
/**
|
|
14
|
+
* Reads a chain's list metadata — the "head" the soft-refresh cache compares
|
|
15
|
+
* versions against.
|
|
16
|
+
*
|
|
17
|
+
* @param db - The database.
|
|
18
|
+
* @param chainId - The chain id.
|
|
19
|
+
* @returns The metadata, or `undefined` when the chain has no list yet.
|
|
20
|
+
*/
|
|
21
|
+
export declare function head(db: Db.Db, chainId: number): Promise<Meta | undefined>;
|
|
22
|
+
/**
|
|
23
|
+
* Reads a chain's tokens in canonical list order.
|
|
24
|
+
*
|
|
25
|
+
* @param db - The database.
|
|
26
|
+
* @param chainId - The chain id.
|
|
27
|
+
* @returns The rows.
|
|
28
|
+
*/
|
|
29
|
+
export declare function list(db: Db.Db, chainId: number): Promise<Row[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Publishes a chain's whole list: replaces its token rows (positions rewritten
|
|
32
|
+
* wholesale) and bumps the list metadata. Callers run this inside the
|
|
33
|
+
* per-chain publish lock/transaction, so the rewrite is atomic.
|
|
34
|
+
*
|
|
35
|
+
* @param db - The database (a transaction-scoped handle).
|
|
36
|
+
* @param chainId - The chain id.
|
|
37
|
+
* @param input - The validated list and its new version metadata.
|
|
38
|
+
*/
|
|
39
|
+
export declare function publish(db: Db.Db, chainId: number, input: publish.Input): Promise<void>;
|
|
40
|
+
export declare namespace publish {
|
|
41
|
+
/** A validated list to publish. */
|
|
42
|
+
type Input = {
|
|
43
|
+
/** Tokens in canonical order (addresses lowercased by the domain layer). */
|
|
44
|
+
tokens: readonly VerifiedTokens.Token[];
|
|
45
|
+
/** ISO timestamp of the publish. */
|
|
46
|
+
updatedAt: string;
|
|
47
|
+
/** New opaque list version. */
|
|
48
|
+
version: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** Maps a stored row to the domain token (null `logoUri` → absent field). */
|
|
52
|
+
export declare function toToken(row: Row): VerifiedTokens.Token;
|
|
53
|
+
//# sourceMappingURL=verifiedTokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifiedTokens.d.ts","sourceRoot":"","sources":["../../../src/db/tables/verifiedTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,KAAK,KAAK,cAAc,MAAM,kCAAkC,CAAA;AACvE,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,mFAAmF;AACnF,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAA;AAE3C,4FAA4F;AAC5F,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,iBAAiB,CAAA;AAEnD,mCAAmC;AACnC,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEnC,qCAAqC;AACrC,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAExC;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAM1E;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAO/D;AAED;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7F;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,mCAAmC;IACnC,KAAK,KAAK,GAAG;QACX,4EAA4E;QAC5E,MAAM,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,CAAA;QACvC,oCAAoC;QACpC,SAAS,EAAE,MAAM,CAAA;QACjB,+BAA+B;QAC/B,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,CAAC,KAAK,CAUtD"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads a chain's list metadata — the "head" the soft-refresh cache compares
|
|
3
|
+
* versions against.
|
|
4
|
+
*
|
|
5
|
+
* @param db - The database.
|
|
6
|
+
* @param chainId - The chain id.
|
|
7
|
+
* @returns The metadata, or `undefined` when the chain has no list yet.
|
|
8
|
+
*/
|
|
9
|
+
export function head(db, chainId) {
|
|
10
|
+
return db.kysely
|
|
11
|
+
.selectFrom('verified_token_lists')
|
|
12
|
+
.selectAll()
|
|
13
|
+
.where('chainId', '=', chainId)
|
|
14
|
+
.executeTakeFirst();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Reads a chain's tokens in canonical list order.
|
|
18
|
+
*
|
|
19
|
+
* @param db - The database.
|
|
20
|
+
* @param chainId - The chain id.
|
|
21
|
+
* @returns The rows.
|
|
22
|
+
*/
|
|
23
|
+
export function list(db, chainId) {
|
|
24
|
+
return db.kysely
|
|
25
|
+
.selectFrom('verified_tokens')
|
|
26
|
+
.selectAll()
|
|
27
|
+
.where('chainId', '=', chainId)
|
|
28
|
+
.orderBy('position')
|
|
29
|
+
.execute();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Publishes a chain's whole list: replaces its token rows (positions rewritten
|
|
33
|
+
* wholesale) and bumps the list metadata. Callers run this inside the
|
|
34
|
+
* per-chain publish lock/transaction, so the rewrite is atomic.
|
|
35
|
+
*
|
|
36
|
+
* @param db - The database (a transaction-scoped handle).
|
|
37
|
+
* @param chainId - The chain id.
|
|
38
|
+
* @param input - The validated list and its new version metadata.
|
|
39
|
+
*/
|
|
40
|
+
export async function publish(db, chainId, input) {
|
|
41
|
+
await db.kysely.deleteFrom('verified_tokens').where('chainId', '=', chainId).execute();
|
|
42
|
+
if (input.tokens.length > 0)
|
|
43
|
+
await db.kysely
|
|
44
|
+
.insertInto('verified_tokens')
|
|
45
|
+
.values(input.tokens.map((token, position) => ({
|
|
46
|
+
address: token.address,
|
|
47
|
+
chainId,
|
|
48
|
+
currency: token.currency,
|
|
49
|
+
decimals: token.decimals,
|
|
50
|
+
logoUri: token.logoUri ?? null,
|
|
51
|
+
name: token.name,
|
|
52
|
+
position,
|
|
53
|
+
symbol: token.symbol,
|
|
54
|
+
})))
|
|
55
|
+
.execute();
|
|
56
|
+
await db.kysely
|
|
57
|
+
.insertInto('verified_token_lists')
|
|
58
|
+
.values({ chainId, updatedAt: input.updatedAt, version: input.version })
|
|
59
|
+
.onConflict((oc) => oc.column('chainId').doUpdateSet({ updatedAt: input.updatedAt, version: input.version }))
|
|
60
|
+
.execute();
|
|
61
|
+
}
|
|
62
|
+
/** Maps a stored row to the domain token (null `logoUri` → absent field). */
|
|
63
|
+
export function toToken(row) {
|
|
64
|
+
return {
|
|
65
|
+
address: row.address,
|
|
66
|
+
currency: row.currency,
|
|
67
|
+
decimals: row.decimals,
|
|
68
|
+
id: row.address,
|
|
69
|
+
name: row.name,
|
|
70
|
+
symbol: row.symbol,
|
|
71
|
+
...(row.logoUri === null ? {} : { logoUri: row.logoUri }),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=verifiedTokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifiedTokens.js","sourceRoot":"","sources":["../../../src/db/tables/verifiedTokens.ts"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAC,EAAS,EAAE,OAAe;IAC7C,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,sBAAsB,CAAC;SAClC,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,gBAAgB,EAAE,CAAA;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAAC,EAAS,EAAE,OAAe;IAC7C,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,iBAAiB,CAAC;SAC7B,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,OAAO,CAAC,UAAU,CAAC;SACnB,OAAO,EAAE,CAAA;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAS,EAAE,OAAe,EAAE,KAAoB;IAC5E,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IACtF,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACzB,MAAM,EAAE,CAAC,MAAM;aACZ,UAAU,CAAC,iBAAiB,CAAC;aAC7B,MAAM,CACL,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YACrC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC,CACJ;aACA,OAAO,EAAE,CAAA;IACd,MAAM,EAAE,CAAC,MAAM;SACZ,UAAU,CAAC,sBAAsB,CAAC;SAClC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;SACvE,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CACjB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CACzF;SACA,OAAO,EAAE,CAAA;AACd,CAAC;AAcD,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,GAAQ;IAC9B,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAkB;QAC/B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,EAAE,EAAE,GAAG,CAAC,OAAkB;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;KAC1D,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Selectable } from 'kysely';
|
|
2
|
+
import type * as Webhooks from '../../internal/Webhooks.js';
|
|
3
|
+
import type * as Db from '../Db.js';
|
|
4
|
+
import type * as db_Schema from '../Schema.js';
|
|
5
|
+
/** Columns of the `webhook_deliveries` table, derived from `Schema.WebhookDelivery`. */
|
|
6
|
+
export type Table = db_Schema.WebhookDelivery;
|
|
7
|
+
/** A stored webhook-delivery row. */
|
|
8
|
+
export type Record = Selectable<Table>;
|
|
9
|
+
/** Maps a stored row to the domain delivery (null columns → absent fields). */
|
|
10
|
+
export declare function toDelivery(row: Record): Webhooks.Delivery;
|
|
11
|
+
/**
|
|
12
|
+
* Inserts a delivery row from its domain value.
|
|
13
|
+
*
|
|
14
|
+
* @param db - The database.
|
|
15
|
+
* @param delivery - The delivery to insert.
|
|
16
|
+
* @param expiresAt - Retention deadline (ISO); the row is invisible past it.
|
|
17
|
+
*/
|
|
18
|
+
export declare function insert(db: Db.Db, delivery: Webhooks.Delivery, expiresAt: string): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Lists a subscription's unexpired deliveries, newest first, with keyset
|
|
21
|
+
* paging (`id < cursor` — ids embed a zero-padded timestamp, so lexical order
|
|
22
|
+
* is chronological).
|
|
23
|
+
*
|
|
24
|
+
* @param db - The database.
|
|
25
|
+
* @param subscriptionId - The owning subscription id (`wh_…`).
|
|
26
|
+
* @param options - Paging options plus the retention timestamp.
|
|
27
|
+
* @returns The deliveries.
|
|
28
|
+
*/
|
|
29
|
+
export declare function list(db: Db.Db, subscriptionId: string, options: list.Options): Promise<Webhooks.Delivery[]>;
|
|
30
|
+
export declare namespace list {
|
|
31
|
+
/** Options for {@link list}. */
|
|
32
|
+
type Options = {
|
|
33
|
+
/** Return deliveries whose id sorts before this one (older entries). */
|
|
34
|
+
cursor?: string | undefined;
|
|
35
|
+
/** Maximum deliveries to return. */
|
|
36
|
+
limit?: number | undefined;
|
|
37
|
+
/** ISO timestamp retention is evaluated against. */
|
|
38
|
+
now: string;
|
|
39
|
+
/** Rows to skip from the head (positional pagination; exclusive with `cursor`). */
|
|
40
|
+
offset?: number | undefined;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Counts a subscription's unexpired deliveries.
|
|
45
|
+
*
|
|
46
|
+
* @param db - The database.
|
|
47
|
+
* @param subscriptionId - The owning subscription id (`wh_…`).
|
|
48
|
+
* @param now - ISO timestamp retention is evaluated against.
|
|
49
|
+
* @returns The count.
|
|
50
|
+
*/
|
|
51
|
+
export declare function count(db: Db.Db, subscriptionId: string, now: string): Promise<number>;
|
|
52
|
+
/**
|
|
53
|
+
* Reads a single unexpired delivery scoped to its subscription.
|
|
54
|
+
*
|
|
55
|
+
* @param db - The database.
|
|
56
|
+
* @param subscriptionId - The owning subscription id (`wh_…`).
|
|
57
|
+
* @param deliveryId - The delivery id (`whd_…`).
|
|
58
|
+
* @param now - ISO timestamp retention is evaluated against.
|
|
59
|
+
* @returns The delivery, or `null` when absent.
|
|
60
|
+
*/
|
|
61
|
+
export declare function get(db: Db.Db, subscriptionId: string, deliveryId: string, now: string): Promise<Webhooks.Delivery | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Deletes deliveries past their retention deadline. Called best-effort from
|
|
64
|
+
* the poller tick.
|
|
65
|
+
*
|
|
66
|
+
* @param db - The database.
|
|
67
|
+
* @param now - ISO timestamp retention is evaluated against.
|
|
68
|
+
* @returns The number of rows deleted.
|
|
69
|
+
*/
|
|
70
|
+
export declare function pruneExpired(db: Db.Db, now: string): Promise<number>;
|
|
71
|
+
//# sourceMappingURL=webhookDeliveries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhookDeliveries.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookDeliveries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAExC,OAAO,KAAK,KAAK,QAAQ,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,wFAAwF;AACxF,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAA;AAE7C,qCAAqC;AACrC,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAczD;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,IAAI,CACxB,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,IAAI,CAAC,OAAO,GACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAW9B;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,gCAAgC;IAChC,KAAK,OAAO,GAAG;QACb,wEAAwE;QACxE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,oCAAoC;QACpC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,oDAAoD;QACpD,GAAG,EAAE,MAAM,CAAA;QACX,mFAAmF;QACnF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC5B,CAAA;CACF;AAED;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3F;AAED;;;;;;;;GAQG;AACH,wBAAsB,GAAG,CACvB,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1E"}
|