tapimo 0.14.0 → 0.15.1
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 +7 -4
- package/dist/ApiKey.js +1 -1
- package/dist/ApiKey.js.map +1 -1
- package/dist/ApiKeys.d.ts +95 -14
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +360 -49
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +12466 -10374
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +300 -22
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +2 -1
- package/dist/Assets.js.map +1 -1
- package/dist/Handler.d.ts +0 -1
- package/dist/Handler.d.ts.map +1 -1
- package/dist/Handler.js +0 -1
- package/dist/Handler.js.map +1 -1
- package/dist/Scope.d.ts +13 -5
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +16 -5
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.js +1 -1
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +3057 -546
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +26 -5
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +179 -27
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +95 -43
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +1398 -0
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +463 -7
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts +267 -15
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +241 -25
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/routes-support.d.ts +95 -0
- package/dist/admin/apps/routes-support.d.ts.map +1 -0
- package/dist/admin/apps/routes-support.js +151 -0
- package/dist/admin/apps/routes-support.js.map +1 -0
- package/dist/admin/apps/routes.d.ts +2764 -0
- package/dist/admin/apps/routes.d.ts.map +1 -0
- package/dist/admin/apps/routes.js +728 -0
- package/dist/admin/apps/routes.js.map +1 -0
- package/dist/admin/apps/subsidies.d.ts +501 -0
- package/dist/admin/apps/subsidies.d.ts.map +1 -0
- package/dist/admin/apps/subsidies.js +384 -0
- package/dist/admin/apps/subsidies.js.map +1 -0
- package/dist/admin/apps/verified-tokens.d.ts +166 -160
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.js +27 -7
- package/dist/admin/apps/verified-tokens.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 +201 -149
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts +5 -2
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +31 -1
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +2 -1
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +10 -1
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/analytics/tables/routesLifecycleIntervals.d.ts +72 -0
- package/dist/analytics/tables/routesLifecycleIntervals.d.ts.map +1 -0
- package/dist/analytics/tables/routesLifecycleIntervals.js +56 -0
- package/dist/analytics/tables/routesLifecycleIntervals.js.map +1 -0
- package/dist/apps/Zones.d.ts +21 -12526
- package/dist/apps/Zones.d.ts.map +1 -1
- package/dist/apps/Zones.js +37 -5
- package/dist/apps/Zones.js.map +1 -1
- package/dist/apps/data/App.d.ts +3971 -2595
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +76 -21
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +629 -299
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +495 -190
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +72 -0
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +116 -116
- package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
- package/dist/apps/data/routes/coingecko.js +47 -21
- package/dist/apps/data/routes/coingecko.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +1450 -337
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +1226 -144
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +113 -108
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +41 -21
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +142 -17
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +83 -27
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +235 -235
- package/dist/apps/data/routes/rpc.d.ts +507 -33
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +309 -165
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +47 -15
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +68 -11
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +2 -0
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +26 -14
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +93 -77
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +9 -7
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +32 -32
- package/dist/apps/data/routes/verified-tokens.d.ts +88 -88
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +64 -20
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +614 -177
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +308 -205
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +31 -31
- package/dist/apps/data/routes/zones.d.ts.map +1 -1
- package/dist/apps/data/routes/zones.js +20 -12
- package/dist/apps/data/routes/zones.js.map +1 -1
- package/dist/apps/docs/reference.js +2 -2
- package/dist/apps/docs/reference.js.map +1 -1
- package/dist/apps/index.d.ts +1 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +1 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/management/App.d.ts +3780 -3402
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/App.js +5 -14
- package/dist/apps/management/App.js.map +1 -1
- package/dist/apps/management/Billing.d.ts +48 -7
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +204 -25
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +317 -215
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +43 -15
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +290 -4
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +274 -49
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +6 -6
- package/dist/apps/management/routes/faucet.js +1 -1
- package/dist/apps/management/routes/faucet.js.map +1 -1
- package/dist/apps/management/routes/invitations.d.ts +213 -138
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +117 -13
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +166 -166
- package/dist/apps/management/routes/me.d.ts.map +1 -1
- package/dist/apps/management/routes/me.js +6 -2
- package/dist/apps/management/routes/me.js.map +1 -1
- package/dist/apps/management/routes/members.d.ts +30 -30
- package/dist/apps/management/routes/orgs.d.ts +103 -87
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +52 -12
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +125 -125
- package/dist/apps/management/routes/projects.d.ts.map +1 -1
- package/dist/apps/management/routes/projects.js +6 -1
- 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 +4 -1
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +24 -24
- package/dist/apps/management/routes/usage.js +21 -4
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +95 -95
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.js +7 -9
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +682 -616
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +58 -12
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mcp.d.ts +1 -1
- package/dist/apps/mcp.d.ts.map +1 -1
- package/dist/apps/mcp.js +23 -10
- package/dist/apps/mcp.js.map +1 -1
- package/dist/apps/mpp/App.d.ts +44 -44
- package/dist/apps/mpp/App.d.ts.map +1 -1
- package/dist/apps/mpp/App.js +35 -7
- package/dist/apps/mpp/App.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +2 -0
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Adapter.js +30 -1
- package/dist/apps/mpp/internal/Adapter.js.map +1 -1
- package/dist/apps/mpp/internal/Policy.d.ts +22 -4
- package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Policy.js +24 -6
- package/dist/apps/mpp/internal/Policy.js.map +1 -1
- package/dist/apps/mpp/internal/Sponsorship.d.ts +3 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Sponsorship.js +6 -3
- package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
- package/dist/apps/relay/App.d.ts +2 -0
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +134 -75
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/relay/Sponsorships.d.ts +5 -3
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +209 -28
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/apps/{funding → routes}/Access.d.ts +4 -4
- package/dist/apps/routes/Access.d.ts.map +1 -0
- package/dist/apps/{funding → routes}/Access.js +4 -4
- package/dist/apps/routes/Access.js.map +1 -0
- package/dist/apps/{funding → routes}/App.d.ts +418 -124
- package/dist/apps/{funding → routes}/App.d.ts.map +1 -1
- package/dist/apps/{funding → routes}/App.js +16 -16
- package/dist/apps/routes/App.js.map +1 -0
- package/dist/apps/routes/Inventory.d.ts.map +1 -0
- package/dist/apps/{funding → routes}/Inventory.js +2 -2
- package/dist/apps/routes/Inventory.js.map +1 -0
- package/dist/apps/routes/index.d.ts +2 -0
- package/dist/apps/routes/index.d.ts.map +1 -0
- package/dist/apps/routes/index.js +2 -0
- package/dist/apps/routes/index.js.map +1 -0
- package/dist/apps/{funding → routes}/routes/chains.d.ts +32 -32
- package/dist/apps/routes/routes/chains.d.ts.map +1 -0
- package/dist/apps/{funding → routes}/routes/chains.js +25 -25
- package/dist/apps/routes/routes/chains.js.map +1 -0
- package/dist/apps/{funding → routes}/routes/deposit-addresses.d.ts +107 -43
- package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -0
- package/dist/apps/{funding → routes}/routes/deposit-addresses.js +497 -222
- package/dist/apps/routes/routes/deposit-addresses.js.map +1 -0
- package/dist/apps/{funding → routes}/routes/providers.d.ts +8 -8
- package/dist/apps/routes/routes/providers.d.ts.map +1 -0
- package/dist/apps/routes/routes/providers.js +57 -0
- package/dist/apps/routes/routes/providers.js.map +1 -0
- package/dist/apps/{funding → routes}/routes/quotes.d.ts +106 -103
- package/dist/apps/routes/routes/quotes.d.ts.map +1 -0
- package/dist/apps/{funding → routes}/routes/quotes.js +55 -38
- package/dist/apps/routes/routes/quotes.js.map +1 -0
- package/dist/apps/{funding → routes}/routes/transfers.d.ts +733 -428
- package/dist/apps/routes/routes/transfers.d.ts.map +1 -0
- package/dist/apps/routes/routes/transfers.js +1140 -0
- package/dist/apps/routes/routes/transfers.js.map +1 -0
- package/dist/cli/Cli.d.ts +30 -0
- package/dist/cli/Cli.d.ts.map +1 -1
- package/dist/cli/commands/admin.d.ts +36 -0
- package/dist/cli/commands/admin.d.ts.map +1 -1
- package/dist/cli/commands/admin.js +273 -0
- package/dist/cli/commands/admin.js.map +1 -1
- package/dist/cloudflare.d.ts +16 -14
- package/dist/cloudflare.d.ts.map +1 -1
- package/dist/cloudflare.js +26 -21
- package/dist/cloudflare.js.map +1 -1
- package/dist/db/Db.d.ts +63 -21
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +1035 -15
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +780 -133
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +575 -162
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts +4 -0
- package/dist/db/tables/apiKeyAdmissionBootstraps.d.ts.map +1 -0
- package/dist/db/tables/apiKeyAdmissionBootstraps.js +2 -0
- package/dist/db/tables/apiKeyAdmissionBootstraps.js.map +1 -0
- package/dist/db/tables/apiKeyAdmissions.d.ts +73 -0
- package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -0
- package/dist/db/tables/apiKeyAdmissions.js +142 -0
- package/dist/db/tables/apiKeyAdmissions.js.map +1 -0
- package/dist/db/tables/apiKeyOwnerAdmissions.d.ts +4 -0
- package/dist/db/tables/apiKeyOwnerAdmissions.d.ts.map +1 -0
- package/dist/db/tables/apiKeyOwnerAdmissions.js +2 -0
- package/dist/db/tables/apiKeyOwnerAdmissions.js.map +1 -0
- package/dist/db/tables/apiKeyOwnerTombstones.d.ts +20 -0
- package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -0
- package/dist/db/tables/apiKeyOwnerTombstones.js +57 -0
- package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -0
- package/dist/db/tables/apiKeyRevocations.d.ts +21 -0
- package/dist/db/tables/apiKeyRevocations.d.ts.map +1 -0
- package/dist/db/tables/apiKeyRevocations.js +98 -0
- package/dist/db/tables/apiKeyRevocations.js.map +1 -0
- package/dist/db/tables/authAccounts.d.ts +47 -0
- package/dist/db/tables/authAccounts.d.ts.map +1 -0
- package/dist/db/tables/authAccounts.js +72 -0
- package/dist/db/tables/authAccounts.js.map +1 -0
- package/dist/db/tables/authSessions.d.ts +12 -0
- package/dist/db/tables/authSessions.d.ts.map +1 -0
- package/dist/db/tables/authSessions.js +2 -0
- package/dist/db/tables/authSessions.js.map +1 -0
- package/dist/db/tables/authVerifications.d.ts +12 -0
- package/dist/db/tables/authVerifications.d.ts.map +1 -0
- package/dist/db/tables/authVerifications.js +2 -0
- package/dist/db/tables/authVerifications.js.map +1 -0
- package/dist/db/tables/invitations.d.ts +17 -1
- package/dist/db/tables/invitations.d.ts.map +1 -1
- package/dist/db/tables/invitations.js +123 -43
- package/dist/db/tables/invitations.js.map +1 -1
- package/dist/db/tables/memberships.d.ts +8 -0
- package/dist/db/tables/memberships.d.ts.map +1 -1
- package/dist/db/tables/memberships.js +51 -2
- package/dist/db/tables/memberships.js.map +1 -1
- package/dist/db/tables/organizations.d.ts +32 -10
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +110 -49
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/projects.d.ts +2 -0
- package/dist/db/tables/projects.d.ts.map +1 -1
- package/dist/db/tables/projects.js +12 -3
- package/dist/db/tables/projects.js.map +1 -1
- package/dist/db/tables/requestUsage.d.ts.map +1 -1
- package/dist/db/tables/requestUsage.js.map +1 -1
- package/dist/db/tables/rewardAccounts.d.ts +86 -0
- package/dist/db/tables/rewardAccounts.d.ts.map +1 -0
- package/dist/db/tables/rewardAccounts.js +88 -0
- package/dist/db/tables/rewardAccounts.js.map +1 -0
- package/dist/db/tables/rewardCampaignDistributors.d.ts +36 -0
- package/dist/db/tables/rewardCampaignDistributors.d.ts.map +1 -0
- package/dist/db/tables/rewardCampaignDistributors.js +30 -0
- package/dist/db/tables/rewardCampaignDistributors.js.map +1 -0
- package/dist/db/tables/rewardCampaigns.d.ts +171 -0
- package/dist/db/tables/rewardCampaigns.d.ts.map +1 -0
- package/dist/db/tables/rewardCampaigns.js +392 -0
- package/dist/db/tables/rewardCampaigns.js.map +1 -0
- package/dist/db/tables/rewardCredits.d.ts +53 -0
- package/dist/db/tables/rewardCredits.d.ts.map +1 -0
- package/dist/db/tables/rewardCredits.js +63 -0
- package/dist/db/tables/rewardCredits.js.map +1 -0
- package/dist/db/tables/rewardEligibilityAssociations.d.ts +61 -0
- package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -0
- package/dist/db/tables/rewardEligibilityAssociations.js +103 -0
- package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -0
- package/dist/db/tables/rewardRuns.d.ts +188 -0
- package/dist/db/tables/rewardRuns.d.ts.map +1 -0
- package/dist/db/tables/rewardRuns.js +278 -0
- package/dist/db/tables/rewardRuns.js.map +1 -0
- package/dist/db/tables/rewardTransactionAttempts.d.ts +100 -0
- package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -0
- package/dist/db/tables/rewardTransactionAttempts.js +163 -0
- package/dist/db/tables/rewardTransactionAttempts.js.map +1 -0
- package/dist/db/tables/routesCatalog.d.ts +58 -0
- package/dist/db/tables/routesCatalog.d.ts.map +1 -0
- package/dist/db/tables/{fundingCatalog.js → routesCatalog.js} +19 -19
- package/dist/db/tables/routesCatalog.js.map +1 -0
- package/dist/db/tables/routesDepositAddresses.d.ts +476 -0
- package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -0
- package/dist/db/tables/routesDepositAddresses.js +587 -0
- package/dist/db/tables/routesDepositAddresses.js.map +1 -0
- package/dist/db/tables/{fundingDepositRequestObservations.d.ts → routesDepositRequestObservations.d.ts} +6 -6
- package/dist/db/tables/routesDepositRequestObservations.d.ts.map +1 -0
- package/dist/db/tables/{fundingDepositRequestObservations.js → routesDepositRequestObservations.js} +6 -6
- package/dist/db/tables/routesDepositRequestObservations.js.map +1 -0
- package/dist/db/tables/{fundingDeposits.d.ts → routesDeposits.d.ts} +210 -22
- package/dist/db/tables/routesDeposits.d.ts.map +1 -0
- package/dist/db/tables/routesDeposits.js +576 -0
- package/dist/db/tables/routesDeposits.js.map +1 -0
- package/dist/db/tables/routesIdempotency.d.ts +166 -0
- package/dist/db/tables/routesIdempotency.d.ts.map +1 -0
- package/dist/db/tables/routesIdempotency.js +330 -0
- package/dist/db/tables/routesIdempotency.js.map +1 -0
- package/dist/db/tables/routesSubsidies.d.ts +27 -0
- package/dist/db/tables/routesSubsidies.d.ts.map +1 -0
- package/dist/db/tables/routesSubsidies.js +45 -0
- package/dist/db/tables/routesSubsidies.js.map +1 -0
- package/dist/db/tables/{fundingTransferEvents.d.ts → routesTransferEvents.d.ts} +3 -3
- package/dist/db/tables/routesTransferEvents.d.ts.map +1 -0
- package/dist/db/tables/{fundingTransferEvents.js → routesTransferEvents.js} +3 -3
- package/dist/db/tables/routesTransferEvents.js.map +1 -0
- package/dist/db/tables/routesTransferSubsidies.d.ts +19 -0
- package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -0
- package/dist/db/tables/routesTransferSubsidies.js +17 -0
- package/dist/db/tables/routesTransferSubsidies.js.map +1 -0
- package/dist/db/tables/routesTransferSubsidyNonces.d.ts +51 -0
- package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -0
- package/dist/db/tables/routesTransferSubsidyNonces.js +82 -0
- package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -0
- package/dist/db/tables/routesTransferTransactions.d.ts +77 -0
- package/dist/db/tables/routesTransferTransactions.d.ts.map +1 -0
- package/dist/db/tables/{fundingTransferTransactions.js → routesTransferTransactions.js} +31 -13
- package/dist/db/tables/routesTransferTransactions.js.map +1 -0
- package/dist/db/tables/routesTransfers.d.ts +319 -0
- package/dist/db/tables/routesTransfers.d.ts.map +1 -0
- package/dist/db/tables/routesTransfers.js +372 -0
- package/dist/db/tables/routesTransfers.js.map +1 -0
- package/dist/db/tables/sponsoredTransactions.d.ts +75 -20
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +124 -54
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/sponsorshipAttributions.d.ts +69 -0
- package/dist/db/tables/sponsorshipAttributions.d.ts.map +1 -0
- package/dist/db/tables/sponsorshipAttributions.js +77 -0
- package/dist/db/tables/sponsorshipAttributions.js.map +1 -0
- package/dist/db/tables/sponsorshipReconciliationCursors.d.ts +22 -0
- package/dist/db/tables/sponsorshipReconciliationCursors.d.ts.map +1 -0
- package/dist/db/tables/sponsorshipReconciliationCursors.js +45 -0
- package/dist/db/tables/sponsorshipReconciliationCursors.js.map +1 -0
- package/dist/db/tables/stripeCustomers.d.ts +11 -0
- package/dist/db/tables/stripeCustomers.d.ts.map +1 -1
- package/dist/db/tables/stripeCustomers.js +13 -0
- package/dist/db/tables/stripeCustomers.js.map +1 -1
- package/dist/db/tables/users.d.ts +17 -1
- package/dist/db/tables/users.d.ts.map +1 -1
- package/dist/db/tables/users.js +47 -2
- package/dist/db/tables/users.js.map +1 -1
- package/dist/db/tables/verifiedTokenRequests.d.ts +21 -4
- package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -1
- package/dist/db/tables/verifiedTokenRequests.js +65 -44
- package/dist/db/tables/verifiedTokenRequests.js.map +1 -1
- package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
- package/dist/db/tables/webhookQueueEvents.js +5 -1
- package/dist/db/tables/webhookQueueEvents.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +19 -11
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +45 -13
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/internal/executionError.d.ts +2 -2
- package/dist/handlers/internal/executionError.d.ts.map +1 -1
- package/dist/handlers/internal/executionError.js +1 -2
- package/dist/handlers/internal/executionError.js.map +1 -1
- package/dist/handlers/internal/multisig.d.ts +4 -232
- package/dist/handlers/internal/multisig.d.ts.map +1 -1
- package/dist/handlers/internal/multisig.js +11 -537
- package/dist/handlers/internal/multisig.js.map +1 -1
- package/dist/handlers/internal/sponsorship.d.ts +19 -8
- package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
- package/dist/handlers/internal/sponsorship.js +13 -9
- package/dist/handlers/internal/sponsorship.js.map +1 -1
- package/dist/handlers/relay.d.ts +9 -12
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +81 -85
- package/dist/handlers/relay.js.map +1 -1
- package/dist/index.d.ts +0 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -17
- package/dist/index.js.map +1 -1
- package/dist/internal/AssetResponse.d.ts +12 -0
- package/dist/internal/AssetResponse.d.ts.map +1 -0
- package/dist/internal/AssetResponse.js +21 -0
- package/dist/internal/AssetResponse.js.map +1 -0
- package/dist/internal/Auth.d.ts +64 -12
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +631 -180
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/BetterAuth.d.ts +1488 -0
- package/dist/internal/BetterAuth.d.ts.map +1 -0
- package/dist/internal/BetterAuth.js +253 -0
- package/dist/internal/BetterAuth.js.map +1 -0
- package/dist/internal/Cache.d.ts +2 -0
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +2 -0
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/EarnRates.d.ts +26 -3
- package/dist/internal/EarnRates.d.ts.map +1 -1
- package/dist/internal/EarnRates.js +84 -19
- package/dist/internal/EarnRates.js.map +1 -1
- package/dist/internal/EarnSharePrices.d.ts +120 -0
- package/dist/internal/EarnSharePrices.d.ts.map +1 -0
- package/dist/internal/EarnSharePrices.js +179 -0
- package/dist/internal/EarnSharePrices.js.map +1 -0
- package/dist/internal/EarnVaults.d.ts +4 -0
- package/dist/internal/EarnVaults.d.ts.map +1 -1
- package/dist/internal/EarnVaults.js +27 -10
- package/dist/internal/EarnVaults.js.map +1 -1
- package/dist/internal/Email.d.ts +37 -0
- package/dist/internal/Email.d.ts.map +1 -0
- package/dist/internal/Email.js +16 -0
- package/dist/internal/Email.js.map +1 -0
- package/dist/internal/Log.d.ts +32 -28
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +18 -11
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts +3 -0
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +67 -8
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/Mpp.d.ts.map +1 -1
- package/dist/internal/Mpp.js +20 -25
- package/dist/internal/Mpp.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +26 -3
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +25 -10
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Provider.d.ts +1 -1
- package/dist/internal/Provider.d.ts.map +1 -1
- package/dist/internal/RateLimit.d.ts.map +1 -1
- package/dist/internal/RateLimit.js +13 -1
- package/dist/internal/RateLimit.js.map +1 -1
- package/dist/internal/Store.d.ts +16 -0
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +59 -8
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +9 -2
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +78 -11
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Timing.d.ts +26 -0
- package/dist/internal/Timing.d.ts.map +1 -1
- package/dist/internal/Timing.js +63 -5
- package/dist/internal/Timing.js.map +1 -1
- package/dist/internal/VercelOidc.d.ts +94 -0
- package/dist/internal/VercelOidc.d.ts.map +1 -0
- package/dist/internal/VercelOidc.js +128 -0
- package/dist/internal/VercelOidc.js.map +1 -0
- package/dist/internal/VerifiedTokens.d.ts +2 -8
- package/dist/internal/VerifiedTokens.d.ts.map +1 -1
- package/dist/internal/VerifiedTokens.js +24 -24
- package/dist/internal/VerifiedTokens.js.map +1 -1
- package/dist/internal/Viem.d.ts +30 -2067
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +167 -17
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +12 -4
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +9 -3
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/ZoneRpc.d.ts +7 -0
- package/dist/internal/ZoneRpc.d.ts.map +1 -0
- package/dist/internal/ZoneRpc.js +49 -0
- package/dist/internal/ZoneRpc.js.map +1 -0
- package/dist/internal/index.d.ts +3 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +3 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/rewards/Audit.d.ts +88 -0
- package/dist/internal/rewards/Audit.d.ts.map +1 -0
- package/dist/internal/rewards/Audit.js +134 -0
- package/dist/internal/rewards/Audit.js.map +1 -0
- package/dist/internal/rewards/Campaigns.d.ts +572 -0
- package/dist/internal/rewards/Campaigns.d.ts.map +1 -0
- package/dist/internal/rewards/Campaigns.js +531 -0
- package/dist/internal/rewards/Campaigns.js.map +1 -0
- package/dist/internal/rewards/Credits.d.ts +76 -0
- package/dist/internal/rewards/Credits.d.ts.map +1 -0
- package/dist/internal/rewards/Credits.js +95 -0
- package/dist/internal/rewards/Credits.js.map +1 -0
- package/dist/internal/rewards/Events.d.ts +100 -0
- package/dist/internal/rewards/Events.d.ts.map +1 -0
- package/dist/internal/rewards/Events.js +340 -0
- package/dist/internal/rewards/Events.js.map +1 -0
- package/dist/internal/rewards/Projection.d.ts +237 -0
- package/dist/internal/rewards/Projection.d.ts.map +1 -0
- package/dist/internal/rewards/Projection.js +616 -0
- package/dist/internal/rewards/Projection.js.map +1 -0
- package/dist/internal/rewards/Rates.d.ts +44 -0
- package/dist/internal/rewards/Rates.d.ts.map +1 -0
- package/dist/internal/rewards/Rates.js +60 -0
- package/dist/internal/rewards/Rates.js.map +1 -0
- package/dist/internal/rewards/Read.d.ts +158 -0
- package/dist/internal/rewards/Read.d.ts.map +1 -0
- package/dist/internal/rewards/Read.js +292 -0
- package/dist/internal/rewards/Read.js.map +1 -0
- package/dist/internal/rewards/Runner.d.ts +164 -0
- package/dist/internal/rewards/Runner.d.ts.map +1 -0
- package/dist/internal/rewards/Runner.js +1778 -0
- package/dist/internal/rewards/Runner.js.map +1 -0
- package/dist/internal/rewards/Signer.d.ts +224 -0
- package/dist/internal/rewards/Signer.d.ts.map +1 -0
- package/dist/internal/rewards/Signer.js +135 -0
- package/dist/internal/rewards/Signer.js.map +1 -0
- package/dist/internal/rewards/index.d.ts +15 -0
- package/dist/internal/rewards/index.d.ts.map +1 -0
- package/dist/internal/rewards/index.js +15 -0
- package/dist/internal/rewards/index.js.map +1 -0
- package/dist/internal/{funding → routes}/Action.d.ts +12 -1
- package/dist/internal/routes/Action.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Action.js +17 -9
- package/dist/internal/routes/Action.js.map +1 -0
- package/dist/internal/{funding → routes}/Catalog.d.ts +20 -20
- package/dist/internal/routes/Catalog.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Catalog.js +29 -29
- package/dist/internal/routes/Catalog.js.map +1 -0
- package/dist/internal/{funding → routes}/Chain.d.ts +10 -10
- package/dist/internal/routes/Chain.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Chain.js +3 -3
- package/dist/internal/routes/Chain.js.map +1 -0
- package/dist/internal/{funding → routes}/Deposit.d.ts +45 -23
- package/dist/internal/routes/Deposit.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Deposit.js +60 -27
- package/dist/internal/routes/Deposit.js.map +1 -0
- package/dist/internal/{funding → routes}/DepositAddress.d.ts +56 -27
- package/dist/internal/routes/DepositAddress.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/DepositAddress.js +95 -33
- package/dist/internal/routes/DepositAddress.js.map +1 -0
- package/dist/internal/{funding → routes}/DepositWebhook.d.ts +4 -4
- package/dist/internal/routes/DepositWebhook.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/DepositWebhook.js +4 -4
- package/dist/internal/routes/DepositWebhook.js.map +1 -0
- package/dist/internal/routes/Economics.d.ts +25 -0
- package/dist/internal/routes/Economics.d.ts.map +1 -0
- package/dist/internal/routes/Economics.js +28 -0
- package/dist/internal/routes/Economics.js.map +1 -0
- package/dist/internal/{funding → routes}/Evidence.d.ts +3 -3
- package/dist/internal/routes/Evidence.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Evidence.js +7 -7
- package/dist/internal/routes/Evidence.js.map +1 -0
- package/dist/internal/routes/Observability.d.ts +154 -0
- package/dist/internal/routes/Observability.d.ts.map +1 -0
- package/dist/internal/routes/Observability.js +389 -0
- package/dist/internal/routes/Observability.js.map +1 -0
- package/dist/internal/{funding → routes}/Provider.d.ts +311 -105
- package/dist/internal/routes/Provider.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Provider.js +229 -98
- package/dist/internal/routes/Provider.js.map +1 -0
- package/dist/internal/{funding → routes}/Reconciliation.d.ts +11 -6
- package/dist/internal/routes/Reconciliation.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Reconciliation.js +408 -158
- package/dist/internal/routes/Reconciliation.js.map +1 -0
- package/dist/internal/routes/Route.d.ts +21 -0
- package/dist/internal/routes/Route.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Route.js +1 -1
- package/dist/internal/routes/Route.js.map +1 -0
- package/dist/internal/{funding → routes}/SourceObservation.d.ts +6 -6
- package/dist/internal/routes/SourceObservation.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/SourceObservation.js +8 -8
- package/dist/internal/routes/SourceObservation.js.map +1 -0
- package/dist/internal/{funding → routes}/Subsidy.d.ts +48 -3
- package/dist/internal/routes/Subsidy.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Subsidy.js +43 -3
- package/dist/internal/routes/Subsidy.js.map +1 -0
- package/dist/internal/{funding → routes}/Token.d.ts +4 -4
- package/dist/internal/routes/Token.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/Token.js +3 -3
- package/dist/internal/routes/Token.js.map +1 -0
- package/dist/internal/{funding → routes}/Transfer.d.ts +241 -46
- package/dist/internal/routes/Transfer.d.ts.map +1 -0
- package/dist/internal/routes/Transfer.js +728 -0
- package/dist/internal/routes/Transfer.js.map +1 -0
- package/dist/internal/{funding → routes}/TransferReconciliation.d.ts +13 -10
- package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -0
- package/dist/internal/routes/TransferReconciliation.js +422 -0
- package/dist/internal/routes/TransferReconciliation.js.map +1 -0
- package/dist/internal/routes/TransferSubsidy.d.ts +201 -0
- package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -0
- package/dist/internal/routes/TransferSubsidy.js +256 -0
- package/dist/internal/routes/TransferSubsidy.js.map +1 -0
- package/dist/internal/{funding → routes}/TransferWebhook.d.ts +5 -5
- package/dist/internal/routes/TransferWebhook.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/TransferWebhook.js +3 -3
- package/dist/internal/routes/TransferWebhook.js.map +1 -0
- package/dist/internal/{funding → routes}/index.d.ts +2 -0
- package/dist/internal/routes/index.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/index.js +2 -0
- package/dist/internal/routes/index.js.map +1 -0
- package/dist/internal/{funding → routes}/providers/across.d.ts +4 -4
- package/dist/internal/routes/providers/across.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/providers/across.js +13 -13
- package/dist/internal/routes/providers/across.js.map +1 -0
- package/dist/internal/{funding → routes}/providers/relay.d.ts +21 -12
- package/dist/internal/routes/providers/relay.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/providers/relay.js +194 -110
- package/dist/internal/routes/providers/relay.js.map +1 -0
- package/dist/internal/{funding → routes}/providers/rhino.d.ts +4 -4
- package/dist/internal/routes/providers/rhino.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/providers/rhino.js +10 -10
- package/dist/internal/routes/providers/rhino.js.map +1 -0
- package/dist/internal/{funding → routes}/providers/squid.d.ts +4 -4
- package/dist/internal/routes/providers/squid.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/providers/squid.js +14 -14
- package/dist/internal/routes/providers/squid.js.map +1 -0
- package/dist/internal/{funding → routes}/providers/stargate.d.ts +46 -18
- package/dist/internal/routes/providers/stargate.d.ts.map +1 -0
- package/dist/internal/routes/providers/stargate.js +898 -0
- package/dist/internal/routes/providers/stargate.js.map +1 -0
- package/dist/internal/{funding → routes}/providers/symbiosis.d.ts +4 -4
- package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -0
- package/dist/internal/{funding → routes}/providers/symbiosis.js +30 -20
- package/dist/internal/routes/providers/symbiosis.js.map +1 -0
- package/dist/internal/webhookDestinations/slack.js +12 -12
- package/dist/internal/webhookDestinations/slack.js.map +1 -1
- package/dist/providers/index.d.ts +12 -12
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +12 -12
- package/dist/providers/index.js.map +1 -1
- package/dist/server.d.ts +19 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +19 -0
- package/dist/server.js.map +1 -0
- package/package.json +15 -4
- package/src/ApiKey.ts +1 -1
- package/src/ApiKeys.test.ts +1033 -3
- package/src/ApiKeys.ts +489 -48
- package/src/App.test-d.ts +1 -1
- package/src/App.test.ts +216 -25
- package/src/App.ts +334 -31
- package/src/Assets.test.ts +2 -2
- package/src/Assets.ts +3 -1
- package/src/Auth.test-d.ts +1 -1
- package/src/Client.test-d.ts +539 -110
- package/src/Handler.ts +0 -1
- package/src/OpenApi.contract.test.ts +195 -0
- package/src/Scope.ts +17 -5
- package/src/Webhooks.ts +1 -1
- package/src/admin/App.test.ts +30 -2
- package/src/admin/App.ts +42 -6
- package/src/admin/apps/api-keys.test.ts +267 -5
- package/src/admin/apps/api-keys.ts +100 -50
- package/src/admin/apps/earn-vaults.test.ts +158 -0
- package/src/admin/apps/earn-vaults.ts +679 -6
- package/src/admin/apps/organizations.test.ts +306 -17
- package/src/admin/apps/organizations.ts +299 -24
- package/src/admin/apps/routes-support.test.ts +200 -0
- package/src/admin/apps/routes-support.ts +201 -0
- package/src/admin/apps/routes.test.ts +450 -0
- package/src/admin/apps/routes.ts +896 -0
- package/src/admin/apps/scopes.test.ts +15 -5
- package/src/admin/apps/subsidies.test.ts +306 -0
- package/src/admin/apps/subsidies.ts +457 -0
- package/src/admin/apps/verified-tokens.test.ts +40 -3
- package/src/admin/apps/verified-tokens.ts +33 -7
- package/src/admin/ui/plugin.ts +1 -2
- package/src/admin/ui/src/components/RewardCampaignForm.tsx +1009 -0
- package/src/admin/ui/src/lib/config.ts +11 -2
- package/src/admin/ui/src/lib/earn-vaults.ts +2 -2
- package/src/admin/ui/src/lib/organizations.test.ts +83 -50
- package/src/admin/ui/src/lib/organizations.ts +106 -25
- package/src/admin/ui/src/lib/query-client.ts +1 -1
- package/src/admin/ui/src/lib/reward-campaigns.ts +136 -0
- package/src/admin/ui/src/lib/routes.test.ts +88 -0
- package/src/admin/ui/src/lib/routes.ts +304 -0
- package/src/admin/ui/src/lib/subsidies.ts +75 -0
- package/src/admin/ui/src/lib/verified-tokens.ts +24 -9
- package/src/admin/ui/src/routeTree.gen.ts +63 -0
- package/src/admin/ui/src/routes/__root.tsx +13 -2
- package/src/admin/ui/src/routes/api-keys.tsx +196 -84
- package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +105 -70
- package/src/admin/ui/src/routes/organizations.tsx +34 -4
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +239 -23
- package/src/admin/ui/src/routes/routes.tsx +1615 -0
- package/src/admin/ui/src/routes/routes_.support.tsx +248 -0
- package/src/admin/ui/src/routes/subsidies.tsx +799 -0
- package/src/admin/ui/src/routes/verified-tokens.tsx +64 -20
- package/src/admin/ui.generated.ts +202 -188
- package/src/analytics/Analytics.test.ts +108 -18
- package/src/analytics/Analytics.ts +38 -6
- package/src/analytics/tables/requestEvents.test.ts +100 -0
- package/src/analytics/tables/requestEvents.ts +10 -1
- package/src/analytics/tables/routesLifecycleIntervals.ts +140 -0
- package/src/apps/Zones.test.ts +15 -0
- package/src/apps/Zones.ts +52 -5
- package/src/apps/composition.test.ts +68 -60
- package/src/apps/data/App.test.ts +180 -2
- package/src/apps/data/App.ts +88 -28
- package/src/apps/data/routes/activities.test.ts +419 -7
- package/src/apps/data/routes/activities.ts +683 -216
- package/src/apps/data/routes/balances.test.ts +2 -2
- package/src/apps/data/routes/blocks.test.ts +46 -1
- package/src/apps/data/routes/coingecko.test.ts +419 -1
- package/src/apps/data/routes/coingecko.ts +309 -253
- package/src/apps/data/routes/earn.discovery.test.ts +274 -0
- package/src/apps/data/routes/earn.test.ts +1294 -17
- package/src/apps/data/routes/earn.ts +1838 -321
- package/src/apps/data/routes/exchanges.test.ts +12 -15
- package/src/apps/data/routes/fee-amm.test.ts +243 -0
- package/src/apps/data/routes/fee-amm.ts +201 -162
- package/src/apps/data/routes/indexer.test.ts +389 -0
- package/src/apps/data/routes/indexer.ts +165 -69
- package/src/apps/data/routes/receipts.test.ts +1 -1
- package/src/apps/data/routes/rpc.test.ts +384 -8
- package/src/apps/data/routes/rpc.ts +452 -227
- package/src/apps/data/routes/rpc.zone.test.ts +340 -0
- package/src/apps/data/routes/tokenlist.test.ts +285 -0
- package/src/apps/data/routes/tokenlist.ts +173 -88
- package/src/apps/data/routes/tokens.test.ts +93 -3
- package/src/apps/data/routes/tokens.ts +39 -23
- package/src/apps/data/routes/transactions.test.ts +1 -1
- package/src/apps/data/routes/transfers.test.ts +56 -24
- package/src/apps/data/routes/transfers.ts +19 -8
- package/src/apps/data/routes/valuation.test.ts +1 -1
- package/src/apps/data/routes/verified-tokens.test.ts +345 -0
- package/src/apps/data/routes/verified-tokens.ts +99 -29
- package/src/apps/data/routes/webhooks.scan.test.ts +29 -0
- package/src/apps/data/routes/webhooks.test.ts +651 -83
- package/src/apps/data/routes/webhooks.ts +1113 -868
- package/src/apps/data/routes/zones.test.ts +148 -71
- package/src/apps/data/routes/zones.ts +71 -55
- package/src/apps/docs/reference.ts +2 -2
- package/src/apps/index.ts +1 -1
- package/src/apps/management/App.ts +9 -51
- package/src/apps/management/Billing.test.ts +375 -14
- package/src/apps/management/Billing.ts +265 -29
- package/src/apps/management/routes/api-keys.test.ts +269 -7
- package/src/apps/management/routes/api-keys.ts +61 -20
- package/src/apps/management/routes/billing.test.ts +477 -15
- package/src/apps/management/routes/billing.ts +377 -50
- package/src/apps/management/routes/faucet.test.ts +1 -1
- package/src/apps/management/routes/faucet.ts +1 -1
- package/src/apps/management/routes/invitations.test.ts +270 -3
- package/src/apps/management/routes/invitations.ts +185 -15
- package/src/apps/management/routes/invoicePreview.test.ts +549 -0
- package/src/apps/management/routes/me.test.ts +246 -5
- package/src/apps/management/routes/me.ts +7 -2
- package/src/apps/management/routes/members.test.ts +108 -0
- package/src/apps/management/routes/orgs.test.ts +191 -3
- package/src/apps/management/routes/orgs.ts +58 -11
- package/src/apps/management/routes/projects.test.ts +33 -3
- package/src/apps/management/routes/projects.ts +6 -1
- package/src/apps/management/routes/scopes.test.ts +30 -2
- package/src/apps/management/routes/scopes.ts +4 -1
- package/src/apps/management/routes/usage.test.ts +32 -0
- package/src/apps/management/routes/usage.ts +22 -4
- package/src/apps/management/routes/verified-token-requests.test.ts +16 -2
- package/src/apps/management/routes/verified-token-requests.ts +7 -10
- package/src/apps/management/routes/webhooks.test.ts +49 -26
- package/src/apps/management/routes/webhooks.ts +78 -22
- package/src/apps/mcp.test.ts +113 -30
- package/src/apps/mcp.ts +22 -10
- package/src/apps/mpp/App.ts +37 -7
- package/src/apps/mpp/Mpp.test.ts +49 -8
- package/src/apps/mpp/Mpp.zone.test.ts +219 -0
- package/src/apps/mpp/internal/Adapter.ts +34 -0
- package/src/apps/mpp/internal/Policy.test.ts +86 -31
- package/src/apps/mpp/internal/Policy.ts +49 -7
- package/src/apps/mpp/internal/Sponsorship.test.ts +207 -0
- package/src/apps/mpp/internal/Sponsorship.ts +9 -3
- package/src/apps/relay/App.test.ts +839 -64
- package/src/apps/relay/App.ts +148 -81
- package/src/apps/relay/App.zone-billing.test.ts +257 -0
- package/src/apps/relay/Sponsorships.test.ts +67 -4
- package/src/apps/relay/Sponsorships.ts +233 -32
- package/src/apps/relay/Sponsorships.zone.test.ts +102 -0
- package/src/apps/{funding → routes}/Access.ts +6 -6
- package/src/apps/routes/App.test.ts +165 -0
- package/src/apps/routes/App.ts +96 -0
- package/src/apps/{funding → routes}/Inventory.ts +2 -2
- package/src/apps/routes/index.ts +1 -0
- package/src/apps/{funding → routes}/routes/chains.test.ts +66 -66
- package/src/apps/{funding → routes}/routes/chains.ts +23 -23
- package/src/apps/{funding → routes}/routes/deposit-addresses.test.ts +1358 -458
- package/src/apps/{funding → routes}/routes/deposit-addresses.ts +566 -246
- package/src/apps/{funding → routes}/routes/providers.test.ts +27 -33
- package/src/apps/{funding → routes}/routes/providers.ts +23 -23
- package/src/apps/{funding → routes}/routes/quotes.test.ts +298 -41
- package/src/apps/{funding → routes}/routes/quotes.ts +57 -40
- package/src/apps/{funding → routes}/routes/transfers.test.ts +1100 -353
- package/src/apps/routes/routes/transfers.ts +1332 -0
- package/src/cli/Cli.test.ts +1 -1
- package/src/cli/commands/admin.test.ts +748 -1
- package/src/cli/commands/admin.ts +278 -0
- package/src/cloudflare.ts +52 -47
- package/src/db/Db.test.ts +245 -2
- package/src/db/Db.ts +1485 -34
- package/src/db/Schema.ts +729 -228
- package/src/db/tables/apiKeyAdmissionBootstraps.ts +4 -0
- package/src/db/tables/apiKeyAdmissions.ts +218 -0
- package/src/db/tables/apiKeyOwnerAdmissions.ts +4 -0
- package/src/db/tables/apiKeyOwnerTombstones.ts +81 -0
- package/src/db/tables/apiKeyRevocations.test.ts +74 -0
- package/src/db/tables/apiKeyRevocations.ts +121 -0
- package/src/db/tables/authAccounts.ts +105 -0
- package/src/db/tables/authSessions.ts +13 -0
- package/src/db/tables/authVerifications.ts +13 -0
- package/src/db/tables/invitations.ts +142 -45
- package/src/db/tables/memberships.ts +79 -3
- package/src/db/tables/organizations.test.ts +690 -13
- package/src/db/tables/organizations.ts +139 -55
- package/src/db/tables/projects.test.ts +16 -0
- package/src/db/tables/projects.ts +13 -3
- package/src/db/tables/requestUsage.ts +4 -1
- package/src/db/tables/rewardAccounts.ts +178 -0
- package/src/db/tables/rewardCampaignDistributors.ts +68 -0
- package/src/db/tables/rewardCampaigns.test.ts +1388 -0
- package/src/db/tables/rewardCampaigns.ts +647 -0
- package/src/db/tables/rewardCredits.ts +110 -0
- package/src/db/tables/rewardEligibilityAssociations.test.ts +271 -0
- package/src/db/tables/rewardEligibilityAssociations.ts +184 -0
- package/src/db/tables/rewardRuns.ts +514 -0
- package/src/db/tables/rewardTransactionAttempts.ts +272 -0
- package/src/db/tables/routesCatalog.test.ts +185 -0
- package/src/db/tables/routesCatalog.ts +163 -0
- package/src/db/tables/routesDepositAddresses.test.ts +1048 -0
- package/src/db/tables/routesDepositAddresses.ts +1008 -0
- package/src/db/tables/{fundingDepositRequestObservations.test.ts → routesDepositRequestObservations.test.ts} +13 -14
- package/src/db/tables/{fundingDepositRequestObservations.ts → routesDepositRequestObservations.ts} +10 -10
- package/src/db/tables/{fundingDeposits.test.ts → routesDeposits.test.ts} +388 -46
- package/src/db/tables/routesDeposits.ts +1062 -0
- package/src/db/tables/routesIdempotency.test.ts +796 -0
- package/src/db/tables/routesIdempotency.ts +496 -0
- package/src/db/tables/routesSubsidies.test.ts +120 -0
- package/src/db/tables/routesSubsidies.ts +71 -0
- package/src/db/tables/{fundingTransferEvents.ts → routesTransferEvents.ts} +4 -4
- package/src/db/tables/routesTransferSubsidies.ts +38 -0
- package/src/db/tables/routesTransferSubsidyNonces.ts +124 -0
- package/src/db/tables/routesTransferTransactions.test.ts +195 -0
- package/src/db/tables/{fundingTransferTransactions.ts → routesTransferTransactions.ts} +63 -18
- package/src/db/tables/routesTransfers.test.ts +338 -0
- package/src/db/tables/routesTransfers.ts +662 -0
- package/src/db/tables/sponsoredTransactions.test.ts +269 -45
- package/src/db/tables/sponsoredTransactions.ts +225 -65
- package/src/db/tables/sponsorshipAttributions.test.ts +160 -0
- package/src/db/tables/sponsorshipAttributions.ts +168 -0
- package/src/db/tables/sponsorshipReconciliationCursors.test.ts +115 -0
- package/src/db/tables/sponsorshipReconciliationCursors.ts +67 -0
- package/src/db/tables/stripeCustomers.test.ts +85 -0
- package/src/db/tables/stripeCustomers.ts +24 -0
- package/src/db/tables/users.test.ts +129 -0
- package/src/db/tables/users.ts +49 -3
- package/src/db/tables/verifiedTokenRequests.test.ts +39 -20
- package/src/db/tables/verifiedTokenRequests.ts +80 -44
- package/src/db/tables/webhookQueueEvents.ts +8 -1
- package/src/db/tables/webhookSubscriptions.ts +95 -20
- package/src/handlers/internal/executionError.ts +3 -4
- package/src/handlers/internal/multisig.ts +13 -816
- package/src/handlers/internal/sponsorship.ts +26 -10
- package/src/handlers/relay.test-d.ts +9 -1
- package/src/handlers/relay.test.ts +823 -3
- package/src/handlers/relay.ts +127 -107
- package/src/index.test-d.ts +7 -0
- package/src/index.ts +0 -17
- package/src/internal/AssetResponse.ts +26 -0
- package/src/internal/Auth.test.ts +1656 -9
- package/src/internal/Auth.ts +880 -244
- package/src/internal/BetterAuth.test.ts +242 -0
- package/src/internal/BetterAuth.ts +349 -0
- package/src/internal/Cache.ts +2 -0
- package/src/internal/EarnRates.test.ts +17 -0
- package/src/internal/EarnRates.ts +124 -31
- package/src/internal/EarnSharePrices.test.ts +182 -0
- package/src/internal/EarnSharePrices.ts +313 -0
- package/src/internal/EarnVaults.test.ts +21 -0
- package/src/internal/EarnVaults.ts +33 -11
- package/src/internal/Email.ts +54 -0
- package/src/internal/Idempotency.test.ts +2 -2
- package/src/internal/Log.test-d.ts +8 -7
- package/src/internal/Log.test.ts +114 -16
- package/src/internal/Log.ts +53 -40
- package/src/internal/MetricSink.test.ts +313 -26
- package/src/internal/MetricSink.ts +73 -8
- package/src/internal/Mpp.test.ts +31 -0
- package/src/internal/Mpp.ts +21 -24
- package/src/internal/OpenApi.ts +45 -12
- package/src/internal/Provider.test.ts +1 -1
- package/src/internal/Provider.ts +1 -1
- package/src/internal/RateLimit.test.ts +21 -3
- package/src/internal/RateLimit.ts +12 -1
- package/src/internal/Store.test-d.ts +1 -1
- package/src/internal/Store.test.ts +151 -8
- package/src/internal/Store.ts +76 -9
- package/src/internal/Tidx.test.ts +59 -8
- package/src/internal/Tidx.ts +86 -14
- package/src/internal/Timing.test.ts +77 -0
- package/src/internal/Timing.ts +83 -6
- package/src/internal/VercelOidc.test.ts +188 -0
- package/src/internal/VercelOidc.ts +193 -0
- package/src/internal/VerifiedTokens.test.ts +60 -6
- package/src/internal/VerifiedTokens.ts +21 -24
- package/src/internal/Viem.batch.test.ts +80 -0
- package/src/internal/Viem.test.ts +201 -2
- package/src/internal/Viem.ts +221 -25
- package/src/internal/Webhooks.test.ts +85 -6
- package/src/internal/Webhooks.ts +22 -4
- package/src/internal/ZoneRpc.ts +50 -0
- package/src/internal/exchange/Provider.test.ts +2 -2
- package/src/internal/index.test.ts +3 -1
- package/src/internal/index.ts +3 -1
- package/src/internal/rewards/Audit.ts +231 -0
- package/src/internal/rewards/Campaigns.test.ts +1234 -0
- package/src/internal/rewards/Campaigns.ts +1205 -0
- package/src/internal/rewards/Credits.ts +165 -0
- package/src/internal/rewards/Events.local.test.ts +113 -0
- package/src/internal/rewards/Events.test.ts +152 -0
- package/src/internal/rewards/Events.ts +468 -0
- package/src/internal/rewards/Projection.test.ts +681 -0
- package/src/internal/rewards/Projection.ts +987 -0
- package/src/internal/rewards/Rates.test.ts +171 -0
- package/src/internal/rewards/Rates.ts +110 -0
- package/src/internal/rewards/Read.test.ts +501 -0
- package/src/internal/rewards/Read.ts +476 -0
- package/src/internal/rewards/Runner.checkpoint.test.ts +80 -0
- package/src/internal/rewards/Runner.states.test.ts +188 -0
- package/src/internal/rewards/Runner.test.ts +90 -0
- package/src/internal/rewards/Runner.ts +2229 -0
- package/src/internal/rewards/Signer.test.ts +79 -0
- package/src/internal/rewards/Signer.ts +180 -0
- package/src/internal/rewards/index.ts +14 -0
- package/src/internal/{funding → routes}/Action.test.ts +63 -14
- package/src/internal/{funding → routes}/Action.ts +35 -8
- package/src/internal/{funding → routes}/Catalog.test.ts +3 -3
- package/src/internal/{funding → routes}/Catalog.ts +39 -39
- package/src/internal/{funding → routes}/Chain.test.ts +1 -1
- package/src/internal/{funding → routes}/Chain.ts +11 -11
- package/src/internal/{funding → routes}/Deposit.test.ts +1 -1
- package/src/internal/{funding → routes}/Deposit.ts +93 -45
- package/src/internal/{funding → routes}/DepositAddress.test.ts +11 -3
- package/src/internal/{funding → routes}/DepositAddress.ts +132 -53
- package/src/internal/{funding → routes}/DepositWebhook.test.ts +61 -18
- package/src/internal/{funding → routes}/DepositWebhook.ts +9 -9
- package/src/internal/routes/Economics.test.ts +42 -0
- package/src/internal/routes/Economics.ts +47 -0
- package/src/internal/{funding → routes}/Evidence.test.ts +6 -6
- package/src/internal/{funding → routes}/Evidence.ts +9 -9
- package/src/internal/routes/Observability.test.ts +636 -0
- package/src/internal/routes/Observability.ts +668 -0
- package/src/internal/{funding → routes}/Provider.test.ts +489 -153
- package/src/internal/{funding → routes}/Provider.ts +489 -186
- package/src/internal/{funding → routes}/Reconciliation.local.test.ts +84 -12
- package/src/internal/{funding → routes}/Reconciliation.test.ts +1213 -279
- package/src/internal/{funding → routes}/Reconciliation.ts +501 -203
- package/src/internal/routes/Reconciliation.unattributed.test.ts +250 -0
- package/src/internal/{funding → routes}/Route.ts +7 -7
- package/src/internal/{funding → routes}/SourceObservation.test.ts +13 -14
- package/src/internal/{funding → routes}/SourceObservation.ts +13 -13
- package/src/internal/{funding → routes}/Subsidy.local.test.ts +7 -7
- package/src/internal/routes/Subsidy.test.ts +169 -0
- package/src/internal/{funding → routes}/Subsidy.ts +86 -6
- package/src/internal/{funding → routes}/Token.test.ts +1 -1
- package/src/internal/{funding → routes}/Token.ts +5 -5
- package/src/internal/routes/Transfer.test.ts +1199 -0
- package/src/internal/routes/Transfer.ts +1206 -0
- package/src/internal/routes/TransferReconciliation.test.ts +731 -0
- package/src/internal/routes/TransferReconciliation.ts +527 -0
- package/src/internal/routes/TransferSubsidy.test.ts +172 -0
- package/src/internal/routes/TransferSubsidy.ts +447 -0
- package/src/internal/{funding → routes}/TransferWebhook.test.ts +13 -13
- package/src/internal/{funding → routes}/TransferWebhook.ts +7 -7
- package/src/internal/{funding → routes}/index.test.ts +5 -3
- package/src/internal/{funding → routes}/index.ts +2 -0
- package/src/internal/{funding → routes}/providers/across.ts +16 -16
- package/src/internal/{funding → routes}/providers/index.test.ts +157 -44
- package/src/internal/{funding → routes}/providers/relay.test.ts +224 -32
- package/src/internal/{funding → routes}/providers/relay.ts +228 -121
- package/src/internal/{funding → routes}/providers/rhino.ts +16 -16
- package/src/internal/{funding → routes}/providers/squid.ts +17 -17
- package/src/internal/routes/providers/stargate.test.ts +728 -0
- package/src/internal/routes/providers/stargate.ts +1276 -0
- package/src/internal/{funding → routes}/providers/symbiosis.ts +64 -24
- package/src/internal/webhookDestinations/slack.ts +10 -10
- package/src/providers/index.ts +13 -13
- package/src/server.ts +18 -0
- package/dist/apps/funding/Access.d.ts.map +0 -1
- package/dist/apps/funding/Access.js.map +0 -1
- package/dist/apps/funding/App.js.map +0 -1
- package/dist/apps/funding/Inventory.d.ts.map +0 -1
- package/dist/apps/funding/Inventory.js.map +0 -1
- package/dist/apps/funding/ProviderAttempts.d.ts +0 -5
- package/dist/apps/funding/ProviderAttempts.d.ts.map +0 -1
- package/dist/apps/funding/ProviderAttempts.js +0 -24
- package/dist/apps/funding/ProviderAttempts.js.map +0 -1
- package/dist/apps/funding/index.d.ts +0 -2
- package/dist/apps/funding/index.d.ts.map +0 -1
- package/dist/apps/funding/index.js +0 -2
- package/dist/apps/funding/index.js.map +0 -1
- package/dist/apps/funding/routes/chains.d.ts.map +0 -1
- package/dist/apps/funding/routes/chains.js.map +0 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +0 -1
- package/dist/apps/funding/routes/deposit-addresses.js.map +0 -1
- package/dist/apps/funding/routes/providers.d.ts.map +0 -1
- package/dist/apps/funding/routes/providers.js +0 -57
- package/dist/apps/funding/routes/providers.js.map +0 -1
- package/dist/apps/funding/routes/quotes.d.ts.map +0 -1
- package/dist/apps/funding/routes/quotes.js.map +0 -1
- package/dist/apps/funding/routes/transfers.d.ts.map +0 -1
- package/dist/apps/funding/routes/transfers.js +0 -828
- package/dist/apps/funding/routes/transfers.js.map +0 -1
- package/dist/db/tables/fundingCatalog.d.ts +0 -58
- package/dist/db/tables/fundingCatalog.d.ts.map +0 -1
- package/dist/db/tables/fundingCatalog.js.map +0 -1
- package/dist/db/tables/fundingDepositAddresses.d.ts +0 -192
- package/dist/db/tables/fundingDepositAddresses.d.ts.map +0 -1
- package/dist/db/tables/fundingDepositAddresses.js +0 -235
- package/dist/db/tables/fundingDepositAddresses.js.map +0 -1
- package/dist/db/tables/fundingDepositRequestObservations.d.ts.map +0 -1
- package/dist/db/tables/fundingDepositRequestObservations.js.map +0 -1
- package/dist/db/tables/fundingDeposits.d.ts.map +0 -1
- package/dist/db/tables/fundingDeposits.js +0 -295
- package/dist/db/tables/fundingDeposits.js.map +0 -1
- package/dist/db/tables/fundingIdempotency.d.ts +0 -91
- package/dist/db/tables/fundingIdempotency.d.ts.map +0 -1
- package/dist/db/tables/fundingIdempotency.js +0 -103
- package/dist/db/tables/fundingIdempotency.js.map +0 -1
- package/dist/db/tables/fundingTransferEvents.d.ts.map +0 -1
- package/dist/db/tables/fundingTransferEvents.js.map +0 -1
- package/dist/db/tables/fundingTransferTransactions.d.ts +0 -53
- package/dist/db/tables/fundingTransferTransactions.d.ts.map +0 -1
- package/dist/db/tables/fundingTransferTransactions.js.map +0 -1
- package/dist/db/tables/fundingTransfers.d.ts +0 -99
- package/dist/db/tables/fundingTransfers.d.ts.map +0 -1
- package/dist/db/tables/fundingTransfers.js +0 -110
- package/dist/db/tables/fundingTransfers.js.map +0 -1
- package/dist/internal/funding/Action.d.ts.map +0 -1
- package/dist/internal/funding/Action.js.map +0 -1
- package/dist/internal/funding/Catalog.d.ts.map +0 -1
- package/dist/internal/funding/Catalog.js.map +0 -1
- package/dist/internal/funding/Chain.d.ts.map +0 -1
- package/dist/internal/funding/Chain.js.map +0 -1
- package/dist/internal/funding/Deposit.d.ts.map +0 -1
- package/dist/internal/funding/Deposit.js.map +0 -1
- package/dist/internal/funding/DepositAddress.d.ts.map +0 -1
- package/dist/internal/funding/DepositAddress.js.map +0 -1
- package/dist/internal/funding/DepositWebhook.d.ts.map +0 -1
- package/dist/internal/funding/DepositWebhook.js.map +0 -1
- package/dist/internal/funding/Evidence.d.ts.map +0 -1
- package/dist/internal/funding/Evidence.js.map +0 -1
- package/dist/internal/funding/Provider.d.ts.map +0 -1
- package/dist/internal/funding/Provider.js.map +0 -1
- package/dist/internal/funding/Reconciliation.d.ts.map +0 -1
- package/dist/internal/funding/Reconciliation.js.map +0 -1
- package/dist/internal/funding/Route.d.ts +0 -21
- package/dist/internal/funding/Route.d.ts.map +0 -1
- package/dist/internal/funding/Route.js.map +0 -1
- package/dist/internal/funding/SourceObservation.d.ts.map +0 -1
- package/dist/internal/funding/SourceObservation.js.map +0 -1
- package/dist/internal/funding/Subsidy.d.ts.map +0 -1
- package/dist/internal/funding/Subsidy.js.map +0 -1
- package/dist/internal/funding/Token.d.ts.map +0 -1
- package/dist/internal/funding/Token.js.map +0 -1
- package/dist/internal/funding/Transfer.d.ts.map +0 -1
- package/dist/internal/funding/Transfer.js +0 -462
- package/dist/internal/funding/Transfer.js.map +0 -1
- package/dist/internal/funding/TransferReconciliation.d.ts.map +0 -1
- package/dist/internal/funding/TransferReconciliation.js +0 -192
- package/dist/internal/funding/TransferReconciliation.js.map +0 -1
- package/dist/internal/funding/TransferWebhook.d.ts.map +0 -1
- package/dist/internal/funding/TransferWebhook.js.map +0 -1
- package/dist/internal/funding/index.d.ts.map +0 -1
- package/dist/internal/funding/index.js.map +0 -1
- package/dist/internal/funding/providers/across.d.ts.map +0 -1
- package/dist/internal/funding/providers/across.js.map +0 -1
- package/dist/internal/funding/providers/relay.d.ts.map +0 -1
- package/dist/internal/funding/providers/relay.js.map +0 -1
- package/dist/internal/funding/providers/rhino.d.ts.map +0 -1
- package/dist/internal/funding/providers/rhino.js.map +0 -1
- package/dist/internal/funding/providers/squid.d.ts.map +0 -1
- package/dist/internal/funding/providers/squid.js.map +0 -1
- package/dist/internal/funding/providers/stargate.d.ts.map +0 -1
- package/dist/internal/funding/providers/stargate.js +0 -579
- package/dist/internal/funding/providers/stargate.js.map +0 -1
- package/dist/internal/funding/providers/symbiosis.d.ts.map +0 -1
- package/dist/internal/funding/providers/symbiosis.js.map +0 -1
- package/src/apps/funding/App.test.ts +0 -78
- package/src/apps/funding/App.ts +0 -88
- package/src/apps/funding/ProviderAttempts.ts +0 -26
- package/src/apps/funding/index.ts +0 -1
- package/src/apps/funding/routes/transfers.ts +0 -987
- package/src/db/tables/fundingCatalog.test.ts +0 -122
- package/src/db/tables/fundingCatalog.ts +0 -163
- package/src/db/tables/fundingDepositAddresses.test.ts +0 -608
- package/src/db/tables/fundingDepositAddresses.ts +0 -443
- package/src/db/tables/fundingDeposits.ts +0 -572
- package/src/db/tables/fundingIdempotency.test.ts +0 -182
- package/src/db/tables/fundingIdempotency.ts +0 -180
- package/src/db/tables/fundingTransferTransactions.test.ts +0 -112
- package/src/db/tables/fundingTransfers.test.ts +0 -115
- package/src/db/tables/fundingTransfers.ts +0 -189
- package/src/handlers/internal/multisig.test.ts +0 -818
- package/src/internal/funding/Subsidy.test.ts +0 -75
- package/src/internal/funding/Transfer.test.ts +0 -524
- package/src/internal/funding/Transfer.ts +0 -762
- package/src/internal/funding/TransferReconciliation.test.ts +0 -147
- package/src/internal/funding/TransferReconciliation.ts +0 -264
- package/src/internal/funding/providers/stargate.test.ts +0 -328
- package/src/internal/funding/providers/stargate.ts +0 -856
- /package/dist/apps/{funding → routes}/Inventory.d.ts +0 -0
- /package/src/internal/{funding → routes}/Route.test.ts +0 -0
package/dist/db/Db.js
CHANGED
|
@@ -1179,6 +1179,1035 @@ export const migrations = [
|
|
|
1179
1179
|
name: '0141_sponsored_transactions_promotion_spend_index',
|
|
1180
1180
|
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS sponsored_transactions_promotion_spend_idx ON sponsored_transactions (org_id, project_id, status, created_at) WHERE NOT billable`),
|
|
1181
1181
|
},
|
|
1182
|
+
{
|
|
1183
|
+
name: '0142_funding_transfers_status_updated_at',
|
|
1184
|
+
up: (db) => raw(db, sql `ALTER TABLE funding_transfers ADD COLUMN IF NOT EXISTS status_updated_at text`),
|
|
1185
|
+
},
|
|
1186
|
+
{
|
|
1187
|
+
name: '0143_funding_deposits_status_updated_at',
|
|
1188
|
+
up: (db) => raw(db, sql `ALTER TABLE funding_deposits ADD COLUMN IF NOT EXISTS status_updated_at text`),
|
|
1189
|
+
},
|
|
1190
|
+
{
|
|
1191
|
+
name: '0144_funding_deposit_addresses_status_updated_at',
|
|
1192
|
+
up: (db) => raw(db, sql `ALTER TABLE funding_deposit_addresses ADD COLUMN IF NOT EXISTS status_updated_at text`),
|
|
1193
|
+
},
|
|
1194
|
+
{
|
|
1195
|
+
name: '0145_funding_transfers_state_metrics_index',
|
|
1196
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS funding_transfers_state_metrics_idx ON funding_transfers (status, environment, provider_id, method, (status_reason->>'code'), status_updated_at, updated_at)`),
|
|
1197
|
+
},
|
|
1198
|
+
{
|
|
1199
|
+
name: '0146_funding_deposits_state_metrics_index',
|
|
1200
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS funding_deposits_state_metrics_idx ON funding_deposits (status, environment, deposit_address_id, (status_reason->>'code'), status_updated_at, updated_at)`),
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
name: '0147_funding_deposits_provider_delivered_at',
|
|
1204
|
+
up: (db) => raw(db, sql `ALTER TABLE funding_deposits ADD COLUMN IF NOT EXISTS provider_delivered_at text`),
|
|
1205
|
+
},
|
|
1206
|
+
{
|
|
1207
|
+
name: '0148_funding_transfers_updated_at_index',
|
|
1208
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS funding_transfers_updated_at_idx ON funding_transfers (updated_at DESC, id DESC)`),
|
|
1209
|
+
},
|
|
1210
|
+
{
|
|
1211
|
+
name: '0149_funding_deposits_updated_at_index',
|
|
1212
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS funding_deposits_updated_at_idx ON funding_deposits (updated_at DESC, id DESC)`),
|
|
1213
|
+
},
|
|
1214
|
+
{
|
|
1215
|
+
name: '0150_funding_deposit_addresses_updated_at_index',
|
|
1216
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS funding_deposit_addresses_updated_at_idx ON funding_deposit_addresses (updated_at DESC, id DESC)`),
|
|
1217
|
+
},
|
|
1218
|
+
{
|
|
1219
|
+
name: '0151_sponsorship_attributions',
|
|
1220
|
+
up: (db) => db.schema
|
|
1221
|
+
.createTable('sponsorshipAttributions')
|
|
1222
|
+
.ifNotExists()
|
|
1223
|
+
.addColumn('id', 'text', (c) => c.primaryKey())
|
|
1224
|
+
.addColumn('orgId', 'text', (c) => c.notNull())
|
|
1225
|
+
.addColumn('externalId', 'text')
|
|
1226
|
+
.addColumn('projectId', 'text')
|
|
1227
|
+
.addColumn('startsAt', 'text')
|
|
1228
|
+
.addColumn('endsAt', 'text')
|
|
1229
|
+
.addColumn('spendLimit', 'text')
|
|
1230
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1231
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1232
|
+
.addCheckConstraint('sponsorship_attributions_source_check', sql `(external_id IS NULL) <> (project_id IS NULL)`)
|
|
1233
|
+
.addCheckConstraint('sponsorship_attributions_window_check', sql `(starts_at IS NULL) = (ends_at IS NULL)`),
|
|
1234
|
+
},
|
|
1235
|
+
{
|
|
1236
|
+
name: '0152_sponsorship_attributions_external_unique',
|
|
1237
|
+
up: (db) => raw(db, sql `CREATE UNIQUE INDEX IF NOT EXISTS sponsorship_attributions_external_unique ON sponsorship_attributions (org_id, external_id) WHERE external_id IS NOT NULL`),
|
|
1238
|
+
},
|
|
1239
|
+
{
|
|
1240
|
+
name: '0153_sponsorship_attributions_project_unique',
|
|
1241
|
+
up: (db) => raw(db, sql `CREATE UNIQUE INDEX IF NOT EXISTS sponsorship_attributions_project_unique ON sponsorship_attributions (org_id, project_id) WHERE project_id IS NOT NULL`),
|
|
1242
|
+
},
|
|
1243
|
+
{
|
|
1244
|
+
name: '0154_sponsored_transactions_attribution_id',
|
|
1245
|
+
up: (db) => raw(db, sql `ALTER TABLE sponsored_transactions ADD COLUMN IF NOT EXISTS sponsorship_attribution_id text`),
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
name: '0155_sponsored_transactions_attribution_spend_index',
|
|
1249
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS sponsored_transactions_attribution_spend_idx ON sponsored_transactions (org_id, sponsorship_attribution_id, status, created_at) WHERE NOT billable`),
|
|
1250
|
+
},
|
|
1251
|
+
{
|
|
1252
|
+
name: '0156_project_sponsorship_attributions',
|
|
1253
|
+
up: (db) => raw(db, sql `INSERT INTO sponsorship_attributions (id, org_id, external_id, project_id, starts_at, ends_at, spend_limit, created_at, updated_at)
|
|
1254
|
+
SELECT 'sat_' || md5(projects.org_id || ':' || projects.id), projects.org_id, NULL, projects.id, projects.sponsorship_subsidy_starts_at, projects.sponsorship_subsidy_ends_at, projects.sponsorship_spend_limit, projects.created_at, projects.updated_at
|
|
1255
|
+
FROM projects
|
|
1256
|
+
WHERE projects.sponsorship_subsidy_starts_at IS NOT NULL
|
|
1257
|
+
ON CONFLICT (org_id, project_id) WHERE project_id IS NOT NULL DO UPDATE
|
|
1258
|
+
SET starts_at = EXCLUDED.starts_at, ends_at = EXCLUDED.ends_at, spend_limit = EXCLUDED.spend_limit, updated_at = EXCLUDED.updated_at
|
|
1259
|
+
WHERE sponsorship_attributions.starts_at IS NULL`),
|
|
1260
|
+
},
|
|
1261
|
+
{
|
|
1262
|
+
name: '0157_project_sponsored_transaction_attributions',
|
|
1263
|
+
up: (db) => raw(db, sql `UPDATE sponsored_transactions
|
|
1264
|
+
SET sponsorship_attribution_id = sponsorship_attributions.id
|
|
1265
|
+
FROM sponsorship_attributions
|
|
1266
|
+
WHERE sponsored_transactions.sponsorship_attribution_id IS NULL
|
|
1267
|
+
AND sponsored_transactions.org_id = sponsorship_attributions.org_id
|
|
1268
|
+
AND sponsored_transactions.project_id = sponsorship_attributions.project_id`),
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
name: '0158_reward_eligibility_associations',
|
|
1272
|
+
up: (db) => db.schema
|
|
1273
|
+
.createTable('rewardEligibilityAssociations')
|
|
1274
|
+
.ifNotExists()
|
|
1275
|
+
.addColumn('chainId', 'bigint', (c) => c.notNull())
|
|
1276
|
+
.addColumn('vaultAddress', 'text', (c) => c.notNull())
|
|
1277
|
+
.addColumn('walletAddress', 'text', (c) => c.notNull())
|
|
1278
|
+
.addColumn('firstRegisteredAt', 'text', (c) => c.notNull())
|
|
1279
|
+
.addColumn('latestRegisteredAt', 'text', (c) => c.notNull())
|
|
1280
|
+
.addColumn('transactionHash', 'text')
|
|
1281
|
+
.addPrimaryKeyConstraint('reward_eligibility_associations_pkey', [
|
|
1282
|
+
'chainId',
|
|
1283
|
+
'vaultAddress',
|
|
1284
|
+
'walletAddress',
|
|
1285
|
+
]),
|
|
1286
|
+
},
|
|
1287
|
+
{
|
|
1288
|
+
name: '0159_reward_eligibility_registration_order',
|
|
1289
|
+
up: (db) => raw(db, sql `ALTER TABLE reward_eligibility_associations ADD COLUMN IF NOT EXISTS registration_order bigint GENERATED ALWAYS AS IDENTITY UNIQUE`),
|
|
1290
|
+
},
|
|
1291
|
+
{
|
|
1292
|
+
name: '0160_reward_eligibility_page_index',
|
|
1293
|
+
up: (db) => db.schema
|
|
1294
|
+
.createIndex('reward_eligibility_associations_page_idx')
|
|
1295
|
+
.ifNotExists()
|
|
1296
|
+
.on('rewardEligibilityAssociations')
|
|
1297
|
+
.columns(['chainId', 'vaultAddress', 'registrationOrder']),
|
|
1298
|
+
},
|
|
1299
|
+
{
|
|
1300
|
+
name: '0161_users_name',
|
|
1301
|
+
up: (db) => raw(db, sql `ALTER TABLE users ADD COLUMN IF NOT EXISTS name text`),
|
|
1302
|
+
},
|
|
1303
|
+
{
|
|
1304
|
+
name: '0162_users_image',
|
|
1305
|
+
up: (db) => raw(db, sql `ALTER TABLE users ADD COLUMN IF NOT EXISTS image text`),
|
|
1306
|
+
},
|
|
1307
|
+
{
|
|
1308
|
+
name: '0163_users_email_verified',
|
|
1309
|
+
up: (db) => raw(db, sql `ALTER TABLE users ADD COLUMN IF NOT EXISTS email_verified boolean`),
|
|
1310
|
+
},
|
|
1311
|
+
{
|
|
1312
|
+
name: '0164_users_auth_fields_backfill',
|
|
1313
|
+
up: (db) => raw(db, sql `UPDATE users SET email_verified = email IS NOT NULL, name = COALESCE(NULLIF(btrim(email), ''), id) WHERE email_verified IS NULL OR name IS NULL`),
|
|
1314
|
+
},
|
|
1315
|
+
{
|
|
1316
|
+
name: '0165_users_auth_fields_required',
|
|
1317
|
+
// Defaults keep inserts from the previous Worker valid while the new
|
|
1318
|
+
// required Better Auth fields roll out.
|
|
1319
|
+
up: (db) => raw(db, sql `ALTER TABLE users ALTER COLUMN email_verified SET DEFAULT false, ALTER COLUMN email_verified SET NOT NULL, ALTER COLUMN name SET DEFAULT '', ALTER COLUMN name SET NOT NULL`),
|
|
1320
|
+
},
|
|
1321
|
+
{
|
|
1322
|
+
name: '0166_users_email_auth_precondition',
|
|
1323
|
+
up: (db) => raw(db, sql `DO $$ BEGIN
|
|
1324
|
+
IF EXISTS (SELECT 1 FROM users WHERE email IS NOT NULL AND btrim(email) = '') THEN
|
|
1325
|
+
RAISE EXCEPTION 'users.email contains blank values';
|
|
1326
|
+
END IF;
|
|
1327
|
+
END $$`),
|
|
1328
|
+
},
|
|
1329
|
+
{
|
|
1330
|
+
name: '0167_users_email_normalized',
|
|
1331
|
+
up: (db) => raw(db, sql `UPDATE users SET email = lower(btrim(email))`),
|
|
1332
|
+
},
|
|
1333
|
+
{
|
|
1334
|
+
name: '0168_users_email_index',
|
|
1335
|
+
// SIWE still creates address-keyed users. Enforce email uniqueness in a
|
|
1336
|
+
// later deployment after wallet identities are linked.
|
|
1337
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS users_email_idx ON users (email)`),
|
|
1338
|
+
},
|
|
1339
|
+
{
|
|
1340
|
+
name: '0169_users_email_normalized_index',
|
|
1341
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS users_email_normalized_idx ON users (lower(btrim(email))) WHERE email IS NOT NULL`),
|
|
1342
|
+
},
|
|
1343
|
+
{
|
|
1344
|
+
name: '0170_auth_sessions',
|
|
1345
|
+
up: (db) => db.schema
|
|
1346
|
+
.createTable('authSessions')
|
|
1347
|
+
.ifNotExists()
|
|
1348
|
+
.addColumn('id', 'text', (c) => c.primaryKey().notNull())
|
|
1349
|
+
.addColumn('expiresAt', 'text', (c) => c.notNull())
|
|
1350
|
+
.addColumn('token', 'text', (c) => c.notNull().unique())
|
|
1351
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1352
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1353
|
+
.addColumn('ipAddress', 'text')
|
|
1354
|
+
.addColumn('userAgent', 'text')
|
|
1355
|
+
.addColumn('userId', 'text', (c) => c.notNull().references('users.id').onDelete('cascade')),
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
name: '0171_auth_sessions_user_index',
|
|
1359
|
+
up: (db) => db.schema
|
|
1360
|
+
.createIndex('auth_sessions_user_id_idx')
|
|
1361
|
+
.ifNotExists()
|
|
1362
|
+
.on('authSessions')
|
|
1363
|
+
.column('userId'),
|
|
1364
|
+
},
|
|
1365
|
+
{
|
|
1366
|
+
name: '0172_auth_accounts',
|
|
1367
|
+
up: (db) => db.schema
|
|
1368
|
+
.createTable('authAccounts')
|
|
1369
|
+
.ifNotExists()
|
|
1370
|
+
.addColumn('id', 'text', (c) => c.primaryKey().notNull())
|
|
1371
|
+
.addColumn('issuer', 'text', (c) => c.notNull())
|
|
1372
|
+
.addColumn('accountId', 'text', (c) => c.notNull())
|
|
1373
|
+
.addColumn('providerId', 'text', (c) => c.notNull())
|
|
1374
|
+
.addColumn('userId', 'text', (c) => c.notNull().references('users.id').onDelete('cascade'))
|
|
1375
|
+
.addColumn('accessToken', 'text')
|
|
1376
|
+
.addColumn('refreshToken', 'text')
|
|
1377
|
+
.addColumn('idToken', 'text')
|
|
1378
|
+
.addColumn('accessTokenExpiresAt', 'text')
|
|
1379
|
+
.addColumn('refreshTokenExpiresAt', 'text')
|
|
1380
|
+
.addColumn('scope', 'text')
|
|
1381
|
+
.addColumn('password', 'text')
|
|
1382
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1383
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull()),
|
|
1384
|
+
},
|
|
1385
|
+
{
|
|
1386
|
+
name: '0173_auth_accounts_user_index',
|
|
1387
|
+
up: (db) => db.schema
|
|
1388
|
+
.createIndex('auth_accounts_user_id_idx')
|
|
1389
|
+
.ifNotExists()
|
|
1390
|
+
.on('authAccounts')
|
|
1391
|
+
.column('userId'),
|
|
1392
|
+
},
|
|
1393
|
+
{
|
|
1394
|
+
name: '0174_auth_accounts_identity_index',
|
|
1395
|
+
up: (db) => db.schema
|
|
1396
|
+
.createIndex('auth_accounts_issuer_account_id_unique_idx')
|
|
1397
|
+
.ifNotExists()
|
|
1398
|
+
.unique()
|
|
1399
|
+
.on('authAccounts')
|
|
1400
|
+
.columns(['issuer', 'accountId']),
|
|
1401
|
+
},
|
|
1402
|
+
{
|
|
1403
|
+
name: '0175_auth_verifications',
|
|
1404
|
+
up: (db) => db.schema
|
|
1405
|
+
.createTable('authVerifications')
|
|
1406
|
+
.ifNotExists()
|
|
1407
|
+
.addColumn('id', 'text', (c) => c.primaryKey().notNull())
|
|
1408
|
+
.addColumn('identifier', 'text', (c) => c.notNull())
|
|
1409
|
+
.addColumn('value', 'text', (c) => c.notNull())
|
|
1410
|
+
.addColumn('expiresAt', 'text', (c) => c.notNull())
|
|
1411
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1412
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull()),
|
|
1413
|
+
},
|
|
1414
|
+
{
|
|
1415
|
+
name: '0176_auth_verifications_identifier_index',
|
|
1416
|
+
up: (db) => db.schema
|
|
1417
|
+
.createIndex('auth_verifications_identifier_idx')
|
|
1418
|
+
.ifNotExists()
|
|
1419
|
+
.on('authVerifications')
|
|
1420
|
+
.column('identifier'),
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
name: '0177_auth_sessions_provider',
|
|
1424
|
+
up: (db) => raw(db, sql `ALTER TABLE auth_sessions ADD COLUMN IF NOT EXISTS provider text`),
|
|
1425
|
+
},
|
|
1426
|
+
{
|
|
1427
|
+
name: '0178_reward_campaigns',
|
|
1428
|
+
up: (db) => db.schema
|
|
1429
|
+
.createTable('rewardCampaigns')
|
|
1430
|
+
.ifNotExists()
|
|
1431
|
+
.addColumn('chainId', 'bigint', (c) => c.notNull())
|
|
1432
|
+
.addColumn('vaultAddress', 'text', (c) => c.notNull())
|
|
1433
|
+
.addColumn('assetAddress', 'text', (c) => c.notNull())
|
|
1434
|
+
.addColumn('assetDecimals', 'integer', (c) => c.notNull())
|
|
1435
|
+
.addColumn('earnShareAddress', 'text', (c) => c.notNull())
|
|
1436
|
+
.addColumn('controllerAddress', 'text')
|
|
1437
|
+
.addColumn('distributorAddress', 'text')
|
|
1438
|
+
.addColumn('config', 'jsonb', (c) => c.notNull())
|
|
1439
|
+
.addColumn('pendingConfig', 'jsonb')
|
|
1440
|
+
.addColumn('pendingEffectiveAt', 'bigint')
|
|
1441
|
+
.addColumn('eventCursor', 'jsonb')
|
|
1442
|
+
.addColumn('deliveredThrough', 'bigint', (c) => c.notNull())
|
|
1443
|
+
.addColumn('paused', 'boolean', (c) => c.notNull().defaultTo(false))
|
|
1444
|
+
.addColumn('provisioningError', 'text')
|
|
1445
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1446
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1447
|
+
.addPrimaryKeyConstraint('reward_campaigns_pkey', ['chainId', 'vaultAddress'])
|
|
1448
|
+
.addForeignKeyConstraint('reward_campaigns_vault_fkey', ['chainId', 'vaultAddress'], 'earnVaults', ['chainId', 'vaultAddress'], (c) => c.onDelete('restrict')),
|
|
1449
|
+
},
|
|
1450
|
+
{
|
|
1451
|
+
name: '0179_reward_accounts',
|
|
1452
|
+
up: (db) => db.schema
|
|
1453
|
+
.createTable('rewardAccounts')
|
|
1454
|
+
.ifNotExists()
|
|
1455
|
+
.addColumn('chainId', 'bigint', (c) => c.notNull())
|
|
1456
|
+
.addColumn('vaultAddress', 'text', (c) => c.notNull())
|
|
1457
|
+
.addColumn('recipient', 'text', (c) => c.notNull())
|
|
1458
|
+
.addColumn('registrationOrder', 'bigint', (c) => c.notNull())
|
|
1459
|
+
.addColumn('publicEarnShares', 'numeric', (c) => c.notNull())
|
|
1460
|
+
.addColumn('qualifiedEarnShares', 'numeric', (c) => c.notNull())
|
|
1461
|
+
.addColumn('allocatedPrincipalAssets', 'numeric', (c) => c.notNull())
|
|
1462
|
+
.addColumn('accrualRemainder', 'numeric', (c) => c.notNull())
|
|
1463
|
+
.addColumn('pendingRewardAssets', 'numeric', (c) => c.notNull())
|
|
1464
|
+
.addColumn('cumulativeEntitlement', 'numeric', (c) => c.notNull())
|
|
1465
|
+
.addColumn('cumulativePaid', 'numeric', (c) => c.notNull())
|
|
1466
|
+
.addColumn('deferral', 'text')
|
|
1467
|
+
.addColumn('lots', 'jsonb', (c) => c.notNull())
|
|
1468
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1469
|
+
.addPrimaryKeyConstraint('reward_accounts_pkey', ['chainId', 'vaultAddress', 'recipient'])
|
|
1470
|
+
.addForeignKeyConstraint('reward_accounts_campaign_fkey', ['chainId', 'vaultAddress'], 'rewardCampaigns', ['chainId', 'vaultAddress'], (c) => c.onDelete('cascade')),
|
|
1471
|
+
},
|
|
1472
|
+
{
|
|
1473
|
+
name: '0180_reward_runs',
|
|
1474
|
+
up: (db) => db.schema
|
|
1475
|
+
.createTable('rewardRuns')
|
|
1476
|
+
.ifNotExists()
|
|
1477
|
+
.addColumn('id', 'text', (c) => c.primaryKey().notNull())
|
|
1478
|
+
.addColumn('chainId', 'bigint', (c) => c.notNull())
|
|
1479
|
+
.addColumn('vaultAddress', 'text', (c) => c.notNull())
|
|
1480
|
+
.addColumn('startsAfter', 'bigint', (c) => c.notNull())
|
|
1481
|
+
.addColumn('endsAt', 'bigint', (c) => c.notNull())
|
|
1482
|
+
.addColumn('config', 'jsonb', (c) => c.notNull())
|
|
1483
|
+
.addColumn('phase', 'text', (c) => c.notNull())
|
|
1484
|
+
.addColumn('leaseExpiresAt', 'text')
|
|
1485
|
+
.addColumn('fence', 'bigint', (c) => c.notNull().defaultTo(0))
|
|
1486
|
+
.addColumn('evidence', 'jsonb')
|
|
1487
|
+
.addColumn('fundedAssets', 'numeric')
|
|
1488
|
+
.addColumn('mintedEarnShares', 'numeric')
|
|
1489
|
+
.addColumn('statement', 'jsonb')
|
|
1490
|
+
.addColumn('statementHash', 'text')
|
|
1491
|
+
.addColumn('root', 'text')
|
|
1492
|
+
.addColumn('rootVersion', 'bigint')
|
|
1493
|
+
.addColumn('liability', 'numeric')
|
|
1494
|
+
.addColumn('error', 'text')
|
|
1495
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1496
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1497
|
+
.addUniqueConstraint('reward_runs_boundary_key', ['chainId', 'vaultAddress', 'startsAfter'])
|
|
1498
|
+
.addForeignKeyConstraint('reward_runs_campaign_fkey', ['chainId', 'vaultAddress'], 'rewardCampaigns', ['chainId', 'vaultAddress'], (c) => c.onDelete('cascade')),
|
|
1499
|
+
},
|
|
1500
|
+
{
|
|
1501
|
+
name: '0181_reward_transaction_attempts',
|
|
1502
|
+
up: (db) => db.schema
|
|
1503
|
+
.createTable('rewardTransactionAttempts')
|
|
1504
|
+
.ifNotExists()
|
|
1505
|
+
.addColumn('id', 'text', (c) => c.primaryKey().notNull())
|
|
1506
|
+
.addColumn('chainId', 'bigint', (c) => c.notNull())
|
|
1507
|
+
.addColumn('vaultAddress', 'text', (c) => c.notNull())
|
|
1508
|
+
.addColumn('runId', 'text')
|
|
1509
|
+
.addColumn('intent', 'jsonb', (c) => c.notNull())
|
|
1510
|
+
.addColumn('intentId', 'text', (c) => c.notNull())
|
|
1511
|
+
.addColumn('signer', 'text', (c) => c.notNull())
|
|
1512
|
+
.addColumn('nonce', 'numeric')
|
|
1513
|
+
.addColumn('expiresAt', 'text')
|
|
1514
|
+
.addColumn('signedBytes', 'text')
|
|
1515
|
+
.addColumn('transactionHash', 'text')
|
|
1516
|
+
.addColumn('state', 'text', (c) => c.notNull())
|
|
1517
|
+
.addColumn('receipt', 'jsonb')
|
|
1518
|
+
.addColumn('confirmedBlockHash', 'text')
|
|
1519
|
+
.addColumn('replacementOf', 'text')
|
|
1520
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1521
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1522
|
+
.addForeignKeyConstraint('reward_transaction_attempts_campaign_fkey', ['chainId', 'vaultAddress'], 'rewardCampaigns', ['chainId', 'vaultAddress'], (c) => c.onDelete('cascade'))
|
|
1523
|
+
.addForeignKeyConstraint('reward_transaction_attempts_run_fkey', ['runId'], 'rewardRuns', ['id'], (c) => c.onDelete('cascade'))
|
|
1524
|
+
.addForeignKeyConstraint('reward_transaction_attempts_replacement_fkey', ['replacementOf'], 'rewardTransactionAttempts', ['id'], (c) => c.onDelete('restrict')),
|
|
1525
|
+
},
|
|
1526
|
+
{
|
|
1527
|
+
name: '0182_reward_transaction_attempt_nonce_key',
|
|
1528
|
+
up: (db) => raw(db, sql `CREATE UNIQUE INDEX IF NOT EXISTS reward_transaction_attempt_nonce_key ON reward_transaction_attempts (chain_id, signer, nonce) WHERE nonce IS NOT NULL`),
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
name: '0183_reward_campaigns_due_index',
|
|
1532
|
+
up: (db) => db.schema
|
|
1533
|
+
.createIndex('reward_campaigns_due_idx')
|
|
1534
|
+
.ifNotExists()
|
|
1535
|
+
.on('rewardCampaigns')
|
|
1536
|
+
.columns(['paused', 'deliveredThrough']),
|
|
1537
|
+
},
|
|
1538
|
+
{
|
|
1539
|
+
name: '0184_reward_transaction_attempt_live_intent_key',
|
|
1540
|
+
up: (db) => raw(db, sql `CREATE UNIQUE INDEX IF NOT EXISTS reward_transaction_attempt_live_intent_key ON reward_transaction_attempts (intent_id) WHERE state IN ('created', 'signed', 'broadcast')`),
|
|
1541
|
+
},
|
|
1542
|
+
{
|
|
1543
|
+
name: '0185_reward_campaign_signer',
|
|
1544
|
+
up: (db) => raw(db, sql `ALTER TABLE reward_campaigns ADD COLUMN IF NOT EXISTS signer_address text`),
|
|
1545
|
+
},
|
|
1546
|
+
{
|
|
1547
|
+
name: '0186_reward_transaction_attempt_run_index',
|
|
1548
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS reward_transaction_attempt_run_idx ON reward_transaction_attempts (run_id, created_at)`),
|
|
1549
|
+
},
|
|
1550
|
+
{
|
|
1551
|
+
name: '0187_reward_transaction_attempt_intent_run_index',
|
|
1552
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS reward_transaction_attempt_intent_run_idx ON reward_transaction_attempts (intent_id, run_id, created_at)`),
|
|
1553
|
+
},
|
|
1554
|
+
{
|
|
1555
|
+
name: '0188_reward_campaign_earn_share_decimals',
|
|
1556
|
+
up: (db) => raw(db, sql `ALTER TABLE reward_campaigns ADD COLUMN IF NOT EXISTS earn_share_decimals integer NOT NULL DEFAULT 18`),
|
|
1557
|
+
},
|
|
1558
|
+
{
|
|
1559
|
+
name: '0189_reward_campaign_earn_share_decimals_default',
|
|
1560
|
+
up: (db) => raw(db, sql `ALTER TABLE reward_campaigns ALTER COLUMN earn_share_decimals DROP DEFAULT`),
|
|
1561
|
+
},
|
|
1562
|
+
{
|
|
1563
|
+
name: '0190_routes_tables',
|
|
1564
|
+
up: (db) => raw(db, sql `DO $$
|
|
1565
|
+
DECLARE
|
|
1566
|
+
entry record;
|
|
1567
|
+
target_name text;
|
|
1568
|
+
BEGIN
|
|
1569
|
+
-- Tests replay every DDL statement on new connections, recreating empty legacy tables.
|
|
1570
|
+
IF to_regclass('routes_catalogs') IS NOT NULL THEN
|
|
1571
|
+
DROP TABLE IF EXISTS
|
|
1572
|
+
funding_deposit_request_observations,
|
|
1573
|
+
funding_deposits,
|
|
1574
|
+
funding_deposit_addresses,
|
|
1575
|
+
funding_transfer_transactions,
|
|
1576
|
+
funding_transfer_events,
|
|
1577
|
+
funding_idempotency_requests,
|
|
1578
|
+
funding_transfers,
|
|
1579
|
+
funding_routes,
|
|
1580
|
+
funding_chain_tokens,
|
|
1581
|
+
funding_tokens,
|
|
1582
|
+
funding_chains,
|
|
1583
|
+
funding_catalogs
|
|
1584
|
+
CASCADE;
|
|
1585
|
+
END IF;
|
|
1586
|
+
|
|
1587
|
+
IF to_regclass('funding_catalogs') IS NOT NULL AND to_regclass('routes_catalogs') IS NULL THEN
|
|
1588
|
+
ALTER TABLE funding_catalogs RENAME TO routes_catalogs;
|
|
1589
|
+
END IF;
|
|
1590
|
+
IF to_regclass('funding_chain_tokens') IS NOT NULL AND to_regclass('routes_chain_tokens') IS NULL THEN
|
|
1591
|
+
ALTER TABLE funding_chain_tokens RENAME TO routes_chain_tokens;
|
|
1592
|
+
END IF;
|
|
1593
|
+
IF to_regclass('funding_chains') IS NOT NULL AND to_regclass('routes_chains') IS NULL THEN
|
|
1594
|
+
ALTER TABLE funding_chains RENAME TO routes_chains;
|
|
1595
|
+
END IF;
|
|
1596
|
+
IF to_regclass('funding_deposit_addresses') IS NOT NULL AND to_regclass('routes_deposit_addresses') IS NULL THEN
|
|
1597
|
+
ALTER TABLE funding_deposit_addresses RENAME TO routes_deposit_addresses;
|
|
1598
|
+
END IF;
|
|
1599
|
+
IF to_regclass('funding_deposit_request_observations') IS NOT NULL AND to_regclass('routes_deposit_request_observations') IS NULL THEN
|
|
1600
|
+
ALTER TABLE funding_deposit_request_observations RENAME TO routes_deposit_request_observations;
|
|
1601
|
+
END IF;
|
|
1602
|
+
IF to_regclass('funding_deposits') IS NOT NULL AND to_regclass('routes_deposits') IS NULL THEN
|
|
1603
|
+
ALTER TABLE funding_deposits RENAME TO routes_deposits;
|
|
1604
|
+
END IF;
|
|
1605
|
+
IF to_regclass('funding_idempotency_requests') IS NOT NULL AND to_regclass('routes_idempotency_requests') IS NULL THEN
|
|
1606
|
+
ALTER TABLE funding_idempotency_requests RENAME TO routes_idempotency_requests;
|
|
1607
|
+
END IF;
|
|
1608
|
+
IF to_regclass('funding_routes') IS NOT NULL AND to_regclass('routes_routes') IS NULL THEN
|
|
1609
|
+
ALTER TABLE funding_routes RENAME TO routes_routes;
|
|
1610
|
+
END IF;
|
|
1611
|
+
IF to_regclass('funding_tokens') IS NOT NULL AND to_regclass('routes_tokens') IS NULL THEN
|
|
1612
|
+
ALTER TABLE funding_tokens RENAME TO routes_tokens;
|
|
1613
|
+
END IF;
|
|
1614
|
+
IF to_regclass('funding_transfer_events') IS NOT NULL AND to_regclass('routes_transfer_events') IS NULL THEN
|
|
1615
|
+
ALTER TABLE funding_transfer_events RENAME TO routes_transfer_events;
|
|
1616
|
+
END IF;
|
|
1617
|
+
IF to_regclass('funding_transfer_transactions') IS NOT NULL AND to_regclass('routes_transfer_transactions') IS NULL THEN
|
|
1618
|
+
ALTER TABLE funding_transfer_transactions RENAME TO routes_transfer_transactions;
|
|
1619
|
+
END IF;
|
|
1620
|
+
IF to_regclass('funding_transfers') IS NOT NULL AND to_regclass('routes_transfers') IS NULL THEN
|
|
1621
|
+
ALTER TABLE funding_transfers RENAME TO routes_transfers;
|
|
1622
|
+
END IF;
|
|
1623
|
+
|
|
1624
|
+
UPDATE routes_deposit_addresses
|
|
1625
|
+
SET snapshot = jsonb_set(snapshot, '{subsidize}', to_jsonb(subsidize), true)
|
|
1626
|
+
WHERE snapshot->'subsidize' IS DISTINCT FROM to_jsonb(subsidize);
|
|
1627
|
+
|
|
1628
|
+
FOR entry IN
|
|
1629
|
+
SELECT c.conname AS name, t.relname AS table_name
|
|
1630
|
+
FROM pg_constraint AS c
|
|
1631
|
+
JOIN pg_class AS t ON t.oid = c.conrelid
|
|
1632
|
+
JOIN pg_namespace AS n ON n.oid = t.relnamespace
|
|
1633
|
+
WHERE n.nspname = current_schema() AND c.conname LIKE 'funding\_%' ESCAPE '\\'
|
|
1634
|
+
LOOP
|
|
1635
|
+
target_name := regexp_replace(entry.name, '^funding_', 'routes_');
|
|
1636
|
+
EXECUTE format(
|
|
1637
|
+
'ALTER TABLE %I.%I RENAME CONSTRAINT %I TO %I',
|
|
1638
|
+
current_schema(),
|
|
1639
|
+
entry.table_name,
|
|
1640
|
+
entry.name,
|
|
1641
|
+
target_name
|
|
1642
|
+
);
|
|
1643
|
+
END LOOP;
|
|
1644
|
+
|
|
1645
|
+
FOR entry IN
|
|
1646
|
+
SELECT indexname AS name
|
|
1647
|
+
FROM pg_indexes
|
|
1648
|
+
WHERE schemaname = current_schema() AND indexname LIKE 'funding\_%' ESCAPE '\\'
|
|
1649
|
+
LOOP
|
|
1650
|
+
target_name := regexp_replace(entry.name, '^funding_', 'routes_');
|
|
1651
|
+
IF to_regclass(target_name) IS NULL THEN
|
|
1652
|
+
EXECUTE format('ALTER INDEX %I.%I RENAME TO %I', current_schema(), entry.name, target_name);
|
|
1653
|
+
ELSE
|
|
1654
|
+
EXECUTE format('DROP INDEX %I.%I', current_schema(), entry.name);
|
|
1655
|
+
END IF;
|
|
1656
|
+
END LOOP;
|
|
1657
|
+
END $$`),
|
|
1658
|
+
},
|
|
1659
|
+
{
|
|
1660
|
+
// Correct the deelUSD router boundary so registry reads can verify its bytecode.
|
|
1661
|
+
name: '0191_deelusd_earn_router_deployment_block',
|
|
1662
|
+
up: (db) => raw(db, sql `UPDATE earn_vaults
|
|
1663
|
+
SET zones = jsonb_set(zones, '{0,deploymentBlock}', '35822949'::jsonb)
|
|
1664
|
+
WHERE chain_id = 4217
|
|
1665
|
+
AND vault_address = '0x4f94590b636f5878bce585e82379de81e1ec174f'
|
|
1666
|
+
AND zones->0->>'chainId' = '421700001'
|
|
1667
|
+
AND lower(zones->0->>'earnRouter') = '0x8117e0ba6239b9695f780deb010f72a2fa4bdfb6'
|
|
1668
|
+
AND zones->0->>'deploymentBlock' = '35816964'`),
|
|
1669
|
+
},
|
|
1670
|
+
{
|
|
1671
|
+
name: '0192_reward_account_eligibility_registration',
|
|
1672
|
+
up: (db) => raw(db, sql `ALTER TABLE reward_accounts ADD COLUMN IF NOT EXISTS eligibility_registered_at text`),
|
|
1673
|
+
},
|
|
1674
|
+
{
|
|
1675
|
+
name: '0193_routes_subsidies',
|
|
1676
|
+
up: (db) => db.schema
|
|
1677
|
+
.createTable('routesSubsidies')
|
|
1678
|
+
.ifNotExists()
|
|
1679
|
+
.addColumn('apiKeyId', 'text')
|
|
1680
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1681
|
+
.addColumn('enabled', 'boolean', (c) => c.notNull())
|
|
1682
|
+
.addColumn('frequency', 'text', (c) => c.notNull())
|
|
1683
|
+
.addColumn('maxAmount', 'text')
|
|
1684
|
+
.addColumn('orgId', 'text', (c) => c.notNull().references('organizations.id').onDelete('cascade'))
|
|
1685
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1686
|
+
.addCheckConstraint('routes_subsidies_frequency_check', sql `frequency = 'tx'`)
|
|
1687
|
+
.addCheckConstraint('routes_subsidies_enabled_check', sql `CASE WHEN enabled THEN CASE WHEN max_amount ~ '^(0|[1-9][0-9]*)([.][0-9]{1,6})?$' THEN max_amount::numeric > 0 ELSE false END ELSE max_amount IS NULL END`),
|
|
1688
|
+
},
|
|
1689
|
+
{
|
|
1690
|
+
name: '0194_routes_subsidies_org_unique',
|
|
1691
|
+
up: (db) => raw(db, sql `CREATE UNIQUE INDEX IF NOT EXISTS routes_subsidies_org_unique ON routes_subsidies (org_id) WHERE api_key_id IS NULL`),
|
|
1692
|
+
},
|
|
1693
|
+
{
|
|
1694
|
+
name: '0195_routes_subsidies_api_key_unique',
|
|
1695
|
+
up: (db) => raw(db, sql `CREATE UNIQUE INDEX IF NOT EXISTS routes_subsidies_api_key_unique ON routes_subsidies (api_key_id) WHERE api_key_id IS NOT NULL`),
|
|
1696
|
+
},
|
|
1697
|
+
{
|
|
1698
|
+
name: '0196_routes_subsidies_backfill',
|
|
1699
|
+
up: (db) => raw(db, sql `INSERT INTO routes_subsidies (api_key_id, created_at, enabled, frequency, max_amount, org_id, updated_at) SELECT NULL, created_at, true, 'tx', '5', id, updated_at FROM organizations ON CONFLICT DO NOTHING`),
|
|
1700
|
+
},
|
|
1701
|
+
{
|
|
1702
|
+
name: '0197_routes_deposits_subsidy_meter_reported_at',
|
|
1703
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_deposits ADD COLUMN IF NOT EXISTS subsidy_meter_reported_at text`),
|
|
1704
|
+
},
|
|
1705
|
+
{
|
|
1706
|
+
name: '0198_routes_deposits_unreported_subsidy_index',
|
|
1707
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_deposits_unreported_subsidy_idx ON routes_deposits (status_updated_at, id) WHERE environment = 'production' AND status = 'completed' AND settlement_transaction_hash IS NOT NULL AND subsidy_amount IS NOT NULL AND subsidy_meter_reported_at IS NULL`),
|
|
1708
|
+
},
|
|
1709
|
+
{
|
|
1710
|
+
name: '0199_routes_deposits_subsidy_usage_index',
|
|
1711
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_deposits_subsidy_usage_idx ON routes_deposits (org_id, environment, status_updated_at) WHERE status = 'completed' AND settlement_transaction_hash IS NOT NULL AND subsidy_amount IS NOT NULL`),
|
|
1712
|
+
},
|
|
1713
|
+
{
|
|
1714
|
+
name: '0200_routes_deposits_legacy_subsidies_reported',
|
|
1715
|
+
up: (db) => raw(db, sql `UPDATE routes_deposits SET subsidy_meter_reported_at = coalesce(status_updated_at, updated_at) WHERE environment = 'production' AND settlement_transaction_hash IS NOT NULL AND subsidy_amount IS NOT NULL AND subsidy_meter_reported_at IS NULL`),
|
|
1716
|
+
},
|
|
1717
|
+
{
|
|
1718
|
+
name: '0201_routes_deposits_billable_subsidy_index',
|
|
1719
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_deposits_billable_subsidy_idx ON routes_deposits (status_updated_at, id) WHERE environment = 'production' AND settlement_transaction_hash IS NOT NULL AND subsidy_amount IS NOT NULL AND (subsidy_amount->>'baseUnits')::numeric > 0 AND subsidy_meter_reported_at IS NULL AND (status = 'completed' OR (status IN ('action-required', 'settling') AND tempo_gas_paid IS NOT NULL))`),
|
|
1720
|
+
},
|
|
1721
|
+
{
|
|
1722
|
+
name: '0202_routes_deposits_provider_subsidy',
|
|
1723
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_deposits ADD COLUMN IF NOT EXISTS provider_subsidy jsonb`),
|
|
1724
|
+
},
|
|
1725
|
+
{
|
|
1726
|
+
name: '0203_routes_deposits_billable_subsidy_index_v2',
|
|
1727
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_deposits_billable_subsidy_v2_idx ON routes_deposits (status_updated_at, id) WHERE environment = 'production' AND subsidy_meter_reported_at IS NULL AND (status = 'completed' OR (status IN ('action-required', 'settling') AND tempo_gas_paid IS NOT NULL)) AND (((provider_subsidy->'amount'->>'baseUnits')::numeric > 0) OR (settlement_transaction_hash IS NOT NULL AND (subsidy_amount->>'baseUnits')::numeric > 0))`),
|
|
1728
|
+
},
|
|
1729
|
+
{
|
|
1730
|
+
name: '0204_routes_deposits_subsidy_usage_index_v2',
|
|
1731
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_deposits_subsidy_usage_v2_idx ON routes_deposits (org_id, environment, subsidy_meter_reported_at) WHERE (provider_subsidy->'amount'->>'baseUnits')::numeric > 0 OR (subsidy_amount->>'baseUnits')::numeric > 0`),
|
|
1732
|
+
},
|
|
1733
|
+
{
|
|
1734
|
+
name: '0205_sponsored_transactions_admin_index',
|
|
1735
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS sponsored_transactions_admin_idx ON sponsored_transactions (created_at DESC, id DESC)`),
|
|
1736
|
+
},
|
|
1737
|
+
{
|
|
1738
|
+
name: '0206_routes_deposits_admin_subsidy_index',
|
|
1739
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_deposits_admin_subsidy_idx ON routes_deposits (updated_at DESC, id DESC) WHERE (provider_subsidy->'amount'->>'baseUnits')::numeric > 0 OR (subsidy_amount->>'baseUnits')::numeric > 0`),
|
|
1740
|
+
},
|
|
1741
|
+
{
|
|
1742
|
+
name: '0207_routes_deposit_addresses_drop_api_key',
|
|
1743
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_deposit_addresses DROP COLUMN IF EXISTS api_key_id`),
|
|
1744
|
+
},
|
|
1745
|
+
{
|
|
1746
|
+
name: '0208_routes_subsidies_drop_api_key_policies',
|
|
1747
|
+
up: (db) => raw(db, sql `DO $$
|
|
1748
|
+
BEGIN
|
|
1749
|
+
IF EXISTS (
|
|
1750
|
+
SELECT 1
|
|
1751
|
+
FROM information_schema.columns
|
|
1752
|
+
WHERE table_schema = current_schema()
|
|
1753
|
+
AND table_name = 'routes_subsidies'
|
|
1754
|
+
AND column_name = 'api_key_id'
|
|
1755
|
+
) THEN
|
|
1756
|
+
DELETE FROM routes_subsidies WHERE api_key_id IS NOT NULL;
|
|
1757
|
+
END IF;
|
|
1758
|
+
END $$`),
|
|
1759
|
+
},
|
|
1760
|
+
{
|
|
1761
|
+
name: '0209_routes_subsidies_drop_api_key_indexes',
|
|
1762
|
+
up: (db) => raw(db, sql `DROP INDEX IF EXISTS routes_subsidies_org_unique, routes_subsidies_api_key_unique`),
|
|
1763
|
+
},
|
|
1764
|
+
{
|
|
1765
|
+
name: '0210_routes_subsidies_drop_api_key',
|
|
1766
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_subsidies DROP COLUMN IF EXISTS api_key_id`),
|
|
1767
|
+
},
|
|
1768
|
+
{
|
|
1769
|
+
name: '0211_routes_subsidies_org_unique',
|
|
1770
|
+
up: (db) => raw(db, sql `CREATE UNIQUE INDEX IF NOT EXISTS routes_subsidies_org_unique ON routes_subsidies (org_id)`),
|
|
1771
|
+
},
|
|
1772
|
+
{
|
|
1773
|
+
name: '0212_routes_transfer_subsidy_nonces',
|
|
1774
|
+
up: (db) => db.schema
|
|
1775
|
+
.createTable('routesTransferSubsidyNonces')
|
|
1776
|
+
.ifNotExists()
|
|
1777
|
+
.addColumn('account', 'text', (c) => c.notNull())
|
|
1778
|
+
.addColumn('chainId', 'text', (c) => c.notNull())
|
|
1779
|
+
.addColumn('nextNonce', 'text', (c) => c.notNull())
|
|
1780
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1781
|
+
.addPrimaryKeyConstraint('routes_transfer_subsidy_nonces_pkey', ['chainId', 'account']),
|
|
1782
|
+
},
|
|
1783
|
+
{
|
|
1784
|
+
name: '0213_routes_transfers_subsidy_amount',
|
|
1785
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_amount jsonb`), // prettier-ignore
|
|
1786
|
+
},
|
|
1787
|
+
{
|
|
1788
|
+
name: '0214_routes_transfers_subsidy_meter_reported_at',
|
|
1789
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_meter_reported_at text`), // prettier-ignore
|
|
1790
|
+
},
|
|
1791
|
+
{
|
|
1792
|
+
name: '0215_routes_transfers_subsidy_transaction_hash',
|
|
1793
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_transaction_hash text`), // prettier-ignore
|
|
1794
|
+
},
|
|
1795
|
+
{
|
|
1796
|
+
name: '0216_routes_transfers_billable_subsidy_index',
|
|
1797
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_transfers_billable_subsidy_idx ON routes_transfers (status_updated_at, id) WHERE environment = 'production' AND status = 'completed' AND subsidy_transaction_hash IS NOT NULL AND subsidy_amount IS NOT NULL AND (subsidy_amount->>'baseUnits')::numeric > 0 AND subsidy_meter_reported_at IS NULL`),
|
|
1798
|
+
},
|
|
1799
|
+
{
|
|
1800
|
+
name: '0217_routes_transfers_subsidy_account',
|
|
1801
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_account text`), // prettier-ignore
|
|
1802
|
+
},
|
|
1803
|
+
{
|
|
1804
|
+
name: '0218_routes_transfers_subsidy_chain_id',
|
|
1805
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_chain_id text`), // prettier-ignore
|
|
1806
|
+
},
|
|
1807
|
+
{
|
|
1808
|
+
name: '0219_routes_transfers_subsidy_native_amount',
|
|
1809
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_native_amount text`), // prettier-ignore
|
|
1810
|
+
},
|
|
1811
|
+
{
|
|
1812
|
+
name: '0220_routes_transfers_subsidy_token_address',
|
|
1813
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_token_address text`), // prettier-ignore
|
|
1814
|
+
},
|
|
1815
|
+
{
|
|
1816
|
+
name: '0221_routes_transfers_subsidy_reservation_index',
|
|
1817
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_transfers_subsidy_reservation_idx ON routes_transfers (subsidy_chain_id, subsidy_account, subsidy_token_address) WHERE status IN ('processing', 'action-required') AND subsidy_amount IS NOT NULL AND (subsidy_amount->>'baseUnits')::numeric > 0`),
|
|
1818
|
+
},
|
|
1819
|
+
{
|
|
1820
|
+
name: '0222_routes_transfers_subsidy_commitment_amount',
|
|
1821
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS subsidy_commitment_amount jsonb`), // prettier-ignore
|
|
1822
|
+
},
|
|
1823
|
+
{
|
|
1824
|
+
name: '0223_routes_transfers_provider_delivered_at',
|
|
1825
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfers ADD COLUMN IF NOT EXISTS provider_delivered_at text`), // prettier-ignore
|
|
1826
|
+
},
|
|
1827
|
+
{
|
|
1828
|
+
name: '0224_routes_transfer_subsidy_nonces_blocked_at',
|
|
1829
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfer_subsidy_nonces ADD COLUMN IF NOT EXISTS blocked_at text`), // prettier-ignore
|
|
1830
|
+
},
|
|
1831
|
+
{
|
|
1832
|
+
name: '0225_routes_transfer_subsidy_nonces_blocked_transfer_id',
|
|
1833
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfer_subsidy_nonces ADD COLUMN IF NOT EXISTS blocked_transfer_id text`), // prettier-ignore
|
|
1834
|
+
},
|
|
1835
|
+
{
|
|
1836
|
+
name: '0226_routes_transfer_subsidy_nonces_blocked_reason',
|
|
1837
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_transfer_subsidy_nonces ADD COLUMN IF NOT EXISTS blocked_reason text`), // prettier-ignore
|
|
1838
|
+
},
|
|
1839
|
+
{
|
|
1840
|
+
name: '0227_routes_transfers_subsidy_commitment_index',
|
|
1841
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_transfers_subsidy_commitment_idx ON routes_transfers (subsidy_chain_id, subsidy_account, subsidy_token_address) WHERE status IN ('awaiting-source', 'processing', 'action-required', 'refunding') AND subsidy_commitment_amount IS NOT NULL AND (subsidy_commitment_amount->>'baseUnits')::numeric > 0`),
|
|
1842
|
+
},
|
|
1843
|
+
{
|
|
1844
|
+
name: '0228_routes_transfer_subsidy_nonces_block_check',
|
|
1845
|
+
up: (db) => raw(db, sql `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'routes_transfer_subsidy_nonces_block_check' AND conrelid = 'routes_transfer_subsidy_nonces'::regclass) THEN ALTER TABLE routes_transfer_subsidy_nonces ADD CONSTRAINT routes_transfer_subsidy_nonces_block_check CHECK ((blocked_at IS NULL AND blocked_transfer_id IS NULL AND blocked_reason IS NULL) OR (blocked_at IS NOT NULL AND blocked_transfer_id IS NOT NULL AND blocked_reason = 'broadcast_rejected')); END IF; END $$`),
|
|
1846
|
+
},
|
|
1847
|
+
{
|
|
1848
|
+
// The test harness replays idempotent DDL on new connections, so legacy
|
|
1849
|
+
// index migrations still need this unused physical column to exist.
|
|
1850
|
+
name: '0229_routes_subsidies_legacy_api_key_compatibility',
|
|
1851
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_subsidies ADD COLUMN IF NOT EXISTS api_key_id text`), // prettier-ignore
|
|
1852
|
+
},
|
|
1853
|
+
{
|
|
1854
|
+
name: '0230_routes_transfers_admin_subsidy_index',
|
|
1855
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_transfers_admin_subsidy_idx ON routes_transfers (updated_at DESC, id DESC) WHERE subsidy_amount IS NOT NULL AND (subsidy_amount->>'baseUnits')::numeric > 0`),
|
|
1856
|
+
},
|
|
1857
|
+
{
|
|
1858
|
+
name: '0231_routes_transfers_expired_subsidy_commitments_index',
|
|
1859
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_transfers_expired_subsidy_commitments_idx ON routes_transfers (quote_expires_at, id) WHERE status = 'awaiting-source' AND subsidy_commitment_amount IS NOT NULL AND (subsidy_commitment_amount->>'baseUnits')::numeric > 0`),
|
|
1860
|
+
},
|
|
1861
|
+
{
|
|
1862
|
+
name: '0232_sponsorship_reconciliation_cursors',
|
|
1863
|
+
up: (db) => db.schema
|
|
1864
|
+
.createTable('sponsorshipReconciliationCursors')
|
|
1865
|
+
.ifNotExists()
|
|
1866
|
+
.addColumn('blockNumber', 'text', (c) => c.notNull())
|
|
1867
|
+
.addColumn('chainId', 'integer', (c) => c.notNull())
|
|
1868
|
+
.addColumn('feePayer', 'text', (c) => c.notNull())
|
|
1869
|
+
.addColumn('transactionIndex', 'integer', (c) => c.notNull())
|
|
1870
|
+
.addColumn('updatedAt', 'text', (c) => c.notNull())
|
|
1871
|
+
.addPrimaryKeyConstraint('sponsorship_reconciliation_cursors_pkey', [
|
|
1872
|
+
'chainId',
|
|
1873
|
+
'feePayer',
|
|
1874
|
+
]),
|
|
1875
|
+
},
|
|
1876
|
+
{
|
|
1877
|
+
name: '0233_sponsored_transactions_recovery_index',
|
|
1878
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS sponsored_transactions_recovery_idx ON sponsored_transactions (finalized_at, chain_id, created_at) WHERE status = 'failed' AND transaction_hash IS NULL`),
|
|
1879
|
+
},
|
|
1880
|
+
{
|
|
1881
|
+
name: '0234_sponsorship_reconciliation_progress',
|
|
1882
|
+
up: (db) => raw(db, sql `ALTER TABLE sponsorship_reconciliation_cursors ADD COLUMN IF NOT EXISTS complete boolean NOT NULL DEFAULT false, ADD COLUMN IF NOT EXISTS retry_count integer NOT NULL DEFAULT 0, ADD COLUMN IF NOT EXISTS retry_key text, ADD COLUMN IF NOT EXISTS revision text NOT NULL DEFAULT ''`),
|
|
1883
|
+
},
|
|
1884
|
+
{
|
|
1885
|
+
name: '0235_routes_deposits_unattributed_index',
|
|
1886
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_deposits_unattributed_idx ON routes_deposits (deposit_address_id, created_at, id) WHERE provider_request_id IS NULL`),
|
|
1887
|
+
},
|
|
1888
|
+
{
|
|
1889
|
+
name: '0236_routes_transfer_subsidies',
|
|
1890
|
+
up: (db) => db.schema
|
|
1891
|
+
.createTable('routesTransferSubsidies')
|
|
1892
|
+
.ifNotExists()
|
|
1893
|
+
.addColumn('sourceChainId', 'text', (c) => c.notNull())
|
|
1894
|
+
.addColumn('transactionRef', 'text', (c) => c.notNull())
|
|
1895
|
+
.addColumn('destinationChainId', 'text', (c) => c.notNull())
|
|
1896
|
+
.addColumn('recipient', 'text', (c) => c.notNull())
|
|
1897
|
+
.addColumn('tokenAddress', 'text', (c) => c.notNull())
|
|
1898
|
+
.addColumn('transaction', 'jsonb', (c) => c.notNull())
|
|
1899
|
+
.addColumn('transferId', 'text', (c) => c.notNull())
|
|
1900
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
1901
|
+
.addPrimaryKeyConstraint('routes_transfer_subsidies_pkey', [
|
|
1902
|
+
'sourceChainId',
|
|
1903
|
+
'transactionRef',
|
|
1904
|
+
]),
|
|
1905
|
+
},
|
|
1906
|
+
{
|
|
1907
|
+
name: '0237_routes_transfer_subsidies_capture',
|
|
1908
|
+
// Capture legacy Worker writes during rollout and retain settlement evidence after transfer deletion.
|
|
1909
|
+
up: (db) => raw(db, sql `DO $$
|
|
1910
|
+
BEGIN
|
|
1911
|
+
LOCK TABLE routes_transfers IN SHARE ROW EXCLUSIVE MODE;
|
|
1912
|
+
INSERT INTO routes_transfer_subsidies (
|
|
1913
|
+
source_chain_id, transaction_ref, destination_chain_id, recipient,
|
|
1914
|
+
token_address, transaction, transfer_id, created_at
|
|
1915
|
+
)
|
|
1916
|
+
SELECT snapshot->'sourceChain'->>'id', snapshot->'sourceTransactionHashes'->>0,
|
|
1917
|
+
subsidy_chain_id, lower(snapshot->>'recipient'), subsidy_token_address,
|
|
1918
|
+
provider_state->'transferSubsidy', id, updated_at
|
|
1919
|
+
FROM routes_transfers
|
|
1920
|
+
WHERE subsidy_transaction_hash IS NOT NULL
|
|
1921
|
+
AND provider_state->'transferSubsidy' IS NOT NULL
|
|
1922
|
+
AND snapshot->'sourceTransactionHashes'->>0 IS NOT NULL
|
|
1923
|
+
ON CONFLICT DO NOTHING;
|
|
1924
|
+
|
|
1925
|
+
CREATE OR REPLACE FUNCTION capture_routes_transfer_subsidy() RETURNS trigger
|
|
1926
|
+
LANGUAGE plpgsql SET search_path FROM CURRENT AS $capture$
|
|
1927
|
+
DECLARE
|
|
1928
|
+
settlement routes_transfer_subsidies%ROWTYPE;
|
|
1929
|
+
source_chain text;
|
|
1930
|
+
source_ref text;
|
|
1931
|
+
BEGIN
|
|
1932
|
+
IF NEW.subsidy_transaction_hash IS NULL OR NEW.provider_state->'transferSubsidy' IS NULL THEN
|
|
1933
|
+
RETURN NEW;
|
|
1934
|
+
END IF;
|
|
1935
|
+
source_chain := NEW.snapshot->'sourceChain'->>'id';
|
|
1936
|
+
source_ref := NEW.snapshot->'sourceTransactionHashes'->>0;
|
|
1937
|
+
IF source_ref IS NULL THEN
|
|
1938
|
+
RAISE EXCEPTION 'Subsidy source evidence is missing';
|
|
1939
|
+
END IF;
|
|
1940
|
+
INSERT INTO routes_transfer_subsidies (
|
|
1941
|
+
source_chain_id, transaction_ref, destination_chain_id, recipient,
|
|
1942
|
+
token_address, transaction, transfer_id, created_at
|
|
1943
|
+
) VALUES (
|
|
1944
|
+
source_chain, source_ref, NEW.subsidy_chain_id, lower(NEW.snapshot->>'recipient'),
|
|
1945
|
+
NEW.subsidy_token_address, NEW.provider_state->'transferSubsidy', NEW.id, NEW.updated_at
|
|
1946
|
+
) ON CONFLICT DO NOTHING;
|
|
1947
|
+
SELECT * INTO STRICT settlement FROM routes_transfer_subsidies
|
|
1948
|
+
WHERE source_chain_id = source_chain AND transaction_ref = source_ref;
|
|
1949
|
+
IF settlement.transaction IS DISTINCT FROM NEW.provider_state->'transferSubsidy'
|
|
1950
|
+
OR settlement.destination_chain_id IS DISTINCT FROM NEW.subsidy_chain_id
|
|
1951
|
+
OR settlement.recipient IS DISTINCT FROM lower(NEW.snapshot->>'recipient')
|
|
1952
|
+
OR settlement.token_address IS DISTINCT FROM NEW.subsidy_token_address THEN
|
|
1953
|
+
RAISE EXCEPTION 'Source payment already has a different subsidy settlement';
|
|
1954
|
+
END IF;
|
|
1955
|
+
IF settlement.transfer_id <> NEW.id THEN
|
|
1956
|
+
NEW.subsidy_amount := NULL;
|
|
1957
|
+
NEW.subsidy_commitment_amount := NULL;
|
|
1958
|
+
NEW.subsidy_native_amount := NULL;
|
|
1959
|
+
END IF;
|
|
1960
|
+
RETURN NEW;
|
|
1961
|
+
END $capture$;
|
|
1962
|
+
DROP TRIGGER IF EXISTS routes_transfer_subsidy_capture ON routes_transfers;
|
|
1963
|
+
CREATE TRIGGER routes_transfer_subsidy_capture
|
|
1964
|
+
BEFORE INSERT OR UPDATE OF provider_state, subsidy_transaction_hash, subsidy_amount
|
|
1965
|
+
ON routes_transfers FOR EACH ROW EXECUTE FUNCTION capture_routes_transfer_subsidy();
|
|
1966
|
+
END $$`),
|
|
1967
|
+
},
|
|
1968
|
+
{
|
|
1969
|
+
name: '0238_routes_transfer_source_claim_scope',
|
|
1970
|
+
// Derive tenancy for old and new writers before replacing global source uniqueness.
|
|
1971
|
+
up: (db) => raw(db, sql `DO $$
|
|
1972
|
+
BEGIN
|
|
1973
|
+
ALTER TABLE routes_transfer_transactions
|
|
1974
|
+
ADD COLUMN IF NOT EXISTS org_id text,
|
|
1975
|
+
ADD COLUMN IF NOT EXISTS environment text,
|
|
1976
|
+
ADD COLUMN IF NOT EXISTS project_id text;
|
|
1977
|
+
UPDATE routes_transfer_transactions AS evidence
|
|
1978
|
+
SET org_id = owner.org_id, environment = owner.environment, project_id = owner.project_id
|
|
1979
|
+
FROM routes_transfers AS owner WHERE owner.id = evidence.transfer_id;
|
|
1980
|
+
ALTER TABLE routes_transfer_transactions
|
|
1981
|
+
ALTER COLUMN org_id SET NOT NULL, ALTER COLUMN environment SET NOT NULL;
|
|
1982
|
+
CREATE OR REPLACE FUNCTION scope_routes_transfer_transaction() RETURNS trigger
|
|
1983
|
+
LANGUAGE plpgsql SET search_path FROM CURRENT AS $scope$
|
|
1984
|
+
BEGIN
|
|
1985
|
+
SELECT org_id, environment, project_id INTO STRICT NEW.org_id, NEW.environment, NEW.project_id
|
|
1986
|
+
FROM routes_transfers WHERE id = NEW.transfer_id;
|
|
1987
|
+
RETURN NEW;
|
|
1988
|
+
END $scope$;
|
|
1989
|
+
DROP TRIGGER IF EXISTS routes_transfer_transaction_scope ON routes_transfer_transactions;
|
|
1990
|
+
CREATE TRIGGER routes_transfer_transaction_scope
|
|
1991
|
+
BEFORE INSERT OR UPDATE ON routes_transfer_transactions
|
|
1992
|
+
FOR EACH ROW EXECUTE FUNCTION scope_routes_transfer_transaction();
|
|
1993
|
+
CREATE UNIQUE INDEX IF NOT EXISTS routes_transfer_transactions_source_owner_unique
|
|
1994
|
+
ON routes_transfer_transactions (org_id, environment, project_id, chain_id, transaction_ref)
|
|
1995
|
+
NULLS NOT DISTINCT WHERE role = 'source';
|
|
1996
|
+
DROP INDEX IF EXISTS routes_transfer_transactions_source_unique;
|
|
1997
|
+
END $$`),
|
|
1998
|
+
},
|
|
1999
|
+
{
|
|
2000
|
+
name: '0239_routes_transfer_source_lookup_index',
|
|
2001
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_transfer_transactions_source_lookup_idx ON routes_transfer_transactions (chain_id, transaction_ref) WHERE role = 'source'`),
|
|
2002
|
+
},
|
|
2003
|
+
{
|
|
2004
|
+
name: '0240_sponsored_transactions_finalization_attempted_at',
|
|
2005
|
+
up: (db) => raw(db, sql `ALTER TABLE sponsored_transactions ADD COLUMN IF NOT EXISTS finalization_attempted_at text`),
|
|
2006
|
+
},
|
|
2007
|
+
{
|
|
2008
|
+
name: '0241_sponsored_transactions_finalization_queue_index',
|
|
2009
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS sponsored_transactions_finalization_queue_idx ON sponsored_transactions (finalization_attempted_at NULLS FIRST, created_at, id) WHERE status = 'pending'`),
|
|
2010
|
+
},
|
|
2011
|
+
{
|
|
2012
|
+
name: '0242_api_key_owner_tombstones',
|
|
2013
|
+
up: (db) => db.schema
|
|
2014
|
+
.createTable('api_key_owner_tombstones')
|
|
2015
|
+
.ifNotExists()
|
|
2016
|
+
.addColumn('id', 'text', (column) => column.primaryKey())
|
|
2017
|
+
.addColumn('createdAt', 'text', (column) => column.notNull()),
|
|
2018
|
+
},
|
|
2019
|
+
{
|
|
2020
|
+
name: '0243_api_key_owner_admissions',
|
|
2021
|
+
up: (db) => db.schema
|
|
2022
|
+
.createTable('api_key_owner_admissions')
|
|
2023
|
+
.ifNotExists()
|
|
2024
|
+
.addColumn('orgId', 'text', (column) => column.primaryKey())
|
|
2025
|
+
.addColumn('liveKeys', 'integer', (column) => column.notNull())
|
|
2026
|
+
.addColumn('updatedAt', 'text', (column) => column.notNull()),
|
|
2027
|
+
},
|
|
2028
|
+
{
|
|
2029
|
+
name: '0244_api_key_admissions',
|
|
2030
|
+
up: (db) => db.schema
|
|
2031
|
+
.createTable('api_key_admissions')
|
|
2032
|
+
.ifNotExists()
|
|
2033
|
+
.addColumn('expiresAt', 'text')
|
|
2034
|
+
.addColumn('id', 'text', (column) => column.notNull().unique())
|
|
2035
|
+
.addColumn('orgId', 'text', (column) => column.notNull())
|
|
2036
|
+
.addColumn('projectId', 'text')
|
|
2037
|
+
.addPrimaryKeyConstraint('api_key_admissions_pkey', ['orgId', 'id']),
|
|
2038
|
+
},
|
|
2039
|
+
{
|
|
2040
|
+
name: '0245_api_key_admission_bootstraps',
|
|
2041
|
+
up: (db) => db.schema
|
|
2042
|
+
.createTable('api_key_admission_bootstraps')
|
|
2043
|
+
.ifNotExists()
|
|
2044
|
+
.addColumn('orgId', 'text', (column) => column.primaryKey())
|
|
2045
|
+
.addColumn('bootstrappedAt', 'text', (column) => column.notNull()),
|
|
2046
|
+
},
|
|
2047
|
+
{
|
|
2048
|
+
name: '0246_api_key_revocations',
|
|
2049
|
+
up: (db) => db.schema
|
|
2050
|
+
.createTable('api_key_revocations')
|
|
2051
|
+
.ifNotExists()
|
|
2052
|
+
.addColumn('id', 'text', (column) => column.primaryKey())
|
|
2053
|
+
.addColumn('revokedAt', 'text', (column) => column.notNull()),
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
name: '0247_api_key_revocation_lifecycle',
|
|
2057
|
+
up: (db) => raw(db, sql `ALTER TABLE api_key_revocations ADD COLUMN IF NOT EXISTS org_id text REFERENCES organizations(id) ON DELETE CASCADE, ADD COLUMN IF NOT EXISTS expires_at text`),
|
|
2058
|
+
},
|
|
2059
|
+
{
|
|
2060
|
+
name: '0248_api_key_revocation_expiry_backfill',
|
|
2061
|
+
up: (db) => raw(db, sql `UPDATE api_key_revocations SET expires_at = to_char(revoked_at::timestamptz + interval '7 days', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') WHERE expires_at IS NULL`),
|
|
2062
|
+
},
|
|
2063
|
+
{
|
|
2064
|
+
name: '0249_api_key_revocation_expiry_required',
|
|
2065
|
+
up: (db) => raw(db, sql `ALTER TABLE api_key_revocations ALTER COLUMN expires_at SET NOT NULL`),
|
|
2066
|
+
},
|
|
2067
|
+
{
|
|
2068
|
+
name: '0250_api_key_revocation_expiry_index',
|
|
2069
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS api_key_revocations_expiry_idx ON api_key_revocations (expires_at, id)`),
|
|
2070
|
+
},
|
|
2071
|
+
{
|
|
2072
|
+
name: '0251_api_key_revocation_org_index',
|
|
2073
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS api_key_revocations_org_idx ON api_key_revocations (org_id) WHERE org_id IS NOT NULL`),
|
|
2074
|
+
},
|
|
2075
|
+
{
|
|
2076
|
+
// Triggers make migrate-before-deploy safe: older Workers still fence raw owner deletes and acquire the same locks as new key writes.
|
|
2077
|
+
name: '0252_api_key_owner_delete_trigger_function',
|
|
2078
|
+
up: (db) => raw(db, sql `CREATE OR REPLACE FUNCTION api_key_fence_deleted_owner() RETURNS trigger LANGUAGE plpgsql AS $api_key_fence$
|
|
2079
|
+
DECLARE owner_key text;
|
|
2080
|
+
BEGIN
|
|
2081
|
+
IF TG_TABLE_NAME = 'organizations' THEN
|
|
2082
|
+
owner_key := 'organization:' || OLD.id;
|
|
2083
|
+
ELSE
|
|
2084
|
+
PERFORM pg_advisory_xact_lock(hashtextextended('organization:' || OLD.org_id, 0));
|
|
2085
|
+
owner_key := 'project:' || OLD.org_id || ':' || OLD.id;
|
|
2086
|
+
END IF;
|
|
2087
|
+
PERFORM pg_advisory_xact_lock(hashtextextended(owner_key, 0));
|
|
2088
|
+
EXECUTE format('INSERT INTO %I.api_key_owner_tombstones (id, created_at) VALUES ($1, $2) ON CONFLICT (id) DO NOTHING', TG_TABLE_SCHEMA)
|
|
2089
|
+
USING owner_key, to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"');
|
|
2090
|
+
RETURN OLD;
|
|
2091
|
+
END
|
|
2092
|
+
$api_key_fence$`),
|
|
2093
|
+
},
|
|
2094
|
+
{
|
|
2095
|
+
name: '0253_api_key_organization_delete_trigger',
|
|
2096
|
+
up: (db) => raw(db, sql `DO $api_key_trigger$
|
|
2097
|
+
BEGIN
|
|
2098
|
+
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'api_key_fence_deleted_organization' AND tgrelid = 'organizations'::regclass) THEN
|
|
2099
|
+
CREATE TRIGGER api_key_fence_deleted_organization BEFORE DELETE ON organizations FOR EACH ROW EXECUTE FUNCTION api_key_fence_deleted_owner();
|
|
2100
|
+
END IF;
|
|
2101
|
+
END
|
|
2102
|
+
$api_key_trigger$`),
|
|
2103
|
+
},
|
|
2104
|
+
{
|
|
2105
|
+
name: '0254_api_key_project_delete_trigger',
|
|
2106
|
+
up: (db) => raw(db, sql `DO $api_key_trigger$
|
|
2107
|
+
BEGIN
|
|
2108
|
+
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'api_key_fence_deleted_project' AND tgrelid = 'projects'::regclass) THEN
|
|
2109
|
+
CREATE TRIGGER api_key_fence_deleted_project BEFORE DELETE ON projects FOR EACH ROW EXECUTE FUNCTION api_key_fence_deleted_owner();
|
|
2110
|
+
END IF;
|
|
2111
|
+
END
|
|
2112
|
+
$api_key_trigger$`),
|
|
2113
|
+
},
|
|
2114
|
+
{
|
|
2115
|
+
// The table lock partitions legacy writers; a 24-hour organization-deletion embargo lets pre-fence Worker requests finish before owners can disappear.
|
|
2116
|
+
name: '0255_routes_organization_delete_fence',
|
|
2117
|
+
up: (db) => raw(db, sql `DO $migration$ BEGIN LOCK TABLE routes_idempotency_requests IN SHARE ROW EXCLUSIVE MODE; EXECUTE $definition$ CREATE OR REPLACE FUNCTION api_key_fence_deleted_owner() RETURNS trigger LANGUAGE plpgsql AS $body$ DECLARE owner_key text; BEGIN IF TG_TABLE_NAME = 'organizations' THEN PERFORM pg_advisory_xact_lock(hashtextextended('routes-subsidy:' || OLD.id, 0)); PERFORM pg_advisory_xact_lock(hashtextextended('routes-ownerless-legacy', 0)); owner_key := 'organization:' || OLD.id; ELSE PERFORM pg_advisory_xact_lock(hashtextextended('organization:' || OLD.org_id, 0)); owner_key := 'project:' || OLD.org_id || ':' || OLD.id; END IF; PERFORM pg_advisory_xact_lock(hashtextextended(owner_key, 0)); EXECUTE format('INSERT INTO %I.api_key_owner_tombstones (id, created_at) VALUES ($1, $2) ON CONFLICT (id) DO NOTHING', TG_TABLE_SCHEMA) USING owner_key, to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'); IF TG_TABLE_NAME = 'organizations' THEN EXECUTE format('INSERT INTO %I.api_key_owner_tombstones (id, created_at) VALUES ($1, $2) ON CONFLICT (id) DO NOTHING', TG_TABLE_SCHEMA) USING 'routes-ownerless-legacy-cutoff', to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"'); END IF; RETURN OLD; END $body$ $definition$; EXECUTE $definition$ CREATE OR REPLACE FUNCTION fence_routes_organization_delete() RETURNS trigger LANGUAGE plpgsql SET search_path FROM CURRENT AS $body$ BEGIN PERFORM pg_advisory_xact_lock(hashtextextended('routes-ownerless-legacy', 0)); IF EXISTS (SELECT 1 FROM api_key_owner_tombstones WHERE id = 'routes-legacy-attempt-drain' AND created_at::timestamptz + interval '24 hours' > CURRENT_TIMESTAMP) THEN RAISE EXCEPTION 'route lifecycle rollout drain is active' USING ERRCODE = '23503'; END IF; IF EXISTS (SELECT 1 FROM routes_deposit_addresses WHERE org_id = OLD.id AND (status != 'deactivated' OR (provider_id = 'relay' AND subsidize))) OR EXISTS (SELECT 1 FROM routes_idempotency_requests AS request WHERE request.status IN ('pending', 'provisioned') AND (request.expires_at::timestamptz > CURRENT_TIMESTAMP OR COALESCE((to_jsonb(request)->>'irrevocable')::boolean, false)) AND (((to_jsonb(request)->>'org_id') = OLD.id AND (to_jsonb(request)->>'operation') = 'deposit_address') OR to_jsonb(request)->>'org_id' IS NULL OR to_jsonb(request)->>'operation' IS NULL)) THEN RAISE EXCEPTION 'organization has active route deposit address work' USING ERRCODE = '23503'; END IF; RETURN OLD; END $body$ $definition$; EXECUTE $definition$ CREATE OR REPLACE FUNCTION fence_routes_deposit_address_owner() RETURNS trigger LANGUAGE plpgsql SET search_path FROM CURRENT AS $body$ BEGIN PERFORM pg_advisory_xact_lock(hashtextextended('routes-subsidy:' || NEW.org_id, 0)); IF EXISTS (SELECT 1 FROM api_key_owner_tombstones WHERE id = 'organization:' || NEW.org_id) THEN RAISE EXCEPTION 'route deposit address owner was deleted' USING ERRCODE = '23503'; END IF; RETURN NEW; END $body$ $definition$; EXECUTE $definition$ CREATE OR REPLACE FUNCTION fence_routes_idempotency_owner() RETURNS trigger LANGUAGE plpgsql SET search_path FROM CURRENT AS $body$ DECLARE owner_id text; BEGIN owner_id := to_jsonb(NEW)->>'org_id'; IF owner_id IS NULL THEN SELECT org_id INTO owner_id FROM api_key_admissions WHERE id = NEW.api_key_id; END IF; IF owner_id IS NULL THEN PERFORM pg_advisory_xact_lock(hashtextextended('routes-ownerless-legacy', 0)); IF EXISTS (SELECT 1 FROM api_key_owner_tombstones WHERE id = 'routes-ownerless-legacy-cutoff') THEN RAISE EXCEPTION 'ownerless route idempotency creation is disabled' USING ERRCODE = '23503'; END IF; RETURN NEW; END IF; PERFORM pg_advisory_xact_lock(hashtextextended('routes-subsidy:' || owner_id, 0)); IF EXISTS (SELECT 1 FROM api_key_owner_tombstones WHERE id = 'organization:' || owner_id) THEN RAISE EXCEPTION 'route idempotency owner was deleted' USING ERRCODE = '23503'; END IF; RETURN NEW; END $body$ $definition$; EXECUTE 'CREATE OR REPLACE TRIGGER routes_deposit_address_owner_fence BEFORE INSERT OR UPDATE OF org_id ON routes_deposit_addresses FOR EACH ROW EXECUTE FUNCTION fence_routes_deposit_address_owner()'; EXECUTE 'CREATE OR REPLACE TRIGGER routes_idempotency_owner_fence BEFORE INSERT OR UPDATE ON routes_idempotency_requests FOR EACH ROW EXECUTE FUNCTION fence_routes_idempotency_owner()'; EXECUTE 'CREATE OR REPLACE TRIGGER routes_organization_delete_fence BEFORE DELETE ON organizations FOR EACH ROW EXECUTE FUNCTION fence_routes_organization_delete()'; INSERT INTO api_key_owner_tombstones (id, created_at) VALUES ('routes-legacy-attempt-drain', to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')) ON CONFLICT (id) DO NOTHING; END $migration$`),
|
|
2118
|
+
},
|
|
2119
|
+
{
|
|
2120
|
+
name: '0256_routes_idempotency_organization',
|
|
2121
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_idempotency_requests ADD COLUMN IF NOT EXISTS org_id text`),
|
|
2122
|
+
},
|
|
2123
|
+
{
|
|
2124
|
+
name: '0257_routes_idempotency_operation',
|
|
2125
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_idempotency_requests ADD COLUMN IF NOT EXISTS operation text`),
|
|
2126
|
+
},
|
|
2127
|
+
{
|
|
2128
|
+
name: '0258_routes_idempotency_irrevocable',
|
|
2129
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_idempotency_requests ADD COLUMN IF NOT EXISTS irrevocable boolean NOT NULL DEFAULT false`),
|
|
2130
|
+
},
|
|
2131
|
+
{
|
|
2132
|
+
name: '0259_routes_idempotency_organization_inflight_index',
|
|
2133
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_idempotency_requests_organization_inflight_idx ON routes_idempotency_requests (org_id) WHERE org_id IS NOT NULL AND operation = 'deposit_address' AND status IN ('pending', 'provisioned')`),
|
|
2134
|
+
},
|
|
2135
|
+
{
|
|
2136
|
+
name: '0260_routes_idempotency_match_hash',
|
|
2137
|
+
up: (db) => raw(db, sql `ALTER TABLE routes_idempotency_requests ADD COLUMN IF NOT EXISTS match_hash text`),
|
|
2138
|
+
},
|
|
2139
|
+
{
|
|
2140
|
+
name: '0261_routes_idempotency_match_inflight_index',
|
|
2141
|
+
up: (db) => raw(db, sql `CREATE INDEX IF NOT EXISTS routes_idempotency_requests_match_inflight_idx ON routes_idempotency_requests (org_id, match_hash) WHERE match_hash IS NOT NULL AND operation = 'deposit_address' AND status IN ('pending', 'provisioned')`),
|
|
2142
|
+
},
|
|
2143
|
+
{
|
|
2144
|
+
name: '0262_routes_organization_delete_fence_unattributed_checkpoint',
|
|
2145
|
+
up: (db) => raw(db, sql `CREATE OR REPLACE FUNCTION fence_routes_organization_delete() RETURNS trigger LANGUAGE plpgsql SET search_path FROM CURRENT AS $body$ BEGIN PERFORM pg_advisory_xact_lock(hashtextextended('routes-ownerless-legacy', 0)); IF EXISTS (SELECT 1 FROM api_key_owner_tombstones WHERE id = 'routes-legacy-attempt-drain' AND created_at::timestamptz + interval '24 hours' > CURRENT_TIMESTAMP) THEN RAISE EXCEPTION 'route lifecycle rollout drain is active' USING ERRCODE = '23503'; END IF; IF EXISTS (SELECT 1 FROM routes_deposit_addresses WHERE org_id = OLD.id AND (status != 'deactivated' OR (provider_id = 'relay' AND subsidize))) OR EXISTS (SELECT 1 FROM routes_idempotency_requests AS request WHERE request.status IN ('pending', 'provisioned') AND (request.expires_at::timestamptz > CURRENT_TIMESTAMP OR COALESCE((to_jsonb(request)->>'irrevocable')::boolean, false)) AND (((to_jsonb(request)->>'org_id') = OLD.id AND (to_jsonb(request)->>'operation') = 'deposit_address') OR to_jsonb(request)->>'org_id' IS NULL OR to_jsonb(request)->>'operation' IS NULL)) THEN RAISE EXCEPTION 'organization has active route deposit address work' USING ERRCODE = '23503'; END IF; RETURN OLD; END $body$`),
|
|
2146
|
+
},
|
|
2147
|
+
{
|
|
2148
|
+
// Rolling workers may insert after preflight; these triggers share the deletion lock and reject owners deleted while provisioning.
|
|
2149
|
+
name: '0263_routes_creation_owner_fences',
|
|
2150
|
+
up: (db) => raw(db, sql `DO $migration$ BEGIN EXECUTE $definition$ CREATE OR REPLACE FUNCTION fence_routes_idempotency_owner() RETURNS trigger LANGUAGE plpgsql SET search_path FROM CURRENT AS $body$ DECLARE owner_id text; BEGIN owner_id := NEW.org_id; IF owner_id IS NULL THEN SELECT org_id INTO owner_id FROM api_key_admissions WHERE id = NEW.api_key_id; END IF; IF owner_id IS NULL THEN PERFORM pg_advisory_xact_lock(hashtextextended('routes-ownerless-legacy', 0)); IF EXISTS (SELECT 1 FROM api_key_owner_tombstones WHERE id = 'routes-ownerless-legacy-cutoff') THEN RAISE EXCEPTION 'ownerless route idempotency creation is disabled' USING ERRCODE = '23503'; END IF; RETURN NEW; END IF; PERFORM pg_advisory_xact_lock(hashtextextended('routes-subsidy:' || owner_id, 0)); IF EXISTS (SELECT 1 FROM api_key_owner_tombstones WHERE id = 'organization:' || owner_id) THEN RAISE EXCEPTION 'route idempotency owner was deleted' USING ERRCODE = '23503'; END IF; RETURN NEW; END $body$ $definition$; EXECUTE 'CREATE OR REPLACE TRIGGER routes_idempotency_owner_fence BEFORE INSERT OR UPDATE OF org_id, status ON routes_idempotency_requests FOR EACH ROW EXECUTE FUNCTION fence_routes_idempotency_owner()'; END $migration$`),
|
|
2151
|
+
},
|
|
2152
|
+
{
|
|
2153
|
+
// Existing unattributed checkpoints get one bounded drain window because their subsidy intent cannot be reconstructed.
|
|
2154
|
+
name: '0264_routes_legacy_checkpoint_drain',
|
|
2155
|
+
up: (db) => raw(db, sql `WITH marker AS (INSERT INTO api_key_owner_tombstones (id, created_at) VALUES ('routes-legacy-checkpoint-drain', to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')) ON CONFLICT (id) DO UPDATE SET created_at = api_key_owner_tombstones.created_at RETURNING created_at) UPDATE routes_idempotency_requests AS request SET expires_at = to_char(marker.created_at::timestamptz + interval '24 hours', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"') FROM marker WHERE request.status = 'provisioned' AND (request.org_id IS NULL OR request.operation IS NULL) AND request.expires_at::timestamptz < marker.created_at::timestamptz + interval '24 hours'`),
|
|
2156
|
+
},
|
|
2157
|
+
{
|
|
2158
|
+
name: '0265_routes_deposit_address_creator',
|
|
2159
|
+
up: (db) => raw(db, sql `DO $migration$ BEGIN ALTER TABLE routes_deposit_addresses ADD COLUMN IF NOT EXISTS creator_user_id text; UPDATE routes_deposit_addresses AS address SET creator_user_id = organization.user_id FROM organizations AS organization WHERE address.org_id = organization.id AND address.creator_user_id IS NULL; CREATE INDEX IF NOT EXISTS routes_deposit_addresses_creator_user_idx ON routes_deposit_addresses (creator_user_id) WHERE creator_user_id IS NOT NULL; EXECUTE $definition$ CREATE OR REPLACE FUNCTION set_routes_deposit_address_creator() RETURNS trigger LANGUAGE plpgsql SET search_path FROM CURRENT AS $body$ BEGIN NEW.creator_user_id := (SELECT user_id FROM organizations WHERE id = NEW.org_id); RETURN NEW; END $body$ $definition$; EXECUTE 'CREATE OR REPLACE TRIGGER routes_deposit_address_creator BEFORE INSERT OR UPDATE OF org_id ON routes_deposit_addresses FOR EACH ROW EXECUTE FUNCTION set_routes_deposit_address_creator()'; END $migration$`),
|
|
2160
|
+
},
|
|
2161
|
+
{
|
|
2162
|
+
name: '0266_reward_credits',
|
|
2163
|
+
up: (db) => db.schema
|
|
2164
|
+
.createTable('rewardCredits')
|
|
2165
|
+
.ifNotExists()
|
|
2166
|
+
.addColumn('chainId', 'bigint', (c) => c.notNull())
|
|
2167
|
+
.addColumn('vaultAddress', 'text', (c) => c.notNull())
|
|
2168
|
+
.addColumn('recipient', 'text', (c) => c.notNull())
|
|
2169
|
+
.addColumn('reference', 'text', (c) => c.notNull())
|
|
2170
|
+
.addColumn('assets', 'numeric', (c) => c.notNull())
|
|
2171
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
2172
|
+
.addPrimaryKeyConstraint('reward_credits_pkey', [
|
|
2173
|
+
'chainId',
|
|
2174
|
+
'vaultAddress',
|
|
2175
|
+
'recipient',
|
|
2176
|
+
'reference',
|
|
2177
|
+
])
|
|
2178
|
+
// Runs rewrite reward_accounts wholesale, so the ledger must not cascade from it.
|
|
2179
|
+
.addForeignKeyConstraint('reward_credits_campaign_fkey', ['chainId', 'vaultAddress'], 'rewardCampaigns', ['chainId', 'vaultAddress'], (c) => c.onDelete('cascade')),
|
|
2180
|
+
},
|
|
2181
|
+
{
|
|
2182
|
+
name: '0267_reward_campaign_distributors',
|
|
2183
|
+
up: (db) => db.schema
|
|
2184
|
+
.createTable('rewardCampaignDistributors')
|
|
2185
|
+
.ifNotExists()
|
|
2186
|
+
.addColumn('chainId', 'bigint', (c) => c.notNull())
|
|
2187
|
+
.addColumn('vaultAddress', 'text', (c) => c.notNull())
|
|
2188
|
+
.addColumn('distributorAddress', 'text', (c) => c.notNull())
|
|
2189
|
+
.addColumn('createdAt', 'text', (c) => c.notNull())
|
|
2190
|
+
.addPrimaryKeyConstraint('reward_campaign_distributors_pkey', [
|
|
2191
|
+
'chainId',
|
|
2192
|
+
'vaultAddress',
|
|
2193
|
+
'distributorAddress',
|
|
2194
|
+
])
|
|
2195
|
+
.addForeignKeyConstraint('reward_campaign_distributors_campaign_fkey', ['chainId', 'vaultAddress'], 'rewardCampaigns', ['chainId', 'vaultAddress'], (c) => c.onDelete('cascade')),
|
|
2196
|
+
},
|
|
2197
|
+
{
|
|
2198
|
+
name: '0268_reward_campaign_distributors_backfill',
|
|
2199
|
+
up: (db) => raw(db, sql `INSERT INTO reward_campaign_distributors (chain_id, vault_address, distributor_address, created_at) SELECT chain_id, vault_address, distributor_address, updated_at FROM reward_campaigns WHERE distributor_address IS NOT NULL ON CONFLICT DO NOTHING`),
|
|
2200
|
+
},
|
|
2201
|
+
{
|
|
2202
|
+
// This verified distributor paid rewards before distributor history was retained.
|
|
2203
|
+
name: '0269_reward_campaign_previous_distributor',
|
|
2204
|
+
up: (db) => raw(db, sql `INSERT INTO reward_campaign_distributors (chain_id, vault_address, distributor_address, created_at) SELECT chain_id, vault_address, '0x6c857bf1fe7de1bc1d5c639c721b2633f8fe34f3', created_at FROM reward_campaigns WHERE chain_id = 4217 AND vault_address = '0xd730394f3bb85a4828e35fc5e361dcc9f894fa4f' ON CONFLICT DO NOTHING`),
|
|
2205
|
+
},
|
|
2206
|
+
{
|
|
2207
|
+
// Provider subsidy billing first became active with this production Worker deployment.
|
|
2208
|
+
name: '0270_routes_deposits_legacy_provider_subsidies_reported',
|
|
2209
|
+
up: (db) => raw(db, sql `UPDATE routes_deposits SET subsidy_meter_reported_at = coalesce(status_updated_at, updated_at) WHERE environment = 'production' AND subsidy_meter_reported_at IS NULL AND (provider_subsidy->'amount'->>'baseUnits')::numeric > 0 AND (status = 'completed' OR (status IN ('action-required', 'settling') AND tempo_gas_paid IS NOT NULL)) AND coalesce(status_updated_at, updated_at) < '2026-09-03T06:10:21.000Z'`),
|
|
2210
|
+
},
|
|
1182
2211
|
];
|
|
1183
2212
|
/**
|
|
1184
2213
|
* Adapts a raw statement to the migration contract (argument-less
|
|
@@ -1207,10 +2236,7 @@ function fromDialect(dialect, options = {}) {
|
|
|
1207
2236
|
// transaction poolers reset session state between statements.
|
|
1208
2237
|
const kysely = options.schema ? root.withPlugin(new WithSchemaPlugin(options.schema)) : root;
|
|
1209
2238
|
// Builds Db over a top-level Kysely handle or transaction-scoped Kysely handle.
|
|
1210
|
-
function build(kysely) {
|
|
1211
|
-
// Prevents same-handle nested transactions from deadlocking capped pools.
|
|
1212
|
-
// Nested work must use the callback's scoped `tx`.
|
|
1213
|
-
let active = false;
|
|
2239
|
+
function build(kysely, transactional = false) {
|
|
1214
2240
|
return {
|
|
1215
2241
|
async close() {
|
|
1216
2242
|
await kysely.destroy();
|
|
@@ -1270,15 +2296,9 @@ function fromDialect(dialect, options = {}) {
|
|
|
1270
2296
|
});
|
|
1271
2297
|
},
|
|
1272
2298
|
async transaction(fn) {
|
|
1273
|
-
if (
|
|
2299
|
+
if (transactional)
|
|
1274
2300
|
throw new Error('Db.transaction does not support nesting.');
|
|
1275
|
-
|
|
1276
|
-
try {
|
|
1277
|
-
return await kysely.transaction().execute((trx) => fn(build(trx)));
|
|
1278
|
-
}
|
|
1279
|
-
finally {
|
|
1280
|
-
active = false;
|
|
1281
|
-
}
|
|
2301
|
+
return kysely.transaction().execute((trx) => fn(build(trx, true)));
|
|
1282
2302
|
},
|
|
1283
2303
|
};
|
|
1284
2304
|
}
|
|
@@ -1286,20 +2306,20 @@ function fromDialect(dialect, options = {}) {
|
|
|
1286
2306
|
}
|
|
1287
2307
|
/**
|
|
1288
2308
|
* Creates a Postgres-backed {@link Db} via Kysely's `PostgresDialect`. Optional
|
|
1289
|
-
* `schema` qualifies repository queries
|
|
2309
|
+
* `schema` qualifies repository queries and scopes migrations.
|
|
1290
2310
|
*
|
|
1291
2311
|
* @param options - Postgres options.
|
|
1292
2312
|
* @returns The database.
|
|
1293
2313
|
*/
|
|
1294
2314
|
export function postgres(options) {
|
|
1295
|
-
const { connectionString, schema } = options;
|
|
2315
|
+
const { connectionString, maxConnections, schema } = options;
|
|
1296
2316
|
// Bounded connect and pool-checkout wait: the pg default (0) waits forever,
|
|
1297
2317
|
// so an unresponsive origin parks callers and their invocation memory
|
|
1298
2318
|
// invisibly instead of failing into the retry paths.
|
|
1299
2319
|
const pool = new pg.Pool({
|
|
1300
2320
|
connectionString,
|
|
1301
2321
|
connectionTimeoutMillis: 30_000,
|
|
1302
|
-
...(schema ? { max:
|
|
2322
|
+
...(maxConnections === undefined && !schema ? {} : { max: maxConnections ?? 1 }),
|
|
1303
2323
|
});
|
|
1304
2324
|
return fromDialect(new PostgresDialect({ pool }), { schema });
|
|
1305
2325
|
}
|