tapimo 0.9.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/dist/ApiKey.d.ts +2 -1
  2. package/dist/ApiKey.d.ts.map +1 -1
  3. package/dist/ApiKeys.d.ts +4 -2
  4. package/dist/ApiKeys.d.ts.map +1 -1
  5. package/dist/ApiKeys.js +26 -1
  6. package/dist/ApiKeys.js.map +1 -1
  7. package/dist/App.d.ts +4292 -3708
  8. package/dist/App.d.ts.map +1 -1
  9. package/dist/App.js +1 -0
  10. package/dist/App.js.map +1 -1
  11. package/dist/Webhooks.d.ts +21 -20
  12. package/dist/Webhooks.d.ts.map +1 -1
  13. package/dist/Webhooks.js +66 -23
  14. package/dist/Webhooks.js.map +1 -1
  15. package/dist/admin/App.d.ts +91 -84
  16. package/dist/admin/App.d.ts.map +1 -1
  17. package/dist/admin/apps/api-keys.d.ts +26 -17
  18. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  19. package/dist/admin/apps/api-keys.js +6 -0
  20. package/dist/admin/apps/api-keys.js.map +1 -1
  21. package/dist/admin/apps/organizations.d.ts +4 -2
  22. package/dist/admin/apps/organizations.d.ts.map +1 -1
  23. package/dist/admin/apps/verified-tokens.d.ts +168 -168
  24. package/dist/admin/ui.generated.d.ts +1 -1
  25. package/dist/admin/ui.generated.js +69 -69
  26. package/dist/admin/ui.generated.js.map +1 -1
  27. package/dist/analytics/Analytics.d.ts.map +1 -1
  28. package/dist/analytics/Analytics.js +26 -0
  29. package/dist/analytics/Analytics.js.map +1 -1
  30. package/dist/apps/Zones.d.ts +4280 -84
  31. package/dist/apps/Zones.d.ts.map +1 -1
  32. package/dist/apps/Zones.js +30 -10
  33. package/dist/apps/Zones.js.map +1 -1
  34. package/dist/apps/data/App.d.ts +5799 -4929
  35. package/dist/apps/data/App.d.ts.map +1 -1
  36. package/dist/apps/data/FxOracle.d.ts +4 -5
  37. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  38. package/dist/apps/data/FxOracle.js +19 -4
  39. package/dist/apps/data/FxOracle.js.map +1 -1
  40. package/dist/apps/data/routes/activities.d.ts +3391 -492
  41. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  42. package/dist/apps/data/routes/activities.js +372 -29
  43. package/dist/apps/data/routes/activities.js.map +1 -1
  44. package/dist/apps/data/routes/addresses.d.ts +853 -339
  45. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  46. package/dist/apps/data/routes/balances.d.ts +10 -10
  47. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  48. package/dist/apps/data/routes/balances.js +145 -83
  49. package/dist/apps/data/routes/balances.js.map +1 -1
  50. package/dist/apps/data/routes/blocks.d.ts +123 -123
  51. package/dist/apps/data/routes/coingecko.d.ts +169 -169
  52. package/dist/apps/data/routes/earn.d.ts +455 -1
  53. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  54. package/dist/apps/data/routes/earn.js +369 -45
  55. package/dist/apps/data/routes/earn.js.map +1 -1
  56. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  57. package/dist/apps/data/routes/exchanges.js +114 -118
  58. package/dist/apps/data/routes/exchanges.js.map +1 -1
  59. package/dist/apps/data/routes/fee-amm.d.ts +24 -24
  60. package/dist/apps/data/routes/indexer.d.ts +35 -34
  61. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  62. package/dist/apps/data/routes/indexer.js +3 -2
  63. package/dist/apps/data/routes/indexer.js.map +1 -1
  64. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  65. package/dist/apps/data/routes/receipts.js +68 -47
  66. package/dist/apps/data/routes/receipts.js.map +1 -1
  67. package/dist/apps/data/routes/rpc.d.ts +31 -31
  68. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  69. package/dist/apps/data/routes/rpc.js +5 -1
  70. package/dist/apps/data/routes/rpc.js.map +1 -1
  71. package/dist/apps/data/routes/tokenlist.d.ts +12 -12
  72. package/dist/apps/data/routes/tokens.d.ts +461 -459
  73. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  74. package/dist/apps/data/routes/transactions.d.ts +313 -305
  75. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  76. package/dist/apps/data/routes/transactions.js +25 -23
  77. package/dist/apps/data/routes/transactions.js.map +1 -1
  78. package/dist/apps/data/routes/transfers.d.ts +108 -86
  79. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  80. package/dist/apps/data/routes/transfers.js +618 -105
  81. package/dist/apps/data/routes/transfers.js.map +1 -1
  82. package/dist/apps/data/routes/valuation.d.ts +21 -21
  83. package/dist/apps/data/routes/valuation.d.ts.map +1 -1
  84. package/dist/apps/data/routes/valuation.js +2 -2
  85. package/dist/apps/data/routes/valuation.js.map +1 -1
  86. package/dist/apps/data/routes/webhooks.d.ts +519 -868
  87. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  88. package/dist/apps/data/routes/webhooks.js +642 -353
  89. package/dist/apps/data/routes/webhooks.js.map +1 -1
  90. package/dist/apps/data/routes/zones.d.ts +31 -31
  91. package/dist/apps/data/routes/zones.d.ts.map +1 -1
  92. package/dist/apps/data/routes/zones.js +4 -2
  93. package/dist/apps/data/routes/zones.js.map +1 -1
  94. package/dist/apps/funding/routes/deposit-addresses.js +1 -1
  95. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  96. package/dist/apps/funding/routes/providers.d.ts +13 -13
  97. package/dist/apps/funding/routes/quotes.d.ts +89 -89
  98. package/dist/apps/funding/routes/transfers.d.ts +36 -36
  99. package/dist/apps/funding/routes/transfers.js +1 -1
  100. package/dist/apps/funding/routes/transfers.js.map +1 -1
  101. package/dist/apps/management/App.d.ts +11 -309
  102. package/dist/apps/management/App.d.ts.map +1 -1
  103. package/dist/apps/management/routes/api-keys.d.ts +74 -74
  104. package/dist/apps/management/routes/billing.js +1 -1
  105. package/dist/apps/management/routes/billing.js.map +1 -1
  106. package/dist/apps/management/routes/faucet.d.ts +35 -35
  107. package/dist/apps/management/routes/faucet.js +2 -2
  108. package/dist/apps/management/routes/faucet.js.map +1 -1
  109. package/dist/apps/management/routes/invitations.d.ts +134 -134
  110. package/dist/apps/management/routes/invite-links.d.ts +80 -80
  111. package/dist/apps/management/routes/members.d.ts +69 -69
  112. package/dist/apps/management/routes/orgs.d.ts +98 -98
  113. package/dist/apps/management/routes/projects.d.ts +60 -60
  114. package/dist/apps/management/routes/usage.d.ts +72 -72
  115. package/dist/apps/management/routes/verified-token-requests.d.ts +83 -83
  116. package/dist/apps/management/routes/webhooks.d.ts +203 -618
  117. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  118. package/dist/apps/mcp.d.ts.map +1 -1
  119. package/dist/apps/mcp.js +4 -1
  120. package/dist/apps/mcp.js.map +1 -1
  121. package/dist/apps/mpp/App.d.ts +56 -44
  122. package/dist/apps/mpp/App.d.ts.map +1 -1
  123. package/dist/apps/mpp/Mpp.d.ts +3 -0
  124. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  125. package/dist/apps/mpp/Mpp.js +3 -0
  126. package/dist/apps/mpp/Mpp.js.map +1 -1
  127. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  128. package/dist/apps/mpp/internal/Adapter.js +9 -2
  129. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  130. package/dist/db/Db.d.ts +4 -2
  131. package/dist/db/Db.d.ts.map +1 -1
  132. package/dist/db/Db.js +75 -15
  133. package/dist/db/Db.js.map +1 -1
  134. package/dist/db/Schema.d.ts +19 -0
  135. package/dist/db/Schema.d.ts.map +1 -1
  136. package/dist/db/Schema.js +24 -0
  137. package/dist/db/Schema.js.map +1 -1
  138. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  139. package/dist/db/tables/sponsoredTransactions.js +4 -1
  140. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  141. package/dist/db/tables/webhookQueueEvents.d.ts +122 -0
  142. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -0
  143. package/dist/db/tables/webhookQueueEvents.js +160 -0
  144. package/dist/db/tables/webhookQueueEvents.js.map +1 -0
  145. package/dist/db/tables/webhookSubscriptions.d.ts +58 -3
  146. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  147. package/dist/db/tables/webhookSubscriptions.js +86 -3
  148. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  149. package/dist/internal/Auth.d.ts +3 -0
  150. package/dist/internal/Auth.d.ts.map +1 -1
  151. package/dist/internal/Auth.js +6 -4
  152. package/dist/internal/Auth.js.map +1 -1
  153. package/dist/internal/MetricSink.d.ts +139 -3
  154. package/dist/internal/MetricSink.d.ts.map +1 -1
  155. package/dist/internal/MetricSink.js +144 -4
  156. package/dist/internal/MetricSink.js.map +1 -1
  157. package/dist/internal/RateLimit.d.ts +4 -6
  158. package/dist/internal/RateLimit.d.ts.map +1 -1
  159. package/dist/internal/RateLimit.js +15 -14
  160. package/dist/internal/RateLimit.js.map +1 -1
  161. package/dist/internal/Schema.js +1 -1
  162. package/dist/internal/Schema.js.map +1 -1
  163. package/dist/internal/Store.d.ts +2 -1
  164. package/dist/internal/Store.d.ts.map +1 -1
  165. package/dist/internal/Store.js +57 -18
  166. package/dist/internal/Store.js.map +1 -1
  167. package/dist/internal/Tidx.d.ts +1 -3
  168. package/dist/internal/Tidx.d.ts.map +1 -1
  169. package/dist/internal/Tidx.js +1 -3
  170. package/dist/internal/Tidx.js.map +1 -1
  171. package/dist/internal/Value.d.ts +2 -0
  172. package/dist/internal/Value.d.ts.map +1 -1
  173. package/dist/internal/Value.js +25 -0
  174. package/dist/internal/Value.js.map +1 -1
  175. package/dist/internal/Viem.d.ts.map +1 -1
  176. package/dist/internal/Viem.js +2 -1
  177. package/dist/internal/Viem.js.map +1 -1
  178. package/dist/internal/WebhookDestination.d.ts +2 -0
  179. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  180. package/dist/internal/WebhookDestination.js +11 -0
  181. package/dist/internal/WebhookDestination.js.map +1 -1
  182. package/dist/internal/WebhookTransfer.d.ts +75 -0
  183. package/dist/internal/WebhookTransfer.d.ts.map +1 -0
  184. package/dist/internal/WebhookTransfer.js +299 -0
  185. package/dist/internal/WebhookTransfer.js.map +1 -0
  186. package/dist/internal/Webhooks.d.ts +176 -0
  187. package/dist/internal/Webhooks.d.ts.map +1 -1
  188. package/dist/internal/Webhooks.js +216 -20
  189. package/dist/internal/Webhooks.js.map +1 -1
  190. package/dist/internal/funding/Provider.d.ts +4 -0
  191. package/dist/internal/funding/Provider.d.ts.map +1 -1
  192. package/dist/internal/funding/Provider.js +11 -7
  193. package/dist/internal/funding/Provider.js.map +1 -1
  194. package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
  195. package/dist/internal/funding/Reconciliation.js +128 -0
  196. package/dist/internal/funding/Reconciliation.js.map +1 -1
  197. package/dist/internal/funding/providers/relay.d.ts +6 -4
  198. package/dist/internal/funding/providers/relay.d.ts.map +1 -1
  199. package/dist/internal/funding/providers/relay.js +71 -9
  200. package/dist/internal/funding/providers/relay.js.map +1 -1
  201. package/package.json +4 -4
  202. package/src/ApiKeys.test.ts +20 -0
  203. package/src/ApiKeys.ts +28 -1
  204. package/src/App.test.ts +10 -8
  205. package/src/App.ts +1 -0
  206. package/src/Client.test-d.ts +61 -5
  207. package/src/Webhooks.bench.ts +714 -0
  208. package/src/Webhooks.memory.bench.ts +250 -0
  209. package/src/Webhooks.test.ts +77 -6
  210. package/src/Webhooks.ts +85 -29
  211. package/src/admin/apps/api-keys.test.ts +9 -0
  212. package/src/admin/apps/api-keys.ts +15 -0
  213. package/src/admin/ui/src/lib/query-client.ts +3 -2
  214. package/src/admin/ui/src/routes/api-keys.tsx +31 -9
  215. package/src/admin/ui.generated.ts +69 -69
  216. package/src/analytics/Analytics.test.ts +8 -0
  217. package/src/analytics/Analytics.ts +26 -0
  218. package/src/apps/Zones.test.ts +23 -5
  219. package/src/apps/Zones.ts +31 -10
  220. package/src/apps/composition.test.ts +1 -0
  221. package/src/apps/data/App.test.ts +2 -2
  222. package/src/apps/data/FxOracle.test.ts +18 -0
  223. package/src/apps/data/FxOracle.ts +28 -5
  224. package/src/apps/data/routes/activities.bench.ts +41 -0
  225. package/src/apps/data/routes/activities.test.ts +122 -2
  226. package/src/apps/data/routes/activities.ts +435 -32
  227. package/src/apps/data/routes/balances.bench.ts +21 -0
  228. package/src/apps/data/routes/balances.test.ts +119 -10
  229. package/src/apps/data/routes/balances.ts +164 -97
  230. package/src/apps/data/routes/blocks.bench.ts +34 -0
  231. package/src/apps/data/routes/blocks.test.ts +12 -6
  232. package/src/apps/data/routes/coingecko.bench.ts +53 -0
  233. package/src/apps/data/routes/earn.bench.ts +71 -0
  234. package/src/apps/data/routes/earn.test.ts +197 -0
  235. package/src/apps/data/routes/earn.ts +487 -45
  236. package/src/apps/data/routes/exchanges.bench.ts +85 -0
  237. package/src/apps/data/routes/exchanges.test.ts +7 -6
  238. package/src/apps/data/routes/exchanges.ts +124 -117
  239. package/src/apps/data/routes/fee-amm.bench.ts +13 -0
  240. package/src/apps/data/routes/indexer.bench.ts +8 -0
  241. package/src/apps/data/routes/indexer.test.ts +2 -1
  242. package/src/apps/data/routes/indexer.ts +3 -2
  243. package/src/apps/data/routes/receipts.bench.ts +39 -0
  244. package/src/apps/data/routes/receipts.test.ts +24 -7
  245. package/src/apps/data/routes/receipts.ts +67 -50
  246. package/src/apps/data/routes/rpc.bench.ts +14 -0
  247. package/src/apps/data/routes/rpc.test.ts +27 -0
  248. package/src/apps/data/routes/rpc.ts +5 -1
  249. package/src/apps/data/routes/tokenlist.bench.ts +3 -0
  250. package/src/apps/data/routes/tokens.bench.ts +76 -0
  251. package/src/apps/data/routes/tokens.test.ts +51 -0
  252. package/src/apps/data/routes/transactions.bench.ts +40 -0
  253. package/src/apps/data/routes/transactions.test.ts +42 -0
  254. package/src/apps/data/routes/transactions.ts +44 -39
  255. package/src/apps/data/routes/transfers.bench.ts +28 -0
  256. package/src/apps/data/routes/transfers.test.ts +402 -24
  257. package/src/apps/data/routes/transfers.ts +708 -101
  258. package/src/apps/data/routes/valuation.bench.ts +14 -0
  259. package/src/apps/data/routes/valuation.test.ts +26 -0
  260. package/src/apps/data/routes/valuation.ts +6 -2
  261. package/src/apps/data/routes/verified-tokens.bench.ts +8 -0
  262. package/src/apps/data/routes/webhooks.bench.ts +26 -0
  263. package/src/apps/data/routes/webhooks.scan.test.ts +326 -0
  264. package/src/apps/data/routes/webhooks.test.ts +466 -135
  265. package/src/apps/data/routes/webhooks.ts +820 -429
  266. package/src/apps/data/routes/zones.bench.ts +32 -0
  267. package/src/apps/data/routes/zones.test.ts +1 -1
  268. package/src/apps/data/routes/zones.ts +7 -2
  269. package/src/apps/funding/routes/chains.test.ts +1 -1
  270. package/src/apps/funding/routes/deposit-addresses.test.ts +1 -1
  271. package/src/apps/funding/routes/deposit-addresses.ts +1 -1
  272. package/src/apps/funding/routes/providers.test.ts +1 -1
  273. package/src/apps/funding/routes/quotes.test.ts +2 -2
  274. package/src/apps/funding/routes/transfers.test.ts +3 -6
  275. package/src/apps/funding/routes/transfers.ts +1 -1
  276. package/src/apps/management/routes/billing.ts +1 -1
  277. package/src/apps/management/routes/faucet.ts +2 -2
  278. package/src/apps/management/routes/me.test.ts +31 -0
  279. package/src/apps/mcp.ts +4 -1
  280. package/src/apps/mpp/Mpp.test.ts +13 -1
  281. package/src/apps/mpp/Mpp.ts +8 -0
  282. package/src/apps/mpp/internal/Adapter.ts +10 -2
  283. package/src/db/Db.test.ts +40 -6
  284. package/src/db/Db.ts +114 -19
  285. package/src/db/Schema.ts +32 -0
  286. package/src/db/tables/sponsoredTransactions.ts +9 -2
  287. package/src/db/tables/webhookQueueEvents.ts +285 -0
  288. package/src/db/tables/webhookSubscriptions.ts +131 -4
  289. package/src/internal/Auth.test.ts +61 -50
  290. package/src/internal/Auth.ts +9 -4
  291. package/src/internal/EarnVaults.test.ts +2 -2
  292. package/src/internal/MetricSink.test.ts +575 -0
  293. package/src/internal/MetricSink.ts +325 -10
  294. package/src/internal/RateLimit.test.ts +23 -18
  295. package/src/internal/RateLimit.ts +23 -15
  296. package/src/internal/Schema.ts +1 -1
  297. package/src/internal/Store.test.ts +99 -13
  298. package/src/internal/Store.ts +52 -17
  299. package/src/internal/Tidx.test.ts +4 -4
  300. package/src/internal/Tidx.ts +1 -3
  301. package/src/internal/Value.test.ts +25 -0
  302. package/src/internal/Value.ts +29 -0
  303. package/src/internal/Viem.test.ts +8 -0
  304. package/src/internal/Viem.ts +2 -1
  305. package/src/internal/WebhookDestination.test.ts +20 -0
  306. package/src/internal/WebhookDestination.ts +10 -0
  307. package/src/internal/WebhookTransfer.test.ts +89 -0
  308. package/src/internal/WebhookTransfer.ts +430 -0
  309. package/src/internal/Webhooks.test.ts +616 -0
  310. package/src/internal/Webhooks.ts +412 -24
  311. package/src/internal/funding/Provider.test.ts +48 -8
  312. package/src/internal/funding/Provider.ts +12 -7
  313. package/src/internal/funding/Reconciliation.local.test.ts +3 -1
  314. package/src/internal/funding/Reconciliation.test.ts +1240 -0
  315. package/src/internal/funding/Reconciliation.ts +136 -0
  316. package/src/internal/funding/SourceObservation.test.ts +1 -0
  317. package/src/internal/funding/providers/index.test.ts +73 -3
  318. package/src/internal/funding/providers/relay.test.ts +2 -9
  319. package/src/internal/funding/providers/relay.ts +72 -13
