tapimo 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +12457 -10365
- 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 -549
- 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 +159 -7
- 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 +88 -88
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.js +3 -3
- 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 +129 -69
- 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 +364 -34
- 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 +37 -37
- 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 +5 -0
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +31 -19
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +125 -0
- 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/rpc.d.ts +507 -33
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +266 -156
- 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 +28 -12
- 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 +30 -30
- package/dist/apps/data/routes/verified-tokens.d.ts +9 -9
- 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 +613 -176
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +291 -195
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- 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 +3763 -3385
- 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 +106 -4
- 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 +77 -2
- 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 +4 -4
- 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 +18 -2
- 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 +4 -4
- 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 +2 -2
- package/dist/apps/management/routes/webhooks.d.ts +280 -214
- 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.js +7 -7
- package/dist/apps/mcp.js.map +1 -1
- 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 +7 -7
- 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 +19 -16
- 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 +379 -74
- 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 +1030 -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/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 +48 -12
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +603 -175
- 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 +8 -3
- package/src/admin/apps/verified-tokens.ts +3 -3
- 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/routeTree.gen.ts +63 -0
- package/src/admin/ui/src/routes/__root.tsx +12 -1
- 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_.$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.generated.ts +144 -69
- 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 +154 -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 +224 -0
- package/src/apps/data/routes/fee-amm.ts +191 -160
- 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 +352 -8
- package/src/apps/data/routes/rpc.ts +407 -219
- 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.test.ts +645 -83
- package/src/apps/data/routes/webhooks.ts +1089 -857
- 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/webhooks.test.ts +49 -26
- package/src/apps/management/routes/webhooks.ts +78 -22
- package/src/apps/mcp.test.ts +6 -6
- package/src/apps/mcp.ts +7 -7
- 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 +1476 -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} +316 -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/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 +1564 -9
- package/src/internal/Auth.ts +833 -239
- 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 +165 -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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Selectable } from 'kysely'
|
|
2
2
|
import { sql } from 'kysely'
|
|
3
3
|
import { Value } from 'ox'
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ import * as Fees from '../../internal/Fees.js'
|
|
|
6
6
|
import * as Id from '../../internal/Id.js'
|
|
7
7
|
import type * as Db from '../Db.js'
|
|
8
8
|
import type * as db_Schema from '../Schema.js'
|
|
9
|
-
import * as
|
|
9
|
+
import * as SponsorshipAttributions from './sponsorshipAttributions.js'
|
|
10
10
|
|
|
11
11
|
/** Columns of the `sponsored_transactions` table, derived from `Schema.SponsoredTransaction`. */
|
|
12
12
|
export type Table = db_Schema.SponsoredTransaction
|
|
@@ -31,6 +31,7 @@ export const failedIntentRecoveryTtlMs = 86_400_000
|
|
|
31
31
|
export async function upsert(db: Db.Db, input: upsert.Input): Promise<Record> {
|
|
32
32
|
const record: Record = {
|
|
33
33
|
apiKeyId: input.apiKeyId,
|
|
34
|
+
sponsorshipAttributionId: input.sponsorshipAttributionId ?? null,
|
|
34
35
|
billable: input.billable,
|
|
35
36
|
chainId: input.chainId,
|
|
36
37
|
createdAt: new Date().toISOString(),
|
|
@@ -39,6 +40,7 @@ export async function upsert(db: Db.Db, input: upsert.Input): Promise<Record> {
|
|
|
39
40
|
feeAmount: null,
|
|
40
41
|
feeMax: input.feeMax ?? null,
|
|
41
42
|
feeToken: input.feeToken ?? null,
|
|
43
|
+
finalizationAttemptedAt: null,
|
|
42
44
|
finalizedAt: null,
|
|
43
45
|
id: Id.generate('stx'),
|
|
44
46
|
meterReportedAt: null,
|
|
@@ -74,6 +76,9 @@ export async function upsert(db: Db.Db, input: upsert.Input): Promise<Record> {
|
|
|
74
76
|
}))
|
|
75
77
|
// A shared envelope cannot transfer billing attribution between owners.
|
|
76
78
|
.where('sponsored_transactions.orgId', '=', input.orgId)
|
|
79
|
+
.where(
|
|
80
|
+
sql<boolean>`sponsored_transactions.sponsorship_attribution_id IS NOT DISTINCT FROM ${record.sponsorshipAttributionId}`,
|
|
81
|
+
)
|
|
77
82
|
.where(
|
|
78
83
|
sql<boolean>`sponsored_transactions.project_id IS NOT DISTINCT FROM ${record.projectId}`,
|
|
79
84
|
),
|
|
@@ -89,6 +94,8 @@ export declare namespace upsert {
|
|
|
89
94
|
type Input = {
|
|
90
95
|
/** API key id (`key_…`) that requested sponsorship. */
|
|
91
96
|
apiKeyId: string
|
|
97
|
+
/** Canonical sponsorship attribution id snapshotted at sponsorship time. */
|
|
98
|
+
sponsorshipAttributionId?: string | undefined
|
|
92
99
|
/** Whether the sponsorship accrues billable spend; false for sandbox. */
|
|
93
100
|
billable: boolean
|
|
94
101
|
/** Chain the sponsored transaction targets. */
|
|
@@ -129,19 +136,44 @@ export function get(db: Db.Db, id: string): Promise<Record | undefined> {
|
|
|
129
136
|
.executeTakeFirst()
|
|
130
137
|
}
|
|
131
138
|
|
|
132
|
-
/**
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
+
/** Lists sponsored transactions newest-first for administrative inspection. */
|
|
140
|
+
export function list(db: Db.Db, options: list.Options): Promise<Record[]> {
|
|
141
|
+
let query = db.kysely.selectFrom('sponsored_transactions').selectAll()
|
|
142
|
+
const cursor = options.cursor
|
|
143
|
+
if (cursor !== undefined)
|
|
144
|
+
query = query.where((eb) =>
|
|
145
|
+
eb.or([
|
|
146
|
+
eb('createdAt', '<', cursor.createdAt),
|
|
147
|
+
eb.and([eb('createdAt', '=', cursor.createdAt), eb('id', '<', cursor.id)]),
|
|
148
|
+
]),
|
|
149
|
+
)
|
|
150
|
+
return query.orderBy('createdAt', 'desc').orderBy('id', 'desc').limit(options.limit).execute()
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export declare namespace list {
|
|
154
|
+
/** Pagination options for sponsored transactions. */
|
|
155
|
+
type Options = {
|
|
156
|
+
/** Exclusive lower bound from the previous page. */
|
|
157
|
+
cursor?: Cursor | undefined
|
|
158
|
+
/** Maximum rows returned. */
|
|
159
|
+
limit: number
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Cursor fields for the last transaction on the previous page. */
|
|
163
|
+
type Cursor = {
|
|
164
|
+
/** Sponsorship creation time. */
|
|
165
|
+
createdAt: string
|
|
166
|
+
/** Sponsored transaction id, used as a deterministic tie-breaker. */
|
|
167
|
+
id: string
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Lists pending sponsorships, oldest first. */
|
|
139
172
|
export function listPending(db: Db.Db, options: listPending.Options = {}): Promise<Record[]> {
|
|
140
173
|
let query = db.kysely
|
|
141
174
|
.selectFrom('sponsored_transactions')
|
|
142
175
|
.selectAll()
|
|
143
176
|
.where('status', '=', 'pending')
|
|
144
|
-
// `id` breaks same-millisecond `createdAt` ties for a deterministic scan.
|
|
145
177
|
.orderBy('createdAt', 'asc')
|
|
146
178
|
.orderBy('id', 'asc')
|
|
147
179
|
if (options.limit !== undefined) query = query.limit(options.limit)
|
|
@@ -156,22 +188,57 @@ export declare namespace listPending {
|
|
|
156
188
|
}
|
|
157
189
|
}
|
|
158
190
|
|
|
191
|
+
/** Claims the least-recently attempted pending sponsorships for one finalization pass. */
|
|
192
|
+
export function claimPending(db: Db.Db, options: claimPending.Options): Promise<Record[]> {
|
|
193
|
+
return db.transaction(async (db) => {
|
|
194
|
+
const rows = await db.kysely
|
|
195
|
+
.selectFrom('sponsored_transactions')
|
|
196
|
+
.selectAll()
|
|
197
|
+
.where('status', '=', 'pending')
|
|
198
|
+
.orderBy(sql`finalization_attempted_at nulls first`)
|
|
199
|
+
.orderBy('createdAt', 'asc')
|
|
200
|
+
.orderBy('id', 'asc')
|
|
201
|
+
.limit(options.limit)
|
|
202
|
+
.forUpdate()
|
|
203
|
+
.skipLocked()
|
|
204
|
+
.execute()
|
|
205
|
+
if (rows.length === 0) return []
|
|
206
|
+
await db.kysely
|
|
207
|
+
.updateTable('sponsored_transactions')
|
|
208
|
+
.set({ finalizationAttemptedAt: options.attemptedAt })
|
|
209
|
+
.where(
|
|
210
|
+
'id',
|
|
211
|
+
'in',
|
|
212
|
+
rows.map((row) => row.id),
|
|
213
|
+
)
|
|
214
|
+
.execute()
|
|
215
|
+
return rows.map((row) => ({ ...row, finalizationAttemptedAt: options.attemptedAt }))
|
|
216
|
+
})
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export declare namespace claimPending {
|
|
220
|
+
/** Claim timestamp and batch bound. */
|
|
221
|
+
type Options = {
|
|
222
|
+
/** Timestamp recorded before receipt lookups begin. */
|
|
223
|
+
attemptedAt: string
|
|
224
|
+
/** Maximum rows claimed by this pass. */
|
|
225
|
+
limit: number
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
159
229
|
/**
|
|
160
|
-
* Lists hash-less fill intents, oldest first, for
|
|
161
|
-
* Failed intents are included only when the caller supplies a recovery floor.
|
|
230
|
+
* Lists active hash-less fill intents, oldest first, for reconciliation.
|
|
162
231
|
*
|
|
163
232
|
* @param db - The database.
|
|
164
233
|
* @param options - Paging options.
|
|
165
|
-
* @returns The
|
|
234
|
+
* @returns The fill intents.
|
|
166
235
|
*/
|
|
167
236
|
export function listIntents(db: Db.Db, options: listIntents.Options = {}): Promise<Record[]> {
|
|
168
237
|
let query = db.kysely
|
|
169
238
|
.selectFrom('sponsored_transactions')
|
|
170
239
|
.selectAll()
|
|
171
|
-
.where(
|
|
240
|
+
.where('status', '=', 'pending')
|
|
172
241
|
.where('transactionHash', 'is', null)
|
|
173
|
-
// `pending` sorts after `failed`; descending keeps active intents first.
|
|
174
|
-
.orderBy('status', 'desc')
|
|
175
242
|
.orderBy('createdAt', 'asc')
|
|
176
243
|
.orderBy('id', 'asc')
|
|
177
244
|
if (options.limit !== undefined) query = query.limit(options.limit)
|
|
@@ -180,9 +247,68 @@ export function listIntents(db: Db.Db, options: listIntents.Options = {}): Promi
|
|
|
180
247
|
|
|
181
248
|
export declare namespace listIntents {
|
|
182
249
|
/** Options for {@link listIntents}. */
|
|
183
|
-
type Options = listPending.Options
|
|
184
|
-
|
|
185
|
-
|
|
250
|
+
type Options = listPending.Options
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/** Lists the oldest recoverable failed-intent timestamp for each chain. */
|
|
254
|
+
export function listRecoveryWindows(
|
|
255
|
+
db: Db.Db,
|
|
256
|
+
options: listRecoveryWindows.Options,
|
|
257
|
+
): Promise<listRecoveryWindows.Window[]> {
|
|
258
|
+
return db.kysely
|
|
259
|
+
.selectFrom('sponsored_transactions')
|
|
260
|
+
.select('chainId')
|
|
261
|
+
.select((eb) => eb.fn.min<string>('createdAt').as('createdAt'))
|
|
262
|
+
.where('finalizedAt', '>=', options.failedSince)
|
|
263
|
+
.where('status', '=', 'failed')
|
|
264
|
+
.where('transactionHash', 'is', null)
|
|
265
|
+
.groupBy('chainId')
|
|
266
|
+
.execute()
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export declare namespace listRecoveryWindows {
|
|
270
|
+
/** Failed-intent recovery window options. */
|
|
271
|
+
type Options = {
|
|
272
|
+
/** Earliest terminal timestamp eligible for recovery. */
|
|
273
|
+
failedSince: string
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/** One chain's failed-intent recovery window. */
|
|
277
|
+
type Window = {
|
|
278
|
+
/** Chain containing recoverable failed intents. */
|
|
279
|
+
chainId: number
|
|
280
|
+
/** Oldest eligible intent creation timestamp. */
|
|
281
|
+
createdAt: string
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/** Lists pending and recoverable failed intents matching candidate sign payloads. */
|
|
286
|
+
export function listRecoverableIntents(
|
|
287
|
+
db: Db.Db,
|
|
288
|
+
options: listRecoverableIntents.Options,
|
|
289
|
+
): Promise<Record[]> {
|
|
290
|
+
if (options.signPayloads.length === 0) return Promise.resolve([])
|
|
291
|
+
return db.kysely
|
|
292
|
+
.selectFrom('sponsored_transactions')
|
|
293
|
+
.selectAll()
|
|
294
|
+
.where('signPayload', 'in', [...options.signPayloads])
|
|
295
|
+
.where((eb) =>
|
|
296
|
+
eb.or([
|
|
297
|
+
eb('status', '=', 'pending'),
|
|
298
|
+
eb.and([eb('finalizedAt', '>=', options.failedSince), eb('status', '=', 'failed')]),
|
|
299
|
+
]),
|
|
300
|
+
)
|
|
301
|
+
.where('transactionHash', 'is', null)
|
|
302
|
+
.execute()
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export declare namespace listRecoverableIntents {
|
|
306
|
+
/** Reconciliation candidate lookup options. */
|
|
307
|
+
type Options = {
|
|
308
|
+
/** Earliest terminal timestamp eligible for recovery. */
|
|
309
|
+
failedSince: string
|
|
310
|
+
/** Candidate fee-payer sign payloads. */
|
|
311
|
+
signPayloads: readonly string[]
|
|
186
312
|
}
|
|
187
313
|
}
|
|
188
314
|
|
|
@@ -220,7 +346,11 @@ export async function assignTransactionHash(
|
|
|
220
346
|
limit !== undefined &&
|
|
221
347
|
(limit.billable === undefined ? record.billable : record.billable === limit.billable)
|
|
222
348
|
if (record.status === 'failed' && limited) {
|
|
223
|
-
const scope = limit.
|
|
349
|
+
const scope = limit.sponsorshipAttributionId
|
|
350
|
+
? `${record.orgId}:${limit.sponsorshipAttributionId}`
|
|
351
|
+
: limit.projectId
|
|
352
|
+
? `${record.orgId}:${limit.projectId}`
|
|
353
|
+
: record.orgId
|
|
224
354
|
await sql`select pg_advisory_xact_lock(${billingLockClass}, hashtext(${scope}))`.execute(tx.kysely) // prettier-ignore
|
|
225
355
|
}
|
|
226
356
|
let query = tx.kysely
|
|
@@ -248,6 +378,9 @@ export async function assignTransactionHash(
|
|
|
248
378
|
if (record.status === 'failed' && limited) {
|
|
249
379
|
const committed = await spend(tx, {
|
|
250
380
|
...(limit.billable === undefined ? {} : { billable: limit.billable }),
|
|
381
|
+
...(limit.sponsorshipAttributionId === undefined
|
|
382
|
+
? {}
|
|
383
|
+
: { sponsorshipAttributionId: limit.sponsorshipAttributionId }),
|
|
251
384
|
chainIds: limit.chainIds,
|
|
252
385
|
orgId: record.orgId,
|
|
253
386
|
...(limit.projectId === undefined ? {} : { projectId: limit.projectId }),
|
|
@@ -334,7 +467,11 @@ export async function reserve(
|
|
|
334
467
|
return db.transaction(async (tx) => {
|
|
335
468
|
// `hashtext` maps the org id into the advisory-lock keyspace; the class
|
|
336
469
|
// namespaces it against other advisory-lock users. Released at tx end.
|
|
337
|
-
const scope = limit.
|
|
470
|
+
const scope = limit.sponsorshipAttributionId
|
|
471
|
+
? `${input.orgId}:${limit.sponsorshipAttributionId}`
|
|
472
|
+
: limit.projectId
|
|
473
|
+
? `${input.orgId}:${limit.projectId}`
|
|
474
|
+
: input.orgId
|
|
338
475
|
await sql`select pg_advisory_xact_lock(${billingLockClass}, hashtext(${scope}))`.execute(tx.kysely) // prettier-ignore
|
|
339
476
|
const record = await upsert(tx, input)
|
|
340
477
|
const limited =
|
|
@@ -342,6 +479,9 @@ export async function reserve(
|
|
|
342
479
|
if (limited) {
|
|
343
480
|
const committed = await spend(tx, {
|
|
344
481
|
...(limit.billable === undefined ? {} : { billable: limit.billable }),
|
|
482
|
+
...(limit.sponsorshipAttributionId === undefined
|
|
483
|
+
? {}
|
|
484
|
+
: { sponsorshipAttributionId: limit.sponsorshipAttributionId }),
|
|
345
485
|
chainIds: limit.chainIds,
|
|
346
486
|
orgId: input.orgId,
|
|
347
487
|
...(limit.projectId === undefined ? {} : { projectId: limit.projectId }),
|
|
@@ -359,6 +499,8 @@ const billingLockClass = 1112294220
|
|
|
359
499
|
export declare namespace reserve {
|
|
360
500
|
/** The period spend limit enforced by {@link reserve}. */
|
|
361
501
|
type Limit = {
|
|
502
|
+
/** Canonical attribution scope for independent limits. */
|
|
503
|
+
sponsorshipAttributionId?: string | undefined
|
|
362
504
|
/** Billing snapshot whose rows consume this limit; omit for customer-billable spend. */
|
|
363
505
|
billable?: boolean | undefined
|
|
364
506
|
/** Chains whose spend counts (mainnet chain ids). */
|
|
@@ -378,11 +520,11 @@ export declare namespace reserve {
|
|
|
378
520
|
*/
|
|
379
521
|
export function reservePromotion(
|
|
380
522
|
db: Db.Db,
|
|
381
|
-
input:
|
|
523
|
+
input: reservePromotion.Input,
|
|
382
524
|
options: reservePromotion.Options,
|
|
383
525
|
): Promise<reservePromotion.Result> {
|
|
384
526
|
return db.transaction(async (tx) => {
|
|
385
|
-
const scope = `${input.orgId}:${
|
|
527
|
+
const scope = `${input.orgId}:${input.sponsorshipAttributionId}`
|
|
386
528
|
await sql`select pg_advisory_xact_lock(${billingLockClass}, hashtext(${scope}))`.execute(tx.kysely) // prettier-ignore
|
|
387
529
|
const existing = await tx.kysely
|
|
388
530
|
.selectFrom('sponsored_transactions')
|
|
@@ -391,9 +533,21 @@ export function reservePromotion(
|
|
|
391
533
|
.forUpdate()
|
|
392
534
|
.executeTakeFirst()
|
|
393
535
|
if (existing) {
|
|
394
|
-
if (
|
|
536
|
+
if (
|
|
537
|
+
existing.orgId !== input.orgId ||
|
|
538
|
+
(existing.sponsorshipAttributionId !== null &&
|
|
539
|
+
existing.sponsorshipAttributionId !== input.sponsorshipAttributionId) ||
|
|
540
|
+
existing.projectId !== (input.projectId ?? null)
|
|
541
|
+
)
|
|
395
542
|
throw new AttributionConflictError()
|
|
396
|
-
|
|
543
|
+
// A pre-promotion row keeps its null attribution and billable snapshot
|
|
544
|
+
// when policy changes before an idempotent retry.
|
|
545
|
+
const stored = await upsert(
|
|
546
|
+
tx,
|
|
547
|
+
existing.sponsorshipAttributionId === null
|
|
548
|
+
? { ...input, billable: existing.billable, sponsorshipAttributionId: undefined }
|
|
549
|
+
: input,
|
|
550
|
+
)
|
|
397
551
|
if (stored.billable && options.billingLimit) {
|
|
398
552
|
await sql`select pg_advisory_xact_lock(${billingLockClass}, hashtext(${input.orgId}))`.execute(tx.kysely) // prettier-ignore
|
|
399
553
|
const billed = await spend(tx, {
|
|
@@ -403,18 +557,21 @@ export function reservePromotion(
|
|
|
403
557
|
})
|
|
404
558
|
if (billed > options.billingLimit.max) throw new PeriodSpendLimitError()
|
|
405
559
|
}
|
|
406
|
-
if (!stored.billable) {
|
|
407
|
-
const
|
|
408
|
-
|
|
409
|
-
|
|
560
|
+
if (!stored.billable && stored.sponsorshipAttributionId !== null) {
|
|
561
|
+
const attribution = await SponsorshipAttributions.get(tx, {
|
|
562
|
+
id: input.sponsorshipAttributionId,
|
|
563
|
+
orgId: input.orgId,
|
|
564
|
+
})
|
|
565
|
+
if (!attribution?.startsAt) throw new PromotionActivationError()
|
|
566
|
+
if (attribution.spendLimit !== null) {
|
|
410
567
|
const committed = await spend(tx, {
|
|
568
|
+
sponsorshipAttributionId: input.sponsorshipAttributionId,
|
|
411
569
|
billable: false,
|
|
412
570
|
chainIds: options.chainIds,
|
|
413
571
|
orgId: input.orgId,
|
|
414
|
-
|
|
415
|
-
since: project.sponsorshipSubsidyStartsAt,
|
|
572
|
+
since: attribution.startsAt,
|
|
416
573
|
})
|
|
417
|
-
if (committed > BigInt(
|
|
574
|
+
if (committed > BigInt(attribution.spendLimit)) throw new PeriodSpendLimitError()
|
|
418
575
|
}
|
|
419
576
|
}
|
|
420
577
|
return { record: stored, status: stored.billable ? 'billed' : 'subsidized' }
|
|
@@ -429,21 +586,19 @@ export function reservePromotion(
|
|
|
429
586
|
if (!organization || organization.sponsorshipSubsidyDurationDays === null)
|
|
430
587
|
return { status: 'ineligible' }
|
|
431
588
|
|
|
432
|
-
const current = await
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
)
|
|
589
|
+
const current = await SponsorshipAttributions.get(tx, {
|
|
590
|
+
id: input.sponsorshipAttributionId,
|
|
591
|
+
orgId: input.orgId,
|
|
592
|
+
})
|
|
593
|
+
if (current?.endsAt && Date.parse(options.at) >= Date.parse(current.endsAt))
|
|
438
594
|
return { status: 'ineligible' }
|
|
439
595
|
|
|
440
596
|
const endsAt = new Date(
|
|
441
597
|
Date.parse(options.at) + organization.sponsorshipSubsidyDurationDays * 86_400_000,
|
|
442
598
|
).toISOString()
|
|
443
|
-
const
|
|
444
|
-
|
|
599
|
+
const attribution = await SponsorshipAttributions.activate(tx, {
|
|
600
|
+
id: input.sponsorshipAttributionId,
|
|
445
601
|
endsAt,
|
|
446
|
-
id: options.projectId,
|
|
447
602
|
orgId: input.orgId,
|
|
448
603
|
spendLimit:
|
|
449
604
|
organization.sponsorshipSubsidyProjectSpendLimit === null
|
|
@@ -452,19 +607,19 @@ export function reservePromotion(
|
|
|
452
607
|
organization.sponsorshipSubsidyProjectSpendLimit,
|
|
453
608
|
Fees.tokenDecimals,
|
|
454
609
|
).toString(),
|
|
610
|
+
startsAt: options.at,
|
|
455
611
|
})
|
|
456
|
-
if (!project?.sponsorshipSubsidyStartsAt || !project.sponsorshipSubsidyEndsAt)
|
|
457
|
-
throw new PromotionActivationError()
|
|
458
612
|
let record = await upsert(tx, input)
|
|
459
|
-
if (
|
|
613
|
+
if (!attribution.startsAt) throw new PromotionActivationError()
|
|
614
|
+
if (attribution.spendLimit !== null) {
|
|
460
615
|
const committed = await spend(tx, {
|
|
616
|
+
sponsorshipAttributionId: input.sponsorshipAttributionId,
|
|
461
617
|
billable: false,
|
|
462
618
|
chainIds: options.chainIds,
|
|
463
619
|
orgId: input.orgId,
|
|
464
|
-
|
|
465
|
-
since: project.sponsorshipSubsidyStartsAt,
|
|
620
|
+
since: attribution.startsAt,
|
|
466
621
|
})
|
|
467
|
-
if (committed > BigInt(
|
|
622
|
+
if (committed > BigInt(attribution.spendLimit)) {
|
|
468
623
|
record = await tx.kysely
|
|
469
624
|
.updateTable('sponsored_transactions')
|
|
470
625
|
.set({ billable: true })
|
|
@@ -487,16 +642,20 @@ export function reservePromotion(
|
|
|
487
642
|
}
|
|
488
643
|
|
|
489
644
|
export declare namespace reservePromotion {
|
|
490
|
-
/**
|
|
645
|
+
/** Sponsored transaction with its canonical attribution snapshot. */
|
|
646
|
+
type Input = upsert.Input & {
|
|
647
|
+
/** Canonical sponsorship attribution id. */
|
|
648
|
+
sponsorshipAttributionId: string
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
/** Attribution promotion window and cap. */
|
|
491
652
|
type Options = {
|
|
492
653
|
/** Timestamp of the recorded sponsorship that may activate the window. */
|
|
493
654
|
at: string
|
|
494
|
-
/** Customer billing limit used when the
|
|
655
|
+
/** Customer billing limit used when the attribution promotion is exhausted. */
|
|
495
656
|
billingLimit?: reserve.Limit | undefined
|
|
496
657
|
/** Mainnet chains whose promotional spend counts. */
|
|
497
658
|
chainIds: readonly number[]
|
|
498
|
-
/** Project receiving the independent promotion. */
|
|
499
|
-
projectId: string
|
|
500
659
|
}
|
|
501
660
|
|
|
502
661
|
/** Promotion reservation outcome. */
|
|
@@ -508,7 +667,7 @@ export declare namespace reservePromotion {
|
|
|
508
667
|
status: 'billed' | 'subsidized'
|
|
509
668
|
}
|
|
510
669
|
| {
|
|
511
|
-
/** The current organization or
|
|
670
|
+
/** The current organization or attribution policy does not grant a promotion. */
|
|
512
671
|
status: 'ineligible'
|
|
513
672
|
}
|
|
514
673
|
}
|
|
@@ -523,7 +682,15 @@ export declare namespace reservePromotion {
|
|
|
523
682
|
* @returns The committed spend in base units.
|
|
524
683
|
*/
|
|
525
684
|
export async function spend(db: Db.Db, options: spend.Options): Promise<bigint> {
|
|
526
|
-
const {
|
|
685
|
+
const {
|
|
686
|
+
sponsorshipAttributionId,
|
|
687
|
+
billable,
|
|
688
|
+
chainIds,
|
|
689
|
+
environment = 'production',
|
|
690
|
+
orgId,
|
|
691
|
+
projectId,
|
|
692
|
+
since,
|
|
693
|
+
} = options
|
|
527
694
|
let query = db.kysely
|
|
528
695
|
.selectFrom('sponsored_transactions')
|
|
529
696
|
.select([
|
|
@@ -538,6 +705,8 @@ export async function spend(db: Db.Db, options: spend.Options): Promise<bigint>
|
|
|
538
705
|
.where('chainId', 'in', [...chainIds])
|
|
539
706
|
.where('createdAt', '>=', since)
|
|
540
707
|
if (billable !== undefined) query = query.where('billable', '=', billable)
|
|
708
|
+
if (sponsorshipAttributionId !== undefined)
|
|
709
|
+
query = query.where('sponsorshipAttributionId', '=', sponsorshipAttributionId)
|
|
541
710
|
if (projectId !== undefined) query = query.where('projectId', '=', projectId)
|
|
542
711
|
// Production mirrors the sponsorship gate — only billable rows count. Sandbox
|
|
543
712
|
// rows are non-billable by construction, so the figure is display-only.
|
|
@@ -552,6 +721,8 @@ export async function spend(db: Db.Db, options: spend.Options): Promise<bigint>
|
|
|
552
721
|
export declare namespace spend {
|
|
553
722
|
/** Options for {@link spend}. */
|
|
554
723
|
type Options = {
|
|
724
|
+
/** Canonical sponsorship attribution id whose spend counts. */
|
|
725
|
+
sponsorshipAttributionId?: string | undefined
|
|
555
726
|
/** Billing snapshot to count; omit for the existing production-billable behavior. */
|
|
556
727
|
billable?: boolean | undefined
|
|
557
728
|
/** Chains whose spend counts (mainnet chain ids). */
|
|
@@ -690,17 +861,6 @@ export async function markReported(db: Db.Db, id: string, at: string): Promise<v
|
|
|
690
861
|
.execute()
|
|
691
862
|
}
|
|
692
863
|
|
|
693
|
-
/** Intent status predicate; failed rows are recovery candidates only briefly. */
|
|
694
|
-
function intentStatus(failedSince: string | undefined) {
|
|
695
|
-
return (eb: ExpressionBuilder<Db.Database, 'sponsored_transactions'>) => {
|
|
696
|
-
if (failedSince === undefined) return eb('status', '=', 'pending')
|
|
697
|
-
return eb.or([
|
|
698
|
-
eb('status', '=', 'pending'),
|
|
699
|
-
eb.and([eb('status', '=', 'failed'), eb('finalizedAt', '>=', failedSince)]),
|
|
700
|
-
])
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
|
|
704
864
|
/** Thrown by {@link reserve} when recording would exceed the org's period spend limit. */
|
|
705
865
|
export class PeriodSpendLimitError extends Error {
|
|
706
866
|
override name = 'SponsoredTransactions.PeriodSpendLimitError'
|
|
@@ -711,7 +871,7 @@ export class PromotionActivationError extends Error {
|
|
|
711
871
|
override name = 'SponsoredTransactions.PromotionActivationError'
|
|
712
872
|
}
|
|
713
873
|
|
|
714
|
-
/** Thrown when one signed envelope is presented with conflicting
|
|
874
|
+
/** Thrown when one signed envelope is presented with conflicting attribution. */
|
|
715
875
|
export class AttributionConflictError extends Error {
|
|
716
876
|
override name = 'SponsoredTransactions.AttributionConflictError'
|
|
717
877
|
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid'
|
|
2
|
+
|
|
3
|
+
import * as Runtime from '../../../test/runtime.js'
|
|
4
|
+
import * as Db from '../Db.js'
|
|
5
|
+
import * as SponsoredTransactions from './sponsoredTransactions.js'
|
|
6
|
+
import * as SponsorshipAttributions from './sponsorshipAttributions.js'
|
|
7
|
+
|
|
8
|
+
const create = () => Db.postgres({ connectionString: Runtime.postgresUrl, schema: `t_${nanoid()}` })
|
|
9
|
+
|
|
10
|
+
describe('getExternal', () => {
|
|
11
|
+
test('behavior: reads only existing attributions in the owning organization', async () => {
|
|
12
|
+
const db = create()
|
|
13
|
+
await db.migrate()
|
|
14
|
+
const attribution = await SponsorshipAttributions.resolveExternal(db, {
|
|
15
|
+
externalId: 'partner-app',
|
|
16
|
+
orgId: 'org_1',
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
expect(
|
|
20
|
+
await SponsorshipAttributions.getExternal(db, { externalId: 'partner-app', orgId: 'org_1' }),
|
|
21
|
+
).toStrictEqual(attribution)
|
|
22
|
+
expect(
|
|
23
|
+
await SponsorshipAttributions.getExternal(db, { externalId: 'partner-app', orgId: 'org_2' }),
|
|
24
|
+
).toBeUndefined()
|
|
25
|
+
expect(
|
|
26
|
+
await SponsorshipAttributions.getExternal(db, { externalId: 'unknown-app', orgId: 'org_1' }),
|
|
27
|
+
).toBeUndefined()
|
|
28
|
+
expect(await db.kysely.selectFrom('sponsorship_attributions').selectAll().execute()).toStrictEqual([attribution]) // prettier-ignore
|
|
29
|
+
await db.close()
|
|
30
|
+
})
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
describe('resolveExternal', () => {
|
|
34
|
+
test('behavior: resolves one canonical id per organization and external id', async () => {
|
|
35
|
+
const db = create()
|
|
36
|
+
await db.migrate()
|
|
37
|
+
const options = { externalId: 'privy-account-1', orgId: 'org_1' }
|
|
38
|
+
|
|
39
|
+
const [first, retried, otherOrganization] = await Promise.all([
|
|
40
|
+
SponsorshipAttributions.resolveExternal(db, options),
|
|
41
|
+
SponsorshipAttributions.resolveExternal(db, options),
|
|
42
|
+
SponsorshipAttributions.resolveExternal(db, { ...options, orgId: 'org_2' }),
|
|
43
|
+
])
|
|
44
|
+
|
|
45
|
+
expect(retried.id).toBe(first.id)
|
|
46
|
+
expect(otherOrganization.id).not.toBe(first.id)
|
|
47
|
+
await db.close()
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
describe('resolveProject', () => {
|
|
52
|
+
test('behavior: resolves Tempo Projects through the canonical attribution table', async () => {
|
|
53
|
+
const db = create()
|
|
54
|
+
await db.migrate()
|
|
55
|
+
|
|
56
|
+
const attribution = await SponsorshipAttributions.resolveProject(db, {
|
|
57
|
+
orgId: 'org_1',
|
|
58
|
+
projectId: 'prj_1',
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
expect(attribution).toMatchObject({ externalId: null, orgId: 'org_1', projectId: 'prj_1' })
|
|
62
|
+
await db.close()
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
test('migration: preserves legacy project promotion state and spend attribution', async () => {
|
|
66
|
+
const db = create()
|
|
67
|
+
await db.migrate()
|
|
68
|
+
await db.kysely
|
|
69
|
+
.insertInto('projects')
|
|
70
|
+
.values({
|
|
71
|
+
createdAt: '2026-01-01T00:00:00.000Z',
|
|
72
|
+
id: 'prj_1',
|
|
73
|
+
name: 'App',
|
|
74
|
+
orgId: 'org_1',
|
|
75
|
+
sponsorshipSubsidyEndsAt: '2026-04-01T00:00:00.000Z',
|
|
76
|
+
sponsorshipSubsidyStartsAt: '2026-01-01T00:00:00.000Z',
|
|
77
|
+
sponsorshipSpendLimit: '1000000',
|
|
78
|
+
updatedAt: '2026-01-01T00:00:00.000Z',
|
|
79
|
+
})
|
|
80
|
+
.execute()
|
|
81
|
+
await SponsoredTransactions.upsert(db, {
|
|
82
|
+
apiKeyId: 'key_1',
|
|
83
|
+
billable: false,
|
|
84
|
+
chainId: 4217,
|
|
85
|
+
environment: 'production',
|
|
86
|
+
feeMax: '500000',
|
|
87
|
+
orgId: 'org_1',
|
|
88
|
+
projectId: 'prj_1',
|
|
89
|
+
signPayload: `0x${'11'.repeat(32)}`,
|
|
90
|
+
transaction: `0x${'22'.repeat(32)}`,
|
|
91
|
+
})
|
|
92
|
+
for (const name of [
|
|
93
|
+
'0156_project_sponsorship_attributions',
|
|
94
|
+
'0157_project_sponsored_transaction_attributions',
|
|
95
|
+
]) {
|
|
96
|
+
const migration = Db.migrations.find((candidate) => candidate.name === name)
|
|
97
|
+
if (!migration) throw new Error(`Expected ${name}.`)
|
|
98
|
+
await migration.up(db.kysely).execute()
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const attribution = await SponsorshipAttributions.resolveProject(db, {
|
|
102
|
+
orgId: 'org_1',
|
|
103
|
+
projectId: 'prj_1',
|
|
104
|
+
})
|
|
105
|
+
expect(attribution).toMatchObject({
|
|
106
|
+
endsAt: '2026-04-01T00:00:00.000Z',
|
|
107
|
+
spendLimit: '1000000',
|
|
108
|
+
startsAt: '2026-01-01T00:00:00.000Z',
|
|
109
|
+
})
|
|
110
|
+
expect(await SponsoredTransactions.listPending(db)).toMatchObject([
|
|
111
|
+
{ sponsorshipAttributionId: attribution.id },
|
|
112
|
+
])
|
|
113
|
+
await db.close()
|
|
114
|
+
})
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
describe('activate', () => {
|
|
118
|
+
test('behavior: preserves the first promotion snapshot', async () => {
|
|
119
|
+
const db = create()
|
|
120
|
+
await db.migrate()
|
|
121
|
+
const attribution = await SponsorshipAttributions.resolveExternal(db, {
|
|
122
|
+
externalId: 'privy-account-1',
|
|
123
|
+
orgId: 'org_1',
|
|
124
|
+
})
|
|
125
|
+
const options = {
|
|
126
|
+
endsAt: '2026-04-01T00:00:00.000Z',
|
|
127
|
+
id: attribution.id,
|
|
128
|
+
orgId: 'org_1',
|
|
129
|
+
spendLimit: '1000000',
|
|
130
|
+
startsAt: '2026-01-01T00:00:00.000Z',
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const first = await SponsorshipAttributions.activate(db, options)
|
|
134
|
+
const retried = await SponsorshipAttributions.activate(db, {
|
|
135
|
+
...options,
|
|
136
|
+
endsAt: '2027-04-01T00:00:00.000Z',
|
|
137
|
+
spendLimit: '2000000',
|
|
138
|
+
startsAt: '2027-01-01T00:00:00.000Z',
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
expect(retried).toStrictEqual(first)
|
|
142
|
+
await db.close()
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
describe('get', () => {
|
|
147
|
+
test('behavior: does not cross organization boundaries', async () => {
|
|
148
|
+
const db = create()
|
|
149
|
+
await db.migrate()
|
|
150
|
+
const attribution = await SponsorshipAttributions.resolveExternal(db, {
|
|
151
|
+
externalId: 'privy-account-1',
|
|
152
|
+
orgId: 'org_1',
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
expect(
|
|
156
|
+
await SponsorshipAttributions.get(db, { id: attribution.id, orgId: 'org_2' }),
|
|
157
|
+
).toBeUndefined()
|
|
158
|
+
await db.close()
|
|
159
|
+
})
|
|
160
|
+
})
|