tapimo 0.15.1 → 0.18.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 +137 -0
- package/dist/ApiKey.d.ts +1 -0
- package/dist/ApiKey.d.ts.map +1 -1
- package/dist/ApiKey.js +4 -2
- package/dist/ApiKey.js.map +1 -1
- package/dist/ApiKeys.d.ts +37 -11
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +163 -10
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +13085 -11974
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +46 -15
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +1 -1
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +1 -1
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +893 -191
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +5 -1
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +70 -70
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +8 -3
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +66 -27
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +36 -7
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts +25 -25
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +5 -4
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/route-policies.d.ts +632 -0
- package/dist/admin/apps/route-policies.d.ts.map +1 -0
- package/dist/admin/apps/route-policies.js +257 -0
- package/dist/admin/apps/route-policies.js.map +1 -0
- package/dist/admin/apps/routes-support.js +39 -3
- package/dist/admin/apps/routes-support.js.map +1 -1
- package/dist/admin/apps/routes.d.ts +529 -76
- package/dist/admin/apps/routes.d.ts.map +1 -1
- package/dist/admin/apps/routes.js +82 -1
- package/dist/admin/apps/routes.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +157 -157
- package/dist/admin/index.d.ts +0 -1
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +0 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +205 -201
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +65 -1
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +1 -1
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +58 -59
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/data/App.d.ts +2709 -2670
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +357 -357
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +50 -0
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +248 -248
- package/dist/apps/data/routes/balances.d.ts +22 -22
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +5 -7
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +125 -125
- package/dist/apps/data/routes/coingecko.d.ts +54 -54
- package/dist/apps/data/routes/earn.d.ts +103 -12
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +456 -220
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +267 -97
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +109 -127
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +83 -54
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +43 -43
- package/dist/apps/data/routes/receipts.d.ts +235 -235
- package/dist/apps/data/routes/rpc.d.ts +30 -30
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +11 -6
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +2 -0
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +30 -22
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +77 -77
- package/dist/apps/data/routes/valuation.d.ts +32 -32
- package/dist/apps/data/routes/verified-tokens.d.ts +86 -86
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +1 -1
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +31 -31
- package/dist/apps/management/App.d.ts +2909 -2064
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/App.js +2 -0
- package/dist/apps/management/App.js.map +1 -1
- package/dist/apps/management/Billing.d.ts +2 -4
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +65 -26
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +257 -245
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +70 -11
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +84 -84
- package/dist/apps/management/routes/cli.d.ts +912 -0
- package/dist/apps/management/routes/cli.d.ts.map +1 -0
- package/dist/apps/management/routes/cli.js +416 -0
- package/dist/apps/management/routes/cli.js.map +1 -0
- package/dist/apps/management/routes/faucet.d.ts +8 -8
- package/dist/apps/management/routes/invitations.d.ts +138 -138
- package/dist/apps/management/routes/invite-links.d.ts +172 -172
- package/dist/apps/management/routes/members.d.ts +16 -16
- package/dist/apps/management/routes/orgs.d.ts +104 -104
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +8 -2
- 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/usage.d.ts +8 -8
- package/dist/apps/management/routes/verified-token-requests.d.ts +86 -86
- package/dist/apps/management/routes/webhooks.d.ts +485 -485
- package/dist/apps/mpp/App.d.ts +44 -44
- package/dist/apps/mpp/internal/Policy.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Policy.js +4 -2
- package/dist/apps/mpp/internal/Policy.js.map +1 -1
- package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Sponsorship.js +6 -4
- package/dist/apps/mpp/internal/Sponsorship.js.map +1 -1
- package/dist/apps/relay/App.d.ts +8 -0
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +16 -4
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/relay/Sponsorships.d.ts +4 -6
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +71 -60
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/apps/routes/Access.d.ts +53 -0
- package/dist/apps/routes/Access.d.ts.map +1 -1
- package/dist/apps/routes/Access.js +121 -0
- package/dist/apps/routes/Access.js.map +1 -1
- package/dist/apps/routes/App.d.ts +397 -158
- package/dist/apps/routes/App.d.ts.map +1 -1
- package/dist/apps/routes/App.js.map +1 -1
- package/dist/apps/routes/routes/chains.d.ts +25 -25
- package/dist/apps/routes/routes/deposit-addresses.d.ts +169 -61
- package/dist/apps/routes/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/routes/routes/deposit-addresses.js +217 -32
- package/dist/apps/routes/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/routes/routes/quotes.d.ts +171 -81
- package/dist/apps/routes/routes/quotes.d.ts.map +1 -1
- package/dist/apps/routes/routes/quotes.js +101 -27
- package/dist/apps/routes/routes/quotes.js.map +1 -1
- package/dist/apps/routes/routes/transfers.d.ts +532 -480
- package/dist/apps/routes/routes/transfers.d.ts.map +1 -1
- package/dist/apps/routes/routes/transfers.js +182 -37
- package/dist/apps/routes/routes/transfers.js.map +1 -1
- package/dist/cli/ApiKeys.d.ts +120 -0
- package/dist/cli/ApiKeys.d.ts.map +1 -0
- package/dist/cli/ApiKeys.js +138 -0
- package/dist/cli/ApiKeys.js.map +1 -0
- package/dist/cli/Cli.d.ts +92 -34
- package/dist/cli/Cli.d.ts.map +1 -1
- package/dist/cli/Cli.js +188 -11
- package/dist/cli/Cli.js.map +1 -1
- package/dist/cli/Credentials.d.ts +95 -0
- package/dist/cli/Credentials.d.ts.map +1 -0
- package/dist/cli/Credentials.js +110 -0
- package/dist/cli/Credentials.js.map +1 -0
- package/dist/cli/Spec.d.ts +59 -0
- package/dist/cli/Spec.d.ts.map +1 -0
- package/dist/cli/Spec.js +77 -0
- package/dist/cli/Spec.js.map +1 -0
- package/dist/cli/bin.js +5 -1
- package/dist/cli/bin.js.map +1 -1
- package/dist/cli/commands/admin.d.ts +5 -5
- package/dist/cli/commands/admin.d.ts.map +1 -1
- package/dist/cli/commands/auth.d.ts +73 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +204 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/keys.d.ts +17 -0
- package/dist/cli/commands/keys.d.ts.map +1 -0
- package/dist/cli/commands/keys.js +109 -0
- package/dist/cli/commands/keys.js.map +1 -0
- package/dist/cloudflare.d.ts +27 -2
- package/dist/cloudflare.d.ts.map +1 -1
- package/dist/cloudflare.js +144 -17
- package/dist/cloudflare.js.map +1 -1
- package/dist/db/Db.d.ts +23 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +413 -1
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +44 -1
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +56 -3
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/apiKeyAdmissions.d.ts +28 -2
- package/dist/db/tables/apiKeyAdmissions.d.ts.map +1 -1
- package/dist/db/tables/apiKeyAdmissions.js +65 -9
- package/dist/db/tables/apiKeyAdmissions.js.map +1 -1
- package/dist/db/tables/apiKeyOwnerTombstones.d.ts +2 -0
- package/dist/db/tables/apiKeyOwnerTombstones.d.ts.map +1 -1
- package/dist/db/tables/apiKeyOwnerTombstones.js +2 -2
- package/dist/db/tables/apiKeyOwnerTombstones.js.map +1 -1
- package/dist/db/tables/authAccounts.d.ts.map +1 -1
- package/dist/db/tables/authAccounts.js +1 -0
- package/dist/db/tables/authAccounts.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +5 -1
- package/dist/db/tables/earnVaults.d.ts.map +1 -1
- package/dist/db/tables/earnVaults.js +12 -1
- package/dist/db/tables/earnVaults.js.map +1 -1
- package/dist/db/tables/organizations.d.ts +4 -2
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +8 -34
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/requestUsage.d.ts +5 -1
- package/dist/db/tables/requestUsage.d.ts.map +1 -1
- package/dist/db/tables/requestUsage.js +10 -2
- package/dist/db/tables/requestUsage.js.map +1 -1
- package/dist/db/tables/rewardEligibilityAssociations.d.ts +13 -0
- package/dist/db/tables/rewardEligibilityAssociations.d.ts.map +1 -1
- package/dist/db/tables/rewardEligibilityAssociations.js +11 -0
- package/dist/db/tables/rewardEligibilityAssociations.js.map +1 -1
- package/dist/db/tables/rewardRuns.d.ts.map +1 -1
- package/dist/db/tables/rewardRuns.js +4 -0
- package/dist/db/tables/rewardRuns.js.map +1 -1
- package/dist/db/tables/rewardTransactionAttempts.d.ts.map +1 -1
- package/dist/db/tables/rewardTransactionAttempts.js +2 -0
- package/dist/db/tables/rewardTransactionAttempts.js.map +1 -1
- package/dist/db/tables/routesDepositAddresses.d.ts +29 -0
- package/dist/db/tables/routesDepositAddresses.d.ts.map +1 -1
- package/dist/db/tables/routesDepositAddresses.js +84 -31
- package/dist/db/tables/routesDepositAddresses.js.map +1 -1
- package/dist/db/tables/routesDeposits.d.ts.map +1 -1
- package/dist/db/tables/routesDeposits.js +31 -21
- package/dist/db/tables/routesDeposits.js.map +1 -1
- package/dist/db/tables/routesIdempotency.d.ts.map +1 -1
- package/dist/db/tables/routesIdempotency.js +2 -0
- package/dist/db/tables/routesIdempotency.js.map +1 -1
- package/dist/db/tables/routesPolicies.d.ts +58 -0
- package/dist/db/tables/routesPolicies.d.ts.map +1 -0
- package/dist/db/tables/routesPolicies.js +198 -0
- package/dist/db/tables/routesPolicies.js.map +1 -0
- package/dist/db/tables/routesTransferSubsidies.d.ts +22 -0
- package/dist/db/tables/routesTransferSubsidies.d.ts.map +1 -1
- package/dist/db/tables/routesTransferSubsidies.js +41 -0
- package/dist/db/tables/routesTransferSubsidies.js.map +1 -1
- package/dist/db/tables/routesTransferSubsidyNonces.d.ts.map +1 -1
- package/dist/db/tables/routesTransferSubsidyNonces.js +12 -4
- package/dist/db/tables/routesTransferSubsidyNonces.js.map +1 -1
- package/dist/db/tables/routesTransfers.d.ts +26 -1
- package/dist/db/tables/routesTransfers.d.ts.map +1 -1
- package/dist/db/tables/routesTransfers.js +36 -6
- package/dist/db/tables/routesTransfers.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +45 -13
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +144 -33
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/users.d.ts +2 -0
- package/dist/db/tables/users.d.ts.map +1 -1
- package/dist/db/tables/users.js +11 -0
- package/dist/db/tables/users.js.map +1 -1
- package/dist/handlers/internal/multisig.d.ts +1 -1
- package/dist/handlers/internal/multisig.d.ts.map +1 -1
- package/dist/handlers/internal/multisig.js +3 -2
- package/dist/handlers/internal/multisig.js.map +1 -1
- package/dist/handlers/relay.d.ts +2 -0
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +34 -15
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +57 -6
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +182 -78
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/BetterAuth.d.ts +22 -0
- package/dist/internal/BetterAuth.d.ts.map +1 -1
- package/dist/internal/BetterAuth.js +17 -14
- package/dist/internal/BetterAuth.js.map +1 -1
- package/dist/internal/Cache.d.ts +5 -0
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +3 -1
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/CliAuth.d.ts +243 -0
- package/dist/internal/CliAuth.d.ts.map +1 -0
- package/dist/internal/CliAuth.js +249 -0
- package/dist/internal/CliAuth.js.map +1 -0
- package/dist/internal/EarnSharePrices.d.ts +1 -1
- package/dist/internal/EarnSharePrices.d.ts.map +1 -1
- package/dist/internal/EarnSharePrices.js +7 -3
- package/dist/internal/EarnSharePrices.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +47 -0
- package/dist/internal/EarnVaults.d.ts.map +1 -1
- package/dist/internal/EarnVaults.js +188 -4
- package/dist/internal/EarnVaults.js.map +1 -1
- package/dist/internal/EarnWithdrawals.d.ts +73 -0
- package/dist/internal/EarnWithdrawals.d.ts.map +1 -0
- package/dist/internal/EarnWithdrawals.js +189 -0
- package/dist/internal/EarnWithdrawals.js.map +1 -0
- package/dist/internal/ExecutionContext.d.ts +21 -0
- package/dist/internal/ExecutionContext.d.ts.map +1 -0
- package/dist/internal/ExecutionContext.js +16 -0
- package/dist/internal/ExecutionContext.js.map +1 -0
- package/dist/internal/Log.d.ts +7 -3
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +163 -130
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +26 -1
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/RateLimit.d.ts +67 -0
- package/dist/internal/RateLimit.d.ts.map +1 -1
- package/dist/internal/RateLimit.js +174 -27
- package/dist/internal/RateLimit.js.map +1 -1
- package/dist/internal/Store.d.ts +6 -0
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +4 -5
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Timing.d.ts +6 -0
- package/dist/internal/Timing.d.ts.map +1 -1
- package/dist/internal/Timing.js +21 -1
- package/dist/internal/Timing.js.map +1 -1
- package/dist/internal/Tron.d.ts +124 -0
- package/dist/internal/Tron.d.ts.map +1 -0
- package/dist/internal/Tron.js +202 -0
- package/dist/internal/Tron.js.map +1 -0
- package/dist/internal/Viem.d.ts +4 -0
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +25 -6
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/rewards/Read.d.ts +2 -2
- package/dist/internal/rewards/Read.d.ts.map +1 -1
- package/dist/internal/rewards/Read.js +11 -2
- package/dist/internal/rewards/Read.js.map +1 -1
- package/dist/internal/routes/Action.d.ts +27 -0
- package/dist/internal/routes/Action.d.ts.map +1 -1
- package/dist/internal/routes/Action.js +49 -1
- package/dist/internal/routes/Action.js.map +1 -1
- package/dist/internal/routes/Chain.d.ts +2 -0
- package/dist/internal/routes/Chain.d.ts.map +1 -1
- package/dist/internal/routes/Chain.js +4 -0
- package/dist/internal/routes/Chain.js.map +1 -1
- package/dist/internal/routes/DepositAddress.d.ts.map +1 -1
- package/dist/internal/routes/DepositAddress.js +5 -0
- package/dist/internal/routes/DepositAddress.js.map +1 -1
- package/dist/internal/routes/Evidence.d.ts.map +1 -1
- package/dist/internal/routes/Evidence.js +6 -2
- package/dist/internal/routes/Evidence.js.map +1 -1
- package/dist/internal/routes/EvmTransferSettlement.d.ts +17 -0
- package/dist/internal/routes/EvmTransferSettlement.d.ts.map +1 -0
- package/dist/internal/routes/EvmTransferSettlement.js +196 -0
- package/dist/internal/routes/EvmTransferSettlement.js.map +1 -0
- package/dist/internal/routes/Policy.d.ts +161 -0
- package/dist/internal/routes/Policy.d.ts.map +1 -0
- package/dist/internal/routes/Policy.js +249 -0
- package/dist/internal/routes/Policy.js.map +1 -0
- package/dist/internal/routes/Provider.d.ts +66 -3
- package/dist/internal/routes/Provider.d.ts.map +1 -1
- package/dist/internal/routes/Provider.js +106 -27
- package/dist/internal/routes/Provider.js.map +1 -1
- package/dist/internal/routes/Quota.d.ts +57 -0
- package/dist/internal/routes/Quota.d.ts.map +1 -0
- package/dist/internal/routes/Quota.js +144 -0
- package/dist/internal/routes/Quota.js.map +1 -0
- package/dist/internal/routes/Reconciliation.d.ts.map +1 -1
- package/dist/internal/routes/Reconciliation.js +163 -47
- package/dist/internal/routes/Reconciliation.js.map +1 -1
- package/dist/internal/routes/SolanaTransferSettlement.d.ts +12 -0
- package/dist/internal/routes/SolanaTransferSettlement.d.ts.map +1 -0
- package/dist/internal/routes/SolanaTransferSettlement.js +220 -0
- package/dist/internal/routes/SolanaTransferSettlement.js.map +1 -0
- package/dist/internal/routes/SolanaTransferSubsidy.d.ts +172 -0
- package/dist/internal/routes/SolanaTransferSubsidy.d.ts.map +1 -0
- package/dist/internal/routes/SolanaTransferSubsidy.js +564 -0
- package/dist/internal/routes/SolanaTransferSubsidy.js.map +1 -0
- package/dist/internal/routes/Subsidy.d.ts +2 -2
- package/dist/internal/routes/Subsidy.d.ts.map +1 -1
- package/dist/internal/routes/Subsidy.js +2 -2
- package/dist/internal/routes/Subsidy.js.map +1 -1
- package/dist/internal/routes/Transfer.d.ts +229 -1
- package/dist/internal/routes/Transfer.d.ts.map +1 -1
- package/dist/internal/routes/Transfer.js +644 -7
- package/dist/internal/routes/Transfer.js.map +1 -1
- package/dist/internal/routes/TransferReconciliation.d.ts +6 -0
- package/dist/internal/routes/TransferReconciliation.d.ts.map +1 -1
- package/dist/internal/routes/TransferReconciliation.js +83 -159
- package/dist/internal/routes/TransferReconciliation.js.map +1 -1
- package/dist/internal/routes/TransferSettlement.d.ts +45 -0
- package/dist/internal/routes/TransferSettlement.d.ts.map +1 -0
- package/dist/internal/routes/TransferSettlement.js +2 -0
- package/dist/internal/routes/TransferSettlement.js.map +1 -0
- package/dist/internal/routes/TransferSubsidy.d.ts +23 -8
- package/dist/internal/routes/TransferSubsidy.d.ts.map +1 -1
- package/dist/internal/routes/TransferSubsidy.js +64 -5
- package/dist/internal/routes/TransferSubsidy.js.map +1 -1
- package/dist/internal/routes/TronTransferSettlement.d.ts +12 -0
- package/dist/internal/routes/TronTransferSettlement.d.ts.map +1 -0
- package/dist/internal/routes/TronTransferSettlement.js +201 -0
- package/dist/internal/routes/TronTransferSettlement.js.map +1 -0
- package/dist/internal/routes/TronTransferSubsidy.d.ts +174 -0
- package/dist/internal/routes/TronTransferSubsidy.d.ts.map +1 -0
- package/dist/internal/routes/TronTransferSubsidy.js +439 -0
- package/dist/internal/routes/TronTransferSubsidy.js.map +1 -0
- package/dist/internal/routes/index.d.ts +3 -0
- package/dist/internal/routes/index.d.ts.map +1 -1
- package/dist/internal/routes/index.js +3 -0
- package/dist/internal/routes/index.js.map +1 -1
- package/dist/internal/routes/providers/across.d.ts +3 -0
- package/dist/internal/routes/providers/across.d.ts.map +1 -1
- package/dist/internal/routes/providers/across.js +11 -0
- package/dist/internal/routes/providers/across.js.map +1 -1
- package/dist/internal/routes/providers/legacyMesh.d.ts +29 -0
- package/dist/internal/routes/providers/legacyMesh.d.ts.map +1 -0
- package/dist/internal/routes/providers/legacyMesh.js +474 -0
- package/dist/internal/routes/providers/legacyMesh.js.map +1 -0
- package/dist/internal/routes/providers/legacyMeshDelivery.d.ts +59 -0
- package/dist/internal/routes/providers/legacyMeshDelivery.d.ts.map +1 -0
- package/dist/internal/routes/providers/legacyMeshDelivery.js +229 -0
- package/dist/internal/routes/providers/legacyMeshDelivery.js.map +1 -0
- package/dist/internal/routes/providers/legacyMeshOutbound.d.ts +19 -0
- package/dist/internal/routes/providers/legacyMeshOutbound.d.ts.map +1 -0
- package/dist/internal/routes/providers/legacyMeshOutbound.js +457 -0
- package/dist/internal/routes/providers/legacyMeshOutbound.js.map +1 -0
- package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts +123 -0
- package/dist/internal/routes/providers/legacyMeshOutboundDelivery.d.ts.map +1 -0
- package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js +333 -0
- package/dist/internal/routes/providers/legacyMeshOutboundDelivery.js.map +1 -0
- package/dist/internal/routes/providers/propAmm.d.ts +70 -0
- package/dist/internal/routes/providers/propAmm.d.ts.map +1 -0
- package/dist/internal/routes/providers/propAmm.js +524 -0
- package/dist/internal/routes/providers/propAmm.js.map +1 -0
- package/dist/internal/routes/providers/relay.d.ts +3 -0
- package/dist/internal/routes/providers/relay.d.ts.map +1 -1
- package/dist/internal/routes/providers/relay.js +352 -41
- package/dist/internal/routes/providers/relay.js.map +1 -1
- package/dist/internal/routes/providers/rhino.d.ts +3 -0
- package/dist/internal/routes/providers/rhino.d.ts.map +1 -1
- package/dist/internal/routes/providers/rhino.js +11 -0
- package/dist/internal/routes/providers/rhino.js.map +1 -1
- package/dist/internal/routes/providers/squid.d.ts +3 -0
- package/dist/internal/routes/providers/squid.d.ts.map +1 -1
- package/dist/internal/routes/providers/squid.js +19 -0
- package/dist/internal/routes/providers/squid.js.map +1 -1
- package/dist/internal/routes/providers/stargate.d.ts.map +1 -1
- package/dist/internal/routes/providers/stargate.js +22 -9
- package/dist/internal/routes/providers/stargate.js.map +1 -1
- package/dist/internal/routes/providers/symbiosis.d.ts.map +1 -1
- package/dist/internal/routes/providers/symbiosis.js +13 -17
- package/dist/internal/routes/providers/symbiosis.js.map +1 -1
- package/dist/providers/index.d.ts +14 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +6 -0
- package/dist/providers/index.js.map +1 -1
- package/package.json +16 -6
- package/src/ApiKey.ts +7 -3
- package/src/ApiKeys.test.ts +652 -8
- package/src/ApiKeys.ts +191 -11
- package/src/App.test.ts +405 -18
- package/src/App.ts +51 -15
- package/src/Client.test-d.ts +157 -10
- package/src/Client.test.ts +4 -4
- package/src/Scope.ts +1 -2
- package/src/admin/App.ts +11 -5
- package/src/admin/apps/api-keys.test.ts +98 -2
- package/src/admin/apps/api-keys.ts +21 -12
- package/src/admin/apps/earn-vaults.test.ts +76 -7
- package/src/admin/apps/earn-vaults.ts +47 -8
- package/src/admin/apps/organizations.test.ts +147 -31
- package/src/admin/apps/organizations.ts +5 -4
- package/src/admin/apps/route-policies.test.ts +220 -0
- package/src/admin/apps/route-policies.ts +322 -0
- package/src/admin/apps/routes-support.test.ts +107 -2
- package/src/admin/apps/routes-support.ts +43 -3
- package/src/admin/apps/routes.test.ts +150 -0
- package/src/admin/apps/routes.ts +97 -1
- package/src/admin/apps/scopes.test.ts +1 -1
- package/src/admin/index.ts +0 -1
- package/src/admin/ui/plugin.ts +2 -1
- package/src/admin/ui/src/components/Dialog.tsx +1 -1
- package/src/admin/ui/src/components/EarnVaultForm.tsx +45 -0
- package/src/admin/ui/src/components/RoutePicker.tsx +79 -0
- package/src/admin/ui/src/lib/earn-vaults.ts +1 -1
- package/src/admin/ui/src/lib/route-policies.test.ts +452 -0
- package/src/admin/ui/src/lib/route-policies.ts +232 -0
- package/src/admin/ui/src/lib/routes.ts +34 -0
- package/src/admin/ui/src/routeTree.gen.ts +21 -0
- package/src/admin/ui/src/routes/api-keys.tsx +21 -2
- package/src/admin/ui/src/routes/early-access.tsx +1 -0
- package/src/admin/ui/src/routes/earn.vaults.tsx +1 -0
- package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +22 -0
- package/src/admin/ui/src/routes/earn.vaults_.new.tsx +10 -0
- package/src/admin/ui/src/routes/organizations.tsx +1 -0
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +18 -3
- package/src/admin/ui/src/routes/route-policies.tsx +678 -0
- package/src/admin/ui/src/routes/routes.tsx +85 -2
- package/src/admin/ui/src/routes/routes_.support.tsx +6 -22
- package/src/admin/ui/src/routes/subsidies.tsx +1 -0
- package/src/admin/ui/src/routes/verified-tokens.tsx +1 -0
- package/src/admin/ui.generated.ts +258 -202
- package/src/analytics/Analytics.test.ts +4 -50
- package/src/analytics/Analytics.ts +65 -1
- package/src/analytics/tables/requestEvents.test.ts +402 -1
- package/src/analytics/tables/requestEvents.ts +62 -93
- package/src/apps/data/routes/activities.test.ts +315 -14
- package/src/apps/data/routes/activities.ts +60 -0
- package/src/apps/data/routes/balances.ts +5 -7
- package/src/apps/data/routes/earn.bench.ts +18 -0
- package/src/apps/data/routes/earn.local.test.ts +507 -0
- package/src/apps/data/routes/earn.test.ts +405 -127
- package/src/apps/data/routes/earn.ts +660 -270
- package/src/apps/data/routes/exchanges.bench.ts +3 -1
- package/src/apps/data/routes/exchanges.test.ts +166 -2
- package/src/apps/data/routes/exchanges.ts +308 -101
- package/src/apps/data/routes/fee-amm.test.ts +134 -2
- package/src/apps/data/routes/fee-amm.ts +122 -60
- package/src/apps/data/routes/receipts.test.ts +21 -18
- package/src/apps/data/routes/rpc.test.ts +2 -2
- package/src/apps/data/routes/tokens.provenance.test.ts +157 -0
- package/src/apps/data/routes/tokens.test.ts +4 -4
- package/src/apps/data/routes/tokens.ts +11 -6
- package/src/apps/data/routes/transactions.test.ts +29 -0
- package/src/apps/data/routes/transactions.ts +33 -22
- package/src/apps/data/routes/webhooks.test.ts +12 -3
- package/src/apps/data/routes/webhooks.ts +2 -1
- package/src/apps/management/App.ts +4 -0
- package/src/apps/management/Billing.test.ts +253 -27
- package/src/apps/management/Billing.ts +83 -29
- package/src/apps/management/routes/api-keys.test.ts +1 -1
- package/src/apps/management/routes/api-keys.ts +85 -11
- package/src/apps/management/routes/billing.test.ts +68 -4
- package/src/apps/management/routes/cli.test.ts +370 -0
- package/src/apps/management/routes/cli.ts +533 -0
- package/src/apps/management/routes/me.test.ts +14 -4
- package/src/apps/management/routes/orgs.test.ts +108 -4
- package/src/apps/management/routes/orgs.ts +7 -2
- package/src/apps/management/routes/usage.test.ts +2 -2
- package/src/apps/mpp/internal/Policy.test.ts +51 -4
- package/src/apps/mpp/internal/Policy.ts +6 -2
- package/src/apps/mpp/internal/Sponsorship.test.ts +29 -0
- package/src/apps/mpp/internal/Sponsorship.ts +6 -4
- package/src/apps/relay/App.test.ts +85 -1
- package/src/apps/relay/App.ts +28 -4
- package/src/apps/relay/Sponsorships.test.ts +97 -1
- package/src/apps/relay/Sponsorships.ts +77 -66
- package/src/apps/routes/Access.test.ts +319 -0
- package/src/apps/routes/Access.ts +147 -0
- package/src/apps/routes/App.ts +10 -0
- package/src/apps/routes/routes/chains.test.ts +3 -2
- package/src/apps/routes/routes/deposit-addresses.test.ts +978 -34
- package/src/apps/routes/routes/deposit-addresses.ts +243 -32
- package/src/apps/routes/routes/propAmm.local.test.ts +951 -0
- package/src/apps/routes/routes/quotes.test.ts +81 -8
- package/src/apps/routes/routes/quotes.ts +109 -27
- package/src/apps/routes/routes/transfers.test.ts +252 -15
- package/src/apps/routes/routes/transfers.ts +212 -33
- package/src/cli/ApiKeys.test.ts +265 -0
- package/src/cli/ApiKeys.ts +189 -0
- package/src/cli/Cli.test.ts +188 -0
- package/src/cli/Cli.ts +280 -12
- package/src/cli/Credentials.test.ts +122 -0
- package/src/cli/Credentials.ts +144 -0
- package/src/cli/Spec.test.ts +133 -0
- package/src/cli/Spec.ts +132 -0
- package/src/cli/bin.test.ts +49 -0
- package/src/cli/bin.ts +5 -1
- package/src/cli/commands/auth.test.ts +138 -0
- package/src/cli/commands/auth.ts +254 -0
- package/src/cli/commands/keys.test.ts +68 -0
- package/src/cli/commands/keys.ts +125 -0
- package/src/cloudflare.ts +184 -36
- package/src/db/Db.test.ts +877 -0
- package/src/db/Db.ts +498 -1
- package/src/db/Schema.ts +75 -4
- package/src/db/tables/apiKeyAdmissions.test.ts +57 -0
- package/src/db/tables/apiKeyAdmissions.ts +101 -11
- package/src/db/tables/apiKeyOwnerTombstones.ts +2 -2
- package/src/db/tables/authAccounts.test.ts +30 -0
- package/src/db/tables/authAccounts.ts +1 -0
- package/src/db/tables/earnVaults.test.ts +34 -0
- package/src/db/tables/earnVaults.ts +17 -2
- package/src/db/tables/organizations.test.ts +148 -84
- package/src/db/tables/organizations.ts +11 -43
- package/src/db/tables/requestUsage.ts +13 -2
- package/src/db/tables/rewardCampaigns.test.ts +163 -0
- package/src/db/tables/rewardEligibilityAssociations.test.ts +14 -0
- package/src/db/tables/rewardEligibilityAssociations.ts +24 -0
- package/src/db/tables/rewardRuns.ts +4 -0
- package/src/db/tables/rewardTransactionAttempts.ts +2 -0
- package/src/db/tables/routesDepositAddresses.test.ts +263 -0
- package/src/db/tables/routesDepositAddresses.ts +118 -34
- package/src/db/tables/routesDeposits.test.ts +66 -5
- package/src/db/tables/routesDeposits.ts +47 -26
- package/src/db/tables/routesIdempotency.test.ts +80 -0
- package/src/db/tables/routesIdempotency.ts +2 -0
- package/src/db/tables/routesPolicies.test.ts +143 -0
- package/src/db/tables/routesPolicies.ts +251 -0
- package/src/db/tables/routesTransferSubsidies.ts +64 -0
- package/src/db/tables/routesTransferSubsidyNonces.ts +16 -4
- package/src/db/tables/routesTransfers.test.ts +183 -2
- package/src/db/tables/routesTransfers.ts +65 -6
- package/src/db/tables/sponsoredTransactions.test.ts +351 -76
- package/src/db/tables/sponsoredTransactions.ts +182 -38
- package/src/db/tables/users.test.ts +51 -0
- package/src/db/tables/users.ts +12 -0
- package/src/handlers/internal/multisig.store.test.ts +120 -0
- package/src/handlers/internal/multisig.test.ts +389 -0
- package/src/handlers/internal/multisig.ts +13 -10
- package/src/handlers/relay.test.ts +259 -83
- package/src/handlers/relay.ts +36 -17
- package/src/internal/Auth.test.ts +291 -8
- package/src/internal/Auth.ts +227 -96
- package/src/internal/BetterAuth.test.ts +58 -22
- package/src/internal/BetterAuth.ts +23 -17
- package/src/internal/Cache.ts +3 -1
- package/src/internal/CliAuth.test.ts +279 -0
- package/src/internal/CliAuth.ts +319 -0
- package/src/internal/EarnSharePrices.test.ts +25 -0
- package/src/internal/EarnSharePrices.ts +9 -2
- package/src/internal/EarnVaults.test.ts +67 -0
- package/src/internal/EarnVaults.ts +299 -4
- package/src/internal/EarnWithdrawals.test.ts +315 -0
- package/src/internal/EarnWithdrawals.ts +266 -0
- package/src/internal/ExecutionContext.ts +31 -0
- package/src/internal/Log.test.ts +210 -0
- package/src/internal/Log.ts +180 -142
- package/src/internal/MetricSink.test.ts +190 -15
- package/src/internal/MetricSink.ts +27 -1
- package/src/internal/RateLimit.test.ts +144 -8
- package/src/internal/RateLimit.ts +254 -26
- package/src/internal/Store.ts +4 -5
- package/src/internal/Timing.test.ts +32 -0
- package/src/internal/Timing.ts +20 -1
- package/src/internal/Tron.test-d.ts +22 -0
- package/src/internal/Tron.test.ts +94 -0
- package/src/internal/Tron.ts +289 -0
- package/src/internal/Viem.rpc.test.ts +76 -0
- package/src/internal/Viem.ts +29 -6
- package/src/internal/rewards/Read.test.ts +109 -0
- package/src/internal/rewards/Read.ts +13 -4
- package/src/internal/routes/Action.test.ts +70 -0
- package/src/internal/routes/Action.ts +76 -1
- package/src/internal/routes/Chain.test.ts +18 -0
- package/src/internal/routes/Chain.ts +5 -0
- package/src/internal/routes/DepositAddress.ts +5 -0
- package/src/internal/routes/Evidence.test.ts +64 -0
- package/src/internal/routes/Evidence.ts +11 -3
- package/src/internal/routes/EvmTransferSettlement.ts +213 -0
- package/src/internal/routes/Policy.test.ts +316 -0
- package/src/internal/routes/Policy.ts +399 -0
- package/src/internal/routes/Provider.test.ts +103 -2
- package/src/internal/routes/Provider.ts +149 -27
- package/src/internal/routes/Quota.test.ts +149 -0
- package/src/internal/routes/Quota.ts +226 -0
- package/src/internal/routes/Reconciliation.local.test.ts +285 -0
- package/src/internal/routes/Reconciliation.test.ts +371 -13
- package/src/internal/routes/Reconciliation.ts +193 -42
- package/src/internal/routes/SolanaTransferSettlement.ts +232 -0
- package/src/internal/routes/SolanaTransferSubsidy.test.ts +471 -0
- package/src/internal/routes/SolanaTransferSubsidy.ts +760 -0
- package/src/internal/routes/SourceObservation.test.ts +221 -0
- package/src/internal/routes/Subsidy.local.test.ts +46 -0
- package/src/internal/routes/Subsidy.ts +4 -2
- package/src/internal/routes/Transfer.solana.test.ts +389 -0
- package/src/internal/routes/Transfer.test.ts +130 -1
- package/src/internal/routes/Transfer.tron.test.ts +172 -0
- package/src/internal/routes/Transfer.ts +866 -8
- package/src/internal/routes/TransferReconciliation.test.ts +26 -4
- package/src/internal/routes/TransferReconciliation.ts +91 -166
- package/src/internal/routes/TransferSettlement.ts +48 -0
- package/src/internal/routes/TransferSubsidy.local.test.ts +143 -0
- package/src/internal/routes/TransferSubsidy.test.ts +34 -4
- package/src/internal/routes/TransferSubsidy.ts +87 -12
- package/src/internal/routes/TronTransferSettlement.ts +212 -0
- package/src/internal/routes/TronTransferSubsidy.test.ts +109 -0
- package/src/internal/routes/TronTransferSubsidy.ts +619 -0
- package/src/internal/routes/index.test.ts +3 -0
- package/src/internal/routes/index.ts +3 -0
- package/src/internal/routes/providers/across.ts +13 -0
- package/src/internal/routes/providers/index.test.ts +141 -0
- package/src/internal/routes/providers/legacyMesh.test.ts +484 -0
- package/src/internal/routes/providers/legacyMesh.ts +633 -0
- package/src/internal/routes/providers/legacyMeshDelivery.test.ts +306 -0
- package/src/internal/routes/providers/legacyMeshDelivery.ts +320 -0
- package/src/internal/routes/providers/legacyMeshOutbound.test.ts +401 -0
- package/src/internal/routes/providers/legacyMeshOutbound.ts +566 -0
- package/src/internal/routes/providers/legacyMeshOutboundDelivery.ts +473 -0
- package/src/internal/routes/providers/propAmm.ts +640 -0
- package/src/internal/routes/providers/relay.test.ts +1263 -41
- package/src/internal/routes/providers/relay.ts +423 -38
- package/src/internal/routes/providers/rhino.ts +14 -1
- package/src/internal/routes/providers/squid.ts +21 -0
- package/src/internal/routes/providers/stargate.test.ts +105 -1
- package/src/internal/routes/providers/stargate.ts +22 -9
- package/src/internal/routes/providers/symbiosis.ts +13 -47
- package/src/providers/index.test.ts +2 -0
- package/src/providers/index.ts +18 -0
- package/dist/admin/Access.d.ts +0 -39
- package/dist/admin/Access.d.ts.map +0 -1
- package/dist/admin/Access.js +0 -73
- package/dist/admin/Access.js.map +0 -1
- package/src/admin/Access.test.ts +0 -130
- package/src/admin/Access.ts +0 -85
package/src/db/Schema.ts
CHANGED
|
@@ -8,10 +8,27 @@ import type * as routes_Catalog from '../internal/routes/Catalog.js'
|
|
|
8
8
|
import type * as routes_Deposit from '../internal/routes/Deposit.js'
|
|
9
9
|
import type * as routes_DepositAddress from '../internal/routes/DepositAddress.js'
|
|
10
10
|
import type * as routes_Provider from '../internal/routes/Provider.js'
|
|
11
|
+
import type * as routes_Policy from '../internal/routes/Policy.js'
|
|
11
12
|
import type * as routes_Transfer from '../internal/routes/Transfer.js'
|
|
12
13
|
import type * as routes_TransferSubsidy from '../internal/routes/TransferSubsidy.js'
|
|
13
14
|
import type * as internal_Schema from '../internal/Schema.js'
|
|
14
15
|
import type * as Webhooks from '../internal/Webhooks.js'
|
|
16
|
+
import type * as Scope from '../Scope.js'
|
|
17
|
+
|
|
18
|
+
/** Route policy overrides stored as jsonb. */
|
|
19
|
+
export const RoutesPolicyOverrides = z.custom<routes_Policy.Overrides>()
|
|
20
|
+
/** Columns of the `routes_policies` table. */
|
|
21
|
+
export const RoutesPolicy = z.object({
|
|
22
|
+
apiKeyId: z.string(),
|
|
23
|
+
createdAt: z.string(),
|
|
24
|
+
environment: z.enum(['production', 'sandbox']),
|
|
25
|
+
orgId: z.string(),
|
|
26
|
+
policy: RoutesPolicyOverrides,
|
|
27
|
+
projectId: z.string(),
|
|
28
|
+
updatedAt: z.string(),
|
|
29
|
+
version: z.number().check(z.int(), z.nonnegative()),
|
|
30
|
+
})
|
|
31
|
+
export type RoutesPolicy = z.output<typeof RoutesPolicy>
|
|
15
32
|
|
|
16
33
|
/** One authenticated administrator access to a protected admin API route. */
|
|
17
34
|
export const AdminAuditLog = z.object({
|
|
@@ -56,6 +73,7 @@ export const ApiKeyAdmission = z.object({
|
|
|
56
73
|
expiresAt: z.nullable(z.string()),
|
|
57
74
|
id: z.string(),
|
|
58
75
|
orgId: z.string(),
|
|
76
|
+
pendingScopes: z.nullable(z.custom<readonly Scope.Id[]>()),
|
|
59
77
|
projectId: z.nullable(z.string()),
|
|
60
78
|
})
|
|
61
79
|
|
|
@@ -185,6 +203,11 @@ export const EarnVault = z
|
|
|
185
203
|
description: z
|
|
186
204
|
.nullable(z.string())
|
|
187
205
|
.check(z.describe('Curated vault description, or null when absent.')),
|
|
206
|
+
earnings: z
|
|
207
|
+
.custom<z.output<typeof EarnVaults.schema.Earnings> | null>()
|
|
208
|
+
.check(
|
|
209
|
+
z.describe('Additional reward distributors beyond campaign history, or null for none.'),
|
|
210
|
+
),
|
|
188
211
|
label: z.string().check(z.describe('Curated vault label.')),
|
|
189
212
|
privateInputTokens: z
|
|
190
213
|
.custom<readonly Address[]>()
|
|
@@ -410,7 +433,12 @@ export const RequestUsageMeterEvent = z.object({
|
|
|
410
433
|
environment: z
|
|
411
434
|
.enum(['production', 'sandbox'])
|
|
412
435
|
.check(z.describe('Environment the requests were served under; `production` or `sandbox`.')),
|
|
413
|
-
error: z
|
|
436
|
+
error: z
|
|
437
|
+
.nullable(z.string())
|
|
438
|
+
.check(z.describe('Last failure or reconciliation detail, or null.')),
|
|
439
|
+
eventTimestamp: z
|
|
440
|
+
.optional(z.string())
|
|
441
|
+
.check(z.describe('Timestamp sent with this frozen Stripe meter event (ISO 8601).')),
|
|
414
442
|
firstAttemptedAt: z.string().check(z.describe('When this event was first claimed (ISO 8601).')),
|
|
415
443
|
identifier: z
|
|
416
444
|
.string()
|
|
@@ -694,6 +722,14 @@ export const SponsoredTransaction = z.object({
|
|
|
694
722
|
z.describe('Opaque sponsored-transaction id (`stx_…`).'),
|
|
695
723
|
z.meta({ examples: ['stx_1a2b3c4d5e6f7g8h9j0k1m2n'] }),
|
|
696
724
|
),
|
|
725
|
+
meterEventFirstAttemptedAt: z
|
|
726
|
+
.nullable(z.string())
|
|
727
|
+
.check(
|
|
728
|
+
z.describe('When this sponsorship first reached Stripe submission (ISO 8601), or null.'),
|
|
729
|
+
),
|
|
730
|
+
meterReportAttemptedAt: z
|
|
731
|
+
.nullable(z.string())
|
|
732
|
+
.check(z.describe('When billing last claimed this row for reporting (ISO 8601), or null.')),
|
|
697
733
|
meterReportedAt: z
|
|
698
734
|
.nullable(z.string())
|
|
699
735
|
.check(z.describe('When the row was reported to the billing meter (ISO 8601), or null; exactly-once marker.')), // prettier-ignore
|
|
@@ -713,6 +749,9 @@ export const SponsoredTransaction = z.object({
|
|
|
713
749
|
transactionHash: z
|
|
714
750
|
.nullable(z.string())
|
|
715
751
|
.check(z.describe('Transaction hash, or null for fill intents until reconciled.')),
|
|
752
|
+
transactionHashReconciled: z
|
|
753
|
+
.boolean()
|
|
754
|
+
.check(z.describe('Whether reconciliation confirmed the transaction hash by sign payload.')),
|
|
716
755
|
})
|
|
717
756
|
|
|
718
757
|
/** Columns of the `sponsored_transactions` table. */
|
|
@@ -805,6 +844,13 @@ export const User = z.object({
|
|
|
805
844
|
),
|
|
806
845
|
image: z.nullable(z.string()).check(z.describe('Profile image URL, or null.')),
|
|
807
846
|
name: z.string().check(z.describe('Display name.')),
|
|
847
|
+
termsSharedAt: z
|
|
848
|
+
.nullable(z.string())
|
|
849
|
+
.check(
|
|
850
|
+
z.describe(
|
|
851
|
+
'When terms links were first included in a successful sign-in response for this user, or null otherwise.',
|
|
852
|
+
),
|
|
853
|
+
),
|
|
808
854
|
updatedAt: z.string().check(z.describe('When the user was last updated (ISO 8601).')),
|
|
809
855
|
})
|
|
810
856
|
|
|
@@ -1160,13 +1206,20 @@ export const RoutesTransferSubsidy = z.object({
|
|
|
1160
1206
|
destinationChainId: z
|
|
1161
1207
|
.string()
|
|
1162
1208
|
.check(z.describe('Destination CAIP-2 chain receiving the subsidy.')),
|
|
1163
|
-
recipient: z
|
|
1209
|
+
recipient: z
|
|
1210
|
+
.string()
|
|
1211
|
+
.check(z.describe('Destination recipient address, preserving Tron Base58Check case.')),
|
|
1164
1212
|
sourceChainId: z
|
|
1165
1213
|
.string()
|
|
1166
1214
|
.check(z.describe('Source CAIP-2 chain containing the verified payment.')),
|
|
1167
|
-
|
|
1215
|
+
status: z
|
|
1216
|
+
.union([z.literal('active'), z.literal('expired')])
|
|
1217
|
+
.check(z.describe('Whether the signed subsidy remains eligible for broadcast.')),
|
|
1218
|
+
tokenAddress: z
|
|
1219
|
+
.string()
|
|
1220
|
+
.check(z.describe('Destination token address, preserving Tron Base58Check case.')),
|
|
1168
1221
|
transaction: z
|
|
1169
|
-
.custom<routes_TransferSubsidy.Transaction>()
|
|
1222
|
+
.custom<routes_TransferSubsidy.Transaction | string>()
|
|
1170
1223
|
.check(z.describe('Signed subsidy retained for replay, including after transfer deletion.')),
|
|
1171
1224
|
transactionRef: z.string().check(z.describe('Canonical source execution transaction reference.')),
|
|
1172
1225
|
transferId: z
|
|
@@ -1177,6 +1230,24 @@ export const RoutesTransferSubsidy = z.object({
|
|
|
1177
1230
|
/** Columns of the `routes_transfer_subsidies` table. */
|
|
1178
1231
|
export type RoutesTransferSubsidy = z.output<typeof RoutesTransferSubsidy>
|
|
1179
1232
|
|
|
1233
|
+
/** An expired Solana subsidy retained as immutable settlement evidence. */
|
|
1234
|
+
export const RoutesTransferSubsidyExpiredAttempt = z.object({
|
|
1235
|
+
createdAt: z.string().check(z.describe('When the signed subsidy was first persisted.')),
|
|
1236
|
+
expiredAt: z.string().check(z.describe('When finality proved the blockhash expired.')),
|
|
1237
|
+
sourceChainId: z.string().check(z.describe('Source CAIP-2 chain.')),
|
|
1238
|
+
transaction: z
|
|
1239
|
+
.custom<routes_TransferSubsidy.Transaction | string>()
|
|
1240
|
+
.check(z.describe('Expired signed transaction retained for audit.')),
|
|
1241
|
+
transactionHash: z.string().check(z.describe('Expired Solana signature.')),
|
|
1242
|
+
transactionRef: z.string().check(z.describe('Canonical source transaction reference.')),
|
|
1243
|
+
transferId: z.string().check(z.describe('Original subsidy billing owner.')),
|
|
1244
|
+
})
|
|
1245
|
+
|
|
1246
|
+
/** Columns of the `routes_transfer_subsidy_expired_attempts` table. */
|
|
1247
|
+
export type RoutesTransferSubsidyExpiredAttempt = z.output<
|
|
1248
|
+
typeof RoutesTransferSubsidyExpiredAttempt
|
|
1249
|
+
>
|
|
1250
|
+
|
|
1180
1251
|
/** One durable next nonce for a destination subsidy signer on an EVM chain. */
|
|
1181
1252
|
export const RoutesTransferSubsidyNonce = z.object({
|
|
1182
1253
|
account: z.string().check(z.describe('Lowercase destination subsidy signer address.')),
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid'
|
|
2
|
+
|
|
3
|
+
import * as Runtime from '../../../test/runtime.js'
|
|
4
|
+
import * as Db from '../Db.js'
|
|
5
|
+
import * as ApiKeyAdmissions from './apiKeyAdmissions.js'
|
|
6
|
+
|
|
7
|
+
describe('ledger', () => {
|
|
8
|
+
test('reads every fact in one query', async () => {
|
|
9
|
+
const db = Db.postgres({ connectionString: Runtime.postgresUrl, schema: `t_${nanoid()}` })
|
|
10
|
+
await db.migrate()
|
|
11
|
+
try {
|
|
12
|
+
const queries: number[] = []
|
|
13
|
+
const observed = Db.observe(db, { onQuery: (ms) => queries.push(ms) })
|
|
14
|
+
const ledger = await ApiKeyAdmissions.ledger(observed, {
|
|
15
|
+
id: 'key_missing',
|
|
16
|
+
orgId: 'org_missing',
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
expect(queries).toHaveLength(1)
|
|
20
|
+
expect(ledger).toMatchInlineSnapshot(`
|
|
21
|
+
{
|
|
22
|
+
"admitted": undefined,
|
|
23
|
+
"bootstrapped": false,
|
|
24
|
+
"revoked": false,
|
|
25
|
+
"tombstoned": false,
|
|
26
|
+
}
|
|
27
|
+
`)
|
|
28
|
+
} finally {
|
|
29
|
+
await db.close()
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
describe('admits', () => {
|
|
35
|
+
const owner = { id: 'key_1', orgId: 'org_1', projectId: 'proj_1' }
|
|
36
|
+
const base = { bootstrapped: true, revoked: false, tombstoned: false }
|
|
37
|
+
|
|
38
|
+
test('accepts a matching admission', () => {
|
|
39
|
+
const admitted = { orgId: 'org_1', projectId: 'proj_1' }
|
|
40
|
+
expect(ApiKeyAdmissions.admits({ ...base, admitted }, owner)).toBe(true)
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
test('rejects a revoked key regardless of admission', () => {
|
|
44
|
+
const admitted = { orgId: 'org_1', projectId: 'proj_1' }
|
|
45
|
+
expect(ApiKeyAdmissions.admits({ ...base, admitted, revoked: true }, owner)).toBe(false)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
test('rejects an admission attributed elsewhere', () => {
|
|
49
|
+
const admitted = { orgId: 'org_1', projectId: null }
|
|
50
|
+
expect(ApiKeyAdmissions.admits({ ...base, admitted }, owner)).toBe(false)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
test('accepts a legacy key only until its organization is imported', () => {
|
|
54
|
+
expect(ApiKeyAdmissions.admits({ ...base, bootstrapped: false }, owner)).toBe(true)
|
|
55
|
+
expect(ApiKeyAdmissions.admits(base, owner)).toBe(false)
|
|
56
|
+
})
|
|
57
|
+
})
|
|
@@ -1,11 +1,18 @@
|
|
|
1
|
-
import { sql } from 'kysely'
|
|
1
|
+
import { sql, type JSONColumnType, type Selectable } from 'kysely'
|
|
2
2
|
|
|
3
3
|
import type * as Db from '../Db.js'
|
|
4
4
|
import type * as db_Schema from '../Schema.js'
|
|
5
|
+
import * as ApiKeyOwnerTombstones from './apiKeyOwnerTombstones.js'
|
|
5
6
|
import * as ApiKeyRevocations from './apiKeyRevocations.js'
|
|
6
7
|
|
|
7
8
|
/** Columns of the `api_key_admissions` table. */
|
|
8
|
-
export type Table = db_Schema.ApiKeyAdmission
|
|
9
|
+
export type Table = Omit<db_Schema.ApiKeyAdmission, 'pendingScopes'> & {
|
|
10
|
+
pendingScopes: JSONColumnType<
|
|
11
|
+
db_Schema.ApiKeyAdmission['pendingScopes'],
|
|
12
|
+
string | null | undefined,
|
|
13
|
+
string | null
|
|
14
|
+
>
|
|
15
|
+
}
|
|
9
16
|
|
|
10
17
|
/** Returns whether an organization completed its bounded legacy-key import. */
|
|
11
18
|
export async function isBootstrapped(db: Db.Db, orgId: string): Promise<boolean> {
|
|
@@ -23,7 +30,7 @@ export async function exists(db: Db.Db, id: string): Promise<boolean> {
|
|
|
23
30
|
}
|
|
24
31
|
|
|
25
32
|
/** Reads one authoritative admission row. */
|
|
26
|
-
export async function get(db: Db.Db, id: string): Promise<Table | undefined> {
|
|
33
|
+
export async function get(db: Db.Db, id: string): Promise<Selectable<Table> | undefined> {
|
|
27
34
|
return db.kysely
|
|
28
35
|
.selectFrom('api_key_admissions')
|
|
29
36
|
.selectAll()
|
|
@@ -31,6 +38,19 @@ export async function get(db: Db.Db, id: string): Promise<Table | undefined> {
|
|
|
31
38
|
.executeTakeFirst()
|
|
32
39
|
}
|
|
33
40
|
|
|
41
|
+
/** Replaces or clears the scope publication intent while holding the key lock. */
|
|
42
|
+
export async function setPendingScopes(
|
|
43
|
+
db: Db.Db,
|
|
44
|
+
id: string,
|
|
45
|
+
scopes: db_Schema.ApiKeyAdmission['pendingScopes'],
|
|
46
|
+
): Promise<void> {
|
|
47
|
+
await db.kysely
|
|
48
|
+
.updateTable('api_key_admissions')
|
|
49
|
+
.set({ pendingScopes: scopes === null ? null : JSON.stringify(scopes) })
|
|
50
|
+
.where('id', '=', id)
|
|
51
|
+
.execute()
|
|
52
|
+
}
|
|
53
|
+
|
|
34
54
|
/** Atomically admits a new key or moves an existing key into an organization. */
|
|
35
55
|
export async function admit(db: Db.Db, options: admit.Options): Promise<boolean> {
|
|
36
56
|
await lockOrganization(db, options.orgId)
|
|
@@ -150,14 +170,84 @@ export declare namespace admit {
|
|
|
150
170
|
|
|
151
171
|
/** Returns whether a ledger-managed key has the supplied attribution. */
|
|
152
172
|
export async function matches(db: Db.Db, owner: matches.Owner): Promise<boolean> {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
173
|
+
return admits(await ledger(db, owner), owner)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/** Reads one key's admission, revocation, and owner-deletion state in a single round trip for lifecycle checks. */
|
|
177
|
+
export async function ledger(db: Db.Db, owner: matches.Owner): Promise<Ledger> {
|
|
178
|
+
const now = new Date().toISOString()
|
|
179
|
+
const row = await db.kysely
|
|
180
|
+
.selectNoFrom((eb) => [
|
|
181
|
+
eb
|
|
182
|
+
.selectFrom('api_key_admissions')
|
|
183
|
+
.select('orgId')
|
|
184
|
+
.where('id', '=', owner.id)
|
|
185
|
+
.as('admittedOrgId'),
|
|
186
|
+
eb
|
|
187
|
+
.selectFrom('api_key_admissions')
|
|
188
|
+
.select('projectId')
|
|
189
|
+
.where('id', '=', owner.id)
|
|
190
|
+
.as('admittedProjectId'),
|
|
191
|
+
eb
|
|
192
|
+
.exists(
|
|
193
|
+
eb
|
|
194
|
+
.selectFrom('api_key_admission_bootstraps')
|
|
195
|
+
.select('orgId')
|
|
196
|
+
.where('orgId', '=', owner.orgId),
|
|
197
|
+
)
|
|
198
|
+
.as('bootstrapped'),
|
|
199
|
+
eb
|
|
200
|
+
.exists(
|
|
201
|
+
eb
|
|
202
|
+
.selectFrom('api_key_revocations')
|
|
203
|
+
.select('id')
|
|
204
|
+
.where('id', '=', owner.id)
|
|
205
|
+
.where('expiresAt', '>', now),
|
|
206
|
+
)
|
|
207
|
+
.as('revoked'),
|
|
208
|
+
eb
|
|
209
|
+
.exists(
|
|
210
|
+
eb
|
|
211
|
+
.selectFrom('api_key_owner_tombstones')
|
|
212
|
+
.select('id')
|
|
213
|
+
.where('id', 'in', ApiKeyOwnerTombstones.ownerKeys(owner)),
|
|
214
|
+
)
|
|
215
|
+
.as('tombstoned'),
|
|
216
|
+
])
|
|
217
|
+
.executeTakeFirstOrThrow()
|
|
218
|
+
return {
|
|
219
|
+
admitted:
|
|
220
|
+
row.admittedOrgId === null || row.admittedOrgId === undefined
|
|
221
|
+
? undefined
|
|
222
|
+
: { orgId: row.admittedOrgId, projectId: row.admittedProjectId ?? null },
|
|
223
|
+
bootstrapped: Boolean(row.bootstrapped),
|
|
224
|
+
revoked: Boolean(row.revoked),
|
|
225
|
+
tombstoned: Boolean(row.tombstoned),
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** Ledger facts about one key and its owner, read together by {@link ledger}. */
|
|
230
|
+
export type Ledger = {
|
|
231
|
+
/** Attribution recorded for the key, when it has an admission row. */
|
|
232
|
+
admitted?: { orgId: string; projectId: string | null } | undefined
|
|
233
|
+
/** Whether the owning organization completed its legacy-key import. */
|
|
234
|
+
bootstrapped: boolean
|
|
235
|
+
/** Whether an unexpired revocation fence exists for the key. */
|
|
236
|
+
revoked: boolean
|
|
237
|
+
/** Whether the organization or project carries a deletion tombstone. */
|
|
238
|
+
tombstoned: boolean
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Applies the admission rule: an unrevoked key whose admission row carries the
|
|
243
|
+
* supplied attribution, or a legacy key of an organization not yet imported.
|
|
244
|
+
*/
|
|
245
|
+
export function admits(ledger: Ledger, owner: matches.Owner): boolean {
|
|
246
|
+
if (ledger.revoked) return false
|
|
247
|
+
if (!ledger.admitted) return !ledger.bootstrapped
|
|
248
|
+
return (
|
|
249
|
+
ledger.admitted.orgId === owner.orgId && ledger.admitted.projectId === (owner.projectId ?? null)
|
|
250
|
+
)
|
|
161
251
|
}
|
|
162
252
|
|
|
163
253
|
export declare namespace matches {
|
|
@@ -63,8 +63,8 @@ function key(owner: Owner) {
|
|
|
63
63
|
: `project:${owner.orgId}:${owner.projectId}`
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
/** Builds the hierarchical
|
|
67
|
-
function ownerKeys(owner: Owner) {
|
|
66
|
+
/** Builds the hierarchical fence keys for an owner: the organization, then its project. */
|
|
67
|
+
export function ownerKeys(owner: Owner) {
|
|
68
68
|
const keys = [key({ orgId: owner.orgId })]
|
|
69
69
|
if (owner.projectId !== undefined) keys.push(key(owner))
|
|
70
70
|
return keys
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as TestApp from '../../../test/App.js'
|
|
2
|
+
import * as AuthAccounts from './authAccounts.js'
|
|
3
|
+
import * as Users from './users.js'
|
|
4
|
+
|
|
5
|
+
describe('getWalletAddress', () => {
|
|
6
|
+
test('returns the oldest wallet linked to a user', async () => {
|
|
7
|
+
const db = TestApp.database()
|
|
8
|
+
try {
|
|
9
|
+
const user = await Users.upsertByAddress(db, { address: `0x${'aa'.repeat(20)}` })
|
|
10
|
+
const newer = `0x${'bb'.repeat(20)}`
|
|
11
|
+
const older = `0x${'cc'.repeat(20)}`
|
|
12
|
+
await AuthAccounts.setWalletUser(db, { address: newer, userId: user.id })
|
|
13
|
+
await AuthAccounts.setWalletUser(db, { address: older, userId: user.id })
|
|
14
|
+
await db.kysely
|
|
15
|
+
.updateTable('auth_accounts')
|
|
16
|
+
.set({ createdAt: '2026-01-02T00:00:00.000Z' })
|
|
17
|
+
.where('accountId', '=', newer)
|
|
18
|
+
.execute()
|
|
19
|
+
await db.kysely
|
|
20
|
+
.updateTable('auth_accounts')
|
|
21
|
+
.set({ createdAt: '2026-01-01T00:00:00.000Z' })
|
|
22
|
+
.where('accountId', '=', older)
|
|
23
|
+
.execute()
|
|
24
|
+
|
|
25
|
+
await expect(AuthAccounts.getWalletAddress(db, user.id)).resolves.toBe(older)
|
|
26
|
+
} finally {
|
|
27
|
+
await db.close()
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
})
|
|
@@ -21,6 +21,39 @@ const input = {
|
|
|
21
21
|
} as const satisfies EarnVaults.upsert.Options
|
|
22
22
|
|
|
23
23
|
describe('upsert', () => {
|
|
24
|
+
test('scopes earnings counterparties by vault and chain, preserving omitted settings', async () => {
|
|
25
|
+
const db = TestApp.database()
|
|
26
|
+
const earnings = {
|
|
27
|
+
rewardDistributors: [
|
|
28
|
+
input.vaultAddress,
|
|
29
|
+
input.vaultAddress.toLowerCase() as typeof input.vaultAddress,
|
|
30
|
+
],
|
|
31
|
+
}
|
|
32
|
+
const stored = await EarnVaults.upsert(db, { ...input, earnings })
|
|
33
|
+
expect(stored.earnings).toMatchInlineSnapshot(`
|
|
34
|
+
{
|
|
35
|
+
"rewardDistributors": [
|
|
36
|
+
"0x2f05f4d3625b2effb383efbedafd2d8f04371636",
|
|
37
|
+
],
|
|
38
|
+
}
|
|
39
|
+
`)
|
|
40
|
+
expect((await EarnVaults.upsert(db, input)).earnings).toEqual(stored.earnings)
|
|
41
|
+
expect((await EarnVaults.upsert(db, { ...input, chainId: 4217 })).earnings).toBeNull()
|
|
42
|
+
expect(
|
|
43
|
+
(await EarnVaults.upsert(db, { ...input, vaultAddress: input.privateInputTokens[0] }))
|
|
44
|
+
.earnings,
|
|
45
|
+
).toBeNull()
|
|
46
|
+
expect(
|
|
47
|
+
(
|
|
48
|
+
await EarnVaults.upsert(db, {
|
|
49
|
+
...input,
|
|
50
|
+
earnings: { rewardDistributors: [] },
|
|
51
|
+
})
|
|
52
|
+
).earnings,
|
|
53
|
+
).toEqual({ rewardDistributors: [] })
|
|
54
|
+
expect((await EarnVaults.upsert(db, { ...input, earnings: null })).earnings).toBeNull()
|
|
55
|
+
})
|
|
56
|
+
|
|
24
57
|
test('inserts flattened curated fields and generates a stable slug', async () => {
|
|
25
58
|
vi.useFakeTimers()
|
|
26
59
|
try {
|
|
@@ -33,6 +66,7 @@ describe('upsert', () => {
|
|
|
33
66
|
"chainId": 42431,
|
|
34
67
|
"createdAt": "2026-01-01T00:00:00.000Z",
|
|
35
68
|
"description": "Bridge test PATHUSD deposited into Tempo Earn.",
|
|
69
|
+
"earnings": null,
|
|
36
70
|
"label": "btPATHUSD Earn",
|
|
37
71
|
"privateInputTokens": [
|
|
38
72
|
"0x20c00000000000000000000057F242B21a53ae4D",
|
|
@@ -10,10 +10,12 @@ const slugSuffix = customAlphabet('0123456789abcdefghijklmnopqrstuvwxyz', 8)
|
|
|
10
10
|
/** Columns of the `earn_vaults` table. */
|
|
11
11
|
export type Table = Omit<
|
|
12
12
|
db_Schema.EarnVault,
|
|
13
|
-
'chainId' | 'privateInputTokens' | 'privateOutputTokens' | 'zones'
|
|
13
|
+
'chainId' | 'earnings' | 'privateInputTokens' | 'privateOutputTokens' | 'zones'
|
|
14
14
|
> & {
|
|
15
15
|
/** Bigint chain id, read as a string from pg and written as a number. */
|
|
16
16
|
chainId: ColumnType<string, number, number>
|
|
17
|
+
/** Additional reward distributors beyond campaign history, or null for none. */
|
|
18
|
+
earnings: JSONColumnType<db_Schema.EarnVault['earnings']>
|
|
17
19
|
/** Tokens accepted for private deposits. */
|
|
18
20
|
privateInputTokens: JSONColumnType<db_Schema.EarnVault['privateInputTokens'], string, string>
|
|
19
21
|
/** Tokens supported for private redemptions. */
|
|
@@ -72,6 +74,7 @@ export async function upsert(db: Db.Db, options: upsert.Options): Promise<Record
|
|
|
72
74
|
chainId: options.chainId,
|
|
73
75
|
createdAt: now,
|
|
74
76
|
description: options.description,
|
|
77
|
+
earnings: JSON.stringify(normalizeEarnings(options.earnings ?? null)),
|
|
75
78
|
label: options.label,
|
|
76
79
|
privateInputTokens: JSON.stringify(options.privateInputTokens),
|
|
77
80
|
privateOutputTokens: JSON.stringify(options.privateOutputTokens),
|
|
@@ -83,6 +86,9 @@ export async function upsert(db: Db.Db, options: upsert.Options): Promise<Record
|
|
|
83
86
|
.onConflict((oc) =>
|
|
84
87
|
oc.columns(['chainId', 'vaultAddress']).doUpdateSet({
|
|
85
88
|
description: options.description,
|
|
89
|
+
...(options.earnings !== undefined
|
|
90
|
+
? { earnings: JSON.stringify(normalizeEarnings(options.earnings)) }
|
|
91
|
+
: {}),
|
|
86
92
|
label: options.label,
|
|
87
93
|
privateInputTokens: JSON.stringify(options.privateInputTokens),
|
|
88
94
|
privateOutputTokens: JSON.stringify(options.privateOutputTokens),
|
|
@@ -103,6 +109,8 @@ export declare namespace upsert {
|
|
|
103
109
|
chainId: number
|
|
104
110
|
/** Curated vault description. */
|
|
105
111
|
description: string | null
|
|
112
|
+
/** Omitted preserves additional distributors; null clears them without changing campaign history. */
|
|
113
|
+
earnings?: db_Schema.EarnVault['earnings'] | undefined
|
|
106
114
|
/** Curated vault label. */
|
|
107
115
|
label: string
|
|
108
116
|
/** Tokens accepted for private deposits. */
|
|
@@ -149,7 +157,7 @@ function kebab(label: string): string {
|
|
|
149
157
|
}
|
|
150
158
|
|
|
151
159
|
function toRecord(row: Selectable<Table>): Record {
|
|
152
|
-
return { ...row, chainId: Number(row.chainId) }
|
|
160
|
+
return { ...row, chainId: Number(row.chainId), earnings: normalizeEarnings(row.earnings) }
|
|
153
161
|
}
|
|
154
162
|
|
|
155
163
|
function normalize(address: string): Address {
|
|
@@ -159,3 +167,10 @@ function normalize(address: string): Address {
|
|
|
159
167
|
function normalizeZones(zones: db_Schema.EarnVault['zones']): db_Schema.EarnVault['zones'] {
|
|
160
168
|
return zones.map((zone) => ({ ...zone, earnRouter: normalize(zone.earnRouter) }))
|
|
161
169
|
}
|
|
170
|
+
|
|
171
|
+
function normalizeEarnings(earnings: db_Schema.EarnVault['earnings']) {
|
|
172
|
+
if (!earnings) return null
|
|
173
|
+
return {
|
|
174
|
+
rewardDistributors: [...new Set(earnings.rewardDistributors.map(normalize))].sort(),
|
|
175
|
+
}
|
|
176
|
+
}
|