tapimo 0.10.2 → 0.12.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 (386) hide show
  1. package/dist/App.d.ts +4896 -2166
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +2 -2
  4. package/dist/App.js.map +1 -1
  5. package/dist/Assets.d.ts +15 -0
  6. package/dist/Assets.d.ts.map +1 -1
  7. package/dist/Assets.js +7 -0
  8. package/dist/Assets.js.map +1 -1
  9. package/dist/Webhooks.d.ts +0 -75
  10. package/dist/Webhooks.d.ts.map +1 -1
  11. package/dist/Webhooks.js +1 -143
  12. package/dist/Webhooks.js.map +1 -1
  13. package/dist/admin/App.d.ts +127 -78
  14. package/dist/admin/App.d.ts.map +1 -1
  15. package/dist/admin/apps/earn-vaults.d.ts +115 -1
  16. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  17. package/dist/admin/apps/earn-vaults.js +59 -6
  18. package/dist/admin/apps/earn-vaults.js.map +1 -1
  19. package/dist/admin/apps/organizations.d.ts +3 -3
  20. package/dist/admin/apps/organizations.d.ts.map +1 -1
  21. package/dist/admin/apps/organizations.js +4 -2
  22. package/dist/admin/apps/organizations.js.map +1 -1
  23. package/dist/admin/apps/verified-tokens.d.ts +83 -83
  24. package/dist/admin/ui.generated.d.ts +1 -1
  25. package/dist/admin/ui.generated.d.ts.map +1 -1
  26. package/dist/admin/ui.generated.js +151 -151
  27. package/dist/admin/ui.generated.js.map +1 -1
  28. package/dist/apps/data/App.d.ts +5924 -4310
  29. package/dist/apps/data/App.d.ts.map +1 -1
  30. package/dist/apps/data/App.js +61 -9
  31. package/dist/apps/data/App.js.map +1 -1
  32. package/dist/apps/data/ZoneSelection.d.ts +62 -0
  33. package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
  34. package/dist/apps/data/ZoneSelection.js +44 -0
  35. package/dist/apps/data/ZoneSelection.js.map +1 -0
  36. package/dist/apps/data/routes/activities.d.ts +2368 -5
  37. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  38. package/dist/apps/data/routes/activities.js +423 -114
  39. package/dist/apps/data/routes/activities.js.map +1 -1
  40. package/dist/apps/data/routes/addresses.d.ts +131 -0
  41. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  42. package/dist/apps/data/routes/balances.d.ts +25 -25
  43. package/dist/apps/data/routes/balances.js +1 -1
  44. package/dist/apps/data/routes/balances.js.map +1 -1
  45. package/dist/apps/data/routes/blocks.d.ts +1 -1
  46. package/dist/apps/data/routes/blocks.js +1 -1
  47. package/dist/apps/data/routes/blocks.js.map +1 -1
  48. package/dist/apps/data/routes/earn.d.ts +135 -10
  49. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  50. package/dist/apps/data/routes/earn.js +157 -25
  51. package/dist/apps/data/routes/earn.js.map +1 -1
  52. package/dist/apps/data/routes/exchanges.d.ts +829 -123
  53. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  54. package/dist/apps/data/routes/exchanges.js +16 -13
  55. package/dist/apps/data/routes/exchanges.js.map +1 -1
  56. package/dist/apps/data/routes/fee-amm.d.ts +26 -26
  57. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  58. package/dist/apps/data/routes/fee-amm.js +9 -11
  59. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  60. package/dist/apps/data/routes/receipts.d.ts +54 -54
  61. package/dist/apps/data/routes/receipts.js +1 -1
  62. package/dist/apps/data/routes/receipts.js.map +1 -1
  63. package/dist/apps/data/routes/rpc.js +24 -10
  64. package/dist/apps/data/routes/rpc.js.map +1 -1
  65. package/dist/apps/data/routes/tokenlist.d.ts +12 -12
  66. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  67. package/dist/apps/data/routes/tokenlist.js +16 -15
  68. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  69. package/dist/apps/data/routes/tokens.d.ts +17 -3
  70. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  71. package/dist/apps/data/routes/tokens.js +34 -15
  72. package/dist/apps/data/routes/tokens.js.map +1 -1
  73. package/dist/apps/data/routes/transactions.d.ts +1 -1
  74. package/dist/apps/data/routes/transactions.js +1 -1
  75. package/dist/apps/data/routes/transactions.js.map +1 -1
  76. package/dist/apps/data/routes/transfers.d.ts +13 -13
  77. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  78. package/dist/apps/data/routes/transfers.js +7 -9
  79. package/dist/apps/data/routes/transfers.js.map +1 -1
  80. package/dist/apps/data/routes/valuation.d.ts +21 -21
  81. package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
  82. package/dist/apps/data/routes/webhooks.d.ts +1011 -151
  83. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  84. package/dist/apps/data/routes/webhooks.js +126 -739
  85. package/dist/apps/data/routes/webhooks.js.map +1 -1
  86. package/dist/apps/data/routes/zones.d.ts +15 -15
  87. package/dist/apps/funding/App.d.ts +27 -27
  88. package/dist/apps/funding/routes/chains.d.ts.map +1 -1
  89. package/dist/apps/funding/routes/chains.js +5 -4
  90. package/dist/apps/funding/routes/chains.js.map +1 -1
  91. package/dist/apps/funding/routes/deposit-addresses.d.ts +18 -18
  92. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  93. package/dist/apps/funding/routes/deposit-addresses.js +8 -8
  94. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  95. package/dist/apps/funding/routes/providers.d.ts.map +1 -1
  96. package/dist/apps/funding/routes/providers.js +3 -2
  97. package/dist/apps/funding/routes/providers.js.map +1 -1
  98. package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
  99. package/dist/apps/funding/routes/quotes.js +2 -2
  100. package/dist/apps/funding/routes/quotes.js.map +1 -1
  101. package/dist/apps/funding/routes/transfers.d.ts +33 -33
  102. package/dist/apps/management/App.d.ts +1433 -322
  103. package/dist/apps/management/App.d.ts.map +1 -1
  104. package/dist/apps/management/Billing.d.ts.map +1 -1
  105. package/dist/apps/management/Billing.js +19 -6
  106. package/dist/apps/management/Billing.js.map +1 -1
  107. package/dist/apps/management/routes/api-keys.d.ts +154 -94
  108. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  109. package/dist/apps/management/routes/api-keys.js +76 -30
  110. package/dist/apps/management/routes/api-keys.js.map +1 -1
  111. package/dist/apps/management/routes/billing.d.ts +103 -30
  112. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  113. package/dist/apps/management/routes/billing.js +91 -32
  114. package/dist/apps/management/routes/billing.js.map +1 -1
  115. package/dist/apps/management/routes/faucet.d.ts +12 -12
  116. package/dist/apps/management/routes/faucet.d.ts.map +1 -1
  117. package/dist/apps/management/routes/faucet.js +23 -12
  118. package/dist/apps/management/routes/faucet.js.map +1 -1
  119. package/dist/apps/management/routes/invitations.d.ts +46 -13
  120. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  121. package/dist/apps/management/routes/invitations.js +79 -29
  122. package/dist/apps/management/routes/invitations.js.map +1 -1
  123. package/dist/apps/management/routes/invite-links.d.ts +128 -83
  124. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  125. package/dist/apps/management/routes/invite-links.js +100 -41
  126. package/dist/apps/management/routes/invite-links.js.map +1 -1
  127. package/dist/apps/management/routes/me.d.ts +5 -5
  128. package/dist/apps/management/routes/me.d.ts.map +1 -1
  129. package/dist/apps/management/routes/me.js +14 -10
  130. package/dist/apps/management/routes/me.js.map +1 -1
  131. package/dist/apps/management/routes/members.d.ts +68 -47
  132. package/dist/apps/management/routes/members.d.ts.map +1 -1
  133. package/dist/apps/management/routes/members.js +37 -18
  134. package/dist/apps/management/routes/members.js.map +1 -1
  135. package/dist/apps/management/routes/orgs.d.ts +48 -8
  136. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  137. package/dist/apps/management/routes/orgs.js +48 -19
  138. package/dist/apps/management/routes/orgs.js.map +1 -1
  139. package/dist/apps/management/routes/projects.d.ts +130 -68
  140. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  141. package/dist/apps/management/routes/projects.js +72 -21
  142. package/dist/apps/management/routes/projects.js.map +1 -1
  143. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  144. package/dist/apps/management/routes/scopes.js +8 -5
  145. package/dist/apps/management/routes/scopes.js.map +1 -1
  146. package/dist/apps/management/routes/usage.d.ts +38 -38
  147. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  148. package/dist/apps/management/routes/usage.js +41 -31
  149. package/dist/apps/management/routes/usage.js.map +1 -1
  150. package/dist/apps/management/routes/verified-token-requests.d.ts +34 -6
  151. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  152. package/dist/apps/management/routes/verified-token-requests.js +36 -17
  153. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  154. package/dist/apps/management/routes/webhooks.d.ts +1186 -197
  155. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  156. package/dist/apps/management/routes/webhooks.js +106 -38
  157. package/dist/apps/management/routes/webhooks.js.map +1 -1
  158. package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
  159. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  160. package/dist/apps/mpp/internal/Adapter.js +12 -0
  161. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  162. package/dist/db/Db.d.ts +2 -0
  163. package/dist/db/Db.d.ts.map +1 -1
  164. package/dist/db/Db.js +61 -0
  165. package/dist/db/Db.js.map +1 -1
  166. package/dist/db/Schema.d.ts +30 -2
  167. package/dist/db/Schema.d.ts.map +1 -1
  168. package/dist/db/Schema.js +28 -3
  169. package/dist/db/Schema.js.map +1 -1
  170. package/dist/db/tables/earnVaults.d.ts +5 -1
  171. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  172. package/dist/db/tables/earnVaults.js +5 -0
  173. package/dist/db/tables/earnVaults.js.map +1 -1
  174. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
  175. package/dist/db/tables/webhookDeliveries.js +10 -0
  176. package/dist/db/tables/webhookDeliveries.js.map +1 -1
  177. package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
  178. package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
  179. package/dist/db/tables/webhookQueueCompletions.js +32 -0
  180. package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
  181. package/dist/db/tables/webhookQueueEvents.d.ts +16 -20
  182. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  183. package/dist/db/tables/webhookQueueEvents.js +68 -43
  184. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  185. package/dist/db/tables/webhookSubscriptions.d.ts +47 -72
  186. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  187. package/dist/db/tables/webhookSubscriptions.js +92 -105
  188. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  189. package/dist/internal/Auth.d.ts +8 -1
  190. package/dist/internal/Auth.d.ts.map +1 -1
  191. package/dist/internal/Auth.js +13 -3
  192. package/dist/internal/Auth.js.map +1 -1
  193. package/dist/internal/Cache.d.ts.map +1 -1
  194. package/dist/internal/Cache.js +11 -7
  195. package/dist/internal/Cache.js.map +1 -1
  196. package/dist/internal/EarnVaults.d.ts +41 -2
  197. package/dist/internal/EarnVaults.d.ts.map +1 -1
  198. package/dist/internal/EarnVaults.js +167 -0
  199. package/dist/internal/EarnVaults.js.map +1 -1
  200. package/dist/internal/MetricSink.d.ts +35 -125
  201. package/dist/internal/MetricSink.d.ts.map +1 -1
  202. package/dist/internal/MetricSink.js +50 -121
  203. package/dist/internal/MetricSink.js.map +1 -1
  204. package/dist/internal/OpenApi.d.ts +26 -22
  205. package/dist/internal/OpenApi.d.ts.map +1 -1
  206. package/dist/internal/OpenApi.js +128 -39
  207. package/dist/internal/OpenApi.js.map +1 -1
  208. package/dist/internal/Response.d.ts +13 -8
  209. package/dist/internal/Response.d.ts.map +1 -1
  210. package/dist/internal/Response.js +16 -5
  211. package/dist/internal/Response.js.map +1 -1
  212. package/dist/internal/Schema.d.ts +8 -8
  213. package/dist/internal/Schema.d.ts.map +1 -1
  214. package/dist/internal/Schema.js +10 -9
  215. package/dist/internal/Schema.js.map +1 -1
  216. package/dist/internal/Store.d.ts +15 -6
  217. package/dist/internal/Store.d.ts.map +1 -1
  218. package/dist/internal/Store.js +45 -15
  219. package/dist/internal/Store.js.map +1 -1
  220. package/dist/internal/Tidx.d.ts +2 -0
  221. package/dist/internal/Tidx.d.ts.map +1 -1
  222. package/dist/internal/Tidx.js +16 -4
  223. package/dist/internal/Tidx.js.map +1 -1
  224. package/dist/internal/WebhookTransfer.d.ts +1 -55
  225. package/dist/internal/WebhookTransfer.d.ts.map +1 -1
  226. package/dist/internal/WebhookTransfer.js +1 -239
  227. package/dist/internal/WebhookTransfer.js.map +1 -1
  228. package/dist/internal/Webhooks.d.ts +112 -56
  229. package/dist/internal/Webhooks.d.ts.map +1 -1
  230. package/dist/internal/Webhooks.js +124 -93
  231. package/dist/internal/Webhooks.js.map +1 -1
  232. package/dist/internal/funding/Deposit.d.ts +2 -2
  233. package/dist/internal/funding/Deposit.d.ts.map +1 -1
  234. package/dist/internal/funding/Deposit.js +9 -8
  235. package/dist/internal/funding/Deposit.js.map +1 -1
  236. package/dist/internal/funding/DepositAddress.d.ts +4 -4
  237. package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
  238. package/dist/internal/funding/DepositAddress.js +9 -8
  239. package/dist/internal/funding/DepositAddress.js.map +1 -1
  240. package/dist/internal/funding/DepositWebhook.d.ts +25 -0
  241. package/dist/internal/funding/DepositWebhook.d.ts.map +1 -0
  242. package/dist/internal/funding/DepositWebhook.js +74 -0
  243. package/dist/internal/funding/DepositWebhook.js.map +1 -0
  244. package/dist/internal/funding/Provider.d.ts.map +1 -1
  245. package/dist/internal/funding/Provider.js +13 -12
  246. package/dist/internal/funding/Provider.js.map +1 -1
  247. package/dist/internal/funding/Reconciliation.d.ts +6 -0
  248. package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
  249. package/dist/internal/funding/Reconciliation.js +42 -10
  250. package/dist/internal/funding/Reconciliation.js.map +1 -1
  251. package/dist/internal/funding/index.d.ts +1 -0
  252. package/dist/internal/funding/index.d.ts.map +1 -1
  253. package/dist/internal/funding/index.js +1 -0
  254. package/dist/internal/funding/index.js.map +1 -1
  255. package/dist/internal/funding/providers/stargate.d.ts +19 -0
  256. package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
  257. package/dist/internal/funding/providers/stargate.js +143 -0
  258. package/dist/internal/funding/providers/stargate.js.map +1 -0
  259. package/dist/internal/webhookDestinations/slack.d.ts.map +1 -1
  260. package/dist/internal/webhookDestinations/slack.js +16 -0
  261. package/dist/internal/webhookDestinations/slack.js.map +1 -1
  262. package/dist/providers/index.d.ts +7 -0
  263. package/dist/providers/index.d.ts.map +1 -1
  264. package/dist/providers/index.js +3 -0
  265. package/dist/providers/index.js.map +1 -1
  266. package/package.json +2 -2
  267. package/src/App.test.ts +48 -0
  268. package/src/App.ts +7 -2
  269. package/src/Assets.test.ts +18 -0
  270. package/src/Assets.ts +22 -0
  271. package/src/Client.test-d.ts +287 -17
  272. package/src/Webhooks.ts +1 -220
  273. package/src/admin/apps/earn-vaults.test.ts +143 -0
  274. package/src/admin/apps/earn-vaults.ts +83 -6
  275. package/src/admin/apps/organizations.ts +6 -2
  276. package/src/admin/ui/src/routes/api-keys.tsx +36 -0
  277. package/src/admin/ui.generated.ts +151 -189
  278. package/src/apps/data/App.test.ts +31 -0
  279. package/src/apps/data/App.ts +64 -10
  280. package/src/apps/data/ZoneSelection.test.ts +196 -0
  281. package/src/apps/data/ZoneSelection.ts +108 -0
  282. package/src/apps/data/routes/activities.test.ts +435 -12
  283. package/src/apps/data/routes/activities.ts +562 -125
  284. package/src/apps/data/routes/balances.ts +1 -1
  285. package/src/apps/data/routes/blocks.ts +1 -1
  286. package/src/apps/data/routes/earn.test.ts +183 -23
  287. package/src/apps/data/routes/earn.ts +225 -29
  288. package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
  289. package/src/apps/data/routes/exchanges.test.ts +31 -1
  290. package/src/apps/data/routes/exchanges.ts +19 -15
  291. package/src/apps/data/routes/fee-amm.ts +18 -11
  292. package/src/apps/data/routes/receipts.ts +1 -1
  293. package/src/apps/data/routes/rpc.test.ts +75 -0
  294. package/src/apps/data/routes/rpc.ts +23 -9
  295. package/src/apps/data/routes/tokenlist.ts +21 -18
  296. package/src/apps/data/routes/tokens.test.ts +29 -0
  297. package/src/apps/data/routes/tokens.ts +38 -15
  298. package/src/apps/data/routes/transactions.ts +1 -1
  299. package/src/apps/data/routes/transfers.test.ts +3 -3
  300. package/src/apps/data/routes/transfers.ts +12 -9
  301. package/src/apps/data/routes/webhooks.test.ts +179 -1497
  302. package/src/apps/data/routes/webhooks.ts +156 -976
  303. package/src/apps/data/routes/zones.test.ts +19 -13
  304. package/src/apps/funding/routes/chains.test.ts +211 -7
  305. package/src/apps/funding/routes/chains.ts +19 -12
  306. package/src/apps/funding/routes/deposit-addresses.test.ts +394 -0
  307. package/src/apps/funding/routes/deposit-addresses.ts +84 -72
  308. package/src/apps/funding/routes/providers.ts +9 -5
  309. package/src/apps/funding/routes/quotes.test.ts +46 -0
  310. package/src/apps/funding/routes/quotes.ts +8 -5
  311. package/src/apps/funding/routes/transfers.test.ts +35 -32
  312. package/src/apps/management/Billing.test.ts +26 -0
  313. package/src/apps/management/Billing.ts +24 -7
  314. package/src/apps/management/routes/api-keys.test.ts +178 -0
  315. package/src/apps/management/routes/api-keys.ts +203 -144
  316. package/src/apps/management/routes/billing.test.ts +209 -0
  317. package/src/apps/management/routes/billing.ts +254 -177
  318. package/src/apps/management/routes/faucet.test.ts +39 -0
  319. package/src/apps/management/routes/faucet.ts +75 -41
  320. package/src/apps/management/routes/invitations.test.ts +216 -0
  321. package/src/apps/management/routes/invitations.ts +186 -109
  322. package/src/apps/management/routes/invite-links.test.ts +263 -1
  323. package/src/apps/management/routes/invite-links.ts +295 -214
  324. package/src/apps/management/routes/me.test.ts +49 -0
  325. package/src/apps/management/routes/me.ts +42 -32
  326. package/src/apps/management/routes/members.test.ts +124 -1
  327. package/src/apps/management/routes/members.ts +81 -51
  328. package/src/apps/management/routes/orgs.test.ts +176 -0
  329. package/src/apps/management/routes/orgs.ts +101 -59
  330. package/src/apps/management/routes/projects.test.ts +183 -0
  331. package/src/apps/management/routes/projects.ts +124 -60
  332. package/src/apps/management/routes/scopes.test.ts +44 -0
  333. package/src/apps/management/routes/scopes.ts +37 -28
  334. package/src/apps/management/routes/usage.test.ts +92 -0
  335. package/src/apps/management/routes/usage.ts +186 -151
  336. package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
  337. package/src/apps/management/routes/verified-token-requests.ts +166 -133
  338. package/src/apps/management/routes/webhooks.test.ts +313 -1
  339. package/src/apps/management/routes/webhooks.ts +220 -71
  340. package/src/apps/mpp/internal/Adapter.ts +13 -1
  341. package/src/db/Db.test.ts +42 -5
  342. package/src/db/Db.ts +85 -0
  343. package/src/db/Schema.ts +41 -3
  344. package/src/db/tables/earnVaults.test.ts +22 -0
  345. package/src/db/tables/earnVaults.ts +11 -1
  346. package/src/db/tables/organizations.test.ts +5 -2
  347. package/src/db/tables/webhookDeliveries.ts +13 -0
  348. package/src/db/tables/webhookQueueCompletions.ts +55 -0
  349. package/src/db/tables/webhookQueueEvents.ts +97 -57
  350. package/src/db/tables/webhookSubscriptions.ts +134 -144
  351. package/src/internal/Auth.ts +23 -5
  352. package/src/internal/Cache.ts +14 -7
  353. package/src/internal/EarnVaults.capabilities.test.ts +33 -0
  354. package/src/internal/EarnVaults.test.ts +79 -0
  355. package/src/internal/EarnVaults.ts +277 -0
  356. package/src/internal/MetricSink.test.ts +41 -373
  357. package/src/internal/MetricSink.ts +92 -273
  358. package/src/internal/OpenApi.ts +165 -49
  359. package/src/internal/Response.test.ts +95 -0
  360. package/src/internal/Response.ts +40 -2
  361. package/src/internal/Schema.test.ts +34 -0
  362. package/src/internal/Schema.ts +20 -9
  363. package/src/internal/Store.test.ts +186 -0
  364. package/src/internal/Store.ts +57 -17
  365. package/src/internal/Tidx.test.ts +19 -0
  366. package/src/internal/Tidx.ts +16 -4
  367. package/src/internal/WebhookTransfer.ts +1 -351
  368. package/src/internal/Webhooks.test.ts +222 -145
  369. package/src/internal/Webhooks.ts +234 -135
  370. package/src/internal/funding/Deposit.ts +71 -64
  371. package/src/internal/funding/DepositAddress.ts +50 -43
  372. package/src/internal/funding/DepositWebhook.test.ts +131 -0
  373. package/src/internal/funding/DepositWebhook.ts +101 -0
  374. package/src/internal/funding/Provider.ts +164 -142
  375. package/src/internal/funding/Reconciliation.test.ts +14 -0
  376. package/src/internal/funding/Reconciliation.ts +161 -86
  377. package/src/internal/funding/index.test.ts +1 -0
  378. package/src/internal/funding/index.ts +1 -0
  379. package/src/internal/funding/providers/index.test.ts +185 -0
  380. package/src/internal/funding/providers/stargate.ts +184 -0
  381. package/src/internal/webhookDestinations/slack.ts +15 -0
  382. package/src/providers/index.test.ts +1 -0
  383. package/src/providers/index.ts +9 -0
  384. package/src/Webhooks.bench.ts +0 -714
  385. package/src/Webhooks.memory.bench.ts +0 -250
  386. package/src/Webhooks.test.ts +0 -146
