tapimo 0.10.2 → 0.12.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/dist/App.d.ts +4896 -2166
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +2 -2
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +15 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +7 -0
- package/dist/Assets.js.map +1 -1
- package/dist/Webhooks.d.ts +0 -75
- package/dist/Webhooks.d.ts.map +1 -1
- package/dist/Webhooks.js +1 -143
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +127 -78
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +115 -1
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +59 -6
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts +3 -3
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +4 -2
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +83 -83
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +151 -151
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/data/App.d.ts +5924 -4310
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +61 -9
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +62 -0
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
- package/dist/apps/data/ZoneSelection.js +44 -0
- package/dist/apps/data/ZoneSelection.js.map +1 -0
- package/dist/apps/data/routes/activities.d.ts +2368 -5
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +423 -114
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +131 -0
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +25 -25
- package/dist/apps/data/routes/balances.js +1 -1
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +1 -1
- package/dist/apps/data/routes/blocks.js +1 -1
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +135 -10
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +157 -25
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/exchanges.d.ts +829 -123
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +16 -13
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +26 -26
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +9 -11
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +54 -54
- package/dist/apps/data/routes/receipts.js +1 -1
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.js +24 -10
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +12 -12
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +16 -15
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +17 -3
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +34 -15
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +1 -1
- package/dist/apps/data/routes/transactions.js +1 -1
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +13 -13
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +7 -9
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +21 -21
- package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
- package/dist/apps/data/routes/webhooks.d.ts +1011 -151
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +126 -739
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +15 -15
- package/dist/apps/funding/App.d.ts +27 -27
- package/dist/apps/funding/routes/chains.d.ts.map +1 -1
- package/dist/apps/funding/routes/chains.js +5 -4
- package/dist/apps/funding/routes/chains.js.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts +18 -18
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.js +8 -8
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/funding/routes/providers.d.ts.map +1 -1
- package/dist/apps/funding/routes/providers.js +3 -2
- package/dist/apps/funding/routes/providers.js.map +1 -1
- package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
- package/dist/apps/funding/routes/quotes.js +2 -2
- package/dist/apps/funding/routes/quotes.js.map +1 -1
- package/dist/apps/funding/routes/transfers.d.ts +33 -33
- package/dist/apps/management/App.d.ts +1433 -322
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +19 -6
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +154 -94
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +76 -30
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +103 -30
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +91 -32
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +12 -12
- package/dist/apps/management/routes/faucet.d.ts.map +1 -1
- package/dist/apps/management/routes/faucet.js +23 -12
- package/dist/apps/management/routes/faucet.js.map +1 -1
- package/dist/apps/management/routes/invitations.d.ts +46 -13
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +79 -29
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +128 -83
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +100 -41
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +5 -5
- package/dist/apps/management/routes/me.d.ts.map +1 -1
- package/dist/apps/management/routes/me.js +14 -10
- package/dist/apps/management/routes/me.js.map +1 -1
- package/dist/apps/management/routes/members.d.ts +68 -47
- package/dist/apps/management/routes/members.d.ts.map +1 -1
- package/dist/apps/management/routes/members.js +37 -18
- package/dist/apps/management/routes/members.js.map +1 -1
- package/dist/apps/management/routes/orgs.d.ts +48 -8
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +48 -19
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +130 -68
- package/dist/apps/management/routes/projects.d.ts.map +1 -1
- package/dist/apps/management/routes/projects.js +72 -21
- package/dist/apps/management/routes/projects.js.map +1 -1
- package/dist/apps/management/routes/scopes.d.ts.map +1 -1
- package/dist/apps/management/routes/scopes.js +8 -5
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +38 -38
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +41 -31
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +34 -6
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.js +36 -17
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +1186 -197
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +106 -38
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Adapter.js +12 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -1
- package/dist/db/Db.d.ts +2 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +61 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +30 -2
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +28 -3
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +5 -1
- package/dist/db/tables/earnVaults.d.ts.map +1 -1
- package/dist/db/tables/earnVaults.js +5 -0
- package/dist/db/tables/earnVaults.js.map +1 -1
- package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
- package/dist/db/tables/webhookDeliveries.js +10 -0
- package/dist/db/tables/webhookDeliveries.js.map +1 -1
- package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
- package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
- package/dist/db/tables/webhookQueueCompletions.js +32 -0
- package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
- package/dist/db/tables/webhookQueueEvents.d.ts +16 -20
- package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
- package/dist/db/tables/webhookQueueEvents.js +68 -43
- package/dist/db/tables/webhookQueueEvents.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +47 -72
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +92 -105
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/internal/Auth.d.ts +8 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +13 -3
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +11 -7
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +41 -2
- package/dist/internal/EarnVaults.d.ts.map +1 -1
- package/dist/internal/EarnVaults.js +167 -0
- package/dist/internal/EarnVaults.js.map +1 -1
- package/dist/internal/MetricSink.d.ts +35 -125
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +50 -121
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +26 -22
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +128 -39
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +13 -8
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +16 -5
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +8 -8
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +10 -9
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +15 -6
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +45 -15
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +2 -0
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +16 -4
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/WebhookTransfer.d.ts +1 -55
- package/dist/internal/WebhookTransfer.d.ts.map +1 -1
- package/dist/internal/WebhookTransfer.js +1 -239
- package/dist/internal/WebhookTransfer.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +112 -56
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +124 -93
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/funding/Deposit.d.ts +2 -2
- package/dist/internal/funding/Deposit.d.ts.map +1 -1
- package/dist/internal/funding/Deposit.js +9 -8
- package/dist/internal/funding/Deposit.js.map +1 -1
- package/dist/internal/funding/DepositAddress.d.ts +4 -4
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
- package/dist/internal/funding/DepositAddress.js +9 -8
- package/dist/internal/funding/DepositAddress.js.map +1 -1
- package/dist/internal/funding/DepositWebhook.d.ts +25 -0
- package/dist/internal/funding/DepositWebhook.d.ts.map +1 -0
- package/dist/internal/funding/DepositWebhook.js +74 -0
- package/dist/internal/funding/DepositWebhook.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -1
- package/dist/internal/funding/Provider.js +13 -12
- package/dist/internal/funding/Provider.js.map +1 -1
- package/dist/internal/funding/Reconciliation.d.ts +6 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
- package/dist/internal/funding/Reconciliation.js +42 -10
- package/dist/internal/funding/Reconciliation.js.map +1 -1
- package/dist/internal/funding/index.d.ts +1 -0
- package/dist/internal/funding/index.d.ts.map +1 -1
- package/dist/internal/funding/index.js +1 -0
- package/dist/internal/funding/index.js.map +1 -1
- package/dist/internal/funding/providers/stargate.d.ts +19 -0
- package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
- package/dist/internal/funding/providers/stargate.js +143 -0
- package/dist/internal/funding/providers/stargate.js.map +1 -0
- package/dist/internal/webhookDestinations/slack.d.ts.map +1 -1
- package/dist/internal/webhookDestinations/slack.js +16 -0
- package/dist/internal/webhookDestinations/slack.js.map +1 -1
- package/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -1
- package/package.json +2 -2
- package/src/App.test.ts +48 -0
- package/src/App.ts +7 -2
- package/src/Assets.test.ts +18 -0
- package/src/Assets.ts +22 -0
- package/src/Client.test-d.ts +287 -17
- package/src/Webhooks.ts +1 -220
- package/src/admin/apps/earn-vaults.test.ts +143 -0
- package/src/admin/apps/earn-vaults.ts +83 -6
- package/src/admin/apps/organizations.ts +6 -2
- package/src/admin/ui/src/routes/api-keys.tsx +36 -0
- package/src/admin/ui.generated.ts +151 -189
- package/src/apps/data/App.test.ts +31 -0
- package/src/apps/data/App.ts +64 -10
- package/src/apps/data/ZoneSelection.test.ts +196 -0
- package/src/apps/data/ZoneSelection.ts +108 -0
- package/src/apps/data/routes/activities.test.ts +435 -12
- package/src/apps/data/routes/activities.ts +562 -125
- package/src/apps/data/routes/balances.ts +1 -1
- package/src/apps/data/routes/blocks.ts +1 -1
- package/src/apps/data/routes/earn.test.ts +183 -23
- package/src/apps/data/routes/earn.ts +225 -29
- package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
- package/src/apps/data/routes/exchanges.test.ts +31 -1
- package/src/apps/data/routes/exchanges.ts +19 -15
- package/src/apps/data/routes/fee-amm.ts +18 -11
- package/src/apps/data/routes/receipts.ts +1 -1
- package/src/apps/data/routes/rpc.test.ts +75 -0
- package/src/apps/data/routes/rpc.ts +23 -9
- package/src/apps/data/routes/tokenlist.ts +21 -18
- package/src/apps/data/routes/tokens.test.ts +29 -0
- package/src/apps/data/routes/tokens.ts +38 -15
- package/src/apps/data/routes/transactions.ts +1 -1
- package/src/apps/data/routes/transfers.test.ts +3 -3
- package/src/apps/data/routes/transfers.ts +12 -9
- package/src/apps/data/routes/webhooks.test.ts +179 -1497
- package/src/apps/data/routes/webhooks.ts +156 -976
- package/src/apps/data/routes/zones.test.ts +19 -13
- package/src/apps/funding/routes/chains.test.ts +211 -7
- package/src/apps/funding/routes/chains.ts +19 -12
- package/src/apps/funding/routes/deposit-addresses.test.ts +394 -0
- package/src/apps/funding/routes/deposit-addresses.ts +84 -72
- package/src/apps/funding/routes/providers.ts +9 -5
- package/src/apps/funding/routes/quotes.test.ts +46 -0
- package/src/apps/funding/routes/quotes.ts +8 -5
- package/src/apps/funding/routes/transfers.test.ts +35 -32
- package/src/apps/management/Billing.test.ts +26 -0
- package/src/apps/management/Billing.ts +24 -7
- package/src/apps/management/routes/api-keys.test.ts +178 -0
- package/src/apps/management/routes/api-keys.ts +203 -144
- package/src/apps/management/routes/billing.test.ts +209 -0
- package/src/apps/management/routes/billing.ts +254 -177
- package/src/apps/management/routes/faucet.test.ts +39 -0
- package/src/apps/management/routes/faucet.ts +75 -41
- package/src/apps/management/routes/invitations.test.ts +216 -0
- package/src/apps/management/routes/invitations.ts +186 -109
- package/src/apps/management/routes/invite-links.test.ts +263 -1
- package/src/apps/management/routes/invite-links.ts +295 -214
- package/src/apps/management/routes/me.test.ts +49 -0
- package/src/apps/management/routes/me.ts +42 -32
- package/src/apps/management/routes/members.test.ts +124 -1
- package/src/apps/management/routes/members.ts +81 -51
- package/src/apps/management/routes/orgs.test.ts +176 -0
- package/src/apps/management/routes/orgs.ts +101 -59
- package/src/apps/management/routes/projects.test.ts +183 -0
- package/src/apps/management/routes/projects.ts +124 -60
- package/src/apps/management/routes/scopes.test.ts +44 -0
- package/src/apps/management/routes/scopes.ts +37 -28
- package/src/apps/management/routes/usage.test.ts +92 -0
- package/src/apps/management/routes/usage.ts +186 -151
- package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
- package/src/apps/management/routes/verified-token-requests.ts +166 -133
- package/src/apps/management/routes/webhooks.test.ts +313 -1
- package/src/apps/management/routes/webhooks.ts +220 -71
- package/src/apps/mpp/internal/Adapter.ts +13 -1
- package/src/db/Db.test.ts +42 -5
- package/src/db/Db.ts +85 -0
- package/src/db/Schema.ts +41 -3
- package/src/db/tables/earnVaults.test.ts +22 -0
- package/src/db/tables/earnVaults.ts +11 -1
- package/src/db/tables/organizations.test.ts +5 -2
- package/src/db/tables/webhookDeliveries.ts +13 -0
- package/src/db/tables/webhookQueueCompletions.ts +55 -0
- package/src/db/tables/webhookQueueEvents.ts +97 -57
- package/src/db/tables/webhookSubscriptions.ts +134 -144
- package/src/internal/Auth.ts +23 -5
- package/src/internal/Cache.ts +14 -7
- package/src/internal/EarnVaults.capabilities.test.ts +33 -0
- package/src/internal/EarnVaults.test.ts +79 -0
- package/src/internal/EarnVaults.ts +277 -0
- package/src/internal/MetricSink.test.ts +41 -373
- package/src/internal/MetricSink.ts +92 -273
- package/src/internal/OpenApi.ts +165 -49
- package/src/internal/Response.test.ts +95 -0
- package/src/internal/Response.ts +40 -2
- package/src/internal/Schema.test.ts +34 -0
- package/src/internal/Schema.ts +20 -9
- package/src/internal/Store.test.ts +186 -0
- package/src/internal/Store.ts +57 -17
- package/src/internal/Tidx.test.ts +19 -0
- package/src/internal/Tidx.ts +16 -4
- package/src/internal/WebhookTransfer.ts +1 -351
- package/src/internal/Webhooks.test.ts +222 -145
- package/src/internal/Webhooks.ts +234 -135
- package/src/internal/funding/Deposit.ts +71 -64
- package/src/internal/funding/DepositAddress.ts +50 -43
- package/src/internal/funding/DepositWebhook.test.ts +131 -0
- package/src/internal/funding/DepositWebhook.ts +101 -0
- package/src/internal/funding/Provider.ts +164 -142
- package/src/internal/funding/Reconciliation.test.ts +14 -0
- package/src/internal/funding/Reconciliation.ts +161 -86
- package/src/internal/funding/index.test.ts +1 -0
- package/src/internal/funding/index.ts +1 -0
- package/src/internal/funding/providers/index.test.ts +185 -0
- package/src/internal/funding/providers/stargate.ts +184 -0
- package/src/internal/webhookDestinations/slack.ts +15 -0
- package/src/providers/index.test.ts +1 -0
- package/src/providers/index.ts +9 -0
- package/src/Webhooks.bench.ts +0 -714
- package/src/Webhooks.memory.bench.ts +0 -250
- package/src/Webhooks.test.ts +0 -146
|
@@ -18,76 +18,79 @@ import * as ManagementError from '../Error.js'
|
|
|
18
18
|
/** Zod schemas owned by the API-keys resource. */
|
|
19
19
|
export namespace schema {
|
|
20
20
|
/** One API key: metadata only — the token appears once, at mint. */
|
|
21
|
-
export const Key =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
'Client IP addresses and CIDR ranges allowed to use this key. An empty list means unrestricted.',
|
|
26
|
-
),
|
|
27
|
-
z.meta({ examples: [['203.0.113.0/24', '2001:db8::1']] }),
|
|
28
|
-
),
|
|
29
|
-
createdAt: z
|
|
30
|
-
.string()
|
|
31
|
-
.check(
|
|
32
|
-
z.describe('When the key was minted (ISO 8601).'),
|
|
33
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
34
|
-
),
|
|
35
|
-
createdBy: z
|
|
36
|
-
.optional(z.string())
|
|
37
|
-
.check(
|
|
38
|
-
z.describe('Identity that minted the key (`usr_…`, or `super_admin`).'),
|
|
39
|
-
z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
40
|
-
),
|
|
41
|
-
environment: z
|
|
42
|
-
.enum(['production', 'sandbox'])
|
|
43
|
-
.check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
|
|
44
|
-
expiresAt: z
|
|
45
|
-
.optional(z.string())
|
|
46
|
-
.check(
|
|
47
|
-
z.describe('When the key expires (ISO 8601). Absent for a non-expiring key.'),
|
|
48
|
-
z.meta({ examples: ['2027-01-01T00:00:00.000Z'] }),
|
|
49
|
-
),
|
|
50
|
-
id: z
|
|
51
|
-
.string()
|
|
52
|
-
.check(
|
|
53
|
-
z.describe('Opaque key id (`key_…`).'),
|
|
54
|
-
z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
55
|
-
),
|
|
56
|
-
lastUsedAt: z
|
|
57
|
-
.optional(z.string())
|
|
58
|
-
.check(
|
|
59
|
-
z.describe('When the key last authenticated a request (ISO 8601).'),
|
|
60
|
-
z.meta({ examples: ['2026-07-21T12:34:56.000Z'] }),
|
|
61
|
-
),
|
|
62
|
-
name: z
|
|
63
|
-
.optional(z.string())
|
|
64
|
-
.check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
|
|
65
|
-
orgId: z
|
|
66
|
-
.string()
|
|
67
|
-
.check(
|
|
68
|
-
z.describe('Owning organization id (`org_…`).'),
|
|
69
|
-
z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
70
|
-
),
|
|
71
|
-
projectId: z.optional(z.string()).check(
|
|
72
|
-
z.describe('Attributed project id (`prj_…`).'), // prettier-ignore
|
|
73
|
-
z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
74
|
-
),
|
|
75
|
-
scopes: z
|
|
76
|
-
.array(z.string().check(z.minLength(1)))
|
|
77
|
-
.check(
|
|
21
|
+
export const Key = OpenApi.component(
|
|
22
|
+
Schema.describe(
|
|
23
|
+
z.object({
|
|
24
|
+
allowedIps: ApiKey.schema.AllowedIps.check(
|
|
78
25
|
z.describe(
|
|
79
|
-
|
|
26
|
+
'Client IP addresses and CIDR ranges allowed to use this key. An empty list means unrestricted.',
|
|
80
27
|
),
|
|
81
|
-
z.meta({ examples: [['
|
|
28
|
+
z.meta({ examples: [['203.0.113.0/24', '2001:db8::1']] }),
|
|
82
29
|
),
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
30
|
+
createdAt: z.iso
|
|
31
|
+
.datetime()
|
|
32
|
+
.check(
|
|
33
|
+
z.describe('When the key was minted (ISO 8601).'),
|
|
34
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
35
|
+
),
|
|
36
|
+
createdBy: z
|
|
37
|
+
.optional(z.string())
|
|
38
|
+
.check(
|
|
39
|
+
z.describe('Identity that minted the key (`usr_…`, or `super_admin`).'),
|
|
40
|
+
z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
41
|
+
),
|
|
42
|
+
environment: z
|
|
43
|
+
.enum(['production', 'sandbox'])
|
|
44
|
+
.check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
|
|
45
|
+
expiresAt: z
|
|
46
|
+
.optional(z.iso.datetime())
|
|
47
|
+
.check(
|
|
48
|
+
z.describe('When the key expires (ISO 8601). Absent for a non-expiring key.'),
|
|
49
|
+
z.meta({ examples: ['2027-01-01T00:00:00.000Z'] }),
|
|
50
|
+
),
|
|
51
|
+
id: z
|
|
52
|
+
.string()
|
|
53
|
+
.check(
|
|
54
|
+
z.describe('Opaque key id (`key_…`).'),
|
|
55
|
+
z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
56
|
+
),
|
|
57
|
+
lastUsedAt: z
|
|
58
|
+
.optional(z.iso.datetime())
|
|
59
|
+
.check(
|
|
60
|
+
z.describe('When the key last authenticated a request (ISO 8601).'),
|
|
61
|
+
z.meta({ examples: ['2026-07-21T12:34:56.000Z'] }),
|
|
62
|
+
),
|
|
63
|
+
name: z
|
|
64
|
+
.optional(z.string())
|
|
65
|
+
.check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
|
|
66
|
+
orgId: z
|
|
67
|
+
.string()
|
|
68
|
+
.check(
|
|
69
|
+
z.describe('Owning organization id (`org_…`).'),
|
|
70
|
+
z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
71
|
+
),
|
|
72
|
+
projectId: z.optional(z.string()).check(
|
|
73
|
+
z.describe('Attributed project id (`prj_…`).'), // prettier-ignore
|
|
74
|
+
z.meta({ examples: ['prj_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
88
75
|
),
|
|
89
|
-
|
|
90
|
-
|
|
76
|
+
scopes: z
|
|
77
|
+
.array(z.string().check(z.minLength(1)))
|
|
78
|
+
.check(
|
|
79
|
+
z.describe(
|
|
80
|
+
"Granted scopes. '*' and non-self-serve scopes appear only on keys minted by the super admin.",
|
|
81
|
+
),
|
|
82
|
+
z.meta({ examples: [['data:read']] }),
|
|
83
|
+
),
|
|
84
|
+
tokenLast4: z
|
|
85
|
+
.string()
|
|
86
|
+
.check(
|
|
87
|
+
z.describe('Last 4 characters of the plaintext token.'),
|
|
88
|
+
z.meta({ examples: ['a1b2'] }),
|
|
89
|
+
),
|
|
90
|
+
}),
|
|
91
|
+
'An API key: metadata only — the token appears once, at mint.',
|
|
92
|
+
),
|
|
93
|
+
'ApiKey',
|
|
91
94
|
)
|
|
92
95
|
|
|
93
96
|
/** Path parameters addressing a project's key collection. */
|
|
@@ -145,52 +148,69 @@ export namespace schema {
|
|
|
145
148
|
.check(z.describe('Path parameters for one API key.'))
|
|
146
149
|
|
|
147
150
|
/** Request body minting a key. The wildcard scope is not issuable here. */
|
|
148
|
-
export const
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
z.meta({ examples: [['203.0.113.0/24']] }),
|
|
157
|
-
),
|
|
158
|
-
environment: z
|
|
159
|
-
._default(z.enum(['production', 'sandbox']), 'production')
|
|
160
|
-
.check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
|
|
161
|
-
name: z
|
|
162
|
-
.optional(z.string().check(z.minLength(1), z.maxLength(100)))
|
|
163
|
-
.check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
|
|
164
|
-
scopes: z
|
|
165
|
-
._default(
|
|
166
|
-
z.array(
|
|
167
|
-
z.string().check(
|
|
168
|
-
z.minLength(1),
|
|
169
|
-
z.refine((scope) => scope !== Scope.wildcard),
|
|
151
|
+
export const CreateApiKeyRequest = OpenApi.component(
|
|
152
|
+
z
|
|
153
|
+
.object({
|
|
154
|
+
allowedIps: z
|
|
155
|
+
.optional(ApiKey.schema.AllowedIps)
|
|
156
|
+
.check(
|
|
157
|
+
z.describe(
|
|
158
|
+
'Client IP addresses and CIDR ranges allowed to use the key. Omit or use an empty list for unrestricted access.',
|
|
170
159
|
),
|
|
160
|
+
z.meta({ examples: [['203.0.113.0/24']] }),
|
|
171
161
|
),
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
162
|
+
environment: z
|
|
163
|
+
._default(z.enum(['production', 'sandbox']), 'production')
|
|
164
|
+
.check(z.describe('Key environment.'), z.meta({ examples: ['sandbox'] })),
|
|
165
|
+
name: z
|
|
166
|
+
.optional(z.string().check(z.minLength(1), z.maxLength(100)))
|
|
167
|
+
.check(z.describe('Human-readable key name.'), z.meta({ examples: ['CI'] })),
|
|
168
|
+
scopes: z
|
|
169
|
+
._default(
|
|
170
|
+
z.array(
|
|
171
|
+
z.string().check(
|
|
172
|
+
z.minLength(1),
|
|
173
|
+
z.refine((scope) => scope !== Scope.wildcard),
|
|
174
|
+
),
|
|
175
|
+
),
|
|
176
|
+
[],
|
|
177
|
+
)
|
|
178
|
+
.check(z.describe('Scopes to grant.'), z.meta({ examples: [['data:read']] })),
|
|
179
|
+
})
|
|
180
|
+
.check(z.describe('Fields for minting an API key.')),
|
|
181
|
+
'CreateApiKeyRequest',
|
|
182
|
+
)
|
|
177
183
|
|
|
178
184
|
/** Schemas for the createApiKey operation. */
|
|
179
185
|
export namespace createApiKey {
|
|
180
186
|
/** The minted key plus its one-time token. */
|
|
181
|
-
export const Response =
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
187
|
+
export const Response = OpenApi.component(
|
|
188
|
+
Schema.describe(
|
|
189
|
+
z.extend(Key, {
|
|
190
|
+
token: z
|
|
191
|
+
.string()
|
|
192
|
+
.check(
|
|
193
|
+
z.describe('The plaintext token — shown once, unrecoverable afterward.'),
|
|
194
|
+
z.meta({ examples: ['tempo_sandbox:sk:…'] }),
|
|
195
|
+
),
|
|
196
|
+
}),
|
|
197
|
+
'The minted key, including its one-time token.',
|
|
198
|
+
),
|
|
199
|
+
'CreateApiKeyResponse',
|
|
191
200
|
)
|
|
192
201
|
}
|
|
193
202
|
|
|
203
|
+
/** Non-paginated list of API key metadata. */
|
|
204
|
+
export const ApiKeyList = OpenApi.component(
|
|
205
|
+
Schema.describe(
|
|
206
|
+
z.object({
|
|
207
|
+
data: z.array(Key).check(z.describe('The API keys, newest first.')),
|
|
208
|
+
}),
|
|
209
|
+
'A non-paginated list of API key metadata.',
|
|
210
|
+
),
|
|
211
|
+
'ApiKeyList',
|
|
212
|
+
)
|
|
213
|
+
|
|
194
214
|
/** Schemas for the listApiKeys operation. */
|
|
195
215
|
export namespace listApiKeys {
|
|
196
216
|
/** Query parameters filtering a project's keys. */
|
|
@@ -199,12 +219,7 @@ export namespace schema {
|
|
|
199
219
|
.check(z.describe("Query parameters for a project's API keys."))
|
|
200
220
|
|
|
201
221
|
/** Non-paginated list of a project's keys. */
|
|
202
|
-
export const Response =
|
|
203
|
-
z.object({
|
|
204
|
-
data: z.array(Key).check(z.describe("The project's keys, newest first.")),
|
|
205
|
-
}),
|
|
206
|
-
"A non-paginated list of a project's API keys (metadata only).",
|
|
207
|
-
)
|
|
222
|
+
export const Response = ApiKeyList
|
|
208
223
|
}
|
|
209
224
|
|
|
210
225
|
/** Schemas for the listOrgApiKeys operation. */
|
|
@@ -215,44 +230,43 @@ export namespace schema {
|
|
|
215
230
|
.check(z.describe("Query parameters for an organization's API keys."))
|
|
216
231
|
|
|
217
232
|
/** Non-paginated list of every key in the organization. */
|
|
218
|
-
export const Response =
|
|
219
|
-
z.object({
|
|
220
|
-
data: z
|
|
221
|
-
.array(Key)
|
|
222
|
-
.check(z.describe("The organization's keys across all projects, newest first.")),
|
|
223
|
-
}),
|
|
224
|
-
"A non-paginated list of an organization's API keys (metadata only).",
|
|
225
|
-
)
|
|
233
|
+
export const Response = ApiKeyList
|
|
226
234
|
}
|
|
227
235
|
|
|
228
236
|
/** Schemas for the revokeApiKey operation. */
|
|
229
237
|
export namespace revokeApiKey {
|
|
230
238
|
/** Confirmation that the key was revoked. */
|
|
231
|
-
export const Response =
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
239
|
+
export const Response = OpenApi.component(
|
|
240
|
+
z
|
|
241
|
+
.object({
|
|
242
|
+
id: z
|
|
243
|
+
.string()
|
|
244
|
+
.check(
|
|
245
|
+
z.describe('ID of the key that was revoked.'),
|
|
246
|
+
z.meta({ examples: ['key_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
247
|
+
),
|
|
248
|
+
})
|
|
249
|
+
.check(z.describe('Confirmation that the key was revoked.')),
|
|
250
|
+
'RevokeApiKeyResponse',
|
|
251
|
+
)
|
|
241
252
|
}
|
|
242
253
|
|
|
243
254
|
/** Schemas for the updateApiKey operation. */
|
|
244
255
|
export namespace updateApiKey {
|
|
245
256
|
/** Request body replacing or clearing a key's IP allowlist. */
|
|
246
|
-
export const Body =
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
257
|
+
export const Body = OpenApi.component(
|
|
258
|
+
z
|
|
259
|
+
.object({
|
|
260
|
+
allowedIps: ApiKey.schema.AllowedIps.check(
|
|
261
|
+
z.describe(
|
|
262
|
+
'Replacement client IP/CIDR allowlist. Use an empty list for unrestricted access.',
|
|
263
|
+
),
|
|
264
|
+
z.meta({ examples: [['203.0.113.0/24']] }),
|
|
251
265
|
),
|
|
252
|
-
|
|
253
|
-
),
|
|
254
|
-
|
|
255
|
-
|
|
266
|
+
})
|
|
267
|
+
.check(z.describe("Fields for updating an API key's network access.")),
|
|
268
|
+
'UpdateApiKeyRequest',
|
|
269
|
+
)
|
|
256
270
|
}
|
|
257
271
|
}
|
|
258
272
|
|
|
@@ -271,7 +285,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
271
285
|
code: 'param_invalid',
|
|
272
286
|
message: 'Check the path parameters and try again.',
|
|
273
287
|
}),
|
|
274
|
-
OpenApi.validate('json', schema.
|
|
288
|
+
OpenApi.validate('json', schema.CreateApiKeyRequest, {
|
|
275
289
|
code: 'body_invalid',
|
|
276
290
|
message: 'Check the request body and try again.',
|
|
277
291
|
}),
|
|
@@ -281,11 +295,18 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
281
295
|
operationId: 'createApiKey',
|
|
282
296
|
responses: OpenApi.responses({
|
|
283
297
|
errors: {
|
|
298
|
+
400: {
|
|
299
|
+
codes: ['body_invalid', 'param_invalid'],
|
|
300
|
+
description: 'Malformed API key, invalid path, or invalid body.',
|
|
301
|
+
},
|
|
284
302
|
403: {
|
|
285
303
|
codes: ['scope_not_issuable'],
|
|
286
304
|
description: 'The requested scopes are not issuable.',
|
|
287
305
|
},
|
|
288
|
-
404:
|
|
306
|
+
404: {
|
|
307
|
+
codes: ['api_keys_not_enabled', 'organization_not_found', 'project_not_found'],
|
|
308
|
+
description: 'No accessible project or API key surface was found.',
|
|
309
|
+
},
|
|
289
310
|
},
|
|
290
311
|
success: {
|
|
291
312
|
description: 'The minted key, including its one-time token.',
|
|
@@ -298,6 +319,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
298
319
|
async (c) => {
|
|
299
320
|
if (Auth.narrowAccess) return Auth.superAdminAccessError(c)
|
|
300
321
|
if (Auth.narrowScope) return Auth.ensureProjectError(c)
|
|
322
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
301
323
|
if (OpenApi.narrowValidation)
|
|
302
324
|
return OpenApi.validationError(c, {
|
|
303
325
|
code: 'param_invalid',
|
|
@@ -379,8 +401,14 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
379
401
|
operationId: 'listApiKeys',
|
|
380
402
|
responses: OpenApi.responses({
|
|
381
403
|
errors: {
|
|
382
|
-
400: {
|
|
383
|
-
|
|
404
|
+
400: {
|
|
405
|
+
codes: ['param_invalid', 'query_invalid'],
|
|
406
|
+
description: 'Malformed API key, invalid path, or invalid query.',
|
|
407
|
+
},
|
|
408
|
+
404: {
|
|
409
|
+
codes: ['api_keys_not_enabled', 'organization_not_found', 'project_not_found'],
|
|
410
|
+
description: 'No accessible project or API key surface was found.',
|
|
411
|
+
},
|
|
384
412
|
},
|
|
385
413
|
success: {
|
|
386
414
|
description: "The project's keys, newest first (metadata only).",
|
|
@@ -441,8 +469,14 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
441
469
|
operationId: 'listOrgApiKeys',
|
|
442
470
|
responses: OpenApi.responses({
|
|
443
471
|
errors: {
|
|
444
|
-
400: {
|
|
445
|
-
|
|
472
|
+
400: {
|
|
473
|
+
codes: ['param_invalid', 'query_invalid'],
|
|
474
|
+
description: 'Malformed API key, invalid path, or invalid query.',
|
|
475
|
+
},
|
|
476
|
+
404: {
|
|
477
|
+
codes: ['api_keys_not_enabled', 'organization_not_found'],
|
|
478
|
+
description: 'No accessible organization or API key surface was found.',
|
|
479
|
+
},
|
|
446
480
|
},
|
|
447
481
|
success: {
|
|
448
482
|
description: "The organization's keys across all projects, newest first (metadata only).", // prettier-ignore
|
|
@@ -504,7 +538,19 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
504
538
|
operationId: 'updateApiKey',
|
|
505
539
|
responses: OpenApi.responses({
|
|
506
540
|
errors: {
|
|
507
|
-
|
|
541
|
+
400: {
|
|
542
|
+
codes: ['body_invalid', 'param_invalid'],
|
|
543
|
+
description: 'Malformed API key, invalid path, or invalid body.',
|
|
544
|
+
},
|
|
545
|
+
404: {
|
|
546
|
+
codes: [
|
|
547
|
+
'api_key_not_found',
|
|
548
|
+
'api_keys_not_enabled',
|
|
549
|
+
'organization_not_found',
|
|
550
|
+
'project_not_found',
|
|
551
|
+
],
|
|
552
|
+
description: 'No accessible API key or API key surface was found.',
|
|
553
|
+
},
|
|
508
554
|
},
|
|
509
555
|
success: {
|
|
510
556
|
description: 'The updated API key metadata.',
|
|
@@ -517,6 +563,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
517
563
|
async (c) => {
|
|
518
564
|
if (Auth.narrowAccess) return Auth.accessError(c)
|
|
519
565
|
if (Auth.narrowScope) return Auth.ensureProjectError(c)
|
|
566
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
520
567
|
if (OpenApi.narrowValidation)
|
|
521
568
|
return OpenApi.validationError(c, {
|
|
522
569
|
code: 'param_invalid',
|
|
@@ -561,7 +608,18 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
561
608
|
hide: hidden,
|
|
562
609
|
operationId: 'revokeApiKey',
|
|
563
610
|
responses: OpenApi.responses({
|
|
564
|
-
errors: {
|
|
611
|
+
errors: {
|
|
612
|
+
400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
|
|
613
|
+
404: {
|
|
614
|
+
codes: [
|
|
615
|
+
'api_key_not_found',
|
|
616
|
+
'api_keys_not_enabled',
|
|
617
|
+
'organization_not_found',
|
|
618
|
+
'project_not_found',
|
|
619
|
+
],
|
|
620
|
+
description: 'No accessible API key or API key surface was found.',
|
|
621
|
+
},
|
|
622
|
+
},
|
|
565
623
|
success: {
|
|
566
624
|
description: 'Confirmation that the key was revoked.',
|
|
567
625
|
schema: schema.revokeApiKey.Response,
|
|
@@ -573,6 +631,7 @@ export function apiKeys(options: apiKeys.Options = {}) {
|
|
|
573
631
|
async (c) => {
|
|
574
632
|
if (Auth.narrowAccess) return Auth.accessError(c)
|
|
575
633
|
if (Auth.narrowScope) return Auth.ensureProjectError(c)
|
|
634
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
576
635
|
if (OpenApi.narrowValidation)
|
|
577
636
|
return OpenApi.validationError(c, {
|
|
578
637
|
code: 'param_invalid',
|
|
@@ -77,6 +77,215 @@ function createApp(
|
|
|
77
77
|
})
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
+
test('publishes generator-ready OpenAPI contracts', async () => {
|
|
81
|
+
const spec = await (await createApp().request('/openapi.json')).json()
|
|
82
|
+
const billing = spec.paths['/v1/orgs/{orgId}/billing']
|
|
83
|
+
const checkout = spec.paths['/v1/orgs/{orgId}/billing/stripe/checkout'].post
|
|
84
|
+
const manage = spec.paths['/v1/orgs/{orgId}/billing/stripe/manage'].post
|
|
85
|
+
const methods = spec.paths['/v1/orgs/{orgId}/billing/payment-methods'].get
|
|
86
|
+
const remove = spec.paths['/v1/orgs/{orgId}/billing/payment-methods/{methodId}'].delete
|
|
87
|
+
|
|
88
|
+
expect({
|
|
89
|
+
checkout: {
|
|
90
|
+
errors: {
|
|
91
|
+
400: checkout.responses[400].content['application/json'].schema,
|
|
92
|
+
403: checkout.responses[403].content['application/json'].schema,
|
|
93
|
+
404: checkout.responses[404].content['application/json'].schema,
|
|
94
|
+
501: checkout.responses[501].content['application/json'].schema,
|
|
95
|
+
},
|
|
96
|
+
operationId: checkout.operationId,
|
|
97
|
+
response: checkout.responses[200].content['application/json'].schema,
|
|
98
|
+
},
|
|
99
|
+
components: [
|
|
100
|
+
'Billing',
|
|
101
|
+
'BillingPaymentMethod',
|
|
102
|
+
'BillingPaymentMethodList',
|
|
103
|
+
'BillingSession',
|
|
104
|
+
'BillingSpendLimit',
|
|
105
|
+
'BillingTransactionFeeLimit',
|
|
106
|
+
'UpdateBillingRequest',
|
|
107
|
+
].filter((name) => spec.components.schemas[name]),
|
|
108
|
+
get: {
|
|
109
|
+
errors: {
|
|
110
|
+
400: billing.get.responses[400].content['application/json'].schema,
|
|
111
|
+
404: billing.get.responses[404].content['application/json'].schema,
|
|
112
|
+
},
|
|
113
|
+
operationId: billing.get.operationId,
|
|
114
|
+
response: billing.get.responses[200].content['application/json'].schema,
|
|
115
|
+
},
|
|
116
|
+
manage: {
|
|
117
|
+
errors: {
|
|
118
|
+
400: manage.responses[400].content['application/json'].schema,
|
|
119
|
+
403: manage.responses[403].content['application/json'].schema,
|
|
120
|
+
404: manage.responses[404].content['application/json'].schema,
|
|
121
|
+
501: manage.responses[501].content['application/json'].schema,
|
|
122
|
+
},
|
|
123
|
+
operationId: manage.operationId,
|
|
124
|
+
response: manage.responses[200].content['application/json'].schema,
|
|
125
|
+
},
|
|
126
|
+
methods: {
|
|
127
|
+
errors: {
|
|
128
|
+
400: methods.responses[400].content['application/json'].schema,
|
|
129
|
+
404: methods.responses[404].content['application/json'].schema,
|
|
130
|
+
501: methods.responses[501].content['application/json'].schema,
|
|
131
|
+
},
|
|
132
|
+
operationId: methods.operationId,
|
|
133
|
+
response: methods.responses[200].content['application/json'].schema,
|
|
134
|
+
},
|
|
135
|
+
remove: {
|
|
136
|
+
errors: {
|
|
137
|
+
400: remove.responses[400].content['application/json'].schema,
|
|
138
|
+
403: remove.responses[403].content['application/json'].schema,
|
|
139
|
+
404: remove.responses[404].content['application/json'].schema,
|
|
140
|
+
501: remove.responses[501].content['application/json'].schema,
|
|
141
|
+
},
|
|
142
|
+
operationId: remove.operationId,
|
|
143
|
+
response: remove.responses[200].content['application/json'].schema,
|
|
144
|
+
},
|
|
145
|
+
timestamps: {
|
|
146
|
+
billing: spec.components.schemas.Billing.properties.updatedAt.format,
|
|
147
|
+
paymentMethod: spec.components.schemas.BillingPaymentMethod.properties.createdAt.format,
|
|
148
|
+
},
|
|
149
|
+
update: {
|
|
150
|
+
errors: {
|
|
151
|
+
400: billing.patch.responses[400].content['application/json'].schema,
|
|
152
|
+
403: billing.patch.responses[403].content['application/json'].schema,
|
|
153
|
+
404: billing.patch.responses[404].content['application/json'].schema,
|
|
154
|
+
},
|
|
155
|
+
operationId: billing.patch.operationId,
|
|
156
|
+
request: billing.patch.requestBody.content['application/json'].schema,
|
|
157
|
+
response: billing.patch.responses[200].content['application/json'].schema,
|
|
158
|
+
},
|
|
159
|
+
}).toMatchInlineSnapshot(`
|
|
160
|
+
{
|
|
161
|
+
"checkout": {
|
|
162
|
+
"errors": {
|
|
163
|
+
"400": {
|
|
164
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
|
|
165
|
+
},
|
|
166
|
+
"403": {
|
|
167
|
+
"$ref": "#/components/schemas/ApiKeyForbiddenOrApiKeyIpForbiddenOrBillingSourceDisabledOrForbiddenError",
|
|
168
|
+
},
|
|
169
|
+
"404": {
|
|
170
|
+
"$ref": "#/components/schemas/OrganizationNotFoundError",
|
|
171
|
+
},
|
|
172
|
+
"501": {
|
|
173
|
+
"$ref": "#/components/schemas/NotImplementedError",
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
"operationId": "createStripeCheckout",
|
|
177
|
+
"response": {
|
|
178
|
+
"$ref": "#/components/schemas/BillingSession",
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
"components": [
|
|
182
|
+
"Billing",
|
|
183
|
+
"BillingPaymentMethod",
|
|
184
|
+
"BillingPaymentMethodList",
|
|
185
|
+
"BillingSession",
|
|
186
|
+
"BillingSpendLimit",
|
|
187
|
+
"BillingTransactionFeeLimit",
|
|
188
|
+
"UpdateBillingRequest",
|
|
189
|
+
],
|
|
190
|
+
"get": {
|
|
191
|
+
"errors": {
|
|
192
|
+
"400": {
|
|
193
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
|
|
194
|
+
},
|
|
195
|
+
"404": {
|
|
196
|
+
"$ref": "#/components/schemas/OrganizationNotFoundError",
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
"operationId": "getBilling",
|
|
200
|
+
"response": {
|
|
201
|
+
"$ref": "#/components/schemas/Billing",
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
"manage": {
|
|
205
|
+
"errors": {
|
|
206
|
+
"400": {
|
|
207
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
|
|
208
|
+
},
|
|
209
|
+
"403": {
|
|
210
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
211
|
+
},
|
|
212
|
+
"404": {
|
|
213
|
+
"$ref": "#/components/schemas/BillingNotFoundOrOrganizationNotFoundError",
|
|
214
|
+
},
|
|
215
|
+
"501": {
|
|
216
|
+
"$ref": "#/components/schemas/NotImplementedError",
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
"operationId": "createStripeManage",
|
|
220
|
+
"response": {
|
|
221
|
+
"$ref": "#/components/schemas/BillingSession",
|
|
222
|
+
},
|
|
223
|
+
},
|
|
224
|
+
"methods": {
|
|
225
|
+
"errors": {
|
|
226
|
+
"400": {
|
|
227
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
|
|
228
|
+
},
|
|
229
|
+
"404": {
|
|
230
|
+
"$ref": "#/components/schemas/OrganizationNotFoundError",
|
|
231
|
+
},
|
|
232
|
+
"501": {
|
|
233
|
+
"$ref": "#/components/schemas/NotImplementedError",
|
|
234
|
+
},
|
|
235
|
+
},
|
|
236
|
+
"operationId": "getBillingPaymentMethods",
|
|
237
|
+
"response": {
|
|
238
|
+
"$ref": "#/components/schemas/BillingPaymentMethodList",
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
"remove": {
|
|
242
|
+
"errors": {
|
|
243
|
+
"400": {
|
|
244
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrParamInvalidOrQueryInvalidError",
|
|
245
|
+
},
|
|
246
|
+
"403": {
|
|
247
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
248
|
+
},
|
|
249
|
+
"404": {
|
|
250
|
+
"$ref": "#/components/schemas/BillingNotFoundOrOrganizationNotFoundOrPaymentMethodNotFoundError",
|
|
251
|
+
},
|
|
252
|
+
"501": {
|
|
253
|
+
"$ref": "#/components/schemas/NotImplementedError",
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
"operationId": "deleteBillingPaymentMethod",
|
|
257
|
+
"response": {
|
|
258
|
+
"$ref": "#/components/schemas/Billing",
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
"timestamps": {
|
|
262
|
+
"billing": "date-time",
|
|
263
|
+
"paymentMethod": "date-time",
|
|
264
|
+
},
|
|
265
|
+
"update": {
|
|
266
|
+
"errors": {
|
|
267
|
+
"400": {
|
|
268
|
+
"$ref": "#/components/schemas/ApiKeyMalformedOrBodyInvalidOrParamInvalidOrQueryInvalidError",
|
|
269
|
+
},
|
|
270
|
+
"403": {
|
|
271
|
+
"$ref": "#/components/schemas/ForbiddenError",
|
|
272
|
+
},
|
|
273
|
+
"404": {
|
|
274
|
+
"$ref": "#/components/schemas/OrganizationNotFoundError",
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
"operationId": "updateBilling",
|
|
278
|
+
"request": {
|
|
279
|
+
"$ref": "#/components/schemas/UpdateBillingRequest",
|
|
280
|
+
},
|
|
281
|
+
"response": {
|
|
282
|
+
"$ref": "#/components/schemas/Billing",
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
}
|
|
286
|
+
`)
|
|
287
|
+
})
|
|
288
|
+
|
|
80
289
|
/** RequestInit presenting the given token. */
|
|
81
290
|
function as(token: string) {
|
|
82
291
|
return { headers: { 'tempo-api-key': token } } as const
|