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
@@ -9,48 +9,22 @@ export type EventType = Webhooks.Envelope['type']
9
9
  /** Where a delivery attempt originated. */
10
10
  export type Trigger = 'manual_retry' | 'ping' | 'queue'
11
11
 
12
- /** Bounded poller stage names used by `webhook:poll`. */
13
- export type PollStage = 'cursor_write' | 'enrich' | 'rpc_head' | 'scan' | 'subscription_read'
14
-
15
- /** Bounded Durable Object or transport failure classes used by `webhook:poll-failure`. */
16
- export type PollFailure = 'other' | 'overloaded' | 'remote' | 'retryable'
17
-
18
- /** Context for one poller tick that the {@link Webhooks.createPoller.Result} omits. */
19
- export type TickMeta = {
20
- /** Chain polled this tick; used when the tick errored before a result existed. */
21
- chainId?: number | undefined
22
- /** Wall-clock duration of the tick in ms. */
23
- durationMs: number
24
- /** Whether the tick completed. */
25
- outcome: 'error' | 'ok'
26
- }
12
+ /** Bounded step names inside one block-fanout scan, used by `webhook:scan-step`. */
13
+ export type ScanStep =
14
+ | 'block_rpc'
15
+ | 'enrich'
16
+ | 'finalized_rpc'
17
+ | 'logs_rpc'
18
+ | 'match'
19
+ | 'stage'
20
+ | 'subscription_read'
27
21
 
28
22
  /**
29
- * A webhook metric event, recorded by the {@link webhooks} sink. The poller
30
- * emits head recovery, poll, tick, and enqueue measurements; the delivery path
23
+ * A webhook metric event, recorded by the {@link webhooks} sink. The
24
+ * block-fanout scan path emits head and scan measurements; the delivery path
31
25
  * emits `webhook:delivery`.
32
26
  */
33
27
  export type WebhookEvent =
34
- | {
35
- /** Tempo chain whose poll cycle completed. */
36
- chainId: number
37
- /** Whether the poll cycle completed without scan or dispatch failures. */
38
- outcome: 'error' | 'ok'
39
- /** Requested boundary movement since the preceding successful poll, in blocks. */
40
- requestedBoundaryAdvanceBlocks?: number | undefined
41
- /** Execution path that acquired this poll claim. */
42
- trigger: 'alarm' | 'cron' | 'direct' | 'queue'
43
- /** Identifies a transport-neutral poll-cycle measurement. */
44
- type: 'webhook:poll-cycle'
45
- }
46
- | {
47
- /** Tempo chain whose durable progress was read. */
48
- chainId: number
49
- /** Blocks between the desired and fully drained boundaries. */
50
- lagBlocks: number
51
- /** Identifies durable coordinator progress. */
52
- type: 'webhook:head-progress'
53
- }
54
28
  | {
55
29
  /** Tempo chain whose listener was checked. */
56
30
  chainId: number
@@ -61,114 +35,35 @@ export type WebhookEvent =
61
35
  }
