tapimo 0.5.2 → 0.6.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.
Files changed (299) hide show
  1. package/dist/App.d.ts +13987 -5755
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js.map +1 -1
  4. package/dist/admin/App.d.ts +910 -412
  5. package/dist/admin/App.d.ts.map +1 -1
  6. package/dist/admin/App.js +4 -0
  7. package/dist/admin/App.js.map +1 -1
  8. package/dist/admin/apps/early-access.d.ts +148 -0
  9. package/dist/admin/apps/early-access.d.ts.map +1 -0
  10. package/dist/admin/apps/early-access.js +133 -0
  11. package/dist/admin/apps/early-access.js.map +1 -0
  12. package/dist/admin/apps/verified-tokens.d.ts +643 -118
  13. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  14. package/dist/admin/apps/verified-tokens.js +214 -1
  15. package/dist/admin/apps/verified-tokens.js.map +1 -1
  16. package/dist/admin/ui.generated.d.ts +1 -1
  17. package/dist/admin/ui.generated.d.ts.map +1 -1
  18. package/dist/admin/ui.generated.js +45 -33
  19. package/dist/admin/ui.generated.js.map +1 -1
  20. package/dist/apps/data/App.d.ts +3733 -2428
  21. package/dist/apps/data/App.d.ts.map +1 -1
  22. package/dist/apps/data/App.js +11 -6
  23. package/dist/apps/data/App.js.map +1 -1
  24. package/dist/apps/data/FundingQuoteProviders.d.ts +34 -1
  25. package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
  26. package/dist/apps/data/FundingQuoteProviders.js +193 -2
  27. package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
  28. package/dist/apps/data/FxOracle.d.ts +71 -0
  29. package/dist/apps/data/FxOracle.d.ts.map +1 -0
  30. package/dist/apps/data/FxOracle.js +97 -0
  31. package/dist/apps/data/FxOracle.js.map +1 -0
  32. package/dist/apps/data/index.d.ts +1 -0
  33. package/dist/apps/data/index.d.ts.map +1 -1
  34. package/dist/apps/data/index.js +1 -0
  35. package/dist/apps/data/index.js.map +1 -1
  36. package/dist/apps/data/routes/activities.d.ts +3575 -1358
  37. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  38. package/dist/apps/data/routes/activities.js +230 -88
  39. package/dist/apps/data/routes/activities.js.map +1 -1
  40. package/dist/apps/data/routes/addresses.d.ts +963 -342
  41. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  42. package/dist/apps/data/routes/addresses.js +11 -9
  43. package/dist/apps/data/routes/addresses.js.map +1 -1
  44. package/dist/apps/data/routes/balances.d.ts +108 -57
  45. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  46. package/dist/apps/data/routes/balances.js +88 -45
  47. package/dist/apps/data/routes/balances.js.map +1 -1
  48. package/dist/apps/data/routes/coingecko.d.ts +169 -169
  49. package/dist/apps/data/routes/exchanges.d.ts +952 -201
  50. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  51. package/dist/apps/data/routes/exchanges.js +518 -76
  52. package/dist/apps/data/routes/exchanges.js.map +1 -1
  53. package/dist/apps/data/routes/fee-amm.d.ts +24 -24
  54. package/dist/apps/data/routes/funding.d.ts +8 -2
  55. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  56. package/dist/apps/data/routes/funding.js +32 -6
  57. package/dist/apps/data/routes/funding.js.map +1 -1
  58. package/dist/apps/data/routes/indexer.d.ts +5 -5
  59. package/dist/apps/data/routes/receipts.d.ts +392 -315
  60. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  61. package/dist/apps/data/routes/receipts.js +152 -77
  62. package/dist/apps/data/routes/receipts.js.map +1 -1
  63. package/dist/apps/data/routes/tokens.d.ts +166 -173
  64. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  65. package/dist/apps/data/routes/tokens.js +14 -12
  66. package/dist/apps/data/routes/tokens.js.map +1 -1
  67. package/dist/apps/data/routes/transactions.d.ts +277 -536
  68. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  69. package/dist/apps/data/routes/transactions.js +96 -77
  70. package/dist/apps/data/routes/transactions.js.map +1 -1
  71. package/dist/apps/data/routes/transfers.d.ts +82 -17
  72. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  73. package/dist/apps/data/routes/transfers.js +70 -13
  74. package/dist/apps/data/routes/transfers.js.map +1 -1
  75. package/dist/apps/data/routes/valuation.d.ts +307 -0
  76. package/dist/apps/data/routes/valuation.d.ts.map +1 -0
  77. package/dist/apps/data/routes/valuation.js +292 -0
  78. package/dist/apps/data/routes/valuation.js.map +1 -0
  79. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  80. package/dist/apps/data/routes/verified-tokens.js +7 -5
  81. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  82. package/dist/apps/data/routes/webhooks.d.ts +459 -479
  83. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  84. package/dist/apps/data/routes/webhooks.js +124 -25
  85. package/dist/apps/data/routes/webhooks.js.map +1 -1
  86. package/dist/apps/index.d.ts +1 -1
  87. package/dist/apps/index.d.ts.map +1 -1
  88. package/dist/apps/index.js +1 -1
  89. package/dist/apps/index.js.map +1 -1
  90. package/dist/apps/management/App.d.ts +8606 -1681
  91. package/dist/apps/management/App.d.ts.map +1 -1
  92. package/dist/apps/management/App.js +12 -1
  93. package/dist/apps/management/App.js.map +1 -1
  94. package/dist/apps/management/routes/api-keys.d.ts +23 -0
  95. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  96. package/dist/apps/management/routes/api-keys.js +5 -3
  97. package/dist/apps/management/routes/api-keys.js.map +1 -1
  98. package/dist/apps/management/routes/billing.d.ts +88 -48
  99. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  100. package/dist/apps/management/routes/billing.js +10 -2
  101. package/dist/apps/management/routes/billing.js.map +1 -1
  102. package/dist/apps/management/routes/faucet.d.ts +218 -0
  103. package/dist/apps/management/routes/faucet.d.ts.map +1 -0
  104. package/dist/apps/management/routes/faucet.js +139 -0
  105. package/dist/apps/management/routes/faucet.js.map +1 -0
  106. package/dist/apps/management/routes/invitations.d.ts +121 -121
  107. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  108. package/dist/apps/management/routes/invitations.js +3 -0
  109. package/dist/apps/management/routes/invitations.js.map +1 -1
  110. package/dist/apps/management/routes/invite-links.d.ts +197 -168
  111. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  112. package/dist/apps/management/routes/invite-links.js +26 -1
  113. package/dist/apps/management/routes/invite-links.js.map +1 -1
  114. package/dist/apps/management/routes/me.d.ts +2 -0
  115. package/dist/apps/management/routes/me.d.ts.map +1 -1
  116. package/dist/apps/management/routes/me.js +4 -0
  117. package/dist/apps/management/routes/me.js.map +1 -1
  118. package/dist/apps/management/routes/members.d.ts +49 -49
  119. package/dist/apps/management/routes/orgs.d.ts +91 -91
  120. package/dist/apps/management/routes/projects.d.ts +115 -115
  121. package/dist/apps/management/routes/usage.d.ts +35 -32
  122. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  123. package/dist/apps/management/routes/usage.js +4 -0
  124. package/dist/apps/management/routes/usage.js.map +1 -1
  125. package/dist/apps/management/routes/verified-token-requests.d.ts +697 -0
  126. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -0
  127. package/dist/apps/management/routes/verified-token-requests.js +271 -0
  128. package/dist/apps/management/routes/verified-token-requests.js.map +1 -0
  129. package/dist/apps/management/routes/webhooks.d.ts +6977 -0
  130. package/dist/apps/management/routes/webhooks.d.ts.map +1 -0
  131. package/dist/apps/management/routes/webhooks.js +573 -0
  132. package/dist/apps/management/routes/webhooks.js.map +1 -0
  133. package/dist/apps/mcp.d.ts +9 -2
  134. package/dist/apps/mcp.d.ts.map +1 -1
  135. package/dist/apps/mcp.js +9 -4
  136. package/dist/apps/mcp.js.map +1 -1
  137. package/dist/cli/Cli.d.ts.map +1 -1
  138. package/dist/cli/Cli.js +7 -2
  139. package/dist/cli/Cli.js.map +1 -1
  140. package/dist/db/Db.d.ts +4 -0
  141. package/dist/db/Db.d.ts.map +1 -1
  142. package/dist/db/Db.js +83 -0
  143. package/dist/db/Db.js.map +1 -1
  144. package/dist/db/Schema.d.ts +41 -0
  145. package/dist/db/Schema.d.ts.map +1 -1
  146. package/dist/db/Schema.js +45 -0
  147. package/dist/db/Schema.js.map +1 -1
  148. package/dist/db/tables/earlyAccess.d.ts +50 -0
  149. package/dist/db/tables/earlyAccess.d.ts.map +1 -0
  150. package/dist/db/tables/earlyAccess.js +63 -0
  151. package/dist/db/tables/earlyAccess.js.map +1 -0
  152. package/dist/db/tables/invitations.d.ts +12 -1
  153. package/dist/db/tables/invitations.d.ts.map +1 -1
  154. package/dist/db/tables/invitations.js +23 -0
  155. package/dist/db/tables/invitations.js.map +1 -1
  156. package/dist/db/tables/inviteLinks.d.ts +10 -2
  157. package/dist/db/tables/inviteLinks.d.ts.map +1 -1
  158. package/dist/db/tables/inviteLinks.js +10 -1
  159. package/dist/db/tables/inviteLinks.js.map +1 -1
  160. package/dist/db/tables/sponsoredTransactions.d.ts +2 -0
  161. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  162. package/dist/db/tables/sponsoredTransactions.js +2 -0
  163. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  164. package/dist/db/tables/verifiedTokenRequests.d.ts +94 -0
  165. package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -0
  166. package/dist/db/tables/verifiedTokenRequests.js +120 -0
  167. package/dist/db/tables/verifiedTokenRequests.js.map +1 -0
  168. package/dist/db/tables/webhookSubscriptions.d.ts +14 -0
  169. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  170. package/dist/db/tables/webhookSubscriptions.js +16 -0
  171. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  172. package/dist/internal/Auth.d.ts +43 -2
  173. package/dist/internal/Auth.d.ts.map +1 -1
  174. package/dist/internal/Auth.js +60 -45
  175. package/dist/internal/Auth.js.map +1 -1
  176. package/dist/internal/FundingQuotes.d.ts +69 -15
  177. package/dist/internal/FundingQuotes.d.ts.map +1 -1
  178. package/dist/internal/FundingQuotes.js +74 -25
  179. package/dist/internal/FundingQuotes.js.map +1 -1
  180. package/dist/internal/Log.d.ts +19 -1
  181. package/dist/internal/Log.d.ts.map +1 -1
  182. package/dist/internal/Log.js +2 -0
  183. package/dist/internal/Log.js.map +1 -1
  184. package/dist/internal/MetricSink.d.ts.map +1 -1
  185. package/dist/internal/MetricSink.js +9 -0
  186. package/dist/internal/MetricSink.js.map +1 -1
  187. package/dist/internal/OpenApi.d.ts +2 -2
  188. package/dist/internal/OpenApi.d.ts.map +1 -1
  189. package/dist/internal/OpenApi.js +3 -0
  190. package/dist/internal/OpenApi.js.map +1 -1
  191. package/dist/internal/Schema.d.ts +14 -5
  192. package/dist/internal/Schema.d.ts.map +1 -1
  193. package/dist/internal/Schema.js +23 -5
  194. package/dist/internal/Schema.js.map +1 -1
  195. package/dist/internal/Value.d.ts +18 -0
  196. package/dist/internal/Value.d.ts.map +1 -1
  197. package/dist/internal/Value.js +11 -1
  198. package/dist/internal/Value.js.map +1 -1
  199. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  200. package/dist/internal/VerifiedTokens.js +10 -1
  201. package/dist/internal/VerifiedTokens.js.map +1 -1
  202. package/dist/internal/Viem.d.ts +1 -1
  203. package/dist/internal/Webhooks.d.ts +24 -3
  204. package/dist/internal/Webhooks.d.ts.map +1 -1
  205. package/dist/internal/Webhooks.js +34 -8
  206. package/dist/internal/Webhooks.js.map +1 -1
  207. package/package.json +2 -2
  208. package/src/App.ts +9 -1
  209. package/src/Client.test-d.ts +638 -6
  210. package/src/admin/App.ts +4 -0
  211. package/src/admin/apps/early-access.test.ts +125 -0
  212. package/src/admin/apps/early-access.ts +175 -0
  213. package/src/admin/apps/verified-tokens.test.ts +201 -0
  214. package/src/admin/apps/verified-tokens.ts +532 -286
  215. package/src/admin/ui/plugin.ts +2 -1
  216. package/src/admin/ui/src/lib/early-access.ts +63 -0
  217. package/src/admin/ui/src/lib/verified-tokens.ts +79 -0
  218. package/src/admin/ui/src/routeTree.gen.ts +33 -2
  219. package/src/admin/ui/src/routes/__root.tsx +2 -1
  220. package/src/admin/ui/src/routes/early-access.tsx +157 -0
  221. package/src/admin/ui/src/routes/verified-tokens.tsx +230 -19
  222. package/src/admin/ui.generated.ts +48 -33
  223. package/src/apps/data/App.ts +22 -14
  224. package/src/apps/data/FundingQuoteProviders.test.ts +298 -0
  225. package/src/apps/data/FundingQuoteProviders.ts +257 -4
  226. package/src/apps/data/FxOracle.test.ts +118 -0
  227. package/src/apps/data/FxOracle.ts +153 -0
  228. package/src/apps/data/index.ts +1 -0
  229. package/src/apps/data/routes/activities.test.ts +173 -3
  230. package/src/apps/data/routes/activities.ts +403 -132
  231. package/src/apps/data/routes/addresses.ts +19 -9
  232. package/src/apps/data/routes/balances.test.ts +144 -11
  233. package/src/apps/data/routes/balances.ts +140 -51
  234. package/src/apps/data/routes/exchanges.test.ts +540 -9
  235. package/src/apps/data/routes/exchanges.ts +690 -103
  236. package/src/apps/data/routes/funding.test.ts +84 -0
  237. package/src/apps/data/routes/funding.ts +38 -6
  238. package/src/apps/data/routes/receipts.test.ts +125 -23
  239. package/src/apps/data/routes/receipts.ts +205 -100
  240. package/src/apps/data/routes/tokens.test.ts +43 -0
  241. package/src/apps/data/routes/tokens.ts +27 -12
  242. package/src/apps/data/routes/transactions.test.ts +72 -19
  243. package/src/apps/data/routes/transactions.ts +162 -92
  244. package/src/apps/data/routes/transfers.test.ts +146 -4
  245. package/src/apps/data/routes/transfers.ts +91 -13
  246. package/src/apps/data/routes/valuation.test.ts +422 -0
  247. package/src/apps/data/routes/valuation.ts +423 -0
  248. package/src/apps/data/routes/verified-tokens.ts +14 -2
  249. package/src/apps/data/routes/webhooks.test.ts +56 -8
  250. package/src/apps/data/routes/webhooks.ts +144 -27
  251. package/src/apps/index.ts +1 -1
  252. package/src/apps/management/App.ts +13 -0
  253. package/src/apps/management/routes/api-keys.test.ts +87 -0
  254. package/src/apps/management/routes/api-keys.ts +4 -3
  255. package/src/apps/management/routes/billing.test.ts +112 -1
  256. package/src/apps/management/routes/billing.ts +7 -2
  257. package/src/apps/management/routes/faucet.test.ts +79 -0
  258. package/src/apps/management/routes/faucet.ts +185 -0
  259. package/src/apps/management/routes/invitations.test.ts +172 -0
  260. package/src/apps/management/routes/invitations.ts +3 -0
  261. package/src/apps/management/routes/invite-links.test.ts +117 -0
  262. package/src/apps/management/routes/invite-links.ts +43 -1
  263. package/src/apps/management/routes/me.test.ts +140 -88
  264. package/src/apps/management/routes/me.ts +6 -0
  265. package/src/apps/management/routes/usage.test.ts +6 -0
  266. package/src/apps/management/routes/usage.ts +7 -0
  267. package/src/apps/management/routes/verified-token-requests.test.ts +377 -0
  268. package/src/apps/management/routes/verified-token-requests.ts +397 -0
  269. package/src/apps/management/routes/webhooks.test.ts +426 -0
  270. package/src/apps/management/routes/webhooks.ts +672 -0
  271. package/src/apps/mcp.test.ts +13 -0
  272. package/src/apps/mcp.ts +18 -5
  273. package/src/cli/Cli.test.ts +36 -0
  274. package/src/cli/Cli.ts +7 -2
  275. package/src/db/Db.test.ts +19 -0
  276. package/src/db/Db.ts +95 -0
  277. package/src/db/Schema.ts +53 -0
  278. package/src/db/tables/earlyAccess.ts +86 -0
  279. package/src/db/tables/invitations.ts +26 -1
  280. package/src/db/tables/inviteLinks.ts +22 -3
  281. package/src/db/tables/sponsoredTransactions.ts +4 -0
  282. package/src/db/tables/verifiedTokenRequests.test.ts +200 -0
  283. package/src/db/tables/verifiedTokenRequests.ts +182 -0
  284. package/src/db/tables/webhookSubscriptions.ts +31 -0
  285. package/src/internal/Auth.ts +73 -45
  286. package/src/internal/FundingQuotes.test.ts +143 -1
  287. package/src/internal/FundingQuotes.ts +95 -28
  288. package/src/internal/Log.test-d.ts +21 -0
  289. package/src/internal/Log.test.ts +50 -0
  290. package/src/internal/Log.ts +24 -1
  291. package/src/internal/MetricSink.test.ts +160 -0
  292. package/src/internal/MetricSink.ts +10 -0
  293. package/src/internal/OpenApi.ts +3 -0
  294. package/src/internal/Schema.ts +50 -5
  295. package/src/internal/Value.test.ts +20 -0
  296. package/src/internal/Value.ts +24 -1
  297. package/src/internal/VerifiedTokens.ts +9 -1
  298. package/src/internal/Webhooks.test.ts +140 -0
  299. package/src/internal/Webhooks.ts +53 -9
