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.
Files changed (376) hide show
  1. package/dist/App.d.ts +15830 -7220
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +9 -1
  4. package/dist/App.js.map +1 -1
  5. package/dist/Scope.d.ts +4 -0
  6. package/dist/Scope.d.ts.map +1 -1
  7. package/dist/Scope.js +5 -0
  8. package/dist/Scope.js.map +1 -1
  9. package/dist/admin/App.d.ts +1011 -412
  10. package/dist/admin/App.d.ts.map +1 -1
  11. package/dist/admin/App.js +4 -0
  12. package/dist/admin/App.js.map +1 -1
  13. package/dist/admin/apps/api-keys.d.ts +2 -1
  14. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  15. package/dist/admin/apps/early-access.d.ts +148 -0
  16. package/dist/admin/apps/early-access.d.ts.map +1 -0
  17. package/dist/admin/apps/early-access.js +133 -0
  18. package/dist/admin/apps/early-access.js.map +1 -0
  19. package/dist/admin/apps/organizations.d.ts +124 -1
  20. package/dist/admin/apps/organizations.d.ts.map +1 -1
  21. package/dist/admin/apps/organizations.js +97 -6
  22. package/dist/admin/apps/organizations.js.map +1 -1
  23. package/dist/admin/apps/verified-tokens.d.ts +526 -1
  24. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  25. package/dist/admin/apps/verified-tokens.js +214 -1
  26. package/dist/admin/apps/verified-tokens.js.map +1 -1
  27. package/dist/admin/ui.generated.d.ts +1 -1
  28. package/dist/admin/ui.generated.d.ts.map +1 -1
  29. package/dist/admin/ui.generated.js +95 -75
  30. package/dist/admin/ui.generated.js.map +1 -1
  31. package/dist/analytics/Analytics.d.ts.map +1 -1
  32. package/dist/analytics/Analytics.js +20 -0
  33. package/dist/analytics/Analytics.js.map +1 -1
  34. package/dist/analytics/tables/requestEvents.d.ts +18 -0
  35. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  36. package/dist/analytics/tables/requestEvents.js +36 -7
  37. package/dist/analytics/tables/requestEvents.js.map +1 -1
  38. package/dist/apps/data/App.d.ts +6260 -4924
  39. package/dist/apps/data/App.d.ts.map +1 -1
  40. package/dist/apps/data/App.js +11 -6
  41. package/dist/apps/data/App.js.map +1 -1
  42. package/dist/apps/data/FundingQuoteProviders.d.ts +34 -1
  43. package/dist/apps/data/FundingQuoteProviders.d.ts.map +1 -1
  44. package/dist/apps/data/FundingQuoteProviders.js +194 -16
  45. package/dist/apps/data/FundingQuoteProviders.js.map +1 -1
  46. package/dist/apps/data/FxOracle.d.ts +71 -0
  47. package/dist/apps/data/FxOracle.d.ts.map +1 -0
  48. package/dist/apps/data/FxOracle.js +97 -0
  49. package/dist/apps/data/FxOracle.js.map +1 -0
  50. package/dist/apps/data/index.d.ts +1 -0
  51. package/dist/apps/data/index.d.ts.map +1 -1
  52. package/dist/apps/data/index.js +1 -0
  53. package/dist/apps/data/index.js.map +1 -1
  54. package/dist/apps/data/routes/activities.d.ts +3599 -1382
  55. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  56. package/dist/apps/data/routes/activities.js +250 -88
  57. package/dist/apps/data/routes/activities.js.map +1 -1
  58. package/dist/apps/data/routes/addresses.d.ts +872 -251
  59. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  60. package/dist/apps/data/routes/addresses.js +11 -9
  61. package/dist/apps/data/routes/addresses.js.map +1 -1
  62. package/dist/apps/data/routes/balances.d.ts +77 -26
  63. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  64. package/dist/apps/data/routes/balances.js +88 -45
  65. package/dist/apps/data/routes/balances.js.map +1 -1
  66. package/dist/apps/data/routes/blocks.d.ts +39 -39
  67. package/dist/apps/data/routes/coingecko.d.ts +54 -54
  68. package/dist/apps/data/routes/exchanges.d.ts +856 -105
  69. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  70. package/dist/apps/data/routes/exchanges.js +518 -76
  71. package/dist/apps/data/routes/exchanges.js.map +1 -1
  72. package/dist/apps/data/routes/fee-amm.d.ts +81 -67
  73. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  74. package/dist/apps/data/routes/fee-amm.js +76 -91
  75. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  76. package/dist/apps/data/routes/funding.d.ts +80 -36
  77. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  78. package/dist/apps/data/routes/funding.js +65 -31
  79. package/dist/apps/data/routes/funding.js.map +1 -1
  80. package/dist/apps/data/routes/receipts.d.ts +392 -315
  81. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  82. package/dist/apps/data/routes/receipts.js +152 -77
  83. package/dist/apps/data/routes/receipts.js.map +1 -1
  84. package/dist/apps/data/routes/tokens.d.ts +167 -174
  85. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  86. package/dist/apps/data/routes/tokens.js +15 -13
  87. package/dist/apps/data/routes/tokens.js.map +1 -1
  88. package/dist/apps/data/routes/transactions.d.ts +277 -536
  89. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  90. package/dist/apps/data/routes/transactions.js +96 -77
  91. package/dist/apps/data/routes/transactions.js.map +1 -1
  92. package/dist/apps/data/routes/transfers.d.ts +157 -81
  93. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  94. package/dist/apps/data/routes/transfers.js +272 -130
  95. package/dist/apps/data/routes/transfers.js.map +1 -1
  96. package/dist/apps/data/routes/valuation.d.ts +307 -0
  97. package/dist/apps/data/routes/valuation.d.ts.map +1 -0
  98. package/dist/apps/data/routes/valuation.js +292 -0
  99. package/dist/apps/data/routes/valuation.js.map +1 -0
  100. package/dist/apps/data/routes/verified-tokens.d.ts +36 -36
  101. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  102. package/dist/apps/data/routes/verified-tokens.js +7 -5
  103. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  104. package/dist/apps/data/routes/webhooks.d.ts +103 -123
  105. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  106. package/dist/apps/data/routes/webhooks.js +124 -25
  107. package/dist/apps/data/routes/webhooks.js.map +1 -1
  108. package/dist/apps/index.d.ts +2 -1
  109. package/dist/apps/index.d.ts.map +1 -1
  110. package/dist/apps/index.js +2 -1
  111. package/dist/apps/index.js.map +1 -1
  112. package/dist/apps/management/App.d.ts +8554 -1692
  113. package/dist/apps/management/App.d.ts.map +1 -1
  114. package/dist/apps/management/App.js +12 -1
  115. package/dist/apps/management/App.js.map +1 -1
  116. package/dist/apps/management/routes/api-keys.d.ts +7 -0
  117. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  118. package/dist/apps/management/routes/api-keys.js +17 -3
  119. package/dist/apps/management/routes/api-keys.js.map +1 -1
  120. package/dist/apps/management/routes/billing.d.ts +157 -162
  121. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  122. package/dist/apps/management/routes/billing.js +31 -23
  123. package/dist/apps/management/routes/billing.js.map +1 -1
  124. package/dist/apps/management/routes/faucet.d.ts +232 -0
  125. package/dist/apps/management/routes/faucet.d.ts.map +1 -0
  126. package/dist/apps/management/routes/faucet.js +154 -0
  127. package/dist/apps/management/routes/faucet.js.map +1 -0
  128. package/dist/apps/management/routes/invitations.d.ts +60 -60
  129. package/dist/apps/management/routes/invite-links.d.ts +49 -20
  130. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  131. package/dist/apps/management/routes/invite-links.js +26 -1
  132. package/dist/apps/management/routes/invite-links.js.map +1 -1
  133. package/dist/apps/management/routes/me.d.ts +6 -6
  134. package/dist/apps/management/routes/members.d.ts +6 -6
  135. package/dist/apps/management/routes/orgs.d.ts +42 -42
  136. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  137. package/dist/apps/management/routes/orgs.js +5 -0
  138. package/dist/apps/management/routes/orgs.js.map +1 -1
  139. package/dist/apps/management/routes/projects.d.ts +44 -44
  140. package/dist/apps/management/routes/usage.d.ts +3 -0
  141. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  142. package/dist/apps/management/routes/usage.js +4 -0
  143. package/dist/apps/management/routes/usage.js.map +1 -1
  144. package/dist/apps/management/routes/verified-token-requests.d.ts +697 -0
  145. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -0
  146. package/dist/apps/management/routes/verified-token-requests.js +271 -0
  147. package/dist/apps/management/routes/verified-token-requests.js.map +1 -0
  148. package/dist/apps/management/routes/webhooks.d.ts +6977 -0
  149. package/dist/apps/management/routes/webhooks.d.ts.map +1 -0
  150. package/dist/apps/management/routes/webhooks.js +573 -0
  151. package/dist/apps/management/routes/webhooks.js.map +1 -0
  152. package/dist/apps/mpp/App.d.ts +363 -0
  153. package/dist/apps/mpp/App.d.ts.map +1 -0
  154. package/dist/apps/mpp/App.js +72 -0
  155. package/dist/apps/mpp/App.js.map +1 -0
  156. package/dist/apps/mpp/Mpp.d.ts +178 -0
  157. package/dist/apps/mpp/Mpp.d.ts.map +1 -0
  158. package/dist/apps/mpp/Mpp.js +183 -0
  159. package/dist/apps/mpp/Mpp.js.map +1 -0
  160. package/dist/apps/mpp/index.d.ts +3 -0
  161. package/dist/apps/mpp/index.d.ts.map +1 -0
  162. package/dist/apps/mpp/index.js +3 -0
  163. package/dist/apps/mpp/index.js.map +1 -0
  164. package/dist/apps/relay/App.d.ts.map +1 -1
  165. package/dist/apps/relay/App.js +56 -9
  166. package/dist/apps/relay/App.js.map +1 -1
  167. package/dist/db/Db.d.ts +6 -0
  168. package/dist/db/Db.d.ts.map +1 -1
  169. package/dist/db/Db.js +110 -0
  170. package/dist/db/Db.js.map +1 -1
  171. package/dist/db/Schema.d.ts +53 -0
  172. package/dist/db/Schema.d.ts.map +1 -1
  173. package/dist/db/Schema.js +56 -0
  174. package/dist/db/Schema.js.map +1 -1
  175. package/dist/db/tables/earlyAccess.d.ts +50 -0
  176. package/dist/db/tables/earlyAccess.d.ts.map +1 -0
  177. package/dist/db/tables/earlyAccess.js +63 -0
  178. package/dist/db/tables/earlyAccess.js.map +1 -0
  179. package/dist/db/tables/enabledBillingSources.d.ts +73 -0
  180. package/dist/db/tables/enabledBillingSources.d.ts.map +1 -0
  181. package/dist/db/tables/enabledBillingSources.js +69 -0
  182. package/dist/db/tables/enabledBillingSources.js.map +1 -0
  183. package/dist/db/tables/invitations.d.ts.map +1 -1
  184. package/dist/db/tables/invitations.js +3 -0
  185. package/dist/db/tables/invitations.js.map +1 -1
  186. package/dist/db/tables/inviteLinks.d.ts +10 -2
  187. package/dist/db/tables/inviteLinks.d.ts.map +1 -1
  188. package/dist/db/tables/inviteLinks.js +10 -1
  189. package/dist/db/tables/inviteLinks.js.map +1 -1
  190. package/dist/db/tables/organizations.d.ts +5 -2
  191. package/dist/db/tables/organizations.d.ts.map +1 -1
  192. package/dist/db/tables/organizations.js +13 -2
  193. package/dist/db/tables/organizations.js.map +1 -1
  194. package/dist/db/tables/sponsoredTransactions.d.ts +2 -0
  195. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  196. package/dist/db/tables/sponsoredTransactions.js +2 -0
  197. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  198. package/dist/db/tables/verifiedTokenRequests.d.ts +94 -0
  199. package/dist/db/tables/verifiedTokenRequests.d.ts.map +1 -0
  200. package/dist/db/tables/verifiedTokenRequests.js +120 -0
  201. package/dist/db/tables/verifiedTokenRequests.js.map +1 -0
  202. package/dist/db/tables/webhookSubscriptions.d.ts +14 -0
  203. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  204. package/dist/db/tables/webhookSubscriptions.js +16 -0
  205. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  206. package/dist/handlers/internal/utils.d.ts +1 -16
  207. package/dist/handlers/internal/utils.d.ts.map +1 -1
  208. package/dist/handlers/internal/utils.js +17 -6
  209. package/dist/handlers/internal/utils.js.map +1 -1
  210. package/dist/handlers/relay.d.ts.map +1 -1
  211. package/dist/handlers/relay.js +37 -5
  212. package/dist/handlers/relay.js.map +1 -1
  213. package/dist/internal/Auth.d.ts +11 -2
  214. package/dist/internal/Auth.d.ts.map +1 -1
  215. package/dist/internal/Auth.js +14 -47
  216. package/dist/internal/Auth.js.map +1 -1
  217. package/dist/internal/FundingQuotes.d.ts +147 -47
  218. package/dist/internal/FundingQuotes.d.ts.map +1 -1
  219. package/dist/internal/FundingQuotes.js +119 -33
  220. package/dist/internal/FundingQuotes.js.map +1 -1
  221. package/dist/internal/Log.d.ts +37 -5
  222. package/dist/internal/Log.d.ts.map +1 -1
  223. package/dist/internal/Log.js +52 -3
  224. package/dist/internal/Log.js.map +1 -1
  225. package/dist/internal/MetricSink.d.ts.map +1 -1
  226. package/dist/internal/MetricSink.js +24 -0
  227. package/dist/internal/MetricSink.js.map +1 -1
  228. package/dist/internal/OpenApi.d.ts +2 -2
  229. package/dist/internal/OpenApi.d.ts.map +1 -1
  230. package/dist/internal/OpenApi.js +3 -0
  231. package/dist/internal/OpenApi.js.map +1 -1
  232. package/dist/internal/Response.d.ts +2 -2
  233. package/dist/internal/Response.d.ts.map +1 -1
  234. package/dist/internal/Response.js +12 -4
  235. package/dist/internal/Response.js.map +1 -1
  236. package/dist/internal/Schema.d.ts +14 -5
  237. package/dist/internal/Schema.d.ts.map +1 -1
  238. package/dist/internal/Schema.js +23 -5
  239. package/dist/internal/Schema.js.map +1 -1
  240. package/dist/internal/Value.d.ts +18 -0
  241. package/dist/internal/Value.d.ts.map +1 -1
  242. package/dist/internal/Value.js +11 -1
  243. package/dist/internal/Value.js.map +1 -1
  244. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  245. package/dist/internal/VerifiedTokens.js +10 -1
  246. package/dist/internal/VerifiedTokens.js.map +1 -1
  247. package/dist/internal/Webhooks.d.ts +24 -3
  248. package/dist/internal/Webhooks.d.ts.map +1 -1
  249. package/dist/internal/Webhooks.js +34 -8
  250. package/dist/internal/Webhooks.js.map +1 -1
  251. package/package.json +7 -2
  252. package/src/App.test.ts +9 -4
  253. package/src/App.ts +23 -3
  254. package/src/Client.test-d.ts +733 -20
  255. package/src/Scope.ts +5 -0
  256. package/src/admin/App.test.ts +4 -0
  257. package/src/admin/App.ts +4 -0
  258. package/src/admin/apps/early-access.test.ts +125 -0
  259. package/src/admin/apps/early-access.ts +176 -0
  260. package/src/admin/apps/organizations.test.ts +86 -2
  261. package/src/admin/apps/organizations.ts +155 -31
  262. package/src/admin/apps/scopes.test.ts +5 -0
  263. package/src/admin/apps/verified-tokens.test.ts +201 -0
  264. package/src/admin/apps/verified-tokens.ts +532 -286
  265. package/src/admin/ui/plugin.ts +2 -1
  266. package/src/admin/ui/src/lib/early-access.ts +63 -0
  267. package/src/admin/ui/src/lib/organizations.test.ts +81 -1
  268. package/src/admin/ui/src/lib/organizations.ts +92 -0
  269. package/src/admin/ui/src/lib/verified-tokens.ts +79 -0
  270. package/src/admin/ui/src/routeTree.gen.ts +33 -2
  271. package/src/admin/ui/src/routes/__root.tsx +2 -1
  272. package/src/admin/ui/src/routes/api-keys.tsx +1 -1
  273. package/src/admin/ui/src/routes/early-access.tsx +162 -0
  274. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +103 -0
  275. package/src/admin/ui/src/routes/verified-tokens.tsx +230 -19
  276. package/src/admin/ui.generated.ts +95 -94
  277. package/src/analytics/Analytics.test.ts +83 -0
  278. package/src/analytics/Analytics.ts +20 -0
  279. package/src/analytics/tables/requestEvents.ts +60 -7
  280. package/src/apps/composition.test.ts +11 -2
  281. package/src/apps/data/App.test.ts +1 -1
  282. package/src/apps/data/App.ts +22 -14
  283. package/src/apps/data/FundingQuoteProviders.test.ts +297 -4
  284. package/src/apps/data/FundingQuoteProviders.ts +255 -29
  285. package/src/apps/data/FxOracle.test.ts +118 -0
  286. package/src/apps/data/FxOracle.ts +153 -0
  287. package/src/apps/data/index.ts +1 -0
  288. package/src/apps/data/routes/activities.test.ts +177 -3
  289. package/src/apps/data/routes/activities.ts +441 -132
  290. package/src/apps/data/routes/addresses.ts +19 -9
  291. package/src/apps/data/routes/balances.test.ts +148 -11
  292. package/src/apps/data/routes/balances.ts +140 -51
  293. package/src/apps/data/routes/exchanges.test.ts +544 -9
  294. package/src/apps/data/routes/exchanges.ts +690 -103
  295. package/src/apps/data/routes/fee-amm.test.ts +47 -23
  296. package/src/apps/data/routes/fee-amm.ts +98 -119
  297. package/src/apps/data/routes/funding.test.ts +113 -8
  298. package/src/apps/data/routes/funding.ts +77 -51
  299. package/src/apps/data/routes/receipts.test.ts +129 -23
  300. package/src/apps/data/routes/receipts.ts +205 -100
  301. package/src/apps/data/routes/tokens.test.ts +43 -0
  302. package/src/apps/data/routes/tokens.ts +28 -13
  303. package/src/apps/data/routes/transactions.test.ts +72 -19
  304. package/src/apps/data/routes/transactions.ts +162 -92
  305. package/src/apps/data/routes/transfers.test.ts +341 -31
  306. package/src/apps/data/routes/transfers.ts +358 -158
  307. package/src/apps/data/routes/valuation.test.ts +437 -0
  308. package/src/apps/data/routes/valuation.ts +423 -0
  309. package/src/apps/data/routes/verified-tokens.ts +14 -2
  310. package/src/apps/data/routes/webhooks.test.ts +56 -8
  311. package/src/apps/data/routes/webhooks.ts +144 -27
  312. package/src/apps/index.ts +2 -1
  313. package/src/apps/management/App.ts +13 -0
  314. package/src/apps/management/routes/api-keys.test.ts +14 -0
  315. package/src/apps/management/routes/api-keys.ts +27 -3
  316. package/src/apps/management/routes/billing.test.ts +152 -20
  317. package/src/apps/management/routes/billing.ts +34 -18
  318. package/src/apps/management/routes/faucet.test.ts +87 -0
  319. package/src/apps/management/routes/faucet.ts +201 -0
  320. package/src/apps/management/routes/invite-links.test.ts +117 -0
  321. package/src/apps/management/routes/invite-links.ts +43 -1
  322. package/src/apps/management/routes/me.test.ts +9 -99
  323. package/src/apps/management/routes/orgs.test.ts +45 -2
  324. package/src/apps/management/routes/orgs.ts +6 -0
  325. package/src/apps/management/routes/scopes.test.ts +1 -0
  326. package/src/apps/management/routes/usage.test.ts +6 -0
  327. package/src/apps/management/routes/usage.ts +7 -0
  328. package/src/apps/management/routes/verified-token-requests.test.ts +377 -0
  329. package/src/apps/management/routes/verified-token-requests.ts +397 -0
  330. package/src/apps/management/routes/webhooks.test.ts +426 -0
  331. package/src/apps/management/routes/webhooks.ts +672 -0
  332. package/src/apps/mpp/App.ts +86 -0
  333. package/src/apps/mpp/Mpp.test.ts +193 -0
  334. package/src/apps/mpp/Mpp.ts +353 -0
  335. package/src/apps/mpp/index.ts +2 -0
  336. package/src/apps/mpp/internal/Adapter.ts +11 -0
  337. package/src/apps/mpp/internal/Error.ts +9 -0
  338. package/src/apps/mpp/internal/Idempotency.ts +7 -0
  339. package/src/apps/mpp/internal/Screening.ts +10 -0
  340. package/src/apps/relay/App.test.ts +88 -6
  341. package/src/apps/relay/App.ts +61 -9
  342. package/src/db/Db.test.ts +19 -0
  343. package/src/db/Db.ts +125 -0
  344. package/src/db/Schema.ts +68 -0
  345. package/src/db/tables/earlyAccess.ts +86 -0
  346. package/src/db/tables/enabledBillingSources.test.ts +303 -0
  347. package/src/db/tables/enabledBillingSources.ts +118 -0
  348. package/src/db/tables/invitations.ts +3 -0
  349. package/src/db/tables/inviteLinks.ts +22 -3
  350. package/src/db/tables/organizations.test.ts +103 -0
  351. package/src/db/tables/organizations.ts +18 -2
  352. package/src/db/tables/sponsoredTransactions.ts +4 -0
  353. package/src/db/tables/verifiedTokenRequests.test.ts +200 -0
  354. package/src/db/tables/verifiedTokenRequests.ts +182 -0
  355. package/src/db/tables/webhookSubscriptions.ts +31 -0
  356. package/src/handlers/internal/utils.ts +22 -6
  357. package/src/handlers/relay.errors.test.ts +153 -0
  358. package/src/handlers/relay.ts +42 -7
  359. package/src/internal/Auth.test.ts +3 -3
  360. package/src/internal/Auth.ts +15 -47
  361. package/src/internal/FundingQuotes.test.ts +161 -6
  362. package/src/internal/FundingQuotes.ts +141 -39
  363. package/src/internal/Log.test-d.ts +21 -0
  364. package/src/internal/Log.test.ts +141 -0
  365. package/src/internal/Log.ts +93 -6
  366. package/src/internal/MetricSink.test.ts +215 -0
  367. package/src/internal/MetricSink.ts +24 -0
  368. package/src/internal/OpenApi.ts +3 -0
  369. package/src/internal/Response.test.ts +28 -0
  370. package/src/internal/Response.ts +12 -4
  371. package/src/internal/Schema.ts +50 -5
  372. package/src/internal/Value.test.ts +20 -0
  373. package/src/internal/Value.ts +24 -1
  374. package/src/internal/VerifiedTokens.ts +9 -1
  375. package/src/internal/Webhooks.test.ts +140 -0
  376. package/src/internal/Webhooks.ts +53 -9