@@ -248,6 +248,146 @@ export namespace schema {
248
248
 
249
249
  /** The classified activity item variants (discriminated by `type`). */
250
250
  export const items = [
251
+ z
252
+ .object({
253
+ ...base,
254
+ data: z.object({
255
+ assets: Schema.DecimalString,
256
+ caller: Schema.Address,
257
+ receiver: Schema.Address,
258
+ shares: Schema.DecimalString,
259
+ signer: Signer,
260
+ status: z.literal('completed'),
261
+ vault: Schema.Address,
262
+ }),
263
+ type: z.literal('assets-deposited'),
264
+ })
265
+ .check(z.meta({ title: 'Assets deposited' })),
266
+ z
267
+ .object({
268
+ ...base,
269
+ data: z.object({
270
+ caller: Schema.Address,
271
+ receivedEngineShares: Schema.DecimalString,
272
+ receiver: Schema.Address,
273
+ requestedVenueShares: Schema.DecimalString,
274
+ shares: Schema.DecimalString,
275
+ signer: Signer,
276
+ status: z.literal('completed'),
277
+ vault: Schema.Address,
278
+ }),
279
+ type: z.literal('shares-deposited'),
280
+ })
281
+ .check(z.meta({ title: 'Shares deposited' })),
282
+ z
283
+ .object({
284
+ ...base,
285
+ data: z.object({
286
+ assets: Schema.DecimalString,
287
+ caller: Schema.Address,
288
+ receiver: Schema.Address,
289
+ shares: Schema.DecimalString,
290
+ signer: Signer,
291
+ status: z.literal('completed'),
292
+ vault: Schema.Address,
293
+ }),
294
+ type: z.literal('shares-redeemed'),
295
+ })
296
+ .check(z.meta({ title: 'Shares redeemed' })),
297
+ z
298
+ .object({
299
+ ...base,
300
+ data: z.object({
301
+ assets: Schema.DecimalString,
302
+ caller: Schema.Address,
303
+ sharesBurned: Schema.DecimalString,
304
+ receiver: Schema.Address,
305
+ signer: Signer,
306
+ status: z.literal('completed'),
307
+ vault: Schema.Address,
308
+ }),
309
+ type: z.literal('assets-withdrawn'),
310
+ })
311
+ .check(z.meta({ title: 'Assets withdrawn' })),
312
+ z
313
+ .object({
314
+ ...base,
315
+ data: z.object({
316
+ receiver: Schema.Address,
317
+ requestId: Schema.Hash,
318
+ requester: Schema.Address,
319
+ shares: Schema.DecimalString,
320
+ signer: Signer,
321
+ status: z.literal('pending'),
322
+ vault: Schema.Address,
323
+ }),
324
+ type: z.literal('shares-redemption-requested'),
325
+ })
326
+ .check(z.meta({ title: 'Share redemption requested' })),
327
+ z
328
+ .object({
329
+ ...base,
330
+ data: z.object({
331
+ asset: Schema.Address,
332
+ assets: Schema.DecimalString,
333
+ receiver: Schema.Address,
334
+ requestId: Schema.Hash,
335
+ shares: Schema.DecimalString,
336
+ signer: Signer,
337
+ status: z.literal('completed'),
338
+ vault: Schema.Address,
339
+ }),
340
+ type: z.literal('shares-redemption-finalized'),
341
+ })
342
+ .check(z.meta({ title: 'Share redemption finalized' })),
343
+ z
344
+ .object({
345
+ ...base,
346
+ data: z.object({
347
+ receiver: Schema.Address,
348
+ requestId: Schema.Hash,
349
+ shares: Schema.DecimalString,
350
+ signer: Signer,
351
+ status: z.literal('cancelled'),
352
+ vault: Schema.Address,
353
+ }),
354
+ type: z.literal('shares-redemption-cancelled'),
355
+ })
356
+ .check(z.meta({ title: 'Share redemption cancelled' })),
357
+ z
358
+ .object({
359
+ ...base,
360
+ data: z.object({
361
+ actionId: Schema.Hash,
362
+ assets: Schema.DecimalString,
363
+ inputAmount: Schema.DecimalString,
364
+ inputToken: Schema.Address,
365
+ shares: Schema.DecimalString,
366
+ signer: Signer,
367
+ status: z.literal('completed'),
368
+ vault: Schema.Address,
369
+ zoneDepositHash: Schema.Hash,
370
+ }),
371
+ type: z.literal('private-assets-deposited'),
372
+ })
373
+ .check(z.meta({ title: 'Private assets deposited' })),
374
+ z
375
+ .object({
376
+ ...base,
377
+ data: z.object({
378
+ actionId: Schema.Hash,
379
+ assets: Schema.DecimalString,
380
+ outputAmount: Schema.DecimalString,
381
+ outputToken: Schema.Address,
382
+ shares: Schema.DecimalString,
383
+ signer: Signer,
384
+ status: z.literal('completed'),
385
+ vault: Schema.Address,
386
+ zoneDepositHash: Schema.Hash,
387
+ }),
388
+ type: z.literal('private-shares-redeemed'),
389
+ })
390
+ .check(z.meta({ title: 'Private shares redeemed' })),
251
391
  z
252
392
  .object({
253
393
  ...base,
@@ -1550,9 +1690,11 @@ type RawItem = {
1550
1690
  * OpenAPI schema titles. Used to stamp {@link Item.title} during {@link list}.
1551
1691
  */
1552
1692
  const titleByType: Record<Item['type'], string> = {
1553
- approval: 'Allowance approved',
1554
1693
  'access-key-created': 'Access key created',
1555
1694
  'access-key-revoked': 'Access key revoked',
1695
+ approval: 'Allowance approved',
1696
+ 'assets-deposited': 'Assets deposited',
1697
+ 'assets-withdrawn': 'Assets withdrawn',
1556
1698
  'blacklist-updated': 'Blacklist updated',
1557
1699
  burn: 'Token burned',
1558
1700
  'burn-blocked': 'Burn blocked',
@@ -1581,11 +1723,18 @@ const titleByType: Record<Item['type'], string> = {
1581
1723
  'pair-created': 'Trading pair created',
1582
1724
  'policy-admin-set': 'Policy admin set',
1583
1725
  'policy-created': 'Policy created',
1726
+ 'private-assets-deposited': 'Private assets deposited',
1727
+ 'private-shares-redeemed': 'Private shares redeemed',
1584
1728
  'reward-distributed': 'Reward distributed',
1585
1729
  'reward-recipient-set': 'Reward recipient set',
1586
1730
  'role-admin-set': 'Role admin set',
1587
1731
  'role-membership-set': 'Role membership set',
1588
1732
  'session-closed': 'Session closed',
1733
+ 'shares-deposited': 'Shares deposited',
1734
+ 'shares-redeemed': 'Shares redeemed',
1735
+ 'shares-redemption-cancelled': 'Share redemption cancelled',
1736
+ 'shares-redemption-finalized': 'Share redemption finalized',
1737
+ 'shares-redemption-requested': 'Share redemption requested',
1589
1738
  'spending-limit-updated': 'Spending limit updated',
1590
1739
  swap: 'Tokens swapped',
1591
1740
  'token-created': 'Token created',
@@ -1624,6 +1773,15 @@ const titleByEventName: Record<string, string> = {
1624
1773
  BlacklistUpdated: 'Blacklist updated',
1625
1774
  Burn: 'Token burned',
1626
1775
  BurnBlocked: 'Burn blocked',
1776
+ Deposited: 'Assets deposited',
1777
+ EarnDeposit: 'Private assets deposited',
1778
+ EarnRedeem: 'Private shares redeemed',
1779
+ RedeemCancelled: 'Share redemption cancelled',
1780
+ RedeemFinalized: 'Share redemption finalized',
1781
+ RedeemRequested: 'Share redemption requested',
1782
+ Redeemed: 'Shares redeemed',
1783
+ VenueSharesDeposited: 'Shares deposited',
1784
+ WithdrewExact: 'Assets withdrawn',
1627
1785
  ChannelClosed: 'Channel closed',
1628
1786
  ChannelOpened: 'Channel opened',
1629
1787
  CloseRequestCancelled: 'Channel close cancelled',
@@ -1853,7 +2011,7 @@ export function addresses(options: addresses.Options = {}) {
1853
2011
  const { address } = c.req.valid('param')
1854
2012
  const query = c.req.valid('query')
1855
2013
 
1856
- // Cursor pages carry current valuations and curated verification data.
2014
+ // Cursor pages can carry current valuations and curated verification data.
1857
2015
  if (query.cursor !== undefined) Cache.setPolicy(c, Cache.policies.metadata)
1858
2016
 
1859
2017
  try {
@@ -1884,7 +2042,7 @@ export function addresses(options: addresses.Options = {}) {
1884
2042
  // Build immutable token and structured amount copies from RPC metadata.
1885
2043
  const { items, rates } = await enrichTokens(c, {
1886
2044
  chainId,
1887
- denomination: query['valuation.currency'] ?? 'USD',
2045
+ denomination: query['valuation.currency'],
1888
2046
  include: query.include,
1889
2047
  items: unenrichedItems,
1890
2048
  oracle,
@@ -1964,7 +2122,7 @@ export function transactions(options: transactions.Options = {}) {
1964
2122
  }),
1965
2123
  Cache.response<App.Environment>({
1966
2124
  // Default to no-store so a 404 does not mask the eventual mined result.
1967
- // Successful responses use the metadata policy for current valuations.
2125
+ // Successful responses use the metadata policy for optional valuations.
1968
2126
  cacheControl: Cache.policies.noStore,
1969
2127
  name: 'tempo-api:transactions:v1',
1970
2128
  key: (c) => Cache.urlKey(c, schema.getTransactionActivities.Query),
@@ -2012,13 +2170,13 @@ export function transactions(options: transactions.Options = {}) {
2012
2170
  status: 404,
2013
2171
  })
2014
2172
 
2015
- // Mined activity still carries current valuations and verification data.
2173
+ // Mined activity can carry current valuations and verification data.
2016
2174
  Cache.setPolicy(c, Cache.policies.metadata)
2017
2175
 
2018
2176
  // Build immutable token and structured amount copies from RPC metadata.
2019
2177
  const { items, rates } = await enrichTokens(c, {
2020
2178
  chainId,
2021
- denomination: query['valuation.currency'] ?? 'USD',
2179
+ denomination: query['valuation.currency'],
2022
2180
  include: query.include,
2023
2181
  items: unenrichedItems,
2024
2182
  oracle,
@@ -2697,6 +2855,243 @@ function classifyFromLogsCore(
2697
2855
  'amount' in e.args,
2698
2856
  )
2699
2857
 
2858
+ const privateDeposit = finalEvents.find((event) => event.eventName === 'EarnDeposit')
2859
+ if (privateDeposit) {
2860
+ const args = privateDeposit.args as {
2861
+ actionId: Hex.Hex
2862
+ earnShares: bigint
2863
+ earnVault: Address.Address
2864
+ inputAmount: bigint
2865
+ inputToken: Address.Address
2866
+ vaultAssets: bigint
2867
+ zoneDepositHash: Hex.Hex
2868
+ }
2869
+ return [
2870
+ {
2871
+ ...itemBase(logIndexOfEvent(privateDeposit)),
2872
+ data: {
2873
+ actionId: args.actionId,
2874
+ assets: args.vaultAssets.toString(),
2875
+ inputAmount: args.inputAmount.toString(),
2876
+ inputToken: args.inputToken.toLowerCase() as Address.Address,
2877
+ shares: args.earnShares.toString(),
2878
+ signer,
2879
+ status: 'completed',
2880
+ vault: args.earnVault.toLowerCase() as Address.Address,
2881
+ zoneDepositHash: args.zoneDepositHash,
2882
+ },
2883
+ type: 'private-assets-deposited',
2884
+ },
2885
+ ]
2886
+ }
2887
+
2888
+ const privateRedeem = finalEvents.find((event) => event.eventName === 'EarnRedeem')
2889
+ if (privateRedeem) {
2890
+ const args = privateRedeem.args as {
2891
+ actionId: Hex.Hex
2892
+ earnShares: bigint
2893
+ earnVault: Address.Address
2894
+ outputAmount: bigint
2895
+ outputToken: Address.Address
2896
+ vaultAssets: bigint
2897
+ zoneDepositHash: Hex.Hex
2898
+ }
2899
+ return [
2900
+ {
2901
+ ...itemBase(logIndexOfEvent(privateRedeem)),
2902
+ data: {
2903
+ actionId: args.actionId,
2904
+ assets: args.vaultAssets.toString(),
2905
+ outputAmount: args.outputAmount.toString(),
2906
+ outputToken: args.outputToken.toLowerCase() as Address.Address,
2907
+ shares: args.earnShares.toString(),
2908
+ signer,
2909
+ status: 'completed',
2910
+ vault: args.earnVault.toLowerCase() as Address.Address,
2911
+ zoneDepositHash: args.zoneDepositHash,
2912
+ },
2913
+ type: 'private-shares-redeemed',
2914
+ },
2915
+ ]
2916
+ }
2917
+
2918
+ const deposited = finalEvents.find((event) => event.eventName === 'Deposited')
2919
+ if (deposited) {
2920
+ const args = deposited.args as {
2921
+ assets: bigint
2922
+ caller: Address.Address
2923
+ earnShares: bigint
2924
+ receiver: Address.Address
2925
+ }
2926
+ return [
2927
+ {
2928
+ ...itemBase(logIndexOfEvent(deposited)),
2929
+ data: {
2930
+ assets: args.assets.toString(),
2931
+ caller: args.caller.toLowerCase() as Address.Address,
2932
+ receiver: args.receiver.toLowerCase() as Address.Address,
2933
+ shares: args.earnShares.toString(),
2934
+ signer,
2935
+ status: 'completed',
2936
+ vault: deposited.address.toLowerCase() as Address.Address,
2937
+ },
2938
+ type: 'assets-deposited',
2939
+ },
2940
+ ]
2941
+ }
2942
+
2943
+ const venueDeposit = finalEvents.find((event) => event.eventName === 'VenueSharesDeposited')
2944
+ if (venueDeposit) {
2945
+ const args = venueDeposit.args as {
2946
+ caller: Address.Address
2947
+ earnShares: bigint
2948
+ receivedEngineShares: bigint
2949
+ receiver: Address.Address
2950
+ requestedVenueShares: bigint
2951
+ }
2952
+ return [
2953
+ {
2954
+ ...itemBase(logIndexOfEvent(venueDeposit)),
2955
+ data: {
2956
+ caller: args.caller.toLowerCase() as Address.Address,
2957
+ receivedEngineShares: args.receivedEngineShares.toString(),
2958
+ receiver: args.receiver.toLowerCase() as Address.Address,
2959
+ requestedVenueShares: args.requestedVenueShares.toString(),
2960
+ shares: args.earnShares.toString(),
2961
+ signer,
2962
+ status: 'completed',
2963
+ vault: venueDeposit.address.toLowerCase() as Address.Address,
2964
+ },
2965
+ type: 'shares-deposited',
2966
+ },
2967
+ ]
2968
+ }
2969
+
2970
+ const redeemed = finalEvents.find((event) => event.eventName === 'Redeemed')
2971
+ if (redeemed) {
2972
+ const args = redeemed.args as {
2973
+ assets: bigint
2974
+ caller: Address.Address
2975
+ earnShares: bigint
2976
+ receiver: Address.Address
2977
+ }
2978
+ return [
2979
+ {
2980
+ ...itemBase(logIndexOfEvent(redeemed)),
2981
+ data: {
2982
+ assets: args.assets.toString(),
2983
+ caller: args.caller.toLowerCase() as Address.Address,
2984
+ receiver: args.receiver.toLowerCase() as Address.Address,
2985
+ shares: args.earnShares.toString(),
2986
+ signer,
2987
+ status: 'completed',
2988
+ vault: redeemed.address.toLowerCase() as Address.Address,
2989
+ },
2990
+ type: 'shares-redeemed',
2991
+ },
2992
+ ]
2993
+ }
2994
+
2995
+ const withdrew = finalEvents.find((event) => event.eventName === 'WithdrewExact')
2996
+ if (withdrew) {
2997
+ const args = withdrew.args as {
2998
+ assets: bigint
2999
+ caller: Address.Address
3000
+ earnSharesBurned: bigint
3001
+ receiver: Address.Address
3002
+ }
3003
+ return [
3004
+ {
3005
+ ...itemBase(logIndexOfEvent(withdrew)),
3006
+ data: {
3007
+ assets: args.assets.toString(),
3008
+ caller: args.caller.toLowerCase() as Address.Address,
3009
+ sharesBurned: args.earnSharesBurned.toString(),
3010
+ receiver: args.receiver.toLowerCase() as Address.Address,
3011
+ signer,
3012
+ status: 'completed',
3013
+ vault: withdrew.address.toLowerCase() as Address.Address,
3014
+ },
3015
+ type: 'assets-withdrawn',
3016
+ },
3017
+ ]
3018
+ }
3019
+
3020
+ const requested = finalEvents.find((event) => event.eventName === 'RedeemRequested')
3021
+ if (requested) {
3022
+ const args = requested.args as {
3023
+ earnShares: bigint
3024
+ receiver: Address.Address
3025
+ requestId: Hex.Hex
3026
+ requester: Address.Address
3027
+ }
3028
+ return [
3029
+ {
3030
+ ...itemBase(logIndexOfEvent(requested)),
3031
+ data: {
3032
+ receiver: args.receiver.toLowerCase() as Address.Address,
3033
+ requestId: args.requestId,
3034
+ requester: args.requester.toLowerCase() as Address.Address,
3035
+ shares: args.earnShares.toString(),
3036
+ signer,
3037
+ status: 'pending',
3038
+ vault: requested.address.toLowerCase() as Address.Address,
3039
+ },
3040
+ type: 'shares-redemption-requested',
3041
+ },
3042
+ ]
3043
+ }
3044
+
3045
+ const finalized = finalEvents.find((event) => event.eventName === 'RedeemFinalized')
3046
+ if (finalized) {
3047
+ const args = finalized.args as {
3048
+ asset: Address.Address
3049
+ assets: bigint
3050
+ earnShares: bigint
3051
+ receiver: Address.Address
3052
+ requestId: Hex.Hex
3053
+ }
3054
+ return [
3055
+ {
3056
+ ...itemBase(logIndexOfEvent(finalized)),
3057
+ data: {
3058
+ asset: args.asset.toLowerCase() as Address.Address,
3059
+ assets: args.assets.toString(),
3060
+ receiver: args.receiver.toLowerCase() as Address.Address,
3061
+ requestId: args.requestId,
3062
+ shares: args.earnShares.toString(),
3063
+ signer,
3064
+ status: 'completed',
3065
+ vault: finalized.address.toLowerCase() as Address.Address,
3066
+ },
3067
+ type: 'shares-redemption-finalized',
3068
+ },
3069
+ ]
3070
+ }
3071
+
3072
+ const cancelled = finalEvents.find((event) => event.eventName === 'RedeemCancelled')
3073
+ if (cancelled) {
3074
+ const args = cancelled.args as {
3075
+ earnShares: bigint
3076
+ receiver: Address.Address
3077
+ requestId: Hex.Hex
3078
+ }
3079
+ return [
3080
+ {
3081
+ ...itemBase(logIndexOfEvent(cancelled)),
3082
+ data: {
3083
+ receiver: args.receiver.toLowerCase() as Address.Address,
3084
+ requestId: args.requestId,
3085
+ shares: args.earnShares.toString(),
3086
+ signer,
3087
+ status: 'cancelled',
3088
+ vault: cancelled.address.toLowerCase() as Address.Address,
3089
+ },
3090
+ type: 'shares-redemption-cancelled',
3091
+ },
3092
+ ]
3093
+ }
3094
+
2700
3095
  // Swap: a transfer into the DEX paired with one out of the DEX.
2701
3096
  const toDex = transfers.find((e) =>
2702
3097
  Address.isEqual((e.args as { to: Address.Address }).to, Addresses.stablecoinDex),
@@ -3954,7 +4349,11 @@ function decodeRows(rows: readonly Row[]) {
3954
4349
  transactionHash: r.txHash as `0x${string}`,
3955
4350
  transactionIndex: r.txIdx,
3956
4351
  }))
3957
- return parseEventLogs({ abi: [...Abis.abis], logs: viemLogs, strict: false })
4352
+ return parseEventLogs({
4353
+ abi: [...Abis.abis, ...Abis.earnRouter, ...Abis.earnVault],
4354
+ logs: viemLogs,
4355
+ strict: false,
4356
+ })
3958
4357
  }
3959
4358
 
3960
4359
  /**
@@ -4088,27 +4487,27 @@ async function enrichTokens(
4088
4487
  const { chainId, denomination, include, items, oracle } = options
4089
4488
  const addresses = new Set<Address.Address>()
4090
4489
  for (const item of items) collectTokens(item, addresses)
4091
- // Valuation keys off the curated snapshot; a snapshot failure degrades the
4092
- // values to `null` rather than failing the feed.
4490
+ const includeLogoUri = include.includes('token.logoUri')
4491
+ const includeVerified = include.includes('token.verified')
4492
+ // Curated data is needed only for requested valuation or token fields.
4093
4493
  const snapshot =
4094
- addresses.size > 0
4494
+ addresses.size > 0 && (denomination !== undefined || includeLogoUri || includeVerified)
4095
4495
  ? await VerifiedTokens.snapshot(c, chainId).catch(() => undefined)
4096
4496
  : undefined
4097
- const rates = await Valuation.ratesFor(c, {
4098
- currencies: snapshot
4099
- ? [...addresses].flatMap((address) => {
4100
- const held = snapshot.byAddress.get(address)?.currency
4101
- return held === undefined ? [] : [held]
4102
- })
4103
- : [],
4104
- denomination,
4105
- oracle,
4106
- })
4497
+ const rates = denomination
4498
+ ? await Valuation.ratesFor(c, {
4499
+ currencies: snapshot
4500
+ ? [...addresses].flatMap((address) => {
4501
+ const held = snapshot.byAddress.get(address)?.currency
4502
+ return held === undefined ? [] : [held]
4503
+ })
4504
+ : [],
4505
+ denomination,
4506
+ oracle,
4507
+ })
4508
+ : undefined
4107
4509
  if (addresses.size === 0) return { items: items as Item[], rates }
4108
4510
 
4109
- const includeLogoUri = include.includes('token.logoUri')
4110
- const includeVerified = include.includes('token.verified')
4111
-
4112
4511
  const resolved = await Timing.time(c, 'tokens', () =>
4113
4512
  Promise.all(
4114
4513
  [...addresses].map(async (address) => {
@@ -4145,7 +4544,7 @@ declare namespace enrichTokens {
4145
4544
  type Options = {
4146
4545
  chainId: z.output<typeof Schema.ChainId>
4147
4546
  /** Currency the amount valuations are denominated in (uppercase). */
4148
- denomination: string
4547
+ denomination?: string | undefined
4149
4548
  include: readonly z.output<typeof schema.Include>[]
4150
4549
  items: readonly UnenrichedItem[]
4151
4550
  /** FX rate oracle backing amount valuation. */
@@ -4173,13 +4572,17 @@ function enrichItem(
4173
4572
  currency: meta.currency,
4174
4573
  decimals: meta.decimals,
4175
4574
  }),
4176
- // Valued via the curated display currency, never the on-chain metadata.
4177
- valuation: Valuation.valuationFor({
4178
- amount: BigInt(t.amount),
4179
- denomination: valuation.denomination,
4180
- rates: valuation.rates,
4181
- token: valuation.snapshot?.byAddress.get(t.address.toLowerCase()),
4182
- }),
4575
+ ...(valuation.denomination
4576
+ ? {
4577
+ // Valued via the curated display currency, never the on-chain metadata.
4578
+ valuation: Valuation.valuationFor({
4579
+ amount: BigInt(t.amount),
4580
+ denomination: valuation.denomination,
4581
+ rates: valuation.rates,
4582
+ token: valuation.snapshot?.byAddress.get(t.address.toLowerCase()),
4583
+ }),
4584
+ }
4585
+ : {}),
4183
4586
  }
4184
4587
  data[key] = {
4185
4588
  address: t.address,
@@ -4198,7 +4601,7 @@ declare namespace enrichItem {
4198
4601
  /** Valuation inputs threaded from {@link enrichTokens}. */
4199
4602
  type Valuation = {
4200
4603
  /** Currency the amount valuations are denominated in (uppercase). */
4201
- denomination: string
4604
+ denomination?: string | undefined
4202
4605
  /** Oracle rate set, when loaded. */
4203
4606
  rates: FxOracle.RateSet | undefined
4204
4607
  /** Compiled verified-token snapshot, when available. */
@@ -0,0 +1,21 @@
1
+ import * as QueryBench from '../../../../test/QueryBench.js'
2
+
3
+ const address = '0x68f94cfca22e5969c0553bbeab00a2acde88939b'
4
+
5
+ QueryBench.bench({
6
+ name: 'getAddressBalances',
7
+ path: `/v1/addresses/${address}/balances`,
8
+ queries: [
9
+ 'currency=USD',
10
+ 'feeEligible=true',
11
+ 'include=totalCount',
12
+ 'valuation.currency=USD',
13
+ 'verified=true',
14
+ ],
15
+ })
16
+
17
+ QueryBench.bench({
18
+ name: 'getAddressBalance',
19
+ path: `/v1/addresses/${address}/balances/${QueryBench.pathUsd}`,
20
+ queries: ['valuation.currency=USD'],
21
+ })