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
|
@@ -49,194 +49,217 @@ export namespace schema {
|
|
|
49
49
|
.check(z.describe('Path parameters addressing one payment method.'))
|
|
50
50
|
|
|
51
51
|
/** A per-period spend limit. */
|
|
52
|
-
export const SpendLimit =
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
currency: z
|
|
62
|
-
._default(z.enum(BillingSettings.currencies), 'usd')
|
|
63
|
-
.check(
|
|
64
|
-
z.describe('Currency the limit is denominated in; `usd` only today.'),
|
|
65
|
-
z.meta({ examples: ['usd'] }),
|
|
66
|
-
),
|
|
67
|
-
period: z
|
|
68
|
-
._default(z.enum(BillingSettings.periods), 'month')
|
|
69
|
-
.check(
|
|
70
|
-
z.describe('Window the limit applies over; `month` (UTC calendar) only today.'),
|
|
71
|
-
z.meta({ examples: ['month'] }),
|
|
52
|
+
export const SpendLimit = OpenApi.component(
|
|
53
|
+
Schema.describe(
|
|
54
|
+
z.object({
|
|
55
|
+
amount: z.string().check(
|
|
56
|
+
// The lookahead rejects zero: a zero limit would refuse all
|
|
57
|
+
// sponsorship, which `null` (clear) already expresses.
|
|
58
|
+
z.regex(/^(?!0+(\.0+)?$)\d{1,9}(\.\d{1,2})?$/),
|
|
59
|
+
z.describe('Limit as a positive decimal string in `currency` units.'),
|
|
60
|
+
z.meta({ examples: ['250'] }),
|
|
72
61
|
),
|
|
73
|
-
|
|
74
|
-
|
|
62
|
+
currency: z
|
|
63
|
+
._default(z.enum(BillingSettings.currencies), 'usd')
|
|
64
|
+
.check(
|
|
65
|
+
z.describe('Currency the limit is denominated in; `usd` only today.'),
|
|
66
|
+
z.meta({ examples: ['usd'] }),
|
|
67
|
+
),
|
|
68
|
+
period: z
|
|
69
|
+
._default(z.enum(BillingSettings.periods), 'month')
|
|
70
|
+
.check(
|
|
71
|
+
z.describe('Window the limit applies over; `month` (UTC calendar) only today.'),
|
|
72
|
+
z.meta({ examples: ['month'] }),
|
|
73
|
+
),
|
|
74
|
+
}),
|
|
75
|
+
'A per-period spend limit.',
|
|
76
|
+
),
|
|
77
|
+
'BillingSpendLimit',
|
|
75
78
|
)
|
|
76
79
|
|
|
77
80
|
/** A per-transaction fee cap. */
|
|
78
|
-
export const TxFeeLimit =
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
currency: z
|
|
88
|
-
._default(z.enum(BillingSettings.currencies), 'usd')
|
|
89
|
-
.check(
|
|
90
|
-
z.describe('Currency the cap is denominated in; `usd` only today.'),
|
|
91
|
-
z.meta({ examples: ['usd'] }),
|
|
81
|
+
export const TxFeeLimit = OpenApi.component(
|
|
82
|
+
Schema.describe(
|
|
83
|
+
z.object({
|
|
84
|
+
amount: z.string().check(
|
|
85
|
+
// The lookahead rejects zero: a zero cap would refuse every
|
|
86
|
+
// transaction, which is not a supported configuration.
|
|
87
|
+
z.regex(/^(?!0+(\.0+)?$)\d{1,9}(\.\d{1,2})?$/),
|
|
88
|
+
z.describe('Cap as a positive decimal string in `currency` units.'),
|
|
89
|
+
z.meta({ examples: ['0.50'] }),
|
|
92
90
|
),
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
currency: z
|
|
92
|
+
._default(z.enum(BillingSettings.currencies), 'usd')
|
|
93
|
+
.check(
|
|
94
|
+
z.describe('Currency the cap is denominated in; `usd` only today.'),
|
|
95
|
+
z.meta({ examples: ['usd'] }),
|
|
96
|
+
),
|
|
97
|
+
}),
|
|
98
|
+
'A per-transaction fee cap.',
|
|
99
|
+
),
|
|
100
|
+
'BillingTransactionFeeLimit',
|
|
95
101
|
)
|
|
96
102
|
|
|
97
103
|
/** PATCH body; absent fields stay unchanged, null clears a limit. */
|
|
98
|
-
export const Patch =
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
104
|
+
export const Patch = OpenApi.component(
|
|
105
|
+
Schema.describe(
|
|
106
|
+
z.object({
|
|
107
|
+
spendLimit: z
|
|
108
|
+
.optional(z.nullable(SpendLimit))
|
|
109
|
+
.check(
|
|
110
|
+
z.describe('Spend limit per period; absent leaves it unchanged, null removes it.'),
|
|
111
|
+
z.meta({ examples: [{ amount: '250', currency: 'usd', period: 'month' }] }),
|
|
112
|
+
),
|
|
113
|
+
txFeeLimit: z.optional(z.nullable(TxFeeLimit)).check(
|
|
114
|
+
z.describe('Per-transaction fee cap; absent leaves it unchanged, null restores the platform default.'), // prettier-ignore
|
|
115
|
+
z.meta({ examples: [{ amount: '0.50', currency: 'usd' }] }),
|
|
105
116
|
),
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}),
|
|
111
|
-
'Billing settings to apply.',
|
|
117
|
+
}),
|
|
118
|
+
'Billing settings to apply.',
|
|
119
|
+
),
|
|
120
|
+
'UpdateBillingRequest',
|
|
112
121
|
)
|
|
113
122
|
|
|
114
123
|
/** An organization's billing state. */
|
|
115
|
-
export const Billing =
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
124
|
+
export const Billing = OpenApi.component(
|
|
125
|
+
Schema.describe(
|
|
126
|
+
z.object({
|
|
127
|
+
enabledSources: z
|
|
128
|
+
.array(z.enum(EnabledBillingSources.sources))
|
|
129
|
+
.check(
|
|
130
|
+
z.describe('Billing sources this organization may set up.'),
|
|
131
|
+
z.meta({ examples: [['stripe']] }),
|
|
132
|
+
),
|
|
133
|
+
spend: z
|
|
134
|
+
.optional(
|
|
135
|
+
z.object({
|
|
136
|
+
amount: z.string().check(
|
|
137
|
+
z.describe('Committed spend as a decimal string: finalized fees plus in-flight fee caps.'), // prettier-ignore
|
|
138
|
+
z.meta({ examples: ['12.34'] }),
|
|
139
|
+
),
|
|
140
|
+
currency: z
|
|
141
|
+
.enum(BillingSettings.currencies)
|
|
142
|
+
.check(z.describe('Currency of the spend figure.'), z.meta({ examples: ['usd'] })),
|
|
143
|
+
period: z
|
|
144
|
+
.enum(BillingSettings.periods)
|
|
145
|
+
.check(z.describe('Window the figure covers.'), z.meta({ examples: ['month'] })),
|
|
146
|
+
}),
|
|
147
|
+
)
|
|
148
|
+
.check(
|
|
149
|
+
z.describe('Billable production spend committed in the current window.'),
|
|
150
|
+
z.meta({ examples: [{ amount: '12.34', currency: 'usd', period: 'month' }] }),
|
|
151
|
+
),
|
|
152
|
+
spendLimit: z
|
|
153
|
+
.optional(SpendLimit)
|
|
154
|
+
.check(
|
|
155
|
+
z.describe('Configured spend limit; absent when the organization has none.'),
|
|
156
|
+
z.meta({ examples: [{ amount: '250', currency: 'usd', period: 'month' }] }),
|
|
157
|
+
),
|
|
158
|
+
status: z.enum(StripeCustomers.statuses).check(
|
|
159
|
+
z.describe("Billing status derived from the organization's billing source; `active` opens production fee sponsorship."), // prettier-ignore
|
|
160
|
+
z.meta({ examples: ['active'] }),
|
|
122
161
|
),
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
z.meta({ examples: ['12.34'] }),
|
|
162
|
+
txFeeLimit: z
|
|
163
|
+
.optional(TxFeeLimit)
|
|
164
|
+
.check(
|
|
165
|
+
z.describe(
|
|
166
|
+
'Configured per-transaction fee cap; absent when the platform default applies.',
|
|
129
167
|
),
|
|
130
|
-
currency:
|
|
131
|
-
.enum(BillingSettings.currencies)
|
|
132
|
-
.check(z.describe('Currency of the spend figure.'), z.meta({ examples: ['usd'] })),
|
|
133
|
-
period: z
|
|
134
|
-
.enum(BillingSettings.periods)
|
|
135
|
-
.check(z.describe('Window the figure covers.'), z.meta({ examples: ['month'] })),
|
|
136
|
-
}),
|
|
137
|
-
)
|
|
138
|
-
.check(
|
|
139
|
-
z.describe('Billable production spend committed in the current window.'),
|
|
140
|
-
z.meta({ examples: [{ amount: '12.34', currency: 'usd', period: 'month' }] }),
|
|
141
|
-
),
|
|
142
|
-
spendLimit: z
|
|
143
|
-
.optional(SpendLimit)
|
|
144
|
-
.check(
|
|
145
|
-
z.describe('Configured spend limit; absent when the organization has none.'),
|
|
146
|
-
z.meta({ examples: [{ amount: '250', currency: 'usd', period: 'month' }] }),
|
|
147
|
-
),
|
|
148
|
-
status: z.enum(StripeCustomers.statuses).check(
|
|
149
|
-
z.describe("Billing status derived from the organization's billing source; `active` opens production fee sponsorship."), // prettier-ignore
|
|
150
|
-
z.meta({ examples: ['active'] }),
|
|
151
|
-
),
|
|
152
|
-
txFeeLimit: z
|
|
153
|
-
.optional(TxFeeLimit)
|
|
154
|
-
.check(
|
|
155
|
-
z.describe(
|
|
156
|
-
'Configured per-transaction fee cap; absent when the platform default applies.',
|
|
168
|
+
z.meta({ examples: [{ amount: '0.50', currency: 'usd' }] }),
|
|
157
169
|
),
|
|
158
|
-
|
|
170
|
+
updatedAt: z.optional(z.iso.datetime()).check(
|
|
171
|
+
z.describe('When the billing status last changed (ISO 8601); absent before first checkout.'), // prettier-ignore
|
|
172
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
159
173
|
),
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}),
|
|
165
|
-
"An organization's billing state.",
|
|
174
|
+
}),
|
|
175
|
+
"An organization's billing state.",
|
|
176
|
+
),
|
|
177
|
+
'Billing',
|
|
166
178
|
)
|
|
167
179
|
|
|
168
180
|
/** A hosted Stripe session link. */
|
|
169
|
-
export const Session =
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
181
|
+
export const Session = OpenApi.component(
|
|
182
|
+
Schema.describe(
|
|
183
|
+
z.object({
|
|
184
|
+
url: z
|
|
185
|
+
.url()
|
|
186
|
+
.check(
|
|
187
|
+
z.describe('Hosted Stripe session URL; navigate the browser here.'),
|
|
188
|
+
z.meta({ examples: ['https://checkout.stripe.com/c/pay/cs_test_a1b2c3'] }),
|
|
189
|
+
),
|
|
190
|
+
}),
|
|
191
|
+
'A hosted Stripe session link.',
|
|
192
|
+
),
|
|
193
|
+
'BillingSession',
|
|
179
194
|
)
|
|
180
195
|
|
|
181
196
|
/** A payment method on file. */
|
|
182
|
-
export const PaymentMethod =
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
.
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
197
|
+
export const PaymentMethod = OpenApi.component(
|
|
198
|
+
Schema.describe(
|
|
199
|
+
z.object({
|
|
200
|
+
card: z
|
|
201
|
+
.optional(
|
|
202
|
+
z.object({
|
|
203
|
+
brand: z
|
|
204
|
+
.string()
|
|
205
|
+
.check(z.describe('Card brand (e.g. `visa`).'), z.meta({ examples: ['visa'] })),
|
|
206
|
+
expMonth: z
|
|
207
|
+
.number()
|
|
208
|
+
.check(z.describe('Expiry month (1-12).'), z.meta({ examples: [12] })),
|
|
209
|
+
expYear: z.number().check(z.describe('Expiry year.'), z.meta({ examples: [2030] })),
|
|
210
|
+
last4: z
|
|
211
|
+
.string()
|
|
212
|
+
.check(z.describe('Last four digits.'), z.meta({ examples: ['4242'] })),
|
|
213
|
+
}),
|
|
214
|
+
)
|
|
215
|
+
.check(
|
|
216
|
+
z.describe('Card details; present when `type` is `card`.'),
|
|
217
|
+
z.meta({ examples: [{ brand: 'visa', expMonth: 12, expYear: 2030, last4: '4242' }] }),
|
|
218
|
+
),
|
|
219
|
+
createdAt: z.iso
|
|
220
|
+
.datetime()
|
|
221
|
+
.check(
|
|
222
|
+
z.describe('When the method was attached (ISO 8601).'),
|
|
223
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
224
|
+
),
|
|
225
|
+
default: z
|
|
226
|
+
.boolean()
|
|
227
|
+
.check(z.describe('Whether invoices charge this method.'), z.meta({ examples: [true] })),
|
|
228
|
+
id: z
|
|
229
|
+
.string()
|
|
230
|
+
.check(
|
|
231
|
+
z.describe('The payment method id (`pm_…`).'),
|
|
232
|
+
z.meta({ examples: ['pm_1NVChw2eZvKYlo2CHxiM5E2N'] }),
|
|
233
|
+
),
|
|
234
|
+
provider: z
|
|
235
|
+
.literal('stripe')
|
|
236
|
+
.check(
|
|
237
|
+
z.describe('Payment provider; `stripe` only today.'),
|
|
238
|
+
z.meta({ examples: ['stripe'] }),
|
|
239
|
+
),
|
|
240
|
+
type: z
|
|
241
|
+
.string()
|
|
242
|
+
.check(
|
|
243
|
+
z.describe('Method type (e.g. `card`, `us_bank_account`).'),
|
|
244
|
+
z.meta({ examples: ['card'] }),
|
|
245
|
+
),
|
|
246
|
+
}),
|
|
247
|
+
'A payment method on file.',
|
|
248
|
+
),
|
|
249
|
+
'BillingPaymentMethod',
|
|
232
250
|
)
|
|
233
251
|
|
|
234
252
|
/** An organization's payment methods. */
|
|
235
|
-
export const PaymentMethods =
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
253
|
+
export const PaymentMethods = OpenApi.component(
|
|
254
|
+
Schema.describe(
|
|
255
|
+
z.object({
|
|
256
|
+
data: z
|
|
257
|
+
.array(PaymentMethod)
|
|
258
|
+
.check(z.describe('Payment methods on file, newest first.'), z.meta({ examples: [[]] })),
|
|
259
|
+
}),
|
|
260
|
+
"An organization's payment methods.",
|
|
261
|
+
),
|
|
262
|
+
'BillingPaymentMethodList',
|
|
240
263
|
)
|
|
241
264
|
}
|
|
242
265
|
|
|
@@ -261,7 +284,14 @@ export function billing() {
|
|
|
261
284
|
operationId: 'getBilling',
|
|
262
285
|
responses: OpenApi.responses({
|
|
263
286
|
errors: {
|
|
264
|
-
|
|
287
|
+
400: {
|
|
288
|
+
codes: ['param_invalid', 'query_invalid'],
|
|
289
|
+
description: 'Malformed API key, invalid path, or invalid query.',
|
|
290
|
+
},
|
|
291
|
+
404: {
|
|
292
|
+
codes: ['organization_not_found'],
|
|
293
|
+
description: 'No accessible organization was found for this id.',
|
|
294
|
+
},
|
|
265
295
|
},
|
|
266
296
|
success: { description: "The organization's billing state.", schema: schema.Billing },
|
|
267
297
|
}),
|
|
@@ -314,8 +344,14 @@ export function billing() {
|
|
|
314
344
|
operationId: 'updateBilling',
|
|
315
345
|
responses: OpenApi.responses({
|
|
316
346
|
errors: {
|
|
317
|
-
|
|
318
|
-
|
|
347
|
+
400: {
|
|
348
|
+
codes: ['body_invalid', 'param_invalid', 'query_invalid'],
|
|
349
|
+
description: 'Malformed API key, invalid path, invalid query, or invalid body.',
|
|
350
|
+
},
|
|
351
|
+
404: {
|
|
352
|
+
codes: ['organization_not_found'],
|
|
353
|
+
description: 'No accessible organization was found for this id.',
|
|
354
|
+
},
|
|
319
355
|
},
|
|
320
356
|
success: {
|
|
321
357
|
description: "The organization's updated billing state.",
|
|
@@ -328,6 +364,7 @@ export function billing() {
|
|
|
328
364
|
async (c) => {
|
|
329
365
|
if (Auth.narrowAccess) return Auth.accessError(c)
|
|
330
366
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
367
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
331
368
|
if (OpenApi.narrowValidation)
|
|
332
369
|
return OpenApi.validationError(c, {
|
|
333
370
|
code: 'param_invalid',
|
|
@@ -393,12 +430,22 @@ export function billing() {
|
|
|
393
430
|
operationId: 'createStripeCheckout',
|
|
394
431
|
responses: OpenApi.responses({
|
|
395
432
|
errors: {
|
|
433
|
+
400: {
|
|
434
|
+
codes: ['param_invalid', 'query_invalid'],
|
|
435
|
+
description: 'Malformed API key, invalid path, or invalid query.',
|
|
436
|
+
},
|
|
396
437
|
403: {
|
|
397
|
-
codes: ['
|
|
438
|
+
codes: ['billing_source_disabled'],
|
|
398
439
|
description: 'Requires the owner role and Stripe billing enabled.',
|
|
399
440
|
},
|
|
400
|
-
404:
|
|
401
|
-
|
|
441
|
+
404: {
|
|
442
|
+
codes: ['organization_not_found'],
|
|
443
|
+
description: 'No accessible organization was found for this id.',
|
|
444
|
+
},
|
|
445
|
+
501: {
|
|
446
|
+
codes: ['billing_unconfigured'],
|
|
447
|
+
description: 'Billing is not configured on this deployment.',
|
|
448
|
+
},
|
|
402
449
|
},
|
|
403
450
|
success: {
|
|
404
451
|
description: 'A Stripe Checkout (setup mode) session for attaching a payment method.',
|
|
@@ -485,9 +532,18 @@ export function billing() {
|
|
|
485
532
|
operationId: 'createStripeManage',
|
|
486
533
|
responses: OpenApi.responses({
|
|
487
534
|
errors: {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
535
|
+
400: {
|
|
536
|
+
codes: ['param_invalid', 'query_invalid'],
|
|
537
|
+
description: 'Malformed API key, invalid path, or invalid query.',
|
|
538
|
+
},
|
|
539
|
+
404: {
|
|
540
|
+
codes: ['billing_not_found', 'organization_not_found'],
|
|
541
|
+
description: 'No accessible organization or billing account was found.',
|
|
542
|
+
},
|
|
543
|
+
501: {
|
|
544
|
+
codes: ['billing_unconfigured'],
|
|
545
|
+
description: 'Billing is not configured on this deployment.',
|
|
546
|
+
},
|
|
491
547
|
},
|
|
492
548
|
success: {
|
|
493
549
|
description: 'A Stripe billing-portal session for managing payment methods and invoices.', // prettier-ignore
|
|
@@ -500,6 +556,7 @@ export function billing() {
|
|
|
500
556
|
async (c) => {
|
|
501
557
|
if (Auth.narrowAccess) return Auth.accessError(c)
|
|
502
558
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
559
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
503
560
|
if (OpenApi.narrowValidation)
|
|
504
561
|
return OpenApi.validationError(c, {
|
|
505
562
|
code: 'param_invalid',
|
|
@@ -548,8 +605,18 @@ export function billing() {
|
|
|
548
605
|
operationId: 'getBillingPaymentMethods',
|
|
549
606
|
responses: OpenApi.responses({
|
|
550
607
|
errors: {
|
|
551
|
-
|
|
552
|
-
|
|
608
|
+
400: {
|
|
609
|
+
codes: ['param_invalid', 'query_invalid'],
|
|
610
|
+
description: 'Malformed API key, invalid path, or invalid query.',
|
|
611
|
+
},
|
|
612
|
+
404: {
|
|
613
|
+
codes: ['organization_not_found'],
|
|
614
|
+
description: 'No accessible organization was found for this id.',
|
|
615
|
+
},
|
|
616
|
+
501: {
|
|
617
|
+
codes: ['billing_unconfigured'],
|
|
618
|
+
description: 'Billing is not configured on this deployment.',
|
|
619
|
+
},
|
|
553
620
|
},
|
|
554
621
|
success: {
|
|
555
622
|
description: "The organization's payment methods.",
|
|
@@ -634,9 +701,18 @@ export function billing() {
|
|
|
634
701
|
operationId: 'deleteBillingPaymentMethod',
|
|
635
702
|
responses: OpenApi.responses({
|
|
636
703
|
errors: {
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
704
|
+
400: {
|
|
705
|
+
codes: ['param_invalid', 'query_invalid'],
|
|
706
|
+
description: 'Malformed API key, invalid path, or invalid query.',
|
|
707
|
+
},
|
|
708
|
+
404: {
|
|
709
|
+
codes: ['billing_not_found', 'organization_not_found', 'payment_method_not_found'],
|
|
710
|
+
description: 'No accessible organization, billing account, or payment method was found.', // prettier-ignore
|
|
711
|
+
},
|
|
712
|
+
501: {
|
|
713
|
+
codes: ['billing_unconfigured'],
|
|
714
|
+
description: 'Billing is not configured on this deployment.',
|
|
715
|
+
},
|
|
640
716
|
},
|
|
641
717
|
success: {
|
|
642
718
|
description: "The organization's updated billing state.",
|
|
@@ -649,6 +725,7 @@ export function billing() {
|
|
|
649
725
|
async (c) => {
|
|
650
726
|
if (Auth.narrowAccess) return Auth.accessError(c)
|
|
651
727
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
728
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
652
729
|
if (OpenApi.narrowValidation)
|
|
653
730
|
return OpenApi.validationError(c, {
|
|
654
731
|
code: 'param_invalid',
|
|
@@ -28,6 +28,45 @@ async function organization(app: ReturnType<typeof createApp>, cookie: string) {
|
|
|
28
28
|
return TestApp.json(response, Orgs.schema.Organization)
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
test('publishes a generator-ready OpenAPI contract', async () => {
|
|
32
|
+
const spec = await (await createApp().request('/openapi.json')).json()
|
|
33
|
+
const operation = spec.paths['/v1/orgs/{orgId}/faucet'].post
|
|
34
|
+
|
|
35
|
+
expect({
|
|
36
|
+
amountExamples: spec.components.schemas.FaucetFundedToken.properties.amount.examples,
|
|
37
|
+
components: [
|
|
38
|
+
'FaucetFundedToken',
|
|
39
|
+
'FaucetToken',
|
|
40
|
+
'FundTestnetAccountRequest',
|
|
41
|
+
'FundTestnetAccountResponse',
|
|
42
|
+
].filter((name) => spec.components.schemas[name]),
|
|
43
|
+
errors: {
|
|
44
|
+
400: operation.responses[400].content['application/json'].schema,
|
|
45
|
+
404: operation.responses[404].content['application/json'].schema,
|
|
46
|
+
429: operation.responses[429].content['application/json'].schema,
|
|
47
|
+
},
|
|
48
|
+
operationId: operation.operationId,
|
|
49
|
+
request: operation.requestBody.content['application/json'].schema,
|
|
50
|
+
response: operation.responses[200].content['application/json'].schema,
|
|
51
|
+
}).toEqual({
|
|
52
|
+
amountExamples: [{ baseUnits: '1000000000', currency: 'USD', decimals: 6, formatted: '1000' }],
|
|
53
|
+
components: [
|
|
54
|
+
'FaucetFundedToken',
|
|
55
|
+
'FaucetToken',
|
|
56
|
+
'FundTestnetAccountRequest',
|
|
57
|
+
'FundTestnetAccountResponse',
|
|
58
|
+
],
|
|
59
|
+
errors: {
|
|
60
|
+
400: { $ref: '#/components/schemas/ApiKeyMalformedOrBodyInvalidOrParamInvalidError' },
|
|
61
|
+
404: { $ref: '#/components/schemas/OrganizationNotFoundError' },
|
|
62
|
+
429: { $ref: '#/components/schemas/RateLimitExceededError' },
|
|
63
|
+
},
|
|
64
|
+
operationId: 'fundTestnetAccount',
|
|
65
|
+
request: { $ref: '#/components/schemas/FundTestnetAccountRequest' },
|
|
66
|
+
response: { $ref: '#/components/schemas/FundTestnetAccountResponse' },
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
|
|
31
70
|
describe('faucet', () => {
|
|
32
71
|
test('funds a member account and rate limits repeated funding', async () => {
|
|
33
72
|
const app = createApp()
|