62
36
  | {
63
37
  chainId: number
64
- /** Blocks the probed chain head leads the listener's newest observation. */
65
- lagBlocks: number
66
- /** Identifies the out-of-band listener head probe. */
67
- type: 'webhook:listener-head-lag'
68
- }
69
- | {
70
- /** Tempo chain whose recovery poke was dequeued. */
71
- chainId: number
72
- /** When the recovery poke was dequeued, as epoch milliseconds. */
73
- dequeuedAt: number
74
- /** When the recovery poke was enqueued, as epoch milliseconds. */
75
- enqueuedAt: number
76
- /** Recovery source carried through the Queue handoff. */
77
- trigger: 'alarm' | 'queue'
78
- /** Identifies recovery Queue latency, not observed head volume. */
79
- type: 'webhook:head-recovery'
80
- }
81
- | {
82
- /** Tempo chain whose poll claim was acquired. */
83
- chainId: number
84
- /** Delay from observing the desired boundary to acquiring the claim. */
85
- delayMs?: number | undefined
86
- /** Execution path that acquired the claim. */
87
- trigger: 'alarm' | 'cron' | 'direct' | 'queue'
88
- /** Identifies a poll beginning, before scan work runs. */
89
- type: 'webhook:poll-start'
90
- }
91
- | {
92
- /** Tempo chain whose poll failed. */
93
- chainId: number
94
- /** Bounded class of the thrown failure. */
95
- failure: PollFailure
96
- /** Operation boundary that rejected the poll. */
97
- stage: 'claim' | 'continuation_enqueue' | 'finish' | 'scan'
98
- /** Execution path that failed before recovery. */
99
- trigger: 'alarm' | 'cron' | 'direct' | 'queue'
100
- /** Identifies a transport-neutral poll failure. */
101
- type: 'webhook:poll-failure'
102
- }
103
- | {
104
- chainId: number
105
- durationMs: number
106
- eventType?: EventType | undefined
107
- outcome: 'error' | 'ok'
108
- stage: PollStage
109
- type: 'webhook:poll'
110
- }
111
- | {
112
- /** Tempo chain whose eligible subscription count was read. */
113
- chainId: number
114
- /** Active, unexpired subscriptions selected for the poll. */
115
- count: number
116
- /** Identifies a pre-scan subscription eligibility measurement. */
117
- type: 'webhook:poll-subscriptions'
118
- }
119
- | {
120
- /** Chain scanned by this poll batch. */
121
- chainId: number
122
- /** Shared upper bound for concurrent upstream scans. */
123
- concurrency: number
124
- /** Scan duration, present only after completion. */
125
- durationMs?: number | undefined
126
- /** Subscription event type scanned by this batch. */
127
- eventType: EventType
128
- /** Subscriptions whose scan rejected, present only after completion. */
129
- failedSubscriptions?: number | undefined
130
- /** Matching rows retained by completed pages, present only after completion. */
131
- matchedItems?: number | undefined
132
- /** Largest block window requested by one subscription. */
133
- maxWindowBlocks: number
134
- /** Whether the checkpoint precedes allocation or follows scan completion. */
135
- phase: 'complete' | 'start'
136
- /** Outcome of the completed RPC-backed scan. */
137
- outcome?: 'empty' | 'error' | 'missing' | 'ok' | undefined
138
- /** JSON-RPC method used by this event type's scanner. */
139
- rpcMethod: 'eth_getBlockByNumber' | 'eth_getLogs'
140
- /** Subscriptions retained in this scan batch. */
141
- subscriptionCount: number
142
- /** Maximum subscriptions retained by this event-type batch. */
143
- subscriptionLimit: number
144
- /** Sum of subscription block windows in this scan batch. */
145
- totalWindowBlocks: number
146
- /** Identifies a memory-attribution scan boundary. */
147
- type: 'webhook:poll-scan'
148
- }
149
- | {
150
- cursorLagBlocks?: number | undefined
151
- meta: TickMeta
152
- result: Webhooks.createPoller.Result | undefined
153
- type: 'webhook:tick'
154
- }
155
- | {
156
- chainId: number
157
- durationMs: number
158
- eventType: EventType
159
- ok: boolean
160
- type: 'webhook:enqueue'
161
- }
162
- | {
163
- chainId: number
38
+ /** True once finality has deferred this block at least one round. */
39
+ deferred: boolean
164
40
  /** Rows matched when dispatched; zero otherwise. */
165
41
  matches: number
42
+ /** Block timestamp to scan completion; absent when the block was not read. */
43
+ scanLagMs?: number | undefined
44
+ /** Block timestamp to head observation; absent without a fresh stamp. */
45
+ observationLagMs?: number | undefined
166
46
  /** How the head that enqueued this block was observed. */
167
47
  origin: string
168
48
  /** One scanned block's outcome. */
169
49
  outcome: 'deferred' | 'dispatched' | 'empty'
50
+ /** Head observation to this scan attempt starting; absent without a stamp. */
51
+ queueWaitMs?: number | undefined
170
52
  /** Identifies one block-fanout scan. */
171
53
  type: 'webhook:scan-block'
54
+ /** Wall-clock work inside this scan attempt. */
55
+ workMs: number
56
+ }
57
+ | {
58
+ chainId: number
59
+ /** Times this step ran across the batch, so the total can be normalized. */
60
+ count: number
61
+ /** Wall-clock duration of this step summed across the batch. */
62
+ durationMs: number
63
+ /** Bounded step name. */
64
+ step: ScanStep
65
+ /** Identifies per-step scan attribution. */
66
+ type: 'webhook:scan-step'
172
67
  }
