ponder 0.9.4 → 0.9.5-debug.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. package/CHANGELOG.md +2201 -0
  2. package/dist/esm/bin/commands/codegen.js +37 -0
  3. package/dist/esm/bin/commands/codegen.js.map +1 -0
  4. package/dist/esm/bin/commands/dev.js +242 -0
  5. package/dist/esm/bin/commands/dev.js.map +1 -0
  6. package/dist/esm/bin/commands/list.js +103 -0
  7. package/dist/esm/bin/commands/list.js.map +1 -0
  8. package/dist/esm/bin/commands/serve.js +123 -0
  9. package/dist/esm/bin/commands/serve.js.map +1 -0
  10. package/dist/esm/bin/commands/start.js +136 -0
  11. package/dist/esm/bin/commands/start.js.map +1 -0
  12. package/dist/esm/bin/ponder.js +118 -0
  13. package/dist/esm/bin/ponder.js.map +1 -0
  14. package/dist/esm/bin/utils/codegen.js +26 -0
  15. package/dist/esm/bin/utils/codegen.js.map +1 -0
  16. package/dist/esm/bin/utils/exit.js +69 -0
  17. package/dist/esm/bin/utils/exit.js.map +1 -0
  18. package/dist/esm/bin/utils/run.js +247 -0
  19. package/dist/esm/bin/utils/run.js.map +1 -0
  20. package/dist/esm/bin/utils/runServer.js +8 -0
  21. package/dist/esm/bin/utils/runServer.js.map +1 -0
  22. package/dist/esm/build/configAndIndexingFunctions.js +654 -0
  23. package/dist/esm/build/configAndIndexingFunctions.js.map +1 -0
  24. package/dist/esm/build/factory.js +43 -0
  25. package/dist/esm/build/factory.js.map +1 -0
  26. package/dist/esm/build/index.js +431 -0
  27. package/dist/esm/build/index.js.map +1 -0
  28. package/dist/esm/build/plugin.js +43 -0
  29. package/dist/esm/build/plugin.js.map +1 -0
  30. package/dist/esm/build/pre.js +112 -0
  31. package/dist/esm/build/pre.js.map +1 -0
  32. package/dist/esm/build/schema.js +89 -0
  33. package/dist/esm/build/schema.js.map +1 -0
  34. package/dist/esm/build/stacktrace.js +137 -0
  35. package/dist/esm/build/stacktrace.js.map +1 -0
  36. package/dist/esm/client/index.js +124 -0
  37. package/dist/esm/client/index.js.map +1 -0
  38. package/dist/esm/client/validate.js +1151 -0
  39. package/dist/esm/client/validate.js.map +1 -0
  40. package/dist/esm/config/address.js +2 -0
  41. package/dist/esm/config/address.js.map +1 -0
  42. package/dist/esm/config/eventFilter.js +2 -0
  43. package/dist/esm/config/eventFilter.js.map +1 -0
  44. package/dist/esm/config/index.js +2 -0
  45. package/dist/esm/config/index.js.map +1 -0
  46. package/dist/esm/config/networks.js +120 -0
  47. package/dist/esm/config/networks.js.map +1 -0
  48. package/dist/esm/config/utilityTypes.js +2 -0
  49. package/dist/esm/config/utilityTypes.js.map +1 -0
  50. package/dist/esm/database/index.js +914 -0
  51. package/dist/esm/database/index.js.map +1 -0
  52. package/dist/esm/drizzle/bigint.js +36 -0
  53. package/dist/esm/drizzle/bigint.js.map +1 -0
  54. package/dist/esm/drizzle/hex.js +38 -0
  55. package/dist/esm/drizzle/hex.js.map +1 -0
  56. package/dist/esm/drizzle/index.js +43 -0
  57. package/dist/esm/drizzle/index.js.map +1 -0
  58. package/dist/esm/drizzle/kit/index.js +658 -0
  59. package/dist/esm/drizzle/kit/index.js.map +1 -0
  60. package/dist/esm/drizzle/onchain.js +102 -0
  61. package/dist/esm/drizzle/onchain.js.map +1 -0
  62. package/dist/esm/graphql/index.js +704 -0
  63. package/dist/esm/graphql/index.js.map +1 -0
  64. package/dist/esm/graphql/json.js +42 -0
  65. package/dist/esm/graphql/json.js.map +1 -0
  66. package/dist/esm/graphql/middleware.js +80 -0
  67. package/dist/esm/graphql/middleware.js.map +1 -0
  68. package/dist/esm/index.js +9 -0
  69. package/dist/esm/index.js.map +1 -0
  70. package/dist/esm/indexing/addStackTrace.js +54 -0
  71. package/dist/esm/indexing/addStackTrace.js.map +1 -0
  72. package/dist/esm/indexing/index.js +10 -0
  73. package/dist/esm/indexing/index.js.map +1 -0
  74. package/dist/esm/indexing/ponderActions.js +60 -0
  75. package/dist/esm/indexing/ponderActions.js.map +1 -0
  76. package/dist/esm/indexing/service.js +312 -0
  77. package/dist/esm/indexing/service.js.map +1 -0
  78. package/dist/esm/indexing-store/historical.js +591 -0
  79. package/dist/esm/indexing-store/historical.js.map +1 -0
  80. package/dist/esm/indexing-store/index.js +19 -0
  81. package/dist/esm/indexing-store/index.js.map +1 -0
  82. package/dist/esm/indexing-store/metadata.js +46 -0
  83. package/dist/esm/indexing-store/metadata.js.map +1 -0
  84. package/dist/esm/indexing-store/realtime.js +295 -0
  85. package/dist/esm/indexing-store/realtime.js.map +1 -0
  86. package/dist/esm/internal/common.js +2 -0
  87. package/dist/esm/internal/common.js.map +1 -0
  88. package/dist/esm/internal/errors.js +175 -0
  89. package/dist/esm/internal/errors.js.map +1 -0
  90. package/dist/esm/internal/logger.js +96 -0
  91. package/dist/esm/internal/logger.js.map +1 -0
  92. package/dist/esm/internal/metrics.js +569 -0
  93. package/dist/esm/internal/metrics.js.map +1 -0
  94. package/dist/esm/internal/options.js +69 -0
  95. package/dist/esm/internal/options.js.map +1 -0
  96. package/dist/esm/internal/shutdown.js +18 -0
  97. package/dist/esm/internal/shutdown.js.map +1 -0
  98. package/dist/esm/internal/telemetry.js +199 -0
  99. package/dist/esm/internal/telemetry.js.map +1 -0
  100. package/dist/esm/internal/types.js +2 -0
  101. package/dist/esm/internal/types.js.map +1 -0
  102. package/dist/esm/server/error.js +55 -0
  103. package/dist/esm/server/error.js.map +1 -0
  104. package/dist/esm/server/index.js +107 -0
  105. package/dist/esm/server/index.js.map +1 -0
  106. package/dist/esm/sync/abi.js +67 -0
  107. package/dist/esm/sync/abi.js.map +1 -0
  108. package/dist/esm/sync/events.js +607 -0
  109. package/dist/esm/sync/events.js.map +1 -0
  110. package/dist/esm/sync/filter.js +356 -0
  111. package/dist/esm/sync/filter.js.map +1 -0
  112. package/dist/esm/sync/fragments.js +300 -0
  113. package/dist/esm/sync/fragments.js.map +1 -0
  114. package/dist/esm/sync/index.js +1001 -0
  115. package/dist/esm/sync/index.js.map +1 -0
  116. package/dist/esm/sync/transport.js +94 -0
  117. package/dist/esm/sync/transport.js.map +1 -0
  118. package/dist/esm/sync-historical/index.js +590 -0
  119. package/dist/esm/sync-historical/index.js.map +1 -0
  120. package/dist/esm/sync-realtime/bloom.js +75 -0
  121. package/dist/esm/sync-realtime/bloom.js.map +1 -0
  122. package/dist/esm/sync-realtime/index.js +794 -0
  123. package/dist/esm/sync-realtime/index.js.map +1 -0
  124. package/dist/esm/sync-store/encoding.js +157 -0
  125. package/dist/esm/sync-store/encoding.js.map +1 -0
  126. package/dist/esm/sync-store/index.js +727 -0
  127. package/dist/esm/sync-store/index.js.map +1 -0
  128. package/dist/esm/sync-store/migrations.js +1186 -0
  129. package/dist/esm/sync-store/migrations.js.map +1 -0
  130. package/dist/esm/types/db.js +2 -0
  131. package/dist/esm/types/db.js.map +1 -0
  132. package/dist/esm/types/eth.js +2 -0
  133. package/dist/esm/types/eth.js.map +1 -0
  134. package/dist/esm/types/sync.js +2 -0
  135. package/dist/esm/types/sync.js.map +1 -0
  136. package/dist/esm/types/utils.js +2 -0
  137. package/dist/esm/types/utils.js.map +1 -0
  138. package/dist/esm/types/virtual.js +2 -0
  139. package/dist/esm/types/virtual.js.map +1 -0
  140. package/dist/esm/ui/ProgressBar.js +11 -0
  141. package/dist/esm/ui/ProgressBar.js.map +1 -0
  142. package/dist/esm/ui/Table.js +50 -0
  143. package/dist/esm/ui/Table.js.map +1 -0
  144. package/dist/esm/ui/app.js +113 -0
  145. package/dist/esm/ui/app.js.map +1 -0
  146. package/dist/esm/ui/graphiql.html.js +59 -0
  147. package/dist/esm/ui/graphiql.html.js.map +1 -0
  148. package/dist/esm/ui/index.js +21 -0
  149. package/dist/esm/ui/index.js.map +1 -0
  150. package/dist/esm/utils/bigint.js +37 -0
  151. package/dist/esm/utils/bigint.js.map +1 -0
  152. package/dist/esm/utils/chains.js +3 -0
  153. package/dist/esm/utils/chains.js.map +1 -0
  154. package/dist/esm/utils/checkpoint.js +114 -0
  155. package/dist/esm/utils/checkpoint.js.map +1 -0
  156. package/dist/esm/utils/chunk.js +8 -0
  157. package/dist/esm/utils/chunk.js.map +1 -0
  158. package/dist/esm/utils/date.js +27 -0
  159. package/dist/esm/utils/date.js.map +1 -0
  160. package/dist/esm/utils/debug.js +2 -0
  161. package/dist/esm/utils/debug.js.map +1 -0
  162. package/dist/esm/utils/dedupe.js +33 -0
  163. package/dist/esm/utils/dedupe.js.map +1 -0
  164. package/dist/esm/utils/duplicates.js +19 -0
  165. package/dist/esm/utils/duplicates.js.map +1 -0
  166. package/dist/esm/utils/estimate.js +6 -0
  167. package/dist/esm/utils/estimate.js.map +1 -0
  168. package/dist/esm/utils/extend.js +28 -0
  169. package/dist/esm/utils/extend.js.map +1 -0
  170. package/dist/esm/utils/format.js +20 -0
  171. package/dist/esm/utils/format.js.map +1 -0
  172. package/dist/esm/utils/generators.js +77 -0
  173. package/dist/esm/utils/generators.js.map +1 -0
  174. package/dist/esm/utils/hash.js +11 -0
  175. package/dist/esm/utils/hash.js.map +1 -0
  176. package/dist/esm/utils/interval.js +171 -0
  177. package/dist/esm/utils/interval.js.map +1 -0
  178. package/dist/esm/utils/lowercase.js +7 -0
  179. package/dist/esm/utils/lowercase.js.map +1 -0
  180. package/dist/esm/utils/mutex.js +25 -0
  181. package/dist/esm/utils/mutex.js.map +1 -0
  182. package/dist/esm/utils/never.js +4 -0
  183. package/dist/esm/utils/never.js.map +1 -0
  184. package/dist/esm/utils/offset.js +73 -0
  185. package/dist/esm/utils/offset.js.map +1 -0
  186. package/dist/esm/utils/order.js +18 -0
  187. package/dist/esm/utils/order.js.map +1 -0
  188. package/dist/esm/utils/partition.js +37 -0
  189. package/dist/esm/utils/partition.js.map +1 -0
  190. package/dist/esm/utils/pg.js +126 -0
  191. package/dist/esm/utils/pg.js.map +1 -0
  192. package/dist/esm/utils/pglite.js +80 -0
  193. package/dist/esm/utils/pglite.js.map +1 -0
  194. package/dist/esm/utils/port.js +30 -0
  195. package/dist/esm/utils/port.js.map +1 -0
  196. package/dist/esm/utils/print.js +23 -0
  197. package/dist/esm/utils/print.js.map +1 -0
  198. package/dist/esm/utils/promiseWithResolvers.js +13 -0
  199. package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
  200. package/dist/esm/utils/queue.js +145 -0
  201. package/dist/esm/utils/queue.js.map +1 -0
  202. package/dist/esm/utils/range.js +8 -0
  203. package/dist/esm/utils/range.js.map +1 -0
  204. package/dist/esm/utils/requestQueue.js +127 -0
  205. package/dist/esm/utils/requestQueue.js.map +1 -0
  206. package/dist/esm/utils/result.js +10 -0
  207. package/dist/esm/utils/result.js.map +1 -0
  208. package/dist/esm/utils/rpc.js +202 -0
  209. package/dist/esm/utils/rpc.js.map +1 -0
  210. package/dist/esm/utils/serialize.js +23 -0
  211. package/dist/esm/utils/serialize.js.map +1 -0
  212. package/dist/esm/utils/timer.js +17 -0
  213. package/dist/esm/utils/timer.js.map +1 -0
  214. package/dist/esm/utils/wait.js +8 -0
  215. package/dist/esm/utils/wait.js.map +1 -0
  216. package/dist/esm/utils/zipper.js +67 -0
  217. package/dist/esm/utils/zipper.js.map +1 -0
  218. package/dist/types/bin/commands/codegen.d.ts +5 -0
  219. package/dist/types/bin/commands/codegen.d.ts.map +1 -0
  220. package/dist/types/bin/commands/dev.d.ts +5 -0
  221. package/dist/types/bin/commands/dev.d.ts.map +1 -0
  222. package/dist/types/bin/commands/list.d.ts +5 -0
  223. package/dist/types/bin/commands/list.d.ts.map +1 -0
  224. package/dist/types/bin/commands/serve.d.ts +5 -0
  225. package/dist/types/bin/commands/serve.d.ts.map +1 -0
  226. package/dist/types/bin/commands/start.d.ts +5 -0
  227. package/dist/types/bin/commands/start.d.ts.map +1 -0
  228. package/dist/{bin → types/bin}/ponder.d.ts +5 -6
  229. package/dist/types/bin/ponder.d.ts.map +1 -0
  230. package/dist/types/bin/utils/codegen.d.ts +6 -0
  231. package/dist/types/bin/utils/codegen.d.ts.map +1 -0
  232. package/dist/types/bin/utils/exit.d.ts +9 -0
  233. package/dist/types/bin/utils/exit.d.ts.map +1 -0
  234. package/dist/types/bin/utils/run.d.ts +14 -0
  235. package/dist/types/bin/utils/run.d.ts.map +1 -0
  236. package/dist/types/bin/utils/runServer.d.ts +12 -0
  237. package/dist/types/bin/utils/runServer.d.ts.map +1 -0
  238. package/dist/types/build/configAndIndexingFunctions.d.ts +37 -0
  239. package/dist/types/build/configAndIndexingFunctions.d.ts.map +1 -0
  240. package/dist/types/build/factory.d.ts +10 -0
  241. package/dist/types/build/factory.d.ts.map +1 -0
  242. package/dist/types/build/index.d.ts +70 -0
  243. package/dist/types/build/index.d.ts.map +1 -0
  244. package/dist/types/build/plugin.d.ts +4 -0
  245. package/dist/types/build/plugin.d.ts.map +1 -0
  246. package/dist/types/build/pre.d.ts +35 -0
  247. package/dist/types/build/pre.d.ts.map +1 -0
  248. package/dist/types/build/schema.d.ts +18 -0
  249. package/dist/types/build/schema.d.ts.map +1 -0
  250. package/dist/types/build/stacktrace.d.ts +13 -0
  251. package/dist/types/build/stacktrace.d.ts.map +1 -0
  252. package/dist/types/client/index.d.ts +27 -0
  253. package/dist/types/client/index.d.ts.map +1 -0
  254. package/dist/types/client/validate.d.ts +2 -0
  255. package/dist/types/client/validate.d.ts.map +1 -0
  256. package/dist/types/config/address.d.ts +14 -0
  257. package/dist/types/config/address.d.ts.map +1 -0
  258. package/dist/types/config/eventFilter.d.ts +18 -0
  259. package/dist/types/config/eventFilter.d.ts.map +1 -0
  260. package/dist/types/config/index.d.ts +143 -0
  261. package/dist/types/config/index.d.ts.map +1 -0
  262. package/dist/types/config/networks.d.ts +30 -0
  263. package/dist/types/config/networks.d.ts.map +1 -0
  264. package/dist/types/config/utilityTypes.d.ts +43 -0
  265. package/dist/types/config/utilityTypes.d.ts.map +1 -0
  266. package/dist/types/database/index.d.ts +91 -0
  267. package/dist/types/database/index.d.ts.map +1 -0
  268. package/dist/types/drizzle/bigint.d.ts +25 -0
  269. package/dist/types/drizzle/bigint.d.ts.map +1 -0
  270. package/dist/types/drizzle/hex.d.ts +25 -0
  271. package/dist/types/drizzle/hex.d.ts.map +1 -0
  272. package/dist/types/drizzle/index.d.ts +14 -0
  273. package/dist/types/drizzle/index.d.ts.map +1 -0
  274. package/dist/types/drizzle/kit/index.d.ts +49 -0
  275. package/dist/types/drizzle/kit/index.d.ts.map +1 -0
  276. package/dist/{drizzle → types/drizzle}/onchain.d.ts +49 -96
  277. package/dist/types/drizzle/onchain.d.ts.map +1 -0
  278. package/dist/types/graphql/index.d.ts +14 -0
  279. package/dist/types/graphql/index.d.ts.map +1 -0
  280. package/dist/types/graphql/json.d.ts +3 -0
  281. package/dist/types/graphql/json.d.ts.map +1 -0
  282. package/dist/types/graphql/middleware.d.ts +29 -0
  283. package/dist/types/graphql/middleware.d.ts.map +1 -0
  284. package/dist/types/index.d.ts +18 -0
  285. package/dist/types/index.d.ts.map +1 -0
  286. package/dist/types/indexing/addStackTrace.d.ts +3 -0
  287. package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
  288. package/dist/types/indexing/index.d.ts +575 -0
  289. package/dist/types/indexing/index.d.ts.map +1 -0
  290. package/dist/types/indexing/ponderActions.d.ts +47 -0
  291. package/dist/types/indexing/ponderActions.d.ts.map +1 -0
  292. package/dist/types/indexing/service.d.ts +73 -0
  293. package/dist/types/indexing/service.d.ts.map +1 -0
  294. package/dist/types/indexing-store/historical.d.ts +19 -0
  295. package/dist/types/indexing-store/historical.d.ts.map +1 -0
  296. package/dist/types/indexing-store/index.d.ts +10 -0
  297. package/dist/types/indexing-store/index.d.ts.map +1 -0
  298. package/dist/types/indexing-store/metadata.d.ts +10 -0
  299. package/dist/types/indexing-store/metadata.d.ts.map +1 -0
  300. package/dist/types/indexing-store/realtime.d.ts +10 -0
  301. package/dist/types/indexing-store/realtime.d.ts.map +1 -0
  302. package/dist/types/internal/common.d.ts +13 -0
  303. package/dist/types/internal/common.d.ts.map +1 -0
  304. package/dist/types/internal/errors.d.ts +55 -0
  305. package/dist/types/internal/errors.d.ts.map +1 -0
  306. package/dist/types/internal/logger.d.ts +26 -0
  307. package/dist/types/internal/logger.d.ts.map +1 -0
  308. package/dist/types/internal/metrics.d.ts +77 -0
  309. package/dist/types/internal/metrics.d.ts.map +1 -0
  310. package/dist/types/internal/options.d.ts +59 -0
  311. package/dist/types/internal/options.d.ts.map +1 -0
  312. package/dist/types/internal/shutdown.d.ts +8 -0
  313. package/dist/types/internal/shutdown.d.ts.map +1 -0
  314. package/dist/types/internal/telemetry.d.ts +43 -0
  315. package/dist/types/internal/telemetry.d.ts.map +1 -0
  316. package/dist/types/internal/types.d.ts +328 -0
  317. package/dist/types/internal/types.d.ts.map +1 -0
  318. package/dist/types/server/error.d.ts +5 -0
  319. package/dist/types/server/error.d.ts.map +1 -0
  320. package/dist/types/server/index.d.ts +13 -0
  321. package/dist/types/server/index.d.ts.map +1 -0
  322. package/dist/types/sync/abi.d.ts +54 -0
  323. package/dist/types/sync/abi.d.ts.map +1 -0
  324. package/dist/types/sync/events.d.ts +24 -0
  325. package/dist/types/sync/events.d.ts.map +1 -0
  326. package/dist/types/sync/filter.d.ts +71 -0
  327. package/dist/types/sync/filter.d.ts.map +1 -0
  328. package/dist/types/sync/fragments.d.ts +21 -0
  329. package/dist/types/sync/fragments.d.ts.map +1 -0
  330. package/dist/types/sync/index.d.ts +112 -0
  331. package/dist/types/sync/index.d.ts.map +1 -0
  332. package/dist/types/sync/transport.d.ts +8 -0
  333. package/dist/types/sync/transport.d.ts.map +1 -0
  334. package/dist/types/sync-historical/index.d.ts +28 -0
  335. package/dist/types/sync-historical/index.d.ts.map +1 -0
  336. package/dist/types/sync-realtime/bloom.d.ts +19 -0
  337. package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
  338. package/dist/types/sync-realtime/index.d.ts +48 -0
  339. package/dist/types/sync-realtime/index.d.ts.map +1 -0
  340. package/dist/types/sync-store/encoding.d.ts +151 -0
  341. package/dist/types/sync-store/encoding.d.ts.map +1 -0
  342. package/dist/types/sync-store/index.d.ts +104 -0
  343. package/dist/types/sync-store/index.d.ts.map +1 -0
  344. package/dist/types/sync-store/migrations.d.ts +13 -0
  345. package/dist/types/sync-store/migrations.d.ts.map +1 -0
  346. package/dist/types/types/db.d.ts +213 -0
  347. package/dist/types/types/db.d.ts.map +1 -0
  348. package/dist/types/types/eth.d.ts +196 -0
  349. package/dist/types/types/eth.d.ts.map +1 -0
  350. package/dist/types/types/sync.d.ts +15 -0
  351. package/dist/types/types/sync.d.ts.map +1 -0
  352. package/dist/types/types/utils.d.ts +22 -0
  353. package/dist/types/types/utils.d.ts.map +1 -0
  354. package/dist/types/types/virtual.d.ts +95 -0
  355. package/dist/types/types/virtual.d.ts.map +1 -0
  356. package/dist/types/ui/ProgressBar.d.ts +7 -0
  357. package/dist/types/ui/ProgressBar.d.ts.map +1 -0
  358. package/dist/types/ui/Table.d.ts +24 -0
  359. package/dist/types/ui/Table.d.ts.map +1 -0
  360. package/dist/types/ui/app.d.ts +14 -0
  361. package/dist/types/ui/app.d.ts.map +1 -0
  362. package/dist/types/ui/graphiql.html.d.ts +2 -0
  363. package/dist/types/ui/graphiql.html.d.ts.map +1 -0
  364. package/dist/types/ui/index.d.ts +5 -0
  365. package/dist/types/ui/index.d.ts.map +1 -0
  366. package/dist/types/utils/bigint.d.ts +15 -0
  367. package/dist/types/utils/bigint.d.ts.map +1 -0
  368. package/dist/types/utils/chains.d.ts +3 -0
  369. package/dist/types/utils/chains.d.ts.map +1 -0
  370. package/dist/types/utils/checkpoint.d.ts +40 -0
  371. package/dist/types/utils/checkpoint.d.ts.map +1 -0
  372. package/dist/types/utils/chunk.d.ts +2 -0
  373. package/dist/types/utils/chunk.d.ts.map +1 -0
  374. package/dist/types/utils/date.d.ts +7 -0
  375. package/dist/types/utils/date.d.ts.map +1 -0
  376. package/dist/types/utils/debug.d.ts +105 -0
  377. package/dist/types/utils/debug.d.ts.map +1 -0
  378. package/dist/types/utils/dedupe.d.ts +20 -0
  379. package/dist/types/utils/dedupe.d.ts.map +1 -0
  380. package/dist/types/utils/duplicates.d.ts +7 -0
  381. package/dist/types/utils/duplicates.d.ts.map +1 -0
  382. package/dist/types/utils/estimate.d.ts +11 -0
  383. package/dist/types/utils/estimate.d.ts.map +1 -0
  384. package/dist/types/utils/extend.d.ts +13 -0
  385. package/dist/types/utils/extend.d.ts.map +1 -0
  386. package/dist/types/utils/format.d.ts +3 -0
  387. package/dist/types/utils/format.d.ts.map +1 -0
  388. package/dist/types/utils/generators.d.ts +23 -0
  389. package/dist/types/utils/generators.d.ts.map +1 -0
  390. package/dist/types/utils/hash.d.ts +11 -0
  391. package/dist/types/utils/hash.d.ts.map +1 -0
  392. package/dist/types/utils/interval.d.ts +53 -0
  393. package/dist/types/utils/interval.d.ts.map +1 -0
  394. package/dist/types/utils/lowercase.d.ts +5 -0
  395. package/dist/types/utils/lowercase.d.ts.map +1 -0
  396. package/dist/types/utils/mutex.d.ts +8 -0
  397. package/dist/types/utils/mutex.d.ts.map +1 -0
  398. package/dist/types/utils/never.d.ts +2 -0
  399. package/dist/types/utils/never.d.ts.map +1 -0
  400. package/dist/types/utils/offset.d.ts +3 -0
  401. package/dist/types/utils/offset.d.ts.map +1 -0
  402. package/dist/types/utils/order.d.ts +2 -0
  403. package/dist/types/utils/order.d.ts.map +1 -0
  404. package/dist/types/utils/partition.d.ts +22 -0
  405. package/dist/types/utils/partition.d.ts.map +1 -0
  406. package/dist/types/utils/pg.d.ts +5 -0
  407. package/dist/types/utils/pg.d.ts.map +1 -0
  408. package/dist/types/utils/pglite.d.ts +25 -0
  409. package/dist/types/utils/pglite.d.ts.map +1 -0
  410. package/dist/types/utils/port.d.ts +5 -0
  411. package/dist/types/utils/port.d.ts.map +1 -0
  412. package/dist/types/utils/print.d.ts +2 -0
  413. package/dist/types/utils/print.d.ts.map +1 -0
  414. package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
  415. package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
  416. package/dist/types/utils/queue.d.ts +33 -0
  417. package/dist/types/utils/queue.d.ts.map +1 -0
  418. package/dist/types/utils/range.d.ts +8 -0
  419. package/dist/types/utils/range.d.ts.map +1 -0
  420. package/dist/types/utils/requestQueue.d.ts +21 -0
  421. package/dist/types/utils/requestQueue.d.ts.map +1 -0
  422. package/dist/types/utils/result.d.ts +17 -0
  423. package/dist/types/utils/result.d.ts.map +1 -0
  424. package/dist/types/utils/rpc.d.ts +57 -0
  425. package/dist/types/utils/rpc.d.ts.map +1 -0
  426. package/dist/types/utils/serialize.d.ts +19 -0
  427. package/dist/types/utils/serialize.d.ts.map +1 -0
  428. package/dist/types/utils/timer.d.ts +11 -0
  429. package/dist/types/utils/timer.d.ts.map +1 -0
  430. package/dist/types/utils/wait.d.ts +6 -0
  431. package/dist/types/utils/wait.d.ts.map +1 -0
  432. package/dist/types/utils/zipper.d.ts +36 -0
  433. package/dist/types/utils/zipper.d.ts.map +1 -0
  434. package/package.json +17 -17
  435. package/src/bin/commands/dev.ts +1 -1
  436. package/src/bin/ponder.ts +1 -1
  437. package/src/bin/utils/run.ts +7 -18
  438. package/src/build/configAndIndexingFunctions.ts +1 -1
  439. package/src/build/factory.ts +1 -1
  440. package/src/client/index.ts +1 -1
  441. package/src/graphql/index.ts +1 -1
  442. package/src/indexing-store/historical.ts +1 -1
  443. package/src/indexing-store/realtime.ts +1 -1
  444. package/src/internal/telemetry.ts +1 -1
  445. package/src/sync/fragments.ts +1 -1
  446. package/src/sync/index.ts +60 -20
  447. package/src/sync-historical/index.ts +26 -26
  448. package/src/sync-realtime/index.ts +1 -1
  449. package/src/utils/dedupe.ts +40 -0
  450. package/src/utils/generators.ts +1 -1
  451. package/src/utils/mutex.ts +1 -1
  452. package/src/utils/promiseWithResolvers.ts +20 -0
  453. package/src/utils/queue.ts +250 -0
  454. package/src/utils/requestQueue.ts +1 -1
  455. package/dist/bin/ponder.js +0 -12904
  456. package/dist/bin/ponder.js.map +0 -1
  457. package/dist/chunk-K2TLRLX3.js +0 -163
  458. package/dist/chunk-K2TLRLX3.js.map +0 -1
  459. package/dist/chunk-LHCA5XFV.js +0 -257
  460. package/dist/chunk-LHCA5XFV.js.map +0 -1
  461. package/dist/drizzle/onchain.js +0 -19
  462. package/dist/drizzle/onchain.js.map +0 -1
  463. package/dist/index.d.ts +0 -819
  464. package/dist/index.js +0 -2217
  465. package/dist/index.js.map +0 -1
  466. package/dist/utils-ceNucOJb.d.ts +0 -14