@@ -15,7 +15,7 @@ import * as Webhooks from '../../../internal/Webhooks.js';
15
15
  import * as Receipts from './receipts.js';
16
16
  import * as Transactions from './transactions.js';
17
17
  import * as Transfers from './transfers.js';
18
- /** Default cap on active subscriptions per owner, overridable via `webhook.maxPerOwner`. */
18
+ /** Default cap on live subscriptions per owner, overridable via `webhook.maxPerOwner`. */
19
19
  const defaultMaxPerOwner = 100;
20
20
  /**
21
21
  * Lifetime of an MPP-payer-owned subscription. A payer pays once, so the
@@ -816,10 +816,13 @@ export function webhooks(options = {}) {
816
816
  responses: OpenApi.responses({
817
817
  errors: {
818
818
  400: {
819
- codes: ['chain_id_unsupported'],
820
- description: 'Webhook subscriptions do not support Zone chains.',
819
+ codes: ['body_invalid', 'chain_id_unsupported', 'filters_invalid', 'url_invalid'],
820
+ description: 'The request, destination, filters, or chain are invalid.',
821
+ },
822
+ 403: {
823
+ codes: ['limit_exceeded'],
824
+ description: 'You have reached the webhook subscription limit.',
821
825
  },
822
- 403: 'You have reached the webhook subscription limit.',
823
826
  },
824
827
  success: {
825
828
  description: 'The created webhook subscription, including the one-time signing secret.',
@@ -845,12 +848,9 @@ export function webhooks(options = {}) {
845
848
  return unauthorized(c);
846
849
  const body = c.req.valid('json');
847
850
  const chainId = body.chainId ?? c.get('chainId');
848
- if (c.get('zones').has(chainId))
849
- return Response.error(c, {
850
- code: 'chain_id_unsupported',
851
- message: 'Webhook subscriptions do not support Zone chains.',
852
- status: 400,
853
- });
851
+ const supportedChainIds = new Set(webhook.supportedChainIds);
852
+ if (!supportedChainIds.has(chainId))
853
+ return Response.unsupportedChainId(c, chainId, supportedChainIds);
854
854
  try {
855
855
  const subscription = await Webhooks.createSubscription(db, {
856
856
  chainId,
@@ -864,7 +864,7 @@ export function webhooks(options = {}) {
864
864
  return c.json(Response.validated(schema.createWebhook.Response, toCreated(subscription)), 200);
865
865
  }
866
866
  catch (cause) {
867
- return mutationError(c, cause);
867
+ return createMutationError(c, cause);
868
868
  }
869
869
  })
870
870
  .get('/v1/webhooks', Auth.policy({ apiKey: { scopes: ['webhooks:read'] } }), OpenApi.validate('query', schema.listWebhooks.Query, {
@@ -1189,6 +1189,16 @@ export function webhooks(options = {}) {
1189
1189
  operationId: 'updateWebhook',
1190
1190
  responses: OpenApi.responses({
1191
1191
  errors: {
1192
+ 400: {
1193
+ codes: [
1194
+ 'body_invalid',
1195
+ 'destination_transition_invalid',
1196
+ 'filters_invalid',
1197
+ 'param_invalid',
1198
+ 'url_invalid',
1199
+ ],
1200
+ description: 'The update, destination, or filters are invalid.',
1201
+ },
1192
1202
  404: {
1193
1203
  description: 'No webhook subscription was found for that ID.',
1194
1204
  codes: ['webhook_not_found'],
@@ -1240,7 +1250,7 @@ export function webhooks(options = {}) {
1240
1250
  return c.json(Response.validated(schema.updateWebhook.Response, toPublic(subscription)), 200);
1241
1251
  }
1242
1252
  catch (cause) {
1243
- return mutationError(c, cause);
1253
+ return updateMutationError(c, cause);
1244
1254
  }
1245
1255
  })
1246
1256
  .delete('/v1/webhooks/:id{wh_[A-Za-z0-9_-]+}', Auth.policy({ apiKey: { scopes: ['webhooks:write'] } }), OpenApi.validate('param', schema.deleteWebhook.Params, {
@@ -1376,12 +1386,13 @@ export async function poll(options) {
1376
1386
  let accepted;
1377
1387
  let failed = false;
1378
1388
  for (const item of page.items) {
1379
- // Enrich `token:transfer` rows with best-effort token metadata so
1380
- // downstream destinations (Slack human amounts, richer `url`/`betterstack`
1381
- // payloads) can render `amount` in token units. Non-fatal on failure.
1389
+ // Token metadata is best-effort for webhooks: transfers use it for display,
1390
+ // while transactions expose fee-token references without blocking delivery.
1382
1391
  const data = eventType === 'token:transfer'
1383
1392
  ? await withTokenMetadata(item.data, { cache: cache_metadata, chainId, client })
1384
- : item.data;
1393
+ : eventType === 'transaction:included'
1394
+ ? await withFeeTokenMetadata(item.data, { cache: cache_metadata, chainId, client })
1395
+ : item.data;
1385
1396
  const envelope = Webhooks.buildEnvelope({
1386
1397
  blockNumber: item.cursor[0],
1387
1398
  createdAt: now(),
@@ -1430,21 +1441,31 @@ async function withTokenMetadata(data, deps) {
1430
1441
  if (typeof address !== 'string')
1431
1442
  return data;
1432
1443
  const token = await resolveTokenMetadata(address, deps);
1433
- return token ? { ...data, token } : data;
1444
+ return token
1445
+ ? {
1446
+ ...data,
1447
+ token: { decimals: token.decimals, symbol: token.symbol },
1448
+ }
1449
+ : data;
1434
1450
  }
1435
1451
  /**
1436
- * Resolves a token's `{ symbol, decimals }` via `token.getMetadata`, memoized per
1452
+ * Resolves core token metadata via `token.getMetadata`, memoized per
1437
1453
  * `(chainId, address)` with a short TTL so a busy transfer stream shares one RPC
1438
- * lookup per token. Returns `undefined` on any failure metadata is a rendering
1454
+ * lookup per token. Returns `undefined` on any failure; metadata is a rendering
1439
1455
  * nicety, never a delivery blocker.
1440
1456
  */