173
68
  | {
174
69
  chainId: number
@@ -178,6 +73,8 @@ export type WebhookEvent =
178
73
  pendingCount: number
179
74
  /** Identifies the coordinator's tracked-scan backlog. */
180
75
  type: 'webhook:scan-backlog'
76
+ /** Blocks between the chain head and the enqueue watermark. */
77
+ watermarkLagBlocks?: number | undefined
181
78
  }
182
79
  | {
183
80
  chainId: number
@@ -212,9 +109,17 @@ export type WebhookEvent =
212
109
  deliveryLogMs?: number | undefined
213
110
  envelopeToQueueMs?: number | undefined
214
111
  endToEndMs?: number | undefined
112
+ /** Block timestamp to the attempt leaving; the total latency SLI. */
113
+ eventToAttemptMs?: number | undefined
215
114
  eventToEnvelopeMs?: number | undefined
115
+ /** Head observation to the attempt leaving; the controllable SLI. */
116
+ observedToAttemptMs?: number | undefined
117
+ /** Dequeue to the attempt leaving: claim, reads, signing. */
118
+ preflightMs?: number | undefined
216
119
  processingMs?: number | undefined
217
120
  queueWaitMs?: number | undefined
121
+ /** Response headers to bookkeeping complete; occupancy, not latency. */
122
+ settleMs?: number | undefined
218
123
  stateWriteMs?: number | undefined
219
124
  subscriptionReadMs?: number | undefined
220
125
  }
@@ -227,7 +132,7 @@ export type RequestSink = (entry: Log.Entry) => void
227
132
 
228
133
  /** Records webhook reliability metrics. Built by {@link webhooks}. */