@@ -0,0 +1,307 @@
1
+ import { type Context } from 'hono';
2
+ import * as z from 'zod/mini';
3
+ import type * as App from '../../../App.js';
4
+ import * as Response from '../../../internal/Response.js';
5
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js';
6
+ import * as FxOracle from '../FxOracle.js';
7
+ /** Zod schemas owned by the valuation handlers. */
8
+ export declare namespace schema {
9
+ /** A holding's nominal value in the requested denomination. */
10
+ const Value: z.ZodMiniObject<{
11
+ amount: z.ZodMiniString<string>;
12
+ currency: z.ZodMiniString<string>;
13
+ }, z.core.$strip>;
14
+ /** Rate provenance for a converted valuation. */
15
+ const Pricing: z.ZodMiniObject<{
16
+ asOf: z.ZodMiniString<string>;
17
+ basis: z.ZodMiniLiteral<"nominal">;
18
+ source: z.ZodMiniString<string>;
19
+ }, z.core.$strip>;
20
+ /** Schemas for the getAddressValuation operation. */
21
+ namespace getAddressValuation {
22
+ /** Path parameters for address valuation requests. */
23
+ const Params: z.ZodMiniObject<{
24
+ address: z.ZodMiniPipe<z.ZodMiniTemplateLiteral<`0x${string}`>, z.ZodMiniTransform<`0x${string}`, `0x${string}`>>;
25
+ }, z.core.$strip>;
26
+ /** Query parameters for address valuation requests. */
27
+ const Query: z.ZodMiniObject<{
28
+ chainId: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniUnion<readonly [z.ZodMiniPipe<z.ZodMiniEnum<{
29
+ mainnet: "mainnet";
30
+ testnet: "testnet";
31
+ }>, z.ZodMiniTransform<4217 | 42431, "mainnet" | "testnet">>, z.ZodMiniNumber<unknown>]>, z.ZodMiniNumber<number>>>;
32
+ denomination: z.ZodMiniOptional<z.ZodMiniPipe<z.ZodMiniString<string>, z.ZodMiniTransform<string, string>>>;
33
+ }, z.core.$strict>;
34
+ /** The nominal valuation of an account's verified holdings. */
35
+ const Response: z.ZodMiniObject<{
36
+ address: z.ZodMiniPipe<z.ZodMiniTemplateLiteral<`0x${string}`>, z.ZodMiniTransform<`0x${string}`, `0x${string}`>>;
37
+ amount: z.ZodMiniString<string>;
38
+ currency: z.ZodMiniString<string>;
39
+ id: z.ZodMiniString<string>;
40
+ pricing: z.ZodMiniNullable<z.ZodMiniObject<{
41
+ asOf: z.ZodMiniString<string>;
42
+ basis: z.ZodMiniLiteral<"nominal">;
43
+ source: z.ZodMiniString<string>;
44
+ }, z.core.$strip>>;
45
+ unpriced: z.ZodMiniArray<z.ZodMiniString<string>>;
46
+ }, z.core.$strip>;
47
+ }
48
+ }
49
+ /**
50
+ * Creates address-scoped valuation handlers, mounted under the `/addresses`
51
+ * composer. Exposes `GET /:address/valuation`, the holdings valuation.
52
+ */
53
+ export declare function addresses(options?: addresses.Options): import("hono/hono-base").HonoBase<App.Environment, {
54
+ "/v1/addresses/:address/valuation": {
55
+ $get: {
56
+ output: {
57
+ address: `0x${string}`;
58
+ amount: string;
59
+ currency: string;
60
+ id: string;
61
+ pricing: {
62
+ asOf: string;
63
+ basis: "nominal";
64
+ source: string;
65
+ } | null;
66
+ unpriced: string[];
67
+ };
68
+ outputFormat: "json";
69
+ status: 200;
70
+ input: {
71
+ param: {
72
+ address: `0x${string}`;
73
+ };
74
+ } & {
75
+ query?: {
76
+ chainId?: string | string[];
77
+ denomination?: string | string[];
78
+ } | undefined;
79
+ };
80
+ } | {
81
+ output: {
82
+ error: {
83
+ code: "api_key_malformed";
84
+ details?: readonly Response.error.Detail[] | undefined;
85
+ message: string;
86
+ };
87
+ requestId: string;
88
+ };
89
+ outputFormat: "json";
90
+ status: 400;
91
+ input: {
92
+ param: {
93
+ address: `0x${string}`;
94
+ };
95
+ } & {
96
+ query?: {
97
+ chainId?: string | string[];
98
+ denomination?: string | string[];
99
+ } | undefined;
100
+ };
101
+ } | {
102
+ output: {
103
+ error: {
104
+ code: "address_invalid";
105
+ details?: readonly Response.error.Detail[] | undefined;
106
+ message: string;
107
+ };
108
+ requestId: string;
109
+ };
110
+ outputFormat: "json";
111
+ status: 400;
112
+ input: {
113
+ param: {
114
+ address: `0x${string}`;
115
+ };
116
+ } & {
117
+ query?: {
118
+ chainId?: string | string[];
119
+ denomination?: string | string[];
120
+ } | undefined;
121
+ };
122
+ } | {
123
+ output: {
124
+ error: {
125
+ code: "query_invalid";
126
+ details?: readonly Response.error.Detail[] | undefined;
127
+ message: string;
128
+ };
129
+ requestId: string;
130
+ };
131
+ outputFormat: "json";
132
+ status: 400;
133
+ input: {
134
+ param: {
135
+ address: `0x${string}`;
136
+ };
137
+ } & {
138
+ query?: {
139
+ chainId?: string | string[];
140
+ denomination?: string | string[];
141
+ } | undefined;
142
+ };
143
+ } | {
144
+ output: {
145
+ error: {
146
+ code: "api_key_invalid" | "api_key_missing";
147
+ details?: readonly Response.error.Detail[] | undefined;
148
+ message: string;
149
+ };
150
+ requestId: string;
151
+ };
152
+ outputFormat: "json";
153
+ status: 401;
154
+ input: {
155
+ param: {
156
+ address: `0x${string}`;
157
+ };
158
+ } & {
159
+ query?: {
160
+ chainId?: string | string[];
161
+ denomination?: string | string[];
162
+ } | undefined;
163
+ };
164
+ } | {
165
+ output: null;
166
+ outputFormat: "body";
167
+ status: 402;
168
+ input: {
169
+ param: {
170
+ address: `0x${string}`;
171
+ };
172
+ } & {
173
+ query?: {
174
+ chainId?: string | string[];
175
+ denomination?: string | string[];
176
+ } | undefined;
177
+ };
178
+ } | {
179
+ output: {
180
+ error: {
181
+ code: "api_key_forbidden";
182
+ details?: readonly Response.error.Detail[] | undefined;
183
+ message: string;
184
+ };
185
+ requestId: string;
186
+ };
187
+ outputFormat: "json";
188
+ status: 403;
189
+ input: {
190
+ param: {
191
+ address: `0x${string}`;
192
+ };
193
+ } & {
194
+ query?: {
195
+ chainId?: string | string[];
196
+ denomination?: string | string[];
197
+ } | undefined;
198
+ };
199
+ } | {
200
+ output: {
201
+ error: {
202
+ code: "payment_required" | "rate_limit_exceeded";
203
+ details?: readonly Response.error.Detail[] | undefined;
204
+ message: string;
205
+ };
206
+ requestId: string;
207
+ };
208
+ outputFormat: "json";
209
+ status: 429;
210
+ input: {
211
+ param: {
212
+ address: `0x${string}`;
213
+ };
214
+ } & {
215
+ query?: {
216
+ chainId?: string | string[];
217
+ denomination?: string | string[];
218
+ } | undefined;
219
+ };
220
+ } | {
221
+ output: {
222
+ error: {
223
+ code: "upstream_error";
224
+ details?: readonly Response.error.Detail[] | undefined;
225
+ message: string;
226
+ };
227
+ requestId: string;
228
+ };
229
+ outputFormat: "json";
230
+ status: 502;
231
+ input: {
232
+ param: {
233
+ address: `0x${string}`;
234
+ };
235
+ } & {
236
+ query?: {
237
+ chainId?: string | string[];
238
+ denomination?: string | string[];
239
+ } | undefined;
240
+ };
241
+ };
242
+ };
243
+ }, "/", "/v1/addresses/:address/valuation">;
244
+ export declare namespace addresses {
245
+ /** Options for the address-scoped valuation handlers. */
246
+ type Options = {
247
+ /** FX configuration backing currency conversion. */
248
+ fx?: Fx | undefined;
249
+ };
250
+ /** FX configuration for valuation handlers. */
251
+ type Fx = {
252
+ /** FX rate oracle. Defaults to `FxOracle.ecb()`. */
253
+ oracle?: FxOracle.Oracle | undefined;
254
+ };
255
+ }
256
+ /** Loads the oracle's rate set through the request's store cache. */
257
+ export declare function rateSet(c: Context<App.Environment>, oracle: FxOracle.Oracle): Promise<FxOracle.RateSet>;
258
+ /**
259
+ * Loads rates best-effort to validate the denomination and value a page.
260
+ * Returns `undefined` when unavailable or unnecessary; a known unsupported denomination still throws.
261
+ */
262
+ export declare function ratesFor(c: Context<App.Environment>, options: ratesFor.Options): Promise<FxOracle.RateSet | undefined>;
263
+ export declare namespace ratesFor {
264
+ /** Options for loading a page's valuation rates. */
265
+ type Options = {
266
+ /** Display currencies of the curated holdings appearing on the page. */
267
+ currencies: Iterable<string>;
268
+ /** Currency values are denominated in (uppercase). */
269
+ denomination: string;
270
+ /** FX rate oracle backing currency conversion. */
271
+ oracle: FxOracle.Oracle;
272
+ };
273
+ }
274
+ /** Builds the `pricing` provenance block for a consulted rate set. */
275
+ export declare function pricing(rates: FxOracle.RateSet, oracle: FxOracle.Oracle): {
276
+ asOf: string;
277
+ basis: 'nominal';
278
+ source: string;
279
+ };
280
+ /**
281
+ * Values one holding in the requested denomination via its curated display
282
+ * currency. Returns `null` when the token is unverified, its currency has no
283
+ * rate, or the rate set is unavailable.
284
+ */
285
+ export declare function valuationFor(options: valuationFor.Options): {
286
+ amount: string;
287
+ currency: string;
288
+ } | null;
289
+ export declare namespace valuationFor {
290
+ /** Options for valuing one holding. */
291
+ type Options = {
292
+ /** Holding amount in the token's base units. */
293
+ amount: bigint;
294
+ /** Currency the value is denominated in (uppercase). */
295
+ denomination: string;
296
+ /** Oracle rate set, when loaded. */
297
+ rates: FxOracle.RateSet | undefined;
298
+ /** Display currency and decimal scale backing the holding, when known. */
299
+ token: Pick<VerifiedTokens.Snapshot['list'][number], 'currency' | 'decimals'> | undefined;
300
+ };
301
+ }
302
+ /** Thrown when the requested denomination is not priced by the FX oracle. */
303
+ export declare class UnsupportedDenominationError extends Error {
304
+ name: string;
305
+ constructor(denomination: string, oracle: string);
306
+ }
307
+ //# sourceMappingURL=valuation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valuation.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/valuation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,292 @@
1
+ import { Hono } from 'hono';
2
+ import { Value as core_Value } from 'ox';
3
+ import { BaseError, ContractFunctionRevertedError, ContractFunctionZeroDataError } from 'viem';
4
+ import { Actions } from 'viem/tempo';
5
+ import * as z from 'zod/mini';
6
+ import * as Auth from '../../../internal/Auth.js';
7
+ import * as Cache from '../../../internal/Cache.js';
8
+ import * as OpenApi from '../../../internal/OpenApi.js';
9
+ import * as Response from '../../../internal/Response.js';
10
+ import * as Schema from '../../../internal/Schema.js';
11
+ import * as Store from '../../../internal/Store.js';
12
+ import * as Timing from '../../../internal/Timing.js';
13
+ import * as VerifiedTokens from '../../../internal/VerifiedTokens.js';
14
+ import * as FxOracle from '../FxOracle.js';
15
+ // How many balance reads to fan out per batch. Concurrent reads in one
16
+ // macrotask collapse into a single deployless multicall; small chunks keep
17
+ // each call under the Tempo RPC's per-call size limit.
18
+ const tokenReadChunkSize = 20;
19
+ /** Zod schemas owned by the valuation handlers. */
20
+ export var schema;
21
+ (function (schema) {
22
+ /** A holding's nominal value in the requested denomination. */
23
+ schema.Value = z
24
+ .object({
25
+ amount: z
26
+ .string()
27
+ .check(z.regex(/^\d+(\.\d+)?$/), z.describe('The holding’s nominal value, as a decimal string in `currency`.'), z.meta({ examples: ['1.50'] })),
28
+ currency: z
29
+ .string()
30
+ .check(z.describe('The denomination currency of this value.'), z.meta({ examples: ['USD'] })),
31
+ })
32
+ .check(z.describe('The holding’s nominal value in the requested denomination.'));
33
+ /** Rate provenance for a converted valuation. */
34
+ schema.Pricing = z
35
+ .object({
36
+ asOf: z
37
+ .string()
38
+ .check(z.describe('Publication date of the rate set used for conversion.'), z.meta({ examples: ['2026-07-20'] })),
39
+ basis: z
40
+ .literal('nominal')
41
+ .check(z.describe('Valuation basis: one token unit counts as one unit of its display currency.'), z.meta({ examples: ['nominal'] })),
42
+ source: z
43
+ .string()
44
+ .check(z.describe('FX rate oracle that supplied the conversion rates.'), z.meta({ examples: ['ecb'] })),
45
+ })
46
+ .check(z.describe('Rate provenance for a converted valuation.'));
47
+ /** Schemas for the getAddressValuation operation. */
48
+ let getAddressValuation;
49
+ (function (getAddressValuation) {
50
+ /** Path parameters for address valuation requests. */
51
+ getAddressValuation.Params = z
52
+ .object({
53
+ address: Schema.Address.check(z.describe('The account address whose holdings you want to value.')),
54
+ })
55
+ .check(z.describe('Path parameters for valuing an account’s verified holdings.'));
56
+ /** Query parameters for address valuation requests. */
57
+ getAddressValuation.Query = z
58
+ .strictObject({
59
+ chainId: Schema.ChainIdQuery,
60
+ denomination: Schema.Denomination,
61
+ })
62
+ .check(z.describe('Query parameters for valuing an account’s verified holdings.'));
63
+ /** The nominal valuation of an account's verified holdings. */
64
+ getAddressValuation.Response = z
65
+ .object({
66
+ address: Schema.Address.check(z.describe('The account address this valuation covers.')),
67
+ amount: z
68
+ .string()
69
+ .check(z.regex(/^\d+(\.\d+)?$/), z.describe('The total value of the account’s verified holdings, as a decimal string in `currency`.'), z.meta({ examples: ['160.50'] })),
70
+ currency: z
71
+ .string()
72
+ .check(z.describe('The denomination currency of `amount`.'), z.meta({ examples: ['USD'] })),
73
+ id: z
74
+ .string()
75
+ .check(z.describe('A stable resource ID for this valuation, equal to the account address.'), z.meta({ examples: ['0xbe058e1c4df8a4366a387bf595b284246a93039e'] })),
76
+ pricing: z
77
+ .nullable(schema.Pricing)
78
+ .check(z.describe('Rate provenance, or `null` when every valued holding was already denominated in `currency`.')),
79
+ unpriced: z
80
+ .array(z.string())
81
+ .check(z.describe('Display currencies excluded from `amount` because the FX oracle has no rate for them.'), z.meta({ examples: [['BTC']] })),
82
+ })
83
+ .check(z.describe('The nominal valuation of an account’s verified token holdings.'));
84
+ })(getAddressValuation = schema.getAddressValuation || (schema.getAddressValuation = {}));
85
+ })(schema || (schema = {}));
86
+ /**
87
+ * Creates address-scoped valuation handlers, mounted under the `/addresses`
88
+ * composer. Exposes `GET /:address/valuation`, the holdings valuation.
89
+ */
90
+ export function addresses(options = {}) {
91
+ const oracle = options.fx?.oracle ?? FxOracle.ecb();
92
+ return new Hono().get('/v1/addresses/:address/valuation', Auth.policy({ apiKey: { scopes: ['data:read'] }, mpp: true, public: true }), OpenApi.validate('param', schema.getAddressValuation.Params, {
93
+ code: 'address_invalid',
94
+ message: 'Invalid account address',
95
+ }), OpenApi.validate('query', schema.getAddressValuation.Query, {
96
+ code: 'query_invalid',
97
+ message: 'Invalid query parameters',
98
+ }), OpenApi.describeRoute({
99
+ description: 'Values every verified TIP-20 token an account holds as one unit of its display currency, converts each currency into the requested denomination using the configured FX rates, and returns the total.',
100
+ operationId: 'getAddressValuation',
101
+ responses: OpenApi.responses({
102
+ errors: { 502: 'Could not read balances or exchange rates from an upstream service.' },
103
+ success: {
104
+ description: 'The valuation of this account’s verified holdings.',
105
+ schema: schema.getAddressValuation.Response,
106
+ },
107
+ }),
108
+ summary: 'Get address valuation',
109
+ tags: ['Balances'],
110
+ }), Cache.response({
111
+ cacheControl: Cache.policies.noStore,
112
+ name: 'tempo-api:addresses:v1',
113
+ key: (c) => Cache.urlKey(c, schema.getAddressValuation.Query),
114
+ }), async (c) => {
115
+ if (Auth.narrowAccess)
116
+ return Auth.paidAccessError(c);
117
+ if (OpenApi.narrowValidation)
118
+ return OpenApi.validationError(c, {
119
+ code: 'address_invalid',
120
+ message: 'Invalid request parameters',
121
+ });
122
+ if (OpenApi.narrowValidation)
123
+ return OpenApi.validationError(c, {
124
+ code: 'query_invalid',
125
+ message: 'Invalid request parameters',
126
+ });
127
+ const { address } = c.req.valid('param');
128
+ const query = c.req.valid('query');
129
+ try {
130
+ const valuation = await getAddressValuation(c, {
131
+ address,
132
+ chainId: query.chainId ?? c.get('chainId'),
133
+ denomination: query.denomination ?? 'USD',
134
+ oracle,
135
+ });
136
+ return c.json(Response.validated(schema.getAddressValuation.Response, valuation), 200);
137
+ }
138
+ catch (cause) {
139
+ if (cause instanceof UnsupportedDenominationError)
140
+ return Response.error(c, { code: 'query_invalid', message: cause.message, status: 400 });
141
+ return Response.upstream(c, cause);
142
+ }
143
+ });
144
+ }
145
+ async function getAddressValuation(c, options) {
146
+ const { address, chainId, denomination, oracle } = options;
147
+ const [set, ratesCause] = await rateSet(c, oracle).then((set) => [set, undefined], (cause) => [undefined, cause]);
148
+ if (set && denomination !== set.base && set.rates[denomination] === undefined)
149
+ throw new UnsupportedDenominationError(denomination, oracle.name);
150
+ const snapshot = await VerifiedTokens.snapshot(c, chainId);
151
+ const holdings = await Timing.time(c, 'valuation_balances', async () => {
152
+ const client = c.get('getClient')(chainId);
153
+ if (snapshot.list.length === 0)
154
+ return [];
155
+ // Pin every chunk to one chain-state snapshot.
156
+ const blockNumber = await client.getBlockNumber({ cacheTime: 0 });
157
+ const rows = [];
158
+ for (let index = 0; index < snapshot.list.length; index += tokenReadChunkSize) {
159
+ const group = snapshot.list.slice(index, index + tokenReadChunkSize);
160
+ // Concurrent reads enter viem's shared batch window and become one
161
+ // deployless multicall. A failed read fails the request rather than
162
+ // serving a partial total.
163
+ const results = await Promise.all(group.map(async (token) => {
164
+ try {
165
+ const { amount } = await Actions.token.getBalance(client, {
166
+ account: address,
167
+ blockNumber,
168
+ decimals: token.decimals,
169
+ token: token.address,
170
+ });
171
+ return amount === 0n ? undefined : { amount, token };
172
+ }
173
+ catch (error) {
174
+ // A verified token that is undeployed (zero data) or uninitialized
175
+ // on this chain cannot be held; count it as an empty holding
176
+ // rather than failing the valuation.
177
+ const empty = error instanceof BaseError &&
178
+ error.walk((cause) => cause instanceof ContractFunctionZeroDataError ||
179
+ (cause instanceof ContractFunctionRevertedError &&
180
+ cause.data?.errorName === 'Uninitialized'));
181
+ if (empty)
182
+ return undefined;
183
+ throw error;
184
+ }
185
+ }));
186
+ rows.push(...results.filter((row) => row !== undefined));
187
+ }
188
+ return rows;
189
+ });
190
+ const groups = new Map();
191
+ for (const { amount, token } of holdings) {
192
+ const group = groups.get(token.currency.toLowerCase()) ?? { currency: token.currency, sum: 0n };
193
+ group.sum +=
194
+ token.decimals <= FxOracle.precision
195
+ ? amount * 10n ** BigInt(FxOracle.precision - token.decimals)
196
+ : amount / 10n ** BigInt(token.decimals - FxOracle.precision);
197
+ groups.set(token.currency.toLowerCase(), group);
198
+ }
199
+ let total = 0n;
200
+ const unpriced = [];
201
+ let pricing = null;
202
+ const pending = [...groups.values()].filter((group) => group.currency.toUpperCase() !== denomination);
203
+ for (const group of groups.values())
204
+ if (group.currency.toUpperCase() === denomination)
205
+ total += group.sum;
206
+ if (pending.length > 0) {
207
+ if (!set)
208
+ throw ratesCause;
209
+ for (const group of pending) {
210
+ const rate = FxOracle.rate(set, { from: group.currency.toUpperCase(), to: denomination });
211
+ if (rate === undefined)
212
+ unpriced.push(group.currency);
213
+ else
214
+ total += (group.sum * rate) / 10n ** BigInt(FxOracle.precision);
215
+ }
216
+ pricing = { asOf: set.asOf, basis: 'nominal', source: oracle.name };
217
+ }
218
+ unpriced.sort();
219
+ return {
220
+ address,
221
+ // Floor to 6 dp, the TIP-20 native precision; same-currency sums stay exact.
222
+ amount: core_Value.format(total / 10n ** BigInt(FxOracle.precision - 6), 6),
223
+ currency: denomination,
224
+ id: address,
225
+ pricing,
226
+ unpriced,
227
+ };
228
+ }
229
+ /** Loads the oracle's rate set through the request's store cache. */
230
+ export function rateSet(c, oracle) {
231
+ return Timing.time(c, 'valuation_rates', () => Store.memoize(() => oracle.rates(), {
232
+ key: `fx:v1:${oracle.name}`,
233
+ store: c.get('store'),
234
+ ttl: oracle.ttl,
235
+ }));
236
+ }
237
+ /**
238
+ * Loads rates best-effort to validate the denomination and value a page.
239
+ * Returns `undefined` when unavailable or unnecessary; a known unsupported denomination still throws.
240
+ */
241
+ export async function ratesFor(c, options) {
242
+ const { denomination, oracle } = options;
243
+ const rates = await rateSet(c, oracle).catch(() => undefined);
244
+ if (!rates)
245
+ return undefined;
246
+ if (denomination !== rates.base && rates.rates[denomination] === undefined)
247
+ throw new UnsupportedDenominationError(denomination, oracle.name);
248
+ const conversion = [...options.currencies].some((currency) => currency.toUpperCase() !== denomination);
249
+ if (!conversion)
250
+ return undefined;
251
+ return rates;
252
+ }
253
+ /** Builds the `pricing` provenance block for a consulted rate set. */
254
+ export function pricing(rates, oracle) {
255
+ return { asOf: rates.asOf, basis: 'nominal', source: oracle.name };
256
+ }
257
+ /**
258
+ * Values one holding in the requested denomination via its curated display
259
+ * currency. Returns `null` when the token is unverified, its currency has no
260
+ * rate, or the rate set is unavailable.
261
+ */
262
+ export function valuationFor(options) {
263
+ const { amount, denomination, rates, token } = options;
264
+ if (!token)
265
+ return null;
266
+ const rate = (() => {
267
+ if (token.currency.toUpperCase() === denomination)
268
+ return 10n ** BigInt(FxOracle.precision);
269
+ if (!rates)
270
+ return undefined;
271
+ return FxOracle.rate(rates, { from: token.currency.toUpperCase(), to: denomination });
272
+ })();
273
+ if (rate === undefined)
274
+ return null;
275
+ // Normalize to the shared 18-dp scale, convert, then floor to 6 dp.
276
+ const scaled = token.decimals <= FxOracle.precision
277
+ ? amount * 10n ** BigInt(FxOracle.precision - token.decimals)
278
+ : amount / 10n ** BigInt(token.decimals - FxOracle.precision);
279
+ const value = (scaled * rate) / 10n ** BigInt(FxOracle.precision);
280
+ return {
281
+ amount: core_Value.format(value / 10n ** BigInt(FxOracle.precision - 6), 6),
282
+ currency: denomination,
283
+ };
284
+ }
285
+ /** Thrown when the requested denomination is not priced by the FX oracle. */
286
+ export class UnsupportedDenominationError extends Error {
287
+ name = 'Valuation.UnsupportedDenominationError';
288
+ constructor(denomination, oracle) {
289
+ super(`Denomination "${denomination}" is not priced by the "${oracle}" FX oracle`);
290
+ }
291
+ }
292
+ //# sourceMappingURL=valuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valuation.js","sourceRoot":"","sources":["../../../../src/apps/data/routes/valuation.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"verified-tokens.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/verified-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAI3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAIzD,yDAAyD;AACzD,yBAAiB,MAAM,CAAC;IAkCtB;;;;OAIG;IACI,MAAM,KAAK;;;;;;;qBAUjB,CAAA;IAED;;;OAGG;IACI,MAAM,KAAK;;;;;;;;qBAOjB,CAAA;IAED,0DAA0D;IACnD,MAAM,MAAM;;qBAIuD,CAAA;IAE1E,oDAAoD;IACpD,UAAiB,kBAAkB,CAAC;QAClC,oDAAoD;QAC7C,MAAM,KAAK;;;;;;0BAQmD,CAAA;QAErE,qDAAqD;QAC9C,MAAM,QAAQ;;;;;;;;;;yBAGpB,CAAA;KACF;IAED,4DAA4D;IAC5D,UAAiB,0BAA0B,CAAC;QAC1C,mEAAmE;QAC5D,MAAM,KAAK;;;;;0BAEsE,CAAA;QAExF,sEAAsE;QAC/D,MAAM,QAAQ;;yBASpB,CAAA;KACF;IAED,kDAAkD;IAClD,UAAiB,gBAAgB,CAAC;QAChC,oDAAoD;QAC7C,MAAM,KAAK;;;;;0BAEyD,CAAA;KAC5E;CACF;AAED;;;;GAIG;AACH,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAqJ7B"}
1
+ {"version":3,"file":"verified-tokens.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/verified-tokens.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAI3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAIzD,yDAAyD;AACzD,yBAAiB,MAAM,CAAC;IA8CtB;;;;OAIG;IACI,MAAM,KAAK;;;;;;;qBAUjB,CAAA;IAED;;;OAGG;IACI,MAAM,KAAK;;;;;;;;qBAOjB,CAAA;IAED,0DAA0D;IACnD,MAAM,MAAM;;qBAIuD,CAAA;IAE1E,oDAAoD;IACpD,UAAiB,kBAAkB,CAAC;QAClC,oDAAoD;QAC7C,MAAM,KAAK;;;;;;0BAQmD,CAAA;QAErE,qDAAqD;QAC9C,MAAM,QAAQ;;;;;;;;;;yBAGpB,CAAA;KACF;IAED,4DAA4D;IAC5D,UAAiB,0BAA0B,CAAC;QAC1C,mEAAmE;QAC5D,MAAM,KAAK;;;;;0BAEsE,CAAA;QAExF,sEAAsE;QAC/D,MAAM,QAAQ;;yBASpB,CAAA;KACF;IAED,kDAAkD;IAClD,UAAiB,gBAAgB,CAAC;QAChC,oDAAoD;QAC7C,MAAM,KAAK;;;;;0BAEyD,CAAA;KAC5E;CACF;AAED;;;;GAIG;AACH,wBAAgB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAqJ7B"}
@@ -14,17 +14,19 @@ export var schema;
14
14
  const fields = {
15
15
  currency: z
16
16
  .string()
17
- .check(z.minLength(1), z.describe('The currency label for this token, such as `USD` for USD-denominated stablecoins.')),
17
+ .check(z.minLength(1), z.describe('The currency label for this token, such as `USD` for USD-denominated stablecoins.'), z.meta({ examples: ['USD'] })),
18
18
  decimals: z
19
19
  .number()
20
- .check(z.int(), z.gte(0), z.lte(255), z.describe('The number of decimal places the token uses; Tempo stablecoins typically use 6.')),
20
+ .check(z.int(), z.gte(0), z.lte(255), z.describe('The number of decimal places the token uses; Tempo stablecoins typically use 6.'), z.meta({ examples: [6] })),
21
21
  logoUri: z
22
22
  .optional(z.url({ protocol: /^https$/ }))
23
- .check(z.describe('The curated HTTPS URL for this token’s logo image, when one is set.')),
24
- name: z.string().check(z.minLength(1), z.describe('The token’s human-readable name.')),
23
+ .check(z.describe('The curated HTTPS URL for this token’s logo image, when one is set.'), z.meta({ examples: ['https://assets.tempo.xyz/icons/usdc.svg'] })),
24
+ name: z
25
+ .string()
26
+ .check(z.minLength(1), z.describe('The token’s human-readable name.'), z.meta({ examples: ['USD Coin'] })),
25
27
  symbol: z
26
28
  .string()
27
- .check(z.minLength(1), z.describe('The short ticker symbol wallets and apps show for this token.')),
29
+ .check(z.minLength(1), z.describe('The short ticker symbol wallets and apps show for this token.'), z.meta({ examples: ['USDC'] })),
28
30
  };
29
31
  /**
30
32
  * Verified-token write/input fields, without the server-derived `id`. Reused