tapimo 0.7.0 → 0.7.2

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 (689) hide show
  1. package/dist/ApiKeys.d.ts +24 -7
  2. package/dist/ApiKeys.d.ts.map +1 -1
  3. package/dist/ApiKeys.js +17 -5
  4. package/dist/ApiKeys.js.map +1 -1
  5. package/dist/App.d.ts +12104 -7861
  6. package/dist/App.d.ts.map +1 -1
  7. package/dist/App.js +191 -128
  8. package/dist/App.js.map +1 -1
  9. package/dist/Assets.d.ts +10 -0
  10. package/dist/Assets.d.ts.map +1 -1
  11. package/dist/Assets.js +17 -4
  12. package/dist/Assets.js.map +1 -1
  13. package/dist/Scope.d.ts +19 -8
  14. package/dist/Scope.d.ts.map +1 -1
  15. package/dist/Scope.js +25 -9
  16. package/dist/Scope.js.map +1 -1
  17. package/dist/Webhooks.d.ts +1 -1
  18. package/dist/admin/App.d.ts +601 -20
  19. package/dist/admin/App.d.ts.map +1 -1
  20. package/dist/admin/App.js +12 -2
  21. package/dist/admin/App.js.map +1 -1
  22. package/dist/admin/apps/api-keys.d.ts +94 -11
  23. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.js +141 -32
  25. package/dist/admin/apps/api-keys.js.map +1 -1
  26. package/dist/admin/apps/earn-vaults.d.ts +1069 -0
  27. package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
  28. package/dist/admin/apps/earn-vaults.js +409 -0
  29. package/dist/admin/apps/earn-vaults.js.map +1 -0
  30. package/dist/admin/apps/verified-tokens.d.ts +166 -166
  31. package/dist/admin/ui.generated.d.ts +1 -1
  32. package/dist/admin/ui.generated.d.ts.map +1 -1
  33. package/dist/admin/ui.generated.js +151 -95
  34. package/dist/admin/ui.generated.js.map +1 -1
  35. package/dist/analytics/Analytics.d.ts +2 -0
  36. package/dist/analytics/Analytics.d.ts.map +1 -1
  37. package/dist/analytics/Analytics.js +18 -2
  38. package/dist/analytics/Analytics.js.map +1 -1
  39. package/dist/analytics/tables/requestEvents.d.ts +22 -1
  40. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  41. package/dist/analytics/tables/requestEvents.js +59 -39
  42. package/dist/analytics/tables/requestEvents.js.map +1 -1
  43. package/dist/apps/Zones.d.ts +8335 -0
  44. package/dist/apps/Zones.d.ts.map +1 -0
  45. package/dist/apps/Zones.js +38 -0
  46. package/dist/apps/Zones.js.map +1 -0
  47. package/dist/apps/data/App.d.ts +14377 -10165
  48. package/dist/apps/data/App.d.ts.map +1 -1
  49. package/dist/apps/data/App.js +91 -19
  50. package/dist/apps/data/App.js.map +1 -1
  51. package/dist/apps/data/FxOracle.d.ts +1 -1
  52. package/dist/apps/data/FxOracle.d.ts.map +1 -1
  53. package/dist/apps/data/index.d.ts +0 -1
  54. package/dist/apps/data/index.d.ts.map +1 -1
  55. package/dist/apps/data/index.js +0 -1
  56. package/dist/apps/data/index.js.map +1 -1
  57. package/dist/apps/data/routes/activities.d.ts +32 -32
  58. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  59. package/dist/apps/data/routes/activities.js +130 -65
  60. package/dist/apps/data/routes/activities.js.map +1 -1
  61. package/dist/apps/data/routes/addresses.d.ts +312 -312
  62. package/dist/apps/data/routes/balances.d.ts +18 -18
  63. package/dist/apps/data/routes/balances.js +5 -5
  64. package/dist/apps/data/routes/balances.js.map +1 -1
  65. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  66. package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
  67. package/dist/apps/data/routes/coingecko.js +62 -35
  68. package/dist/apps/data/routes/coingecko.js.map +1 -1
  69. package/dist/apps/data/routes/earn.d.ts +2144 -0
  70. package/dist/apps/data/routes/earn.d.ts.map +1 -0
  71. package/dist/apps/data/routes/earn.js +947 -0
  72. package/dist/apps/data/routes/earn.js.map +1 -0
  73. package/dist/apps/data/routes/exchanges.d.ts +1231 -324
  74. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  75. package/dist/apps/data/routes/exchanges.js +656 -193
  76. package/dist/apps/data/routes/exchanges.js.map +1 -1
  77. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  78. package/dist/apps/data/routes/fee-amm.js +59 -8
  79. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  80. package/dist/apps/data/routes/funding.d.ts +4092 -387
  81. package/dist/apps/data/routes/funding.d.ts.map +1 -1
  82. package/dist/apps/data/routes/funding.js +1403 -256
  83. package/dist/apps/data/routes/funding.js.map +1 -1
  84. package/dist/apps/data/routes/indexer.d.ts +5 -5
  85. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  86. package/dist/apps/data/routes/indexer.js +19 -2
  87. package/dist/apps/data/routes/indexer.js.map +1 -1
  88. package/dist/apps/data/routes/receipts.d.ts +265 -265
  89. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  90. package/dist/apps/data/routes/receipts.js +11 -11
  91. package/dist/apps/data/routes/receipts.js.map +1 -1
  92. package/dist/apps/data/routes/rpc.d.ts +5 -5
  93. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  94. package/dist/apps/data/routes/rpc.js +211 -22
  95. package/dist/apps/data/routes/rpc.js.map +1 -1
  96. package/dist/apps/data/routes/tokenlist.d.ts +36 -36
  97. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  98. package/dist/apps/data/routes/tokenlist.js +49 -9
  99. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  100. package/dist/apps/data/routes/tokens.d.ts +116 -88
  101. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  102. package/dist/apps/data/routes/tokens.js +198 -91
  103. package/dist/apps/data/routes/tokens.js.map +1 -1
  104. package/dist/apps/data/routes/transactions.d.ts +55 -55
  105. package/dist/apps/data/routes/transactions.d.ts.map +1 -1
  106. package/dist/apps/data/routes/transactions.js +78 -39
  107. package/dist/apps/data/routes/transactions.js.map +1 -1
  108. package/dist/apps/data/routes/transfers.d.ts +78 -29
  109. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  110. package/dist/apps/data/routes/transfers.js +165 -67
  111. package/dist/apps/data/routes/transfers.js.map +1 -1
  112. package/dist/apps/data/routes/valuation.d.ts +10 -10
  113. package/dist/apps/data/routes/valuation.js +2 -2
  114. package/dist/apps/data/routes/valuation.js.map +1 -1
  115. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
  116. package/dist/apps/data/routes/verified-tokens.js +34 -9
  117. package/dist/apps/data/routes/verified-tokens.js.map +1 -1
  118. package/dist/apps/data/routes/webhooks.d.ts +5 -3
  119. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  120. package/dist/apps/data/routes/webhooks.js +175 -65
  121. package/dist/apps/data/routes/webhooks.js.map +1 -1
  122. package/dist/apps/data/routes/zones.d.ts +281 -0
  123. package/dist/apps/data/routes/zones.d.ts.map +1 -0
  124. package/dist/apps/data/routes/zones.js +252 -0
  125. package/dist/apps/data/routes/zones.js.map +1 -0
  126. package/dist/apps/docs/reference.js +6 -5
  127. package/dist/apps/docs/reference.js.map +1 -1
  128. package/dist/apps/index.d.ts +2 -1
  129. package/dist/apps/index.d.ts.map +1 -1
  130. package/dist/apps/index.js +2 -1
  131. package/dist/apps/index.js.map +1 -1
  132. package/dist/apps/management/App.d.ts +670 -670
  133. package/dist/apps/management/Billing.d.ts +8 -0
  134. package/dist/apps/management/Billing.d.ts.map +1 -1
  135. package/dist/apps/management/Billing.js +12 -0
  136. package/dist/apps/management/Billing.js.map +1 -1
  137. package/dist/apps/management/Error.d.ts +12 -0
  138. package/dist/apps/management/Error.d.ts.map +1 -0
  139. package/dist/apps/management/Error.js +10 -0
  140. package/dist/apps/management/Error.js.map +1 -0
  141. package/dist/apps/management/routes/api-keys.d.ts +5 -5
  142. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  143. package/dist/apps/management/routes/api-keys.js +2 -8
  144. package/dist/apps/management/routes/api-keys.js.map +1 -1
  145. package/dist/apps/management/routes/billing.d.ts +119 -119
  146. package/dist/apps/management/routes/faucet.d.ts +35 -35
  147. package/dist/apps/management/routes/invitations.d.ts +62 -62
  148. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  149. package/dist/apps/management/routes/invitations.js +4 -10
  150. package/dist/apps/management/routes/invitations.js.map +1 -1
  151. package/dist/apps/management/routes/invite-links.d.ts +30 -30
  152. package/dist/apps/management/routes/me.d.ts +6 -6
  153. package/dist/apps/management/routes/members.d.ts +78 -78
  154. package/dist/apps/management/routes/orgs.d.ts +48 -48
  155. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  156. package/dist/apps/management/routes/orgs.js +2 -8
  157. package/dist/apps/management/routes/orgs.js.map +1 -1
  158. package/dist/apps/management/routes/projects.d.ts +9 -9
  159. package/dist/apps/management/routes/scopes.js +2 -2
  160. package/dist/apps/management/routes/scopes.js.map +1 -1
  161. package/dist/apps/management/routes/usage.d.ts +80 -80
  162. package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
  163. package/dist/apps/management/routes/webhooks.d.ts +50 -50
  164. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  165. package/dist/apps/management/routes/webhooks.js +15 -3
  166. package/dist/apps/management/routes/webhooks.js.map +1 -1
  167. package/dist/apps/mpp/App.d.ts +55 -56
  168. package/dist/apps/mpp/App.d.ts.map +1 -1
  169. package/dist/apps/mpp/App.js +192 -27
  170. package/dist/apps/mpp/App.js.map +1 -1
  171. package/dist/apps/mpp/Mpp.d.ts +0 -20
  172. package/dist/apps/mpp/Mpp.d.ts.map +1 -1
  173. package/dist/apps/mpp/Mpp.js +0 -24
  174. package/dist/apps/mpp/Mpp.js.map +1 -1
  175. package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
  176. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
  177. package/dist/apps/mpp/internal/Adapter.js +66 -0
  178. package/dist/apps/mpp/internal/Adapter.js.map +1 -0
  179. package/dist/apps/mpp/internal/Error.d.ts +4 -0
  180. package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
  181. package/dist/apps/mpp/internal/Error.js +41 -0
  182. package/dist/apps/mpp/internal/Error.js.map +1 -0
  183. package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
  184. package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
  185. package/dist/apps/mpp/internal/Idempotency.js +28 -0
  186. package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
  187. package/dist/apps/mpp/internal/Policy.d.ts +46 -0
  188. package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
  189. package/dist/apps/mpp/internal/Policy.js +57 -0
  190. package/dist/apps/mpp/internal/Policy.js.map +1 -0
  191. package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
  192. package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
  193. package/dist/apps/mpp/internal/ScreenManager.js +18 -0
  194. package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
  195. package/dist/apps/mpp/internal/Screening.d.ts +35 -0
  196. package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
  197. package/dist/apps/mpp/internal/Screening.js +20 -0
  198. package/dist/apps/mpp/internal/Screening.js.map +1 -0
  199. package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
  200. package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
  201. package/dist/apps/mpp/internal/Sponsorship.js +103 -0
  202. package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
  203. package/dist/apps/mpp/internal/Utils.d.ts +7 -0
  204. package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
  205. package/dist/apps/mpp/internal/Utils.js +24 -0
  206. package/dist/apps/mpp/internal/Utils.js.map +1 -0
  207. package/dist/apps/relay/App.js +184 -24
  208. package/dist/apps/relay/App.js.map +1 -1
  209. package/dist/apps/relay/Sponsorships.d.ts +4 -0
  210. package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
  211. package/dist/apps/relay/Sponsorships.js +16 -7
  212. package/dist/apps/relay/Sponsorships.js.map +1 -1
  213. package/dist/db/Db.d.ts +20 -0
  214. package/dist/db/Db.d.ts.map +1 -1
  215. package/dist/db/Db.js +342 -0
  216. package/dist/db/Db.js.map +1 -1
  217. package/dist/db/Schema.d.ts +921 -1
  218. package/dist/db/Schema.d.ts.map +1 -1
  219. package/dist/db/Schema.js +269 -1
  220. package/dist/db/Schema.js.map +1 -1
  221. package/dist/db/tables/earnVaults.d.ts +68 -0
  222. package/dist/db/tables/earnVaults.d.ts.map +1 -0
  223. package/dist/db/tables/earnVaults.js +72 -0
  224. package/dist/db/tables/earnVaults.js.map +1 -0
  225. package/dist/db/tables/fundingCatalog.d.ts +56 -0
  226. package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
  227. package/dist/db/tables/fundingCatalog.js +85 -0
  228. package/dist/db/tables/fundingCatalog.js.map +1 -0
  229. package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
  230. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
  231. package/dist/db/tables/fundingDepositAddresses.js +206 -0
  232. package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
  233. package/dist/db/tables/fundingDeposits.d.ts +115 -0
  234. package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
  235. package/dist/db/tables/fundingDeposits.js +100 -0
  236. package/dist/db/tables/fundingDeposits.js.map +1 -0
  237. package/dist/db/tables/fundingIdempotency.d.ts +91 -0
  238. package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
  239. package/dist/db/tables/fundingIdempotency.js +103 -0
  240. package/dist/db/tables/fundingIdempotency.js.map +1 -0
  241. package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
  242. package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
  243. package/dist/db/tables/fundingTransferEvents.js +18 -0
  244. package/dist/db/tables/fundingTransferEvents.js.map +1 -0
  245. package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
  246. package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
  247. package/dist/db/tables/fundingTransferTransactions.js +27 -0
  248. package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
  249. package/dist/db/tables/fundingTransfers.d.ts +82 -0
  250. package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
  251. package/dist/db/tables/fundingTransfers.js +89 -0
  252. package/dist/db/tables/fundingTransfers.js.map +1 -0
  253. package/dist/db/tables/organizations.d.ts +8 -0
  254. package/dist/db/tables/organizations.d.ts.map +1 -1
  255. package/dist/db/tables/organizations.js +35 -0
  256. package/dist/db/tables/organizations.js.map +1 -1
  257. package/dist/db/tables/projects.d.ts +8 -0
  258. package/dist/db/tables/projects.d.ts.map +1 -1
  259. package/dist/db/tables/projects.js +16 -0
  260. package/dist/db/tables/projects.js.map +1 -1
  261. package/dist/db/tables/requestUsage.d.ts +13 -0
  262. package/dist/db/tables/requestUsage.d.ts.map +1 -1
  263. package/dist/db/tables/requestUsage.js +16 -0
  264. package/dist/db/tables/requestUsage.js.map +1 -1
  265. package/dist/db/tables/sponsoredTransactions.d.ts +4 -2
  266. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
  267. package/dist/db/tables/sponsoredTransactions.js +14 -4
  268. package/dist/db/tables/sponsoredTransactions.js.map +1 -1
  269. package/dist/db/tables/users.d.ts +8 -0
  270. package/dist/db/tables/users.d.ts.map +1 -1
  271. package/dist/db/tables/users.js +16 -0
  272. package/dist/db/tables/users.js.map +1 -1
  273. package/dist/db/tables/verifiedTokens.d.ts +14 -7
  274. package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
  275. package/dist/db/tables/verifiedTokens.js +9 -7
  276. package/dist/db/tables/verifiedTokens.js.map +1 -1
  277. package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
  278. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  279. package/dist/db/tables/webhookSubscriptions.js +24 -3
  280. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  281. package/dist/handlers/relay.js +108 -108
  282. package/dist/handlers/relay.js.map +1 -1
  283. package/dist/internal/Auth.d.ts +26 -0
  284. package/dist/internal/Auth.d.ts.map +1 -1
  285. package/dist/internal/Auth.js +35 -2
  286. package/dist/internal/Auth.js.map +1 -1
  287. package/dist/internal/Cache.d.ts.map +1 -1
  288. package/dist/internal/Cache.js +16 -10
  289. package/dist/internal/Cache.js.map +1 -1
  290. package/dist/internal/Cursor.js +1 -1
  291. package/dist/internal/Cursor.js.map +1 -1
  292. package/dist/internal/EarnRates.d.ts +89 -0
  293. package/dist/internal/EarnRates.d.ts.map +1 -0
  294. package/dist/internal/EarnRates.js +266 -0
  295. package/dist/internal/EarnRates.js.map +1 -0
  296. package/dist/internal/EarnVaults.d.ts +171 -0
  297. package/dist/internal/EarnVaults.d.ts.map +1 -0
  298. package/dist/internal/EarnVaults.js +547 -0
  299. package/dist/internal/EarnVaults.js.map +1 -0
  300. package/dist/internal/EdgeCache.d.ts +9 -2
  301. package/dist/internal/EdgeCache.d.ts.map +1 -1
  302. package/dist/internal/EdgeCache.js +36 -9
  303. package/dist/internal/EdgeCache.js.map +1 -1
  304. package/dist/internal/Id.d.ts +11 -0
  305. package/dist/internal/Id.d.ts.map +1 -1
  306. package/dist/internal/Id.js +13 -0
  307. package/dist/internal/Id.js.map +1 -1
  308. package/dist/internal/Idempotency.d.ts +83 -0
  309. package/dist/internal/Idempotency.d.ts.map +1 -0
  310. package/dist/internal/Idempotency.js +113 -0
  311. package/dist/internal/Idempotency.js.map +1 -0
  312. package/dist/internal/Log.d.ts +64 -9
  313. package/dist/internal/Log.d.ts.map +1 -1
  314. package/dist/internal/Log.js +29 -7
  315. package/dist/internal/Log.js.map +1 -1
  316. package/dist/internal/MetricSink.d.ts.map +1 -1
  317. package/dist/internal/MetricSink.js +47 -1
  318. package/dist/internal/MetricSink.js.map +1 -1
  319. package/dist/internal/OpenApi.d.ts +1 -1
  320. package/dist/internal/OpenApi.d.ts.map +1 -1
  321. package/dist/internal/OpenApi.js +3 -0
  322. package/dist/internal/OpenApi.js.map +1 -1
  323. package/dist/internal/Provider.d.ts +14 -0
  324. package/dist/internal/Provider.d.ts.map +1 -0
  325. package/dist/internal/Provider.js +5 -0
  326. package/dist/internal/Provider.js.map +1 -0
  327. package/dist/internal/Schema.d.ts +8 -3
  328. package/dist/internal/Schema.d.ts.map +1 -1
  329. package/dist/internal/Schema.js +24 -13
  330. package/dist/internal/Schema.js.map +1 -1
  331. package/dist/internal/Store.d.ts +6 -0
  332. package/dist/internal/Store.d.ts.map +1 -1
  333. package/dist/internal/Store.js +35 -0
  334. package/dist/internal/Store.js.map +1 -1
  335. package/dist/internal/Tidx.d.ts +43 -24
  336. package/dist/internal/Tidx.d.ts.map +1 -1
  337. package/dist/internal/Tidx.js +79 -11
  338. package/dist/internal/Tidx.js.map +1 -1
  339. package/dist/internal/Viem.d.ts +82 -65
  340. package/dist/internal/Viem.d.ts.map +1 -1
  341. package/dist/internal/Viem.js +83 -12
  342. package/dist/internal/Viem.js.map +1 -1
  343. package/dist/internal/WebhookDestination.d.ts.map +1 -1
  344. package/dist/internal/WebhookDestination.js +34 -28
  345. package/dist/internal/WebhookDestination.js.map +1 -1
  346. package/dist/internal/Webhooks.d.ts +9 -0
  347. package/dist/internal/Webhooks.d.ts.map +1 -1
  348. package/dist/internal/Webhooks.js +15 -10
  349. package/dist/internal/Webhooks.js.map +1 -1
  350. package/dist/internal/exchange/Provider.d.ts +219 -0
  351. package/dist/internal/exchange/Provider.d.ts.map +1 -0
  352. package/dist/internal/exchange/Provider.js +117 -0
  353. package/dist/internal/exchange/Provider.js.map +1 -0
  354. package/dist/internal/exchange/index.d.ts +2 -0
  355. package/dist/internal/exchange/index.d.ts.map +1 -0
  356. package/dist/internal/exchange/index.js +2 -0
  357. package/dist/internal/exchange/index.js.map +1 -0
  358. package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
  359. package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
  360. package/dist/internal/exchange/providers/uniswap.js +553 -0
  361. package/dist/internal/exchange/providers/uniswap.js.map +1 -0
  362. package/dist/internal/funding/Action.d.ts +55 -0
  363. package/dist/internal/funding/Action.d.ts.map +1 -0
  364. package/dist/internal/funding/Action.js +74 -0
  365. package/dist/internal/funding/Action.js.map +1 -0
  366. package/dist/internal/funding/Catalog.d.ts +107 -0
  367. package/dist/internal/funding/Catalog.d.ts.map +1 -0
  368. package/dist/internal/funding/Catalog.js +270 -0
  369. package/dist/internal/funding/Catalog.js.map +1 -0
  370. package/dist/internal/funding/Chain.d.ts +76 -0
  371. package/dist/internal/funding/Chain.d.ts.map +1 -0
  372. package/dist/internal/funding/Chain.js +38 -0
  373. package/dist/internal/funding/Chain.js.map +1 -0
  374. package/dist/internal/funding/Deposit.d.ts +366 -0
  375. package/dist/internal/funding/Deposit.d.ts.map +1 -0
  376. package/dist/internal/funding/Deposit.js +286 -0
  377. package/dist/internal/funding/Deposit.js.map +1 -0
  378. package/dist/internal/funding/DepositAddress.d.ts +345 -0
  379. package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
  380. package/dist/internal/funding/DepositAddress.js +189 -0
  381. package/dist/internal/funding/DepositAddress.js.map +1 -0
  382. package/dist/internal/funding/Evidence.d.ts +52 -0
  383. package/dist/internal/funding/Evidence.d.ts.map +1 -0
  384. package/dist/internal/funding/Evidence.js +314 -0
  385. package/dist/internal/funding/Evidence.js.map +1 -0
  386. package/dist/internal/funding/Provider.d.ts +1186 -0
  387. package/dist/internal/funding/Provider.d.ts.map +1 -0
  388. package/dist/internal/funding/Provider.js +1081 -0
  389. package/dist/internal/funding/Provider.js.map +1 -0
  390. package/dist/internal/funding/Reconciliation.d.ts +113 -0
  391. package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
  392. package/dist/internal/funding/Reconciliation.js +676 -0
  393. package/dist/internal/funding/Reconciliation.js.map +1 -0
  394. package/dist/internal/funding/Route.d.ts +21 -0
  395. package/dist/internal/funding/Route.d.ts.map +1 -0
  396. package/dist/internal/funding/Route.js +5 -0
  397. package/dist/internal/funding/Route.js.map +1 -0
  398. package/dist/internal/funding/Subsidy.d.ts +113 -0
  399. package/dist/internal/funding/Subsidy.d.ts.map +1 -0
  400. package/dist/internal/funding/Subsidy.js +138 -0
  401. package/dist/internal/funding/Subsidy.js.map +1 -0
  402. package/dist/internal/funding/Token.d.ts +41 -0
  403. package/dist/internal/funding/Token.d.ts.map +1 -0
  404. package/dist/internal/funding/Token.js +22 -0
  405. package/dist/internal/funding/Token.js.map +1 -0
  406. package/dist/internal/funding/Transfer.d.ts +643 -0
  407. package/dist/internal/funding/Transfer.d.ts.map +1 -0
  408. package/dist/internal/funding/Transfer.js +332 -0
  409. package/dist/internal/funding/Transfer.js.map +1 -0
  410. package/dist/internal/funding/index.d.ts +13 -0
  411. package/dist/internal/funding/index.d.ts.map +1 -0
  412. package/dist/internal/funding/index.js +13 -0
  413. package/dist/internal/funding/index.js.map +1 -0
  414. package/dist/internal/funding/providers/across.d.ts +21 -0
  415. package/dist/internal/funding/providers/across.d.ts.map +1 -0
  416. package/dist/internal/funding/providers/across.js +117 -0
  417. package/dist/internal/funding/providers/across.js.map +1 -0
  418. package/dist/internal/funding/providers/relay.d.ts +46 -0
  419. package/dist/internal/funding/providers/relay.d.ts.map +1 -0
  420. package/dist/internal/funding/providers/relay.js +464 -0
  421. package/dist/internal/funding/providers/relay.js.map +1 -0
  422. package/dist/internal/funding/providers/rhino.d.ts +15 -0
  423. package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
  424. package/dist/internal/funding/providers/rhino.js +116 -0
  425. package/dist/internal/funding/providers/rhino.js.map +1 -0
  426. package/dist/internal/funding/providers/squid.d.ts +19 -0
  427. package/dist/internal/funding/providers/squid.d.ts.map +1 -0
  428. package/dist/internal/funding/providers/squid.js +120 -0
  429. package/dist/internal/funding/providers/squid.js.map +1 -0
  430. package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
  431. package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
  432. package/dist/internal/funding/providers/symbiosis.js +176 -0
  433. package/dist/internal/funding/providers/symbiosis.js.map +1 -0
  434. package/dist/internal/index.d.ts +5 -1
  435. package/dist/internal/index.d.ts.map +1 -1
  436. package/dist/internal/index.js +5 -1
  437. package/dist/internal/index.js.map +1 -1
  438. package/dist/internal/webhookDestinations/url.js +61 -57
  439. package/dist/internal/webhookDestinations/url.js.map +1 -1
  440. package/dist/providers/index.d.ts +43 -0
  441. package/dist/providers/index.d.ts.map +1 -0
  442. package/dist/providers/index.js +19 -0
  443. package/dist/providers/index.js.map +1 -0
  444. package/package.json +9 -4
  445. package/src/ApiKeys.test.ts +11 -7
  446. package/src/ApiKeys.ts +37 -9
  447. package/src/App.test.ts +85 -10
  448. package/src/App.ts +224 -137
  449. package/src/Assets.ts +29 -4
  450. package/src/Client.test-d.ts +650 -30
  451. package/src/Scope.test.ts +19 -0
  452. package/src/Scope.ts +28 -11
  453. package/src/Webhooks.test.ts +25 -0
  454. package/src/Webhooks.ts +1 -1
  455. package/src/admin/App.test.ts +9 -2
  456. package/src/admin/App.ts +32 -9
  457. package/src/admin/apps/api-keys.test.ts +167 -23
  458. package/src/admin/apps/api-keys.ts +166 -28
  459. package/src/admin/apps/earn-vaults.test.ts +338 -0
  460. package/src/admin/apps/earn-vaults.ts +572 -0
  461. package/src/admin/apps/scopes.test.ts +16 -1
  462. package/src/admin/ui/plugin.ts +2 -2
  463. package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
  464. package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
  465. package/src/admin/ui/src/components/Page.tsx +1 -1
  466. package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
  467. package/src/admin/ui/src/lib/api-keys.ts +37 -7
  468. package/src/admin/ui/src/lib/client.ts +1 -1
  469. package/src/admin/ui/src/lib/config.ts +1 -1
  470. package/src/admin/ui/src/lib/early-access.ts +8 -9
  471. package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
  472. package/src/admin/ui/src/lib/format.ts +13 -0
  473. package/src/admin/ui/src/lib/organizations.test.ts +14 -4
  474. package/src/admin/ui/src/lib/organizations.ts +7 -1
  475. package/src/admin/ui/src/lib/response.ts +22 -0
  476. package/src/admin/ui/src/lib/scopes.test.ts +19 -11
  477. package/src/admin/ui/src/lib/scopes.ts +28 -7
  478. package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
  479. package/src/admin/ui/src/routeTree.gen.ts +70 -7
  480. package/src/admin/ui/src/router.tsx +2 -2
  481. package/src/admin/ui/src/routes/__root.tsx +9 -8
  482. package/src/admin/ui/src/routes/api-keys.tsx +475 -64
  483. package/src/admin/ui/src/routes/early-access.tsx +5 -12
  484. package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
  485. package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
  486. package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
  487. package/src/admin/ui/src/routes/organizations.tsx +4 -7
  488. package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
  489. package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
  490. package/src/admin/ui/vite.config.ts +4 -1
  491. package/src/admin/ui.generated.ts +189 -95
  492. package/src/analytics/Analytics.test.ts +69 -10
  493. package/src/analytics/Analytics.ts +20 -1
  494. package/src/analytics/tables/requestEvents.ts +79 -37
  495. package/src/apps/Zones.test.ts +33 -0
  496. package/src/apps/Zones.ts +40 -0
  497. package/src/apps/composition.test.ts +84 -1
  498. package/src/apps/data/App.test.ts +38 -9
  499. package/src/apps/data/App.ts +96 -33
  500. package/src/apps/data/FxOracle.ts +1 -1
  501. package/src/apps/data/index.ts +0 -1
  502. package/src/apps/data/routes/activities.test.ts +82 -6
  503. package/src/apps/data/routes/activities.ts +131 -71
  504. package/src/apps/data/routes/balances.test.ts +50 -37
  505. package/src/apps/data/routes/balances.ts +5 -5
  506. package/src/apps/data/routes/blocks.test.ts +2 -0
  507. package/src/apps/data/routes/coingecko.test.ts +22 -0
  508. package/src/apps/data/routes/coingecko.ts +84 -48
  509. package/src/apps/data/routes/earn.test.ts +1108 -0
  510. package/src/apps/data/routes/earn.ts +1391 -0
  511. package/src/apps/data/routes/exchanges.test.ts +82 -33
  512. package/src/apps/data/routes/exchanges.ts +842 -227
  513. package/src/apps/data/routes/fee-amm.test.ts +4 -6
  514. package/src/apps/data/routes/fee-amm.ts +69 -12
  515. package/src/apps/data/routes/funding.test.ts +2712 -221
  516. package/src/apps/data/routes/funding.ts +1604 -387
  517. package/src/apps/data/routes/indexer.test.ts +43 -34
  518. package/src/apps/data/routes/indexer.ts +19 -2
  519. package/src/apps/data/routes/receipts.test.ts +5 -3
  520. package/src/apps/data/routes/receipts.ts +13 -11
  521. package/src/apps/data/routes/rpc.test.ts +446 -28
  522. package/src/apps/data/routes/rpc.ts +243 -25
  523. package/src/apps/data/routes/tokenlist.test.ts +15 -0
  524. package/src/apps/data/routes/tokenlist.ts +88 -22
  525. package/src/apps/data/routes/tokens.ts +262 -86
  526. package/src/apps/data/routes/transactions.test.ts +2 -0
  527. package/src/apps/data/routes/transactions.ts +77 -42
  528. package/src/apps/data/routes/transfers.test.ts +166 -4
  529. package/src/apps/data/routes/transfers.ts +216 -78
  530. package/src/apps/data/routes/valuation.test.ts +62 -9
  531. package/src/apps/data/routes/valuation.ts +2 -2
  532. package/src/apps/data/routes/verified-tokens.test.ts +51 -0
  533. package/src/apps/data/routes/verified-tokens.ts +52 -15
  534. package/src/apps/data/routes/webhooks.test.ts +432 -33
  535. package/src/apps/data/routes/webhooks.ts +189 -79
  536. package/src/apps/data/routes/zones.test.ts +473 -0
  537. package/src/apps/data/routes/zones.ts +338 -0
  538. package/src/apps/docs/reference.ts +8 -6
  539. package/src/apps/index.ts +2 -1
  540. package/src/apps/management/Billing.test.ts +29 -0
  541. package/src/apps/management/Billing.ts +23 -0
  542. package/src/apps/management/Error.ts +12 -0
  543. package/src/apps/management/routes/api-keys.test.ts +5 -3
  544. package/src/apps/management/routes/api-keys.ts +2 -9
  545. package/src/apps/management/routes/invitations.ts +4 -11
  546. package/src/apps/management/routes/orgs.ts +2 -9
  547. package/src/apps/management/routes/scopes.test.ts +7 -2
  548. package/src/apps/management/routes/scopes.ts +2 -2
  549. package/src/apps/management/routes/webhooks.test.ts +6 -1
  550. package/src/apps/management/routes/webhooks.ts +15 -3
  551. package/src/apps/mpp/App.ts +276 -29
  552. package/src/apps/mpp/Mpp.test.ts +631 -26
  553. package/src/apps/mpp/Mpp.ts +0 -42
  554. package/src/apps/mpp/internal/Adapter.ts +108 -3
  555. package/src/apps/mpp/internal/Error.test.ts +33 -0
  556. package/src/apps/mpp/internal/Error.ts +44 -6
  557. package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
  558. package/src/apps/mpp/internal/Idempotency.ts +59 -5
  559. package/src/apps/mpp/internal/Policy.test.ts +122 -0
  560. package/src/apps/mpp/internal/Policy.ts +98 -0
  561. package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
  562. package/src/apps/mpp/internal/ScreenManager.ts +41 -0
  563. package/src/apps/mpp/internal/Screening.ts +40 -3
  564. package/src/apps/mpp/internal/Sponsorship.ts +144 -0
  565. package/src/apps/mpp/internal/Utils.ts +30 -0
  566. package/src/apps/relay/App.test.ts +495 -64
  567. package/src/apps/relay/App.ts +234 -24
  568. package/src/apps/relay/Sponsorships.test.ts +51 -0
  569. package/src/apps/relay/Sponsorships.ts +19 -7
  570. package/src/db/Db.ts +439 -0
  571. package/src/db/Schema.ts +325 -2
  572. package/src/db/tables/earnVaults.test.ts +185 -0
  573. package/src/db/tables/earnVaults.ts +151 -0
  574. package/src/db/tables/fundingCatalog.test.ts +108 -0
  575. package/src/db/tables/fundingCatalog.ts +157 -0
  576. package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
  577. package/src/db/tables/fundingDepositAddresses.ts +376 -0
  578. package/src/db/tables/fundingDeposits.test.ts +261 -0
  579. package/src/db/tables/fundingDeposits.ts +229 -0
  580. package/src/db/tables/fundingIdempotency.test.ts +182 -0
  581. package/src/db/tables/fundingIdempotency.ts +180 -0
  582. package/src/db/tables/fundingTransferEvents.ts +28 -0
  583. package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
  584. package/src/db/tables/fundingTransferTransactions.ts +37 -0
  585. package/src/db/tables/fundingTransfers.test.ts +89 -0
  586. package/src/db/tables/fundingTransfers.ts +153 -0
  587. package/src/db/tables/organizations.test.ts +88 -0
  588. package/src/db/tables/organizations.ts +42 -1
  589. package/src/db/tables/projects.ts +16 -0
  590. package/src/db/tables/requestUsage.ts +23 -0
  591. package/src/db/tables/sponsoredTransactions.test.ts +52 -2
  592. package/src/db/tables/sponsoredTransactions.ts +18 -6
  593. package/src/db/tables/users.ts +16 -0
  594. package/src/db/tables/verifiedTokens.ts +19 -14
  595. package/src/db/tables/webhookSubscriptions.ts +58 -3
  596. package/src/handlers/relay.test.ts +2 -0
  597. package/src/handlers/relay.ts +95 -99
  598. package/src/internal/Auth.test.ts +48 -0
  599. package/src/internal/Auth.ts +61 -2
  600. package/src/internal/Cache.ts +13 -9
  601. package/src/internal/Cursor.test.ts +2 -2
  602. package/src/internal/Cursor.ts +1 -1
  603. package/src/internal/EarnRates.test.ts +125 -0
  604. package/src/internal/EarnRates.ts +409 -0
  605. package/src/internal/EarnVaults.test.ts +195 -0
  606. package/src/internal/EarnVaults.ts +876 -0
  607. package/src/internal/EdgeCache.test.ts +37 -5
  608. package/src/internal/EdgeCache.ts +39 -7
  609. package/src/internal/Id.ts +14 -0
  610. package/src/internal/Idempotency.test.ts +109 -0
  611. package/src/internal/Idempotency.ts +237 -0
  612. package/src/internal/Log.test-d.ts +41 -8
  613. package/src/internal/Log.test.ts +189 -8
  614. package/src/internal/Log.ts +124 -17
  615. package/src/internal/MetricSink.test.ts +244 -4
  616. package/src/internal/MetricSink.ts +51 -1
  617. package/src/internal/OpenApi.ts +3 -0
  618. package/src/internal/Provider.test.ts +17 -0
  619. package/src/internal/Provider.ts +17 -0
  620. package/src/internal/Schema.test.ts +13 -0
  621. package/src/internal/Schema.ts +41 -24
  622. package/src/internal/Store.test.ts +25 -0
  623. package/src/internal/Store.ts +46 -0
  624. package/src/internal/Tidx.local.test.ts +78 -3
  625. package/src/internal/Tidx.test.ts +212 -18
  626. package/src/internal/Tidx.ts +112 -32
  627. package/src/internal/VerifiedTokens.test.ts +15 -0
  628. package/src/internal/Viem.test.ts +170 -17
  629. package/src/internal/Viem.ts +111 -28
  630. package/src/internal/WebhookDestination.ts +25 -23
  631. package/src/internal/Webhooks.test.ts +59 -0
  632. package/src/internal/Webhooks.ts +34 -10
  633. package/src/internal/exchange/Provider.test.ts +216 -0
  634. package/src/internal/exchange/Provider.ts +326 -0
  635. package/src/internal/exchange/index.test.ts +6 -0
  636. package/src/internal/exchange/index.ts +1 -0
  637. package/src/internal/exchange/providers/uniswap.test.ts +122 -0
  638. package/src/internal/exchange/providers/uniswap.ts +682 -0
  639. package/src/internal/funding/Action.test.ts +138 -0
  640. package/src/internal/funding/Action.ts +117 -0
  641. package/src/internal/funding/Catalog.test.ts +311 -0
  642. package/src/internal/funding/Catalog.ts +347 -0
  643. package/src/internal/funding/Chain.test.ts +79 -0
  644. package/src/internal/funding/Chain.ts +120 -0
  645. package/src/internal/funding/Deposit.test.ts +26 -0
  646. package/src/internal/funding/Deposit.ts +453 -0
  647. package/src/internal/funding/DepositAddress.test.ts +18 -0
  648. package/src/internal/funding/DepositAddress.ts +312 -0
  649. package/src/internal/funding/Evidence.test.ts +297 -0
  650. package/src/internal/funding/Evidence.ts +430 -0
  651. package/src/internal/funding/Provider.test.ts +1328 -0
  652. package/src/internal/funding/Provider.ts +1796 -0
  653. package/src/internal/funding/Reconciliation.local.test.ts +504 -0
  654. package/src/internal/funding/Reconciliation.test.ts +2020 -0
  655. package/src/internal/funding/Reconciliation.ts +930 -0
  656. package/src/internal/funding/Route.test.ts +66 -0
  657. package/src/internal/funding/Route.ts +29 -0
  658. package/src/internal/funding/Subsidy.local.test.ts +152 -0
  659. package/src/internal/funding/Subsidy.test.ts +75 -0
  660. package/src/internal/funding/Subsidy.ts +260 -0
  661. package/src/internal/funding/Token.test.ts +47 -0
  662. package/src/internal/funding/Token.ts +59 -0
  663. package/src/internal/funding/Transfer.test.ts +369 -0
  664. package/src/internal/funding/Transfer.ts +522 -0
  665. package/src/internal/funding/index.test.ts +20 -0
  666. package/src/internal/funding/index.ts +12 -0
  667. package/src/internal/funding/providers/across.ts +149 -0
  668. package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
  669. package/src/internal/funding/providers/relay.test.ts +474 -0
  670. package/src/internal/funding/providers/relay.ts +559 -0
  671. package/src/internal/funding/providers/rhino.ts +139 -0
  672. package/src/internal/funding/providers/squid.ts +151 -0
  673. package/src/internal/funding/providers/symbiosis.ts +221 -0
  674. package/src/internal/index.test.ts +5 -1
  675. package/src/internal/index.ts +5 -1
  676. package/src/internal/webhookDestinations/url.ts +49 -45
  677. package/src/providers/index.test.ts +14 -0
  678. package/src/providers/index.ts +54 -0
  679. package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
  680. package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
  681. package/dist/apps/data/FundingQuoteProviders.js +0 -775
  682. package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
  683. package/dist/internal/FundingQuotes.d.ts +0 -864
  684. package/dist/internal/FundingQuotes.d.ts.map +0 -1
  685. package/dist/internal/FundingQuotes.js +0 -672
  686. package/dist/internal/FundingQuotes.js.map +0 -1
  687. package/src/apps/data/FundingQuoteProviders.ts +0 -1043
  688. package/src/internal/FundingQuotes.test.ts +0 -456
  689. package/src/internal/FundingQuotes.ts +0 -944
