tapimo 0.7.0 → 0.7.2
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/dist/ApiKeys.d.ts +24 -7
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +17 -5
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +12104 -7861
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +191 -128
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +10 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +17 -4
- package/dist/Assets.js.map +1 -1
- package/dist/Scope.d.ts +19 -8
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +25 -9
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +1 -1
- package/dist/admin/App.d.ts +601 -20
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +12 -2
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +94 -11
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +141 -32
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +1069 -0
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
- package/dist/admin/apps/earn-vaults.js +409 -0
- package/dist/admin/apps/earn-vaults.js.map +1 -0
- package/dist/admin/apps/verified-tokens.d.ts +166 -166
- 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 +151 -95
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts +2 -0
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +18 -2
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +22 -1
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +59 -39
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/Zones.d.ts +8335 -0
- package/dist/apps/Zones.d.ts.map +1 -0
- package/dist/apps/Zones.js +38 -0
- package/dist/apps/Zones.js.map +1 -0
- package/dist/apps/data/App.d.ts +14377 -10165
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +91 -19
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FxOracle.d.ts +1 -1
- package/dist/apps/data/FxOracle.d.ts.map +1 -1
- package/dist/apps/data/index.d.ts +0 -1
- package/dist/apps/data/index.d.ts.map +1 -1
- package/dist/apps/data/index.js +0 -1
- package/dist/apps/data/index.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +32 -32
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +130 -65
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +312 -312
- package/dist/apps/data/routes/balances.d.ts +18 -18
- package/dist/apps/data/routes/balances.js +5 -5
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +176 -176
- package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
- package/dist/apps/data/routes/coingecko.js +62 -35
- package/dist/apps/data/routes/coingecko.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +2144 -0
- package/dist/apps/data/routes/earn.d.ts.map +1 -0
- package/dist/apps/data/routes/earn.js +947 -0
- package/dist/apps/data/routes/earn.js.map +1 -0
- package/dist/apps/data/routes/exchanges.d.ts +1231 -324
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +656 -193
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +59 -8
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +4092 -387
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +1403 -256
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +5 -5
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +19 -2
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +265 -265
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +11 -11
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.d.ts +5 -5
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +211 -22
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +36 -36
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +49 -9
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +116 -88
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +198 -91
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +55 -55
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +78 -39
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +78 -29
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +165 -67
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +10 -10
- package/dist/apps/data/routes/valuation.js +2 -2
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +34 -9
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +5 -3
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +175 -65
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +281 -0
- package/dist/apps/data/routes/zones.d.ts.map +1 -0
- package/dist/apps/data/routes/zones.js +252 -0
- package/dist/apps/data/routes/zones.js.map +1 -0
- package/dist/apps/docs/reference.js +6 -5
- package/dist/apps/docs/reference.js.map +1 -1
- package/dist/apps/index.d.ts +2 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +2 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/management/App.d.ts +670 -670
- package/dist/apps/management/Billing.d.ts +8 -0
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +12 -0
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/Error.d.ts +12 -0
- package/dist/apps/management/Error.d.ts.map +1 -0
- package/dist/apps/management/Error.js +10 -0
- package/dist/apps/management/Error.js.map +1 -0
- package/dist/apps/management/routes/api-keys.d.ts +5 -5
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +2 -8
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +119 -119
- package/dist/apps/management/routes/faucet.d.ts +35 -35
- package/dist/apps/management/routes/invitations.d.ts +62 -62
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +4 -10
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +30 -30
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +78 -78
- package/dist/apps/management/routes/orgs.d.ts +48 -48
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +2 -8
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +9 -9
- package/dist/apps/management/routes/scopes.js +2 -2
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +80 -80
- package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
- package/dist/apps/management/routes/webhooks.d.ts +50 -50
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +15 -3
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/App.d.ts +55 -56
- package/dist/apps/mpp/App.d.ts.map +1 -1
- package/dist/apps/mpp/App.js +192 -27
- package/dist/apps/mpp/App.js.map +1 -1
- package/dist/apps/mpp/Mpp.d.ts +0 -20
- package/dist/apps/mpp/Mpp.d.ts.map +1 -1
- package/dist/apps/mpp/Mpp.js +0 -24
- package/dist/apps/mpp/Mpp.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Adapter.js +66 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -0
- package/dist/apps/mpp/internal/Error.d.ts +4 -0
- package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Error.js +41 -0
- package/dist/apps/mpp/internal/Error.js.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.js +28 -0
- package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
- package/dist/apps/mpp/internal/Policy.d.ts +46 -0
- package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Policy.js +57 -0
- package/dist/apps/mpp/internal/Policy.js.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.js +18 -0
- package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
- package/dist/apps/mpp/internal/Screening.d.ts +35 -0
- package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Screening.js +20 -0
- package/dist/apps/mpp/internal/Screening.js.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.js +103 -0
- package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
- package/dist/apps/mpp/internal/Utils.d.ts +7 -0
- package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Utils.js +24 -0
- package/dist/apps/mpp/internal/Utils.js.map +1 -0
- package/dist/apps/relay/App.js +184 -24
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/relay/Sponsorships.d.ts +4 -0
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +16 -7
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/db/Db.d.ts +20 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +342 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +921 -1
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +269 -1
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +68 -0
- package/dist/db/tables/earnVaults.d.ts.map +1 -0
- package/dist/db/tables/earnVaults.js +72 -0
- package/dist/db/tables/earnVaults.js.map +1 -0
- package/dist/db/tables/fundingCatalog.d.ts +56 -0
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
- package/dist/db/tables/fundingCatalog.js +85 -0
- package/dist/db/tables/fundingCatalog.js.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.js +206 -0
- package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
- package/dist/db/tables/fundingDeposits.d.ts +115 -0
- package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
- package/dist/db/tables/fundingDeposits.js +100 -0
- package/dist/db/tables/fundingDeposits.js.map +1 -0
- package/dist/db/tables/fundingIdempotency.d.ts +91 -0
- package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
- package/dist/db/tables/fundingIdempotency.js +103 -0
- package/dist/db/tables/fundingIdempotency.js.map +1 -0
- package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
- package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferEvents.js +18 -0
- package/dist/db/tables/fundingTransferEvents.js.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.js +27 -0
- package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
- package/dist/db/tables/fundingTransfers.d.ts +82 -0
- package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
- package/dist/db/tables/fundingTransfers.js +89 -0
- package/dist/db/tables/fundingTransfers.js.map +1 -0
- package/dist/db/tables/organizations.d.ts +8 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +35 -0
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/projects.d.ts +8 -0
- package/dist/db/tables/projects.d.ts.map +1 -1
- package/dist/db/tables/projects.js +16 -0
- package/dist/db/tables/projects.js.map +1 -1
- package/dist/db/tables/requestUsage.d.ts +13 -0
- package/dist/db/tables/requestUsage.d.ts.map +1 -1
- package/dist/db/tables/requestUsage.js +16 -0
- package/dist/db/tables/requestUsage.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +4 -2
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +14 -4
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/users.d.ts +8 -0
- package/dist/db/tables/users.d.ts.map +1 -1
- package/dist/db/tables/users.js +16 -0
- package/dist/db/tables/users.js.map +1 -1
- package/dist/db/tables/verifiedTokens.d.ts +14 -7
- package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
- package/dist/db/tables/verifiedTokens.js +9 -7
- package/dist/db/tables/verifiedTokens.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +24 -3
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/relay.js +108 -108
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +26 -0
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +35 -2
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +16 -10
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/Cursor.js +1 -1
- package/dist/internal/Cursor.js.map +1 -1
- package/dist/internal/EarnRates.d.ts +89 -0
- package/dist/internal/EarnRates.d.ts.map +1 -0
- package/dist/internal/EarnRates.js +266 -0
- package/dist/internal/EarnRates.js.map +1 -0
- package/dist/internal/EarnVaults.d.ts +171 -0
- package/dist/internal/EarnVaults.d.ts.map +1 -0
- package/dist/internal/EarnVaults.js +547 -0
- package/dist/internal/EarnVaults.js.map +1 -0
- package/dist/internal/EdgeCache.d.ts +9 -2
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +36 -9
- package/dist/internal/EdgeCache.js.map +1 -1
- package/dist/internal/Id.d.ts +11 -0
- package/dist/internal/Id.d.ts.map +1 -1
- package/dist/internal/Id.js +13 -0
- package/dist/internal/Id.js.map +1 -1
- package/dist/internal/Idempotency.d.ts +83 -0
- package/dist/internal/Idempotency.d.ts.map +1 -0
- package/dist/internal/Idempotency.js +113 -0
- package/dist/internal/Idempotency.js.map +1 -0
- package/dist/internal/Log.d.ts +64 -9
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +29 -7
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +47 -1
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +1 -1
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +3 -0
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Provider.d.ts +14 -0
- package/dist/internal/Provider.d.ts.map +1 -0
- package/dist/internal/Provider.js +5 -0
- package/dist/internal/Provider.js.map +1 -0
- package/dist/internal/Schema.d.ts +8 -3
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +24 -13
- package/dist/internal/Schema.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 +35 -0
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +43 -24
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +79 -11
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Viem.d.ts +82 -65
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +83 -12
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +34 -28
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +9 -0
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +15 -10
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/exchange/Provider.d.ts +219 -0
- package/dist/internal/exchange/Provider.d.ts.map +1 -0
- package/dist/internal/exchange/Provider.js +117 -0
- package/dist/internal/exchange/Provider.js.map +1 -0
- package/dist/internal/exchange/index.d.ts +2 -0
- package/dist/internal/exchange/index.d.ts.map +1 -0
- package/dist/internal/exchange/index.js +2 -0
- package/dist/internal/exchange/index.js.map +1 -0
- package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
- package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
- package/dist/internal/exchange/providers/uniswap.js +553 -0
- package/dist/internal/exchange/providers/uniswap.js.map +1 -0
- package/dist/internal/funding/Action.d.ts +55 -0
- package/dist/internal/funding/Action.d.ts.map +1 -0
- package/dist/internal/funding/Action.js +74 -0
- package/dist/internal/funding/Action.js.map +1 -0
- package/dist/internal/funding/Catalog.d.ts +107 -0
- package/dist/internal/funding/Catalog.d.ts.map +1 -0
- package/dist/internal/funding/Catalog.js +270 -0
- package/dist/internal/funding/Catalog.js.map +1 -0
- package/dist/internal/funding/Chain.d.ts +76 -0
- package/dist/internal/funding/Chain.d.ts.map +1 -0
- package/dist/internal/funding/Chain.js +38 -0
- package/dist/internal/funding/Chain.js.map +1 -0
- package/dist/internal/funding/Deposit.d.ts +366 -0
- package/dist/internal/funding/Deposit.d.ts.map +1 -0
- package/dist/internal/funding/Deposit.js +286 -0
- package/dist/internal/funding/Deposit.js.map +1 -0
- package/dist/internal/funding/DepositAddress.d.ts +345 -0
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
- package/dist/internal/funding/DepositAddress.js +189 -0
- package/dist/internal/funding/DepositAddress.js.map +1 -0
- package/dist/internal/funding/Evidence.d.ts +52 -0
- package/dist/internal/funding/Evidence.d.ts.map +1 -0
- package/dist/internal/funding/Evidence.js +314 -0
- package/dist/internal/funding/Evidence.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts +1186 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -0
- package/dist/internal/funding/Provider.js +1081 -0
- package/dist/internal/funding/Provider.js.map +1 -0
- package/dist/internal/funding/Reconciliation.d.ts +113 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
- package/dist/internal/funding/Reconciliation.js +676 -0
- package/dist/internal/funding/Reconciliation.js.map +1 -0
- package/dist/internal/funding/Route.d.ts +21 -0
- package/dist/internal/funding/Route.d.ts.map +1 -0
- package/dist/internal/funding/Route.js +5 -0
- package/dist/internal/funding/Route.js.map +1 -0
- package/dist/internal/funding/Subsidy.d.ts +113 -0
- package/dist/internal/funding/Subsidy.d.ts.map +1 -0
- package/dist/internal/funding/Subsidy.js +138 -0
- package/dist/internal/funding/Subsidy.js.map +1 -0
- package/dist/internal/funding/Token.d.ts +41 -0
- package/dist/internal/funding/Token.d.ts.map +1 -0
- package/dist/internal/funding/Token.js +22 -0
- package/dist/internal/funding/Token.js.map +1 -0
- package/dist/internal/funding/Transfer.d.ts +643 -0
- package/dist/internal/funding/Transfer.d.ts.map +1 -0
- package/dist/internal/funding/Transfer.js +332 -0
- package/dist/internal/funding/Transfer.js.map +1 -0
- package/dist/internal/funding/index.d.ts +13 -0
- package/dist/internal/funding/index.d.ts.map +1 -0
- package/dist/internal/funding/index.js +13 -0
- package/dist/internal/funding/index.js.map +1 -0
- package/dist/internal/funding/providers/across.d.ts +21 -0
- package/dist/internal/funding/providers/across.d.ts.map +1 -0
- package/dist/internal/funding/providers/across.js +117 -0
- package/dist/internal/funding/providers/across.js.map +1 -0
- package/dist/internal/funding/providers/relay.d.ts +46 -0
- package/dist/internal/funding/providers/relay.d.ts.map +1 -0
- package/dist/internal/funding/providers/relay.js +464 -0
- package/dist/internal/funding/providers/relay.js.map +1 -0
- package/dist/internal/funding/providers/rhino.d.ts +15 -0
- package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
- package/dist/internal/funding/providers/rhino.js +116 -0
- package/dist/internal/funding/providers/rhino.js.map +1 -0
- package/dist/internal/funding/providers/squid.d.ts +19 -0
- package/dist/internal/funding/providers/squid.d.ts.map +1 -0
- package/dist/internal/funding/providers/squid.js +120 -0
- package/dist/internal/funding/providers/squid.js.map +1 -0
- package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
- package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
- package/dist/internal/funding/providers/symbiosis.js +176 -0
- package/dist/internal/funding/providers/symbiosis.js.map +1 -0
- package/dist/internal/index.d.ts +5 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +5 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/webhookDestinations/url.js +61 -57
- package/dist/internal/webhookDestinations/url.js.map +1 -1
- package/dist/providers/index.d.ts +43 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/package.json +9 -4
- package/src/ApiKeys.test.ts +11 -7
- package/src/ApiKeys.ts +37 -9
- package/src/App.test.ts +85 -10
- package/src/App.ts +224 -137
- package/src/Assets.ts +29 -4
- package/src/Client.test-d.ts +650 -30
- package/src/Scope.test.ts +19 -0
- package/src/Scope.ts +28 -11
- package/src/Webhooks.test.ts +25 -0
- package/src/Webhooks.ts +1 -1
- package/src/admin/App.test.ts +9 -2
- package/src/admin/App.ts +32 -9
- package/src/admin/apps/api-keys.test.ts +167 -23
- package/src/admin/apps/api-keys.ts +166 -28
- package/src/admin/apps/earn-vaults.test.ts +338 -0
- package/src/admin/apps/earn-vaults.ts +572 -0
- package/src/admin/apps/scopes.test.ts +16 -1
- package/src/admin/ui/plugin.ts +2 -2
- package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
- package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
- package/src/admin/ui/src/components/Page.tsx +1 -1
- package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
- package/src/admin/ui/src/lib/api-keys.ts +37 -7
- package/src/admin/ui/src/lib/client.ts +1 -1
- package/src/admin/ui/src/lib/config.ts +1 -1
- package/src/admin/ui/src/lib/early-access.ts +8 -9
- package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
- package/src/admin/ui/src/lib/format.ts +13 -0
- package/src/admin/ui/src/lib/organizations.test.ts +14 -4
- package/src/admin/ui/src/lib/organizations.ts +7 -1
- package/src/admin/ui/src/lib/response.ts +22 -0
- package/src/admin/ui/src/lib/scopes.test.ts +19 -11
- package/src/admin/ui/src/lib/scopes.ts +28 -7
- package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
- package/src/admin/ui/src/routeTree.gen.ts +70 -7
- package/src/admin/ui/src/router.tsx +2 -2
- package/src/admin/ui/src/routes/__root.tsx +9 -8
- package/src/admin/ui/src/routes/api-keys.tsx +475 -64
- package/src/admin/ui/src/routes/early-access.tsx +5 -12
- package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
- package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
- package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
- package/src/admin/ui/src/routes/organizations.tsx +4 -7
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
- package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
- package/src/admin/ui/vite.config.ts +4 -1
- package/src/admin/ui.generated.ts +189 -95
- package/src/analytics/Analytics.test.ts +69 -10
- package/src/analytics/Analytics.ts +20 -1
- package/src/analytics/tables/requestEvents.ts +79 -37
- package/src/apps/Zones.test.ts +33 -0
- package/src/apps/Zones.ts +40 -0
- package/src/apps/composition.test.ts +84 -1
- package/src/apps/data/App.test.ts +38 -9
- package/src/apps/data/App.ts +96 -33
- package/src/apps/data/FxOracle.ts +1 -1
- package/src/apps/data/index.ts +0 -1
- package/src/apps/data/routes/activities.test.ts +82 -6
- package/src/apps/data/routes/activities.ts +131 -71
- package/src/apps/data/routes/balances.test.ts +50 -37
- package/src/apps/data/routes/balances.ts +5 -5
- package/src/apps/data/routes/blocks.test.ts +2 -0
- package/src/apps/data/routes/coingecko.test.ts +22 -0
- package/src/apps/data/routes/coingecko.ts +84 -48
- package/src/apps/data/routes/earn.test.ts +1108 -0
- package/src/apps/data/routes/earn.ts +1391 -0
- package/src/apps/data/routes/exchanges.test.ts +82 -33
- package/src/apps/data/routes/exchanges.ts +842 -227
- package/src/apps/data/routes/fee-amm.test.ts +4 -6
- package/src/apps/data/routes/fee-amm.ts +69 -12
- package/src/apps/data/routes/funding.test.ts +2712 -221
- package/src/apps/data/routes/funding.ts +1604 -387
- package/src/apps/data/routes/indexer.test.ts +43 -34
- package/src/apps/data/routes/indexer.ts +19 -2
- package/src/apps/data/routes/receipts.test.ts +5 -3
- package/src/apps/data/routes/receipts.ts +13 -11
- package/src/apps/data/routes/rpc.test.ts +446 -28
- package/src/apps/data/routes/rpc.ts +243 -25
- package/src/apps/data/routes/tokenlist.test.ts +15 -0
- package/src/apps/data/routes/tokenlist.ts +88 -22
- package/src/apps/data/routes/tokens.ts +262 -86
- package/src/apps/data/routes/transactions.test.ts +2 -0
- package/src/apps/data/routes/transactions.ts +77 -42
- package/src/apps/data/routes/transfers.test.ts +166 -4
- package/src/apps/data/routes/transfers.ts +216 -78
- package/src/apps/data/routes/valuation.test.ts +62 -9
- package/src/apps/data/routes/valuation.ts +2 -2
- package/src/apps/data/routes/verified-tokens.test.ts +51 -0
- package/src/apps/data/routes/verified-tokens.ts +52 -15
- package/src/apps/data/routes/webhooks.test.ts +432 -33
- package/src/apps/data/routes/webhooks.ts +189 -79
- package/src/apps/data/routes/zones.test.ts +473 -0
- package/src/apps/data/routes/zones.ts +338 -0
- package/src/apps/docs/reference.ts +8 -6
- package/src/apps/index.ts +2 -1
- package/src/apps/management/Billing.test.ts +29 -0
- package/src/apps/management/Billing.ts +23 -0
- package/src/apps/management/Error.ts +12 -0
- package/src/apps/management/routes/api-keys.test.ts +5 -3
- package/src/apps/management/routes/api-keys.ts +2 -9
- package/src/apps/management/routes/invitations.ts +4 -11
- package/src/apps/management/routes/orgs.ts +2 -9
- package/src/apps/management/routes/scopes.test.ts +7 -2
- package/src/apps/management/routes/scopes.ts +2 -2
- package/src/apps/management/routes/webhooks.test.ts +6 -1
- package/src/apps/management/routes/webhooks.ts +15 -3
- package/src/apps/mpp/App.ts +276 -29
- package/src/apps/mpp/Mpp.test.ts +631 -26
- package/src/apps/mpp/Mpp.ts +0 -42
- package/src/apps/mpp/internal/Adapter.ts +108 -3
- package/src/apps/mpp/internal/Error.test.ts +33 -0
- package/src/apps/mpp/internal/Error.ts +44 -6
- package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
- package/src/apps/mpp/internal/Idempotency.ts +59 -5
- package/src/apps/mpp/internal/Policy.test.ts +122 -0
- package/src/apps/mpp/internal/Policy.ts +98 -0
- package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
- package/src/apps/mpp/internal/ScreenManager.ts +41 -0
- package/src/apps/mpp/internal/Screening.ts +40 -3
- package/src/apps/mpp/internal/Sponsorship.ts +144 -0
- package/src/apps/mpp/internal/Utils.ts +30 -0
- package/src/apps/relay/App.test.ts +495 -64
- package/src/apps/relay/App.ts +234 -24
- package/src/apps/relay/Sponsorships.test.ts +51 -0
- package/src/apps/relay/Sponsorships.ts +19 -7
- package/src/db/Db.ts +439 -0
- package/src/db/Schema.ts +325 -2
- package/src/db/tables/earnVaults.test.ts +185 -0
- package/src/db/tables/earnVaults.ts +151 -0
- package/src/db/tables/fundingCatalog.test.ts +108 -0
- package/src/db/tables/fundingCatalog.ts +157 -0
- package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
- package/src/db/tables/fundingDepositAddresses.ts +376 -0
- package/src/db/tables/fundingDeposits.test.ts +261 -0
- package/src/db/tables/fundingDeposits.ts +229 -0
- package/src/db/tables/fundingIdempotency.test.ts +182 -0
- package/src/db/tables/fundingIdempotency.ts +180 -0
- package/src/db/tables/fundingTransferEvents.ts +28 -0
- package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
- package/src/db/tables/fundingTransferTransactions.ts +37 -0
- package/src/db/tables/fundingTransfers.test.ts +89 -0
- package/src/db/tables/fundingTransfers.ts +153 -0
- package/src/db/tables/organizations.test.ts +88 -0
- package/src/db/tables/organizations.ts +42 -1
- package/src/db/tables/projects.ts +16 -0
- package/src/db/tables/requestUsage.ts +23 -0
- package/src/db/tables/sponsoredTransactions.test.ts +52 -2
- package/src/db/tables/sponsoredTransactions.ts +18 -6
- package/src/db/tables/users.ts +16 -0
- package/src/db/tables/verifiedTokens.ts +19 -14
- package/src/db/tables/webhookSubscriptions.ts +58 -3
- package/src/handlers/relay.test.ts +2 -0
- package/src/handlers/relay.ts +95 -99
- package/src/internal/Auth.test.ts +48 -0
- package/src/internal/Auth.ts +61 -2
- package/src/internal/Cache.ts +13 -9
- package/src/internal/Cursor.test.ts +2 -2
- package/src/internal/Cursor.ts +1 -1
- package/src/internal/EarnRates.test.ts +125 -0
- package/src/internal/EarnRates.ts +409 -0
- package/src/internal/EarnVaults.test.ts +195 -0
- package/src/internal/EarnVaults.ts +876 -0
- package/src/internal/EdgeCache.test.ts +37 -5
- package/src/internal/EdgeCache.ts +39 -7
- package/src/internal/Id.ts +14 -0
- package/src/internal/Idempotency.test.ts +109 -0
- package/src/internal/Idempotency.ts +237 -0
- package/src/internal/Log.test-d.ts +41 -8
- package/src/internal/Log.test.ts +189 -8
- package/src/internal/Log.ts +124 -17
- package/src/internal/MetricSink.test.ts +244 -4
- package/src/internal/MetricSink.ts +51 -1
- package/src/internal/OpenApi.ts +3 -0
- package/src/internal/Provider.test.ts +17 -0
- package/src/internal/Provider.ts +17 -0
- package/src/internal/Schema.test.ts +13 -0
- package/src/internal/Schema.ts +41 -24
- package/src/internal/Store.test.ts +25 -0
- package/src/internal/Store.ts +46 -0
- package/src/internal/Tidx.local.test.ts +78 -3
- package/src/internal/Tidx.test.ts +212 -18
- package/src/internal/Tidx.ts +112 -32
- package/src/internal/VerifiedTokens.test.ts +15 -0
- package/src/internal/Viem.test.ts +170 -17
- package/src/internal/Viem.ts +111 -28
- package/src/internal/WebhookDestination.ts +25 -23
- package/src/internal/Webhooks.test.ts +59 -0
- package/src/internal/Webhooks.ts +34 -10
- package/src/internal/exchange/Provider.test.ts +216 -0
- package/src/internal/exchange/Provider.ts +326 -0
- package/src/internal/exchange/index.test.ts +6 -0
- package/src/internal/exchange/index.ts +1 -0
- package/src/internal/exchange/providers/uniswap.test.ts +122 -0
- package/src/internal/exchange/providers/uniswap.ts +682 -0
- package/src/internal/funding/Action.test.ts +138 -0
- package/src/internal/funding/Action.ts +117 -0
- package/src/internal/funding/Catalog.test.ts +311 -0
- package/src/internal/funding/Catalog.ts +347 -0
- package/src/internal/funding/Chain.test.ts +79 -0
- package/src/internal/funding/Chain.ts +120 -0
- package/src/internal/funding/Deposit.test.ts +26 -0
- package/src/internal/funding/Deposit.ts +453 -0
- package/src/internal/funding/DepositAddress.test.ts +18 -0
- package/src/internal/funding/DepositAddress.ts +312 -0
- package/src/internal/funding/Evidence.test.ts +297 -0
- package/src/internal/funding/Evidence.ts +430 -0
- package/src/internal/funding/Provider.test.ts +1328 -0
- package/src/internal/funding/Provider.ts +1796 -0
- package/src/internal/funding/Reconciliation.local.test.ts +504 -0
- package/src/internal/funding/Reconciliation.test.ts +2020 -0
- package/src/internal/funding/Reconciliation.ts +930 -0
- package/src/internal/funding/Route.test.ts +66 -0
- package/src/internal/funding/Route.ts +29 -0
- package/src/internal/funding/Subsidy.local.test.ts +152 -0
- package/src/internal/funding/Subsidy.test.ts +75 -0
- package/src/internal/funding/Subsidy.ts +260 -0
- package/src/internal/funding/Token.test.ts +47 -0
- package/src/internal/funding/Token.ts +59 -0
- package/src/internal/funding/Transfer.test.ts +369 -0
- package/src/internal/funding/Transfer.ts +522 -0
- package/src/internal/funding/index.test.ts +20 -0
- package/src/internal/funding/index.ts +12 -0
- package/src/internal/funding/providers/across.ts +149 -0
- package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
- package/src/internal/funding/providers/relay.test.ts +474 -0
- package/src/internal/funding/providers/relay.ts +559 -0
- package/src/internal/funding/providers/rhino.ts +139 -0
- package/src/internal/funding/providers/squid.ts +151 -0
- package/src/internal/funding/providers/symbiosis.ts +221 -0
- package/src/internal/index.test.ts +5 -1
- package/src/internal/index.ts +5 -1
- package/src/internal/webhookDestinations/url.ts +49 -45
- package/src/providers/index.test.ts +14 -0
- package/src/providers/index.ts +54 -0
- package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
- package/dist/apps/data/FundingQuoteProviders.js +0 -775
- package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
- package/dist/internal/FundingQuotes.d.ts +0 -864
- package/dist/internal/FundingQuotes.d.ts.map +0 -1
- package/dist/internal/FundingQuotes.js +0 -672
- package/dist/internal/FundingQuotes.js.map +0 -1
- package/src/apps/data/FundingQuoteProviders.ts +0 -1043
- package/src/internal/FundingQuotes.test.ts +0 -456
- package/src/internal/FundingQuotes.ts +0 -944
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Link } from '@tanstack/react-router'
|
|
2
|
+
import type { ComponentProps, FormEventHandler, ReactNode, TextareaHTMLAttributes } from 'react'
|
|
3
|
+
import { Button, Fields, Input, Select } from 'regen-ui'
|
|
4
|
+
import { TriangleAlert } from 'lucide-react'
|
|
5
|
+
|
|
6
|
+
import * as EarnVaults from '../lib/earn-vaults.js'
|
|
7
|
+
|
|
8
|
+
/** Shared form shell for creating and editing verified Earn vaults. */
|
|
9
|
+
export function EarnVaultForm(options: EarnVaultForm.Props) {
|
|
10
|
+
return (
|
|
11
|
+
<form
|
|
12
|
+
className="flex w-full max-w-2xl flex-col border border-border bg-surface"
|
|
13
|
+
onChange={options.onChange}
|
|
14
|
+
onSubmit={options.onSubmit}
|
|
15
|
+
>
|
|
16
|
+
<div className="flex flex-col gap-5 p-5">
|
|
17
|
+
<Fields className="gap-6" variant="default">
|
|
18
|
+
{options.children}
|
|
19
|
+
</Fields>
|
|
20
|
+
{options.error ? <EarnVaultForm.Error>{options.error}</EarnVaultForm.Error> : null}
|
|
21
|
+
</div>
|
|
22
|
+
<div className="flex justify-end gap-2 border-t border-border px-5 py-3">
|
|
23
|
+
<Button render={<Link search={{ chainId: options.chainId }} to="/earn/vaults" />}>
|
|
24
|
+
Cancel
|
|
25
|
+
</Button>
|
|
26
|
+
{options.action}
|
|
27
|
+
</div>
|
|
28
|
+
</form>
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export namespace EarnVaultForm {
|
|
33
|
+
/** Props for the verified-vault form shell. */
|
|
34
|
+
export type Props = {
|
|
35
|
+
/** Primary form action. */
|
|
36
|
+
action: ReactNode
|
|
37
|
+
/** Selected parent Tempo chain. */
|
|
38
|
+
chainId: EarnVaults.ChainId
|
|
39
|
+
/** Form fields. */
|
|
40
|
+
children: ReactNode
|
|
41
|
+
/** Mutation error shown above the footer. */
|
|
42
|
+
error?: string | undefined
|
|
43
|
+
/** Form change handler. */
|
|
44
|
+
onChange: FormEventHandler<HTMLFormElement>
|
|
45
|
+
/** Form submit handler. */
|
|
46
|
+
onSubmit: FormEventHandler<HTMLFormElement>
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Address input with native Ethereum address validation. */
|
|
50
|
+
export function AddressInput(options: AddressInput.Props) {
|
|
51
|
+
return (
|
|
52
|
+
<Input
|
|
53
|
+
{...options}
|
|
54
|
+
autoCapitalize="off"
|
|
55
|
+
autoComplete="off"
|
|
56
|
+
pattern="0x[a-fA-F0-9]{40}"
|
|
57
|
+
placeholder={options.placeholder ?? '0x…'}
|
|
58
|
+
spellCheck={false}
|
|
59
|
+
/>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export namespace AddressInput {
|
|
64
|
+
/** Props accepted by an Earn address input. */
|
|
65
|
+
export type Props = ComponentProps<typeof Input>
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Tempo chain selector for verified Earn vaults. */
|
|
69
|
+
export function ChainSelect(options: ChainSelect.Props) {
|
|
70
|
+
return (
|
|
71
|
+
<Select
|
|
72
|
+
aria-label="Earn vault chain"
|
|
73
|
+
className={options.className}
|
|
74
|
+
items={EarnVaults.chains.map((chain) => ({
|
|
75
|
+
label: chain.label,
|
|
76
|
+
value: String(chain.id),
|
|
77
|
+
}))}
|
|
78
|
+
onChange={(value) => options.onChange(Number(value) as EarnVaults.ChainId)}
|
|
79
|
+
value={String(options.value)}
|
|
80
|
+
/>
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export namespace ChainSelect {
|
|
85
|
+
/** Props accepted by the Earn chain selector. */
|
|
86
|
+
export type Props = {
|
|
87
|
+
/** Optional selector width or placement styles. */
|
|
88
|
+
className?: string | undefined
|
|
89
|
+
/** Called when the selected chain changes. */
|
|
90
|
+
onChange: (chainId: EarnVaults.ChainId) => void
|
|
91
|
+
/** Selected parent Tempo chain. */
|
|
92
|
+
value: EarnVaults.ChainId
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Inline mutation error shown above form actions. */
|
|
97
|
+
export function Error(options: Error.Props) {
|
|
98
|
+
return (
|
|
99
|
+
<div
|
|
100
|
+
className="flex items-start gap-3 border border-negative bg-negative-subtle p-3 text-copy-13 text-negative"
|
|
101
|
+
role="alert"
|
|
102
|
+
>
|
|
103
|
+
<TriangleAlert className="mt-0.5 size-4 shrink-0" />
|
|
104
|
+
<p className="whitespace-pre-line">{options.children}</p>
|
|
105
|
+
</div>
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export namespace Error {
|
|
110
|
+
/** Props accepted by an Earn form error. */
|
|
111
|
+
export type Props = {
|
|
112
|
+
/** Error message. */
|
|
113
|
+
children: ReactNode
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Multi-line field used for descriptions and token lists. */
|
|
118
|
+
export function Textarea({ label, ...options }: Textarea.Props) {
|
|
119
|
+
return (
|
|
120
|
+
<label className="flex min-w-0 flex-col gap-2 text-label-13 text-foreground-secondary">
|
|
121
|
+
{label}
|
|
122
|
+
<textarea
|
|
123
|
+
{...options}
|
|
124
|
+
className="w-full resize-y rounded-body border-2 border-transparent bg-secondary px-3 py-2.5 text-copy-13 text-foreground outline-none placeholder:text-foreground-secondary/50 hover:bg-secondary-hover focus-visible:border-focus focus-visible:bg-secondary-hover"
|
|
125
|
+
/>
|
|
126
|
+
</label>
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export namespace Textarea {
|
|
131
|
+
/** Props accepted by an Earn form textarea. */
|
|
132
|
+
export type Props = TextareaHTMLAttributes<HTMLTextAreaElement> & {
|
|
133
|
+
/** Visible field label. */
|
|
134
|
+
label: string
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -2,8 +2,8 @@ import { Bytes, Hash, type Address } from 'ox'
|
|
|
2
2
|
import { Identicon } from 'regen-ui'
|
|
3
3
|
import { LogOut } from 'lucide-react'
|
|
4
4
|
|
|
5
|
-
import * as Config from '../lib/config'
|
|
6
|
-
import { ThemeToggle } from './ThemeToggle'
|
|
5
|
+
import * as Config from '../lib/config.js'
|
|
6
|
+
import { ThemeToggle } from './ThemeToggle.js'
|
|
7
7
|
|
|
8
8
|
/** Mobile-only header profile: identicon + sign-out, shown when the sidebar is hidden. */
|
|
9
9
|
export function MobileProfile() {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReactNode } from 'react'
|
|
2
2
|
import { cx } from 'regen-ui'
|
|
3
3
|
|
|
4
|
-
import { MobileProfile } from './MobileProfile'
|
|
4
|
+
import { MobileProfile } from './MobileProfile.js'
|
|
5
5
|
|
|
6
6
|
/** Page header: title, optional description, and an optional right-aligned action. */
|
|
7
7
|
export function Page(props: {
|
|
@@ -2,15 +2,18 @@ import * as ReactQuery from '@tanstack/react-query'
|
|
|
2
2
|
import type { InferRequestType, InferResponseType } from 'hono/client'
|
|
3
3
|
import * as z from 'zod/mini'
|
|
4
4
|
|
|
5
|
-
import { client } from './client'
|
|
5
|
+
import { client } from './client.js'
|
|
6
|
+
import * as Response from './response.js'
|
|
6
7
|
|
|
7
8
|
/** A single API key record from the list endpoint. */
|
|
8
9
|
export type ApiKey = InferResponseType<(typeof client)['api-keys']['$get'], 200>['data'][number]
|
|
9
10
|
|
|
10
11
|
/** URL-backed API key filters. */
|
|
11
12
|
export const search = z.object({
|
|
13
|
+
environment: z.catch(z.optional(z.enum(['production', 'sandbox'])), undefined),
|
|
12
14
|
orgId: z.catch(z.optional(z.string()), undefined),
|
|
13
15
|
projectId: z.catch(z.optional(z.string()), undefined),
|
|
16
|
+
query: z.catch(z.optional(z.string()), undefined),
|
|
14
17
|
})
|
|
15
18
|
|
|
16
19
|
/** API key list filters. */
|
|
@@ -50,11 +53,36 @@ export namespace get {
|
|
|
50
53
|
/** Provision a new API key. */
|
|
51
54
|
export namespace provision {
|
|
52
55
|
export type Input = InferRequestType<(typeof client)['api-keys']['$post']>['json']
|
|
53
|
-
export function fn(json: Input) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
56
|
+
export async function fn(json: Input) {
|
|
57
|
+
const response = await client['api-keys'].$post({ json })
|
|
58
|
+
if (!response.ok)
|
|
59
|
+
throw new Error(
|
|
60
|
+
await Response.errorMessage(response, { fallback: 'Failed to provision key.' }),
|
|
61
|
+
)
|
|
62
|
+
return response.json()
|
|
63
|
+
}
|
|
64
|
+
export function useMutation() {
|
|
65
|
+
const queryClient = ReactQuery.useQueryClient()
|
|
66
|
+
return ReactQuery.useMutation({
|
|
67
|
+
mutationFn: fn,
|
|
68
|
+
onSuccess: () => queryClient.invalidateQueries({ queryKey: get.baseKey }),
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Updates API-key display metadata. */
|
|
74
|
+
export namespace update {
|
|
75
|
+
export type Input = InferRequestType<(typeof client)['api-keys'][':id']['$patch']>['json']
|
|
76
|
+
export async function fn(options: { id: string; input: Input }) {
|
|
77
|
+
const response = await client['api-keys'][':id'].$patch({
|
|
78
|
+
json: options.input,
|
|
79
|
+
param: { id: options.id },
|
|
57
80
|
})
|
|
81
|
+
if (!response.ok)
|
|
82
|
+
throw new Error(
|
|
83
|
+
await Response.errorMessage(response, { fallback: 'Failed to update the API key.' }),
|
|
84
|
+
)
|
|
85
|
+
return response.json()
|
|
58
86
|
}
|
|
59
87
|
export function useMutation() {
|
|
60
88
|
const queryClient = ReactQuery.useQueryClient()
|
|
@@ -67,8 +95,10 @@ export namespace provision {
|
|
|
67
95
|
|
|
68
96
|
/** Revoke an API key by id. */
|
|
69
97
|
export namespace revoke {
|
|
70
|
-
export function fn(id: string) {
|
|
71
|
-
|
|
98
|
+
export async function fn(id: string) {
|
|
99
|
+
const response = await client['api-keys'][':id'].$delete({ param: { id } })
|
|
100
|
+
if (!response.ok) throw new Error('Failed to revoke the API key.')
|
|
101
|
+
return response.json()
|
|
72
102
|
}
|
|
73
103
|
export function useMutation() {
|
|
74
104
|
const queryClient = ReactQuery.useQueryClient()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { hc } from 'hono/client'
|
|
2
2
|
|
|
3
|
-
import type { App } from '../../../App'
|
|
3
|
+
import type { App } from '../../../App.js'
|
|
4
4
|
|
|
5
5
|
// Mount root for API calls: the shell injects `<base href="<mount>/">`, so use
|
|
6
6
|
// it when present. The Vite dev shell has none, so `document.baseURI` would be
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as ReactQuery from '@tanstack/react-query'
|
|
2
2
|
import type { InferResponseType } from 'hono/client'
|
|
3
3
|
|
|
4
|
-
import { client } from './client'
|
|
4
|
+
import { client } from './client.js'
|
|
5
|
+
import * as Response from './response.js'
|
|
5
6
|
|
|
6
7
|
/** A stored allowlist entry (domain or exact email) from the list endpoint. */
|
|
7
8
|
export type Entry = InferResponseType<(typeof client)['early-access']['$get'], 200>['data'][number]
|
|
@@ -27,7 +28,8 @@ export namespace add {
|
|
|
27
28
|
export type Input = { entry: string }
|
|
28
29
|
export async function fn(input: Input) {
|
|
29
30
|
const response = await client['early-access'].$post({ json: input })
|
|
30
|
-
if (!response.ok)
|
|
31
|
+
if (!response.ok)
|
|
32
|
+
throw new Error(await Response.errorMessage(response, { fallback: 'Failed to add entry.' }))
|
|
31
33
|
return response.json()
|
|
32
34
|
}
|
|
33
35
|
export function useMutation() {
|
|
@@ -44,7 +46,10 @@ export namespace remove {
|
|
|
44
46
|
export type Input = { entry: string }
|
|
45
47
|
export async function fn({ entry }: Input) {
|
|
46
48
|
const response = await client['early-access'].$delete({ json: { entry } })
|
|
47
|
-
if (!response.ok)
|
|
49
|
+
if (!response.ok)
|
|
50
|
+
throw new Error(
|
|
51
|
+
await Response.errorMessage(response, { fallback: 'Failed to remove entry.' }),
|
|
52
|
+
)
|
|
48
53
|
return response.json()
|
|
49
54
|
}
|
|
50
55
|
export function useMutation() {
|
|
@@ -55,9 +60,3 @@ export namespace remove {
|
|
|
55
60
|
})
|
|
56
61
|
}
|
|
57
62
|
}
|
|
58
|
-
|
|
59
|
-
/** Server error-envelope message, with a fallback for non-JSON bodies. */
|
|
60
|
-
async function errorMessage(response: { json(): Promise<unknown> }, fallback: string) {
|
|
61
|
-
const body = (await response.json().catch(() => null)) as { error?: { message?: string } } | null
|
|
62
|
-
return body?.error?.message ?? fallback
|
|
63
|
-
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import * as ReactQuery from '@tanstack/react-query'
|
|
2
|
+
import type { InferRequestType, InferResponseType } from 'hono/client'
|
|
3
|
+
import { tempo as mainnet, tempoTestnet as testnet } from 'viem/tempo/chains'
|
|
4
|
+
import * as z from 'zod/mini'
|
|
5
|
+
|
|
6
|
+
import { client } from './client.js'
|
|
7
|
+
|
|
8
|
+
type BaseListResponse = InferResponseType<(typeof client)['earn']['verified-vaults']['$get'], 200>
|
|
9
|
+
type DetailResponse = InferResponseType<
|
|
10
|
+
(typeof client)['earn']['verified-vaults'][':vaultId']['$get'],
|
|
11
|
+
200
|
|
12
|
+
>
|
|
13
|
+
|
|
14
|
+
/** One Earn vault resolved from current chain state. */
|
|
15
|
+
export type Vault = DetailResponse &
|
|
16
|
+
Required<Pick<DetailResponse, 'access' | 'capabilities' | 'zone'>>
|
|
17
|
+
|
|
18
|
+
type ListResponse = Omit<BaseListResponse, 'data'> & { data: readonly Vault[] }
|
|
19
|
+
|
|
20
|
+
type InsertRequest = InferRequestType<(typeof client)['earn']['verified-vaults']['$put']>['json']
|
|
21
|
+
const include = 'access,capabilities,zone' as const
|
|
22
|
+
|
|
23
|
+
/** A chain id managed by the Earn registry UI. */
|
|
24
|
+
export type ChainId = typeof mainnet.id | typeof testnet.id
|
|
25
|
+
|
|
26
|
+
/** Moderato is the first chain with a curated Earn deployment. */
|
|
27
|
+
export const defaultChain: ChainId = testnet.id
|
|
28
|
+
|
|
29
|
+
/** Tempo chains managed by the Earn registry UI. */
|
|
30
|
+
export const chains = [
|
|
31
|
+
{ id: mainnet.id, label: 'Mainnet' },
|
|
32
|
+
{ id: testnet.id, label: 'Testnet' },
|
|
33
|
+
] as const
|
|
34
|
+
|
|
35
|
+
/** Formats an Earn engine type for display. */
|
|
36
|
+
export function engineLabel(type: NonNullable<Vault['engine']['type']>) {
|
|
37
|
+
return type === 'erc4626' ? 'ERC-4626' : 'Veda'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Curated vault fields accepted by the verification endpoint. */
|
|
41
|
+
export type InsertInput = Omit<InsertRequest, 'chainId'> & {
|
|
42
|
+
/** Parent Tempo chain containing the vault. */
|
|
43
|
+
chainId: number
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Schemas shared by Earn vault routes. */
|
|
47
|
+
export namespace schema {
|
|
48
|
+
/** Search parameters selecting an Earn registry chain. */
|
|
49
|
+
export const Search = z.object({
|
|
50
|
+
chainId: z.catch(
|
|
51
|
+
z.optional(
|
|
52
|
+
z.pipe(z.coerce.number(), z.union([z.literal(mainnet.id), z.literal(testnet.id)])),
|
|
53
|
+
),
|
|
54
|
+
undefined,
|
|
55
|
+
),
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Resolve one Earn vault from current chain state. */
|
|
60
|
+
export namespace get {
|
|
61
|
+
/** Chain and vault identity used for resolution. */
|
|
62
|
+
export type Input = {
|
|
63
|
+
/** Parent Tempo chain containing the vault. */
|
|
64
|
+
chainId: number
|
|
65
|
+
/** Earn vault contract address. */
|
|
66
|
+
vaultId: InsertInput['vaultAddress']
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Stable query key for one resolved vault. */
|
|
70
|
+
export function key(input: Input) {
|
|
71
|
+
return ['earn-verified-vaults', 'detail', input.chainId, input.vaultId.toLowerCase()] as const
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Resolves one vault through the admin API. */
|
|
75
|
+
export async function fn(input: Input) {
|
|
76
|
+
const response = await client.earn['verified-vaults'][':vaultId'].$get({
|
|
77
|
+
param: { vaultId: input.vaultId },
|
|
78
|
+
query: { chainId: String(input.chainId), include },
|
|
79
|
+
})
|
|
80
|
+
if (!response.ok) throw new Error(await errorMessage(response, 'Vault not found.'))
|
|
81
|
+
return response.json() as Promise<Vault>
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** TanStack Query options for one resolved vault. */
|
|
85
|
+
export function options(input: Input, options: options.Options = {}) {
|
|
86
|
+
return ReactQuery.queryOptions({
|
|
87
|
+
enabled: options.enabled,
|
|
88
|
+
queryFn: () => fn(input),
|
|
89
|
+
queryKey: key(input),
|
|
90
|
+
staleTime: 30_000,
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export namespace options {
|
|
95
|
+
/** Controls whether the resolution query may run. */
|
|
96
|
+
export type Options = {
|
|
97
|
+
/** Whether the query has a valid vault address. */
|
|
98
|
+
enabled?: boolean | undefined
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** List verified Earn vaults for one chain. */
|
|
104
|
+
export namespace list {
|
|
105
|
+
/** Input selecting the chain registry. */
|
|
106
|
+
export type Input = { chainId: number }
|
|
107
|
+
|
|
108
|
+
/** Stable query key for one chain registry. */
|
|
109
|
+
export function key(options: Input) {
|
|
110
|
+
return ['earn-verified-vaults', options.chainId] as const
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** Fetches one page of verified Earn vaults. */
|
|
114
|
+
export async function fn(options: Input & { cursor?: string | undefined }) {
|
|
115
|
+
const response = await client.earn['verified-vaults'].$get({
|
|
116
|
+
query: {
|
|
117
|
+
chainId: String(options.chainId),
|
|
118
|
+
...(options.cursor ? { cursor: options.cursor } : {}),
|
|
119
|
+
include,
|
|
120
|
+
limit: '25',
|
|
121
|
+
},
|
|
122
|
+
})
|
|
123
|
+
if (!response.ok) throw new Error(await errorMessage(response, 'Failed to load Earn vaults.'))
|
|
124
|
+
return response.json() as Promise<ListResponse>
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Infinite-query options for one chain registry. */
|
|
128
|
+
export function options(options: Input) {
|
|
129
|
+
return ReactQuery.infiniteQueryOptions({
|
|
130
|
+
getNextPageParam: (page: ListResponse) => page.nextCursor,
|
|
131
|
+
initialPageParam: null as string | null,
|
|
132
|
+
queryFn: ({ pageParam }) => fn({ ...options, cursor: pageParam ?? undefined }),
|
|
133
|
+
queryKey: key(options),
|
|
134
|
+
staleTime: 30_000,
|
|
135
|
+
})
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Verify and save one Earn vault. */
|
|
140
|
+
export namespace insert {
|
|
141
|
+
/** Saves curated fields through the admin API. */
|
|
142
|
+
export async function fn(input: InsertInput) {
|
|
143
|
+
const response = await client.earn['verified-vaults'].$put({ json: input })
|
|
144
|
+
if (!response.ok) throw new Error(await errorMessage(response, 'Failed to verify Earn vault.'))
|
|
145
|
+
return response.json() as Promise<Vault>
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/** Mutation that refreshes the affected vault and registry. */
|
|
149
|
+
export function useMutation() {
|
|
150
|
+
const queryClient = ReactQuery.useQueryClient()
|
|
151
|
+
return ReactQuery.useMutation({
|
|
152
|
+
mutationFn: fn,
|
|
153
|
+
onSuccess: (vault, input) => {
|
|
154
|
+
queryClient.setQueryData(
|
|
155
|
+
get.key({ chainId: input.chainId, vaultId: input.vaultAddress }),
|
|
156
|
+
vault,
|
|
157
|
+
)
|
|
158
|
+
return queryClient.invalidateQueries({ queryKey: list.key({ chainId: input.chainId }) })
|
|
159
|
+
},
|
|
160
|
+
})
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Remove one vault from the verified registry. */
|
|
165
|
+
export namespace remove {
|
|
166
|
+
/** Identity of the verified vault to remove. */
|
|
167
|
+
export type Input = {
|
|
168
|
+
/** Parent Tempo chain containing the vault. */
|
|
169
|
+
chainId: number
|
|
170
|
+
/** Earn vault contract address. */
|
|
171
|
+
vaultId: InsertInput['vaultAddress']
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** Removes a vault through the admin API. */
|
|
175
|
+
export async function fn(input: Input) {
|
|
176
|
+
const response = await client.earn['verified-vaults'][':vaultId'].$delete({
|
|
177
|
+
param: { vaultId: input.vaultId },
|
|
178
|
+
query: { chainId: String(input.chainId) },
|
|
179
|
+
})
|
|
180
|
+
if (!response.ok) throw new Error(await errorMessage(response, 'Failed to remove Earn vault.'))
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/** Mutation that refreshes the affected chain registry. */
|
|
184
|
+
export function useMutation() {
|
|
185
|
+
const queryClient = ReactQuery.useQueryClient()
|
|
186
|
+
return ReactQuery.useMutation({
|
|
187
|
+
mutationFn: fn,
|
|
188
|
+
onSuccess: (_data, input) =>
|
|
189
|
+
Promise.all([
|
|
190
|
+
queryClient.invalidateQueries({ queryKey: list.key({ chainId: input.chainId }) }),
|
|
191
|
+
queryClient.invalidateQueries({
|
|
192
|
+
queryKey: get.key({ chainId: input.chainId, vaultId: input.vaultId }),
|
|
193
|
+
}),
|
|
194
|
+
]),
|
|
195
|
+
})
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
async function errorMessage(response: { json(): Promise<unknown> }, fallback: string) {
|
|
200
|
+
type Body = { error?: { details?: readonly { message?: string }[]; message?: string } }
|
|
201
|
+
const body = (await response.json().catch(() => null)) as Body | null
|
|
202
|
+
const message = body?.error?.message ?? fallback
|
|
203
|
+
const details = body?.error?.details?.flatMap((detail) =>
|
|
204
|
+
detail.message ? [detail.message] : [],
|
|
205
|
+
)
|
|
206
|
+
return details?.length ? `${message}\n${details.join('\n')}` : message
|
|
207
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Formats a localized medium date. */
|
|
2
|
+
export function date(value: string): string {
|
|
3
|
+
return new Date(value).toLocaleDateString(undefined, {
|
|
4
|
+
day: 'numeric',
|
|
5
|
+
month: 'short',
|
|
6
|
+
year: 'numeric',
|
|
7
|
+
})
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Formats a medium English date. */
|
|
11
|
+
export function mediumDate(value: string): string {
|
|
12
|
+
return new Intl.DateTimeFormat('en', { dateStyle: 'medium' }).format(new Date(value))
|
|
13
|
+
}
|
|
@@ -4,10 +4,10 @@ import { createElement } from 'react'
|
|
|
4
4
|
import { renderToStaticMarkup } from 'react-dom/server'
|
|
5
5
|
import { describe, expect, it, vi } from 'vite-plus/test'
|
|
6
6
|
|
|
7
|
-
import { routeTree } from '../routeTree.gen'
|
|
8
|
-
import { BillingSourcesCard, Route as DetailRoute } from '../routes/organizations_.$orgId'
|
|
9
|
-
import { Route as ListRoute } from '../routes/organizations'
|
|
10
|
-
import * as Organizations from './organizations'
|
|
7
|
+
import { routeTree } from '../routeTree.gen.js'
|
|
8
|
+
import { BillingSourcesCard, Route as DetailRoute } from '../routes/organizations_.$orgId.js'
|
|
9
|
+
import { Route as ListRoute } from '../routes/organizations.js'
|
|
10
|
+
import * as Organizations from './organizations.js'
|
|
11
11
|
|
|
12
12
|
describe('schema.Search', () => {
|
|
13
13
|
it('normalizes valid lookup state', () => {
|
|
@@ -51,6 +51,16 @@ describe('searchParameters', () => {
|
|
|
51
51
|
})
|
|
52
52
|
})
|
|
53
53
|
|
|
54
|
+
describe('lookupQuery', () => {
|
|
55
|
+
it('waits for the API search minimum', () => {
|
|
56
|
+
expect(Organizations.lookupQuery(' ac ')).toBeUndefined()
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('trims a searchable value', () => {
|
|
60
|
+
expect(Organizations.lookupQuery(' acme ')).toBe('acme')
|
|
61
|
+
})
|
|
62
|
+
})
|
|
63
|
+
|
|
54
64
|
describe('withEnabledSources', () => {
|
|
55
65
|
it('replaces only organization-wide billing availability', () => {
|
|
56
66
|
const detail = {
|
|
@@ -2,7 +2,7 @@ import * as ReactQuery from '@tanstack/react-query'
|
|
|
2
2
|
import type { InferResponseType } from 'hono/client'
|
|
3
3
|
import * as z from 'zod/mini'
|
|
4
4
|
|
|
5
|
-
import { client } from './client'
|
|
5
|
+
import { client } from './client.js'
|
|
6
6
|
|
|
7
7
|
type ListResponse = InferResponseType<(typeof client)['organizations']['$get'], 200>
|
|
8
8
|
type DetailResponse = InferResponseType<(typeof client)['organizations'][':orgId']['$get'], 200>
|
|
@@ -91,6 +91,12 @@ export declare namespace searchParameters {
|
|
|
91
91
|
type Options = { query?: string | undefined }
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
+
/** Normalizes autocomplete input once it meets the organization search minimum. */
|
|
95
|
+
export function lookupQuery(value: string) {
|
|
96
|
+
const query = value.trim()
|
|
97
|
+
return query.length >= 3 ? query : undefined
|
|
98
|
+
}
|
|
99
|
+
|
|
94
100
|
/** List organizations, optionally filtered by id, name, or member email. */
|
|
95
101
|
export namespace list {
|
|
96
102
|
/** Organization lookup filters. */
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Extracts a standard API error-envelope message with a fallback. */
|
|
2
|
+
export async function errorMessage(
|
|
3
|
+
response: errorMessage.Response,
|
|
4
|
+
options: errorMessage.Options,
|
|
5
|
+
): Promise<string> {
|
|
6
|
+
const body = (await response.json().catch(() => null)) as { error?: { message?: string } } | null
|
|
7
|
+
return body?.error?.message ?? options.fallback
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/** Types for {@link errorMessage}. */
|
|
11
|
+
export declare namespace errorMessage {
|
|
12
|
+
/** Options for extracting an API error message. */
|
|
13
|
+
type Options = {
|
|
14
|
+
/** Message returned when the response has no standard error message. */
|
|
15
|
+
fallback: string
|
|
16
|
+
}
|
|
17
|
+
/** Response shape consumed by {@link errorMessage}. */
|
|
18
|
+
type Response = {
|
|
19
|
+
/** Parses the response body. */
|
|
20
|
+
json(): Promise<unknown>
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vite-plus/test'
|
|
1
|
+
import { describe, expect, expectTypeOf, it } from 'vite-plus/test'
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import * as Scopes from './scopes.js'
|
|
4
4
|
|
|
5
5
|
describe('fromZoneChainId', () => {
|
|
6
|
-
it('builds
|
|
7
|
-
|
|
6
|
+
it('builds canonical Zone scopes', () => {
|
|
7
|
+
const read = Scopes.fromZoneChainId(' 000421700001 ')
|
|
8
|
+
const write = Scopes.fromZoneChainId(' 000421700001 ', 'write')
|
|
9
|
+
|
|
10
|
+
expect(read).toBe('zone:421700001:read')
|
|
11
|
+
expect(write).toBe('zone:421700001:write')
|
|
12
|
+
expectTypeOf(read).toEqualTypeOf<`zone:${string}:read` | undefined>()
|
|
13
|
+
expectTypeOf(write).toEqualTypeOf<`zone:${string}:write` | undefined>()
|
|
8
14
|
})
|
|
9
15
|
|
|
10
16
|
it('rejects non-positive and malformed chain ids', () => {
|
|
11
|
-
expect(['', '0', '-1', '1.5', 'mainnet'].map(fromZoneChainId)).toEqual(
|
|
12
|
-
undefined,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
expect(['', '0', '-1', '1.5', 'mainnet'].map((value) => Scopes.fromZoneChainId(value))).toEqual(
|
|
18
|
+
[undefined, undefined, undefined, undefined, undefined],
|
|
19
|
+
)
|
|
20
|
+
})
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
describe('get', () => {
|
|
24
|
+
it('versions persisted scope catalogs', () => {
|
|
25
|
+
expect(Scopes.get.key).toEqual(['scopes', 'v2'])
|
|
18
26
|
})
|
|
19
27
|
})
|