@@ -2,6 +2,7 @@ import { Hono } from 'hono';
2
2
  import { Value as core_Value } from 'ox';
3
3
  import { ContractFunctionExecutionError, ContractFunctionRevertedError, ContractFunctionZeroDataError, zeroAddress, } from 'viem';
4
4
  import * as z from 'zod/mini';
5
+ import * as Scope from '../../../Scope.js';
5
6
  import * as Db from '../../../db/Db.js';
6
7
  import * as core_EarnVaults from '../../../db/tables/earnVaults.js';
7
8
  import * as Auth from '../../../internal/Auth.js';
@@ -45,6 +46,11 @@ export function discoveryBatchLimit(options) {
45
46
  const needed = options.limit + 1 - options.matches;
46
47
  return Math.min(options.filtered ? needed * 2 : needed, options.remaining, scanLimit);
47
48
  }
49
+ /** Returns whether API-key scopes grant read access to one private Zone. */
50
+ export function hasZoneAccess(options) {
51
+ const scopes = options.scopes ?? [];
52
+ return scopes.includes(Scope.wildcard) || scopes.includes(`zone:${options.chainId}:read`);
53
+ }
48
54
  /** Zod schemas owned by the public Earn-vault resource. */
49
55
  export var schema;
50
56
  (function (schema) {
@@ -73,13 +79,13 @@ export var schema;
73
79
  .check(z.describe('Yield venue, or null when the engine does not expose one.')),
74
80
  }), 'Current vault engine.');
