tapimo 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -5
- package/dist/ApiKey.d.ts +2 -2
- package/dist/ApiKey.d.ts.map +1 -1
- package/dist/ApiKey.js +2 -2
- package/dist/ApiKey.js.map +1 -1
- package/dist/ApiKeys.d.ts +85 -11
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +218 -56
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +12543 -13912
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +4 -5
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +12 -20
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +20 -36
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +871 -828
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +14 -26
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +93 -186
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +3 -5
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/audit-logs.d.ts +18 -18
- package/dist/admin/apps/audit-logs.js +1 -1
- package/dist/admin/apps/audit-logs.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +27 -27
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +11 -5
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts +17 -17
- package/dist/admin/apps/prop-amms.d.ts +4 -4
- package/dist/admin/apps/routes-support.js +1 -38
- package/dist/admin/apps/routes-support.js.map +1 -1
- package/dist/admin/apps/routes.d.ts +153 -153
- package/dist/admin/apps/sentinel.d.ts +4 -4
- package/dist/admin/apps/verified-tokens.d.ts +24 -24
- package/dist/admin/apps/zone-delegation-requests.d.ts +332 -0
- package/dist/admin/apps/zone-delegation-requests.d.ts.map +1 -0
- package/dist/admin/apps/zone-delegation-requests.js +200 -0
- package/dist/admin/apps/zone-delegation-requests.js.map +1 -0
- package/dist/admin/apps/zone-delegations.d.ts +512 -52
- package/dist/admin/apps/zone-delegations.d.ts.map +1 -1
- package/dist/admin/apps/zone-delegations.js +134 -44
- package/dist/admin/apps/zone-delegations.js.map +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.js.map +1 -1
- 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 +341 -397
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +4 -2
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/data/App.d.ts +11932 -13214
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +32 -13
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +1 -1
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -1
- package/dist/apps/data/ZoneSelection.js +2 -2
- package/dist/apps/data/ZoneSelection.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +60 -27
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +91 -16
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +893 -875
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +36 -36
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +3 -1
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +40 -40
- package/dist/apps/data/routes/blocks.d.ts.map +1 -1
- package/dist/apps/data/routes/blocks.js +3 -7
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +236 -236
- package/dist/apps/data/routes/earn-transactions.d.ts +14 -14
- package/dist/apps/data/routes/earn.d.ts +261 -1445
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +64 -490
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/exchanges.d.ts +144 -144
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +5 -15
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +3 -9
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +13 -13
- package/dist/apps/data/routes/receipts.d.ts +53 -53
- 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.d.ts +52 -0
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +19 -18
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +14 -14
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +1 -3
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +7 -5
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +281 -281
- package/dist/apps/data/routes/transactions.js +3 -3
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +12 -12
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +1 -3
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +30 -30
- package/dist/apps/data/routes/valuation.d.ts.map +1 -1
- package/dist/apps/data/routes/valuation.js +1 -3
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
- package/dist/apps/data/routes/webhooks.d.ts +102 -102
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +9 -23
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zone-deposits.d.ts +16 -16
- package/dist/apps/data/routes/zone-withdrawals.d.ts +31 -31
- package/dist/apps/data/routes/zones.d.ts +28 -28
- package/dist/apps/management/App.d.ts +18 -102
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/App.js +1 -1
- package/dist/apps/management/App.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +253 -339
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +25 -11
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +92 -92
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +5 -13
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/cli.d.ts.map +1 -1
- package/dist/apps/management/routes/cli.js +3 -9
- package/dist/apps/management/routes/cli.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +16 -16
- package/dist/apps/management/routes/fee-payer-usage.d.ts +38 -38
- package/dist/apps/management/routes/fee-payer-usage.d.ts.map +1 -1
- package/dist/apps/management/routes/fee-payer-usage.js +2 -4
- package/dist/apps/management/routes/fee-payer-usage.js.map +1 -1
- package/dist/apps/management/routes/invitations.d.ts +52 -52
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +4 -12
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +6 -14
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/me.d.ts.map +1 -1
- package/dist/apps/management/routes/me.js +3 -7
- package/dist/apps/management/routes/me.js.map +1 -1
- package/dist/apps/management/routes/members.d.ts +84 -84
- package/dist/apps/management/routes/members.d.ts.map +1 -1
- package/dist/apps/management/routes/members.js +2 -4
- package/dist/apps/management/routes/members.js.map +1 -1
- package/dist/apps/management/routes/orgs.d.ts +44 -44
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +2 -6
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts.map +1 -1
- package/dist/apps/management/routes/projects.js +2 -6
- package/dist/apps/management/routes/projects.js.map +1 -1
- package/dist/apps/management/routes/route-usage.d.ts +34 -34
- package/dist/apps/management/routes/route-usage.d.ts.map +1 -1
- package/dist/apps/management/routes/route-usage.js +2 -4
- package/dist/apps/management/routes/route-usage.js.map +1 -1
- package/dist/apps/management/routes/routes-access-requests.d.ts +120 -91
- package/dist/apps/management/routes/routes-access-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/routes-access-requests.js +49 -9
- package/dist/apps/management/routes/routes-access-requests.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +8 -16
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +39 -39
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.js +3 -7
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +2089 -2089
- package/dist/apps/management/routes/zone-delegations.d.ts +14 -17
- package/dist/apps/management/routes/zone-delegations.d.ts.map +1 -1
- package/dist/apps/management/routes/zone-delegations.js +1 -6
- package/dist/apps/management/routes/zone-delegations.js.map +1 -1
- package/dist/apps/mpp/App.d.ts +44 -44
- package/dist/apps/mpp/App.js +3 -3
- package/dist/apps/mpp/App.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.js +1 -1
- package/dist/apps/mpp/internal/Adapter.js.map +1 -1
- package/dist/apps/mpp/internal/Error.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Error.js +1 -0
- package/dist/apps/mpp/internal/Error.js.map +1 -1
- package/dist/apps/mpp/internal/Policy.d.ts +5 -1
- package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Policy.js +35 -13
- package/dist/apps/mpp/internal/Policy.js.map +1 -1
- package/dist/apps/relay/App.d.ts +2 -2
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +25 -16
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/routes/App.d.ts +311 -311
- package/dist/apps/routes/routes/deposit-addresses.d.ts +1099 -1099
- package/dist/apps/routes/routes/list.d.ts +74 -74
- package/dist/apps/routes/routes/transfers.d.ts +94 -94
- package/dist/cli/ApiKeys.d.ts +19 -26
- package/dist/cli/ApiKeys.d.ts.map +1 -1
- package/dist/db/Db.d.ts +3 -3
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +27 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +28 -62
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +18 -18
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/rewardRuns.d.ts +21 -0
- package/dist/db/tables/rewardRuns.d.ts.map +1 -1
- package/dist/db/tables/rewardRuns.js +19 -0
- package/dist/db/tables/rewardRuns.js.map +1 -1
- package/dist/db/tables/routesAccessRequests.d.ts +13 -0
- package/dist/db/tables/routesAccessRequests.d.ts.map +1 -1
- package/dist/db/tables/routesAccessRequests.js +12 -0
- package/dist/db/tables/routesAccessRequests.js.map +1 -1
- package/dist/db/tables/zoneDelegationRequests.d.ts +165 -0
- package/dist/db/tables/zoneDelegationRequests.d.ts.map +1 -0
- package/dist/db/tables/{zoneKeyRequests.js → zoneDelegationRequests.js} +43 -42
- package/dist/db/tables/zoneDelegationRequests.js.map +1 -0
- package/dist/db/tables/zoneDelegations.d.ts +11 -5
- package/dist/db/tables/zoneDelegations.d.ts.map +1 -1
- package/dist/db/tables/zoneDelegations.js +21 -3
- package/dist/db/tables/zoneDelegations.js.map +1 -1
- package/dist/handlers/internal/accounts.d.ts +7 -0
- package/dist/handlers/internal/accounts.d.ts.map +1 -0
- package/dist/handlers/internal/{multisig.js → accounts.js} +10 -10
- package/dist/handlers/internal/{multisig.js.map → accounts.js.map} +1 -1
- package/dist/handlers/internal/sponsorship.js +17 -17
- package/dist/handlers/internal/sponsorship.js.map +1 -1
- package/dist/handlers/relay.d.ts +6 -6
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +15 -15
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +4 -8
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/EarnRates.d.ts.map +1 -1
- package/dist/internal/EarnRates.js +1 -3
- package/dist/internal/EarnRates.js.map +1 -1
- package/dist/internal/EarnVaults.js +2 -2
- package/dist/internal/Log.d.ts +2 -4
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +0 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/Response.d.ts +1 -1
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +0 -3
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +11 -0
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +24 -1
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/ZoneAccess.d.ts +70 -35
- package/dist/internal/ZoneAccess.d.ts.map +1 -1
- package/dist/internal/ZoneAccess.js +312 -131
- package/dist/internal/ZoneAccess.js.map +1 -1
- package/dist/internal/ZoneDelegation.d.ts +7 -19
- package/dist/internal/ZoneDelegation.d.ts.map +1 -1
- package/dist/internal/ZoneDelegation.js +8 -29
- package/dist/internal/ZoneDelegation.js.map +1 -1
- package/dist/internal/{ZoneKeyApproval.d.ts → ZoneDelegationApproval.d.ts} +3 -5
- package/dist/internal/ZoneDelegationApproval.d.ts.map +1 -0
- package/dist/internal/ZoneDelegationApproval.js +16 -0
- package/dist/internal/ZoneDelegationApproval.js.map +1 -0
- package/dist/internal/ZoneKeyRewrite.d.ts +98 -0
- package/dist/internal/ZoneKeyRewrite.d.ts.map +1 -0
- package/dist/internal/ZoneKeyRewrite.js +151 -0
- package/dist/internal/ZoneKeyRewrite.js.map +1 -0
- package/dist/internal/rewards/Campaigns.d.ts +2 -0
- package/dist/internal/rewards/Campaigns.d.ts.map +1 -1
- package/dist/internal/rewards/Campaigns.js.map +1 -1
- package/dist/internal/rewards/Distributions.d.ts.map +1 -1
- package/dist/internal/rewards/Distributions.js +2 -6
- package/dist/internal/rewards/Distributions.js.map +1 -1
- package/dist/internal/rewards/Monitor.d.ts +4 -1
- package/dist/internal/rewards/Monitor.d.ts.map +1 -1
- package/dist/internal/rewards/Monitor.js +19 -2
- package/dist/internal/rewards/Monitor.js.map +1 -1
- package/dist/internal/rewards/Runner.d.ts.map +1 -1
- package/dist/internal/rewards/Runner.js +9 -1
- package/dist/internal/rewards/Runner.js.map +1 -1
- package/dist/internal/routes/Action.d.ts.map +1 -1
- package/dist/internal/routes/Action.js +2 -3
- package/dist/internal/routes/Action.js.map +1 -1
- package/dist/internal/routes/Deposit.d.ts.map +1 -1
- package/dist/internal/routes/Deposit.js +2 -6
- package/dist/internal/routes/Deposit.js.map +1 -1
- package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
- package/dist/internal/routes/DepositAddress.js +4 -10
- package/dist/internal/routes/DepositAddress.js.map +1 -1
- package/dist/internal/routes/Policy.d.ts.map +1 -1
- package/dist/internal/routes/Policy.js +2 -1
- package/dist/internal/routes/Policy.js.map +1 -1
- package/dist/internal/routes/Provider.js +8 -8
- package/dist/internal/routes/Provider.js.map +1 -1
- package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
- package/dist/internal/routes/Reconciliation.js +3 -2
- package/dist/internal/routes/Reconciliation.js.map +1 -1
- package/dist/internal/routes/Transfer.d.ts.map +1 -1
- package/dist/internal/routes/Transfer.js +4 -12
- package/dist/internal/routes/Transfer.js.map +1 -1
- package/dist/internal/routes/UniversalDepositAddress.d.ts.map +1 -1
- package/dist/internal/routes/UniversalDepositAddress.js +3 -6
- package/dist/internal/routes/UniversalDepositAddress.js.map +1 -1
- package/dist/internal/routes/providers/SquidOrder.d.ts.map +1 -1
- package/dist/internal/routes/providers/SquidOrder.js +3 -2
- package/dist/internal/routes/providers/SquidOrder.js.map +1 -1
- package/dist/internal/routes/providers/relay.d.ts.map +1 -1
- package/dist/internal/routes/providers/relay.js +4 -3
- package/dist/internal/routes/providers/relay.js.map +1 -1
- package/package.json +20 -5
- package/src/ApiKey.ts +2 -2
- package/src/ApiKeys.test.ts +284 -51
- package/src/ApiKeys.ts +297 -64
- package/src/App.ts +4 -5
- package/src/Client.test-d.ts +33 -126
- package/src/Scope.test.ts +26 -45
- package/src/Scope.ts +24 -37
- package/src/admin/App.test.ts +51 -4
- package/src/admin/App.ts +25 -33
- package/src/admin/Mcp.test.ts +2 -1
- package/src/admin/apps/api-keys.test.ts +90 -20
- package/src/admin/apps/api-keys.ts +5 -8
- package/src/admin/apps/audit-logs.ts +1 -1
- package/src/admin/apps/earn-vaults.test.ts +19 -19
- package/src/admin/apps/earn-vaults.ts +11 -5
- package/src/admin/apps/routes-support.test.ts +254 -3
- package/src/admin/apps/routes-support.ts +1 -44
- package/src/admin/apps/scopes.test.ts +3 -3
- package/src/admin/apps/zone-delegation-requests.test.ts +246 -0
- package/src/admin/apps/zone-delegation-requests.ts +240 -0
- package/src/admin/apps/zone-delegations.test.ts +218 -58
- package/src/admin/apps/zone-delegations.ts +146 -46
- package/src/admin/index.ts +1 -1
- package/src/admin/ui/src/components/ApiKeyForm.tsx +4 -3
- package/src/admin/ui/src/lib/config.ts +3 -3
- package/src/admin/ui/src/lib/query-client.ts +1 -1
- package/src/admin/ui/src/lib/review-queues.ts +10 -10
- package/src/admin/ui/src/lib/routes-setup.test.ts +1 -2
- package/src/admin/ui/src/lib/routes-setup.ts +3 -5
- package/src/admin/ui/src/lib/scopes.test.ts +3 -6
- package/src/admin/ui/src/lib/scopes.ts +2 -9
- package/src/admin/ui/src/lib/{zone-key-requests.ts → zone-delegation-requests.ts} +27 -31
- package/src/admin/ui/src/routeTree.gen.ts +17 -17
- package/src/admin/ui/src/routes/__root.tsx +1 -1
- package/src/admin/ui/src/routes/api-keys.tsx +2 -15
- package/src/admin/ui/src/routes/audit-logs.tsx +2 -2
- package/src/admin/ui/src/routes/index.tsx +11 -11
- package/src/admin/ui/src/routes/organizations.tsx +3 -1
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +3 -1
- package/src/admin/ui/src/routes/organizations_.$orgId_.setup.tsx +1 -3
- package/src/admin/ui/src/routes/{zone-key-requests.tsx → zone-delegation-requests.tsx} +228 -172
- package/src/admin/ui/vite.config.ts +14 -1
- package/src/admin/ui.generated.ts +412 -583
- package/src/analytics/tables/requestEvents.test.ts +13 -3
- package/src/analytics/tables/requestEvents.ts +4 -3
- package/src/apps/data/App.test.ts +72 -35
- package/src/apps/data/App.ts +29 -13
- package/src/apps/data/ZoneSelection.test.ts +53 -70
- package/src/apps/data/ZoneSelection.ts +2 -2
- package/src/apps/data/routes/activities.test.ts +140 -6
- package/src/apps/data/routes/activities.ts +124 -18
- package/src/apps/data/routes/balances.ts +5 -1
- package/src/apps/data/routes/blocks.ts +9 -13
- package/src/apps/data/routes/earn-transactions.local.test.ts +6 -1
- package/src/apps/data/routes/earn-transactions.test.ts +7 -3
- package/src/apps/data/routes/earn.bench.ts +0 -14
- package/src/apps/data/routes/earn.discovery.test.ts +4 -39
- package/src/apps/data/routes/earn.local.test.ts +27 -34
- package/src/apps/data/routes/earn.test.ts +172 -490
- package/src/apps/data/routes/earn.ts +103 -652
- package/src/apps/data/routes/exchanges.ts +20 -30
- package/src/apps/data/routes/fee-amm.ts +12 -18
- package/src/apps/data/routes/indexer.test.ts +14 -12
- package/src/apps/data/routes/receipts.ts +1 -1
- package/src/apps/data/routes/rpc.test.ts +23 -18
- package/src/apps/data/routes/rpc.ts +21 -21
- package/src/apps/data/routes/rpc.zone.test.ts +60 -6
- package/src/apps/data/routes/tokenlist.ts +4 -6
- package/src/apps/data/routes/tokens.test.ts +20 -0
- package/src/apps/data/routes/tokens.ts +10 -5
- package/src/apps/data/routes/transactions.ts +3 -3
- package/src/apps/data/routes/transfers.ts +4 -6
- package/src/apps/data/routes/valuation.test.ts +2 -4
- package/src/apps/data/routes/valuation.ts +4 -6
- package/src/apps/data/routes/webhooks.test.ts +1 -5
- package/src/apps/data/routes/webhooks.ts +30 -44
- package/src/apps/data/routes/zones.test.ts +35 -19
- package/src/apps/management/App.ts +3 -1
- package/src/apps/management/routes/api-keys.test.ts +112 -22
- package/src/apps/management/routes/api-keys.ts +30 -15
- package/src/apps/management/routes/billing.ts +17 -25
- package/src/apps/management/routes/cli.ts +12 -18
- package/src/apps/management/routes/fee-payer-usage.ts +5 -4
- package/src/apps/management/routes/invitations.ts +16 -21
- package/src/apps/management/routes/invite-links.ts +18 -26
- package/src/apps/management/routes/me.ts +9 -13
- package/src/apps/management/routes/members.ts +5 -7
- package/src/apps/management/routes/orgs.ts +8 -12
- package/src/apps/management/routes/projects.ts +8 -12
- package/src/apps/management/routes/route-usage.ts +5 -4
- package/src/apps/management/routes/routes-access-requests.test.ts +64 -2
- package/src/apps/management/routes/routes-access-requests.ts +99 -15
- package/src/apps/management/routes/scopes.test.ts +3 -3
- package/src/apps/management/routes/usage.ts +20 -28
- package/src/apps/management/routes/verified-token-requests.ts +9 -13
- package/src/apps/management/routes/zone-delegations.test.ts +3 -5
- package/src/apps/management/routes/zone-delegations.ts +4 -9
- package/src/apps/mpp/App.ts +3 -3
- package/src/apps/mpp/Mpp.zone.test.ts +49 -18
- package/src/apps/mpp/internal/Adapter.ts +1 -1
- package/src/apps/mpp/internal/Error.test.ts +3 -0
- package/src/apps/mpp/internal/Error.ts +1 -0
- package/src/apps/mpp/internal/Policy.test.ts +9 -8
- package/src/apps/mpp/internal/Policy.ts +37 -14
- package/src/apps/relay/App.sandbox.test.ts +15 -14
- package/src/apps/relay/App.test.ts +120 -61
- package/src/apps/relay/App.ts +28 -18
- package/src/apps/relay/App.zone-billing.test.ts +9 -4
- package/src/apps/routes/App.test.ts +21 -22
- package/src/db/Db.ts +34 -3
- package/src/db/Schema.ts +26 -26
- package/src/db/tables/rewardRuns.ts +39 -0
- package/src/db/tables/routesAccessRequests.test.ts +65 -0
- package/src/db/tables/routesAccessRequests.ts +25 -0
- package/src/db/tables/{zoneKeyRequests.test.ts → zoneDelegationRequests.test.ts} +36 -77
- package/src/db/tables/{zoneKeyRequests.ts → zoneDelegationRequests.ts} +69 -52
- package/src/db/tables/zoneDelegations.test.ts +5 -6
- package/src/db/tables/zoneDelegations.ts +25 -8
- package/src/handlers/internal/{multisig.store.test.ts → accounts.store.test.ts} +16 -16
- package/src/handlers/internal/{multisig.test.ts → accounts.test.ts} +85 -82
- package/src/handlers/internal/{multisig.ts → accounts.ts} +9 -9
- package/src/handlers/internal/sponsorship.ts +20 -20
- package/src/handlers/relay.test.ts +48 -46
- package/src/handlers/relay.ts +26 -26
- package/src/internal/Auth.test.ts +6 -2
- package/src/internal/Auth.ts +4 -10
- package/src/internal/EarnRates.ts +4 -6
- package/src/internal/EarnVaults.ts +2 -2
- package/src/internal/Log.test-d.ts +1 -0
- package/src/internal/Log.test.ts +4 -6
- package/src/internal/Log.ts +2 -6
- package/src/internal/Response.ts +0 -3
- package/src/internal/Schema.test.ts +42 -0
- package/src/internal/Schema.ts +36 -1
- package/src/internal/ZoneAccess.test.ts +515 -312
- package/src/internal/ZoneAccess.ts +410 -158
- package/src/internal/ZoneDelegation.test.ts +1 -41
- package/src/internal/ZoneDelegation.ts +10 -48
- package/src/internal/ZoneDelegationApproval.test.ts +22 -0
- package/src/internal/{ZoneKeyApproval.ts → ZoneDelegationApproval.ts} +4 -11
- package/src/internal/ZoneKeyRewrite.ts +231 -0
- package/src/internal/rewards/Campaigns.ts +2 -0
- package/src/internal/rewards/Distributions.ts +8 -12
- package/src/internal/rewards/Monitor.test.ts +64 -0
- package/src/internal/rewards/Monitor.ts +27 -4
- package/src/internal/rewards/Runner.ts +9 -1
- package/src/internal/routes/Action.ts +5 -6
- package/src/internal/routes/Deposit.ts +8 -12
- package/src/internal/routes/DepositAddress.ts +13 -19
- package/src/internal/routes/Policy.ts +2 -1
- package/src/internal/routes/Provider.ts +8 -8
- package/src/internal/routes/Reconciliation.ts +3 -2
- package/src/internal/routes/Transfer.ts +16 -24
- package/src/internal/routes/UniversalDepositAddress.ts +9 -12
- package/src/internal/routes/providers/SquidOrder.ts +3 -2
- package/src/internal/routes/providers/relay.ts +4 -3
- package/dist/admin/apps/zone-key-requests.d.ts +0 -406
- package/dist/admin/apps/zone-key-requests.d.ts.map +0 -1
- package/dist/admin/apps/zone-key-requests.js +0 -183
- package/dist/admin/apps/zone-key-requests.js.map +0 -1
- package/dist/db/tables/zoneKeyRequests.d.ts +0 -289
- package/dist/db/tables/zoneKeyRequests.d.ts.map +0 -1
- package/dist/db/tables/zoneKeyRequests.js.map +0 -1
- package/dist/handlers/internal/multisig.d.ts +0 -7
- package/dist/handlers/internal/multisig.d.ts.map +0 -1
- package/dist/internal/ZoneKeyApproval.d.ts.map +0 -1
- package/dist/internal/ZoneKeyApproval.js +0 -21
- package/dist/internal/ZoneKeyApproval.js.map +0 -1
- package/src/admin/apps/zone-key-requests.test.ts +0 -272
- package/src/admin/apps/zone-key-requests.ts +0 -231
- package/src/internal/ZoneKeyApproval.test.ts +0 -46
|
@@ -88,18 +88,14 @@ export namespace schema {
|
|
|
88
88
|
),
|
|
89
89
|
period: z
|
|
90
90
|
.object({
|
|
91
|
-
end:
|
|
92
|
-
.
|
|
93
|
-
.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
),
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
.check(
|
|
100
|
-
z.describe('Inclusive start of this line’s service period.'),
|
|
101
|
-
z.meta({ examples: ['2026-09-04T00:00:00.000Z'] }),
|
|
102
|
-
),
|
|
91
|
+
end: Schema.dateTime().check(
|
|
92
|
+
z.describe('Inclusive end of this line’s service period.'),
|
|
93
|
+
z.meta({ examples: ['2026-10-04T00:00:00.000Z'] }),
|
|
94
|
+
),
|
|
95
|
+
start: Schema.dateTime().check(
|
|
96
|
+
z.describe('Inclusive start of this line’s service period.'),
|
|
97
|
+
z.meta({ examples: ['2026-09-04T00:00:00.000Z'] }),
|
|
98
|
+
),
|
|
103
99
|
})
|
|
104
100
|
.check(
|
|
105
101
|
z.describe('Service dates for this invoice line, as reported by Stripe.'),
|
|
@@ -178,12 +174,10 @@ export namespace schema {
|
|
|
178
174
|
],
|
|
179
175
|
}),
|
|
180
176
|
),
|
|
181
|
-
retrievedAt:
|
|
182
|
-
.
|
|
183
|
-
.
|
|
184
|
-
|
|
185
|
-
z.meta({ examples: ['2026-09-05T00:00:00.000Z'] }),
|
|
186
|
-
),
|
|
177
|
+
retrievedAt: Schema.dateTime().check(
|
|
178
|
+
z.describe('Time the estimate was read, not a meter aggregation watermark.'),
|
|
179
|
+
z.meta({ examples: ['2026-09-05T00:00:00.000Z'] }),
|
|
180
|
+
),
|
|
187
181
|
startingBalance: Amount.check(
|
|
188
182
|
z.describe('Customer balance before this invoice; negative amounts are credit.'),
|
|
189
183
|
),
|
|
@@ -351,7 +345,7 @@ export namespace schema {
|
|
|
351
345
|
),
|
|
352
346
|
z.meta({ examples: [{ amount: '0.50', currency: 'usd' }] }),
|
|
353
347
|
),
|
|
354
|
-
updatedAt: z.optional(
|
|
348
|
+
updatedAt: z.optional(Schema.dateTime()).check(
|
|
355
349
|
z.describe('When the billing status last changed (ISO 8601); absent before first checkout.'), // prettier-ignore
|
|
356
350
|
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
357
351
|
),
|
|
@@ -400,12 +394,10 @@ export namespace schema {
|
|
|
400
394
|
z.describe('Card details; present when `type` is `card`.'),
|
|
401
395
|
z.meta({ examples: [{ brand: 'visa', expMonth: 12, expYear: 2030, last4: '4242' }] }),
|
|
402
396
|
),
|
|
403
|
-
createdAt:
|
|
404
|
-
.
|
|
405
|
-
.
|
|
406
|
-
|
|
407
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
408
|
-
),
|
|
397
|
+
createdAt: Schema.dateTime().check(
|
|
398
|
+
z.describe('When the method was attached (ISO 8601).'),
|
|
399
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
400
|
+
),
|
|
409
401
|
default: z
|
|
410
402
|
.boolean()
|
|
411
403
|
.check(z.describe('Whether invoices charge this method.'), z.meta({ examples: [true] })),
|
|
@@ -28,12 +28,10 @@ export namespace schema {
|
|
|
28
28
|
z.describe('Code shown in both the terminal and the console to match the request.'),
|
|
29
29
|
z.meta({ examples: ['BCDF-GHJK'] }),
|
|
30
30
|
)
|
|
31
|
-
const expiresAt =
|
|
32
|
-
.
|
|
33
|
-
.
|
|
34
|
-
|
|
35
|
-
z.meta({ examples: ['2026-01-01T00:10:00.000Z'] }),
|
|
36
|
-
)
|
|
31
|
+
const expiresAt = Schema.dateTime().check(
|
|
32
|
+
z.describe('When the pending sign-in expires (ISO 8601).'),
|
|
33
|
+
z.meta({ examples: ['2026-01-01T00:10:00.000Z'] }),
|
|
34
|
+
)
|
|
37
35
|
const device = z
|
|
38
36
|
.string()
|
|
39
37
|
.check(
|
|
@@ -99,12 +97,10 @@ export namespace schema {
|
|
|
99
97
|
.object({ device: z.optional(device), name: z.optional(name) })
|
|
100
98
|
.check(z.describe('CLI details reported when the sign-in started.')),
|
|
101
99
|
code,
|
|
102
|
-
createdAt:
|
|
103
|
-
.
|
|
104
|
-
.
|
|
105
|
-
|
|
106
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
107
|
-
),
|
|
100
|
+
createdAt: Schema.dateTime().check(
|
|
101
|
+
z.describe('When the sign-in started (ISO 8601).'),
|
|
102
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
103
|
+
),
|
|
108
104
|
expiresAt,
|
|
109
105
|
ip: z.optional(
|
|
110
106
|
z
|
|
@@ -155,12 +151,10 @@ export namespace schema {
|
|
|
155
151
|
z.object({ status: z.literal('pending') }),
|
|
156
152
|
z.object({ status: z.literal('denied') }),
|
|
157
153
|
z.object({
|
|
158
|
-
expiresAt:
|
|
159
|
-
.
|
|
160
|
-
.
|
|
161
|
-
|
|
162
|
-
z.meta({ examples: ['2026-01-31T00:00:00.000Z'] }),
|
|
163
|
-
),
|
|
154
|
+
expiresAt: Schema.dateTime().check(
|
|
155
|
+
z.describe('When the CLI session expires (ISO 8601).'),
|
|
156
|
+
z.meta({ examples: ['2026-01-31T00:00:00.000Z'] }),
|
|
157
|
+
),
|
|
164
158
|
scopes: z
|
|
165
159
|
.array(z.string())
|
|
166
160
|
.check(
|
|
@@ -12,9 +12,10 @@ import type * as App from '../App.js'
|
|
|
12
12
|
|
|
13
13
|
/** Console Fee Payer usage contracts. */
|
|
14
14
|
export namespace schema {
|
|
15
|
-
const timestamp =
|
|
16
|
-
.
|
|
17
|
-
|
|
15
|
+
const timestamp = Schema.dateTime().check(
|
|
16
|
+
z.describe('ISO 8601 timestamp.'),
|
|
17
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
18
|
+
)
|
|
18
19
|
const amount = z
|
|
19
20
|
.string()
|
|
20
21
|
.check(
|
|
@@ -105,7 +106,7 @@ export namespace schema {
|
|
|
105
106
|
z.meta({ examples: [42] }),
|
|
106
107
|
),
|
|
107
108
|
date: z
|
|
108
|
-
.union([z.iso.date(),
|
|
109
|
+
.union([z.iso.date(), Schema.dateTime()])
|
|
109
110
|
.check(
|
|
110
111
|
z.describe(
|
|
111
112
|
'UTC bucket start: date for daily buckets, timestamp for hourly buckets.',
|
|
@@ -33,24 +33,18 @@ export namespace schema {
|
|
|
33
33
|
export const Invitation = OpenApi.component(
|
|
34
34
|
Schema.describe(
|
|
35
35
|
z.object({
|
|
36
|
-
createdAt:
|
|
37
|
-
.
|
|
38
|
-
.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
),
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
expiresAt: z.iso
|
|
49
|
-
.datetime()
|
|
50
|
-
.check(
|
|
51
|
-
z.describe('When the invitation expires (ISO 8601).'),
|
|
52
|
-
z.meta({ examples: ['2026-01-08T00:00:00.000Z'] }),
|
|
53
|
-
),
|
|
36
|
+
createdAt: Schema.dateTime().check(
|
|
37
|
+
z.describe('When the invitation was created (ISO 8601).'),
|
|
38
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
39
|
+
),
|
|
40
|
+
email: Schema.Email.check(
|
|
41
|
+
z.describe('Invitee email (lowercase).'),
|
|
42
|
+
z.meta({ examples: ['dev@example.com'] }),
|
|
43
|
+
),
|
|
44
|
+
expiresAt: Schema.dateTime().check(
|
|
45
|
+
z.describe('When the invitation expires (ISO 8601).'),
|
|
46
|
+
z.meta({ examples: ['2026-01-08T00:00:00.000Z'] }),
|
|
47
|
+
),
|
|
54
48
|
id: z
|
|
55
49
|
.string()
|
|
56
50
|
.check(
|
|
@@ -122,9 +116,10 @@ export namespace schema {
|
|
|
122
116
|
export const CreateInvitationRequest = OpenApi.component(
|
|
123
117
|
z
|
|
124
118
|
.object({
|
|
125
|
-
email:
|
|
126
|
-
.email
|
|
127
|
-
|
|
119
|
+
email: Schema.Email.check(
|
|
120
|
+
z.describe('Invitee email.'),
|
|
121
|
+
z.meta({ examples: ['dev@example.com'] }),
|
|
122
|
+
),
|
|
128
123
|
role,
|
|
129
124
|
})
|
|
130
125
|
.check(z.describe('Fields for creating an invitation.')),
|
|
@@ -39,7 +39,7 @@ export namespace schema {
|
|
|
39
39
|
z.meta({ examples: [['example.org'], null] }),
|
|
40
40
|
)
|
|
41
41
|
const nullableExpiry = z
|
|
42
|
-
.nullable(
|
|
42
|
+
.nullable(Schema.dateTime({ offset: true }))
|
|
43
43
|
.check(
|
|
44
44
|
z.describe('When the link expires (ISO 8601), or null for no expiry.'),
|
|
45
45
|
z.meta({ examples: ['2026-01-08T00:00:00.000Z', null] }),
|
|
@@ -59,12 +59,10 @@ export namespace schema {
|
|
|
59
59
|
Schema.describe(
|
|
60
60
|
z.object({
|
|
61
61
|
allowedEmailDomains,
|
|
62
|
-
createdAt:
|
|
63
|
-
.
|
|
64
|
-
.
|
|
65
|
-
|
|
66
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
67
|
-
),
|
|
62
|
+
createdAt: Schema.dateTime().check(
|
|
63
|
+
z.describe('When the link was created (ISO 8601).'),
|
|
64
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
65
|
+
),
|
|
68
66
|
createdBy: z
|
|
69
67
|
.string()
|
|
70
68
|
.check(
|
|
@@ -82,7 +80,7 @@ export namespace schema {
|
|
|
82
80
|
z.meta({ examples: ['iln_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
83
81
|
),
|
|
84
82
|
lastUsedAt: z
|
|
85
|
-
.nullable(
|
|
83
|
+
.nullable(Schema.dateTime())
|
|
86
84
|
.check(
|
|
87
85
|
z.describe('When the link last created a membership, or null.'),
|
|
88
86
|
z.meta({ examples: ['2026-01-02T00:00:00.000Z', null] }),
|
|
@@ -107,12 +105,10 @@ export namespace schema {
|
|
|
107
105
|
z.describe('Opaque bearer token embedded in the recipient URL (`lnk_…`).'),
|
|
108
106
|
z.meta({ examples: ['lnk_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
109
107
|
),
|
|
110
|
-
updatedAt:
|
|
111
|
-
.
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
115
|
-
),
|
|
108
|
+
updatedAt: Schema.dateTime().check(
|
|
109
|
+
z.describe('When the link was last changed (ISO 8601).'),
|
|
110
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
111
|
+
),
|
|
116
112
|
useCount: z
|
|
117
113
|
.number()
|
|
118
114
|
.check(
|
|
@@ -131,18 +127,14 @@ export namespace schema {
|
|
|
131
127
|
export const Redemption = OpenApi.component(
|
|
132
128
|
Schema.describe(
|
|
133
129
|
z.object({
|
|
134
|
-
createdAt:
|
|
135
|
-
.
|
|
136
|
-
.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
),
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
.check(
|
|
143
|
-
z.describe('Verified email used for redemption.'),
|
|
144
|
-
z.meta({ examples: ['dev@example.com'] }),
|
|
145
|
-
),
|
|
130
|
+
createdAt: Schema.dateTime().check(
|
|
131
|
+
z.describe('When the membership was created (ISO 8601).'),
|
|
132
|
+
z.meta({ examples: ['2026-01-02T00:00:00.000Z'] }),
|
|
133
|
+
),
|
|
134
|
+
email: Schema.Email.check(
|
|
135
|
+
z.describe('Verified email used for redemption.'),
|
|
136
|
+
z.meta({ examples: ['dev@example.com'] }),
|
|
137
|
+
),
|
|
146
138
|
id: z
|
|
147
139
|
.string()
|
|
148
140
|
.check(
|
|
@@ -22,14 +22,12 @@ export namespace schema {
|
|
|
22
22
|
z.describe('Wallet address bound to this user, when wallet sign-in established it.'),
|
|
23
23
|
z.meta({ examples: ['0x0000000000000000000000000000000000000001'] }),
|
|
24
24
|
),
|
|
25
|
-
createdAt:
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
|
|
29
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
30
|
-
),
|
|
25
|
+
createdAt: Schema.dateTime().check(
|
|
26
|
+
z.describe('When the user was created (ISO 8601).'),
|
|
27
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
28
|
+
),
|
|
31
29
|
email: z
|
|
32
|
-
.optional(
|
|
30
|
+
.optional(Schema.Email)
|
|
33
31
|
.check(
|
|
34
32
|
z.describe('Verified email bound to this user, when present.'),
|
|
35
33
|
z.meta({ examples: ['dev@example.com'] }),
|
|
@@ -40,12 +38,10 @@ export namespace schema {
|
|
|
40
38
|
z.describe('Opaque user id (`usr_…`).'),
|
|
41
39
|
z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
42
40
|
),
|
|
43
|
-
updatedAt:
|
|
44
|
-
.
|
|
45
|
-
.
|
|
46
|
-
|
|
47
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
48
|
-
),
|
|
41
|
+
updatedAt: Schema.dateTime().check(
|
|
42
|
+
z.describe('When the user was last updated (ISO 8601).'),
|
|
43
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
44
|
+
),
|
|
49
45
|
}),
|
|
50
46
|
'The signed-in developer.',
|
|
51
47
|
),
|
|
@@ -27,14 +27,12 @@ export namespace schema {
|
|
|
27
27
|
z.describe("The member's wallet address, when wallet sign-in established it."),
|
|
28
28
|
z.meta({ examples: ['0x20f414b3cbcf1fd8e8f5e1c1c2e3d4a5b6c7d8e9'] }),
|
|
29
29
|
),
|
|
30
|
-
createdAt:
|
|
31
|
-
.
|
|
32
|
-
.
|
|
33
|
-
|
|
34
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
35
|
-
),
|
|
30
|
+
createdAt: Schema.dateTime().check(
|
|
31
|
+
z.describe('When the member joined (ISO 8601).'),
|
|
32
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
33
|
+
),
|
|
36
34
|
email: z
|
|
37
|
-
.optional(
|
|
35
|
+
.optional(Schema.Email)
|
|
38
36
|
.check(
|
|
39
37
|
z.describe("The member's verified email, when known."),
|
|
40
38
|
z.meta({ examples: ['dev@example.com'] }),
|
|
@@ -34,12 +34,10 @@ export namespace schema {
|
|
|
34
34
|
export const Organization = OpenApi.component(
|
|
35
35
|
Schema.describe(
|
|
36
36
|
z.object({
|
|
37
|
-
createdAt:
|
|
38
|
-
.
|
|
39
|
-
.
|
|
40
|
-
|
|
41
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
42
|
-
),
|
|
37
|
+
createdAt: Schema.dateTime().check(
|
|
38
|
+
z.describe('When the organization was created (ISO 8601).'),
|
|
39
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
40
|
+
),
|
|
43
41
|
id: z
|
|
44
42
|
.string()
|
|
45
43
|
.check(
|
|
@@ -58,12 +56,10 @@ export namespace schema {
|
|
|
58
56
|
z.describe("The caller's role; absent for API keys and the super admin."),
|
|
59
57
|
z.meta({ examples: ['owner'] }),
|
|
60
58
|
),
|
|
61
|
-
updatedAt:
|
|
62
|
-
.
|
|
63
|
-
.
|
|
64
|
-
|
|
65
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
66
|
-
),
|
|
59
|
+
updatedAt: Schema.dateTime().check(
|
|
60
|
+
z.describe('When the organization was last updated (ISO 8601).'),
|
|
61
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
62
|
+
),
|
|
67
63
|
}),
|
|
68
64
|
'An organization: the top-level tenant that owns API keys.',
|
|
69
65
|
),
|
|
@@ -28,12 +28,10 @@ export namespace schema {
|
|
|
28
28
|
export const Project = OpenApi.component(
|
|
29
29
|
Schema.describe(
|
|
30
30
|
z.object({
|
|
31
|
-
createdAt:
|
|
32
|
-
.
|
|
33
|
-
.
|
|
34
|
-
|
|
35
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
36
|
-
),
|
|
31
|
+
createdAt: Schema.dateTime().check(
|
|
32
|
+
z.describe('When the project was created (ISO 8601).'),
|
|
33
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
34
|
+
),
|
|
37
35
|
environments: z.array(z.enum(environments)).check(
|
|
38
36
|
z.describe('Environments available to this project: sandbox (testnet) and production (mainnet).'), // prettier-ignore
|
|
39
37
|
z.meta({ examples: [[...environments]] }),
|
|
@@ -53,12 +51,10 @@ export namespace schema {
|
|
|
53
51
|
z.describe('Owning organization id (`org_…`).'),
|
|
54
52
|
z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
55
53
|
),
|
|
56
|
-
updatedAt:
|
|
57
|
-
.
|
|
58
|
-
.
|
|
59
|
-
|
|
60
|
-
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
61
|
-
),
|
|
54
|
+
updatedAt: Schema.dateTime().check(
|
|
55
|
+
z.describe('When the project was last updated (ISO 8601).'),
|
|
56
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
57
|
+
),
|
|
62
58
|
}),
|
|
63
59
|
'A project: an app or integration within an organization.',
|
|
64
60
|
),
|
|
@@ -14,9 +14,10 @@ import type * as App from '../App.js'
|
|
|
14
14
|
|
|
15
15
|
/** Contracts for session-owned Routes activity reads. */
|
|
16
16
|
export namespace schema {
|
|
17
|
-
const timestamp =
|
|
18
|
-
.
|
|
19
|
-
|
|
17
|
+
const timestamp = Schema.dateTime().check(
|
|
18
|
+
z.describe('ISO 8601 timestamp.'),
|
|
19
|
+
z.meta({ examples: ['2026-01-01T00:00:00.000Z'] }),
|
|
20
|
+
)
|
|
20
21
|
const volume = z
|
|
21
22
|
.string()
|
|
22
23
|
.check(
|
|
@@ -95,7 +96,7 @@ export namespace schema {
|
|
|
95
96
|
.array(
|
|
96
97
|
z.object({
|
|
97
98
|
date: z
|
|
98
|
-
.union([z.iso.date(),
|
|
99
|
+
.union([z.iso.date(), Schema.dateTime()])
|
|
99
100
|
.check(
|
|
100
101
|
z.describe(
|
|
101
102
|
'UTC bucket start: date for daily buckets, timestamp for hourly buckets.',
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
|
|
2
2
|
|
|
3
3
|
import * as TestApp from '../../../../test/App.js'
|
|
4
|
+
import * as TestRoutes from '../../../../test/Routes.js'
|
|
4
5
|
import * as ApiKeys from '../../../ApiKeys.js'
|
|
5
6
|
import * as RoutesAccessRequests from '../../../db/tables/routesAccessRequests.js'
|
|
6
7
|
import * as Orgs from './orgs.js'
|
|
@@ -26,10 +27,15 @@ function request(method: 'DELETE' | 'GET' | 'POST', cookie: string, body?: unkno
|
|
|
26
27
|
}
|
|
27
28
|
|
|
28
29
|
/** Creates an app, an owner session, an organization, a project, and one live key. */
|
|
29
|
-
async function setup() {
|
|
30
|
+
async function setup(options: setup.Options = {}) {
|
|
30
31
|
const db = TestApp.database()
|
|
31
32
|
const kv = { store: TestApp.kvStore() }
|
|
32
|
-
const app = TestApp.create({
|
|
33
|
+
const app = TestApp.create({
|
|
34
|
+
db,
|
|
35
|
+
kv,
|
|
36
|
+
...(options.notify ? { routesAccessRequests: { notify: options.notify } } : {}),
|
|
37
|
+
session: { wallet: { origin } },
|
|
38
|
+
})
|
|
33
39
|
const { cookie } = await TestApp.signIn(app, privateKeyToAccount(generatePrivateKey()))
|
|
34
40
|
if (!cookie) throw new Error('Sign-in did not establish a session')
|
|
35
41
|
const org = await TestApp.json(
|
|
@@ -49,6 +55,13 @@ async function setup() {
|
|
|
49
55
|
return { app, cookie, db, key, kv, org, path, project }
|
|
50
56
|
}
|
|
51
57
|
|
|
58
|
+
declare namespace setup {
|
|
59
|
+
type Options = {
|
|
60
|
+
/** Reviewer notifier handed to the management group. */
|
|
61
|
+
notify?: Requests.routesAccessRequests.Options['notify']
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
52
65
|
test('publishes the request operations', async () => {
|
|
53
66
|
const { app } = await setup()
|
|
54
67
|
const spec = await (await app.request('/openapi.json')).json()
|
|
@@ -122,6 +135,55 @@ test('creates, lists, and cancels a pending request', async () => {
|
|
|
122
135
|
expect(empty.data).toEqual([])
|
|
123
136
|
})
|
|
124
137
|
|
|
138
|
+
test('notifies reviewers of a new request without waiting on them', async () => {
|
|
139
|
+
const notices: Requests.routesAccessRequests.Notice[] = []
|
|
140
|
+
const { app, cookie, db, key, path } = await setup({
|
|
141
|
+
notify: async (notice) => {
|
|
142
|
+
notices.push(notice)
|
|
143
|
+
},
|
|
144
|
+
})
|
|
145
|
+
await TestRoutes.publish(db)
|
|
146
|
+
const created = await app.request(
|
|
147
|
+
path,
|
|
148
|
+
request('POST', cookie, {
|
|
149
|
+
expectedVolume: '$50k per month',
|
|
150
|
+
keyIds: [key.id],
|
|
151
|
+
note: 'Payouts to merchants.',
|
|
152
|
+
routes: [route],
|
|
153
|
+
subsidy: true,
|
|
154
|
+
}),
|
|
155
|
+
)
|
|
156
|
+
expect(created.status).toBe(200)
|
|
157
|
+
await vi.waitFor(() => expect(notices).toHaveLength(1))
|
|
158
|
+
expect(notices[0]).toMatchInlineSnapshot(`
|
|
159
|
+
{
|
|
160
|
+
"environment": "production",
|
|
161
|
+
"expectedVolume": "$50k per month",
|
|
162
|
+
"keyCount": 1,
|
|
163
|
+
"note": "Payouts to merchants.",
|
|
164
|
+
"organization": "Acme",
|
|
165
|
+
"project": "Checkout",
|
|
166
|
+
"routes": [
|
|
167
|
+
"USDC on Base → OUSD on Tempo",
|
|
168
|
+
],
|
|
169
|
+
"subsidy": true,
|
|
170
|
+
}
|
|
171
|
+
`)
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
test('keeps the request when the notifier fails', async () => {
|
|
175
|
+
const { app, cookie, key, path } = await setup({
|
|
176
|
+
notify: () => Promise.reject(new Error('Slack is down')),
|
|
177
|
+
})
|
|
178
|
+
const created = await app.request(
|
|
179
|
+
path,
|
|
180
|
+
request('POST', cookie, { keyIds: [key.id], routes: [], subsidy: false }),
|
|
181
|
+
)
|
|
182
|
+
expect(created.status).toBe(200)
|
|
183
|
+
const listed = await app.request(path, request('GET', cookie))
|
|
184
|
+
expect((await listed.json()).data).toHaveLength(1)
|
|
185
|
+
})
|
|
186
|
+
|
|
125
187
|
test('rejects keys outside the project and environment', async () => {
|
|
126
188
|
const { app, cookie, kv, org, path } = await setup()
|
|
127
189
|
const { record: sandbox } = await ApiKeys.mint(kv.store, {
|