1441
1457
  async function resolveTokenMetadata(address, deps) {
1442
1458
  try {
1443
1459
  return await Store.memoize(async () => {
1444
1460
  const meta = await deps.client.token.getMetadata({ token: address });
1445
- return { decimals: meta.decimals, symbol: meta.symbol };
1461
+ return {
1462
+ currency: meta.currency,
1463
+ decimals: meta.decimals,
1464
+ name: meta.name,
1465
+ symbol: meta.symbol,
1466
+ };
1446
1467
  }, {
1447
- key: `webhook:token-meta:v1:${deps.chainId}:${address}`,
1468
+ key: `webhook:token-meta:v2:${deps.chainId}:${address}`,
1448
1469
  store: deps.cache,
1449
1470
  ttl: Ttl.minutes(5),
1450
1471
  });
@@ -1454,6 +1475,60 @@ async function resolveTokenMetadata(address, deps) {
1454
1475
  return undefined;
1455
1476
  }
1456
1477
  }
1478
+ /** Returns the address from an unenriched or enriched fee-token value. */
1479
+ function feeTokenAddress(value) {
1480
+ if (typeof value === 'string')
1481
+ return value;
1482
+ if (typeof value !== 'object' || value === null)
1483
+ return undefined;
1484
+ const address = value['address'];
1485
+ return typeof address === 'string' ? address : undefined;
1486
+ }
1487
+ /** Replaces an address-valued fee token with its resolved reference, or omits it on failure. */
1488
+ function withResolvedFeeToken(data, metadata) {
1489
+ const address = feeTokenAddress(data['feeToken']);
1490
+ if (!address)
1491
+ return data;
1492
+ const result = { ...data };
1493
+ delete result['feeToken'];
1494
+ const token = metadata.get(address.toLowerCase());
1495
+ if (token)
1496
+ result['feeToken'] = { address, ...token };
1497
+ return result;
1498
+ }
1499
+ /** Adds best-effort fee-token references to a transaction and its embedded receipt. */
1500
+ async function withFeeTokenMetadata(data, deps) {
1501
+ if (typeof data !== 'object' || data === null)
1502
+ return data;
1503
+ const transaction = data;
1504
+ const meta = transaction['meta'];
1505
+ const receipt = typeof meta === 'object' && meta !== null
1506
+ ? meta['receipt']
1507
+ : undefined;
1508
+ const addresses = new Set();
1509
+ const transactionAddress = feeTokenAddress(transaction['feeToken']);
1510
+ if (transactionAddress)
1511
+ addresses.add(transactionAddress.toLowerCase());
1512
+ if (typeof receipt === 'object' && receipt !== null) {
1513
+ const receiptAddress = feeTokenAddress(receipt['feeToken']);
1514
+ if (receiptAddress)
1515
+ addresses.add(receiptAddress.toLowerCase());
1516
+ }
1517
+ if (addresses.size === 0)
1518
+ return data;
1519
+ const resolved = await Promise.all([...addresses].map(async (address) => [address, await resolveTokenMetadata(address, deps)]));
1520
+ const metadata = new Map(resolved.filter((entry) => entry[1] !== undefined));
1521
+ const result = withResolvedFeeToken(transaction, metadata);
1522
+ if (typeof receipt !== 'object' || receipt === null)
1523
+ return result;
1524
+ return {
1525
+ ...result,
1526
+ meta: {
1527
+ ...meta,
1528
+ receipt: withResolvedFeeToken(receipt, metadata),
1529
+ },
1530
+ };
1531
+ }
1457
1532
  /** Returns the live RPC head block number for the chain. */
1458
1533
  export async function getRpcHead(client) {
1459
1534
  return Number(await client.getBlockNumber());
@@ -2080,8 +2155,8 @@ const txFields = {
2080
2155
  * Scans included transactions over the confirmed window. Each block is fetched
2081
2156
  * with full transactions via `eth_getBlockByNumber(n, true)`; receipts are
2082
2157
  * fetched lazily (only when a `status`/`gasUsed`/`feePayer` filter needs them).
2083
- * The delivered payload reuses `Transactions.humanizeTransaction`, so it is
2084
- * byte-identical to the read endpoint.
2158
+ * The delivered payload starts from `Transactions.humanizeTransaction`; the
2159
+ * poller then resolves its fee-token references.
2085
2160
  */
2086
2161
  async function scanTxs(options) {
2087
2162
  const { cache, cursor, filters, maxBlocks, safeBlock } = options;
@@ -2121,7 +2196,13 @@ async function scanTxs(options) {
2121
2196
  if (includeReceipt && receipt) {
2122
2197
  const r = Receipts.schema.Rpc.Receipt.safeParse(receipt);
2123
2198
  if (r.success)
2124
- data = { ...data, meta: { ...data.meta, receipt: Receipts.humanizeReceipt(r.data) } };
2199
+ data = {
2200
+ ...data,
2201
+ meta: {
2202
+ ...data['meta'],
2203
+ receipt: Receipts.humanizeReceipt(r.data),
2204
+ },
2205
+ };
2125
2206
  }
2126
2207
  items.push({ cursor: [n, index], data });
2127
2208
  }
@@ -2228,7 +2309,7 @@ function redactDestination(destination) {
2228
2309
  return { ...destination, token: redactedBetterstackToken };
2229
2310
  return destination;
2230
2311
  }
2231
- function mutationError(c, cause) {
2312
+ function createMutationError(c, cause) {
2232
2313
  if (cause instanceof Webhooks.InvalidUrlError)
2233
2314
  return Response.error(c, { code: 'url_invalid', message: cause.message, status: 400 });
2234
2315
  if (cause instanceof Webhooks.InvalidFilterError)
@@ -2242,6 +2323,24 @@ function mutationError(c, cause) {
2242
2323
  return Response.error(c, { code: 'limit_exceeded', message: cause.message, status: 403 });
2243
2324
  return Response.upstream(c, cause);
2244
2325
  }
2326
+ function updateMutationError(c, cause) {
2327
+ if (cause instanceof Webhooks.InvalidDestinationTransitionError)
2328
+ return Response.error(c, {
2329
+ code: 'destination_transition_invalid',
2330
+ message: cause.message,
2331
+ status: 400,
2332
+ });
2333
+ if (cause instanceof Webhooks.InvalidUrlError)
2334
+ return Response.error(c, { code: 'url_invalid', message: cause.message, status: 400 });
2335
+ if (cause instanceof Webhooks.InvalidFilterError)
2336
+ return Response.error(c, {
2337
+ code: 'filters_invalid',
2338
+ details: cause.details,
2339
+ message: cause.message,
2340
+ status: 400,
2341
+ });
2342
+ return Response.upstream(c, cause);
2343
+ }
2245
2344
  function notFound(c) {
2246
2345
  return Response.error(c, {
2247
2346
  code: 'webhook_not_found',