75
81
  const include = z
76
- .enum(['access', 'apy', 'capabilities', 'token.logoUri', 'tvl', 'zone'])
82
+ .enum(['access', 'apy', 'capabilities', 'token.logoUri', 'tvl', 'zone', 'zones'])
77
83
  .check(z.describe('Optional vault fields to embed via `include`.'));
78
84
  const includeQuery = Schema.includeQuery(include, 'Comma-separated vault fields to include, such as `apy,tvl`.');
79
85
  // `apy` and `tvl` need indexer and FX access, so surfaces lacking either
80
86
  // select from this reduced set instead.
81
87
  const baseInclude = z
82
- .enum(['access', 'capabilities', 'token.logoUri', 'zone'])
88
+ .enum(['access', 'capabilities', 'token.logoUri', 'zone', 'zones'])
83
89
  .check(z.describe('Optional vault fields to embed via `include`.'));
84
90
  const baseIncludeQuery = Schema.includeQuery(baseInclude, 'Comma-separated vault fields to include, such as `access,zone`.');
85
91
  const zone = z
@@ -96,6 +102,24 @@ export var schema;
96
102
  .check(z.describe('Tokens supported by private redemptions.'), z.meta({ examples: [['0x20c000000000000000000000ff04042ee92fd449']] })),