@@ -0,0 +1,727 @@
1
+ import { NonRetryableError } from '../internal/errors.js';
2
+ import { isAddressFactory, shouldGetTransactionReceipt, } from '../sync/filter.js';
3
+ import { fragmentToId, getFragments } from '../sync/fragments.js';
4
+ import { sql as ksql } from "kysely";
5
+ import { checksumAddress, hexToBigInt, } from "viem";
6
+ import { encodeBlock, encodeLog, encodeTrace, encodeTransaction, encodeTransactionReceipt, } from "./encoding.js";
7
+ const logFactorySQL = (qb, factory) => qb
8
+ .select((() => {
9
+ if (factory.childAddressLocation.startsWith("offset")) {
10
+ const childAddressOffset = Number(factory.childAddressLocation.substring(6));
11
+ const start = 2 + 12 * 2 + childAddressOffset * 2 + 1;
12
+ const length = 20 * 2;
13
+ return ksql `'0x' || substring(data from ${start}::int for ${length}::int)`;
14
+ }
15
+ else {
16
+ const start = 2 + 12 * 2 + 1;
17
+ const length = 20 * 2;
18
+ return ksql `'0x' || substring(${ksql.ref(factory.childAddressLocation)} from ${start}::integer for ${length}::integer)`;
19
+ }
20
+ })().as("childAddress"))
21
+ .distinct()
22
+ .$call((qb) => {
23
+ if (Array.isArray(factory.address)) {
24
+ return qb.where("address", "in", factory.address);
25
+ }
26
+ return qb.where("address", "=", factory.address);
27
+ })
28
+ .where("topic0", "=", factory.eventSelector)
29
+ .where("chainId", "=", factory.chainId);
30
+ export const createSyncStore = ({ common, database, }) => ({
31
+ insertIntervals: async ({ intervals, chainId }) => {
32
+ if (intervals.length === 0)
33
+ return;
34
+ await database.wrap({ method: "insertIntervals", includeTraceLogs: true }, async () => {
35
+ const perFragmentIntervals = new Map();
36
+ const values = [];
37
+ // dedupe and merge matching fragments
38
+ for (const { filter, interval } of intervals) {
39
+ for (const fragment of getFragments(filter)) {
40
+ const fragmentId = fragmentToId(fragment.fragment);
41
+ if (perFragmentIntervals.has(fragmentId) === false) {
42
+ perFragmentIntervals.set(fragmentId, []);
43
+ }
44
+ perFragmentIntervals.get(fragmentId).push(interval);
45
+ }
46
+ }
47
+ // NOTE: In order to force proper range union behavior, `interval[1]` must
48
+ // be rounded up.
49
+ for (const [fragmentId, intervals] of perFragmentIntervals) {
50
+ const numranges = intervals
51
+ .map((interval) => {
52
+ const start = interval[0];
53
+ const end = interval[1] + 1;
54
+ return `numrange(${start}, ${end}, '[]')`;
55
+ })
56
+ .join(", ");
57
+ values.push({
58
+ fragment_id: fragmentId,
59
+ chain_id: chainId,
60
+ blocks: ksql.raw(`nummultirange(${numranges})`),
61
+ });
62
+ }
63
+ await database.qb.sync
64
+ .insertInto("intervals")
65
+ .values(values)
66
+ .onConflict((oc) => oc.column("fragment_id").doUpdateSet({
67
+ blocks: ksql `intervals.blocks + excluded.blocks`,
68
+ }))
69
+ .execute();
70
+ });
71
+ },
72
+ getIntervals: async ({ filters }) => database.wrap({ method: "getIntervals", includeTraceLogs: true }, async () => {
73
+ let query;
74
+ for (let i = 0; i < filters.length; i++) {
75
+ const filter = filters[i];
76
+ const fragments = getFragments(filter);
77
+ for (let j = 0; j < fragments.length; j++) {
78
+ const fragment = fragments[j];
79
+ const _query = database.qb.sync
80
+ .selectFrom(database.qb.sync
81
+ .selectFrom("intervals")
82
+ .select(ksql `unnest(blocks)`.as("blocks"))
83
+ .where("fragment_id", "in", fragment.adjacentIds)
84
+ .as("unnested"))
85
+ .select([
86
+ ksql `range_agg(unnested.blocks)`.as("merged_blocks"),
87
+ ksql.raw(`'${i}'`).as("filter"),
88
+ ksql.raw(`'${j}'`).as("fragment"),
89
+ ]);
90
+ // @ts-ignore
91
+ query = query === undefined ? _query : query.unionAll(_query);
92
+ }
93
+ }
94
+ const rows = await query.execute();
95
+ const result = new Map();
96
+ // NOTE: `interval[1]` must be rounded down in order to offset the previous
97
+ // rounding.
98
+ for (let i = 0; i < filters.length; i++) {
99
+ const filter = filters[i];
100
+ const fragments = getFragments(filter);
101
+ result.set(filter, []);
102
+ for (let j = 0; j < fragments.length; j++) {
103
+ const fragment = fragments[j];
104
+ const intervals = rows
105
+ .filter((row) => row.filter === `${i}`)
106
+ .filter((row) => row.fragment === `${j}`)
107
+ .map((row) => (row.merged_blocks
108
+ ? JSON.parse(`[${row.merged_blocks.slice(1, -1)}]`)
109
+ : []).map((interval) => [interval[0], interval[1] - 1]))[0];
110
+ result
111
+ .get(filter)
112
+ .push({ fragment: fragment.fragment, intervals });
113
+ }
114
+ }
115
+ return result;
116
+ }),
117
+ getChildAddresses: ({ filter, limit }) => database.wrap({ method: "getChildAddresses", includeTraceLogs: true }, async () => {
118
+ return await database.qb.sync
119
+ .selectFrom("logs")
120
+ .$call((qb) => logFactorySQL(qb, filter))
121
+ .$if(limit !== undefined, (qb) => qb.limit(limit))
122
+ .execute()
123
+ .then((addresses) => addresses.map(({ childAddress }) => childAddress));
124
+ }),
125
+ filterChildAddresses: ({ filter, addresses }) => database.wrap({ method: "filterChildAddresses", includeTraceLogs: true }, async () => {
126
+ const result = await database.qb.sync
127
+ .with("addresses(address)", () => ksql `( values ${ksql.join(addresses.map((a) => ksql `( ${ksql.val(a)} )`))} )`)
128
+ .with("childAddresses", (db) => db.selectFrom("logs").$call((qb) => logFactorySQL(qb, filter)))
129
+ .selectFrom("addresses")
130
+ .where("addresses.address", "in", ksql `(SELECT "childAddress" FROM "childAddresses")`)
131
+ .selectAll()
132
+ .execute();
133
+ return new Set([...result.map(({ address }) => address)]);
134
+ }),
135
+ insertLogs: async ({ logs, shouldUpdateCheckpoint, chainId }) => {
136
+ if (logs.length === 0)
137
+ return;
138
+ await database.wrap({ method: "insertLogs", includeTraceLogs: true }, async () => {
139
+ // Calculate `batchSize` based on how many parameters the
140
+ // input will have
141
+ const batchSize = Math.floor(common.options.databaseMaxQueryParameters /
142
+ Object.keys(encodeLog({ log: logs[0].log, chainId })).length);
143
+ // As an optimization, logs that are matched by a factory do
144
+ // not contain a checkpoint, because not corresponding block is
145
+ // fetched (no block.timestamp). However, when a log is matched by
146
+ // both a log filter and a factory, the checkpoint must be included
147
+ // in the db.
148
+ for (let i = 0; i < logs.length; i += batchSize) {
149
+ await database.qb.sync
150
+ .insertInto("logs")
151
+ .values(logs
152
+ .slice(i, i + batchSize)
153
+ .map(({ log, block }) => encodeLog({ log, block, chainId })))
154
+ .onConflict((oc) => oc.column("id").$call((qb) => shouldUpdateCheckpoint
155
+ ? qb.doUpdateSet((eb) => ({
156
+ checkpoint: eb.ref("excluded.checkpoint"),
157
+ }))
158
+ : qb.doNothing()))
159
+ .execute();
160
+ }
161
+ });
162
+ },
163
+ insertBlocks: async ({ blocks, chainId }) => {
164
+ if (blocks.length === 0)
165
+ return;
166
+ await database.wrap({ method: "insertBlocks", includeTraceLogs: true }, async () => {
167
+ // Calculate `batchSize` based on how many parameters the
168
+ // input will have
169
+ const batchSize = Math.floor(common.options.databaseMaxQueryParameters /
170
+ Object.keys(encodeBlock({ block: blocks[0], chainId })).length);
171
+ for (let i = 0; i < blocks.length; i += batchSize) {
172
+ await database.qb.sync
173
+ .insertInto("blocks")
174
+ .values(blocks
175
+ .slice(i, i + batchSize)
176
+ .map((block) => encodeBlock({ block, chainId })))
177
+ .onConflict((oc) => oc.column("hash").doNothing())
178
+ .execute();
179
+ }
180
+ });
181
+ },
182
+ hasBlock: async ({ hash }) => database.wrap({ method: "hasBlock", includeTraceLogs: true }, async () => {
183
+ return await database.qb.sync
184
+ .selectFrom("blocks")
185
+ .select("hash")
186
+ .where("hash", "=", hash)
187
+ .executeTakeFirst()
188
+ .then((result) => result !== undefined);
189
+ }),
190
+ insertTransactions: async ({ transactions, chainId }) => {
191
+ if (transactions.length === 0)
192
+ return;
193
+ await database.wrap({ method: "insertTransactions", includeTraceLogs: true }, async () => {
194
+ // Calculate `batchSize` based on how many parameters the
195
+ // input will have
196
+ const batchSize = Math.floor(common.options.databaseMaxQueryParameters /
197
+ Object.keys(encodeTransaction({
198
+ transaction: transactions[0].transaction,
199
+ block: transactions[0].block,
200
+ chainId,
201
+ })).length);
202
+ // As an optimization for the migration, transactions inserted before 0.8 do not
203
+ // contain a checkpoint. However, for correctness the checkpoint must be inserted
204
+ // for new transactions (using onConflictDoUpdate).
205
+ for (let i = 0; i < transactions.length; i += batchSize) {
206
+ await database.qb.sync
207
+ .insertInto("transactions")
208
+ .values(transactions
209
+ .slice(i, i + batchSize)
210
+ .map(({ transaction, block }) => encodeTransaction({ transaction, block, chainId })))
211
+ .onConflict((oc) => oc.column("hash").doUpdateSet((eb) => ({
212
+ checkpoint: eb.ref("excluded.checkpoint"),
213
+ })))
214
+ .execute();
215
+ }
216
+ });
217
+ },
218
+ hasTransaction: async ({ hash }) => database.wrap({ method: "hasTransaction", includeTraceLogs: true }, async () => {
219
+ return await database.qb.sync
220
+ .selectFrom("transactions")
221
+ .select("hash")
222
+ .where("hash", "=", hash)
223
+ .executeTakeFirst()
224
+ .then((result) => result !== undefined);
225
+ }),
226
+ insertTransactionReceipts: async ({ transactionReceipts, chainId }) => {
227
+ if (transactionReceipts.length === 0)
228
+ return;
229
+ await database.wrap({ method: "insertTransactionReceipts", includeTraceLogs: true }, async () => {
230
+ // Calculate `batchSize` based on how many parameters the
231
+ // input will have
232
+ const batchSize = Math.floor(common.options.databaseMaxQueryParameters /
233
+ Object.keys(encodeTransactionReceipt({
234
+ transactionReceipt: transactionReceipts[0],
235
+ chainId,
236
+ })).length);
237
+ for (let i = 0; i < transactionReceipts.length; i += batchSize) {
238
+ await database.qb.sync
239
+ .insertInto("transactionReceipts")
240
+ .values(transactionReceipts
241
+ .slice(i, i + batchSize)
242
+ .map((transactionReceipt) => encodeTransactionReceipt({
243
+ transactionReceipt,
244
+ chainId,
245
+ })))
246
+ .onConflict((oc) => oc.column("transactionHash").doNothing())
247
+ .execute();
248
+ }
249
+ });
250
+ },
251
+ hasTransactionReceipt: async ({ hash }) => database.wrap({ method: "hasTransactionReceipt", includeTraceLogs: true }, async () => {
252
+ return await database.qb.sync
253
+ .selectFrom("transactionReceipts")
254
+ .select("transactionHash")
255
+ .where("transactionHash", "=", hash)
256
+ .executeTakeFirst()
257
+ .then((result) => result !== undefined);
258
+ }),
259
+ insertTraces: async ({ traces, chainId }) => {
260
+ if (traces.length === 0)
261
+ return;
262
+ await database.wrap({ method: "insertTraces", includeTraceLogs: true }, async () => {
263
+ // Calculate `batchSize` based on how many parameters the
264
+ // input will have
265
+ const batchSize = Math.floor(common.options.databaseMaxQueryParameters /
266
+ Object.keys(encodeTrace({
267
+ trace: traces[0].trace.trace,
268
+ block: traces[0].block,
269
+ transaction: traces[0].transaction,
270
+ chainId,
271
+ })).length);
272
+ for (let i = 0; i < traces.length; i += batchSize) {
273
+ await database.qb.sync
274
+ .insertInto("traces")
275
+ .values(traces
276
+ .slice(i, i + batchSize)
277
+ .map(({ trace, block, transaction }) => encodeTrace({
278
+ trace: trace.trace,
279
+ block,
280
+ transaction,
281
+ chainId,
282
+ })))
283
+ .onConflict((oc) => oc.column("id").doNothing())
284
+ .execute();
285
+ }
286
+ });
287
+ },
288
+ getEvents: async ({ filters, from, to, limit }) => database.wrap({ method: "getEvents", includeTraceLogs: true }, async () => {
289
+ let query;
290
+ for (let i = 0; i < filters.length; i++) {
291
+ const filter = filters[i];
292
+ const _query = filter.type === "log"
293
+ ? logSQL(filter, database.qb.sync, i)
294
+ : filter.type === "block"
295
+ ? blockSQL(filter, database.qb.sync, i)
296
+ : filter.type === "transaction"
297
+ ? transactionSQL(filter, database.qb.sync, i)
298
+ : filter.type === "transfer"
299
+ ? transferSQL(filter, database.qb.sync, i)
300
+ : traceSQL(filter, database.qb.sync, i);
301
+ // @ts-ignore
302
+ query = query === undefined ? _query : query.unionAll(_query);
303
+ }
304
+ const rows = await database.qb.sync
305
+ .with("event", () => query)
306
+ .selectFrom("event")
307
+ .select([
308
+ "event.filterIndex as event_filterIndex",
309
+ "event.checkpoint as event_checkpoint",
310
+ ])
311
+ .innerJoin("blocks", "blocks.hash", "event.blockHash")
312
+ .select([
313
+ "blocks.baseFeePerGas as block_baseFeePerGas",
314
+ "blocks.difficulty as block_difficulty",
315
+ "blocks.extraData as block_extraData",
316
+ "blocks.gasLimit as block_gasLimit",
317
+ "blocks.gasUsed as block_gasUsed",
318
+ "blocks.hash as block_hash",
319
+ "blocks.logsBloom as block_logsBloom",
320
+ "blocks.miner as block_miner",
321
+ "blocks.mixHash as block_mixHash",
322
+ "blocks.nonce as block_nonce",
323
+ "blocks.number as block_number",
324
+ "blocks.parentHash as block_parentHash",
325
+ "blocks.receiptsRoot as block_receiptsRoot",
326
+ "blocks.sha3Uncles as block_sha3Uncles",
327
+ "blocks.size as block_size",
328
+ "blocks.stateRoot as block_stateRoot",
329
+ "blocks.timestamp as block_timestamp",
330
+ "blocks.totalDifficulty as block_totalDifficulty",
331
+ "blocks.transactionsRoot as block_transactionsRoot",
332
+ ])
333
+ .leftJoin("logs", "logs.id", "event.logId")
334
+ .select([
335
+ "logs.address as log_address",
336
+ "logs.chainId as log_chainId",
337
+ "logs.data as log_data",
338
+ "logs.id as log_id",
339
+ "logs.logIndex as log_logIndex",
340
+ "logs.topic0 as log_topic0",
341
+ "logs.topic1 as log_topic1",
342
+ "logs.topic2 as log_topic2",
343
+ "logs.topic3 as log_topic3",
344
+ ])
345
+ .leftJoin("transactions", "transactions.hash", "event.transactionHash")
346
+ .select([
347
+ "transactions.accessList as tx_accessList",
348
+ "transactions.from as tx_from",
349
+ "transactions.gas as tx_gas",
350
+ "transactions.gasPrice as tx_gasPrice",
351
+ "transactions.hash as tx_hash",
352
+ "transactions.input as tx_input",
353
+ "transactions.maxFeePerGas as tx_maxFeePerGas",
354
+ "transactions.maxPriorityFeePerGas as tx_maxPriorityFeePerGas",
355
+ "transactions.nonce as tx_nonce",
356
+ "transactions.r as tx_r",
357
+ "transactions.s as tx_s",
358
+ "transactions.to as tx_to",
359
+ "transactions.transactionIndex as tx_transactionIndex",
360
+ "transactions.type as tx_type",
361
+ "transactions.value as tx_value",
362
+ "transactions.v as tx_v",
363
+ ])
364
+ .leftJoin("traces", "traces.id", "event.traceId")
365
+ .select([
366
+ "traces.id as trace_id",
367
+ "traces.type as trace_callType",
368
+ "traces.from as trace_from",
369
+ "traces.to as trace_to",
370
+ "traces.gas as trace_gas",
371
+ "traces.gasUsed as trace_gasUsed",
372
+ "traces.input as trace_input",
373
+ "traces.output as trace_output",
374
+ "traces.error as trace_error",
375
+ "traces.revertReason as trace_revertReason",
376
+ "traces.value as trace_value",
377
+ "traces.index as trace_index",
378
+ "traces.subcalls as trace_subcalls",
379
+ ])
380
+ .leftJoin("transactionReceipts", "transactionReceipts.transactionHash", "event.transactionHash")
381
+ .select([
382
+ "transactionReceipts.contractAddress as txr_contractAddress",
383
+ "transactionReceipts.cumulativeGasUsed as txr_cumulativeGasUsed",
384
+ "transactionReceipts.effectiveGasPrice as txr_effectiveGasPrice",
385
+ "transactionReceipts.from as txr_from",
386
+ "transactionReceipts.gasUsed as txr_gasUsed",
387
+ "transactionReceipts.logsBloom as txr_logsBloom",
388
+ "transactionReceipts.status as txr_status",
389
+ "transactionReceipts.to as txr_to",
390
+ "transactionReceipts.type as txr_type",
391
+ ])
392
+ .where("event.checkpoint", ">", from)
393
+ .where("event.checkpoint", "<=", to)
394
+ .orderBy("event.checkpoint", "asc")
395
+ .orderBy("event.filterIndex", "asc")
396
+ .$if(limit !== undefined, (qb) => qb.limit(limit))
397
+ .execute()
398
+ .catch((error) => {
399
+ if (error.message.includes("statement timeout")) {
400
+ throw new NonRetryableError(error.message);
401
+ }
402
+ else {
403
+ throw error;
404
+ }
405
+ });
406
+ const events = rows.map((_row) => {
407
+ // Without this cast, the block_ and tx_ fields are all nullable
408
+ // which makes this very annoying. Should probably add a runtime check
409
+ // that those fields are indeed present before continuing here.
410
+ const row = _row;
411
+ const filter = filters[row.event_filterIndex];
412
+ const hasLog = row.log_id !== null;
413
+ const hasTransaction = row.tx_hash !== null;
414
+ const hasTrace = row.trace_id !== null;
415
+ const hasTransactionReceipt = shouldGetTransactionReceipt(filter) && row.txr_from !== null;
416
+ return {
417
+ chainId: filter.chainId,
418
+ sourceIndex: Number(row.event_filterIndex),
419
+ checkpoint: row.event_checkpoint,
420
+ block: {
421
+ baseFeePerGas: row.block_baseFeePerGas !== null
422
+ ? BigInt(row.block_baseFeePerGas)
423
+ : null,
424
+ difficulty: BigInt(row.block_difficulty),
425
+ extraData: row.block_extraData,
426
+ gasLimit: BigInt(row.block_gasLimit),
427
+ gasUsed: BigInt(row.block_gasUsed),
428
+ hash: row.block_hash,
429
+ logsBloom: row.block_logsBloom,
430
+ miner: checksumAddress(row.block_miner),
431
+ mixHash: row.block_mixHash,
432
+ nonce: row.block_nonce,
433
+ number: BigInt(row.block_number),
434
+ parentHash: row.block_parentHash,
435
+ receiptsRoot: row.block_receiptsRoot,
436
+ sha3Uncles: row.block_sha3Uncles,
437
+ size: BigInt(row.block_size),
438
+ stateRoot: row.block_stateRoot,
439
+ timestamp: BigInt(row.block_timestamp),
440
+ totalDifficulty: row.block_totalDifficulty !== null
441
+ ? BigInt(row.block_totalDifficulty)
442
+ : null,
443
+ transactionsRoot: row.block_transactionsRoot,
444
+ },
445
+ log: hasLog
446
+ ? {
447
+ address: checksumAddress(row.log_address),
448
+ data: row.log_data,
449
+ id: row.log_id,
450
+ logIndex: Number(row.log_logIndex),
451
+ removed: false,
452
+ topics: [
453
+ row.log_topic0,
454
+ row.log_topic1,
455
+ row.log_topic2,
456
+ row.log_topic3,
457
+ ].filter((t) => t !== null),
458
+ }
459
+ : undefined,
460
+ transaction: hasTransaction
461
+ ? {
462
+ from: checksumAddress(row.tx_from),
463
+ gas: BigInt(row.tx_gas),
464
+ hash: row.tx_hash,
465
+ input: row.tx_input,
466
+ nonce: Number(row.tx_nonce),
467
+ r: row.tx_r,
468
+ s: row.tx_s,
469
+ to: row.tx_to ? checksumAddress(row.tx_to) : row.tx_to,
470
+ transactionIndex: Number(row.tx_transactionIndex),
471
+ value: BigInt(row.tx_value),
472
+ v: row.tx_v !== null ? BigInt(row.tx_v) : null,
473
+ ...(row.tx_type === "0x0"
474
+ ? {
475
+ type: "legacy",
476
+ gasPrice: BigInt(row.tx_gasPrice),
477
+ }
478
+ : row.tx_type === "0x1"
479
+ ? {
480
+ type: "eip2930",
481
+ gasPrice: BigInt(row.tx_gasPrice),
482
+ accessList: JSON.parse(row.tx_accessList),
483
+ }
484
+ : row.tx_type === "0x2"
485
+ ? {
486
+ type: "eip1559",
487
+ maxFeePerGas: BigInt(row.tx_maxFeePerGas),
488
+ maxPriorityFeePerGas: BigInt(row.tx_maxPriorityFeePerGas),
489
+ }
490
+ : row.tx_type === "0x7e"
491
+ ? {
492
+ type: "deposit",
493
+ maxFeePerGas: row.tx_maxFeePerGas !== null
494
+ ? BigInt(row.tx_maxFeePerGas)
495
+ : undefined,
496
+ maxPriorityFeePerGas: row.tx_maxPriorityFeePerGas !== null
497
+ ? BigInt(row.tx_maxPriorityFeePerGas)
498
+ : undefined,
499
+ }
500
+ : {
501
+ type: row.tx_type,
502
+ }),
503
+ }
504
+ : undefined,
505
+ trace: hasTrace
506
+ ? {
507
+ id: row.trace_id,
508
+ type: row.trace_callType,
509
+ from: checksumAddress(row.trace_from),
510
+ to: checksumAddress(row.trace_to),
511
+ gas: BigInt(row.trace_gas),
512
+ gasUsed: BigInt(row.trace_gasUsed),
513
+ input: row.trace_input,
514
+ output: row.trace_output,
515
+ value: BigInt(row.trace_value),
516
+ traceIndex: Number(row.trace_index),
517
+ subcalls: Number(row.trace_subcalls),
518
+ }
519
+ : undefined,
520
+ transactionReceipt: hasTransactionReceipt
521
+ ? {
522
+ contractAddress: row.txr_contractAddress
523
+ ? checksumAddress(row.txr_contractAddress)
524
+ : null,
525
+ cumulativeGasUsed: BigInt(row.txr_cumulativeGasUsed),
526
+ effectiveGasPrice: BigInt(row.txr_effectiveGasPrice),
527
+ from: checksumAddress(row.txr_from),
528
+ gasUsed: BigInt(row.txr_gasUsed),
529
+ logsBloom: row.txr_logsBloom,
530
+ status: row.txr_status === "0x1"
531
+ ? "success"
532
+ : row.txr_status === "0x0"
533
+ ? "reverted"
534
+ : row.txr_status,
535
+ to: row.txr_to ? checksumAddress(row.txr_to) : null,
536
+ type: row.txr_type === "0x0"
537
+ ? "legacy"
538
+ : row.txr_type === "0x1"
539
+ ? "eip2930"
540
+ : row.tx_type === "0x2"
541
+ ? "eip1559"
542
+ : row.tx_type === "0x7e"
543
+ ? "deposit"
544
+ : row.tx_type,
545
+ }
546
+ : undefined,
547
+ };
548
+ });
549
+ let cursor;
550
+ if (events.length !== limit) {
551
+ cursor = to;
552
+ }
553
+ else {
554
+ cursor = events[events.length - 1].checkpoint;
555
+ }
556
+ return { events, cursor };
557
+ }),
558
+ insertRpcRequestResult: async ({ request, blockNumber, chainId, result }) => database.wrap({ method: "insertRpcRequestResult", includeTraceLogs: true }, async () => {
559
+ await database.qb.sync
560
+ .insertInto("rpc_request_results")
561
+ .values({
562
+ request,
563
+ block_number: blockNumber,
564
+ chain_id: chainId,
565
+ result,
566
+ })
567
+ .onConflict((oc) => oc.columns(["request_hash", "chain_id"]).doUpdateSet({ result }))
568
+ .execute();
569
+ }),
570
+ getRpcRequestResult: async ({ request, chainId }) => database.wrap({ method: "getRpcRequestResult", includeTraceLogs: true }, async () => {
571
+ const result = await database.qb.sync
572
+ .selectFrom("rpc_request_results")
573
+ .select("result")
574
+ .where("request_hash", "=", ksql `MD5(${request})`)
575
+ .where("chain_id", "=", chainId)
576
+ .executeTakeFirst();
577
+ return result?.result;
578
+ }),
579
+ pruneRpcRequestResult: async ({ blocks, chainId }) => database.wrap({ method: "pruneRpcRequestResult", includeTraceLogs: true }, async () => {
580
+ if (blocks.length === 0)
581
+ return;
582
+ const numbers = blocks.map(({ number }) => hexToBigInt(number).toString());
583
+ await database.qb.sync
584
+ .deleteFrom("rpc_request_results")
585
+ .where("chain_id", "=", chainId)
586
+ .where("block_number", "in", numbers)
587
+ .execute();
588
+ }),
589
+ pruneByChain: async ({ chainId }) => database.wrap({ method: "pruneByChain", includeTraceLogs: true }, () => database.qb.sync.transaction().execute(async (tx) => {
590
+ await tx.deleteFrom("logs").where("chainId", "=", chainId).execute();
591
+ await tx.deleteFrom("blocks").where("chainId", "=", chainId).execute();
592
+ await tx
593
+ .deleteFrom("rpc_request_results")
594
+ .where("chain_id", "=", chainId)
595
+ .execute();
596
+ await tx.deleteFrom("traces").where("chainId", "=", chainId).execute();
597
+ await tx
598
+ .deleteFrom("transactions")
599
+ .where("chainId", "=", chainId)
600
+ .execute();
601
+ await tx
602
+ .deleteFrom("transactionReceipts")
603
+ .where("chainId", "=", chainId)
604
+ .execute();
605
+ })),
606
+ });
607
+ const addressSQL = (qb, db, address, column) => {
608
+ if (typeof address === "string")
609
+ return qb.where(column, "=", address);
610
+ if (isAddressFactory(address)) {
611
+ return qb.where(column, "in", db.selectFrom("logs").$call((qb) => logFactorySQL(qb, address)));
612
+ }
613
+ if (Array.isArray(address))
614
+ return qb.where(column, "in", address);
615
+ return qb;
616
+ };
617
+ const logSQL = (filter, db, index) => db
618
+ .selectFrom("logs")
619
+ .select([
620
+ ksql.raw(`'${index}'`).as("filterIndex"),
621
+ "checkpoint",
622
+ "chainId",
623
+ "blockHash",
624
+ "transactionHash",
625
+ "id as logId",
626
+ ksql `null`.as("traceId"),
627
+ ])
628
+ .where("chainId", "=", filter.chainId)
629
+ .$call((qb) => {
630
+ for (const idx of [0, 1, 2, 3]) {
631
+ // If it's an array of length 1, collapse it.
632
+ const raw = filter[`topic${idx}`] ?? null;
633
+ if (raw === null)
634
+ continue;
635
+ const topic = Array.isArray(raw) && raw.length === 1 ? raw[0] : raw;
636
+ if (Array.isArray(topic)) {
637
+ qb = qb.where((eb) => eb.or(topic.map((t) => eb(`logs.topic${idx}`, "=", t))));
638
+ }
639
+ else {
640
+ qb = qb.where(`logs.topic${idx}`, "=", topic);
641
+ }
642
+ }
643
+ return qb;
644
+ })
645
+ .$call((qb) => addressSQL(qb, db, filter.address, "address"))
646
+ .$if(filter.fromBlock !== undefined, (qb) => qb.where("blockNumber", ">=", filter.fromBlock.toString()))
647
+ .$if(filter.toBlock !== undefined, (qb) => qb.where("blockNumber", "<=", filter.toBlock.toString()));
648
+ const blockSQL = (filter, db, index) => db
649
+ .selectFrom("blocks")
650
+ .select([
651
+ ksql.raw(`'${index}'`).as("filterIndex"),
652
+ "checkpoint",
653
+ "chainId",
654
+ "hash as blockHash",
655
+ ksql `null`.as("transactionHash"),
656
+ ksql `null`.as("logId"),
657
+ ksql `null`.as("traceId"),
658
+ ])
659
+ .where("chainId", "=", filter.chainId)
660
+ .$if(filter !== undefined && filter.interval !== undefined, (qb) => qb.where(ksql `(number - ${filter.offset}) % ${filter.interval} = 0`))
661
+ .$if(filter.fromBlock !== undefined, (qb) => qb.where("number", ">=", filter.fromBlock.toString()))
662
+ .$if(filter.toBlock !== undefined, (qb) => qb.where("number", "<=", filter.toBlock.toString()));
663
+ const transactionSQL = (filter, db, index) => db
664
+ .selectFrom("transactions")
665
+ .select([
666
+ ksql.raw(`'${index}'`).as("filterIndex"),
667
+ "checkpoint",
668
+ "chainId",
669
+ "blockHash",
670
+ "hash as transactionHash",
671
+ ksql `null`.as("logId"),
672
+ ksql `null`.as("traceId"),
673
+ ])
674
+ .where("chainId", "=", filter.chainId)
675
+ .$call((qb) => addressSQL(qb, db, filter.fromAddress, "from"))
676
+ .$call((qb) => addressSQL(qb, db, filter.toAddress, "to"))
677
+ .$if(filter.includeReverted === false, (qb) => qb.where(db
678
+ .selectFrom("transactionReceipts")
679
+ .select("status")
680
+ .where("transactionReceipts.transactionHash", "=", ksql.ref("transactions.hash")), "=", "0x1"))
681
+ .$if(filter.fromBlock !== undefined, (qb) => qb.where("blockNumber", ">=", filter.fromBlock.toString()))
682
+ .$if(filter.toBlock !== undefined, (qb) => qb.where("blockNumber", "<=", filter.toBlock.toString()));
683
+ const transferSQL = (filter, db, index) => db
684
+ .selectFrom("traces")
685
+ .select([
686
+ ksql.raw(`'${index}'`).as("filterIndex"),
687
+ "checkpoint",
688
+ "chainId",
689
+ "blockHash",
690
+ "transactionHash",
691
+ ksql `null`.as("logId"),
692
+ "id as traceId",
693
+ ])
694
+ .where("chainId", "=", filter.chainId)
695
+ .$call((qb) => addressSQL(qb, db, filter.fromAddress, "from"))
696
+ .$call((qb) => addressSQL(qb, db, filter.toAddress, "to"))
697
+ .where("value", ">", "0")
698
+ .$if(filter.includeReverted === false, (qb) => qb.where("isReverted", "=", 0))
699
+ .$if(filter.fromBlock !== undefined, (qb) => qb.where("blockNumber", ">=", filter.fromBlock.toString()))
700
+ .$if(filter.toBlock !== undefined, (qb) => qb.where("blockNumber", "<=", filter.toBlock.toString()));
701
+ const traceSQL = (filter, db, index) => db
702
+ .selectFrom("traces")
703
+ .select([
704
+ ksql.raw(`'${index}'`).as("filterIndex"),
705
+ "checkpoint",
706
+ "chainId",
707
+ "blockHash",
708
+ "transactionHash",
709
+ ksql `null`.as("logId"),
710
+ "id as traceId",
711
+ ])
712
+ .where("chainId", "=", filter.chainId)
713
+ .$call((qb) => addressSQL(qb, db, filter.fromAddress, "from"))
714
+ .$call((qb) => addressSQL(qb, db, filter.toAddress, "to"))
715
+ .$if(filter.includeReverted === false, (qb) => qb.where("isReverted", "=", 0))
716
+ .$if(filter.callType !== undefined, (qb) => qb.where("type", "=", filter.callType))
717
+ .$if(filter.functionSelector !== undefined, (qb) => {
718
+ if (Array.isArray(filter.functionSelector)) {
719
+ return qb.where("functionSelector", "in", filter.functionSelector);
720
+ }
721
+ else {
722
+ return qb.where("functionSelector", "=", filter.functionSelector);
723
+ }
724
+ })
725
+ .$if(filter.fromBlock !== undefined, (qb) => qb.where("blockNumber", ">=", filter.fromBlock.toString()))
726
+ .$if(filter.toBlock !== undefined, (qb) => qb.where("blockNumber", "<=", filter.toBlock.toString()));
727
+ //# sourceMappingURL=index.js.map