tapimo 0.5.3 → 0.7.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/dist/App.d.ts +15830 -7220
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +9 -1
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +4 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +5 -0
- package/dist/Scope.js.map +1 -1
- package/dist/admin/App.d.ts +1011 -412
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +4 -0
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +2 -1
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/early-access.d.ts +148 -0
- package/dist/admin/apps/early-access.d.ts.map +1 -0
- package/dist/admin/apps/early-access.js +133 -0
- package/dist/admin/apps/early-access.js.map +1 -0
- package/dist/admin/apps/organizations.d.ts +124 -1
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +97 -6
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +526 -1
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
- package/dist/admin/apps/verified-tokens.js +214 -1
- package/dist/admin/apps/verified-tokens.js.map +1 -1
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +95 -75
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +20 -0
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +18 -0
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +36 -7
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/data/App.d.ts +6260 -4924
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +11 -6
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts +34 -1
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
- package/dist/apps/data/FundingQuoteProviders.js +194 -16
- package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
- package/dist/apps/data/FxOracle.d.ts +71 -0
- package/dist/apps/data/FxOracle.d.ts.map +1 -0
- package/dist/apps/data/FxOracle.js +97 -0
- package/dist/apps/data/FxOracle.js.map +1 -0
- package/dist/apps/data/index.d.ts +1 -0
- package/dist/apps/data/index.d.ts.map +1 -1
- package/dist/apps/data/index.js +1 -0
- package/dist/apps/data/index.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +3599 -1382
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +250 -88
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +872 -251
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/addresses.js +11 -9
- package/dist/apps/data/routes/addresses.js.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +77 -26
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +88 -45
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +39 -39
- package/dist/apps/data/routes/coingecko.d.ts +54 -54
- package/dist/apps/data/routes/exchanges.d.ts +856 -105
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +518 -76
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +81 -67
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +76 -91
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +80 -36
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +65 -31
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +392 -315
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +152 -77
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +167 -174
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +15 -13
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +277 -536
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +96 -77
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +157 -81
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +272 -130
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +307 -0
- package/dist/apps/data/routes/valuation.d.ts.map +1 -0
- package/dist/apps/data/routes/valuation.js +292 -0
- package/dist/apps/data/routes/valuation.js.map +1 -0
- package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +7 -5
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +103 -123
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +124 -25
- package/dist/apps/data/routes/webhooks.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 +8554 -1692
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/App.js +12 -1
- package/dist/apps/management/App.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +7 -0
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +17 -3
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +157 -162
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +31 -23
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +232 -0
- package/dist/apps/management/routes/faucet.d.ts.map +1 -0
- package/dist/apps/management/routes/faucet.js +154 -0
- package/dist/apps/management/routes/faucet.js.map +1 -0
- package/dist/apps/management/routes/invitations.d.ts +60 -60
- package/dist/apps/management/routes/invite-links.d.ts +49 -20
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +26 -1
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +6 -6
- package/dist/apps/management/routes/orgs.d.ts +42 -42
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +5 -0
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +44 -44
- package/dist/apps/management/routes/usage.d.ts +3 -0
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +4 -0
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +697 -0
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -0
- package/dist/apps/management/routes/verified-token-requests.js +271 -0
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -0
- package/dist/apps/management/routes/webhooks.d.ts +6977 -0
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -0
- package/dist/apps/management/routes/webhooks.js +573 -0
- package/dist/apps/management/routes/webhooks.js.map +1 -0
- package/dist/apps/mpp/App.d.ts +363 -0
- package/dist/apps/mpp/App.d.ts.map +1 -0
- package/dist/apps/mpp/App.js +72 -0
- package/dist/apps/mpp/App.js.map +1 -0
- package/dist/apps/mpp/Mpp.d.ts +178 -0
- package/dist/apps/mpp/Mpp.d.ts.map +1 -0
- package/dist/apps/mpp/Mpp.js +183 -0
- package/dist/apps/mpp/Mpp.js.map +1 -0
- package/dist/apps/mpp/index.d.ts +3 -0
- package/dist/apps/mpp/index.d.ts.map +1 -0
- package/dist/apps/mpp/index.js +3 -0
- package/dist/apps/mpp/index.js.map +1 -0
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +56 -9
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/db/Db.d.ts +6 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +110 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +53 -0
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +56 -0
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earlyAccess.d.ts +50 -0
- package/dist/db/tables/earlyAccess.d.ts.map +1 -0
- package/dist/db/tables/earlyAccess.js +63 -0
- package/dist/db/tables/earlyAccess.js.map +1 -0
- package/dist/db/tables/enabledBillingSources.d.ts +73 -0
- package/dist/db/tables/enabledBillingSources.d.ts.map +1 -0
- package/dist/db/tables/enabledBillingSources.js +69 -0
- package/dist/db/tables/enabledBillingSources.js.map +1 -0
- package/dist/db/tables/invitations.d.ts.map +1 -1
- package/dist/db/tables/invitations.js +3 -0
- package/dist/db/tables/invitations.js.map +1 -1
- package/dist/db/tables/inviteLinks.d.ts +10 -2
- package/dist/db/tables/inviteLinks.d.ts.map +1 -1
- package/dist/db/tables/inviteLinks.js +10 -1
- package/dist/db/tables/inviteLinks.js.map +1 -1
- package/dist/db/tables/organizations.d.ts +5 -2
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +13 -2
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +2 -0
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +2 -0
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/verifiedTokenRequests.d.ts +94 -0
- package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -0
- package/dist/db/tables/verifiedTokenRequests.js +120 -0
- package/dist/db/tables/verifiedTokenRequests.js.map +1 -0
- package/dist/db/tables/webhookSubscriptions.d.ts +14 -0
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +16 -0
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts +1 -16
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +17 -6
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/handlers/relay.d.ts.map +1 -1
- package/dist/handlers/relay.js +37 -5
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +11 -2
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +14 -47
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/FundingQuotes.d.ts +147 -47
- package/dist/internal/FundingQuotes.d.ts.map +1 -1
- package/dist/internal/FundingQuotes.js +119 -33
- package/dist/internal/FundingQuotes.js.map +1 -1
- package/dist/internal/Log.d.ts +37 -5
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +52 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +24 -0
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +2 -2
- 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/Response.d.ts +2 -2
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +12 -4
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +14 -5
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +23 -5
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Value.d.ts +18 -0
- package/dist/internal/Value.d.ts.map +1 -1
- package/dist/internal/Value.js +11 -1
- package/dist/internal/Value.js.map +1 -1
- package/dist/internal/VerifiedTokens.d.ts.map +1 -1
- package/dist/internal/VerifiedTokens.js +10 -1
- package/dist/internal/VerifiedTokens.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +24 -3
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +34 -8
- package/dist/internal/Webhooks.js.map +1 -1
- package/package.json +7 -2
- package/src/App.test.ts +9 -4
- package/src/App.ts +23 -3
- package/src/Client.test-d.ts +733 -20
- package/src/Scope.ts +5 -0
- package/src/admin/App.test.ts +4 -0
- package/src/admin/App.ts +4 -0
- package/src/admin/apps/early-access.test.ts +125 -0
- package/src/admin/apps/early-access.ts +176 -0
- package/src/admin/apps/organizations.test.ts +86 -2
- package/src/admin/apps/organizations.ts +155 -31
- package/src/admin/apps/scopes.test.ts +5 -0
- package/src/admin/apps/verified-tokens.test.ts +201 -0
- package/src/admin/apps/verified-tokens.ts +532 -286
- package/src/admin/ui/plugin.ts +2 -1
- package/src/admin/ui/src/lib/early-access.ts +63 -0
- package/src/admin/ui/src/lib/organizations.test.ts +81 -1
- package/src/admin/ui/src/lib/organizations.ts +92 -0
- package/src/admin/ui/src/lib/verified-tokens.ts +79 -0
- package/src/admin/ui/src/routeTree.gen.ts +33 -2
- package/src/admin/ui/src/routes/__root.tsx +2 -1
- package/src/admin/ui/src/routes/api-keys.tsx +1 -1
- package/src/admin/ui/src/routes/early-access.tsx +162 -0
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +103 -0
- package/src/admin/ui/src/routes/verified-tokens.tsx +230 -19
- package/src/admin/ui.generated.ts +95 -94
- package/src/analytics/Analytics.test.ts +83 -0
- package/src/analytics/Analytics.ts +20 -0
- package/src/analytics/tables/requestEvents.ts +60 -7
- package/src/apps/composition.test.ts +11 -2
- package/src/apps/data/App.test.ts +1 -1
- package/src/apps/data/App.ts +22 -14
- package/src/apps/data/FundingQuoteProviders.test.ts +297 -4
- package/src/apps/data/FundingQuoteProviders.ts +255 -29
- package/src/apps/data/FxOracle.test.ts +118 -0
- package/src/apps/data/FxOracle.ts +153 -0
- package/src/apps/data/index.ts +1 -0
- package/src/apps/data/routes/activities.test.ts +177 -3
- package/src/apps/data/routes/activities.ts +441 -132
- package/src/apps/data/routes/addresses.ts +19 -9
- package/src/apps/data/routes/balances.test.ts +148 -11
- package/src/apps/data/routes/balances.ts +140 -51
- package/src/apps/data/routes/exchanges.test.ts +544 -9
- package/src/apps/data/routes/exchanges.ts +690 -103
- package/src/apps/data/routes/fee-amm.test.ts +47 -23
- package/src/apps/data/routes/fee-amm.ts +98 -119
- package/src/apps/data/routes/funding.test.ts +113 -8
- package/src/apps/data/routes/funding.ts +77 -51
- package/src/apps/data/routes/receipts.test.ts +129 -23
- package/src/apps/data/routes/receipts.ts +205 -100
- package/src/apps/data/routes/tokens.test.ts +43 -0
- package/src/apps/data/routes/tokens.ts +28 -13
- package/src/apps/data/routes/transactions.test.ts +72 -19
- package/src/apps/data/routes/transactions.ts +162 -92
- package/src/apps/data/routes/transfers.test.ts +341 -31
- package/src/apps/data/routes/transfers.ts +358 -158
- package/src/apps/data/routes/valuation.test.ts +437 -0
- package/src/apps/data/routes/valuation.ts +423 -0
- package/src/apps/data/routes/verified-tokens.ts +14 -2
- package/src/apps/data/routes/webhooks.test.ts +56 -8
- package/src/apps/data/routes/webhooks.ts +144 -27
- package/src/apps/index.ts +2 -1
- package/src/apps/management/App.ts +13 -0
- package/src/apps/management/routes/api-keys.test.ts +14 -0
- package/src/apps/management/routes/api-keys.ts +27 -3
- package/src/apps/management/routes/billing.test.ts +152 -20
- package/src/apps/management/routes/billing.ts +34 -18
- package/src/apps/management/routes/faucet.test.ts +87 -0
- package/src/apps/management/routes/faucet.ts +201 -0
- package/src/apps/management/routes/invite-links.test.ts +117 -0
- package/src/apps/management/routes/invite-links.ts +43 -1
- package/src/apps/management/routes/me.test.ts +9 -99
- package/src/apps/management/routes/orgs.test.ts +45 -2
- package/src/apps/management/routes/orgs.ts +6 -0
- package/src/apps/management/routes/scopes.test.ts +1 -0
- package/src/apps/management/routes/usage.test.ts +6 -0
- package/src/apps/management/routes/usage.ts +7 -0
- package/src/apps/management/routes/verified-token-requests.test.ts +377 -0
- package/src/apps/management/routes/verified-token-requests.ts +397 -0
- package/src/apps/management/routes/webhooks.test.ts +426 -0
- package/src/apps/management/routes/webhooks.ts +672 -0
- package/src/apps/mpp/App.ts +86 -0
- package/src/apps/mpp/Mpp.test.ts +193 -0
- package/src/apps/mpp/Mpp.ts +353 -0
- package/src/apps/mpp/index.ts +2 -0
- package/src/apps/mpp/internal/Adapter.ts +11 -0
- package/src/apps/mpp/internal/Error.ts +9 -0
- package/src/apps/mpp/internal/Idempotency.ts +7 -0
- package/src/apps/mpp/internal/Screening.ts +10 -0
- package/src/apps/relay/App.test.ts +88 -6
- package/src/apps/relay/App.ts +61 -9
- package/src/db/Db.test.ts +19 -0
- package/src/db/Db.ts +125 -0
- package/src/db/Schema.ts +68 -0
- package/src/db/tables/earlyAccess.ts +86 -0
- package/src/db/tables/enabledBillingSources.test.ts +303 -0
- package/src/db/tables/enabledBillingSources.ts +118 -0
- package/src/db/tables/invitations.ts +3 -0
- package/src/db/tables/inviteLinks.ts +22 -3
- package/src/db/tables/organizations.test.ts +103 -0
- package/src/db/tables/organizations.ts +18 -2
- package/src/db/tables/sponsoredTransactions.ts +4 -0
- package/src/db/tables/verifiedTokenRequests.test.ts +200 -0
- package/src/db/tables/verifiedTokenRequests.ts +182 -0
- package/src/db/tables/webhookSubscriptions.ts +31 -0
- package/src/handlers/internal/utils.ts +22 -6
- package/src/handlers/relay.errors.test.ts +153 -0
- package/src/handlers/relay.ts +42 -7
- package/src/internal/Auth.test.ts +3 -3
- package/src/internal/Auth.ts +15 -47
- package/src/internal/FundingQuotes.test.ts +161 -6
- package/src/internal/FundingQuotes.ts +141 -39
- package/src/internal/Log.test-d.ts +21 -0
- package/src/internal/Log.test.ts +141 -0
- package/src/internal/Log.ts +93 -6
- package/src/internal/MetricSink.test.ts +215 -0
- package/src/internal/MetricSink.ts +24 -0
- package/src/internal/OpenApi.ts +3 -0
- package/src/internal/Response.test.ts +28 -0
- package/src/internal/Response.ts +12 -4
- package/src/internal/Schema.ts +50 -5
- package/src/internal/Value.test.ts +20 -0
- package/src/internal/Value.ts +24 -1
- package/src/internal/VerifiedTokens.ts +9 -1
- package/src/internal/Webhooks.test.ts +140 -0
- package/src/internal/Webhooks.ts +53 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/addresses.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/addresses.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAG3C,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,SAAS,CAAC,OAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAKxD;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,qDAAqD;IACrD,KAAK,OAAO,GAAG;QACb,mDAAmD;QACnD,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAA;KACxC,CAAA;CACF"}
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import * as Activities from './activities.js';
|
|
3
3
|
import * as Balances from './balances.js';
|
|
4
|
+
import * as Valuation from './valuation.js';
|
|
4
5
|
/**
|
|
5
6
|
* Composes the `/v1/addresses/:address/*` route surface from the
|
|
6
7
|
* address-scoped sub-routers exported by each resource module. The handlers,
|
|
7
8
|
* schemas, and paths live with the resource they describe (activities,
|
|
8
|
-
* balances); this composer only aggregates them so docs grouping
|
|
9
|
-
* while URLs stay nested under the parent resource.
|
|
9
|
+
* balances, valuation); this composer only aggregates them so docs grouping
|
|
10
|
+
* stays by tag while URLs stay nested under the parent resource.
|
|
10
11
|
*
|
|
11
12
|
* Only subject-relative resources live here — rows that cannot be interpreted
|
|
12
|
-
* without the path address (activity classification, held-token balances
|
|
13
|
-
* Plain filtered views of canonical collections are
|
|
14
|
-
* instead (`GET /transactions?address=…`,
|
|
15
|
-
* `GET /transactions/receipts?address=…`).
|
|
13
|
+
* without the path address (activity classification, held-token balances,
|
|
14
|
+
* holdings valuation). Plain filtered views of canonical collections are
|
|
15
|
+
* reached via search params instead (`GET /transactions?address=…`,
|
|
16
|
+
* `GET /transfers?address=…`, `GET /transactions/receipts?address=…`).
|
|
16
17
|
*/
|
|
17
|
-
export function addresses() {
|
|
18
|
+
export function addresses(options = {}) {
|
|
18
19
|
return new Hono()
|
|
19
|
-
.route('/', Activities.addresses())
|
|
20
|
-
.route('/', Balances.addresses())
|
|
20
|
+
.route('/', Activities.addresses({ fx: options.fx }))
|
|
21
|
+
.route('/', Balances.addresses({ fx: options.fx }))
|
|
22
|
+
.route('/', Valuation.addresses({ fx: options.fx }));
|
|
21
23
|
}
|
|
22
24
|
//# sourceMappingURL=addresses.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../../src/apps/data/routes/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../../src/apps/data/routes/addresses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,OAAO,GAAsB,EAAE;IACvD,OAAO,IAAI,IAAI,EAAmB;SAC/B,KAAK,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;SACpD,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;SAClD,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as z from 'zod/mini';
|
|
2
2
|
import type * as App from '../../../App.js';
|
|
3
3
|
import * as Response from '../../../internal/Response.js';
|
|
4
|
+
import * as Valuation from './valuation.js';
|
|
4
5
|
/** Zod schemas owned by the balance handlers. */
|
|
5
6
|
export declare namespace schema {
|
|
6
7
|
/** Schemas for the getAddressBalances operation. */
|
|
@@ -17,6 +18,7 @@ export declare namespace schema {
|
|
|
17
18
|
}>, z.ZodMiniTransform<4217 | 42431, "mainnet" | "testnet">>, z.ZodMiniNumber<unknown>]>, z.ZodMiniNumber<number>>>;
|
|
18
19
|
currency: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
19
20
|
cursor: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
21
|
+
denomination: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string, string>>>;
|
|
20
22
|
feeEligible: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniEnum<{
|
|
21
23
|
false: "false";
|
|
22
24
|
true: "true";
|
|
@@ -31,17 +33,14 @@ export declare namespace schema {
|
|
|
31
33
|
true: "true";
|
|
32
34
|
}>, z.ZodMiniTransform<boolean, "false" | "true">>>;
|
|
33
35
|
}, z.core.$strict>;
|
|
34
|
-
/**
|
|
35
|
-
* A TIP-20 token balance held by an address: the held `amount` in the
|
|
36
|
-
* token's base unit, its `formatted` value, and the trimmed `token`
|
|
37
|
-
* reference inlined per row. Rows whose token metadata cannot be resolved
|
|
38
|
-
* are omitted.
|
|
39
|
-
*/
|
|
36
|
+
/** A TIP-20 balance with raw and formatted amounts. Unresolvable token metadata omits the row. */
|
|
40
37
|
const Balance: z.ZodMiniObject<{
|
|
41
38
|
amount: z.ZodMiniString<string>;
|
|
39
|
+
currency: z.ZodMiniString<string>;
|
|
40
|
+
decimals: z.ZodMiniNumber<number>;
|
|
41
|
+
feeEligible: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
|
|
42
42
|
formatted: z.ZodMiniString<string>;
|
|
43
43
|
id: z.ZodMiniString<string>;
|
|
44
|
-
feeEligible: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
|
|
45
44
|
token: z.ZodMiniObject<{
|
|
46
45
|
address: z.ZodMiniPipe<z.ZodMiniTemplateLiteral<`0x${string}`>, z.ZodMiniTransform<`0x${string}`, `0x${string}`>>;
|
|
47
46
|
currency: z.ZodMiniString<string>;
|
|
@@ -52,14 +51,30 @@ export declare namespace schema {
|
|
|
52
51
|
symbol: z.ZodMiniString<string>;
|
|
53
52
|
verified: z.ZodMiniBoolean<boolean>;
|
|
54
53
|
}, z.core.$strip>;
|
|
54
|
+
valuation: z.ZodMiniNullable<z.ZodMiniObject<{
|
|
55
|
+
amount: z.ZodMiniString<string>;
|
|
56
|
+
currency: z.ZodMiniString<string>;
|
|
57
|
+
}, z.core.$strip>>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
/** Page-level resources: opt-in counts plus valuation rate provenance. */
|
|
60
|
+
const Meta: z.ZodMiniObject<{
|
|
61
|
+
pricing: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
62
|
+
asOf: z.ZodMiniISODateTime;
|
|
63
|
+
basis: z.ZodMiniLiteral<"nominal">;
|
|
64
|
+
source: z.ZodMiniString<string>;
|
|
65
|
+
}, z.core.$strip>>;
|
|
66
|
+
totalCount: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
67
|
+
totalCountCapped: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
|
|
55
68
|
}, z.core.$strip>;
|
|
56
69
|
/** Page of TIP-20 token balances held by an address, ordered by amount descending. */
|
|
57
70
|
const Response: z.ZodMiniObject<{
|
|
58
71
|
data: z.ZodMiniArray<z.ZodMiniObject<{
|
|
59
72
|
amount: z.ZodMiniString<string>;
|
|
73
|
+
currency: z.ZodMiniString<string>;
|
|
74
|
+
decimals: z.ZodMiniNumber<number>;
|
|
75
|
+
feeEligible: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
|
|
60
76
|
formatted: z.ZodMiniString<string>;
|
|
61
77
|
id: z.ZodMiniString<string>;
|
|
62
|
-
feeEligible: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
|
|
63
78
|
token: z.ZodMiniObject<{
|
|
64
79
|
address: z.ZodMiniPipe<z.ZodMiniTemplateLiteral<`0x${string}`>, z.ZodMiniTransform<`0x${string}`, `0x${string}`>>;
|
|
65
80
|
currency: z.ZodMiniString<string>;
|
|
@@ -70,10 +85,19 @@ export declare namespace schema {
|
|
|
70
85
|
symbol: z.ZodMiniString<string>;
|
|
71
86
|
verified: z.ZodMiniBoolean<boolean>;
|
|
72
87
|
}, z.core.$strip>;
|
|
88
|
+
valuation: z.ZodMiniNullable<z.ZodMiniObject<{
|
|
89
|
+
amount: z.ZodMiniString<string>;
|
|
90
|
+
currency: z.ZodMiniString<string>;
|
|
91
|
+
}, z.core.$strip>>;
|
|
73
92
|
}, z.core.$strip>>;
|
|
74
93
|
meta: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
75
|
-
|
|
76
|
-
|
|
94
|
+
pricing: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
95
|
+
asOf: z.ZodMiniISODateTime;
|
|
96
|
+
basis: z.ZodMiniLiteral<"nominal">;
|
|
97
|
+
source: z.ZodMiniString<string>;
|
|
98
|
+
}, z.core.$strip>>;
|
|
99
|
+
totalCount: z.ZodMiniOptional<z.ZodMiniNumber<number>>;
|
|
100
|
+
totalCountCapped: z.ZodMiniOptional<z.ZodMiniBoolean<boolean>>;
|
|
77
101
|
}, z.core.$strip>>;
|
|
78
102
|
nextCursor: z.ZodMiniNullable<z.ZodMiniString<string>>;
|
|
79
103
|
}, z.core.$strip>;
|
|
@@ -83,7 +107,7 @@ export declare namespace schema {
|
|
|
83
107
|
* Creates address-scoped balance handlers, mounted under the `/addresses`
|
|
84
108
|
* composer. Exposes `GET /:address/balances`, the held-balance page.
|
|
85
109
|
*/
|
|
86
|
-
export declare function addresses(): import("hono/hono-base").HonoBase<App.Environment, {
|
|
110
|
+
export declare function addresses(options?: addresses.Options): import("hono/hono-base").HonoBase<App.Environment, {
|
|
87
111
|
"/v1/addresses/:address/balances": {
|
|
88
112
|
$get: {
|
|
89
113
|
output: null;
|
|
@@ -98,6 +122,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
98
122
|
chainId?: string | string[];
|
|
99
123
|
currency?: string | string[];
|
|
100
124
|
cursor?: string | string[];
|
|
125
|
+
denomination?: string | string[];
|
|
101
126
|
feeEligible?: string | string[];
|
|
102
127
|
include?: string | string[];
|
|
103
128
|
limit?: string | string[];
|
|
@@ -108,14 +133,14 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
108
133
|
} | {
|
|
109
134
|
output: {
|
|
110
135
|
error: {
|
|
111
|
-
code: "
|
|
136
|
+
code: "api_key_malformed";
|
|
112
137
|
details?: readonly Response.error.Detail[] | undefined;
|
|
113
138
|
message: string;
|
|
114
139
|
};
|
|
115
140
|
requestId: string;
|
|
116
141
|
};
|
|
117
142
|
outputFormat: "json";
|
|
118
|
-
status:
|
|
143
|
+
status: 400;
|
|
119
144
|
input: {
|
|
120
145
|
param: {
|
|
121
146
|
address: `0x${string}`;
|
|
@@ -125,6 +150,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
125
150
|
chainId?: string | string[];
|
|
126
151
|
currency?: string | string[];
|
|
127
152
|
cursor?: string | string[];
|
|
153
|
+
denomination?: string | string[];
|
|
128
154
|
feeEligible?: string | string[];
|
|
129
155
|
include?: string | string[];
|
|
130
156
|
limit?: string | string[];
|
|
@@ -135,14 +161,14 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
135
161
|
} | {
|
|
136
162
|
output: {
|
|
137
163
|
error: {
|
|
138
|
-
code: "
|
|
164
|
+
code: "api_key_invalid" | "api_key_missing";
|
|
139
165
|
details?: readonly Response.error.Detail[] | undefined;
|
|
140
166
|
message: string;
|
|
141
167
|
};
|
|
142
168
|
requestId: string;
|
|
143
169
|
};
|
|
144
170
|
outputFormat: "json";
|
|
145
|
-
status:
|
|
171
|
+
status: 401;
|
|
146
172
|
input: {
|
|
147
173
|
param: {
|
|
148
174
|
address: `0x${string}`;
|
|
@@ -152,6 +178,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
152
178
|
chainId?: string | string[];
|
|
153
179
|
currency?: string | string[];
|
|
154
180
|
cursor?: string | string[];
|
|
181
|
+
denomination?: string | string[];
|
|
155
182
|
feeEligible?: string | string[];
|
|
156
183
|
include?: string | string[];
|
|
157
184
|
limit?: string | string[];
|
|
@@ -162,14 +189,14 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
162
189
|
} | {
|
|
163
190
|
output: {
|
|
164
191
|
error: {
|
|
165
|
-
code: "
|
|
192
|
+
code: "api_key_forbidden";
|
|
166
193
|
details?: readonly Response.error.Detail[] | undefined;
|
|
167
194
|
message: string;
|
|
168
195
|
};
|
|
169
196
|
requestId: string;
|
|
170
197
|
};
|
|
171
198
|
outputFormat: "json";
|
|
172
|
-
status:
|
|
199
|
+
status: 403;
|
|
173
200
|
input: {
|
|
174
201
|
param: {
|
|
175
202
|
address: `0x${string}`;
|
|
@@ -179,6 +206,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
179
206
|
chainId?: string | string[];
|
|
180
207
|
currency?: string | string[];
|
|
181
208
|
cursor?: string | string[];
|
|
209
|
+
denomination?: string | string[];
|
|
182
210
|
feeEligible?: string | string[];
|
|
183
211
|
include?: string | string[];
|
|
184
212
|
limit?: string | string[];
|
|
@@ -189,14 +217,14 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
189
217
|
} | {
|
|
190
218
|
output: {
|
|
191
219
|
error: {
|
|
192
|
-
code: "
|
|
220
|
+
code: "payment_required" | "rate_limit_exceeded";
|
|
193
221
|
details?: readonly Response.error.Detail[] | undefined;
|
|
194
222
|
message: string;
|
|
195
223
|
};
|
|
196
224
|
requestId: string;
|
|
197
225
|
};
|
|
198
226
|
outputFormat: "json";
|
|
199
|
-
status:
|
|
227
|
+
status: 429;
|
|
200
228
|
input: {
|
|
201
229
|
param: {
|
|
202
230
|
address: `0x${string}`;
|
|
@@ -206,6 +234,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
206
234
|
chainId?: string | string[];
|
|
207
235
|
currency?: string | string[];
|
|
208
236
|
cursor?: string | string[];
|
|
237
|
+
denomination?: string | string[];
|
|
209
238
|
feeEligible?: string | string[];
|
|
210
239
|
include?: string | string[];
|
|
211
240
|
limit?: string | string[];
|
|
@@ -216,14 +245,14 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
216
245
|
} | {
|
|
217
246
|
output: {
|
|
218
247
|
error: {
|
|
219
|
-
code: "
|
|
248
|
+
code: "query_invalid";
|
|
220
249
|
details?: readonly Response.error.Detail[] | undefined;
|
|
221
250
|
message: string;
|
|
222
251
|
};
|
|
223
252
|
requestId: string;
|
|
224
253
|
};
|
|
225
254
|
outputFormat: "json";
|
|
226
|
-
status:
|
|
255
|
+
status: 400;
|
|
227
256
|
input: {
|
|
228
257
|
param: {
|
|
229
258
|
address: `0x${string}`;
|
|
@@ -233,6 +262,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
233
262
|
chainId?: string | string[];
|
|
234
263
|
currency?: string | string[];
|
|
235
264
|
cursor?: string | string[];
|
|
265
|
+
denomination?: string | string[];
|
|
236
266
|
feeEligible?: string | string[];
|
|
237
267
|
include?: string | string[];
|
|
238
268
|
limit?: string | string[];
|
|
@@ -243,14 +273,14 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
243
273
|
} | {
|
|
244
274
|
output: {
|
|
245
275
|
error: {
|
|
246
|
-
code: "
|
|
276
|
+
code: "upstream_error";
|
|
247
277
|
details?: readonly Response.error.Detail[] | undefined;
|
|
248
278
|
message: string;
|
|
249
279
|
};
|
|
250
280
|
requestId: string;
|
|
251
281
|
};
|
|
252
282
|
outputFormat: "json";
|
|
253
|
-
status:
|
|
283
|
+
status: 502;
|
|
254
284
|
input: {
|
|
255
285
|
param: {
|
|
256
286
|
address: `0x${string}`;
|
|
@@ -260,6 +290,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
260
290
|
chainId?: string | string[];
|
|
261
291
|
currency?: string | string[];
|
|
262
292
|
cursor?: string | string[];
|
|
293
|
+
denomination?: string | string[];
|
|
263
294
|
feeEligible?: string | string[];
|
|
264
295
|
include?: string | string[];
|
|
265
296
|
limit?: string | string[];
|
|
@@ -287,6 +318,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
287
318
|
chainId?: string | string[];
|
|
288
319
|
currency?: string | string[];
|
|
289
320
|
cursor?: string | string[];
|
|
321
|
+
denomination?: string | string[];
|
|
290
322
|
feeEligible?: string | string[];
|
|
291
323
|
include?: string | string[];
|
|
292
324
|
limit?: string | string[];
|
|
@@ -298,9 +330,11 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
298
330
|
output: {
|
|
299
331
|
data: {
|
|
300
332
|
amount: string;
|
|
333
|
+
currency: string;
|
|
334
|
+
decimals: number;
|
|
335
|
+
feeEligible?: boolean | undefined;
|
|
301
336
|
formatted: string;
|
|
302
337
|
id: string;
|
|
303
|
-
feeEligible?: boolean | undefined;
|
|
304
338
|
token: {
|
|
305
339
|
address: `0x${string}`;
|
|
306
340
|
currency: string;
|
|
@@ -311,10 +345,19 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
311
345
|
symbol: string;
|
|
312
346
|
verified: boolean;
|
|
313
347
|
};
|
|
348
|
+
valuation: {
|
|
349
|
+
amount: string;
|
|
350
|
+
currency: string;
|
|
351
|
+
} | null;
|
|
314
352
|
}[];
|
|
315
353
|
meta?: {
|
|
316
|
-
|
|
317
|
-
|
|
354
|
+
pricing?: {
|
|
355
|
+
asOf: string;
|
|
356
|
+
basis: "nominal";
|
|
357
|
+
source: string;
|
|
358
|
+
} | undefined;
|
|
359
|
+
totalCount?: number | undefined;
|
|
360
|
+
totalCountCapped?: boolean | undefined;
|
|
318
361
|
} | undefined;
|
|
319
362
|
nextCursor: string | null;
|
|
320
363
|
};
|
|
@@ -329,6 +372,7 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
329
372
|
chainId?: string | string[];
|
|
330
373
|
currency?: string | string[];
|
|
331
374
|
cursor?: string | string[];
|
|
375
|
+
denomination?: string | string[];
|
|
332
376
|
feeEligible?: string | string[];
|
|
333
377
|
include?: string | string[];
|
|
334
378
|
limit?: string | string[];
|
|
@@ -339,4 +383,11 @@ export declare function addresses(): import("hono/hono-base").HonoBase<App.Envir
|
|
|
339
383
|
};
|
|
340
384
|
};
|
|
341
385
|
}, "/", "/v1/addresses/:address/balances">;
|
|
386
|
+
export declare namespace addresses {
|
|
387
|
+
/** Options for the address-scoped balance handlers. */
|
|
388
|
+
type Options = {
|
|
389
|
+
/** FX configuration backing per-row valuation. */
|
|
390
|
+
fx?: Valuation.addresses.Fx | undefined;
|
|
391
|
+
};
|
|
392
|
+
}
|
|
342
393
|
//# sourceMappingURL=balances.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balances.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/balances.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAK3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;
|
|
1
|
+
{"version":3,"file":"balances.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/balances.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAK3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAOzD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAQ3C,iDAAiD;AACjD,yBAAiB,MAAM,CAAC;IACtB,oDAAoD;IACpD,UAAiB,kBAAkB,CAAC;QAClC,oDAAoD;QAC7C,MAAM,MAAM;;yBAM6D,CAAA;QAEhF,qDAAqD;QAC9C,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;0BA0Cf,CAAA;QAEH,kGAAkG;QAC3F,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;yBAoEnB,CAAA;QAED,0EAA0E;QACnE,MAAM,IAAI;;;;;;;;yBAasD,CAAA;QAEvE,sFAAsF;QAC/E,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAUwD,CAAA;KAC9E;CACF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,SAAS,CAAC,OAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CA0FxD;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,uDAAuD;IACvD,KAAK,OAAO,GAAG;QACb,kDAAkD;QAClD,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAA;KACxC,CAAA;CACF"}
|
|
@@ -10,8 +10,10 @@ import * as Response from '../../../internal/Response.js';
|
|
|
10
10
|
import * as Schema from '../../../internal/Schema.js';
|
|
11
11
|
import * as Timing from '../../../internal/Timing.js';
|
|
12
12
|
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js';
|
|
13
|
+
import * as FxOracle from '../FxOracle.js';
|
|
13
14
|
import * as FeeAmm from './fee-amm.js';
|
|
14
15
|
import * as Tokens from './tokens.js';
|
|
16
|
+
import * as Valuation from './valuation.js';
|
|
15
17
|
// TIP-20 tokens are minted by the TIP-20 factory and live at deterministic
|
|
16
18
|
// `0x20c0…`-prefixed addresses (e.g. pathUSD `0x20c0…0000`). The indexer's
|
|
17
19
|
// balance sources include every Transfer-emitting contract, so discovery
|
|
@@ -40,6 +42,7 @@ export var schema;
|
|
|
40
42
|
'snapshot does not store currency for unverified tokens. ' +
|
|
41
43
|
'Unknown currency strings are accepted but match no rows.')),
|
|
42
44
|
cursor: Schema.Cursor,
|
|
45
|
+
denomination: Schema.Denomination,
|
|
43
46
|
feeEligible: z
|
|
44
47
|
.optional(Schema.booleanQuery())
|
|
45
48
|
.check(z.describe('When `true`, include only tokens eligible to pay transaction fees on Tempo: ' +
|
|
@@ -54,22 +57,17 @@ export var schema;
|
|
|
54
57
|
.check(z.describe('When `true`, include only tokens from Tempo’s curated verified token list.'), z.meta({ examples: [true] })),
|
|
55
58
|
})
|
|
56
59
|
.check(...Schema.pageChecks(), z.describe('Query parameters for listing an account’s token balances.'));
|
|
57
|
-
/**
|
|
58
|
-
* A TIP-20 token balance held by an address: the held `amount` in the
|
|
59
|
-
* token's base unit, its `formatted` value, and the trimmed `token`
|
|
60
|
-
* reference inlined per row. Rows whose token metadata cannot be resolved
|
|
61
|
-
* are omitted.
|
|
62
|
-
*/
|
|
60
|
+
/** A TIP-20 balance with raw and formatted amounts. Unresolvable token metadata omits the row. */
|
|
63
61
|
getAddressBalances.Balance = Schema.describe(z.object({
|
|
64
62
|
amount: z
|
|
65
63
|
.string()
|
|
66
64
|
.check(z.regex(/^\d+$/), z.describe('A non-negative whole number, given as a decimal string so very large token amounts keep full precision. Expressed in the smallest unit of the token.'), z.meta({ examples: ['1500000'] })),
|
|
67
|
-
|
|
68
|
-
.string()
|
|
69
|
-
.check(z.describe('The same balance in human-readable decimal form, using the token’s `decimals`.'), z.meta({ examples: ['1.5'] })),
|
|
70
|
-
id: z
|
|
65
|
+
currency: z
|
|
71
66
|
.string()
|
|
72
|
-
.check(z.describe('
|
|
67
|
+
.check(z.describe('The currency label for this balance, such as `USD` for a USD-denominated token.'), z.meta({ examples: ['USD'] })),
|
|
68
|
+
decimals: z
|
|
69
|
+
.number()
|
|
70
|
+
.check(z.int(), z.nonnegative(), z.describe('The number of decimal places used to convert this balance between base units and human-readable form.'), z.meta({ examples: [6] })),
|
|
73
71
|
feeEligible: z
|
|
74
72
|
.optional(z.boolean())
|
|
75
73
|
.check(z.describe('Whether this token can be used to pay transaction fees on Tempo: `true` when ' +
|
|
@@ -77,8 +75,29 @@ export var schema;
|
|
|
77
75
|
'(`pathUSD`). Lets you identify fee-payable holdings without a separate ' +
|
|
78
76
|
'`/fee-amm/pools` query. Omitted (best-effort) when the fee-token lookup ' +
|
|
79
77
|
'is unavailable.'), z.meta({ examples: [true] })),
|
|
78
|
+
formatted: z
|
|
79
|
+
.string()
|
|
80
|
+
.check(z.describe('The same balance in human-readable decimal form, using this balance’s `decimals`.'), z.meta({ examples: ['1.5'] })),
|
|
81
|
+
id: z
|
|
82
|
+
.string()
|
|
83
|
+
.check(z.describe('A stable resource ID for this balance, equal to the token contract address.'), z.meta({ examples: ['0x20c0000000000000000000008f5425160ebe5525'] })),
|
|
80
84
|
token: Tokens.schema.Token,
|
|
85
|
+
valuation: z
|
|
86
|
+
.nullable(Valuation.schema.Value)
|
|
87
|
+
.check(z.describe('The holding’s nominal value in the requested `denomination`, or `null` when the ' +
|
|
88
|
+
'token is unverified, its display currency has no rate, or rates were unavailable.')),
|
|
81
89
|
}), 'One TIP-20 token balance held by this account, with both raw and human-readable amounts.');
|
|
90
|
+
/** Page-level resources: opt-in counts plus valuation rate provenance. */
|
|
91
|
+
getAddressBalances.Meta = z
|
|
92
|
+
.object({
|
|
93
|
+
pricing: z
|
|
94
|
+
.optional(Valuation.schema.Pricing)
|
|
95
|
+
.check(z.describe('Rate provenance for row valuations. Present when conversion rates were ' +
|
|
96
|
+
'consulted; absent when every value was identity-valued or rates were unavailable.')),
|
|
97
|
+
totalCount: z.optional(Schema.TotalCount),
|
|
98
|
+
totalCountCapped: z.optional(Schema.TotalCountCapped),
|
|
99
|
+
})
|
|
100
|
+
.check(z.describe('Page-level resources attached to this response.'));
|
|
82
101
|
/** Page of TIP-20 token balances held by an address, ordered by amount descending. */
|
|
83
102
|
getAddressBalances.Response = z
|
|
84
103
|
.object({
|
|
@@ -86,8 +105,8 @@ export var schema;
|
|
|
86
105
|
.array(getAddressBalances.Balance)
|
|
87
106
|
.check(z.describe('The balances in this page, ordered from largest to smallest amount.')),
|
|
88
107
|
meta: z
|
|
89
|
-
.optional(
|
|
90
|
-
.check(z.describe('Page-level resources
|
|
108
|
+
.optional(getAddressBalances.Meta)
|
|
109
|
+
.check(z.describe('Page-level resources: opt-in counts and valuation rate provenance.')),
|
|
91
110
|
nextCursor: Schema.NextCursor,
|
|
92
111
|
})
|
|
93
112
|
.check(z.describe('A page of TIP-20 token balances held by this account.'));
|
|
@@ -97,7 +116,8 @@ export var schema;
|
|
|
97
116
|
* Creates address-scoped balance handlers, mounted under the `/addresses`
|
|
98
117
|
* composer. Exposes `GET /:address/balances`, the held-balance page.
|
|
99
118
|
*/
|
|
100
|
-
export function addresses() {
|
|
119
|
+
export function addresses(options = {}) {
|
|
120
|
+
const oracle = options.fx?.oracle ?? FxOracle.ecb();
|
|
101
121
|
return new Hono().get('/v1/addresses/:address/balances', Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }), OpenApi.validate('param', schema.getAddressBalances.Params, {
|
|
102
122
|
code: 'address_invalid',
|
|
103
123
|
message: 'Invalid account address',
|
|
@@ -105,10 +125,10 @@ export function addresses() {
|
|
|
105
125
|
code: 'query_invalid',
|
|
106
126
|
message: 'Invalid query parameters',
|
|
107
127
|
}), OpenApi.describeRoute({
|
|
108
|
-
description: 'Lists how much of each TIP-20 token an account holds, ordered from largest to smallest balance. Amounts are returned in raw base units and human-readable form.',
|
|
128
|
+
description: 'Lists how much of each TIP-20 token an account holds, ordered from largest to smallest balance. Amounts are returned in raw base units and human-readable form, and each verified holding carries its nominal value in the requested denomination.',
|
|
109
129
|
operationId: 'getAddressBalances',
|
|
110
130
|
responses: OpenApi.responses({
|
|
111
|
-
errors: { 502: '
|
|
131
|
+
errors: { 502: 'Could not read balance or token data from an upstream service.' },
|
|
112
132
|
success: {
|
|
113
133
|
description: 'A page of token balances for this account.',
|
|
114
134
|
schema: schema.getAddressBalances.Response,
|
|
@@ -158,25 +178,31 @@ export function addresses() {
|
|
|
158
178
|
chainId,
|
|
159
179
|
currency: query.currency,
|
|
160
180
|
cursor: query.cursor,
|
|
181
|
+
denomination: query.denomination ?? 'USD',
|
|
161
182
|
feeEligible,
|
|
162
183
|
feeTokens,
|
|
163
184
|
includeTotalCount: query.include.includes('totalCount'),
|
|
164
185
|
limit: query.limit,
|
|
186
|
+
oracle,
|
|
165
187
|
page: query.page,
|
|
166
188
|
verified,
|
|
167
189
|
});
|
|
168
190
|
return c.json(Response.validated(schema.getAddressBalances.Response, balances), 200);
|
|
169
191
|
}
|
|
170
192
|
catch (cause) {
|
|
193
|
+
if (cause instanceof Valuation.UnsupportedDenominationError)
|
|
194
|
+
return Response.error(c, { code: 'query_invalid', message: cause.message, status: 400 });
|
|
171
195
|
return Response.upstream(c, cause);
|
|
172
196
|
}
|
|
173
197
|
});
|
|
174
198
|
}
|
|
175
199
|
async function getAddressBalances(c, options) {
|
|
176
|
-
const { address, chainId, currency, feeEligible, feeTokens, includeTotalCount, limit, verified } = options;
|
|
200
|
+
const { address, chainId, currency, denomination, feeEligible, feeTokens, includeTotalCount, limit, oracle, verified, } = options;
|
|
177
201
|
const tidx = c.get('getTidx')(chainId);
|
|
178
202
|
const cursor = options.cursor ? Cursor.decode(options.cursor, ['uint', 'address']) : undefined;
|
|
179
203
|
const offset = options.page !== undefined && options.page > 1 ? (options.page - 1) * limit : 0;
|
|
204
|
+
// Validate the requested denomination independently of the current page.
|
|
205
|
+
await Valuation.ratesFor(c, { currencies: [], denomination, oracle });
|
|
180
206
|
// Build the optional `token IN (…)` restriction before hitting TIDX. The
|
|
181
207
|
// verified/`currency` filter and the `feeEligible` filter each contribute a set
|
|
182
208
|
// of allowed addresses (`currency` matched case-insensitively so callers can
|
|
@@ -259,51 +285,66 @@ async function getAddressBalances(c, options) {
|
|
|
259
285
|
: {}),
|
|
260
286
|
nextCursor: page.nextCursor,
|
|
261
287
|
};
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
//
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
288
|
+
const rates = await Valuation.ratesFor(c, {
|
|
289
|
+
currencies: page.rows.flatMap((row) => {
|
|
290
|
+
const held = snapshot.byAddress.get(row.address.toLowerCase())?.currency;
|
|
291
|
+
return held === undefined ? [] : [held];
|
|
292
|
+
}),
|
|
293
|
+
denomination,
|
|
294
|
+
oracle,
|
|
295
|
+
});
|
|
296
|
+
// Balance tokens retain their logo and verification metadata by default.
|
|
297
|
+
const resolved = await Timing.time(c, 'tokens', () => Promise.all(page.rows.map(async (holding) => {
|
|
298
|
+
try {
|
|
299
|
+
const token = Schema.Address.parse(holding.address.toLowerCase());
|
|
300
|
+
const [logoUri, metadata] = await Promise.all([
|
|
301
|
+
Timing.time(c, 'token_logo', () => Tokens.getTokenLogo(c, { address: token, chainId })).catch(() => undefined),
|
|
302
|
+
Timing.time(c, 'token_metadata', () => Tokens.getTokenMetadata(c, { address: token, chainId })),
|
|
303
|
+
]);
|
|
304
|
+
return { amount: holding.amount, logoUri, metadata, token };
|
|
305
|
+
}
|
|
306
|
+
catch {
|
|
307
|
+
return undefined;
|
|
308
|
+
}
|
|
309
|
+
})));
|
|
279
310
|
const data = [];
|
|
280
311
|
for (const entry of resolved) {
|
|
281
|
-
if (!entry
|
|
312
|
+
if (!entry)
|
|
282
313
|
continue;
|
|
283
314
|
data.push({
|
|
284
315
|
amount: entry.amount,
|
|
285
|
-
|
|
286
|
-
|
|
316
|
+
currency: entry.metadata.currency,
|
|
317
|
+
decimals: entry.metadata.decimals,
|
|
287
318
|
// Best-effort: omit `feeEligible` entirely when the fee-token set was
|
|
288
319
|
// unavailable, rather than reporting a misleading `false`.
|
|
289
|
-
...(feeTokens ? { feeEligible: feeTokens.has(entry.
|
|
320
|
+
...(feeTokens ? { feeEligible: feeTokens.has(entry.token.toLowerCase()) } : {}),
|
|
321
|
+
formatted: core_Value.format(BigInt(entry.amount), entry.metadata.decimals),
|
|
322
|
+
id: entry.token,
|
|
290
323
|
token: {
|
|
291
|
-
address: entry.
|
|
324
|
+
address: entry.token,
|
|
292
325
|
currency: entry.metadata.currency,
|
|
293
326
|
decimals: entry.metadata.decimals,
|
|
294
|
-
id: entry.
|
|
295
|
-
logoUri: entry.metadata.logoUri,
|
|
327
|
+
id: entry.token,
|
|
328
|
+
logoUri: entry.logoUri ?? snapshot.byAddress.get(entry.token)?.logoUri ?? entry.metadata.logoUri,
|
|
296
329
|
name: entry.metadata.name,
|
|
297
330
|
symbol: entry.metadata.symbol,
|
|
298
|
-
verified: entry.
|
|
331
|
+
verified: snapshot.byAddress.has(entry.token),
|
|
299
332
|
},
|
|
333
|
+
valuation: Valuation.valuationFor({
|
|
334
|
+
amount: BigInt(entry.amount),
|
|
335
|
+
denomination,
|
|
336
|
+
rates,
|
|
337
|
+
token: snapshot.byAddress.get(entry.token),
|
|
338
|
+
}),
|
|
300
339
|
});
|
|
301
340
|
}
|
|
341
|
+
const meta = {
|
|
342
|
+
...(rates ? { pricing: Valuation.pricing(rates, oracle) } : {}),
|
|
343
|
+
...(includeTotalCount ? { totalCount: corrected.length, totalCountCapped: false } : {}),
|
|
344
|
+
};
|
|
302
345
|
return {
|
|
303
346
|
data,
|
|
304
|
-
...(
|
|
305
|
-
? { meta: { totalCount: corrected.length, totalCountCapped: false } }
|
|
306
|
-
: {}),
|
|
347
|
+
...(Object.keys(meta).length > 0 ? { meta } : {}),
|
|
307
348
|
nextCursor: page.nextCursor,
|
|
308
349
|
};
|
|
309
350
|
}
|
|
@@ -320,6 +361,8 @@ function allowedTokens(options) {
|
|
|
320
361
|
const { currency, feeEligible, feeTokens, snapshot, verified } = options;
|
|
321
362
|
let allowed;
|
|
322
363
|
if (verified) {
|
|
364
|
+
if (!snapshot)
|
|
365
|
+
throw new Error('Unable to resolve verified token metadata');
|
|
323
366
|
const matching = currency
|
|
324
367
|
? (snapshot.byCurrency.get(currency.toLowerCase()) ?? [])
|
|
325
368
|
: snapshot.list;
|