tapimo 0.15.0 → 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 +896 -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 +33 -33
- 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 +454 -1
- 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 +10 -4
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.js +24 -4
- package/dist/admin/apps/verified-tokens.js.map +1 -1
- 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 +99 -103
- 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 +5 -5
- 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/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 +1 -19
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +93 -56
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +10 -10
- package/dist/apps/data/routes/rpc.d.ts +30 -30
- package/dist/apps/data/routes/rpc.js +45 -11
- package/dist/apps/data/routes/rpc.js.map +1 -1
- 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 +12 -12
- package/dist/apps/data/routes/valuation.d.ts +30 -30
- package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
- package/dist/apps/data/routes/webhooks.d.ts +1 -1
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +18 -11
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +3 -3
- package/dist/apps/management/App.d.ts +3043 -2198
- 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 +16 -4
- 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 +24 -24
- package/dist/apps/management/routes/invite-links.d.ts +66 -66
- package/dist/apps/management/routes/members.d.ts +16 -16
- package/dist/apps/management/routes/orgs.d.ts +20 -20
- 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 +76 -76
- package/dist/apps/management/routes/usage.d.ts +8 -8
- package/dist/apps/management/routes/verified-token-requests.d.ts +42 -42
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.js +7 -9
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +119 -119
- package/dist/apps/mcp.d.ts.map +1 -1
- package/dist/apps/mcp.js +16 -3
- package/dist/apps/mcp.js.map +1 -1
- 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/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 +90 -0
- 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 +187 -135
- 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 +418 -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/db/tables/verifiedTokenRequests.d.ts +21 -4
- package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -1
- package/dist/db/tables/verifiedTokenRequests.js +65 -44
- package/dist/db/tables/verifiedTokenRequests.js.map +1 -1
- package/dist/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 +73 -6
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +212 -85
- 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 +4 -1
- package/dist/internal/routes/providers/relay.d.ts.map +1 -1
- package/dist/internal/routes/providers/relay.js +353 -42
- 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/apps/verified-tokens.test.ts +32 -0
- package/src/admin/apps/verified-tokens.ts +30 -4
- 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/lib/verified-tokens.ts +24 -9
- package/src/admin/ui/src/routeTree.gen.ts +21 -0
- package/src/admin/ui/src/routes/__root.tsx +1 -1
- 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 +35 -4
- 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 +65 -20
- package/src/admin/ui.generated.ts +99 -104
- 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/App.test.ts +26 -0
- 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 +153 -2
- package/src/apps/data/routes/fee-amm.ts +132 -62
- package/src/apps/data/routes/receipts.test.ts +21 -18
- package/src/apps/data/routes/rpc.test.ts +34 -2
- package/src/apps/data/routes/rpc.ts +47 -10
- 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.scan.test.ts +29 -0
- package/src/apps/data/routes/webhooks.test.ts +18 -3
- package/src/apps/data/routes/webhooks.ts +27 -13
- 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/management/routes/verified-token-requests.test.ts +16 -2
- package/src/apps/management/routes/verified-token-requests.ts +7 -10
- package/src/apps/mcp.test.ts +108 -25
- package/src/apps/mcp.ts +15 -3
- 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 +507 -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 +133 -0
- 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/db/tables/verifiedTokenRequests.test.ts +39 -20
- package/src/db/tables/verifiedTokenRequests.ts +80 -44
- 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 +383 -8
- package/src/internal/Auth.ts +272 -99
- 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 +1299 -18
- package/src/internal/routes/providers/relay.ts +424 -39
- 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,7 +1,7 @@
|
|
|
1
1
|
import { Hono, type Context } from 'hono'
|
|
2
2
|
import { AbiEvent, AbiParameters, Hash } from 'ox'
|
|
3
3
|
import { type Address, ContractFunctionExecutionError } from 'viem'
|
|
4
|
-
import { Abis } from 'viem/tempo'
|
|
4
|
+
import { Abis, Addresses } from 'viem/tempo'
|
|
5
5
|
import * as z from 'zod/mini'
|
|
6
6
|
|
|
7
7
|
import * as Assets from '../../../Assets.js'
|
|
@@ -52,6 +52,7 @@ const tokenCreatedSignature =
|
|
|
52
52
|
// lookup reads the raw `logs` table by topic0 and ABI-decodes the data blob
|
|
53
53
|
// instead.
|
|
54
54
|
const tokenCreatedTopic = AbiEvent.getSelector(tokenCreatedSignature)
|
|
55
|
+
const tip20Factory = Addresses.tip20Factory.toLowerCase()
|
|
55
56
|
|
|
56
57
|
// Non-indexed `TokenCreated` data layout, in event-parameter order:
|
|
57
58
|
// `[name, symbol, currency, quoteToken, admin, salt]`.
|
|
@@ -2072,7 +2073,7 @@ export async function getTokenCreatedAtByAddress(
|
|
|
2072
2073
|
|
|
2073
2074
|
if (addresses.length === 0) return {}
|
|
2074
2075
|
|
|
2075
|
-
const key = (address: string) => `token:
|
|
2076
|
+
const key = (address: string) => `token:v2:${options.chainId}:${address}:created_at`
|
|
2076
2077
|
|
|
2077
2078
|
const cached = await Promise.all(addresses.map((address) => store.get(key(address))))
|
|
2078
2079
|
const createdAtByAddress: Record<string, string> = {}
|
|
@@ -2095,7 +2096,8 @@ export async function getTokenCreatedAtByAddress(
|
|
|
2095
2096
|
query: `
|
|
2096
2097
|
SELECT token, block_timestamp
|
|
2097
2098
|
FROM tokencreated
|
|
2098
|
-
WHERE
|
|
2099
|
+
WHERE address = '${tip20Factory}'
|
|
2100
|
+
AND token IN (${misses.map((address) => `'${address}'`).join(', ')})
|
|
2099
2101
|
`,
|
|
2100
2102
|
signatures: [tokenCreatedSignature],
|
|
2101
2103
|
})
|
|
@@ -2165,7 +2167,7 @@ async function getTokenCreatedByAddress(
|
|
|
2165
2167
|
|
|
2166
2168
|
if (addresses.length === 0) return {}
|
|
2167
2169
|
|
|
2168
|
-
const key = (address: string) => `token:
|
|
2170
|
+
const key = (address: string) => `token:v3:${options.chainId}:${address}:created`
|
|
2169
2171
|
|
|
2170
2172
|
const cached = await Promise.all(addresses.map((address) => store.get(key(address))))
|
|
2171
2173
|
const createdByAddress: Record<string, getTokenCreatedByAddress.Created> = {}
|
|
@@ -2193,6 +2195,7 @@ async function getTokenCreatedByAddress(
|
|
|
2193
2195
|
SELECT topic1, data, block_timestamp
|
|
2194
2196
|
FROM logs
|
|
2195
2197
|
WHERE selector = '${tokenCreatedTopic}'
|
|
2198
|
+
AND address = '${tip20Factory}'
|
|
2196
2199
|
AND topic1 IN (${misses.map((address) => `'0x${'0'.repeat(24)}${address.slice(2)}'`).join(', ')})
|
|
2197
2200
|
` as string,
|
|
2198
2201
|
})
|
|
@@ -2445,7 +2448,9 @@ async function getTokens(c: Context<App.Environment>, options: getTokens.Options
|
|
|
2445
2448
|
// here are real columns like `block_num` and `currency`, plus the
|
|
2446
2449
|
// cursor keyset; verified-only mode is handled above by serving the
|
|
2447
2450
|
// curated static list directly.
|
|
2448
|
-
|
|
2451
|
+
// Authenticate the emitter before pagination so forged events cannot
|
|
2452
|
+
// crowd canonical factory-created tokens out of the public list.
|
|
2453
|
+
const filters = [`address = '${tip20Factory}'`]
|
|
2449
2454
|
if (cursor !== undefined)
|
|
2450
2455
|
filters.push(
|
|
2451
2456
|
Cursor.keyset([
|
|
@@ -2490,7 +2495,7 @@ async function getTokens(c: Context<App.Environment>, options: getTokens.Options
|
|
|
2490
2495
|
}
|
|
2491
2496
|
},
|
|
2492
2497
|
{
|
|
2493
|
-
key: `token:
|
|
2498
|
+
key: `token:v2:${options.chainId}:indexed:${order}:${encodeURIComponent(options.currency?.toLowerCase() ?? '')}:${cursor ? `cursor:${cursor[0]}:${cursor[1]}` : offset !== undefined ? `page:${options.page}` : 'head'}:${limit}`,
|
|
2494
2499
|
store,
|
|
2495
2500
|
ttl: Ttl.minutes(2),
|
|
2496
2501
|
},
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { Schema } from 'tapimo/server'
|
|
4
4
|
import { Hex } from 'ox'
|
|
5
5
|
import { zeroHash } from 'viem'
|
|
6
|
+
import { Addresses } from 'viem/tempo'
|
|
6
7
|
|
|
7
8
|
import * as TestApp from '../../../../test/App.js'
|
|
8
9
|
import * as Runtime from '../../../../test/runtime.js'
|
|
@@ -502,4 +503,32 @@ describe('GET /transactions?address=…', () => {
|
|
|
502
503
|
head.data.slice(5, 10).map((entry) => entry.hash),
|
|
503
504
|
)
|
|
504
505
|
})
|
|
506
|
+
|
|
507
|
+
test('serves an ascending page for a token contract that never sends', async () => {
|
|
508
|
+
// A TIP-20 contract never sends, so its `"from"` side has no matches: the
|
|
509
|
+
// ascending shape that can time out into the fenced retry.
|
|
510
|
+
const client = TestApp.client()
|
|
511
|
+
const response = await client.v1.transactions.$get(
|
|
512
|
+
{ query: { address: Addresses.pathUsd, include: 'receipt', limit: '10', order: 'asc' } },
|
|
513
|
+
TestApp.auth,
|
|
514
|
+
)
|
|
515
|
+
const body = await TestApp.json(response, Transactions.schema.getTransactions.Response)
|
|
516
|
+
expect(response.status).toBe(200)
|
|
517
|
+
expect({
|
|
518
|
+
ascending: body.data.every(
|
|
519
|
+
(entry, index) =>
|
|
520
|
+
index === 0 || (body.data[index - 1]!.blockNumber ?? 0) <= (entry.blockNumber ?? 0),
|
|
521
|
+
),
|
|
522
|
+
everyReceiptMatchesHash: body.data.every(
|
|
523
|
+
(entry) => entry.meta.receipt?.transactionHash === entry.hash,
|
|
524
|
+
),
|
|
525
|
+
everyRecipientIsToken: body.data.every((entry) => entry.recipient === Addresses.pathUsd),
|
|
526
|
+
}).toMatchInlineSnapshot(`
|
|
527
|
+
{
|
|
528
|
+
"ascending": true,
|
|
529
|
+
"everyReceiptMatchesHash": true,
|
|
530
|
+
"everyRecipientIsToken": true,
|
|
531
|
+
}
|
|
532
|
+
`)
|
|
533
|
+
})
|
|
505
534
|
})
|
|
@@ -13,6 +13,7 @@ import * as Response from '../../../internal/Response.js'
|
|
|
13
13
|
import * as Schema from '../../../internal/Schema.js'
|
|
14
14
|
import * as Store from '../../../internal/Store.js'
|
|
15
15
|
import * as Tidx from '../../../internal/Tidx.js'
|
|
16
|
+
import * as Timeout from '../../../internal/Timeout.js'
|
|
16
17
|
import * as Timing from '../../../internal/Timing.js'
|
|
17
18
|
import * as Ttl from '../../../internal/Ttl.js'
|
|
18
19
|
import * as Value from '../../../internal/Value.js'
|
|
@@ -1072,8 +1073,8 @@ export function getTransactions(c: Context<App.Environment>, options: getTransac
|
|
|
1072
1073
|
|
|
1073
1074
|
return Timing.time(c, 'transactions', () =>
|
|
1074
1075
|
Store.memoize(
|
|
1075
|
-
async () => {
|
|
1076
|
-
const page = await scanTransactions({ tidx }, options)
|
|
1076
|
+
async (signal) => {
|
|
1077
|
+
const page = await scanTransactions({ signal, tidx }, options)
|
|
1077
1078
|
return {
|
|
1078
1079
|
data: page.items.map((item) => item.data),
|
|
1079
1080
|
nextCursor: page.nextCursor,
|
|
@@ -1115,7 +1116,7 @@ export async function scanTransactions(
|
|
|
1115
1116
|
toBlock,
|
|
1116
1117
|
toTimestamp,
|
|
1117
1118
|
} = options
|
|
1118
|
-
const { tidx } = deps
|
|
1119
|
+
const { signal: flight, tidx } = deps
|
|
1119
1120
|
const sortDirection = order === 'asc' ? 'ASC' : 'DESC'
|
|
1120
1121
|
// Keyset pagination: anchor the page below the previous row's `(block, idx)`
|
|
1121
1122
|
// position instead of a numeric offset, so rows arriving at the head can't
|
|
@@ -1177,35 +1178,43 @@ export async function scanTransactions(
|
|
|
1177
1178
|
feePayer !== undefined ||
|
|
1178
1179
|
feeToken !== undefined
|
|
1179
1180
|
const fetchRows = async (where: readonly string[]) => {
|
|
1181
|
+
// Raw-table query (no signature-decoded CTE), so the inline SQL is cast
|
|
1182
|
+
// to `string`.
|
|
1183
|
+
const query = (block: string) =>
|
|
1184
|
+
`
|
|
1185
|
+
SELECT ${transactionColumns}
|
|
1186
|
+
FROM txs
|
|
1187
|
+
${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}
|
|
1188
|
+
ORDER BY ${block} ${sortDirection}, idx ${sortDirection}
|
|
1189
|
+
LIMIT ${queryLimit}${skip}
|
|
1190
|
+
` as string
|
|
1191
|
+
if (!filtered)
|
|
1192
|
+
return await tidx.fetch({
|
|
1193
|
+
chainId,
|
|
1194
|
+
query: query('block_num'),
|
|
1195
|
+
...(flight ? { signal: flight } : {}),
|
|
1196
|
+
})
|
|
1197
|
+
// TIDX reports statement kills as 408 timeouts, which the client retries until
|
|
1198
|
+
// the deadline; half the deadline bounds the walk so the fenced retry still runs.
|
|
1199
|
+
const timeout = AbortSignal.timeout(Timeout.duration / 2)
|
|
1180
1200
|
try {
|
|
1181
1201
|
return await tidx.fetch({
|
|
1182
1202
|
chainId,
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
query: `
|
|
1186
|
-
SELECT ${transactionColumns}
|
|
1187
|
-
FROM txs
|
|
1188
|
-
${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}
|
|
1189
|
-
ORDER BY block_num ${sortDirection}, idx ${sortDirection}
|
|
1190
|
-
LIMIT ${queryLimit}${skip}
|
|
1191
|
-
` as string,
|
|
1203
|
+
query: query('block_num'),
|
|
1204
|
+
signal: flight ? AbortSignal.any([flight, timeout]) : timeout,
|
|
1192
1205
|
})
|
|
1193
1206
|
} catch (error) {
|
|
1207
|
+
// An expired flight means the memoized caller already gave up.
|
|
1208
|
+
if (flight?.aborted) throw error
|
|
1194
1209
|
// Planner mis-selectivity turns these top-N scans into a block-ordered
|
|
1195
1210
|
// walk that times out when matches sit far from the scan boundary;
|
|
1196
1211
|
// `block_num + 0` blocks that walk, forcing the filter index plus a sort.
|
|
1197
|
-
if (!
|
|
1212
|
+
if (!timeout.aborted && !Tidx.isQueryTimeout(error) && !Tidx.isDeterministicError(error))
|
|
1213
|
+
throw error
|
|
1198
1214
|
return await tidx.fetch({
|
|
1199
1215
|
chainId,
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
query: `
|
|
1203
|
-
SELECT ${transactionColumns}
|
|
1204
|
-
FROM txs
|
|
1205
|
-
${where.length > 0 ? `WHERE ${where.join(' AND ')}` : ''}
|
|
1206
|
-
ORDER BY block_num + 0 ${sortDirection}, idx ${sortDirection}
|
|
1207
|
-
LIMIT ${queryLimit}${skip}
|
|
1208
|
-
` as string,
|
|
1216
|
+
query: query('block_num + 0'),
|
|
1217
|
+
...(flight ? { signal: flight } : {}),
|
|
1209
1218
|
})
|
|
1210
1219
|
}
|
|
1211
1220
|
}
|
|
@@ -1395,6 +1404,8 @@ export declare namespace countTransactions {
|
|
|
1395
1404
|
export declare namespace scanTransactions {
|
|
1396
1405
|
/** Dependencies for {@link scanTransactions}. */
|
|
1397
1406
|
type Deps = {
|
|
1407
|
+
/** Optional deadline signal bounding every TIDX read in the scan. */
|
|
1408
|
+
signal?: AbortSignal | undefined
|
|
1398
1409
|
/** TIDX query client for the target chain. */
|
|
1399
1410
|
tidx: Tidx.Client
|
|
1400
1411
|
}
|
|
@@ -239,6 +239,35 @@ describe('scanBlock', () => {
|
|
|
239
239
|
expect(invalid.invalid).toHaveLength(1)
|
|
240
240
|
})
|
|
241
241
|
|
|
242
|
+
test('delivers an anonymous LOG0 event matched by address', () => {
|
|
243
|
+
const result = AppWebhooks.scanBlock({
|
|
244
|
+
block: block(),
|
|
245
|
+
logs: [customLog({ topics: [] })],
|
|
246
|
+
subscriptions: [subscription('log:emitted', { address: callTarget })],
|
|
247
|
+
})
|
|
248
|
+
|
|
249
|
+
expect(result.invalid).toEqual([])
|
|
250
|
+
expect(result.matches).toHaveLength(1)
|
|
251
|
+
expect(result.matches[0]?.data).toMatchObject({
|
|
252
|
+
address: callTarget,
|
|
253
|
+
data: `0x${'0'.repeat(63)}1`,
|
|
254
|
+
logIndex: 7,
|
|
255
|
+
topics: [],
|
|
256
|
+
transactionHash,
|
|
257
|
+
})
|
|
258
|
+
})
|
|
259
|
+
|
|
260
|
+
test('rejects raw logs with malformed topics', () => {
|
|
261
|
+
const result = AppWebhooks.scanBlock({
|
|
262
|
+
block: block(),
|
|
263
|
+
logs: [customLog({ topics: ['invalid'] })],
|
|
264
|
+
subscriptions: [subscription('log:emitted', { address: callTarget })],
|
|
265
|
+
})
|
|
266
|
+
|
|
267
|
+
expect(result.matches).toEqual([])
|
|
268
|
+
expect(result.invalid).toEqual([])
|
|
269
|
+
})
|
|
270
|
+
|
|
242
271
|
test('rolls back partial matches when a matcher throws mid-block', () => {
|
|
243
272
|
const signature = 'event Named(string value)'
|
|
244
273
|
const namedTopic = encodeEventTopics({ abi: [parseAbiItem(signature)] })[0]
|
|
@@ -307,10 +307,19 @@ describe('CRUD lifecycle', () => {
|
|
|
307
307
|
},
|
|
308
308
|
as(webhookWriter),
|
|
309
309
|
)
|
|
310
|
-
|
|
310
|
+
expect(response.status).toMatchInlineSnapshot(`403`)
|
|
311
|
+
if (response.status !== 403) throw new Error('Expected a forbidden response')
|
|
312
|
+
const { requestId, ...body } = await response.json()
|
|
311
313
|
|
|
312
|
-
expect(
|
|
313
|
-
expect(body
|
|
314
|
+
expect(requestId).toBeDefined()
|
|
315
|
+
expect(body).toMatchInlineSnapshot(`
|
|
316
|
+
{
|
|
317
|
+
"error": {
|
|
318
|
+
"code": "api_key_forbidden",
|
|
319
|
+
"message": "API key is missing required permissions: routes:read. Use an API key with these scopes.",
|
|
320
|
+
},
|
|
321
|
+
}
|
|
322
|
+
`)
|
|
314
323
|
})
|
|
315
324
|
|
|
316
325
|
test('captures route transfer ownership scope without reading the RPC head', async () => {
|
|
@@ -2144,6 +2153,12 @@ describe('matchesOperator', () => {
|
|
|
2144
2153
|
expect(Webhooks.matchesOperator('0x200', op, 'number')).toBe(false)
|
|
2145
2154
|
})
|
|
2146
2155
|
|
|
2156
|
+
test('compare accepts decoded integer values', () => {
|
|
2157
|
+
const op = { gte: '100', lte: '200' }
|
|
2158
|
+
expect(Webhooks.matchesOperator(150n, op, 'number')).toBe(true)
|
|
2159
|
+
expect(Webhooks.matchesOperator(201, op, 'number')).toBe(false)
|
|
2160
|
+
})
|
|
2161
|
+
|
|
2147
2162
|
test('bytes selector matches the first four bytes', () => {
|
|
2148
2163
|
expect(Webhooks.matchesOperator('0xa9059cbbdeadbeef', { selector: '0xa9059cbb' })).toBe(true)
|
|
2149
2164
|
expect(Webhooks.matchesOperator('0x12345678deadbeef', { selector: '0xa9059cbb' })).toBe(false)
|
|
@@ -908,9 +908,12 @@ export namespace schema {
|
|
|
908
908
|
z.meta({ examples: ['2026-01-14T18:38:03.685Z'] }),
|
|
909
909
|
),
|
|
910
910
|
topics: z.array(Schema.Hash).check(
|
|
911
|
-
z.describe(
|
|
911
|
+
z.describe(
|
|
912
|
+
'Zero to four log topics; non-anonymous events start with the event signature hash.',
|
|
913
|
+
),
|
|
912
914
|
z.meta({
|
|
913
915
|
examples: [
|
|
916
|
+
[],
|
|
914
917
|
[
|
|
915
918
|
'0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
|
|
916
919
|
'0x000000000000000000000000e7687128b0a808c2831ff94d4f7b2fb35c65af38',
|
|
@@ -1667,7 +1670,8 @@ export function webhooks(options: webhooks.Options = {}) {
|
|
|
1667
1670
|
)
|
|
1668
1671
|
return Response.error(c, {
|
|
1669
1672
|
code: 'api_key_forbidden',
|
|
1670
|
-
message:
|
|
1673
|
+
message:
|
|
1674
|
+
'API key is missing required permissions: routes:read. Use an API key with these scopes.',
|
|
1671
1675
|
status: 403,
|
|
1672
1676
|
})
|
|
1673
1677
|
}
|
|
@@ -2421,10 +2425,14 @@ function serializeArgs(value: unknown): unknown {
|
|
|
2421
2425
|
const toBig = (value: unknown) => BigInt(String(value))
|
|
2422
2426
|
|
|
2423
2427
|
/** Case-insensitive equality for string fields; bigint equality for numeric. */
|
|
2424
|
-
function operandEquals(
|
|
2428
|
+
function operandEquals(
|
|
2429
|
+
value: bigint | number | string,
|
|
2430
|
+
target: unknown,
|
|
2431
|
+
kind: 'number' | 'string',
|
|
2432
|
+
): boolean {
|
|
2425
2433
|
return kind === 'number'
|
|
2426
2434
|
? toBig(value) === toBig(target)
|
|
2427
|
-
: value.toLowerCase() === String(target).toLowerCase()
|
|
2435
|
+
: String(value).toLowerCase() === String(target).toLowerCase()
|
|
2428
2436
|
}
|
|
2429
2437
|
|
|
2430
2438
|
/**
|
|
@@ -2442,17 +2450,18 @@ function operandEquals(value: string, target: unknown, kind: 'number' | 'string'
|
|
|
2442
2450
|
* - `{ startsWith }` → hex prefix
|
|
2443
2451
|
*/
|
|
2444
2452
|
export function matchesOperator(
|
|
2445
|
-
value: string | undefined,
|
|
2453
|
+
value: bigint | number | string | undefined,
|
|
2446
2454
|
op: unknown,
|
|
2447
2455
|
kind: 'number' | 'string' = 'string',
|
|
2448
2456
|
): boolean {
|
|
2449
2457
|
if (value === undefined) return false
|
|
2450
2458
|
if (typeof op !== 'object' || op === null) return operandEquals(value, op, kind)
|
|
2451
2459
|
const o = op as Record<string, unknown>
|
|
2460
|
+
const value_string = String(value)
|
|
2452
2461
|
if ('selector' in o)
|
|
2453
|
-
return
|
|
2462
|
+
return value_string.slice(0, 10).toLowerCase() === String(o['selector']).toLowerCase()
|
|
2454
2463
|
if ('startsWith' in o)
|
|
2455
|
-
return
|
|
2464
|
+
return value_string.toLowerCase().startsWith(String(o['startsWith']).toLowerCase())
|
|
2456
2465
|
if ('in' in o) return (o['in'] as readonly unknown[]).some((v) => operandEquals(value, v, kind))
|
|
2457
2466
|
if ('not' in o) return !operandEquals(value, o['not'], kind)
|
|
2458
2467
|
if ('eq' in o && kind === 'string') return operandEquals(value, o['eq'], kind)
|
|
@@ -2535,13 +2544,12 @@ function toLogEvent(
|
|
|
2535
2544
|
const blockNumber = log.blockNumber === null ? undefined : Number(log.blockNumber)
|
|
2536
2545
|
const logIndex = log.logIndex ?? undefined
|
|
2537
2546
|
const transactionIndex = log.transactionIndex ?? undefined
|
|
2538
|
-
const topics = log.topics
|
|
2539
|
-
const topic0 = Schema.Hash.safeParse(topics[0])
|
|
2547
|
+
const topics = z.array(Schema.Hash).safeParse(log.topics)
|
|
2540
2548
|
const data = typeof log.data === 'string' ? log.data : '0x'
|
|
2541
2549
|
if (
|
|
2542
2550
|
!address.success ||
|
|
2543
2551
|
!transactionHash.success ||
|
|
2544
|
-
!
|
|
2552
|
+
!topics.success ||
|
|
2545
2553
|
blockNumber === undefined ||
|
|
2546
2554
|
logIndex === undefined ||
|
|
2547
2555
|
transactionIndex === undefined ||
|
|
@@ -2555,15 +2563,17 @@ function toLogEvent(
|
|
|
2555
2563
|
data,
|
|
2556
2564
|
logIndex,
|
|
2557
2565
|
timestamp,
|
|
2558
|
-
topics,
|
|
2566
|
+
topics: topics.data,
|
|
2559
2567
|
transactionHash: transactionHash.data,
|
|
2560
2568
|
transactionIndex,
|
|
2561
2569
|
}
|
|
2562
2570
|
if (!signature || !event || log.args === undefined) return base
|
|
2571
|
+
const topic0 = topics.data[0]
|
|
2572
|
+
if (!topic0) return undefined
|
|
2563
2573
|
return {
|
|
2564
2574
|
...base,
|
|
2565
2575
|
args: serializeArgs(log.args) as Record<string, unknown>,
|
|
2566
|
-
event: { name: event.name, signature, topic0
|
|
2576
|
+
event: { name: event.name, signature, topic0 },
|
|
2567
2577
|
}
|
|
2568
2578
|
}
|
|
2569
2579
|
|
|
@@ -2736,7 +2746,11 @@ function matchesLog(
|
|
|
2736
2746
|
const numeric = /^u?int/.test(input.type)
|
|
2737
2747
|
const value = args[name]
|
|
2738
2748
|
const normalized = input.type === 'address' ? lowercaseLeaves(op) : op
|
|
2739
|
-
|
|
2749
|
+
const operand =
|
|
2750
|
+
typeof value === 'bigint' || typeof value === 'number' || typeof value === 'string'
|
|
2751
|
+
? value
|
|
2752
|
+
: undefined
|
|
2753
|
+
if (!matchesOperator(operand, normalized, numeric ? 'number' : 'string')) return false
|
|
2740
2754
|
}
|
|
2741
2755
|
}
|
|
2742
2756
|
return true
|
|
@@ -7,6 +7,7 @@ import * as Metadata from '../metadata.js'
|
|
|
7
7
|
|
|
8
8
|
import { apiKeys } from './routes/api-keys.js'
|
|
9
9
|
import { billing } from './routes/billing.js'
|
|
10
|
+
import { cli } from './routes/cli.js'
|
|
10
11
|
import { faucet } from './routes/faucet.js'
|
|
11
12
|
import { invitations } from './routes/invitations.js'
|
|
12
13
|
import { inviteLinks } from './routes/invite-links.js'
|
|
@@ -75,6 +76,7 @@ export function management(options: management.Options = {}) {
|
|
|
75
76
|
})
|
|
76
77
|
.route('/', apiKeys({ enabled: options.apiKeys !== false }))
|
|
77
78
|
.route('/', billing())
|
|
79
|
+
.route('/', cli({ consoleUrl: options.consoleUrl }))
|
|
78
80
|
.route('/', faucet())
|
|
79
81
|
.route('/', invitations())
|
|
80
82
|
.route('/', inviteLinks())
|
|
@@ -96,6 +98,8 @@ export declare namespace management {
|
|
|
96
98
|
apiKeys?: boolean | undefined
|
|
97
99
|
/** Stripe billing capability; omit to disable billing routes (501) and keep production sponsorship closed. */
|
|
98
100
|
billing?: Billing | undefined
|
|
101
|
+
/** Console origin hosting the CLI sign-in approval page. @default 'https://console.tempo.xyz' */
|
|
102
|
+
consoleUrl?: string | undefined
|
|
99
103
|
/** Legacy group-level transactional email sender. Prefer `App.create({ email })`. */
|
|
100
104
|
email?: Email.Sender | undefined
|
|
101
105
|
/** Webhook capability shared with the data group and host poller; omit or pass false to disable management. */
|