97
103
  })
98
104
  .check(z.describe('Private Zone route configured for a verified vault.'));
105
+ const zoneRoute = z
106
+ .strictObject({
107
+ chainId: Schema.ChainId.check(z.describe('Private Zone chain id.'), z.meta({ examples: [1424310001] })),
108
+ deploymentBlock: z
109
+ .number()
110
+ .check(z.int(), z.nonnegative(), z.describe('Parent-chain block that deployed the Earn router.'), z.meta({ examples: [31039238] })),
111
+ earnRouter: Schema.Address.check(z.describe('Parent-chain router for this Zone and Earn vault.'), z.meta({ examples: ['0x9144086a79dea966d8bf1b52125ebed8919fc45c'] })),
112
+ inputTokens: z
113
+ .array(Schema.Address)
114
+ .check(z.describe('Tokens accepted by private deposits.'), z.meta({ examples: [['0x20c000000000000000000000ff04042ee92fd449']] })),
115
+ name: z
116
+ .string()
117
+ .check(z.describe('Private Zone name.'), z.meta({ examples: ['zone-moderato-internal'] })),
118
+ outputTokens: z
119
+ .array(Schema.Address)
120
+ .check(z.describe('Tokens returned by private redemptions.'), z.meta({ examples: [['0x20c000000000000000000000ff04042ee92fd449']] })),
121
+ })
122
+ .check(z.describe('Verified Earn route through one private Zone.'));
99
123
  const value = z.strictObject({
100
124
  amount: Schema.DecimalString.check(z.describe('Value in base units at `decimals` precision.'), z.meta({ examples: ['125288750000'] })),
101
125
  currency: z
@@ -146,6 +170,20 @@ export var schema;
146
170
  zone: z
147
171
  .optional(z.nullable(zone))
148
172
  .check(z.describe('Curated private Zone route, when requested, or null when absent.')),
173
+ zones: z.optional(z.array(zoneRoute)).check(z.describe('Curated private Zone routes, when requested.'), z.meta({
174
+ examples: [
175
+ [
176
+ {
177
+ chainId: 1424310001,
178
+ deploymentBlock: 31039238,
179
+ earnRouter: '0x9144086a79dea966d8bf1b52125ebed8919fc45c',
180
+ inputTokens: ['0x20c000000000000000000000ff04042ee92fd449'],
181
+ name: 'zone-moderato-internal',
182
+ outputTokens: ['0x20c000000000000000000000ff04042ee92fd449'],
183
+ },
184
+ ],
185
+ ],
186
+ })),
149
187
  });
