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 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../../src/apps/platform/routes/projects.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAG7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAK3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAMzD,kDAAkD;AAClD,yBAAiB,MAAM,CAAC;IAUtB,iEAAiE;IAC1D,MAAM,OAAO;;;;;;;;;;qBAmCnB,CAAA;IAED,uEAAuE;IAChE,MAAM,MAAM;;qBASoD,CAAA;IAEvE,8CAA8C;IACvC,MAAM,aAAa;;;qBAe8B,CAAA;IAExD,mDAAmD;IAC5C,MAAM,WAAW;;qBAE0C,CAAA;IAElE,+CAA+C;IAC/C,UAAiB,aAAa,CAAC;QAC7B,iDAAiD;QAC1C,MAAM,QAAQ;;yBAS6C,CAAA;KACnE;IAED,8CAA8C;IAC9C,UAAiB,YAAY,CAAC;QAC5B,wDAAwD;QACjD,MAAM,QAAQ;;;;;;;;;;;;yBAKpB,CAAA;KACF;CACF;AAED;;;;GAIG;AACH,wBAAgB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uFAwNvB"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import * as z from 'zod/mini';
|
|
3
|
+
import * as ApiKeys from '../../../ApiKeys.js';
|
|
4
|
+
import * as Auth from '../../../internal/Auth.js';
|
|
5
|
+
import * as Db from '../../../db/Db.js';
|
|
6
|
+
import * as OpenApi from '../../../internal/OpenApi.js';
|
|
7
|
+
import * as Projects from '../../../db/tables/projects.js';
|
|
8
|
+
import * as Response from '../../../internal/Response.js';
|
|
9
|
+
import * as Schema from '../../../internal/Schema.js';
|
|
10
|
+
/** Environments every project exposes; sandbox maps to testnet, production to mainnet. */
|
|
11
|
+
const environments = ['production', 'sandbox'];
|
|
12
|
+
/** Zod schemas owned by the projects resource. */
|
|
13
|
+
export var schema;
|
|
14
|
+
(function (schema) {
|
|
15
|
+
const name = z
|
|
16
|
+
.string()
|
|
17
|
+
.check(z.minLength(1), z.maxLength(100), z.describe('Human-readable name.'), z.meta({ examples: ['Checkout'] }));
|
|
18
|
+
/** One project: an app or integration within an organization. */
|
|
19
|
+
schema.Project = Schema.describe(z.object({
|
|
20
|
+
createdAt: z
|
|
21
|
+
.string()
|
|
22
|
+
.check(z.describe('When the project was created (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
|
|
23
|
+
environments: z.array(z.enum(environments)).check(z.describe('Environments available to this project: sandbox (testnet) and production (mainnet).'), // prettier-ignore
|
|
24
|
+
z.meta({ examples: [[...environments]] })),
|
|
25
|
+
id: z
|
|
26
|
+
.string()
|
|
27
|
+
.check(z.describe('Opaque project id (`prj_…`).'), z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
28
|
+
name: z
|
|
29
|
+
.string()
|
|
30
|
+
.check(z.describe('Human-readable project name.'), z.meta({ examples: ['Checkout'] })),
|
|
31
|
+
orgId: z
|
|
32
|
+
.string()
|
|
33
|
+
.check(z.describe('Owning organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
34
|
+
updatedAt: z
|
|
35
|
+
.string()
|
|
36
|
+
.check(z.describe('When the project was last updated (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
|
|
37
|
+
}), 'A project: an app or integration within an organization.');
|
|
38
|
+
/** Path parameters addressing an organization's project collection. */
|
|
39
|
+
schema.Params = z
|
|
40
|
+
.object({
|
|
41
|
+
orgId: z
|
|
42
|
+
.string()
|
|
43
|
+
.check(z.describe('The organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
44
|
+
})
|
|
45
|
+
.check(z.describe("Path parameters for an organization's projects."));
|
|
46
|
+
/** Path parameters addressing one project. */
|
|
47
|
+
schema.ProjectParams = z
|
|
48
|
+
.object({
|
|
49
|
+
orgId: z
|
|
50
|
+
.string()
|
|
51
|
+
.check(z.describe('The organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
52
|
+
projectId: z
|
|
53
|
+
.string()
|
|
54
|
+
.check(z.describe('The project id (`prj_…`).'), z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
55
|
+
})
|
|
56
|
+
.check(z.describe('Path parameters for one project.'));
|
|
57
|
+
/** Request body creating or renaming a project. */
|
|
58
|
+
schema.ProjectBody = z
|
|
59
|
+
.object({ name })
|
|
60
|
+
.check(z.describe('Fields for creating or renaming a project.'));
|
|
61
|
+
/** Schemas for the deleteProject operation. */
|
|
62
|
+
let deleteProject;
|
|
63
|
+
(function (deleteProject) {
|
|
64
|
+
/** Confirmation that the project was deleted. */
|
|
65
|
+
deleteProject.Response = z
|
|
66
|
+
.object({
|
|
67
|
+
id: z
|
|
68
|
+
.string()
|
|
69
|
+
.check(z.describe('ID of the project that was deleted.'), z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
|
|
70
|
+
})
|
|
71
|
+
.check(z.describe('Confirmation that the project was deleted.'));
|
|
72
|
+
})(deleteProject = schema.deleteProject || (schema.deleteProject = {}));
|
|
73
|
+
/** Schemas for the listProjects operation. */
|
|
74
|
+
let listProjects;
|
|
75
|
+
(function (listProjects) {
|
|
76
|
+
/** Non-paginated list of an organization's projects. */
|
|
77
|
+
listProjects.Response = Schema.describe(z.object({
|
|
78
|
+
data: z.array(schema.Project).check(z.describe('The projects, newest first.')),
|
|
79
|
+
}), "A non-paginated list of an organization's projects.");
|
|
80
|
+
})(listProjects = schema.listProjects || (schema.listProjects = {}));
|
|
81
|
+
})(schema || (schema = {}));
|
|
82
|
+
/**
|
|
83
|
+
* Mounts the `/orgs/:orgId/projects` resource: projects nested under their
|
|
84
|
+
* owning organization. Access follows the org scope (owning session or super
|
|
85
|
+
* admin); inaccessible or absent ids render `404`.
|
|
86
|
+
*/
|
|
87
|
+
export function projects() {
|
|
88
|
+
return new Hono()
|
|
89
|
+
.get('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects', Auth.policy({ session: true }), Auth.ensureOrg(), OpenApi.validate('param', schema.Params, {
|
|
90
|
+
code: 'param_invalid',
|
|
91
|
+
message: 'Check the path parameters and try again.',
|
|
92
|
+
}), OpenApi.describeRoute({
|
|
93
|
+
operationId: 'listProjects',
|
|
94
|
+
responses: OpenApi.responses({
|
|
95
|
+
errors: { 404: 'No accessible organization was found for this id.' },
|
|
96
|
+
success: {
|
|
97
|
+
description: "The organization's projects, newest first.",
|
|
98
|
+
schema: schema.listProjects.Response,
|
|
99
|
+
},
|
|
100
|
+
}),
|
|
101
|
+
summary: 'List projects',
|
|
102
|
+
tags: ['Projects'],
|
|
103
|
+
}), async (c) => {
|
|
104
|
+
if (Auth.narrowAccess)
|
|
105
|
+
return Auth.superAdminAccessError(c);
|
|
106
|
+
if (Auth.narrowScope)
|
|
107
|
+
return Auth.ensureOrgError(c);
|
|
108
|
+
if (OpenApi.narrowValidation)
|
|
109
|
+
return OpenApi.validationError(c, {
|
|
110
|
+
code: 'param_invalid',
|
|
111
|
+
message: 'Check the path parameters and try again.',
|
|
112
|
+
});
|
|
113
|
+
const db = Db.get(c.get('db'));
|
|
114
|
+
try {
|
|
115
|
+
const records = await Projects.listByOrg(db, Auth.org(c).id);
|
|
116
|
+
return c.json(Response.validated(schema.listProjects.Response, {
|
|
117
|
+
data: records.map(serializeProject),
|
|
118
|
+
}), 200);
|
|
119
|
+
}
|
|
120
|
+
catch (cause) {
|
|
121
|
+
return Response.upstream(c, cause);
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
.post('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.Params, {
|
|
125
|
+
code: 'param_invalid',
|
|
126
|
+
message: 'Check the path parameters and try again.',
|
|
127
|
+
}), OpenApi.validate('json', schema.ProjectBody, {
|
|
128
|
+
code: 'body_invalid',
|
|
129
|
+
message: 'Check the request body and try again.',
|
|
130
|
+
}), OpenApi.describeRoute({
|
|
131
|
+
operationId: 'createProject',
|
|
132
|
+
responses: OpenApi.responses({
|
|
133
|
+
errors: { 404: 'No accessible organization was found for this id.' },
|
|
134
|
+
success: { description: 'The created project.', schema: schema.Project },
|
|
135
|
+
}),
|
|
136
|
+
summary: 'Create project',
|
|
137
|
+
tags: ['Projects'],
|
|
138
|
+
}), async (c) => {
|
|
139
|
+
if (Auth.narrowAccess)
|
|
140
|
+
return Auth.superAdminAccessError(c);
|
|
141
|
+
if (Auth.narrowScope)
|
|
142
|
+
return Auth.ensureOrgError(c);
|
|
143
|
+
if (OpenApi.narrowValidation)
|
|
144
|
+
return OpenApi.validationError(c, {
|
|
145
|
+
code: 'param_invalid',
|
|
146
|
+
message: 'Check the path parameters and try again.',
|
|
147
|
+
});
|
|
148
|
+
if (OpenApi.narrowValidation)
|
|
149
|
+
return OpenApi.validationError(c, {
|
|
150
|
+
code: 'body_invalid',
|
|
151
|
+
message: 'Check the request body and try again.',
|
|
152
|
+
});
|
|
153
|
+
const body = c.req.valid('json');
|
|
154
|
+
const db = Db.get(c.get('db'));
|
|
155
|
+
try {
|
|
156
|
+
const record = await Projects.create(db, { name: body.name, orgId: Auth.org(c).id });
|
|
157
|
+
return c.json(Response.validated(schema.Project, serializeProject(record)), 200);
|
|
158
|
+
}
|
|
159
|
+
catch (cause) {
|
|
160
|
+
return Response.upstream(c, cause);
|
|
161
|
+
}
|
|
162
|
+
})
|
|
163
|
+
.get('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects/:projectId{prj_[A-Za-z0-9_-]+}', Auth.policy({ session: true }), Auth.ensureOrg(), Auth.ensureProject(), OpenApi.validate('param', schema.ProjectParams, {
|
|
164
|
+
code: 'param_invalid',
|
|
165
|
+
message: 'Check the path parameters and try again.',
|
|
166
|
+
}), OpenApi.describeRoute({
|
|
167
|
+
operationId: 'getProject',
|
|
168
|
+
responses: OpenApi.responses({
|
|
169
|
+
errors: { 404: 'No accessible project was found for this id.' },
|
|
170
|
+
success: { description: 'One project.', schema: schema.Project },
|
|
171
|
+
}),
|
|
172
|
+
summary: 'Get project',
|
|
173
|
+
tags: ['Projects'],
|
|
174
|
+
}), async (c) => {
|
|
175
|
+
if (Auth.narrowAccess)
|
|
176
|
+
return Auth.superAdminAccessError(c);
|
|
177
|
+
if (Auth.narrowScope)
|
|
178
|
+
return Auth.ensureProjectError(c);
|
|
179
|
+
if (OpenApi.narrowValidation)
|
|
180
|
+
return OpenApi.validationError(c, {
|
|
181
|
+
code: 'param_invalid',
|
|
182
|
+
message: 'Check the path parameters and try again.',
|
|
183
|
+
});
|
|
184
|
+
return c.json(Response.validated(schema.Project, serializeProject(Auth.project(c))), 200);
|
|
185
|
+
})
|
|
186
|
+
.patch('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects/:projectId{prj_[A-Za-z0-9_-]+}', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), Auth.ensureProject(), OpenApi.validate('param', schema.ProjectParams, {
|
|
187
|
+
code: 'param_invalid',
|
|
188
|
+
message: 'Check the path parameters and try again.',
|
|
189
|
+
}), OpenApi.validate('json', schema.ProjectBody, {
|
|
190
|
+
code: 'body_invalid',
|
|
191
|
+
message: 'Check the request body and try again.',
|
|
192
|
+
}), OpenApi.describeRoute({
|
|
193
|
+
operationId: 'updateProject',
|
|
194
|
+
responses: OpenApi.responses({
|
|
195
|
+
errors: { 404: 'No accessible project was found for this id.' },
|
|
196
|
+
success: { description: 'The updated project.', schema: schema.Project },
|
|
197
|
+
}),
|
|
198
|
+
summary: 'Update project',
|
|
199
|
+
tags: ['Projects'],
|
|
200
|
+
}), async (c) => {
|
|
201
|
+
if (Auth.narrowAccess)
|
|
202
|
+
return Auth.superAdminAccessError(c);
|
|
203
|
+
if (OpenApi.narrowValidation)
|
|
204
|
+
return OpenApi.validationError(c, {
|
|
205
|
+
code: 'param_invalid',
|
|
206
|
+
message: 'Check the path parameters and try again.',
|
|
207
|
+
});
|
|
208
|
+
if (OpenApi.narrowValidation)
|
|
209
|
+
return OpenApi.validationError(c, {
|
|
210
|
+
code: 'body_invalid',
|
|
211
|
+
message: 'Check the request body and try again.',
|
|
212
|
+
});
|
|
213
|
+
if (Auth.narrowScope)
|
|
214
|
+
return Auth.ensureProjectError(c);
|
|
215
|
+
const body = c.req.valid('json');
|
|
216
|
+
const db = Db.get(c.get('db'));
|
|
217
|
+
try {
|
|
218
|
+
const updated = await Projects.update(db, Auth.project(c).id, { name: body.name });
|
|
219
|
+
if (!updated)
|
|
220
|
+
return projectNotFound(c);
|
|
221
|
+
return c.json(Response.validated(schema.Project, serializeProject(updated)), 200);
|
|
222
|
+
}
|
|
223
|
+
catch (cause) {
|
|
224
|
+
return Response.upstream(c, cause);
|
|
225
|
+
}
|
|
226
|
+
})
|
|
227
|
+
.delete('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/projects/:projectId{prj_[A-Za-z0-9_-]+}', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), Auth.ensureProject(), OpenApi.validate('param', schema.ProjectParams, {
|
|
228
|
+
code: 'param_invalid',
|
|
229
|
+
message: 'Check the path parameters and try again.',
|
|
230
|
+
}), OpenApi.describeRoute({
|
|
231
|
+
operationId: 'deleteProject',
|
|
232
|
+
responses: OpenApi.responses({
|
|
233
|
+
errors: { 404: 'No accessible project was found for this id.' },
|
|
234
|
+
success: {
|
|
235
|
+
description: 'Confirmation that the project was deleted.',
|
|
236
|
+
schema: schema.deleteProject.Response,
|
|
237
|
+
},
|
|
238
|
+
}),
|
|
239
|
+
summary: 'Delete project',
|
|
240
|
+
tags: ['Projects'],
|
|
241
|
+
}), async (c) => {
|
|
242
|
+
if (Auth.narrowAccess)
|
|
243
|
+
return Auth.superAdminAccessError(c);
|
|
244
|
+
if (Auth.narrowScope)
|
|
245
|
+
return Auth.ensureProjectError(c);
|
|
246
|
+
if (OpenApi.narrowValidation)
|
|
247
|
+
return OpenApi.validationError(c, {
|
|
248
|
+
code: 'param_invalid',
|
|
249
|
+
message: 'Check the path parameters and try again.',
|
|
250
|
+
});
|
|
251
|
+
const db = Db.get(c.get('db'));
|
|
252
|
+
try {
|
|
253
|
+
const kv = c.get('kv');
|
|
254
|
+
if (kv)
|
|
255
|
+
for (const record of await ApiKeys.listByOrg(kv.store, Auth.org(c).id, {
|
|
256
|
+
projectId: Auth.project(c).id,
|
|
257
|
+
}))
|
|
258
|
+
await ApiKeys.revoke(kv.store, record.id);
|
|
259
|
+
const deleted = await Projects.deleteProject(db, Auth.project(c).id);
|
|
260
|
+
if (!deleted)
|
|
261
|
+
return projectNotFound(c);
|
|
262
|
+
return c.json(Response.validated(schema.deleteProject.Response, { id: Auth.project(c).id }), 200);
|
|
263
|
+
}
|
|
264
|
+
catch (cause) {
|
|
265
|
+
return Response.upstream(c, cause);
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
function serializeProject(record) {
|
|
270
|
+
return {
|
|
271
|
+
createdAt: record.createdAt,
|
|
272
|
+
environments: [...environments],
|
|
273
|
+
id: record.id,
|
|
274
|
+
name: record.name,
|
|
275
|
+
orgId: record.orgId,
|
|
276
|
+
updatedAt: record.updatedAt,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
function projectNotFound(c) {
|
|
280
|
+
return Response.error(c, {
|
|
281
|
+
code: 'project_not_found',
|
|
282
|
+
message: 'Project not found',
|
|
283
|
+
status: 404,
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../../src/apps/platform/routes/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type * as App from '../../App.js';
|
|
2
|
+
import * as Handler from '../../Handler.js';
|
|
3
|
+
/**
|
|
4
|
+
* The relay route group: the wallet relay at `/rpc/relay`. Mount
|
|
5
|
+
* after `data()`, whose published chain clients and supported-chain set the
|
|
6
|
+
* middleware reads from request context.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* App.create(options).route('/', data()).route('/', relay())
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
export declare function relay(options?: relay.Options): import("hono/hono-base").HonoBase<App.Environment, {
|
|
13
|
+
"/rpc/relay": {
|
|
14
|
+
$all: {
|
|
15
|
+
output: {};
|
|
16
|
+
outputFormat: string;
|
|
17
|
+
status: import("hono/utils/http-status").StatusCode;
|
|
18
|
+
input: {};
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
} & {
|
|
22
|
+
"/rpc/relay/:chainId": {
|
|
23
|
+
$all: {
|
|
24
|
+
output: {};
|
|
25
|
+
outputFormat: string;
|
|
26
|
+
status: import("hono/utils/http-status").StatusCode;
|
|
27
|
+
input: {
|
|
28
|
+
param: {
|
|
29
|
+
chainId: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
}, "/", "/rpc/relay/:chainId">;
|
|
35
|
+
export declare namespace relay {
|
|
36
|
+
/** Options for the relay route group. */
|
|
37
|
+
type Options = {
|
|
38
|
+
feePayer?: Pick<NonNullable<Handler.relay.Options['feePayer']>, 'account' | 'feeToken' | 'name' | 'url'> | undefined;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=App.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/apps/relay/App.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAA;AAGxC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAA;AAQ3C;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE,KAAK,CAAC,OAAY;;;;;;;;;;;;;;;;;;;;;;+BAehD;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,yCAAyC;IACzC,KAAK,OAAO,GAAG;QACb,QAAQ,CAAC,EACL,IAAI,CACF,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAC9C,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,CACxC,GACD,SAAS,CAAA;KACd,CAAA;CACF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Hono } from 'hono';
|
|
2
|
+
import { createMiddleware } from 'hono/factory';
|
|
3
|
+
import { Addresses } from 'viem/tempo';
|
|
4
|
+
import * as Db from '../../db/Db.js';
|
|
5
|
+
import * as SponsoredTransactions from '../../db/tables/sponsoredTransactions.js';
|
|
6
|
+
import * as Handler from '../../Handler.js';
|
|
7
|
+
import * as Auth from '../../internal/Auth.js';
|
|
8
|
+
import * as OpenApi from '../../internal/OpenApi.js';
|
|
9
|
+
import * as Path from '../../internal/Path.js';
|
|
10
|
+
import * as VerifiedTokens from '../../internal/VerifiedTokens.js';
|
|
11
|
+
import * as Viem from '../../internal/Viem.js';
|
|
12
|
+
import * as Scope from '../../Scope.js';
|
|
13
|
+
/**
|
|
14
|
+
* The relay route group: the wallet relay at `/rpc/relay`. Mount
|
|
15
|
+
* after `data()`, whose published chain clients and supported-chain set the
|
|
16
|
+
* middleware reads from request context.
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* App.create(options).route('/', data()).route('/', relay())
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export function relay(options = {}) {
|
|
23
|
+
const handler = middleware(options);
|
|
24
|
+
return new Hono()
|
|
25
|
+
.use('/rpc/relay', Auth.policy({ apiKey: { scopes: ['rpc-relay:read'] }, mpp: false, public: false }), OpenApi.describeRoute({ hide: true, summary: 'Relay RPC' }))
|
|
26
|
+
.use('/rpc/relay/*', Auth.policy({ apiKey: { scopes: ['rpc-relay:read'] }, mpp: false, public: false }), OpenApi.describeRoute({ hide: true, summary: 'Relay RPC' }))
|
|
27
|
+
.all('/rpc/relay', handler)
|
|
28
|
+
.all('/rpc/relay/:chainId', handler);
|
|
29
|
+
}
|
|
30
|
+
// The wallet relay middleware: proxies wallet JSON-RPC (fills, sponsored
|
|
31
|
+
// sends) with wallet-aware enrichment. Built per request from context rather
|
|
32
|
+
// than closed over group locals; relay traffic is low-QPS and the viem
|
|
33
|
+
// clients are memoized upstream, so per-request handler construction is cheap.
|
|
34
|
+
function middleware(options = {}) {
|
|
35
|
+
return createMiddleware(async (c) => {
|
|
36
|
+
const verifiedTokens = c.get('verifiedTokens');
|
|
37
|
+
const feePayer = (() => {
|
|
38
|
+
if (!options.feePayer)
|
|
39
|
+
return undefined;
|
|
40
|
+
const principal = Auth.getPrincipal(c);
|
|
41
|
+
const attribution = principal?.type === 'api_key' && principal.projectId !== undefined
|
|
42
|
+
? {
|
|
43
|
+
apiKeyId: principal.id,
|
|
44
|
+
environment: principal.environment,
|
|
45
|
+
orgId: principal.orgId,
|
|
46
|
+
projectId: principal.projectId,
|
|
47
|
+
}
|
|
48
|
+
: undefined;
|
|
49
|
+
const sponsorable = attribution !== undefined &&
|
|
50
|
+
principal?.type === 'api_key' &&
|
|
51
|
+
(principal.apiKey.scopes.includes('rpc-relay:sponsor') ||
|
|
52
|
+
principal.apiKey.scopes.includes(Scope.wildcard));
|
|
53
|
+
return {
|
|
54
|
+
...options.feePayer,
|
|
55
|
+
feeToken: options.feePayer.feeToken ?? Addresses.pathUsd,
|
|
56
|
+
validate: ({ chainId }) => {
|
|
57
|
+
// Allowlist the chains this deployment serves rather than denylisting
|
|
58
|
+
// only mainnet: the relay resolves chainId from the request body, so
|
|
59
|
+
// the query-string chain guard never sees it. Mainnet stays closed
|
|
60
|
+
// until billing ships; nothing meters real fee-payer spend yet.
|
|
61
|
+
const id = Number(chainId);
|
|
62
|
+
return sponsorable && c.get('supportedChainIds').has(id) && !Viem.isMainnet(id);
|
|
63
|
+
},
|
|
64
|
+
onSponsored: async (event) => {
|
|
65
|
+
if (!attribution)
|
|
66
|
+
return;
|
|
67
|
+
await SponsoredTransactions.upsert(Db.get(c.get('db')), {
|
|
68
|
+
apiKeyId: attribution.apiKeyId,
|
|
69
|
+
billable: attribution.environment === 'production',
|
|
70
|
+
chainId: event.chainId,
|
|
71
|
+
environment: attribution.environment,
|
|
72
|
+
orgId: attribution.orgId,
|
|
73
|
+
projectId: attribution.projectId,
|
|
74
|
+
signPayload: event.signPayload,
|
|
75
|
+
transaction: event.transaction,
|
|
76
|
+
...(event.feeToken ? { feeToken: event.feeToken } : {}),
|
|
77
|
+
...(event.transactionHash ? { transactionHash: event.transactionHash } : {}),
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
})();
|
|
82
|
+
// Dispatching a standalone Hono via `fetch(c.req.raw)` bypasses Hono's
|
|
83
|
+
// mount-path stripping, so its internal routes register at the request's
|
|
84
|
+
// full external path (`basePath` + `/rpc/relay`).
|
|
85
|
+
const handler = Handler.relay({
|
|
86
|
+
cache: c.get('store'),
|
|
87
|
+
features: 'all',
|
|
88
|
+
getClient: (chainId) => c.get('getClient')(chainId),
|
|
89
|
+
path: Path.join(c.get('basePath'), 'rpc/relay'),
|
|
90
|
+
...(feePayer ? { feePayer } : {}),
|
|
91
|
+
...(verifiedTokens
|
|
92
|
+
? {
|
|
93
|
+
resolveTokens: async (chainId) => {
|
|
94
|
+
const snapshot = await VerifiedTokens.read(Db.get(c.get('dbCached')), chainId);
|
|
95
|
+
return snapshot?.list.map((token) => token.address) ?? [];
|
|
96
|
+
},
|
|
97
|
+
}
|
|
98
|
+
: {}),
|
|
99
|
+
});
|
|
100
|
+
return handler.fetch(c.req.raw);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=App.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../src/apps/relay/App.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type Address, type Client } from 'viem';
|
|
2
|
+
import * as Db from '../../db/Db.js';
|
|
3
|
+
import * as Tidx from '../../internal/Tidx.js';
|
|
4
|
+
import * as Viem from '../../internal/Viem.js';
|
|
5
|
+
/**
|
|
6
|
+
* Runs one finalization pass over pending sponsored transactions: rows with a
|
|
7
|
+
* receipt finalize with the actual fee (`gasUsed × effectiveGasPrice`, in
|
|
8
|
+
* fee-token base units); rows still unmined past the pending TTL fail, as do
|
|
9
|
+
* hash-less fill intents the TTL outlives. Rows whose receipt lookup errors
|
|
10
|
+
* persist past the error TTL fail so they cannot monopolize every batch.
|
|
11
|
+
*
|
|
12
|
+
* @param db - The database holding `sponsored_transactions`.
|
|
13
|
+
* @param options - Finalization options.
|
|
14
|
+
* @returns Counters for the pass.
|
|
15
|
+
*/
|
|
16
|
+
export declare function finalize(db: Db.Db, options: finalize.Options): Promise<finalize.Result>;
|
|
17
|
+
export declare namespace finalize {
|
|
18
|
+
/** Options for {@link finalize}. */
|
|
19
|
+
type Options = {
|
|
20
|
+
/** Maximum pending rows processed per pass. @default 100 */
|
|
21
|
+
batchSize?: number | undefined;
|
|
22
|
+
/** Client resolver keyed by the row's chain id. */
|
|
23
|
+
getClient: (chainId: number) => Client;
|
|
24
|
+
/** Clock; injectable for tests. */
|
|
25
|
+
now?: (() => Date) | undefined;
|
|
26
|
+
/** Age after which an unmined sponsorship fails. @default 1 hour */
|
|
27
|
+
pendingTtlMs?: number | undefined;
|
|
28
|
+
/** Age after which repeated receipt lookup errors fail a row. @default 24 hours */
|
|
29
|
+
receiptErrorTtlMs?: number | undefined;
|
|
30
|
+
};
|
|
31
|
+
/** Counters returned by one finalization pass. */
|
|
32
|
+
type Result = {
|
|
33
|
+
/** Rows marked failed (unmined past the pending TTL). */
|
|
34
|
+
failed: number;
|
|
35
|
+
/** Rows finalized with an actual fee. */
|
|
36
|
+
finalized: number;
|
|
37
|
+
/** Rows left pending (unmined, or receipt lookup errored within the error TTL). */
|
|
38
|
+
pending: number;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Runs one reconciliation pass over pending fill intents (rows with no
|
|
43
|
+
* transaction hash): fetches the fee payer's recent on-chain transactions
|
|
44
|
+
* from TIDX, recomputes each candidate's fee-payer sign payload, and fills
|
|
45
|
+
* matching intents' hashes so the receipt pass can finalize them. Query or
|
|
46
|
+
* candidate errors leave intents for the next pass.
|
|
47
|
+
*
|
|
48
|
+
* @param db - The database holding `sponsored_transactions`.
|
|
49
|
+
* @param options - Reconciliation options.
|
|
50
|
+
* @returns Counters for the pass.
|
|
51
|
+
*/
|
|
52
|
+
export declare function reconcile(db: Db.Db, options: reconcile.Options): Promise<reconcile.Result>;
|
|
53
|
+
export declare namespace reconcile {
|
|
54
|
+
/** Options for {@link reconcile}. */
|
|
55
|
+
type Options = {
|
|
56
|
+
/** Maximum intents considered per pass. @default 100 */
|
|
57
|
+
batchSize?: number | undefined;
|
|
58
|
+
/** Maximum on-chain candidates fetched per chain per pass. @default 500 */
|
|
59
|
+
candidateCap?: number | undefined;
|
|
60
|
+
/** How long failed intents remain reconciliation candidates. @default 24 hours */
|
|
61
|
+
failedIntentTtlMs?: number | undefined;
|
|
62
|
+
/** Fee payer address whose on-chain transactions are candidates. */
|
|
63
|
+
feePayer: Address;
|
|
64
|
+
/** Client resolver keyed by the intent's chain id. */
|
|
65
|
+
getClient: (chainId: number) => Client;
|
|
66
|
+
/** TIDX client resolver keyed by the intent's chain id. */
|
|
67
|
+
getTidx: (chainId: number) => Tidx.Client;
|
|
68
|
+
/** Lookback slack before the oldest intent's creation. @default 2 minutes */
|
|
69
|
+
skewMs?: number | undefined;
|
|
70
|
+
};
|
|
71
|
+
/** Counters returned by one reconciliation pass. */
|
|
72
|
+
type Result = {
|
|
73
|
+
/** Intents matched to an on-chain transaction. */
|
|
74
|
+
matched: number;
|
|
75
|
+
/** On-chain candidates inspected. */
|
|
76
|
+
scanned: number;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Builds a scheduled sponsorship finalizer bound to a database and RPC config.
|
|
81
|
+
* A host runtime drives {@link createFinalizer.Finalizer.tick} on a timer (a
|
|
82
|
+
* Cloudflare `scheduled` cron handler, a self-host `setInterval`, …); each
|
|
83
|
+
* tick reconciles fill intents (when `feePayer` + `tidx` are configured) and
|
|
84
|
+
* runs one {@link finalize} pass, with memoized per-chain clients.
|
|
85
|
+
*/
|
|
86
|
+
export declare function createFinalizer(options: createFinalizer.Options): createFinalizer.Finalizer;
|
|
87
|
+
export declare namespace createFinalizer {
|
|
88
|
+
/** Options for {@link createFinalizer}. */
|
|
89
|
+
type Options = Pick<finalize.Options, 'batchSize' | 'now' | 'pendingTtlMs'> & {
|
|
90
|
+
/** Database holding sponsorship rows, or a factory resolved per tick (Workers/Hyperdrive). */
|
|
91
|
+
db: Db.Source;
|
|
92
|
+
/** Default chain id for the TIDX client resolver. */
|
|
93
|
+
defaultChainId?: Viem.ChainId | undefined;
|
|
94
|
+
/** Fee payer address whose on-chain transactions reconcile fill intents; omit to skip reconciliation. */
|
|
95
|
+
feePayer?: Address | undefined;
|
|
96
|
+
/** RPC options for the receipt-lookup clients. */
|
|
97
|
+
rpc?: Viem.getClient.Rpc | undefined;
|
|
98
|
+
/** TIDX query client options for intent reconciliation; omit to skip reconciliation. */
|
|
99
|
+
tidx?: Tidx.getClient.Tidx | undefined;
|
|
100
|
+
};
|
|
101
|
+
/** A scheduled sponsorship finalizer. */
|
|
102
|
+
type Finalizer = {
|
|
103
|
+
/** Runs one reconcile + finalize pass. */
|
|
104
|
+
tick(): Promise<finalize.Result & reconcile.Result>;
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=Sponsorships.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sponsorships.d.ts","sourceRoot":"","sources":["../../../src/apps/relay/Sponsorships.ts"],"names":[],"mappings":"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"}
|