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
|
@@ -55,217 +55,244 @@ export namespace schema {
|
|
|
55
55
|
.check(z.describe('Role granted by the link.'), z.meta({ examples: ['member'] }))
|
|
56
56
|
|
|
57
57
|
/** Management representation, including the recopyable bearer id. */
|
|
58
|
-
export const InviteLink =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
58
|
+
export const InviteLink = OpenApi.component(
|
|
59
|
+
Schema.describe(
|
|
60
|
+
z.object({
|
|
61
|
+
allowedEmailDomains,
|
|
62
|
+
createdAt: z.iso
|
|
63
|
+
.datetime()
|
|
64
|
+
.check(
|
|
65
|
+
z.describe('When the link was created (ISO 8601).'),
|
|
66
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
67
|
+
),
|
|
68
|
+
createdBy: z
|
|
69
|
+
.string()
|
|
70
|
+
.check(
|
|
71
|
+
z.describe('User id that created the link.'),
|
|
72
|
+
z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
73
|
+
),
|
|
74
|
+
enabled: z
|
|
75
|
+
.boolean()
|
|
76
|
+
.check(z.describe('Whether the link is enabled.'), z.meta({ examples: [true] })),
|
|
77
|
+
expiresAt: nullableExpiry,
|
|
78
|
+
id: z
|
|
79
|
+
.string()
|
|
80
|
+
.check(
|
|
81
|
+
z.describe('Opaque invite-link resource id (`iln_…`).'),
|
|
82
|
+
z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
83
|
+
),
|
|
84
|
+
lastUsedAt: z
|
|
85
|
+
.nullable(z.iso.datetime())
|
|
86
|
+
.check(
|
|
87
|
+
z.describe('When the link last created a membership, or null.'),
|
|
88
|
+
z.meta({ examples: ['2026-01-02T00:00:00.000Z', null] }),
|
|
89
|
+
),
|
|
90
|
+
maxUses: nullableUses,
|
|
91
|
+
name: z
|
|
92
|
+
.string()
|
|
93
|
+
.check(z.describe('Human-readable link name.'), z.meta({ examples: ['Community'] })),
|
|
94
|
+
orgId: z
|
|
95
|
+
.string()
|
|
96
|
+
.check(
|
|
97
|
+
z.describe('Organization id (`org_…`) the link joins.'),
|
|
98
|
+
z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
99
|
+
),
|
|
100
|
+
role,
|
|
101
|
+
status: z
|
|
102
|
+
.enum(['active', 'deleted', 'disabled', 'exhausted', 'expired'])
|
|
103
|
+
.check(z.describe('Current link availability.'), z.meta({ examples: ['active'] })),
|
|
104
|
+
token: z
|
|
105
|
+
.string()
|
|
106
|
+
.check(
|
|
107
|
+
z.describe('Opaque bearer token embedded in the recipient URL (`lnk_…`).'),
|
|
108
|
+
z.meta({ examples: ['lnk_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
109
|
+
),
|
|
110
|
+
updatedAt: z.iso
|
|
111
|
+
.datetime()
|
|
112
|
+
.check(
|
|
113
|
+
z.describe('When the link was last changed (ISO 8601).'),
|
|
114
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
115
|
+
),
|
|
116
|
+
useCount: z
|
|
117
|
+
.number()
|
|
118
|
+
.check(
|
|
119
|
+
z.int(),
|
|
120
|
+
z.nonnegative(),
|
|
121
|
+
z.describe('Memberships created through the link.'),
|
|
122
|
+
z.meta({ examples: [3] }),
|
|
123
|
+
),
|
|
124
|
+
}),
|
|
125
|
+
'A reusable organization invite link.',
|
|
126
|
+
),
|
|
127
|
+
'InviteLink',
|
|
125
128
|
)
|
|
126
129
|
|
|
127
130
|
/** Redemption audit representation (never includes a bearer URL). */
|
|
128
|
-
export const Redemption =
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
.check(
|
|
145
|
-
z.describe('Opaque redemption id (`ilr_…`).'),
|
|
146
|
-
z.meta({ examples: ['ilr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
147
|
-
),
|
|
148
|
-
inviteLinkId: z
|
|
149
|
-
.string()
|
|
150
|
-
.check(
|
|
151
|
-
z.describe('Invite-link resource id used for redemption.'),
|
|
152
|
-
z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
153
|
-
),
|
|
154
|
-
inviteLinkName: z
|
|
155
|
-
.string()
|
|
156
|
-
.check(z.describe('Link name at redemption time.'), z.meta({ examples: ['Community'] })),
|
|
157
|
-
orgId: z
|
|
158
|
-
.string()
|
|
159
|
-
.check(
|
|
160
|
-
z.describe('Organization id joined through the link.'),
|
|
161
|
-
z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
162
|
-
),
|
|
163
|
-
userId: z
|
|
164
|
-
.string()
|
|
165
|
-
.check(
|
|
166
|
-
z.describe('User id that redeemed the link.'),
|
|
167
|
-
z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
168
|
-
),
|
|
169
|
-
}),
|
|
170
|
-
'An invite-link redemption audit record.',
|
|
171
|
-
)
|
|
172
|
-
|
|
173
|
-
/** Create body. */
|
|
174
|
-
export const CreateBody = z
|
|
175
|
-
.object({
|
|
176
|
-
allowedEmailDomains: z.optional(allowedEmailDomains),
|
|
177
|
-
expiresAt: z.optional(nullableExpiry),
|
|
178
|
-
maxUses: z.optional(nullableUses),
|
|
179
|
-
name: z.optional(
|
|
180
|
-
z
|
|
131
|
+
export const Redemption = OpenApi.component(
|
|
132
|
+
Schema.describe(
|
|
133
|
+
z.object({
|
|
134
|
+
createdAt: z.iso
|
|
135
|
+
.datetime()
|
|
136
|
+
.check(
|
|
137
|
+
z.describe('When the membership was created (ISO 8601).'),
|
|
138
|
+
z.meta({ examples: ['2026-01-02T00:00:00.000Z'] }),
|
|
139
|
+
),
|
|
140
|
+
email: z
|
|
141
|
+
.email()
|
|
142
|
+
.check(
|
|
143
|
+
z.describe('Verified email used for redemption.'),
|
|
144
|
+
z.meta({ examples: ['dev@example.com'] }),
|
|
145
|
+
),
|
|
146
|
+
id: z
|
|
181
147
|
.string()
|
|
182
148
|
.check(
|
|
183
|
-
z.
|
|
184
|
-
z.
|
|
185
|
-
z.maxLength(100),
|
|
186
|
-
z.describe('Human-readable link name.'),
|
|
187
|
-
z.meta({ examples: ['Community'] }),
|
|
149
|
+
z.describe('Opaque redemption id (`ilr_…`).'),
|
|
150
|
+
z.meta({ examples: ['ilr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
188
151
|
),
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
152
|
+
inviteLinkId: z
|
|
153
|
+
.string()
|
|
154
|
+
.check(
|
|
155
|
+
z.describe('Invite-link resource id used for redemption.'),
|
|
156
|
+
z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
157
|
+
),
|
|
158
|
+
inviteLinkName: z
|
|
159
|
+
.string()
|
|
160
|
+
.check(z.describe('Link name at redemption time.'), z.meta({ examples: ['Community'] })),
|
|
161
|
+
orgId: z
|
|
162
|
+
.string()
|
|
163
|
+
.check(
|
|
164
|
+
z.describe('Organization id joined through the link.'),
|
|
165
|
+
z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
166
|
+
),
|
|
167
|
+
userId: z
|
|
168
|
+
.string()
|
|
169
|
+
.check(
|
|
170
|
+
z.describe('User id that redeemed the link.'),
|
|
171
|
+
z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
172
|
+
),
|
|
173
|
+
}),
|
|
174
|
+
'An invite-link redemption audit record.',
|
|
175
|
+
),
|
|
176
|
+
'InviteLinkRedemption',
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
/** Create body. */
|
|
180
|
+
export const CreateInviteLinkRequest = OpenApi.component(
|
|
181
|
+
z
|
|
182
|
+
.object({
|
|
183
|
+
allowedEmailDomains: z.optional(allowedEmailDomains),
|
|
184
|
+
expiresAt: z.optional(nullableExpiry),
|
|
185
|
+
maxUses: z.optional(nullableUses),
|
|
186
|
+
name: z.optional(
|
|
187
|
+
z
|
|
188
|
+
.string()
|
|
189
|
+
.check(
|
|
190
|
+
z.trim(),
|
|
191
|
+
z.minLength(1),
|
|
192
|
+
z.maxLength(100),
|
|
193
|
+
z.describe('Human-readable link name.'),
|
|
194
|
+
z.meta({ examples: ['Community'] }),
|
|
195
|
+
),
|
|
196
|
+
),
|
|
197
|
+
role: z
|
|
198
|
+
._default(role, 'member')
|
|
199
|
+
.check(z.describe('Role granted by the link.'), z.meta({ examples: ['member'] })),
|
|
200
|
+
})
|
|
201
|
+
.check(z.describe('Fields for creating an invite link.')),
|
|
202
|
+
'CreateInviteLinkRequest',
|
|
203
|
+
)
|
|
195
204
|
|
|
196
205
|
/** Update body. */
|
|
197
|
-
export const
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
206
|
+
export const UpdateInviteLinkRequest = OpenApi.component(
|
|
207
|
+
z
|
|
208
|
+
.object({
|
|
209
|
+
enabled: z
|
|
210
|
+
.boolean()
|
|
211
|
+
.check(z.describe('Whether the link is enabled.'), z.meta({ examples: [false] })),
|
|
212
|
+
})
|
|
213
|
+
.check(z.describe('Fields for updating an invite link.')),
|
|
214
|
+
'UpdateInviteLinkRequest',
|
|
215
|
+
)
|
|
204
216
|
|
|
205
217
|
/** Bearer-token body for recipient operations. */
|
|
206
|
-
export const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
218
|
+
export const InviteLinkTokenRequest = OpenApi.component(
|
|
219
|
+
z
|
|
220
|
+
.object({
|
|
221
|
+
token: z
|
|
222
|
+
.string()
|
|
223
|
+
.check(
|
|
224
|
+
z.describe('Opaque invite-link bearer token.'),
|
|
225
|
+
z.meta({ examples: ['lnk_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
226
|
+
),
|
|
227
|
+
})
|
|
228
|
+
.check(z.describe('An invite-link bearer token.')),
|
|
229
|
+
'InviteLinkTokenRequest',
|
|
230
|
+
)
|
|
216
231
|
|
|
217
232
|
/** Public active-link summary. */
|
|
218
|
-
export const ResolveResponse =
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
233
|
+
export const ResolveResponse = OpenApi.component(
|
|
234
|
+
Schema.describe(
|
|
235
|
+
z.object({
|
|
236
|
+
orgName: z
|
|
237
|
+
.string()
|
|
238
|
+
.check(
|
|
239
|
+
z.describe('Human-readable name of the organization.'),
|
|
240
|
+
z.meta({ examples: ['Acme, Inc.'] }),
|
|
241
|
+
),
|
|
242
|
+
role,
|
|
243
|
+
}),
|
|
244
|
+
'A public summary of an active invite link.',
|
|
245
|
+
),
|
|
246
|
+
'ResolveInviteLinkResponse',
|
|
229
247
|
)
|
|
230
248
|
|
|
231
249
|
/** Successful acceptance. */
|
|
232
|
-
export const AcceptResponse =
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
250
|
+
export const AcceptResponse = OpenApi.component(
|
|
251
|
+
Schema.describe(
|
|
252
|
+
z.object({
|
|
253
|
+
orgId: z
|
|
254
|
+
.string()
|
|
255
|
+
.check(
|
|
256
|
+
z.describe('Organization id joined through the link.'),
|
|
257
|
+
z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
258
|
+
),
|
|
259
|
+
role,
|
|
260
|
+
userId: z
|
|
261
|
+
.string()
|
|
262
|
+
.check(
|
|
263
|
+
z.describe('Member user id.'),
|
|
264
|
+
z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
265
|
+
),
|
|
266
|
+
}),
|
|
267
|
+
'The membership granted through an invite link.',
|
|
268
|
+
),
|
|
269
|
+
'AcceptInviteLinkResponse',
|
|
249
270
|
)
|
|
250
271
|
|
|
251
272
|
/** Link collection response. */
|
|
252
|
-
export const ListResponse =
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
273
|
+
export const ListResponse = OpenApi.component(
|
|
274
|
+
Schema.describe(
|
|
275
|
+
z.object({
|
|
276
|
+
data: z
|
|
277
|
+
.array(InviteLink)
|
|
278
|
+
.check(z.describe('Invite links, newest first.'), z.meta({ examples: [[]] })),
|
|
279
|
+
}),
|
|
280
|
+
'A non-paginated list of invite links.',
|
|
281
|
+
),
|
|
282
|
+
'InviteLinkList',
|
|
259
283
|
)
|
|
260
284
|
|
|
261
285
|
/** Redemption collection response. */
|
|
262
|
-
export const RedemptionsResponse =
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
286
|
+
export const RedemptionsResponse = OpenApi.component(
|
|
287
|
+
Schema.describe(
|
|
288
|
+
z.object({
|
|
289
|
+
data: z
|
|
290
|
+
.array(Redemption)
|
|
291
|
+
.check(z.describe('Redemptions, newest first.'), z.meta({ examples: [[]] })),
|
|
292
|
+
}),
|
|
293
|
+
'A non-paginated list of invite-link redemptions.',
|
|
294
|
+
),
|
|
295
|
+
'InviteLinkRedemptionList',
|
|
269
296
|
)
|
|
270
297
|
|
|
271
298
|
/** Path parameters addressing an organization's invite links. */
|
|
@@ -299,19 +326,20 @@ export namespace schema {
|
|
|
299
326
|
.check(z.describe('Path parameters for one organization invite link.'))
|
|
300
327
|
|
|
301
328
|
/** Delete confirmation. */
|
|
302
|
-
export const DeleteResponse =
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
329
|
+
export const DeleteResponse = OpenApi.component(
|
|
330
|
+
z
|
|
331
|
+
.object({
|
|
332
|
+
id: z
|
|
333
|
+
.string()
|
|
334
|
+
.check(
|
|
335
|
+
z.describe('Deleted invite-link resource id.'),
|
|
336
|
+
z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
337
|
+
),
|
|
338
|
+
})
|
|
339
|
+
.check(z.describe('Confirmation that an invite link was deleted.')),
|
|
340
|
+
'DeleteInviteLinkResponse',
|
|
341
|
+
)
|
|
312
342
|
}
|
|
313
|
-
|
|
314
|
-
const errors = { 404: 'No accessible invite link was found.' } as const
|
|
315
343
|
const bodyValidation = {
|
|
316
344
|
code: 'body_invalid',
|
|
317
345
|
message: 'Check the request body and try again.',
|
|
@@ -329,11 +357,20 @@ export function inviteLinks() {
|
|
|
329
357
|
Auth.policy({ session: true }),
|
|
330
358
|
Auth.ensureOrg({ role: 'admin' }),
|
|
331
359
|
OpenApi.validate('param', schema.Params, paramValidation),
|
|
332
|
-
OpenApi.validate('json', schema.
|
|
360
|
+
OpenApi.validate('json', schema.CreateInviteLinkRequest, bodyValidation),
|
|
333
361
|
OpenApi.describeRoute({
|
|
334
362
|
operationId: 'createInviteLink',
|
|
335
363
|
responses: OpenApi.responses({
|
|
336
|
-
errors
|
|
364
|
+
errors: {
|
|
365
|
+
400: {
|
|
366
|
+
codes: ['body_invalid', 'param_invalid'],
|
|
367
|
+
description: 'Malformed API key, invalid path, or invalid body.',
|
|
368
|
+
},
|
|
369
|
+
404: {
|
|
370
|
+
codes: ['organization_not_found'],
|
|
371
|
+
description: 'No accessible organization was found for this id.',
|
|
372
|
+
},
|
|
373
|
+
},
|
|
337
374
|
success: { description: 'Created link.', schema: schema.InviteLink },
|
|
338
375
|
}),
|
|
339
376
|
summary: 'Create invite link',
|
|
@@ -342,6 +379,8 @@ export function inviteLinks() {
|
|
|
342
379
|
async (c) => {
|
|
343
380
|
if (Auth.narrowAccess) return Auth.superAdminAccessError(c)
|
|
344
381
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
382
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
383
|
+
if (OpenApi.narrowValidation) return OpenApi.validationError(c, paramValidation)
|
|
345
384
|
if (OpenApi.narrowValidation) return OpenApi.validationError(c, bodyValidation)
|
|
346
385
|
const body = c.req.valid('json')
|
|
347
386
|
try {
|
|
@@ -371,7 +410,13 @@ export function inviteLinks() {
|
|
|
371
410
|
OpenApi.describeRoute({
|
|
372
411
|
operationId: 'listInviteLinks',
|
|
373
412
|
responses: OpenApi.responses({
|
|
374
|
-
errors
|
|
413
|
+
errors: {
|
|
414
|
+
400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
|
|
415
|
+
404: {
|
|
416
|
+
codes: ['organization_not_found'],
|
|
417
|
+
description: 'No accessible organization was found for this id.',
|
|
418
|
+
},
|
|
419
|
+
},
|
|
375
420
|
success: { description: 'Invite links.', schema: schema.ListResponse },
|
|
376
421
|
}),
|
|
377
422
|
summary: 'List invite links',
|
|
@@ -380,6 +425,7 @@ export function inviteLinks() {
|
|
|
380
425
|
async (c) => {
|
|
381
426
|
if (Auth.narrowAccess) return Auth.superAdminAccessError(c)
|
|
382
427
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
428
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
383
429
|
if (OpenApi.narrowValidation) return OpenApi.validationError(c, paramValidation)
|
|
384
430
|
try {
|
|
385
431
|
return c.json(
|
|
@@ -398,11 +444,20 @@ export function inviteLinks() {
|
|
|
398
444
|
Auth.policy({ session: true }),
|
|
399
445
|
Auth.ensureOrg({ role: 'admin' }),
|
|
400
446
|
OpenApi.validate('param', schema.LinkParams, paramValidation),
|
|
401
|
-
OpenApi.validate('json', schema.
|
|
447
|
+
OpenApi.validate('json', schema.UpdateInviteLinkRequest, bodyValidation),
|
|
402
448
|
OpenApi.describeRoute({
|
|
403
449
|
operationId: 'updateInviteLink',
|
|
404
450
|
responses: OpenApi.responses({
|
|
405
|
-
errors
|
|
451
|
+
errors: {
|
|
452
|
+
400: {
|
|
453
|
+
codes: ['body_invalid', 'param_invalid'],
|
|
454
|
+
description: 'Malformed API key, invalid path, or invalid body.',
|
|
455
|
+
},
|
|
456
|
+
404: {
|
|
457
|
+
codes: ['invite_link_not_found', 'organization_not_found'],
|
|
458
|
+
description: 'No accessible organization or invite link was found.',
|
|
459
|
+
},
|
|
460
|
+
},
|
|
406
461
|
success: { description: 'Updated link.', schema: schema.InviteLink },
|
|
407
462
|
}),
|
|
408
463
|
summary: 'Update invite link',
|
|
@@ -411,6 +466,8 @@ export function inviteLinks() {
|
|
|
411
466
|
async (c) => {
|
|
412
467
|
if (Auth.narrowAccess) return Auth.superAdminAccessError(c)
|
|
413
468
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
469
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
470
|
+
if (OpenApi.narrowValidation) return OpenApi.validationError(c, paramValidation)
|
|
414
471
|
if (OpenApi.narrowValidation) return OpenApi.validationError(c, bodyValidation)
|
|
415
472
|
const body = c.req.valid('json')
|
|
416
473
|
try {
|
|
@@ -435,7 +492,13 @@ export function inviteLinks() {
|
|
|
435
492
|
OpenApi.describeRoute({
|
|
436
493
|
operationId: 'deleteInviteLink',
|
|
437
494
|
responses: OpenApi.responses({
|
|
438
|
-
errors
|
|
495
|
+
errors: {
|
|
496
|
+
400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
|
|
497
|
+
404: {
|
|
498
|
+
codes: ['invite_link_not_found', 'organization_not_found'],
|
|
499
|
+
description: 'No accessible organization or invite link was found.',
|
|
500
|
+
},
|
|
501
|
+
},
|
|
439
502
|
success: { description: 'Deleted link.', schema: schema.DeleteResponse },
|
|
440
503
|
}),
|
|
441
504
|
summary: 'Delete invite link',
|
|
@@ -444,6 +507,7 @@ export function inviteLinks() {
|
|
|
444
507
|
async (c) => {
|
|
445
508
|
if (Auth.narrowAccess) return Auth.superAdminAccessError(c)
|
|
446
509
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
510
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
447
511
|
if (OpenApi.narrowValidation) return OpenApi.validationError(c, paramValidation)
|
|
448
512
|
try {
|
|
449
513
|
const id = c.req.valid('param').inviteLinkId
|
|
@@ -463,7 +527,13 @@ export function inviteLinks() {
|
|
|
463
527
|
OpenApi.describeRoute({
|
|
464
528
|
operationId: 'listInviteLinkRedemptions',
|
|
465
529
|
responses: OpenApi.responses({
|
|
466
|
-
errors
|
|
530
|
+
errors: {
|
|
531
|
+
400: { codes: ['param_invalid'], description: 'Malformed API key or invalid path.' },
|
|
532
|
+
404: {
|
|
533
|
+
codes: ['invite_link_not_found', 'organization_not_found'],
|
|
534
|
+
description: 'No accessible organization or invite link was found.',
|
|
535
|
+
},
|
|
536
|
+
},
|
|
467
537
|
success: { description: 'Redemptions.', schema: schema.RedemptionsResponse },
|
|
468
538
|
}),
|
|
469
539
|
summary: 'List link redemptions',
|
|
@@ -472,6 +542,7 @@ export function inviteLinks() {
|
|
|
472
542
|
async (c) => {
|
|
473
543
|
if (Auth.narrowAccess) return Auth.superAdminAccessError(c)
|
|
474
544
|
if (Auth.narrowScope) return Auth.ensureOrgError(c)
|
|
545
|
+
if (Auth.narrowOrgRole) return Auth.ensureOrgRoleError(c)
|
|
475
546
|
if (OpenApi.narrowValidation) return OpenApi.validationError(c, paramValidation)
|
|
476
547
|
try {
|
|
477
548
|
const db = Db.get(c.get('db'))
|
|
@@ -492,11 +563,17 @@ export function inviteLinks() {
|
|
|
492
563
|
.post(
|
|
493
564
|
'/v1/invite-links/resolve',
|
|
494
565
|
Auth.policy({ public: true, session: true }),
|
|
495
|
-
OpenApi.validate('json', schema.
|
|
566
|
+
OpenApi.validate('json', schema.InviteLinkTokenRequest, bodyValidation),
|
|
496
567
|
OpenApi.describeRoute({
|
|
497
568
|
operationId: 'resolveInviteLink',
|
|
498
569
|
responses: OpenApi.responses({
|
|
499
|
-
errors
|
|
570
|
+
errors: {
|
|
571
|
+
400: { codes: ['body_invalid'], description: 'Malformed API key or invalid body.' },
|
|
572
|
+
404: {
|
|
573
|
+
codes: ['invite_link_not_found'],
|
|
574
|
+
description: 'No active invite link was found.',
|
|
575
|
+
},
|
|
576
|
+
},
|
|
500
577
|
success: { description: 'Active link summary.', schema: schema.ResolveResponse },
|
|
501
578
|
}),
|
|
502
579
|
summary: 'Resolve invite link',
|
|
@@ -523,16 +600,20 @@ export function inviteLinks() {
|
|
|
523
600
|
.post(
|
|
524
601
|
'/v1/invite-links/accept',
|
|
525
602
|
Auth.policy({ session: true }),
|
|
526
|
-
OpenApi.validate('json', schema.
|
|
603
|
+
OpenApi.validate('json', schema.InviteLinkTokenRequest, bodyValidation),
|
|
527
604
|
OpenApi.describeRoute({
|
|
528
605
|
operationId: 'acceptInviteLink',
|
|
529
606
|
responses: OpenApi.responses({
|
|
530
607
|
errors: {
|
|
608
|
+
400: { codes: ['body_invalid'], description: 'Malformed API key or invalid body.' },
|
|
531
609
|
403: {
|
|
532
|
-
codes: ['
|
|
610
|
+
codes: ['invite_link_email_forbidden'],
|
|
533
611
|
description: 'A verified session email from an allowed domain is required.',
|
|
534
612
|
},
|
|
535
|
-
|
|
613
|
+
404: {
|
|
614
|
+
codes: ['invite_link_not_found'],
|
|
615
|
+
description: 'No active invite link was found.',
|
|
616
|
+
},
|
|
536
617
|
},
|
|
537
618
|
success: { description: 'Membership.', schema: schema.AcceptResponse },
|
|
538
619
|
}),
|