@@ -1,6 +1,7 @@
1
1
  import { type Db, Webhooks as Core } from 'tapimo'
2
2
  import * as z from 'zod/mini'
3
3
 
4
+ import * as Cursor from '../../../internal/Cursor.js'
4
5
  import * as Tidx from '../../../internal/Tidx.js'
5
6
  import * as Viem from '../../../internal/Viem.js'
6
7
  import * as TestApp from '../../../../test/App.js'
@@ -163,12 +164,7 @@ describe('access matrix', () => {
163
164
  const zone = 421_700_001
164
165
  const app = TestApp.client({
165
166
  auth: { keys: [writer] },
166
- zones: [
167
- {
168
- chainId: zone,
169
- forwardRpcUrl: 'https://zone.rpc.test',
170
- },
171
- ],
167
+ zones: [TestApp.zone({ chainId: zone, rpcUrl: 'https://zone.rpc.test' })],
172
168
  })
173
169
  const response = await app.v1.webhooks.$post(
174
170
  { json: { ...validBody, chainId: zone } },
@@ -226,7 +222,11 @@ describe('access matrix', () => {
226
222
 
227
223
  describe('CRUD lifecycle', () => {
228
224
  test('creates, reads, lists, updates, and deletes a subscription', async () => {
229
- const app = client()
225
+ const db = TestApp.database()
226
+ const app = TestApp.client({
227
+ auth: { keys: [writer, reader, other] },
228
+ db,
229
+ })
230
230
 
231
231
  // Create returns the one-time signing secret.
232
232
  const created = await app.v1.webhooks.$post({ json: validBody }, as(writer))
@@ -239,6 +239,9 @@ describe('CRUD lifecycle', () => {
239
239
  // API-key-owned subscriptions never expire.
240
240
  expect(createdBody.expiresAt).toMatchInlineSnapshot(`undefined`)
241
241
  expect(createdBody).not.toHaveProperty('owner')
242
+ expect(Cursor.decode((await Core.getCursor(db, createdBody.id))!, ['int'])).toEqual([
243
+ expect.any(Number),
244
+ ])
242
245
 
243
246
  // Reads never expose the secret.
244
247
  const read = await app.v1.webhooks[':id{wh_[A-Za-z0-9_-]+}'].$get(
@@ -1320,15 +1323,17 @@ describe('envelope schema', () => {
1320
1323
  describe('MPP access (disabled for now — API-key-only)', () => {
1321
1324
  test('rejects an MPP payer with 401, offering no payment challenge', async () => {
1322
1325
  const app = TestApp.create({
1323
- auth: { keys: [] },
1324
- mpp: {
1325
- secretKey: 'secret_test_key_0123456789abcdef',
1326
- session: {
1327
- chainId: Tempo.chain.id,
1328
- currency: Tempo.currency,
1329
- decimals: 6,
1330
- getClient: () => Tempo.client,
1331
- recipient: Tempo.accounts[2].address,
1326
+ auth: {
1327
+ keys: [],
1328
+ mpp: {
1329
+ secretKey: 'secret_test_key_0123456789abcdef',
1330
+ session: {
1331
+ chainId: Tempo.chain.id,
1332
+ currency: Tempo.currency,
1333
+ decimals: 6,
1334
+ getClient: () => Tempo.client,
1335
+ recipient: Tempo.accounts[2].address,
1336
+ },
1332
1337
  },
1333
1338
  },
1334
1339
  })
@@ -1352,11 +1357,11 @@ describe('MPP access (disabled for now — API-key-only)', () => {
1352
1357
  // redirected to the disposable local chain, which lacks that history, so the
1353
1358
  // whole block is testnet-only.
1354
1359
  describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1355
- /** Decodes the opaque `(block, index)` keyset cursor the poller stores. */
1356
- function decodeCursor(token: string | null): [number, number] | null {
1360
+ /** Decodes an opaque creation checkpoint or `(block, index)` poller cursor. */
1361
+ function decodeCursor(token: string | null): number[] | null {
1357
1362
  if (!token) return null
1358
1363
  const json = atob(token.replaceAll('-', '+').replaceAll('_', '/'))
1359
- return JSON.parse(json) as [number, number]
1364
+ return JSON.parse(json) as number[]
1360
1365
  }
1361
1366
 
1362
1367
  /** Encodes a `(block, index)` keyset cursor in the poller's opaque format. */
@@ -1373,7 +1378,7 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1373
1378
  // the real keyset/`toBlock` SQL and decode path end to end — no fabricated rows.
1374
1379
  const realTidx = Tidx.getClient({
1375
1380
  chainId: 42431,
1376
- tidx: { baseUrl: 'https://tidx.tempo.xyz', basicAuth: process.env.TIDX_BASIC_AUTH },
1381
+ tidx: { auth: process.env.TIDX_AUTH, baseUrl: 'https://tidx.tempo.xyz' },
1377
1382
  })
1378
1383
  // The monitoring scanners (`log:emitted`/`block:created`/`transaction:included`)
1379
1384
  // read the same immutable historical window over real RPC (chain 42431 →
@@ -1390,6 +1395,9 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1390
1395
  // rows, both in block 1,000,002 (`log_idx` 0 then 1): a TIP-20 transfer
1391
1396
  // followed by its fee payment. Filtering on it makes the scan deterministic.
1392
1397
  const windowSender = '0xe7687128b0a808c2831ff94d4f7b2fb35c65af38'
1398
+ // This token has 226 transfers across blocks 1,000,000 through 1,000,003.
1399
+ const volumeHead = 1_000_005
1400
+ const volumeToken = '0x20c0000000000000000000000000000000000001'
1393
1401
 
1394
1402
  async function createTransferSubscription(db: Db.Db) {
1395
1403
  return Core.createSubscription(db, {
@@ -1401,6 +1409,16 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1401
1409
  })
1402
1410
  }
1403
1411
 
1412
+ async function createVolumeSubscription(db: Db.Db, ownerId = 'org_test') {
1413
+ return Core.createSubscription(db, {
1414
+ chainId: 42431,
1415
+ destination: { type: 'url', url: `https://hooks.example.com/${ownerId}` },
1416
+ eventType: 'token:transfer',
1417
+ filters: { token: volumeToken },
1418
+ owner: { orgId: ownerId, type: 'api_key' },
1419
+ })
1420
+ }
1421
+
1404
1422
  test('dispatches a signed envelope per row and advances the cursor', async () => {
1405
1423
  const db = TestApp.database()
1406
1424
  const subscription = await createTransferSubscription(db)
@@ -1519,6 +1537,104 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1519
1537
  `)
1520
1538
  })
1521
1539
 
1540
+ test('drains two bounded transfer pages per tick without gaps', async () => {
1541
+ const db = TestApp.database()
1542
+ const subscription = await createVolumeSubscription(db)
1543
+ await Core.setCursor(db, subscription.id, windowCursor)
1544
+
1545
+ const positions: string[] = []
1546
+ const tick = () =>
1547
+ Webhooks.poll({
1548
+ chainId: 42431,
1549
+ client,
1550
+ db,
1551
+ dispatch: async ({ envelope }) => {
1552
+ const data = envelope.data as { blockNumber: number; logIndex: number }
1553
+ positions.push(`${data.blockNumber}:${data.logIndex}`)
1554
+ return { ok: true }
1555
+ },
1556
+ eventTypes: ['token:transfer'],
1557
+ headBlockNumber: volumeHead,
1558
+ tidx: realTidx,
1559
+ })
1560
+
1561
+ expect((await tick()).dispatched).toBe(200)
1562
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([1_000_003, 144])
1563
+ expect((await tick()).dispatched).toBe(26)
1564
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([1_000_003, 223])
1565
+ expect(positions).toHaveLength(226)
1566
+ expect(new Set(positions).size).toBe(226)
1567
+ expect(positions[99]).toBe('1000002:9')
1568
+ expect(positions[100]).toBe('1000002:10')
1569
+ })
1570
+
1571
+ test('commits the first page before a continuation delivery fails', async () => {
1572
+ const db = TestApp.database()
1573
+ const subscription = await createVolumeSubscription(db)
1574
+ await Core.setCursor(db, subscription.id, windowCursor)
1575
+
1576
+ let calls = 0
1577
+ const first = await Webhooks.poll({
1578
+ chainId: 42431,
1579
+ client,
1580
+ db,
1581
+ dispatch: async () => (++calls === 101 ? { error: 'unreachable', ok: false } : { ok: true }),
1582
+ eventTypes: ['token:transfer'],
1583
+ headBlockNumber: volumeHead,
1584
+ tidx: realTidx,
1585
+ })
1586
+
1587
+ expect(first.dispatched).toBe(100)
1588
+ expect(first.failed).toBe(1)
1589
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([1_000_002, 9])
1590
+
1591
+ let resumed: readonly [number, number] | undefined
1592
+ await Webhooks.poll({
1593
+ batchSize: 1,
1594
+ chainId: 42431,
1595
+ client,
1596
+ db,
1597
+ dispatch: async ({ envelope }) => {
1598
+ const data = envelope.data as { blockNumber: number; logIndex: number }
1599
+ resumed = [data.blockNumber, data.logIndex]
1600
+ return { ok: true }
1601
+ },
1602
+ eventTypes: ['token:transfer'],
1603
+ headBlockNumber: volumeHead,
1604
+ tidx: realTidx,
1605
+ })
1606
+ expect(resumed).toEqual([1_000_002, 10])
1607
+ })
1608
+
1609
+ test('round-robins continuation pages across subscriptions', async () => {
1610
+ const db = TestApp.database()
1611
+ const a = await createVolumeSubscription(db, 'org_a')
1612
+ const b = await createVolumeSubscription(db, 'org_b')
1613
+ await Core.setCursor(db, a.id, windowCursor)
1614
+ await Core.setCursor(db, b.id, windowCursor)
1615
+ const [first, second] = [a.id, b.id].sort()
1616
+
1617
+ const order: string[] = []
1618
+ await Webhooks.poll({
1619
+ chainId: 42431,
1620
+ client,
1621
+ db,
1622
+ dispatch: async ({ subscription }) => {
1623
+ order.push(subscription.id)
1624
+ return { ok: true }
1625
+ },
1626
+ eventTypes: ['token:transfer'],
1627
+ headBlockNumber: volumeHead,
1628
+ tidx: realTidx,
1629
+ })
1630
+
1631
+ expect(order).toHaveLength(400)
1632
+ expect(new Set(order.slice(0, 100))).toEqual(new Set([first]))
1633
+ expect(new Set(order.slice(100, 200))).toEqual(new Set([second]))
1634
+ expect(new Set(order.slice(200, 300))).toEqual(new Set([first]))
1635
+ expect(new Set(order.slice(300, 400))).toEqual(new Set([second]))
1636
+ })
1637
+
1522
1638
  test('anchors a first-seen subscription at the confirmed head without backfilling', async () => {
1523
1639
  const db = TestApp.database()
1524
1640
  const subscription = await createTransferSubscription(db)
@@ -1550,6 +1666,82 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1550
1666
  `)
1551
1667
  })
1552
1668
 
1669
+ test('dispatches creation-head replacements once confirmed', async () => {
1670
+ const db = TestApp.database()
1671
+ const creationHead = windowTo
1672
+ const subscription = await Core.createSubscription(
1673
+ db,
1674
+ {
1675
+ chainId: 42431,
1676
+ destination: { type: 'url', url: 'https://hooks.example.com/x' },
1677
+ eventType: 'token:transfer',
1678
+ filters: { sender: windowSender },
1679
+ owner: { orgId: 'org_test', type: 'api_key' },
1680
+ },
1681
+ { startBlockNumber: creationHead },
1682
+ )
1683
+
1684
+ const result = await Webhooks.poll({
1685
+ chainId: 42431,
1686
+ confirmations: 3,
1687
+ dispatch: async () => ({ ok: true }),
1688
+ eventTypes: ['token:transfer'],
1689
+ headBlockNumber: creationHead + 3,
1690
+ client,
1691
+ db,
1692
+ tidx: realTidx,
1693
+ })
1694
+
1695
+ expect(result.dispatched).toBe(2)
1696
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([windowTo, 1])
1697
+ })
1698
+
1699
+ test('keeps confirmed creation anchors while sources catch up', async () => {
1700
+ const db = TestApp.database()
1701
+ const startBlockNumber = windowTo + 100
1702
+ const transfer = await Core.createSubscription(
1703
+ db,
1704
+ {
1705
+ chainId: 42431,
1706
+ destination: { type: 'url', url: 'https://hooks.example.com/transfer' },
1707
+ eventType: 'token:transfer',
1708
+ filters: { sender: windowSender },
1709
+ owner: { orgId: 'org_transfer', type: 'api_key' },
1710
+ },
1711
+ { startBlockNumber },
1712
+ )
1713
+ const block = await Core.createSubscription(
1714
+ db,
1715
+ {
1716
+ chainId: 42431,
1717
+ destination: { type: 'url', url: 'https://hooks.example.com/block' },
1718
+ eventType: 'block:created',
1719
+ filters: {},
1720
+ owner: { orgId: 'org_block', type: 'api_key' },
1721
+ },
1722
+ { startBlockNumber },
1723
+ )
1724
+
1725
+ await Webhooks.poll({
1726
+ chainId: 42431,
1727
+ dispatch: async () => ({ ok: true }),
1728
+ eventTypes: ['token:transfer', 'block:created'],
1729
+ headBlockNumber: windowHead,
1730
+ client,
1731
+ db,
1732
+ tidx: realTidx,
1733
+ })
1734
+
1735
+ expect(decodeCursor(await Core.getCursor(db, transfer.id))).toEqual([
1736
+ startBlockNumber - 2,
1737
+ endOfBlockIndex,
1738
+ ])
1739
+ expect(decodeCursor(await Core.getCursor(db, block.id))).toEqual([
1740
+ startBlockNumber - 2,
1741
+ endOfBlockIndex,
1742
+ ])
1743
+ })
1744
+
1553
1745
  test('advances to the end of the confirmed window on an empty scan', async () => {
1554
1746
  const db = TestApp.database()
1555
1747
  const subscription = await createTransferSubscription(db)
@@ -1687,27 +1879,67 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1687
1879
  `)
1688
1880
  })
1689
1881
 
1690
- test('block:created scans new blocks and resolves transaction counts', async () => {
1882
+ test('log:emitted limits a tick and resumes within the block', async () => {
1691
1883
  const db = TestApp.database()
1692
1884
  const subscription = await Core.createSubscription(db, {
1693
1885
  chainId: 42431,
1694
- eventType: 'block:created',
1695
- // Pin to a single block so the heartbeat feed is deterministic.
1696
- filters: { number: { eq: `0x${windowTo.toString(16)}` } },
1697
- owner: { orgId: 'org_test', type: 'api_key' },
1698
1886
  destination: { type: 'url', url: 'https://hooks.example.com/x' },
1887
+ eventType: 'log:emitted',
1888
+ filters: { args: { from: windowSender }, signature: transferSignature },
1889
+ owner: { orgId: 'org_test', type: 'api_key' },
1699
1890
  })
1700
1891
  await Core.setCursor(db, subscription.id, windowCursor)
1701
1892
 
1893
+ const dispatched: Webhooks.poll.Dispatchable[] = []
1894
+ const tick = () =>
1895
+ Webhooks.poll({
1896
+ batchSize: 1,
1897
+ chainId: 42431,
1898
+ client,
1899
+ db,
1900
+ dispatch: async (input) => {
1901
+ dispatched.push(input)
1902
+ return { ok: true }
1903
+ },
1904
+ eventTypes: ['log:emitted'],
1905
+ headBlockNumber: windowHead,
1906
+ tidx: realTidx,
1907
+ })
1908
+
1909
+ expect((await tick()).dispatched).toBe(1)
1910
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([windowTo, 0])
1911
+ expect((await tick()).dispatched).toBe(1)
1912
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([windowTo, 1])
1913
+ expect(
1914
+ dispatched.map(({ envelope }) => (envelope.data as { logIndex: number }).logIndex),
1915
+ ).toEqual([0, 1])
1916
+ })
1917
+
1918
+ test('block:created scans new blocks and resolves transaction counts', async () => {
1919
+ const db = TestApp.database()
1920
+ const subscription = await Core.createSubscription(
1921
+ db,
1922
+ {
1923
+ chainId: 42431,
1924
+ eventType: 'block:created',
1925
+ // Pin to the creation-head height, which may be replaced before confirmation.
1926
+ filters: { number: { eq: `0x${windowTo.toString(16)}` } },
1927
+ owner: { orgId: 'org_test', type: 'api_key' },
1928
+ destination: { type: 'url', url: 'https://hooks.example.com/x' },
1929
+ },
1930
+ { startBlockNumber: windowTo },
1931
+ )
1932
+
1702
1933
  const dispatched: Webhooks.poll.Dispatchable[] = []
1703
1934
  const result = await Webhooks.poll({
1704
1935
  chainId: 42431,
1936
+ confirmations: 3,
1705
1937
  dispatch: async (input) => {
1706
1938
  dispatched.push(input)
1707
1939
  return { ok: true }
1708
1940
  },
1709
1941
  eventTypes: ['block:created'],
1710
- headBlockNumber: windowHead,
1942
+ headBlockNumber: windowTo + 3,
1711
1943
  client,
1712
1944
  db,
1713
1945
  tidx: realTidx,
@@ -1736,28 +1968,126 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1736
1968
  `)
1737
1969
  })
1738
1970
 
1739
- test('transaction:included filters on txs columns and inner calls', async () => {
1971
+ test('block:created limits a tick and resumes at the next block', async () => {
1740
1972
  const db = TestApp.database()
1741
1973
  const subscription = await Core.createSubscription(db, {
1742
1974
  chainId: 42431,
1743
- eventType: 'transaction:included',
1744
- // `from` + an `input` selector (ERC20 `transfer` = 0xa9059cbb) pins the
1745
- // scan to the deterministic window tx.
1746
- filters: { from: windowSender, input: { selector: '0xa9059cbb' } },
1747
- owner: { orgId: 'org_test', type: 'api_key' },
1748
1975
  destination: { type: 'url', url: 'https://hooks.example.com/x' },
1976
+ eventType: 'block:created',
1977
+ filters: {},
1978
+ owner: { orgId: 'org_test', type: 'api_key' },
1749
1979
  })
1750
1980
  await Core.setCursor(db, subscription.id, windowCursor)
1751
1981
 
1982
+ const dispatched: Webhooks.poll.Dispatchable[] = []
1983
+ const tick = () =>
1984
+ Webhooks.poll({
1985
+ batchSize: 1,
1986
+ chainId: 42431,
1987
+ client,
1988
+ db,
1989
+ dispatch: async (input) => {
1990
+ dispatched.push(input)
1991
+ return { ok: true }
1992
+ },
1993
+ eventTypes: ['block:created'],
1994
+ headBlockNumber: windowHead,
1995
+ tidx: realTidx,
1996
+ })
1997
+
1998
+ expect((await tick()).dispatched).toBe(1)
1999
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([windowFrom, 0])
2000
+ expect((await tick()).dispatched).toBe(1)
2001
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([windowFrom + 1, 0])
2002
+ expect(dispatched.map(({ envelope }) => (envelope.data as { number: number }).number)).toEqual([
2003
+ windowFrom,
2004
+ windowFrom + 1,
2005
+ ])
2006
+ })
2007
+
2008
+ test('block:created continues other subscriptions when a block header cannot be read', async () => {
2009
+ const db = TestApp.database()
2010
+ const missingBlock = 4_000_000_000
2011
+ const cursor = encodeCursor([missingBlock - 1, endOfBlockIndex])
2012
+ const unavailable = await Core.createSubscription(
2013
+ db,
2014
+ {
2015
+ chainId: 42431,
2016
+ destination: { type: 'url', url: 'https://hooks.example.com/unavailable' },
2017
+ eventType: 'block:created',
2018
+ filters: { number: { eq: `0x${missingBlock.toString(16)}` } },
2019
+ owner: { orgId: 'org_test', type: 'api_key' },
2020
+ },
2021
+ { now: () => new Date('2026-01-01T00:00:00.000Z') },
2022
+ )
2023
+ const healthy = await Core.createSubscription(
2024
+ db,
2025
+ {
2026
+ chainId: 42431,
2027
+ destination: { type: 'url', url: 'https://hooks.example.com/healthy' },
2028
+ eventType: 'block:created',
2029
+ filters: { number: { eq: `0x${windowTo.toString(16)}` } },
2030
+ owner: { orgId: 'org_test', type: 'api_key' },
2031
+ },
2032
+ { now: () => new Date('2026-01-01T00:00:01.000Z') },
2033
+ )
2034
+ await Core.setCursor(db, unavailable.id, cursor)
2035
+ await Core.setCursor(db, healthy.id, windowCursor)
2036
+
2037
+ const dispatched: Webhooks.poll.Dispatchable[] = []
2038
+
2039
+ await expect(
2040
+ Webhooks.poll({
2041
+ chainId: 42431,
2042
+ dispatch: async (input) => {
2043
+ dispatched.push(input)
2044
+ return { ok: true }
2045
+ },
2046
+ eventTypes: ['block:created'],
2047
+ headBlockNumber: missingBlock + 2,
2048
+ client,
2049
+ db,
2050
+ maxBlocks: 3,
2051
+ tidx: realTidx,
2052
+ }),
2053
+ ).rejects.toThrow()
2054
+
2055
+ expect(await Core.getCursor(db, unavailable.id)).toBe(cursor)
2056
+ expect(decodeCursor(await Core.getCursor(db, healthy.id))).toMatchInlineSnapshot(`
2057
+ [
2058
+ 1000002,
2059
+ 2147483647,
2060
+ ]
2061
+ `)
2062
+ expect(dispatched.map(({ subscription }) => subscription.id)).toEqual([healthy.id])
2063
+ })
2064
+
2065
+ test('transaction:included filters on txs columns and inner calls', async () => {
2066
+ const db = TestApp.database()
2067
+ const subscription = await Core.createSubscription(
2068
+ db,
2069
+ {
2070
+ chainId: 42431,
2071
+ eventType: 'transaction:included',
2072
+ // `from` + an `input` selector (ERC20 `transfer` = 0xa9059cbb) pins the
2073
+ // scan to the deterministic creation-head transaction.
2074
+ filters: { from: windowSender, input: { selector: '0xa9059cbb' } },
2075
+ owner: { orgId: 'org_test', type: 'api_key' },
2076
+ destination: { type: 'url', url: 'https://hooks.example.com/x' },
2077
+ },
2078
+ { startBlockNumber: windowTo },
2079
+ )
2080
+
1752
2081
  const dispatched: Webhooks.poll.Dispatchable[] = []
1753
2082
  const result = await Webhooks.poll({
1754
2083
  chainId: 42431,
2084
+ confirmations: 3,
1755
2085
  dispatch: async (input) => {
1756
2086
  dispatched.push(input)
1757
2087
  return { ok: true }
1758
2088
  },
1759
2089
  eventTypes: ['transaction:included'],
1760
- headBlockNumber: windowHead,
2090
+ headBlockNumber: windowTo + 3,
1761
2091
  client,
1762
2092
  db,
1763
2093
  tidx: realTidx,
@@ -1776,6 +2106,75 @@ describe.skipIf(Runtime.get().mode === 'localnet')('poll', () => {
1776
2106
  expect(typeof tx.feeToken?.name).toBe('string')
1777
2107
  expect(typeof tx.feeToken?.symbol).toBe('string')
1778
2108
  } else expect(tx?.feeToken).toBeUndefined()
2109
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([
2110
+ windowTo,
2111
+ endOfBlockIndex,
2112
+ ])
2113
+ })
2114
+
2115
+ test('transaction:included limits a tick and resumes within the block', async () => {
2116
+ const db = TestApp.database()
2117
+ const subscription = await Core.createSubscription(db, {
2118
+ chainId: 42431,
2119
+ destination: { type: 'url', url: 'https://hooks.example.com/x' },
2120
+ eventType: 'transaction:included',
2121
+ filters: {},
2122
+ owner: { orgId: 'org_test', type: 'api_key' },
2123
+ })
2124
+ await Core.setCursor(db, subscription.id, encodeCursor([windowTo - 1, endOfBlockIndex]))
2125
+
2126
+ const dispatched: Webhooks.poll.Dispatchable[] = []
2127
+ const tick = () =>
2128
+ Webhooks.poll({
2129
+ batchSize: 1,
2130
+ chainId: 42431,
2131
+ client,
2132
+ db,
2133
+ dispatch: async (input) => {
2134
+ dispatched.push(input)
2135
+ return { ok: true }
2136
+ },
2137
+ eventTypes: ['transaction:included'],
2138
+ headBlockNumber: windowHead,
2139
+ tidx: realTidx,
2140
+ })
2141
+
2142
+ expect((await tick()).dispatched).toBe(1)
2143
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([windowTo, 0])
2144
+ expect((await tick()).dispatched).toBe(1)
2145
+ expect(decodeCursor(await Core.getCursor(db, subscription.id))).toEqual([windowTo, 1])
2146
+ expect(
2147
+ new Set(dispatched.map(({ envelope }) => (envelope.data as { hash: string }).hash)).size,
2148
+ ).toBe(2)
2149
+ })
2150
+
2151
+ test('transaction:included preserves the cursor when a confirmed block is unavailable', async () => {
2152
+ const db = TestApp.database()
2153
+ const missingBlock = 4_000_000_000
2154
+ const cursor = encodeCursor([missingBlock - 1, endOfBlockIndex])
2155
+ const subscription = await Core.createSubscription(db, {
2156
+ chainId: 42431,
2157
+ destination: { type: 'url', url: 'https://hooks.example.com/x' },
2158
+ eventType: 'transaction:included',
2159
+ filters: { blockNumber: { eq: `0x${missingBlock.toString(16)}` } },
2160
+ owner: { orgId: 'org_test', type: 'api_key' },
2161
+ })
2162
+ await Core.setCursor(db, subscription.id, cursor)
2163
+
2164
+ await expect(
2165
+ Webhooks.poll({
2166
+ chainId: 42431,
2167
+ eventTypes: ['transaction:included'],
2168
+ headBlockNumber: missingBlock + 2,
2169
+ client,
2170
+ db,
2171
+ tidx: realTidx,
2172
+ }),
2173
+ ).rejects.toThrowErrorMatchingInlineSnapshot(`
2174
+ [Webhooks.BlockUnavailableError: Block 4000000000 is unavailable.]
2175
+ `)
2176
+
2177
+ expect(await Core.getCursor(db, subscription.id)).toBe(cursor)
1779
2178
  })
1780
2179
 
1781
2180
  test('transaction:included matches exact empty calldata through the poller', async () => {