229
134
  export type WebhookSink = {
230
- /** Ships buffered metrics (call once per poller tick / delivery). */
135
+ /** Ships buffered metrics (call once per scan batch / delivery). */
231
136
  flush(): void
232
137
  /** Records one webhook event. */
233
138
  record(event: WebhookEvent): void
@@ -386,161 +291,56 @@ export function webhooks(backend: Metrics): WebhookSink {
386
291
  },
387
292
  record(event) {
388
293
  switch (event.type) {
389
- case 'webhook:head-recovery': {
390
- const tags = { chain_id: String(event.chainId), trigger: event.trigger }
391
- backend.count('webhook_head_recovery_queue_count', 1, tags)
392
- backend.histogram(
393
- 'webhook_head_recovery_queue_wait_ms',
394
- Math.max(0, event.dequeuedAt - event.enqueuedAt),
395
- tags,
396
- )
397
- return
398
- }
399
- case 'webhook:head-progress':
400
- backend.gauge('webhook_head_progress_lag_blocks', event.lagBlocks, {
401
- chain_id: String(event.chainId),
402
- })
403
- return
404
294
  case 'webhook:head-skipped':
405
295
  backend.gauge('webhook_head_skipped_count', event.skippedHeads, {
406
296
  chain_id: String(event.chainId),
407
297
  })
408
298
  return
409
- case 'webhook:listener-head-lag':
410
- backend.gauge('webhook_listener_head_lag_blocks', event.lagBlocks, {
411
- chain_id: String(event.chainId),
412
- })
413
- return
414
- case 'webhook:poll-failure':
415
- backend.count('webhook_poll_failure_count', 1, {
416
- chain_id: String(event.chainId),
417
- failure: event.failure,
418
- stage: event.stage,
419
- trigger: event.trigger,
420
- })
421
- return
422
- case 'webhook:poll': {
299
+ case 'webhook:scan-block': {
423
300
  const tags = {
424
301
  chain_id: String(event.chainId),
425
- ...(event.eventType === undefined ? {} : { event_type: event.eventType }),
302
+ origin: event.origin,
426
303
  outcome: event.outcome,
427
- stage: event.stage,
428
- }
429
- backend.histogram('webhook_poller_stage_duration_ms', event.durationMs, tags)
430
- return
431
- }
432
- case 'webhook:poll-scan': {
433
- const tags = {
434
- chain_id: String(event.chainId),
435
- event_type: event.eventType,
436
- phase: event.phase,
437
304
  }
438
- backend.count('webhook_poller_scan_checkpoint_count', 1, tags)
439
- backend.histogram('webhook_poller_scan_concurrency', event.concurrency, tags)
440
- backend.histogram('webhook_poller_scan_subscription_count', event.subscriptionCount, tags)
441
- backend.histogram('webhook_poller_scan_subscription_limit', event.subscriptionLimit, tags)
442
- backend.histogram('webhook_poller_scan_max_window_blocks', event.maxWindowBlocks, tags)
443
- backend.histogram(
444
- 'webhook_poller_scan_total_window_blocks',
445
- event.totalWindowBlocks,
446
- tags,
447
- )
448
- if (event.durationMs !== undefined)
449
- backend.histogram('webhook_poller_scan_duration_ms', event.durationMs, tags)
450
- if (event.failedSubscriptions !== undefined)
451
- backend.count(
452
- 'webhook_poller_scan_failed_subscription_count',
453
- event.failedSubscriptions,
454
- tags,
455
- )
456
- if (event.matchedItems !== undefined)
457
- backend.count('webhook_poller_scan_matched_item_count', event.matchedItems, tags)
458
- if (event.outcome !== undefined)
459
- backend.count('webhook_poller_rpc_scan_count', 1, {
305
+ backend.count('webhook_scan_block_count', 1, tags)
306
+ if (event.matches > 0) backend.count('webhook_scan_match_count', event.matches, tags)
307
+ backend.histogram('webhook_scan_work_ms', event.workMs, tags)
308
+ // Deferred rounds are chain finality, not queue depth, so the wait
309
+ // carries the distinction rather than silently averaging the two.
310
+ if (event.queueWaitMs !== undefined)
311
+ backend.histogram('webhook_scan_queue_wait_ms', event.queueWaitMs, {
312
+ ...tags,
313
+ deferred: String(event.deferred),
314
+ })
315
+ if (event.observationLagMs !== undefined)
316
+ backend.histogram('webhook_scan_observation_lag_ms', event.observationLagMs, {
460
317
  chain_id: String(event.chainId),
461
- event_type: event.eventType,
462
- outcome: event.outcome,
463
- rpc_method: event.rpcMethod,
318
+ origin: event.origin,
464
319
  })
465
- return
466
- }
467
- case 'webhook:poll-subscriptions':
468
- backend.gauge('webhook_poller_active_subscription_count', event.count, {
469
- chain_id: String(event.chainId),
470
- })
471
- return
472
- case 'webhook:poll-cycle': {
473
- const tags = {
474
- chain_id: String(event.chainId),
475
- outcome: event.outcome,
476
- trigger: event.trigger,
477
- }
478
- backend.count('webhook_poll_cycle_count', 1, tags)
479
- if (event.requestedBoundaryAdvanceBlocks !== undefined)
480
- backend.histogram(
481
- 'webhook_poll_requested_boundary_advance_blocks',
482
- event.requestedBoundaryAdvanceBlocks,
483
- tags,
484
- )
485
- return
486
- }
487
- case 'webhook:poll-start': {
488
- const tags = { chain_id: String(event.chainId), trigger: event.trigger }
489
- backend.count('webhook_poll_start_count', 1, tags)
490
- if (event.delayMs !== undefined)
491
- backend.histogram('webhook_poll_start_delay_ms', event.delayMs, tags)
492
- return
493
- }
494
- case 'webhook:tick': {
495
- const { meta, result } = event
496
- const chain_id = String(result?.chainId ?? meta.chainId ?? 'unknown')
497
- backend.count('webhook_poller_tick_count', 1, { chain_id, outcome: meta.outcome })
498
- backend.histogram('webhook_poller_tick_duration_ms', meta.durationMs, {
499
- chain_id,
500
- outcome: meta.outcome,
501
- })
502
- if (event.cursorLagBlocks !== undefined)
503
- backend.gauge('webhook_subscription_cursor_lag_blocks', event.cursorLagBlocks, {
504
- chain_id,
320
+ // Block timestamp to scan completion: how far behind the chain the
321
+ // scanner is, reported by every scanned block rather than only by
322
+ // blocks that produce a delivery.
323
+ if (event.scanLagMs !== undefined)
324
+ backend.histogram('webhook_scan_lag_ms', event.scanLagMs, {
325
+ chain_id: String(event.chainId),
505
326
  })
506
- if (!result) return
507
- backend.histogram('webhook_poller_subscription_count', result.subscriptions, { chain_id })
508
- backend.count('webhook_poller_scanned_count', result.scanned, { chain_id })
509
- backend.gauge('webhook_poller_safe_block', result.safeBlock, { chain_id })
510
- backend.count('webhook_poller_dispatch_count', result.dispatched, {
511
- chain_id,
512
- outcome: 'dispatched',
513
- })
514
- backend.count('webhook_poller_dispatch_count', result.failed, {
515
- chain_id,
516
- outcome: 'failed',
517
- })
518
327
  return
519
328
  }
520
- case 'webhook:enqueue': {
521
- const tags = { chain_id: String(event.chainId), event_type: event.eventType }
522
- const outcome = event.ok ? 'ok' : 'error'
523
- backend.count('webhook_dispatch_enqueue_count', 1, { ...tags, outcome })
524
- backend.histogram('webhook_dispatch_enqueue_duration_ms', event.durationMs, {
525
- ...tags,
526
- outcome,
527
- })
528
- return
529
- }
530
- case 'webhook:scan-block': {
531
- const tags = {
532
- chain_id: String(event.chainId),
533
- origin: event.origin,
534
- outcome: event.outcome,
535
- }
536
- backend.count('webhook_scan_block_count', 1, tags)
537
- if (event.matches > 0) backend.count('webhook_scan_match_count', event.matches, tags)
329
+ case 'webhook:scan-step': {
330
+ const tags = { chain_id: String(event.chainId), step: event.step }
331
+ // Batch totals, so the count is required to read a per-invocation
332
+ // mean: a ten-block batch otherwise reports ten times a one-block
333
+ // batch at identical per-call latency.
334
+ backend.histogram('webhook_scan_step_duration_ms', event.durationMs, tags)
335
+ backend.count('webhook_scan_step_count', event.count, tags)
538
336
  return
539
337
  }
540
338
  case 'webhook:scan-backlog': {
541
339
  const tags = { chain_id: String(event.chainId) }
542
340
  backend.gauge('webhook_scan_pending_count', event.pendingCount, tags)
543
341
  backend.gauge('webhook_scan_oldest_pending_age_ms', event.oldestPendingAgeMs ?? 0, tags)
342
+ if (event.watermarkLagBlocks !== undefined)
343
+ backend.gauge('webhook_scan_watermark_lag_blocks', event.watermarkLagBlocks, tags)
544
344
  return
545
345
  }
546
346
  case 'webhook:scan-finality': {
@@ -593,6 +393,25 @@ export function webhooks(backend: Metrics): WebhookSink {
593
393
  })
594
394
  if (timings?.deliveryLogMs !== undefined)
595
395
  backend.histogram('webhook_delivery_log_write_ms', timings.deliveryLogMs, tags)
396
+ if (timings?.preflightMs !== undefined)
397
+ backend.histogram('webhook_delivery_preflight_ms', timings.preflightMs, tags)
398
+ if (timings?.settleMs !== undefined)
399
+ backend.histogram('webhook_delivery_settle_ms', timings.settleMs, tags)
400
+ // The two headline latency SLIs, both ending when the attempt leaves
401
+ // rather than when bookkeeping finishes. Attempt-bucketed for the
402
+ // same reason as end-to-end: retries carry designed backoff.
403
+ if (timings?.eventToAttemptMs !== undefined)
404
+ backend.histogram('webhook_event_to_attempt_ms', timings.eventToAttemptMs, {
405
+ ...tags,
406
+ attempt_bucket: attemptBucket(event.attempt),
407
+ outcome,
408
+ })
409
+ if (timings?.observedToAttemptMs !== undefined)
410
+ backend.histogram('webhook_observed_to_attempt_ms', timings.observedToAttemptMs, {
411
+ ...tags,
412
+ attempt_bucket: attemptBucket(event.attempt),
413
+ outcome,
414
+ })
596
415
  if (timings?.envelopeToQueueMs !== undefined)
597
416
  backend.histogram(
598
417
  'webhook_delivery_envelope_to_queue_ms',