150
188
  /** One compatible Earn vault resolved from current chain state. */
151
189
  schema.Vault = Schema.describe(vault, 'A compatible earn vault resolved from chain state.');
@@ -426,8 +464,8 @@ export function earn(options = {}) {
426
464
  // as current-state rather than slow-changing metadata.
427
465
  Cache.response({
428
466
  cacheControl: Cache.policies.state,
429
- key: (c) => Cache.urlKey(c, schema.getEarnVaults.Query),
430
- name: 'tempo-api:earn-vaults:v2',
467
+ key: (c) => vaultCacheKey(c, schema.getEarnVaults.Query),
468
+ name: 'tempo-api:earn-vaults:v3',
431
469
  }), async (c) => {
432
470
  if (Auth.narrowAccess)
433
471
  return Auth.paidAccessError(c);
@@ -463,8 +501,8 @@ export function earn(options = {}) {
463
501
  tags: ['Earn'],
464
502
  }), Cache.response({
465
503
  cacheControl: Cache.policies.state,
466
- key: (c) => Cache.urlKey(c, schema.getVerifiedEarnVaults.Query),
467
- name: 'tempo-api:earn-vaults:v2',
504
+ key: (c) => vaultCacheKey(c, schema.getVerifiedEarnVaults.Query),
505
+ name: 'tempo-api:earn-vaults:v3',
468
506
  }), async (c) => {
469
507
  if (Auth.narrowAccess)
470
508
  return Auth.paidAccessError(c);
@@ -765,8 +803,8 @@ export function earn(options = {}) {
765
803
  tags: ['Earn'],
766
804
  }), Cache.response({
767
805
  cacheControl: Cache.policies.state,
768
- key: (c) => Cache.urlKey(c, schema.getEarnVault.Query),
769
- name: 'tempo-api:earn-vaults:v2',
806
+ key: (c) => vaultCacheKey(c, schema.getEarnVault.Query),
807
+ name: 'tempo-api:earn-vaults:v3',
770
808
  }), async (c) => {
771
809
  if (Auth.narrowAccess)
772
810
  return Auth.paidAccessError(c);
@@ -1549,12 +1587,18 @@ export async function listVaults(c, options) {
1549
1587
  Promise.all(page.items.map(async (item) => {
1550
1588
  const record = registry.get(item.vaultAddress.toLowerCase());
1551
1589
  try {
1552
- const discovery = await resolveVaultDiscovery(c, {
1590
+ const discovered = await resolveVaultDiscovery(c, {
1553
1591
  chainId: options.chainId,
1554
1592
  include: discoveryInclude(options),
1555
1593
  vaultAddress: item.vaultAddress,
1556
1594
  });
1557
- return { discovery, position: item.position, record };
1595
+ const { discovery, zoneRoutes } = await resolveVaultRoutes(c, {
1596
+ capability: options.capability,
1597
+ discovery: discovered,
1598
+ include,
1599
+ record,
1600
+ });
1601
+ return { discovery, position: item.position, record, zoneRoutes };
1558
1602
  }
1559
1603
  catch (cause) {
1560
1604
  if (!record && isIncompatible(cause))
@@ -1602,7 +1646,7 @@ export async function listVaults(c, options) {
1602
1646
  for (const [vault, apy] of missingApy ?? [])
1603
1647
  apyByVault.set(vault, apy);
1604
1648
  const apy = include.includes('apy') ? apyByVault : undefined;
1605
- const data = page.map((match) => resolveVault(c, { ...match, apy, include, rates, snapshot, tokens }));
1649
+ const data = await Promise.all(page.map((match) => resolveVault(c, { ...match, apy, include, rates, snapshot, tokens })));
1606
1650
  const last = matches[options.limit - 1];
1607
1651
  const nextPosition = matches.length > options.limit ? last?.position : hasMore ? position : undefined;
1608
1652
  return {
@@ -1621,6 +1665,7 @@ export async function listVerifiedVaults(c, options) {
1621
1665
  const decoded = options.cursor ? Cursor.decode(options.cursor, ['address']) : undefined;
1622
1666
  const cursor = decoded?.[0]?.toString().toLowerCase();
1623
1667
  const candidates = records.filter((record) => !cursor || record.vaultAddress.toLowerCase() > cursor);
1668
+ const include = vaultInclude(options);
1624
1669
  const matches = [];
1625
1670
  let offset = 0;
1626
1671
  while (offset < candidates.length && matches.length <= options.limit) {
@@ -1632,14 +1677,20 @@ export async function listVerifiedVaults(c, options) {
1632
1677
  });
1633
1678
  const batch = candidates.slice(offset, offset + batchSize);
1634
1679
  offset += batch.length;
1635
- const discovered = await Promise.all(batch.map(async (record) => ({
1636
- discovery: await resolveVaultDiscovery(c, {
1680
+ const discovered = await Promise.all(batch.map(async (record) => {
1681
+ const discovered = await resolveVaultDiscovery(c, {
1637
1682
  chainId: options.chainId,
1638
1683
  include: discoveryInclude(options),
1639
1684
  vaultAddress: Schema.Address.parse(record.vaultAddress.toLowerCase()),
1640
- }),
1641
- record,
1642
- })));
1685
+ });
1686
+ const { discovery, zoneRoutes } = await resolveVaultRoutes(c, {
1687
+ capability: options.capability,
1688
+ discovery: discovered,
1689
+ include,
1690
+ record,
1691
+ });
1692
+ return { discovery, record, zoneRoutes };
1693
+ }));
1643
1694
  for (const match of discovered) {
1644
1695
  if (!matchesVaultFilters(match.discovery, options))
1645
1696
  continue;
@@ -1648,7 +1699,6 @@ export async function listVerifiedVaults(c, options) {
1648
1699
  }
1649
1700
  const page = matches.slice(0, options.limit);
1650
1701
  const discoveries = page.map(({ discovery }) => discovery);
1651
- const include = vaultInclude(options);
1652
1702
  const [apy, rates, tokens] = await Promise.all([
1653
1703
  resolvePageApy(c, {
1654
1704
  chainId: options.chainId,
@@ -1659,7 +1709,7 @@ export async function listVerifiedVaults(c, options) {
1659
1709
  resolvePageRates(c, { discoveries, include, oracle: options.oracle, snapshot }),
1660
1710
  resolvePageTokens(c, { chainId: options.chainId, discoveries, include, snapshot }),
1661
1711
  ]);
1662
- const data = page.map((match) => Response.validated(schema.VerifiedVault, resolveVault(c, { ...match, apy, include, rates, snapshot, tokens })));
1712
+ const data = await Promise.all(page.map(async (match) => Response.validated(schema.VerifiedVault, await resolveVault(c, { ...match, apy, include, rates, snapshot, tokens }))));
1663
1713
  const last = matches[options.limit - 1];
1664
1714
  return {
1665
1715
  data,
@@ -1867,13 +1917,19 @@ export async function getVault(c, options) {
1867
1917
  VerifiedTokens.snapshot(c, options.chainId),
1868
1918
  ]);
1869
1919
  try {
1870
- const discovery = await resolveVaultDiscovery(c, {
1920
+ const discovered = await resolveVaultDiscovery(c, {
1871
1921
  chainId: options.chainId,
1872
1922
  include: discoveryInclude({ capability: [], include: options.include }),
1873
1923
  vaultAddress: options.vaultAddress,
1874
1924
  });
1875
- const discoveries = [discovery];
1876
1925
  const include = vaultInclude(options);
1926
+ const { discovery, zoneRoutes } = await resolveVaultRoutes(c, {
1927
+ capability: [],
1928
+ discovery: discovered,
1929
+ include,
1930
+ record,
1931
+ });
1932
+ const discoveries = [discovery];
1877
1933
  const [apy, rates, tokens] = await Promise.all([
1878
1934
  resolvePageApy(c, {
1879
1935
  chainId: options.chainId,
@@ -1885,7 +1941,7 @@ export async function getVault(c, options) {
1885
1941
  resolvePageTokens(c, { chainId: options.chainId, discoveries, include, snapshot }),
1886
1942
  ]);
1887
1943
  return {
1888
- ...resolveVault(c, {
1944
+ ...(await resolveVault(c, {
1889
1945
  apy,
1890
1946
  discovery,
1891
1947
  include,
@@ -1893,7 +1949,8 @@ export async function getVault(c, options) {
1893
1949
  record,
1894
1950
  snapshot,
1895
1951
  tokens,
1896
- }),
1952
+ zoneRoutes,
1953
+ })),
1897
1954
  ...(rates ? { meta: { valuation: Valuation.pricing(rates, options.oracle) } } : {}),
1898
1955
  };
1899
1956
  }
@@ -1911,6 +1968,21 @@ function vaultInclude(options) {
1911
1968
  return include;
1912
1969
  return [...include, 'apy'];
1913
1970
  }
1971
+ /** Builds an Earn-vault cache key partitioned by Zone-visible API keys. */
1972
+ export function vaultCacheKey(c, query) {
1973
+ const key = Cache.urlKey(c, query);
1974
+ const url = new URL(key);
1975
+ const includesRoutes = url.searchParams
1976
+ .getAll('include')
1977
+ .some((include) => include === 'zone' || include === 'zones');
1978
+ if (!includesRoutes)
1979
+ return key;
1980
+ const principal = Auth.getPrincipal(c);
1981
+ if (principal?.type !== 'api_key')
1982
+ return key;
1983
+ url.searchParams.set('principal', `${principal.type}:${principal.id}`);
1984
+ return url.toString();
1985
+ }
1914
1986
  function discoveryInclude(options) {
1915
1987
  const includeCapabilities = options.include.includes('capabilities') ||
1916
1988
  options.include.includes('zone') ||
@@ -1937,6 +2009,39 @@ async function resolveVaultDiscovery(c, options) {
1937
2009
  ttl: Ttl.seconds(30),
1938
2010
  });
1939
2011
  }
2012
+ async function resolveVaultRoutes(c, options) {
2013
+ const { discovery, record } = options;
2014
+ if (!record || record.zones.length === 0)
2015
+ return { discovery, zoneRoutes: [] };
2016
+ const principal = Auth.getPrincipal(c);
2017
+ const scopes = principal?.type === 'api_key' ? principal.apiKey.scopes : undefined;
2018
+ const includesRoutes = options.include.includes('zone') || options.include.includes('zones');
2019
+ const needsCapabilities = options.include.includes('capabilities') ||
2020
+ options.capability.includes('privateRouting') ||
2021
+ options.capability.includes('routerSwaps');
2022
+ const visibleRoutes = record.zones.filter((route) => hasZoneAccess({ chainId: route.chainId, scopes }));
2023
+ // Capabilities describe the vault; API-key scopes limit only the route metadata.
2024
+ const routes = needsCapabilities ? record.zones : includesRoutes ? visibleRoutes : [];
2025
+ if (routes.length === 0)
2026
+ return { discovery, zoneRoutes: [] };
2027
+ const resolved = await EarnVaults.resolveZoneRoutes({
2028
+ discovery,
2029
+ getClient: c.get('getClient'),
2030
+ routes,
2031
+ zones: [...c.get('zones').values()],
2032
+ });
2033
+ const capabilities = discovery.capabilities;
2034
+ if (needsCapabilities && !capabilities)
2035
+ throw new Error('Earn vault capabilities were not resolved.');
2036
+ return {
2037
+ discovery: capabilities
2038
+ ? { ...discovery, capabilities: EarnVaults.addZoneRouteCapabilities(capabilities) }
2039
+ : discovery,
2040
+ zoneRoutes: includesRoutes
2041
+ ? resolved.filter((route) => hasZoneAccess({ chainId: route.chainId, scopes }))
2042
+ : [],
2043
+ };
2044
+ }
1940
2045
  // Measuring a rate costs indexer boundary queries plus historical quotes against
1941
2046
  // an archive node, so an unrequested rate reaches neither.
1942
2047
  function resolvePageApy(c, options) {
@@ -1986,8 +2091,11 @@ async function resolvePageTokens(c, options) {
1986
2091
  snapshot: options.snapshot,
1987
2092
  });
1988
2093
  }
1989
- function resolveVault(c, options) {
2094
+ async function resolveVault(c, options) {
1990
2095
  const { discovery, record } = options;
2096
+ const principal = Auth.getPrincipal(c);
2097
+ const scopes = principal?.type === 'api_key' ? principal.apiKey.scopes : undefined;
2098
+ const zones = [...c.get('zones').values()].filter((zone) => hasZoneAccess({ chainId: zone.id, scopes }));
1991
2099
  const valued = options.include.includes('tvl')
1992
2100
  ? Valuation.valuationFor({
1993
2101
  amount: BigInt(discovery.state.totalAssets),
@@ -2011,7 +2119,8 @@ function resolveVault(c, options) {
2011
2119
  formatted: valued.amount,
2012
2120
  }
2013
2121
  : null,
2014
- zones: [...c.get('zones').values()],
2122
+ zoneRoutes: options.zoneRoutes,
2123
+ zones,
2015
2124
  });
2016
2125
  }
2017
2126
  /** Serializes resolved onchain and curated fields into the shared vault contract. */
@@ -2051,11 +2160,32 @@ export function serializeVault(options) {
2051
2160
  vaultAddress,
2052
2161
  verified: record !== undefined,
2053
2162
  ...(options.include.includes('zone')
2054
- ? { zone: record ? resolveZone({ discovery, record, zones: options.zones }) : null }
2163
+ ? {
2164
+ zone: record
2165
+ ? resolveZone({
2166
+ discovery,
2167
+ record,
2168
+ zoneRoutes: options.zoneRoutes,
2169
+ zones: options.zones,
2170
+ })
2171
+ : null,
2172
+ }
2055
2173
  : {}),
2174
+ ...(options.include.includes('zones') ? { zones: record ? options.zoneRoutes : [] } : {}),
2056
2175
  });
2057
2176
  }
2058
2177
  function resolveZone(options) {
2178
+ if (options.record.zones.length > 0) {
2179
+ if (options.zoneRoutes.length !== 1)
2180
+ return null;
2181
+ const route = options.zoneRoutes[0];
2182
+ return {
2183
+ chainId: route.chainId,
2184
+ inputTokens: [...route.inputTokens],
2185
+ name: route.name,
2186
+ outputTokens: [...route.outputTokens],
2187
+ };
2188
+ }
2059
2189
  if (!options.discovery.capabilities?.privateRouting)
2060
2190
  return null;
2061
2191
  const hasInputs = options.record.privateInputTokens.length > 0;
@@ -2065,6 +2195,8 @@ function resolveZone(options) {
2065
2195
  if (hasInputs !== hasOutputs)
2066
2196
  throw new Error('Private input and output tokens must both be configured.');
2067
2197
  const configured = options.zones.filter((zone) => zone.sourceId === options.record.chainId);
2198
+ if (configured.length === 0)
2199
+ return null;
2068
2200
  if (configured.length !== 1)
2069
2201
  throw new Error(`Expected one Earn Zone for chain ${options.record.chainId}.`);
2070
2202
  const zone = configured[0];