tapimo 0.15.1 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Hono } from 'hono'
|
|
2
2
|
import * as z from 'zod/mini'
|
|
3
|
-
import { base, mainnet } from 'viem/chains'
|
|
4
3
|
import { tempo } from 'viem/tempo/chains'
|
|
5
4
|
|
|
6
5
|
import * as Db from '../../db/Db.js'
|
|
7
6
|
import * as OpenApi from '../../internal/OpenApi.js'
|
|
8
7
|
import * as RoutesCatalog from '../../internal/routes/Catalog.js'
|
|
8
|
+
import * as RoutesTransferSubsidy from '../../internal/routes/TransferSubsidy.js'
|
|
9
9
|
import type * as App from '../App.js'
|
|
10
10
|
|
|
11
11
|
/** Zod schemas owned by the admin route support matrix. */
|
|
@@ -159,6 +159,7 @@ function summarize(routes: readonly RoutesCatalog.ProviderRoute[]) {
|
|
|
159
159
|
const rows = new Map<string, Row>()
|
|
160
160
|
for (const providerRoute of routes) {
|
|
161
161
|
const { capabilities, providerId, route } = providerRoute
|
|
162
|
+
if (!isPartnerRoute(route)) continue
|
|
162
163
|
const id = `${route.source.chain.id}/${route.source.slug}-${route.destination.chain.id}/${route.destination.slug}`
|
|
163
164
|
const row = rows.get(id) ?? {
|
|
164
165
|
depositAddressProviders: [],
|
|
@@ -183,8 +184,11 @@ function summarize(routes: readonly RoutesCatalog.ProviderRoute[]) {
|
|
|
183
184
|
row.walletTransferProviders.push({ modes: [...capabilities.transfer.modes], providerId })
|
|
184
185
|
row.subsidies.walletTransfer ||=
|
|
185
186
|
capabilities.transfer.modes.includes('exactSource') &&
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
RoutesTransferSubsidy.supportsRoute({
|
|
188
|
+
destinationChainId: route.destination.chain.id,
|
|
189
|
+
sourceChainId: route.source.chain.id,
|
|
190
|
+
tempoChainId: tempo.id,
|
|
191
|
+
}) &&
|
|
188
192
|
usdPair
|
|
189
193
|
}
|
|
190
194
|
rows.set(id, row)
|
|
@@ -192,6 +196,42 @@ function summarize(routes: readonly RoutesCatalog.ProviderRoute[]) {
|
|
|
192
196
|
return [...rows.values()]
|
|
193
197
|
}
|
|
194
198
|
|
|
199
|
+
function isPartnerRoute(route: RoutesCatalog.ProviderRoute['route']) {
|
|
200
|
+
const { destination, source } = route
|
|
201
|
+
if (destination.chain.slug === 'tempo') {
|
|
202
|
+
if (source.chain.slug === 'tempo') return false
|
|
203
|
+
if (source.slug === 'usdc') {
|
|
204
|
+
if (['pathusd', 'whishusd'].includes(destination.slug)) return true
|
|
205
|
+
return (
|
|
206
|
+
['base', 'ethereum', 'solana'].includes(source.chain.slug) &&
|
|
207
|
+
['ousd', 'usdce', 'usdt0'].includes(destination.slug)
|
|
208
|
+
)
|
|
209
|
+
}
|
|
210
|
+
return (
|
|
211
|
+
source.chain.slug === 'tron' &&
|
|
212
|
+
source.slug === 'usdt' &&
|
|
213
|
+
['ousd', 'pathusd', 'usdce', 'usdt0', 'whishusd'].includes(destination.slug)
|
|
214
|
+
)
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (source.chain.slug !== 'tempo') return false
|
|
218
|
+
if (destination.chain.slug === 'tempo') return false
|
|
219
|
+
if (destination.slug === 'usdc') {
|
|
220
|
+
if (['pathusd', 'whishusd'].includes(source.slug)) return true
|
|
221
|
+
if (source.slug === 'usdt0')
|
|
222
|
+
return ['base', 'ethereum', 'solana'].includes(destination.chain.slug)
|
|
223
|
+
return (
|
|
224
|
+
['ousd', 'usdce'].includes(source.slug) &&
|
|
225
|
+
['base', 'ethereum', 'solana'].includes(destination.chain.slug)
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
return (
|
|
229
|
+
destination.chain.slug === 'tron' &&
|
|
230
|
+
destination.slug === 'usdt' &&
|
|
231
|
+
['ousd', 'pathusd', 'usdce', 'usdt0', 'whishusd'].includes(source.slug)
|
|
232
|
+
)
|
|
233
|
+
}
|
|
234
|
+
|
|
195
235
|
function pickChain(chain: RoutesCatalog.ProviderRoute['route']['source']['chain']) {
|
|
196
236
|
return { id: chain.id, name: chain.name, slug: chain.slug }
|
|
197
237
|
}
|
|
@@ -137,6 +137,127 @@ describe('GET /routes/transfers/:id', () => {
|
|
|
137
137
|
])
|
|
138
138
|
expect(body).not.toHaveProperty('providerState')
|
|
139
139
|
})
|
|
140
|
+
|
|
141
|
+
test.each([
|
|
142
|
+
{ provider: 'relay', requestId: `0x${'ab'.repeat(32)}`, expected: [`0x${'ab'.repeat(32)}`] },
|
|
143
|
+
{ provider: 'stargate', requestId: `0x${'ab'.repeat(32)}`, expected: [] },
|
|
144
|
+
{ provider: 'relay', requestId: undefined, expected: [] },
|
|
145
|
+
{ provider: 'relay', requestId: 42, expected: [] },
|
|
146
|
+
])(
|
|
147
|
+
'exposes only Relay request identifiers: $provider/$requestId',
|
|
148
|
+
async ({ provider, requestId, expected }) => {
|
|
149
|
+
const { client, db } = TestAdmin.setup()
|
|
150
|
+
const { organization, project } = await seedAttribution(db)
|
|
151
|
+
const record = await Transfer.create(db, {
|
|
152
|
+
apiKeyId: 'key_admin_routes',
|
|
153
|
+
environment: 'production',
|
|
154
|
+
orgId: organization.id,
|
|
155
|
+
projectId: project.id,
|
|
156
|
+
providerState: { checkEndpoint: '/private/check', requestId, secret: 'hidden' },
|
|
157
|
+
snapshot: TestRoutes.transferSnapshot({ provider: { id: provider, name: provider } }),
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
const response = await client.routes.transfers[':id'].$get({ param: { id: record.id } })
|
|
161
|
+
const body = await response.json()
|
|
162
|
+
expect(response.status).toBe(200)
|
|
163
|
+
expect(body).toHaveProperty('providerRequestIds', expected)
|
|
164
|
+
expect(body).not.toHaveProperty('providerState')
|
|
165
|
+
expect(JSON.stringify(body)).not.toContain('/private/check')
|
|
166
|
+
expect(JSON.stringify(body)).not.toContain('hidden')
|
|
167
|
+
},
|
|
168
|
+
)
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
describe('POST /routes/transfers/:id/retry', () => {
|
|
172
|
+
test('returns an action-required transfer to processing and records the event', async () => {
|
|
173
|
+
const { client, db } = TestAdmin.setup()
|
|
174
|
+
const { organization, project } = await seedAttribution(db)
|
|
175
|
+
const record = await seedActionRequiredTransfer(db, organization.id, project.id)
|
|
176
|
+
|
|
177
|
+
const response = await client.routes.transfers[':id'].retry.$post({
|
|
178
|
+
json: { version: record.version },
|
|
179
|
+
param: { id: record.id },
|
|
180
|
+
})
|
|
181
|
+
const body = await TestApp.json(response, AdminRoutes.schema.retryRoutesTransfer.Response)
|
|
182
|
+
|
|
183
|
+
expect(response.status).toBe(200)
|
|
184
|
+
expect(body).toMatchObject({ id: record.id, status: 'processing', version: record.version + 1 })
|
|
185
|
+
expect(body).not.toHaveProperty('statusReason')
|
|
186
|
+
const detail = await client.routes.transfers[':id'].$get({ param: { id: record.id } })
|
|
187
|
+
const { events } = await TestApp.json(detail, AdminRoutes.schema.getRoutesTransfer.Response)
|
|
188
|
+
expect(events.map(({ status }) => status)).toEqual([
|
|
189
|
+
'awaiting-source',
|
|
190
|
+
'processing',
|
|
191
|
+
'action-required',
|
|
192
|
+
'processing',
|
|
193
|
+
])
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
test('rejects a stale version', async () => {
|
|
197
|
+
const { client, db } = TestAdmin.setup()
|
|
198
|
+
const { organization, project } = await seedAttribution(db)
|
|
199
|
+
const record = await seedActionRequiredTransfer(db, organization.id, project.id)
|
|
200
|
+
|
|
201
|
+
const response = await client.routes.transfers[':id'].retry.$post({
|
|
202
|
+
json: { version: record.version - 1 },
|
|
203
|
+
param: { id: record.id },
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
expect(response.status).toBe(409)
|
|
207
|
+
expect(await response.json()).toMatchObject({ error: { code: 'version_conflict' } })
|
|
208
|
+
})
|
|
209
|
+
|
|
210
|
+
test('rejects a transfer that is not action-required', async () => {
|
|
211
|
+
const { client, db } = TestAdmin.setup()
|
|
212
|
+
const { organization, project } = await seedAttribution(db)
|
|
213
|
+
const { record } = await seedTransfer(db, organization.id, project.id)
|
|
214
|
+
|
|
215
|
+
const response = await client.routes.transfers[':id'].retry.$post({
|
|
216
|
+
json: { version: record.version + 1 },
|
|
217
|
+
param: { id: record.id },
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
expect(response.status).toBe(409)
|
|
221
|
+
expect(await response.json()).toMatchObject({
|
|
222
|
+
error: { code: 'routes_transfer_not_retryable' },
|
|
223
|
+
})
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
test.each([
|
|
227
|
+
{ providerState: { transferSubsidy: { hash: `0x${'cd'.repeat(32)}` } } },
|
|
228
|
+
{ providerState: { solanaTransferSubsidyPrepared: '{}' } },
|
|
229
|
+
{ providerState: { tronTransferSubsidyPrepared: '{}' } },
|
|
230
|
+
])(
|
|
231
|
+
'rejects a transfer with a prepared or signed subsidy: $providerState',
|
|
232
|
+
async ({ providerState }) => {
|
|
233
|
+
const { client, db } = TestAdmin.setup()
|
|
234
|
+
const { organization, project } = await seedAttribution(db)
|
|
235
|
+
const record = await seedActionRequiredTransfer(db, organization.id, project.id, {
|
|
236
|
+
providerState,
|
|
237
|
+
})
|
|
238
|
+
|
|
239
|
+
const response = await client.routes.transfers[':id'].retry.$post({
|
|
240
|
+
json: { version: record.version },
|
|
241
|
+
param: { id: record.id },
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
expect(response.status).toBe(409)
|
|
245
|
+
expect(await response.json()).toMatchObject({
|
|
246
|
+
error: { code: 'routes_transfer_subsidy_pending' },
|
|
247
|
+
})
|
|
248
|
+
},
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
test('returns 404 for an unknown transfer', async () => {
|
|
252
|
+
const { client } = TestAdmin.setup()
|
|
253
|
+
|
|
254
|
+
const response = await client.routes.transfers[':id'].retry.$post({
|
|
255
|
+
json: { version: 1 },
|
|
256
|
+
param: { id: 'rtr_001785792000000_2ZPE2gvateYEQ0dQslgvkhjx' },
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
expect(response.status).toBe(404)
|
|
260
|
+
})
|
|
140
261
|
})
|
|
141
262
|
|
|
142
263
|
describe('GET /routes/deposit-addresses', () => {
|
|
@@ -371,6 +492,35 @@ async function seedTransfer(db: Db.Db, orgId: string, projectId: string) {
|
|
|
371
492
|
return { record, transactionRef }
|
|
372
493
|
}
|
|
373
494
|
|
|
495
|
+
async function seedActionRequiredTransfer(
|
|
496
|
+
db: Db.Db,
|
|
497
|
+
orgId: string,
|
|
498
|
+
projectId: string,
|
|
499
|
+
options: seedActionRequiredTransfer.Options = {},
|
|
500
|
+
) {
|
|
501
|
+
const { record } = await seedTransfer(db, orgId, projectId)
|
|
502
|
+
const result = await Transfer.transition(db, {
|
|
503
|
+
expectedVersion: record.version + 1,
|
|
504
|
+
id: record.id,
|
|
505
|
+
...(options.providerState ? { providerState: options.providerState } : {}),
|
|
506
|
+
status: 'action-required',
|
|
507
|
+
statusReason: {
|
|
508
|
+
code: 'subsidy_failed',
|
|
509
|
+
message: 'Destination subsidy settlement is unavailable.',
|
|
510
|
+
},
|
|
511
|
+
})
|
|
512
|
+
if (result.type !== 'applied') throw new Error('Failed to seed action-required transfer.')
|
|
513
|
+
return result.record
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
declare namespace seedActionRequiredTransfer {
|
|
517
|
+
/** Private state attached while entering `action-required`. */
|
|
518
|
+
type Options = {
|
|
519
|
+
/** Replacement provider state, such as a persisted subsidy transaction. */
|
|
520
|
+
providerState?: Transfer.ProviderState | undefined
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
374
524
|
async function seedDeposit(
|
|
375
525
|
db: Db.Db,
|
|
376
526
|
orgId: string,
|
package/src/admin/apps/routes.ts
CHANGED
|
@@ -13,6 +13,7 @@ import * as Cursor from '../../internal/Cursor.js'
|
|
|
13
13
|
import * as Deposit from '../../internal/routes/Deposit.js'
|
|
14
14
|
import * as DepositAddress from '../../internal/routes/DepositAddress.js'
|
|
15
15
|
import * as Provider from '../../internal/routes/Provider.js'
|
|
16
|
+
import * as Observability from '../../internal/routes/Observability.js'
|
|
16
17
|
import * as Transfer from '../../internal/routes/Transfer.js'
|
|
17
18
|
import * as OpenApi from '../../internal/OpenApi.js'
|
|
18
19
|
import * as Response from '../../internal/Response.js'
|
|
@@ -323,6 +324,7 @@ export namespace schema {
|
|
|
323
324
|
}),
|
|
324
325
|
)
|
|
325
326
|
.check(z.describe('Material lifecycle events, oldest first.')),
|
|
327
|
+
providerRequestIds: correlationIds,
|
|
326
328
|
transactions: z
|
|
327
329
|
.array(
|
|
328
330
|
z.object({
|
|
@@ -344,6 +346,24 @@ export namespace schema {
|
|
|
344
346
|
)
|
|
345
347
|
}
|
|
346
348
|
|
|
349
|
+
/** Schemas for retrying one stuck route transfer. */
|
|
350
|
+
export namespace retryRoutesTransfer {
|
|
351
|
+
/** Transfer path parameters. */
|
|
352
|
+
export const Params = getRoutesTransfer.Params
|
|
353
|
+
|
|
354
|
+
/** Expected transfer version. */
|
|
355
|
+
export const Body = z
|
|
356
|
+
.strictObject({
|
|
357
|
+
version: z
|
|
358
|
+
.number()
|
|
359
|
+
.check(z.int(), z.minimum(1), z.describe('Transfer version the operator reviewed.'), z.meta({ examples: [22] })), // prettier-ignore
|
|
360
|
+
})
|
|
361
|
+
.check(z.describe('Route transfer retry request.'))
|
|
362
|
+
|
|
363
|
+
/** Retried route transfer, back in `processing`. */
|
|
364
|
+
export const Response = RoutesTransfer
|
|
365
|
+
}
|
|
366
|
+
|
|
347
367
|
/** Schemas for listing deposit addresses. */
|
|
348
368
|
export namespace listRoutesDepositAddresses {
|
|
349
369
|
/** Deposit-address filters and pagination. */
|
|
@@ -438,7 +458,7 @@ export namespace schema {
|
|
|
438
458
|
}
|
|
439
459
|
}
|
|
440
460
|
|
|
441
|
-
/**
|
|
461
|
+
/** Routes operations for authenticated administrators. */
|
|
442
462
|
export function routes() {
|
|
443
463
|
return new Hono<App.Environment>()
|
|
444
464
|
.get(
|
|
@@ -601,6 +621,12 @@ export function routes() {
|
|
|
601
621
|
...(event.snapshot.statusReason ? { statusReason: event.snapshot.statusReason } : {}),
|
|
602
622
|
version: event.version,
|
|
603
623
|
})),
|
|
624
|
+
providerRequestIds:
|
|
625
|
+
record.snapshot.provider.id === 'relay' &&
|
|
626
|
+
typeof record.providerState?.['requestId'] === 'string' &&
|
|
627
|
+
record.providerState['requestId'].length > 0
|
|
628
|
+
? [record.providerState['requestId']]
|
|
629
|
+
: [],
|
|
604
630
|
transactions: transactions.map(({ chainId, createdAt, role, transactionRef }) => ({
|
|
605
631
|
chainId,
|
|
606
632
|
createdAt,
|
|
@@ -612,6 +638,76 @@ export function routes() {
|
|
|
612
638
|
)
|
|
613
639
|
},
|
|
614
640
|
)
|
|
641
|
+
.post(
|
|
642
|
+
'/transfers/:id/retry',
|
|
643
|
+
OpenApi.validate('param', schema.retryRoutesTransfer.Params, {
|
|
644
|
+
code: 'param_invalid',
|
|
645
|
+
message: 'Invalid path parameters',
|
|
646
|
+
}),
|
|
647
|
+
OpenApi.validate('json', schema.retryRoutesTransfer.Body, {
|
|
648
|
+
code: 'body_invalid',
|
|
649
|
+
message: 'Invalid request body',
|
|
650
|
+
}),
|
|
651
|
+
OpenApi.describeRoute({
|
|
652
|
+
operationId: 'retryAdminRoutesTransfer',
|
|
653
|
+
responses: OpenApi.responses({
|
|
654
|
+
errors: {
|
|
655
|
+
404: 'Route transfer not found.',
|
|
656
|
+
409: 'Route transfer changed or cannot be retried.',
|
|
657
|
+
},
|
|
658
|
+
success: {
|
|
659
|
+
description: 'The retried route transfer.',
|
|
660
|
+
schema: schema.retryRoutesTransfer.Response,
|
|
661
|
+
},
|
|
662
|
+
}),
|
|
663
|
+
summary: 'Retry route transfer',
|
|
664
|
+
tags: ['Routes'],
|
|
665
|
+
}),
|
|
666
|
+
async (c) => {
|
|
667
|
+
const db = Db.get(c.get('db'))
|
|
668
|
+
// The worker's reconciliation sweep dispatches every `processing` transfer on its next tick.
|
|
669
|
+
const result = await Transfer.retry(db, {
|
|
670
|
+
expectedVersion: c.req.valid('json').version,
|
|
671
|
+
id: c.req.valid('param').id,
|
|
672
|
+
})
|
|
673
|
+
if (result.type === 'not_found')
|
|
674
|
+
return Response.error(c, {
|
|
675
|
+
code: 'routes_transfer_not_found',
|
|
676
|
+
message: 'Route transfer not found.',
|
|
677
|
+
status: 404,
|
|
678
|
+
})
|
|
679
|
+
if (result.type === 'stale')
|
|
680
|
+
return Response.error(c, {
|
|
681
|
+
code: 'version_conflict',
|
|
682
|
+
message: 'Route transfer version is stale.',
|
|
683
|
+
status: 409,
|
|
684
|
+
})
|
|
685
|
+
if (result.type === 'invalid')
|
|
686
|
+
return Response.error(c, {
|
|
687
|
+
code: 'routes_transfer_not_retryable',
|
|
688
|
+
message: 'Only action-required transfers can be retried.',
|
|
689
|
+
status: 409,
|
|
690
|
+
})
|
|
691
|
+
if (result.type === 'subsidy_pending')
|
|
692
|
+
return Response.error(c, {
|
|
693
|
+
code: 'routes_transfer_subsidy_pending',
|
|
694
|
+
message: 'Route transfer has a prepared or signed subsidy; verify it on chain first.',
|
|
695
|
+
status: 409,
|
|
696
|
+
})
|
|
697
|
+
Observability.recordTransfer(c.get('metrics'), {
|
|
698
|
+
previous: result.previous,
|
|
699
|
+
record: result.record,
|
|
700
|
+
})
|
|
701
|
+
const attribution = await loadAttribution(db, [result.record])
|
|
702
|
+
return c.json(
|
|
703
|
+
Response.validated(
|
|
704
|
+
schema.retryRoutesTransfer.Response,
|
|
705
|
+
serializeTransfer(result.record, attribution),
|
|
706
|
+
),
|
|
707
|
+
200,
|
|
708
|
+
)
|
|
709
|
+
},
|
|
710
|
+
)
|
|
615
711
|
.get(
|
|
616
712
|
'/deposit-addresses',
|
|
617
713
|
OpenApi.validate('query', schema.listRoutesDepositAddresses.Query, {
|
|
@@ -55,7 +55,7 @@ describe('GET /scopes', () => {
|
|
|
55
55
|
"selfServe": false,
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
|
-
"description": "
|
|
58
|
+
"description": "Register wallet and Earn vault reward eligibility associations.",
|
|
59
59
|
"scope": "rewards:write",
|
|
60
60
|
"selfServe": false,
|
|
61
61
|
},
|
package/src/admin/index.ts
CHANGED
package/src/admin/ui/plugin.ts
CHANGED
|
@@ -23,7 +23,8 @@ const outFile = path.join(here, '..', 'ui.generated.ts')
|
|
|
23
23
|
// Total gzipped budget for the whole UI; the React + TanStack + Regen baseline
|
|
24
24
|
// is heavier than a hand-rolled SPA, so fail loudly before it bloats the
|
|
25
25
|
// package. Raise deliberately (and revisit code-splitting) if it trips.
|
|
26
|
-
|
|
26
|
+
// Includes the independently added route-policy and route-support screens.
|
|
27
|
+
const maxGzipBytes = 500_000
|
|
27
28
|
|
|
28
29
|
const contentTypes: Record<string, string> = {
|
|
29
30
|
'.css': 'text/css; charset=utf-8',
|
|
@@ -9,7 +9,7 @@ function Popup(props: { children: ReactNode; className?: string | undefined }) {
|
|
|
9
9
|
<Base.Backdrop className="fixed inset-0 z-40 bg-black/60 transition-opacity duration-150 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0" />
|
|
10
10
|
<Base.Popup
|
|
11
11
|
className={cx(
|
|
12
|
-
'fixed left-1/2 top-1/2 z-50 w-[calc(100vw-2rem)] max-w-
|
|
12
|
+
'fixed left-1/2 top-1/2 z-50 w-[calc(100vw-2rem)] max-w-3xl -translate-x-1/2 -translate-y-1/2 border border-border bg-surface p-6 shadow-lg outline-none transition-opacity duration-150 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0',
|
|
13
13
|
props.className,
|
|
14
14
|
)}
|
|
15
15
|
>
|
|
@@ -30,6 +30,51 @@ export function EarnVaultForm(options: EarnVaultForm.Props) {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export namespace EarnVaultForm {
|
|
33
|
+
/** Per-vault incoming reward counterparties. */
|
|
34
|
+
export function Earnings(options: Earnings.Props) {
|
|
35
|
+
return (
|
|
36
|
+
<fieldset className="group flex min-w-0 flex-col gap-3 border-t border-border pt-5 max-sm:[&_textarea]:text-copy-16">
|
|
37
|
+
<legend className="text-label-14 text-foreground">Earnings accounting</legend>
|
|
38
|
+
<label className="flex items-center gap-2 text-label-13 text-foreground">
|
|
39
|
+
<input
|
|
40
|
+
className="size-5 shrink-0 sm:size-4"
|
|
41
|
+
defaultChecked={options.value === null}
|
|
42
|
+
name="inheritEarnings"
|
|
43
|
+
type="checkbox"
|
|
44
|
+
/>
|
|
45
|
+
Use recorded campaign distributors only
|
|
46
|
+
</label>
|
|
47
|
+
<p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
|
|
48
|
+
Recorded campaign distributors are always included. Outgoing shares count as withdrawals
|
|
49
|
+
for every recipient or spender, with no configuration required.
|
|
50
|
+
</p>
|
|
51
|
+
<div className="flex flex-col gap-3 group-has-checked:hidden">
|
|
52
|
+
<p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
|
|
53
|
+
Add dedicated reward distributors for this vault. You do not need to copy recorded
|
|
54
|
+
campaign distributors, including historical ones.
|
|
55
|
+
</p>
|
|
56
|
+
<Textarea
|
|
57
|
+
defaultValue={options.value?.rewardDistributors.join('\n')}
|
|
58
|
+
label="Additional reward distributors"
|
|
59
|
+
name="rewardDistributors"
|
|
60
|
+
placeholder="One address per line"
|
|
61
|
+
rows={5}
|
|
62
|
+
spellCheck={false}
|
|
63
|
+
/>
|
|
64
|
+
<p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
|
|
65
|
+
Shares received from these addresses count as earnings. Do not add card spenders or
|
|
66
|
+
refund handlers: returned shares could be incorrectly counted as rewards.
|
|
67
|
+
</p>
|
|
68
|
+
</div>
|
|
69
|
+
</fieldset>
|
|
70
|
+
)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export namespace Earnings {
|
|
74
|
+
/** Saved settings, or null for campaign defaults. */
|
|
75
|
+
export type Props = { value: EarnVaults.Vault['earnings'] }
|
|
76
|
+
}
|
|
77
|
+
|
|
33
78
|
/** Props for the verified-vault form shell. */
|
|
34
79
|
export type Props = {
|
|
35
80
|
/** Primary form action. */
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { useState } from 'react'
|
|
2
|
+
import { Button, Select, cx } from 'regen-ui'
|
|
3
|
+
|
|
4
|
+
import * as Policies from '../lib/route-policies.js'
|
|
5
|
+
|
|
6
|
+
/** Adds complete catalog routes through mutually filtered network, token, and provider choices. */
|
|
7
|
+
export function RoutePicker(options: RoutePicker.Props) {
|
|
8
|
+
const [selection, setSelection] = useState<Policies.RouteSelection>({})
|
|
9
|
+
const rule = selection.providerId ? Policies.selectedRoute(selection) : undefined
|
|
10
|
+
const duplicate =
|
|
11
|
+
rule &&
|
|
12
|
+
options.selected.some((selected) =>
|
|
13
|
+
fields.every(({ field }) => selected[field] === rule[field]),
|
|
14
|
+
)
|
|
15
|
+
return (
|
|
16
|
+
<fieldset
|
|
17
|
+
aria-label={`Add ${options.label.toLowerCase()} route`}
|
|
18
|
+
className={cx('@container flex min-w-0 flex-col gap-3', options.className)}
|
|
19
|
+
>
|
|
20
|
+
<div className="grid gap-3 @sm:grid-cols-2 @3xl:grid-cols-5">
|
|
21
|
+
{fields.map(({ field, label, placeholder }) => (
|
|
22
|
+
<label
|
|
23
|
+
className="flex min-w-0 flex-col gap-2 text-label-12 text-foreground-secondary"
|
|
24
|
+
key={field}
|
|
25
|
+
>
|
|
26
|
+
{label}
|
|
27
|
+
<Select
|
|
28
|
+
aria-label={label}
|
|
29
|
+
className="w-full min-w-0"
|
|
30
|
+
items={[
|
|
31
|
+
{ label: placeholder, value: '' },
|
|
32
|
+
...Policies.routeOptions(options.routes, selection, field),
|
|
33
|
+
]}
|
|
34
|
+
onChange={(value) =>
|
|
35
|
+
setSelection((current) => ({ ...current, [field]: value || undefined }))
|
|
36
|
+
}
|
|
37
|
+
value={selection[field] ?? ''}
|
|
38
|
+
/>
|
|
39
|
+
</label>
|
|
40
|
+
))}
|
|
41
|
+
</div>
|
|
42
|
+
<div className="flex flex-wrap items-center justify-between gap-3">
|
|
43
|
+
<p className="text-copy-16 text-foreground-secondary sm:text-copy-14">
|
|
44
|
+
{duplicate
|
|
45
|
+
? 'This route is already included.'
|
|
46
|
+
: 'Choose in any order. Clear a field to broaden the other choices.'}
|
|
47
|
+
</p>
|
|
48
|
+
<Button
|
|
49
|
+
disabled={!rule || duplicate}
|
|
50
|
+
onClick={() => {
|
|
51
|
+
if (!rule) return
|
|
52
|
+
options.onAdd(rule)
|
|
53
|
+
}}
|
|
54
|
+
type="button"
|
|
55
|
+
>
|
|
56
|
+
Add route
|
|
57
|
+
</Button>
|
|
58
|
+
</div>
|
|
59
|
+
</fieldset>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
declare namespace RoutePicker {
|
|
64
|
+
type Props = {
|
|
65
|
+
className?: string | undefined
|
|
66
|
+
label: string
|
|
67
|
+
onAdd: (rule: Policies.Rule) => void
|
|
68
|
+
routes: Policies.Payload['routes']
|
|
69
|
+
selected: readonly Policies.Rule[]
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const fields = [
|
|
74
|
+
{ field: 'sourceChainId', label: 'Source network', placeholder: 'Choose network' },
|
|
75
|
+
{ field: 'sourceTokenId', label: 'Source token', placeholder: 'Choose token' },
|
|
76
|
+
{ field: 'destinationChainId', label: 'Destination network', placeholder: 'Choose network' },
|
|
77
|
+
{ field: 'destinationTokenId', label: 'Destination token', placeholder: 'Choose token' },
|
|
78
|
+
{ field: 'providerId', label: 'Provider', placeholder: 'Choose provider' },
|
|
79
|
+
] as const
|
|
@@ -18,7 +18,7 @@ export type Vault = DetailResponse &
|
|
|
18
18
|
type ListResponse = Omit<BaseListResponse, 'data'> & { data: readonly Vault[] }
|
|
19
19
|
|
|
20
20
|
type InsertRequest = InferRequestType<(typeof client)['earn']['verified-vaults']['$put']>['json']
|
|
21
|
-
const include = 'access,capabilities,zone' as const
|
|
21
|
+
const include = 'access,capabilities,zone,zones' as const
|
|
22
22
|
|
|
23
23
|
/** A chain id managed by the Earn registry UI. */
|
|
24
24
|
export type ChainId = typeof mainnet.id | typeof testnet.id
|