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,153 @@
|
|
|
1
|
+
/** Fixed membership roles, least to most privileged. */
|
|
2
|
+
export const roles = ['member', 'admin', 'owner'];
|
|
3
|
+
/** Privilege rank per role; higher ranks satisfy lower minimums. */
|
|
4
|
+
export const rank = { admin: 1, member: 0, owner: 2 };
|
|
5
|
+
/**
|
|
6
|
+
* Inserts a membership and returns the stored record.
|
|
7
|
+
*
|
|
8
|
+
* @param db - The database.
|
|
9
|
+
* @param input - The membership to insert.
|
|
10
|
+
* @returns The stored record.
|
|
11
|
+
*/
|
|
12
|
+
export function create(db, input) {
|
|
13
|
+
const now = new Date().toISOString();
|
|
14
|
+
return db.kysely
|
|
15
|
+
.insertInto('memberships')
|
|
16
|
+
.values({
|
|
17
|
+
createdAt: now,
|
|
18
|
+
orgId: input.orgId,
|
|
19
|
+
role: input.role,
|
|
20
|
+
updatedAt: now,
|
|
21
|
+
userId: input.userId,
|
|
22
|
+
})
|
|
23
|
+
.returningAll()
|
|
24
|
+
.executeTakeFirstOrThrow();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Reads one user's membership in an organization.
|
|
28
|
+
*
|
|
29
|
+
* @param db - The database.
|
|
30
|
+
* @param orgId - The organization id (`org_…`).
|
|
31
|
+
* @param userId - The member user id (`usr_…`).
|
|
32
|
+
* @returns The record, or `undefined` when absent.
|
|
33
|
+
*/
|
|
34
|
+
export function get(db, orgId, userId) {
|
|
35
|
+
return db.kysely
|
|
36
|
+
.selectFrom('memberships')
|
|
37
|
+
.selectAll()
|
|
38
|
+
.where('orgId', '=', orgId)
|
|
39
|
+
.where('userId', '=', userId)
|
|
40
|
+
.executeTakeFirst();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Lists an organization's memberships, oldest first (stable member ordering).
|
|
44
|
+
*
|
|
45
|
+
* @param db - The database.
|
|
46
|
+
* @param orgId - The organization id (`org_…`).
|
|
47
|
+
* @returns The records.
|
|
48
|
+
*/
|
|
49
|
+
export function listByOrg(db, orgId) {
|
|
50
|
+
return db.kysely
|
|
51
|
+
.selectFrom('memberships')
|
|
52
|
+
.selectAll()
|
|
53
|
+
.where('orgId', '=', orgId)
|
|
54
|
+
.orderBy('createdAt', 'asc')
|
|
55
|
+
.execute();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Lists an organization's memberships joined with member identity (address,
|
|
59
|
+
* email), oldest first.
|
|
60
|
+
*
|
|
61
|
+
* @param db - The database.
|
|
62
|
+
* @param orgId - The organization id (`org_…`).
|
|
63
|
+
* @returns The records with `address`/`email` from the member's user row.
|
|
64
|
+
*/
|
|
65
|
+
export function listByOrgDetailed(db, orgId) {
|
|
66
|
+
return db.kysely
|
|
67
|
+
.selectFrom('memberships')
|
|
68
|
+
.innerJoin('users', 'users.id', 'memberships.userId')
|
|
69
|
+
.where('memberships.orgId', '=', orgId)
|
|
70
|
+
.selectAll('memberships')
|
|
71
|
+
.select(['users.address', 'users.email'])
|
|
72
|
+
.orderBy('memberships.createdAt', 'asc')
|
|
73
|
+
.execute();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Changes a member's role atomically, refusing to demote the last owner. The
|
|
77
|
+
* org's owner rows are locked for the transaction, so a concurrent demotion or
|
|
78
|
+
* removal cannot race two guards into leaving the organization ownerless.
|
|
79
|
+
*
|
|
80
|
+
* @param db - The database.
|
|
81
|
+
* @param orgId - The organization id (`org_…`).
|
|
82
|
+
* @param userId - The member user id (`usr_…`).
|
|
83
|
+
* @param input - The fields to update.
|
|
84
|
+
* @returns The updated record, or an `error` when absent or the last owner.
|
|
85
|
+
*/
|
|
86
|
+
export function update(db, orgId, userId, input) {
|
|
87
|
+
const now = new Date().toISOString();
|
|
88
|
+
return db.kysely.transaction().execute(async (trx) => {
|
|
89
|
+
const owners = await trx
|
|
90
|
+
.selectFrom('memberships')
|
|
91
|
+
.select('userId')
|
|
92
|
+
.where('orgId', '=', orgId)
|
|
93
|
+
.where('role', '=', 'owner')
|
|
94
|
+
.forUpdate()
|
|
95
|
+
.execute();
|
|
96
|
+
const current = await trx
|
|
97
|
+
.selectFrom('memberships')
|
|
98
|
+
.selectAll()
|
|
99
|
+
.where('orgId', '=', orgId)
|
|
100
|
+
.where('userId', '=', userId)
|
|
101
|
+
.executeTakeFirst();
|
|
102
|
+
if (!current)
|
|
103
|
+
return { error: 'not_found' };
|
|
104
|
+
if (current.role === 'owner' && input.role !== 'owner' && owners.length <= 1)
|
|
105
|
+
return { error: 'last_owner' };
|
|
106
|
+
const record = await trx
|
|
107
|
+
.updateTable('memberships')
|
|
108
|
+
.set({ role: input.role, updatedAt: now })
|
|
109
|
+
.where('orgId', '=', orgId)
|
|
110
|
+
.where('userId', '=', userId)
|
|
111
|
+
.returningAll()
|
|
112
|
+
.executeTakeFirstOrThrow();
|
|
113
|
+
return { record };
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Deletes a membership atomically, refusing to remove the last owner. Locks
|
|
118
|
+
* the org's owner rows for the transaction (see {@link update}) so concurrent
|
|
119
|
+
* removals cannot race the organization ownerless.
|
|
120
|
+
*
|
|
121
|
+
* @param db - The database.
|
|
122
|
+
* @param orgId - The organization id (`org_…`).
|
|
123
|
+
* @param userId - The member user id (`usr_…`).
|
|
124
|
+
* @returns `removed` on success, otherwise why the removal was refused.
|
|
125
|
+
*/
|
|
126
|
+
export function remove(db, orgId, userId) {
|
|
127
|
+
return db.kysely.transaction().execute(async (trx) => {
|
|
128
|
+
const owners = await trx
|
|
129
|
+
.selectFrom('memberships')
|
|
130
|
+
.select('userId')
|
|
131
|
+
.where('orgId', '=', orgId)
|
|
132
|
+
.where('role', '=', 'owner')
|
|
133
|
+
.forUpdate()
|
|
134
|
+
.execute();
|
|
135
|
+
const current = await trx
|
|
136
|
+
.selectFrom('memberships')
|
|
137
|
+
.selectAll()
|
|
138
|
+
.where('orgId', '=', orgId)
|
|
139
|
+
.where('userId', '=', userId)
|
|
140
|
+
.executeTakeFirst();
|
|
141
|
+
if (!current)
|
|
142
|
+
return 'not_found';
|
|
143
|
+
if (current.role === 'owner' && owners.length <= 1)
|
|
144
|
+
return 'last_owner';
|
|
145
|
+
await trx
|
|
146
|
+
.deleteFrom('memberships')
|
|
147
|
+
.where('orgId', '=', orgId)
|
|
148
|
+
.where('userId', '=', userId)
|
|
149
|
+
.execute();
|
|
150
|
+
return 'removed';
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=memberships.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memberships.js","sourceRoot":"","sources":["../../../src/db/tables/memberships.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
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 `organizations` table, derived from `Schema.Organization`. */
|
|
5
|
+
export type Table = db_Schema.Organization;
|
|
6
|
+
/** A stored organization row. */
|
|
7
|
+
export type Record = Selectable<Table>;
|
|
8
|
+
/**
|
|
9
|
+
* Inserts an organization and returns the stored record. The `id` defaults to
|
|
10
|
+
* a generated `org_…` handle when omitted.
|
|
11
|
+
*
|
|
12
|
+
* @param db - The database.
|
|
13
|
+
* @param input - The organization to insert.
|
|
14
|
+
* @returns The stored record.
|
|
15
|
+
*/
|
|
16
|
+
export declare function create(db: Db.Db, input: create.Input): Promise<Record>;
|
|
17
|
+
export declare namespace create {
|
|
18
|
+
/** Fields accepted when inserting an organization. */
|
|
19
|
+
type Input = {
|
|
20
|
+
/** Identity creating the organization (e.g. admin email), recorded for audit. */
|
|
21
|
+
createdBy?: string | undefined;
|
|
22
|
+
/** Explicit id; a generated `org_…` handle is used when omitted. */
|
|
23
|
+
id?: string | undefined;
|
|
24
|
+
/** Human-readable organization name. */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Owning user id (`usr_…`); null for organizations created by the super admin. */
|
|
27
|
+
userId?: string | undefined;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Inserts an organization owned by `userId` — the org row plus its `owner`
|
|
32
|
+
* membership, atomically.
|
|
33
|
+
*
|
|
34
|
+
* @param db - The database.
|
|
35
|
+
* @param input - The organization to insert.
|
|
36
|
+
* @returns The stored record.
|
|
37
|
+
*/
|
|
38
|
+
export declare function createOwned(db: Db.Db, input: createOwned.Input): Promise<Record>;
|
|
39
|
+
export declare namespace createOwned {
|
|
40
|
+
/** Fields accepted when inserting a user-owned organization. */
|
|
41
|
+
type Input = {
|
|
42
|
+
/** Human-readable organization name. */
|
|
43
|
+
name: string;
|
|
44
|
+
/** Owning user id (`usr_…`), granted the `owner` membership. */
|
|
45
|
+
userId: string;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Deletes an organization and its owned rows atomically.
|
|
50
|
+
*
|
|
51
|
+
* @param db - The database.
|
|
52
|
+
* @param id - The organization id (`org_…`).
|
|
53
|
+
* @returns Whether the organization existed and was deleted.
|
|
54
|
+
*/
|
|
55
|
+
export declare function deleteOrganization(db: Db.Db, id: string): Promise<boolean>;
|
|
56
|
+
/**
|
|
57
|
+
* Reads an organization by id.
|
|
58
|
+
*
|
|
59
|
+
* @param db - The database.
|
|
60
|
+
* @param id - The organization id (`org_…`).
|
|
61
|
+
* @returns The record, or `undefined` when absent.
|
|
62
|
+
*/
|
|
63
|
+
export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
|
|
64
|
+
/**
|
|
65
|
+
* Lists organizations, newest first.
|
|
66
|
+
*
|
|
67
|
+
* @param db - The database.
|
|
68
|
+
* @returns The records.
|
|
69
|
+
*/
|
|
70
|
+
export declare function list(db: Db.Db): Promise<Record[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Lists organizations owned by `userId`, newest first.
|
|
73
|
+
*
|
|
74
|
+
* @param db - The database.
|
|
75
|
+
* @param userId - The owning user id (`usr_…`).
|
|
76
|
+
* @returns The records.
|
|
77
|
+
*/
|
|
78
|
+
export declare function listByUser(db: Db.Db, userId: string): Promise<Record[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Lists organizations `userId` is a member of (any role), newest first.
|
|
81
|
+
*
|
|
82
|
+
* @param db - The database.
|
|
83
|
+
* @param userId - The member user id (`usr_…`).
|
|
84
|
+
* @returns The records.
|
|
85
|
+
*/
|
|
86
|
+
export declare function listByMember(db: Db.Db, userId: string): Promise<Record[]>;
|
|
87
|
+
/**
|
|
88
|
+
* Renames an organization, bumping `updatedAt`.
|
|
89
|
+
*
|
|
90
|
+
* @param db - The database.
|
|
91
|
+
* @param id - The organization id (`org_…`).
|
|
92
|
+
* @param input - The fields to update.
|
|
93
|
+
* @returns The updated record, or `undefined` when absent.
|
|
94
|
+
*/
|
|
95
|
+
export declare function update(db: Db.Db, id: string, input: update.Input): Promise<Record | undefined>;
|
|
96
|
+
export declare namespace update {
|
|
97
|
+
/** Mutable organization fields. */
|
|
98
|
+
type Input = {
|
|
99
|
+
/** New human-readable organization name. */
|
|
100
|
+
name: string;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Inserts an organization when absent (`ON CONFLICT DO NOTHING`) — the
|
|
105
|
+
* mint/backfill path, where a key's `orgId` must resolve to a real row. The
|
|
106
|
+
* `name` defaults to the id for degenerate orgs created by the mint fallback.
|
|
107
|
+
*
|
|
108
|
+
* @param db - The database.
|
|
109
|
+
* @param input - The organization to ensure.
|
|
110
|
+
*/
|
|
111
|
+
export declare function upsert(db: Db.Db, input: upsert.Input): Promise<void>;
|
|
112
|
+
export declare namespace upsert {
|
|
113
|
+
/** Fields accepted when ensuring an organization exists. */
|
|
114
|
+
type Input = {
|
|
115
|
+
/** Identity creating the organization, recorded for audit. */
|
|
116
|
+
createdBy?: string | undefined;
|
|
117
|
+
/** The organization id (`org_…`, or a mint-fallback key id). */
|
|
118
|
+
id: string;
|
|
119
|
+
/** Human-readable organization name; defaults to the id. */
|
|
120
|
+
name?: string | undefined;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=organizations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../../src/db/tables/organizations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
/**
|
|
3
|
+
* Inserts an organization and returns the stored record. The `id` defaults to
|
|
4
|
+
* a generated `org_…` handle when omitted.
|
|
5
|
+
*
|
|
6
|
+
* @param db - The database.
|
|
7
|
+
* @param input - The organization to insert.
|
|
8
|
+
* @returns The stored record.
|
|
9
|
+
*/
|
|
10
|
+
export function create(db, input) {
|
|
11
|
+
const now = new Date().toISOString();
|
|
12
|
+
return db.kysely
|
|
13
|
+
.insertInto('organizations')
|
|
14
|
+
.values({
|
|
15
|
+
createdAt: now,
|
|
16
|
+
createdBy: input.createdBy ?? null,
|
|
17
|
+
id: input.id ?? `org_${nanoid()}`,
|
|
18
|
+
name: input.name,
|
|
19
|
+
updatedAt: now,
|
|
20
|
+
userId: input.userId ?? null,
|
|
21
|
+
})
|
|
22
|
+
.returningAll()
|
|
23
|
+
.executeTakeFirstOrThrow();
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Inserts an organization owned by `userId` — the org row plus its `owner`
|
|
27
|
+
* membership, atomically.
|
|
28
|
+
*
|
|
29
|
+
* @param db - The database.
|
|
30
|
+
* @param input - The organization to insert.
|
|
31
|
+
* @returns The stored record.
|
|
32
|
+
*/
|
|
33
|
+
export function createOwned(db, input) {
|
|
34
|
+
const now = new Date().toISOString();
|
|
35
|
+
return db.kysely.transaction().execute(async (trx) => {
|
|
36
|
+
const record = await trx
|
|
37
|
+
.insertInto('organizations')
|
|
38
|
+
.values({
|
|
39
|
+
createdAt: now,
|
|
40
|
+
createdBy: input.userId,
|
|
41
|
+
id: `org_${nanoid()}`,
|
|
42
|
+
name: input.name,
|
|
43
|
+
updatedAt: now,
|
|
44
|
+
userId: input.userId,
|
|
45
|
+
})
|
|
46
|
+
.returningAll()
|
|
47
|
+
.executeTakeFirstOrThrow();
|
|
48
|
+
await trx
|
|
49
|
+
.insertInto('memberships')
|
|
50
|
+
.values({
|
|
51
|
+
createdAt: now,
|
|
52
|
+
orgId: record.id,
|
|
53
|
+
role: 'owner',
|
|
54
|
+
updatedAt: now,
|
|
55
|
+
userId: input.userId,
|
|
56
|
+
})
|
|
57
|
+
.execute();
|
|
58
|
+
return record;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Deletes an organization and its owned rows atomically.
|
|
63
|
+
*
|
|
64
|
+
* @param db - The database.
|
|
65
|
+
* @param id - The organization id (`org_…`).
|
|
66
|
+
* @returns Whether the organization existed and was deleted.
|
|
67
|
+
*/
|
|
68
|
+
export function deleteOrganization(db, id) {
|
|
69
|
+
return db.kysely.transaction().execute(async (trx) => {
|
|
70
|
+
await trx
|
|
71
|
+
.deleteFrom('webhook_subscriptions')
|
|
72
|
+
.where('ownerType', '=', 'api_key')
|
|
73
|
+
.where('ownerId', '=', id)
|
|
74
|
+
.execute();
|
|
75
|
+
await trx.deleteFrom('invitations').where('orgId', '=', id).execute();
|
|
76
|
+
await trx.deleteFrom('memberships').where('orgId', '=', id).execute();
|
|
77
|
+
await trx.deleteFrom('projects').where('orgId', '=', id).execute();
|
|
78
|
+
const result = await trx.deleteFrom('organizations').where('id', '=', id).executeTakeFirst();
|
|
79
|
+
return result.numDeletedRows > 0n;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Reads an organization by id.
|
|
84
|
+
*
|
|
85
|
+
* @param db - The database.
|
|
86
|
+
* @param id - The organization id (`org_…`).
|
|
87
|
+
* @returns The record, or `undefined` when absent.
|
|
88
|
+
*/
|
|
89
|
+
export function get(db, id) {
|
|
90
|
+
return db.kysely.selectFrom('organizations').selectAll().where('id', '=', id).executeTakeFirst();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Lists organizations, newest first.
|
|
94
|
+
*
|
|
95
|
+
* @param db - The database.
|
|
96
|
+
* @returns The records.
|
|
97
|
+
*/
|
|
98
|
+
export function list(db) {
|
|
99
|
+
return db.kysely.selectFrom('organizations').selectAll().orderBy('createdAt', 'desc').execute();
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Lists organizations owned by `userId`, newest first.
|
|
103
|
+
*
|
|
104
|
+
* @param db - The database.
|
|
105
|
+
* @param userId - The owning user id (`usr_…`).
|
|
106
|
+
* @returns The records.
|
|
107
|
+
*/
|
|
108
|
+
export function listByUser(db, userId) {
|
|
109
|
+
return db.kysely
|
|
110
|
+
.selectFrom('organizations')
|
|
111
|
+
.selectAll()
|
|
112
|
+
.where('userId', '=', userId)
|
|
113
|
+
.orderBy('createdAt', 'desc')
|
|
114
|
+
.execute();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Lists organizations `userId` is a member of (any role), newest first.
|
|
118
|
+
*
|
|
119
|
+
* @param db - The database.
|
|
120
|
+
* @param userId - The member user id (`usr_…`).
|
|
121
|
+
* @returns The records.
|
|
122
|
+
*/
|
|
123
|
+
export function listByMember(db, userId) {
|
|
124
|
+
return db.kysely
|
|
125
|
+
.selectFrom('organizations')
|
|
126
|
+
.innerJoin('memberships', 'memberships.orgId', 'organizations.id')
|
|
127
|
+
.where('memberships.userId', '=', userId)
|
|
128
|
+
.selectAll('organizations')
|
|
129
|
+
.orderBy('organizations.createdAt', 'desc')
|
|
130
|
+
.execute();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Renames an organization, bumping `updatedAt`.
|
|
134
|
+
*
|
|
135
|
+
* @param db - The database.
|
|
136
|
+
* @param id - The organization id (`org_…`).
|
|
137
|
+
* @param input - The fields to update.
|
|
138
|
+
* @returns The updated record, or `undefined` when absent.
|
|
139
|
+
*/
|
|
140
|
+
export function update(db, id, input) {
|
|
141
|
+
return db.kysely
|
|
142
|
+
.updateTable('organizations')
|
|
143
|
+
.set({ name: input.name, updatedAt: new Date().toISOString() })
|
|
144
|
+
.where('id', '=', id)
|
|
145
|
+
.returningAll()
|
|
146
|
+
.executeTakeFirst();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Inserts an organization when absent (`ON CONFLICT DO NOTHING`) — the
|
|
150
|
+
* mint/backfill path, where a key's `orgId` must resolve to a real row. The
|
|
151
|
+
* `name` defaults to the id for degenerate orgs created by the mint fallback.
|
|
152
|
+
*
|
|
153
|
+
* @param db - The database.
|
|
154
|
+
* @param input - The organization to ensure.
|
|
155
|
+
*/
|
|
156
|
+
export async function upsert(db, input) {
|
|
157
|
+
const now = new Date().toISOString();
|
|
158
|
+
await db.kysely
|
|
159
|
+
.insertInto('organizations')
|
|
160
|
+
.values({
|
|
161
|
+
createdAt: now,
|
|
162
|
+
createdBy: input.createdBy ?? null,
|
|
163
|
+
id: input.id,
|
|
164
|
+
name: input.name ?? input.id,
|
|
165
|
+
updatedAt: now,
|
|
166
|
+
})
|
|
167
|
+
.onConflict((oc) => oc.column('id').doNothing())
|
|
168
|
+
.execute();
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=organizations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../../src/db/tables/organizations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAW/B;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,KAAmB;IACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,eAAe,CAAC;SAC3B,MAAM,CAAC;QACN,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,OAAO,MAAM,EAAE,EAAE;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,GAAG;QACd,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;KAC7B,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAA;AAC9B,CAAC;AAgBD;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,EAAS,EAAE,KAAwB;IAC7D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,OAAO,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,MAAM,GAAG;aACrB,UAAU,CAAC,eAAe,CAAC;aAC3B,MAAM,CAAC;YACN,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,KAAK,CAAC,MAAM;YACvB,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE;YACrB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;aACD,YAAY,EAAE;aACd,uBAAuB,EAAE,CAAA;QAC5B,MAAM,GAAG;aACN,UAAU,CAAC,aAAa,CAAC;aACzB,MAAM,CAAC;YACN,SAAS,EAAE,GAAG;YACd,KAAK,EAAE,MAAM,CAAC,EAAE;YAChB,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,GAAG;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC;aACD,OAAO,EAAE,CAAA;QACZ,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;AACJ,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAS,EAAE,EAAU;IACtD,OAAO,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACnD,MAAM,GAAG;aACN,UAAU,CAAC,uBAAuB,CAAC;aACnC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,SAAS,CAAC;aAClC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC;aACzB,OAAO,EAAE,CAAA;QACZ,MAAM,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QACrE,MAAM,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QACrE,MAAM,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;QAClE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;QAC5F,OAAO,MAAM,CAAC,cAAc,GAAG,EAAE,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAU;IACvC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;AAClG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,EAAS;IAC5B,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;AACjG,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,EAAS,EAAE,MAAc;IAClD,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,eAAe,CAAC;SAC3B,SAAS,EAAE;SACX,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC;SAC5B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,EAAE,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAAS,EAAE,MAAc;IACpD,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,eAAe,CAAC;SAC3B,SAAS,CAAC,aAAa,EAAE,mBAAmB,EAAE,kBAAkB,CAAC;SACjE,KAAK,CAAC,oBAAoB,EAAE,GAAG,EAAE,MAAM,CAAC;SACxC,SAAS,CAAC,eAAe,CAAC;SAC1B,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC;SAC1C,OAAO,EAAE,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,EAAU,EAAE,KAAmB;IAC/D,OAAO,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,eAAe,CAAC;SAC5B,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;SAC9D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;SACpB,YAAY,EAAE;SACd,gBAAgB,EAAE,CAAA;AACvB,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAAS,EAAE,KAAmB;IACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,EAAE,CAAC,MAAM;SACZ,UAAU,CAAC,eAAe,CAAC;SAC3B,MAAM,CAAC;QACN,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;QAC5B,SAAS,EAAE,GAAG;KACf,CAAC;SACD,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;SAC/C,OAAO,EAAE,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
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 `projects` table, derived from `Schema.Project`. */
|
|
5
|
+
export type Table = db_Schema.Project;
|
|
6
|
+
/** A stored project row. */
|
|
7
|
+
export type Record = Selectable<Table>;
|
|
8
|
+
/**
|
|
9
|
+
* Inserts a project and returns the stored record.
|
|
10
|
+
*
|
|
11
|
+
* @param db - The database.
|
|
12
|
+
* @param input - The project to insert.
|
|
13
|
+
* @returns The stored record.
|
|
14
|
+
*/
|
|
15
|
+
export declare function create(db: Db.Db, input: create.Input): Promise<Record>;
|
|
16
|
+
export declare namespace create {
|
|
17
|
+
/** Fields accepted when inserting a project. */
|
|
18
|
+
type Input = {
|
|
19
|
+
/** Human-readable project name. */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Owning organization id (`org_…`). */
|
|
22
|
+
orgId: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Deletes a project.
|
|
27
|
+
*
|
|
28
|
+
* @param db - The database.
|
|
29
|
+
* @param id - The project id (`prj_…`).
|
|
30
|
+
* @returns Whether the project existed and was deleted.
|
|
31
|
+
*/
|
|
32
|
+
export declare function deleteProject(db: Db.Db, id: string): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Reads a project by id.
|
|
35
|
+
*
|
|
36
|
+
* @param db - The database.
|
|
37
|
+
* @param id - The project id (`prj_…`).
|
|
38
|
+
* @returns The record, or `undefined` when absent.
|
|
39
|
+
*/
|
|
40
|
+
export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
|
|
41
|
+
/**
|
|
42
|
+
* Lists an organization's projects, newest first.
|
|
43
|
+
*
|
|
44
|
+
* @param db - The database.
|
|
45
|
+
* @param orgId - The owning organization id (`org_…`).
|
|
46
|
+
* @returns The records.
|
|
47
|
+
*/
|
|
48
|
+
export declare function listByOrg(db: Db.Db, orgId: string): Promise<Record[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Renames a project, bumping `updatedAt`.
|
|
51
|
+
*
|
|
52
|
+
* @param db - The database.
|
|
53
|
+
* @param id - The project id (`prj_…`).
|
|
54
|
+
* @param input - The fields to update.
|
|
55
|
+
* @returns The updated record, or `undefined` when absent.
|
|
56
|
+
*/
|
|
57
|
+
export declare function update(db: Db.Db, id: string, input: update.Input): Promise<Record | undefined>;
|
|
58
|
+
export declare namespace update {
|
|
59
|
+
/** Mutable project fields. */
|
|
60
|
+
type Input = {
|
|
61
|
+
/** New human-readable project name. */
|
|
62
|
+
name: string;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/db/tables/projects.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,sEAAsE;AACtE,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAA;AAErC,4BAA4B;AAC5B,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAatE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,gDAAgD;IAChD,KAAK,KAAK,GAAG;QACX,mCAAmC;QACnC,IAAI,EAAE,MAAM,CAAA;QACZ,wCAAwC;QACxC,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3E;AAED;;;;;;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,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOrE;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO9F;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,8BAA8B;IAC9B,KAAK,KAAK,GAAG;QACX,uCAAuC;QACvC,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
/**
|
|
3
|
+
* Inserts a project and returns the stored record.
|
|
4
|
+
*
|
|
5
|
+
* @param db - The database.
|
|
6
|
+
* @param input - The project to insert.
|
|
7
|
+
* @returns The stored record.
|
|
8
|
+
*/
|
|
9
|
+
export function create(db, input) {
|
|
10
|
+
const now = new Date().toISOString();
|
|
11
|
+
return db.kysely
|
|
12
|
+
.insertInto('projects')
|
|
13
|
+
.values({
|
|
14
|
+
createdAt: now,
|
|
15
|
+
id: `prj_${nanoid()}`,
|
|
16
|
+
name: input.name,
|
|
17
|
+
orgId: input.orgId,
|
|
18
|
+
updatedAt: now,
|
|
19
|
+
})
|
|
20
|
+
.returningAll()
|
|
21
|
+
.executeTakeFirstOrThrow();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Deletes a project.
|
|
25
|
+
*
|
|
26
|
+
* @param db - The database.
|
|
27
|
+
* @param id - The project id (`prj_…`).
|
|
28
|
+
* @returns Whether the project existed and was deleted.
|
|
29
|
+
*/
|
|
30
|
+
export async function deleteProject(db, id) {
|
|
31
|
+
const result = await db.kysely.deleteFrom('projects').where('id', '=', id).executeTakeFirst();
|
|
32
|
+
return result.numDeletedRows > 0n;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Reads a project by id.
|
|
36
|
+
*
|
|
37
|
+
* @param db - The database.
|
|
38
|
+
* @param id - The project id (`prj_…`).
|
|
39
|
+
* @returns The record, or `undefined` when absent.
|
|
40
|
+
*/
|
|
41
|
+
export function get(db, id) {
|
|
42
|
+
return db.kysely.selectFrom('projects').selectAll().where('id', '=', id).executeTakeFirst();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Lists an organization's projects, newest first.
|
|
46
|
+
*
|
|
47
|
+
* @param db - The database.
|
|
48
|
+
* @param orgId - The owning organization id (`org_…`).
|
|
49
|
+
* @returns The records.
|
|
50
|
+
*/
|
|
51
|
+
export function listByOrg(db, orgId) {
|
|
52
|
+
return db.kysely
|
|
53
|
+
.selectFrom('projects')
|
|
54
|
+
.selectAll()
|
|
55
|
+
.where('orgId', '=', orgId)
|
|
56
|
+
.orderBy('createdAt', 'desc')
|
|
57
|
+
.execute();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Renames a project, bumping `updatedAt`.
|
|
61
|
+
*
|
|
62
|
+
* @param db - The database.
|
|
63
|
+
* @param id - The project id (`prj_…`).
|
|
64
|
+
* @param input - The fields to update.
|
|
65
|
+
* @returns The updated record, or `undefined` when absent.
|
|
66
|
+
*/
|
|
67
|
+
export function update(db, id, input) {
|
|
68
|
+
return db.kysely
|
|
69
|
+
.updateTable('projects')
|
|
70
|
+
.set({ name: input.name, updatedAt: new Date().toISOString() })
|
|
71
|
+
.where('id', '=', id)
|
|
72
|
+
.returningAll()
|
|
73
|
+
.executeTakeFirst();
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/db/tables/projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAW/B;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,KAAmB;IACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC;QACN,SAAS,EAAE,GAAG;QACd,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,GAAG;KACf,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAA;AAC9B,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAS,EAAE,EAAU;IACvD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;IAC7F,OAAO,MAAM,CAAC,cAAc,GAAG,EAAE,CAAA;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAU;IACvC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;AAC7F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,EAAS,EAAE,KAAa;IAChD,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,UAAU,CAAC;SACtB,SAAS,EAAE;SACX,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,EAAE,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,EAAU,EAAE,KAAmB;IAC/D,OAAO,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,UAAU,CAAC;SACvB,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;SAC9D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;SACpB,YAAY,EAAE;SACd,gBAAgB,EAAE,CAAA;AACvB,CAAC"}
|