@mikeatlast/ponder 0.16.1-fork.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 (619) hide show
  1. package/CHANGELOG.md +3415 -0
  2. package/README.md +186 -0
  3. package/dist/esm/bin/commands/codegen.js +46 -0
  4. package/dist/esm/bin/commands/codegen.js.map +1 -0
  5. package/dist/esm/bin/commands/createViews.js +196 -0
  6. package/dist/esm/bin/commands/createViews.js.map +1 -0
  7. package/dist/esm/bin/commands/dev.js +430 -0
  8. package/dist/esm/bin/commands/dev.js.map +1 -0
  9. package/dist/esm/bin/commands/list.js +148 -0
  10. package/dist/esm/bin/commands/list.js.map +1 -0
  11. package/dist/esm/bin/commands/prune.js +223 -0
  12. package/dist/esm/bin/commands/prune.js.map +1 -0
  13. package/dist/esm/bin/commands/serve.js +198 -0
  14. package/dist/esm/bin/commands/serve.js.map +1 -0
  15. package/dist/esm/bin/commands/start.js +253 -0
  16. package/dist/esm/bin/commands/start.js.map +1 -0
  17. package/dist/esm/bin/isolatedController.js +200 -0
  18. package/dist/esm/bin/isolatedController.js.map +1 -0
  19. package/dist/esm/bin/isolatedWorker.js +146 -0
  20. package/dist/esm/bin/isolatedWorker.js.map +1 -0
  21. package/dist/esm/bin/ponder.js +137 -0
  22. package/dist/esm/bin/ponder.js.map +1 -0
  23. package/dist/esm/bin/utils/codegen.js +25 -0
  24. package/dist/esm/bin/utils/codegen.js.map +1 -0
  25. package/dist/esm/bin/utils/exit.js +100 -0
  26. package/dist/esm/bin/utils/exit.js.map +1 -0
  27. package/dist/esm/build/config.js +745 -0
  28. package/dist/esm/build/config.js.map +1 -0
  29. package/dist/esm/build/factory.js +82 -0
  30. package/dist/esm/build/factory.js.map +1 -0
  31. package/dist/esm/build/index.js +567 -0
  32. package/dist/esm/build/index.js.map +1 -0
  33. package/dist/esm/build/plugin.js +53 -0
  34. package/dist/esm/build/plugin.js.map +1 -0
  35. package/dist/esm/build/pre.js +83 -0
  36. package/dist/esm/build/pre.js.map +1 -0
  37. package/dist/esm/build/schema.js +202 -0
  38. package/dist/esm/build/schema.js.map +1 -0
  39. package/dist/esm/build/stacktrace.js +137 -0
  40. package/dist/esm/build/stacktrace.js.map +1 -0
  41. package/dist/esm/client/index.js +441 -0
  42. package/dist/esm/client/index.js.map +1 -0
  43. package/dist/esm/config/address.js +2 -0
  44. package/dist/esm/config/address.js.map +1 -0
  45. package/dist/esm/config/eventFilter.js +2 -0
  46. package/dist/esm/config/eventFilter.js.map +1 -0
  47. package/dist/esm/config/index.js +2 -0
  48. package/dist/esm/config/index.js.map +1 -0
  49. package/dist/esm/config/utilityTypes.js +2 -0
  50. package/dist/esm/config/utilityTypes.js.map +1 -0
  51. package/dist/esm/database/actions.js +445 -0
  52. package/dist/esm/database/actions.js.map +1 -0
  53. package/dist/esm/database/index.js +604 -0
  54. package/dist/esm/database/index.js.map +1 -0
  55. package/dist/esm/database/queryBuilder.js +314 -0
  56. package/dist/esm/database/queryBuilder.js.map +1 -0
  57. package/dist/esm/drizzle/bigint.js +38 -0
  58. package/dist/esm/drizzle/bigint.js.map +1 -0
  59. package/dist/esm/drizzle/bytes.js +47 -0
  60. package/dist/esm/drizzle/bytes.js.map +1 -0
  61. package/dist/esm/drizzle/hex.js +40 -0
  62. package/dist/esm/drizzle/hex.js.map +1 -0
  63. package/dist/esm/drizzle/index.js +28 -0
  64. package/dist/esm/drizzle/index.js.map +1 -0
  65. package/dist/esm/drizzle/json.js +123 -0
  66. package/dist/esm/drizzle/json.js.map +1 -0
  67. package/dist/esm/drizzle/kit/index.js +927 -0
  68. package/dist/esm/drizzle/kit/index.js.map +1 -0
  69. package/dist/esm/drizzle/onchain.js +184 -0
  70. package/dist/esm/drizzle/onchain.js.map +1 -0
  71. package/dist/esm/drizzle/text.js +61 -0
  72. package/dist/esm/drizzle/text.js.map +1 -0
  73. package/dist/esm/graphql/graphiql.html.js +59 -0
  74. package/dist/esm/graphql/graphiql.html.js.map +1 -0
  75. package/dist/esm/graphql/index.js +934 -0
  76. package/dist/esm/graphql/index.js.map +1 -0
  77. package/dist/esm/graphql/json.js +42 -0
  78. package/dist/esm/graphql/json.js.map +1 -0
  79. package/dist/esm/graphql/middleware.js +83 -0
  80. package/dist/esm/graphql/middleware.js.map +1 -0
  81. package/dist/esm/index.js +9 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/indexing/addStackTrace.js +54 -0
  84. package/dist/esm/indexing/addStackTrace.js.map +1 -0
  85. package/dist/esm/indexing/client.js +675 -0
  86. package/dist/esm/indexing/client.js.map +1 -0
  87. package/dist/esm/indexing/index.js +663 -0
  88. package/dist/esm/indexing/index.js.map +1 -0
  89. package/dist/esm/indexing/profile.js +584 -0
  90. package/dist/esm/indexing/profile.js.map +1 -0
  91. package/dist/esm/indexing-store/cache.js +666 -0
  92. package/dist/esm/indexing-store/cache.js.map +1 -0
  93. package/dist/esm/indexing-store/index.js +461 -0
  94. package/dist/esm/indexing-store/index.js.map +1 -0
  95. package/dist/esm/indexing-store/profile.js +428 -0
  96. package/dist/esm/indexing-store/profile.js.map +1 -0
  97. package/dist/esm/indexing-store/utils.js +111 -0
  98. package/dist/esm/indexing-store/utils.js.map +1 -0
  99. package/dist/esm/internal/common.js +2 -0
  100. package/dist/esm/internal/common.js.map +1 -0
  101. package/dist/esm/internal/errors.js +300 -0
  102. package/dist/esm/internal/errors.js.map +1 -0
  103. package/dist/esm/internal/logger.js +178 -0
  104. package/dist/esm/internal/logger.js.map +1 -0
  105. package/dist/esm/internal/metrics.js +1049 -0
  106. package/dist/esm/internal/metrics.js.map +1 -0
  107. package/dist/esm/internal/options.js +73 -0
  108. package/dist/esm/internal/options.js.map +1 -0
  109. package/dist/esm/internal/shutdown.js +24 -0
  110. package/dist/esm/internal/shutdown.js.map +1 -0
  111. package/dist/esm/internal/telemetry.js +200 -0
  112. package/dist/esm/internal/telemetry.js.map +1 -0
  113. package/dist/esm/internal/types.js +2 -0
  114. package/dist/esm/internal/types.js.map +1 -0
  115. package/dist/esm/rpc/actions.js +988 -0
  116. package/dist/esm/rpc/actions.js.map +1 -0
  117. package/dist/esm/rpc/http.js +130 -0
  118. package/dist/esm/rpc/http.js.map +1 -0
  119. package/dist/esm/rpc/index.js +749 -0
  120. package/dist/esm/rpc/index.js.map +1 -0
  121. package/dist/esm/runtime/events.js +664 -0
  122. package/dist/esm/runtime/events.js.map +1 -0
  123. package/dist/esm/runtime/filter.js +476 -0
  124. package/dist/esm/runtime/filter.js.map +1 -0
  125. package/dist/esm/runtime/fragments.js +478 -0
  126. package/dist/esm/runtime/fragments.js.map +1 -0
  127. package/dist/esm/runtime/historical.js +954 -0
  128. package/dist/esm/runtime/historical.js.map +1 -0
  129. package/dist/esm/runtime/index.js +316 -0
  130. package/dist/esm/runtime/index.js.map +1 -0
  131. package/dist/esm/runtime/init.js +12 -0
  132. package/dist/esm/runtime/init.js.map +1 -0
  133. package/dist/esm/runtime/isolated.js +464 -0
  134. package/dist/esm/runtime/isolated.js.map +1 -0
  135. package/dist/esm/runtime/multichain.js +511 -0
  136. package/dist/esm/runtime/multichain.js.map +1 -0
  137. package/dist/esm/runtime/omnichain.js +546 -0
  138. package/dist/esm/runtime/omnichain.js.map +1 -0
  139. package/dist/esm/runtime/realtime.js +722 -0
  140. package/dist/esm/runtime/realtime.js.map +1 -0
  141. package/dist/esm/server/error.js +56 -0
  142. package/dist/esm/server/error.js.map +1 -0
  143. package/dist/esm/server/index.js +121 -0
  144. package/dist/esm/server/index.js.map +1 -0
  145. package/dist/esm/sync-historical/index.js +703 -0
  146. package/dist/esm/sync-historical/index.js.map +1 -0
  147. package/dist/esm/sync-realtime/bloom.js +76 -0
  148. package/dist/esm/sync-realtime/bloom.js.map +1 -0
  149. package/dist/esm/sync-realtime/index.js +918 -0
  150. package/dist/esm/sync-realtime/index.js.map +1 -0
  151. package/dist/esm/sync-store/encode.js +105 -0
  152. package/dist/esm/sync-store/encode.js.map +1 -0
  153. package/dist/esm/sync-store/index.js +885 -0
  154. package/dist/esm/sync-store/index.js.map +1 -0
  155. package/dist/esm/sync-store/migrations.js +1595 -0
  156. package/dist/esm/sync-store/migrations.js.map +1 -0
  157. package/dist/esm/sync-store/schema.js +181 -0
  158. package/dist/esm/sync-store/schema.js.map +1 -0
  159. package/dist/esm/types/db.js +2 -0
  160. package/dist/esm/types/db.js.map +1 -0
  161. package/dist/esm/types/eth.js +2 -0
  162. package/dist/esm/types/eth.js.map +1 -0
  163. package/dist/esm/types/utils.js +2 -0
  164. package/dist/esm/types/utils.js.map +1 -0
  165. package/dist/esm/types/virtual.js +2 -0
  166. package/dist/esm/types/virtual.js.map +1 -0
  167. package/dist/esm/ui/app.js +157 -0
  168. package/dist/esm/ui/app.js.map +1 -0
  169. package/dist/esm/ui/index.js +29 -0
  170. package/dist/esm/ui/index.js.map +1 -0
  171. package/dist/esm/ui/patch.js +140 -0
  172. package/dist/esm/ui/patch.js.map +1 -0
  173. package/dist/esm/utils/abi.js +55 -0
  174. package/dist/esm/utils/abi.js.map +1 -0
  175. package/dist/esm/utils/bigint.js +37 -0
  176. package/dist/esm/utils/bigint.js.map +1 -0
  177. package/dist/esm/utils/chains.js +21 -0
  178. package/dist/esm/utils/chains.js.map +1 -0
  179. package/dist/esm/utils/checkpoint.js +139 -0
  180. package/dist/esm/utils/checkpoint.js.map +1 -0
  181. package/dist/esm/utils/chunk.js +8 -0
  182. package/dist/esm/utils/chunk.js.map +1 -0
  183. package/dist/esm/utils/copy.js +129 -0
  184. package/dist/esm/utils/copy.js.map +1 -0
  185. package/dist/esm/utils/date.js +27 -0
  186. package/dist/esm/utils/date.js.map +1 -0
  187. package/dist/esm/utils/debug.js +2 -0
  188. package/dist/esm/utils/debug.js.map +1 -0
  189. package/dist/esm/utils/decodeAbiParameters.js +290 -0
  190. package/dist/esm/utils/decodeAbiParameters.js.map +1 -0
  191. package/dist/esm/utils/decodeEventLog.js +75 -0
  192. package/dist/esm/utils/decodeEventLog.js.map +1 -0
  193. package/dist/esm/utils/dedupe.js +29 -0
  194. package/dist/esm/utils/dedupe.js.map +1 -0
  195. package/dist/esm/utils/duplicates.js +19 -0
  196. package/dist/esm/utils/duplicates.js.map +1 -0
  197. package/dist/esm/utils/estimate.js +6 -0
  198. package/dist/esm/utils/estimate.js.map +1 -0
  199. package/dist/esm/utils/finality.js +38 -0
  200. package/dist/esm/utils/finality.js.map +1 -0
  201. package/dist/esm/utils/format.js +20 -0
  202. package/dist/esm/utils/format.js.map +1 -0
  203. package/dist/esm/utils/generators.js +121 -0
  204. package/dist/esm/utils/generators.js.map +1 -0
  205. package/dist/esm/utils/hash.js +11 -0
  206. package/dist/esm/utils/hash.js.map +1 -0
  207. package/dist/esm/utils/interval.js +171 -0
  208. package/dist/esm/utils/interval.js.map +1 -0
  209. package/dist/esm/utils/lowercase.js +7 -0
  210. package/dist/esm/utils/lowercase.js.map +1 -0
  211. package/dist/esm/utils/mutex.js +26 -0
  212. package/dist/esm/utils/mutex.js.map +1 -0
  213. package/dist/esm/utils/never.js +4 -0
  214. package/dist/esm/utils/never.js.map +1 -0
  215. package/dist/esm/utils/offset.js +101 -0
  216. package/dist/esm/utils/offset.js.map +1 -0
  217. package/dist/esm/utils/order.js +18 -0
  218. package/dist/esm/utils/order.js.map +1 -0
  219. package/dist/esm/utils/partition.js +46 -0
  220. package/dist/esm/utils/partition.js.map +1 -0
  221. package/dist/esm/utils/pg.js +175 -0
  222. package/dist/esm/utils/pg.js.map +1 -0
  223. package/dist/esm/utils/pglite.js +80 -0
  224. package/dist/esm/utils/pglite.js.map +1 -0
  225. package/dist/esm/utils/port.js +30 -0
  226. package/dist/esm/utils/port.js.map +1 -0
  227. package/dist/esm/utils/print.js +23 -0
  228. package/dist/esm/utils/print.js.map +1 -0
  229. package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
  230. package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
  231. package/dist/esm/utils/promiseWithResolvers.js +13 -0
  232. package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
  233. package/dist/esm/utils/queue.js +150 -0
  234. package/dist/esm/utils/queue.js.map +1 -0
  235. package/dist/esm/utils/range.js +8 -0
  236. package/dist/esm/utils/range.js.map +1 -0
  237. package/dist/esm/utils/result.js +10 -0
  238. package/dist/esm/utils/result.js.map +1 -0
  239. package/dist/esm/utils/sql-parse.js +1326 -0
  240. package/dist/esm/utils/sql-parse.js.map +1 -0
  241. package/dist/esm/utils/timer.js +9 -0
  242. package/dist/esm/utils/timer.js.map +1 -0
  243. package/dist/esm/utils/truncate.js +15 -0
  244. package/dist/esm/utils/truncate.js.map +1 -0
  245. package/dist/esm/utils/wait.js +10 -0
  246. package/dist/esm/utils/wait.js.map +1 -0
  247. package/dist/esm/utils/zipper.js +67 -0
  248. package/dist/esm/utils/zipper.js.map +1 -0
  249. package/dist/types/bin/commands/codegen.d.ts +5 -0
  250. package/dist/types/bin/commands/codegen.d.ts.map +1 -0
  251. package/dist/types/bin/commands/createViews.d.ts +8 -0
  252. package/dist/types/bin/commands/createViews.d.ts.map +1 -0
  253. package/dist/types/bin/commands/dev.d.ts +5 -0
  254. package/dist/types/bin/commands/dev.d.ts.map +1 -0
  255. package/dist/types/bin/commands/list.d.ts +5 -0
  256. package/dist/types/bin/commands/list.d.ts.map +1 -0
  257. package/dist/types/bin/commands/prune.d.ts +5 -0
  258. package/dist/types/bin/commands/prune.d.ts.map +1 -0
  259. package/dist/types/bin/commands/serve.d.ts +5 -0
  260. package/dist/types/bin/commands/serve.d.ts.map +1 -0
  261. package/dist/types/bin/commands/start.d.ts +19 -0
  262. package/dist/types/bin/commands/start.d.ts.map +1 -0
  263. package/dist/types/bin/isolatedController.d.ts +13 -0
  264. package/dist/types/bin/isolatedController.d.ts.map +1 -0
  265. package/dist/types/bin/isolatedWorker.d.ts +9 -0
  266. package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
  267. package/dist/types/bin/ponder.d.ts +37 -0
  268. package/dist/types/bin/ponder.d.ts.map +1 -0
  269. package/dist/types/bin/utils/codegen.d.ts +6 -0
  270. package/dist/types/bin/utils/codegen.d.ts.map +1 -0
  271. package/dist/types/bin/utils/exit.d.ts +10 -0
  272. package/dist/types/bin/utils/exit.d.ts.map +1 -0
  273. package/dist/types/build/config.d.ts +97 -0
  274. package/dist/types/build/config.d.ts.map +1 -0
  275. package/dist/types/build/factory.d.ts +15 -0
  276. package/dist/types/build/factory.d.ts.map +1 -0
  277. package/dist/types/build/index.d.ts +84 -0
  278. package/dist/types/build/index.d.ts.map +1 -0
  279. package/dist/types/build/plugin.d.ts +4 -0
  280. package/dist/types/build/plugin.d.ts.map +1 -0
  281. package/dist/types/build/pre.d.ts +29 -0
  282. package/dist/types/build/pre.d.ts.map +1 -0
  283. package/dist/types/build/schema.d.ts +20 -0
  284. package/dist/types/build/schema.d.ts.map +1 -0
  285. package/dist/types/build/stacktrace.d.ts +13 -0
  286. package/dist/types/build/stacktrace.d.ts.map +1 -0
  287. package/dist/types/client/index.d.ts +27 -0
  288. package/dist/types/client/index.d.ts.map +1 -0
  289. package/dist/types/config/address.d.ts +34 -0
  290. package/dist/types/config/address.d.ts.map +1 -0
  291. package/dist/types/config/eventFilter.d.ts +18 -0
  292. package/dist/types/config/eventFilter.d.ts.map +1 -0
  293. package/dist/types/config/index.d.ts +144 -0
  294. package/dist/types/config/index.d.ts.map +1 -0
  295. package/dist/types/config/utilityTypes.d.ts +43 -0
  296. package/dist/types/config/utilityTypes.d.ts.map +1 -0
  297. package/dist/types/database/actions.d.ts +99 -0
  298. package/dist/types/database/actions.d.ts.map +1 -0
  299. package/dist/types/database/index.d.ts +493 -0
  300. package/dist/types/database/index.d.ts.map +1 -0
  301. package/dist/types/database/queryBuilder.d.ts +65 -0
  302. package/dist/types/database/queryBuilder.d.ts.map +1 -0
  303. package/dist/types/drizzle/bigint.d.ts +25 -0
  304. package/dist/types/drizzle/bigint.d.ts.map +1 -0
  305. package/dist/types/drizzle/bytes.d.ts +31 -0
  306. package/dist/types/drizzle/bytes.d.ts.map +1 -0
  307. package/dist/types/drizzle/hex.d.ts +25 -0
  308. package/dist/types/drizzle/hex.d.ts.map +1 -0
  309. package/dist/types/drizzle/index.d.ts +6 -0
  310. package/dist/types/drizzle/index.d.ts.map +1 -0
  311. package/dist/types/drizzle/json.d.ts +51 -0
  312. package/dist/types/drizzle/json.d.ts.map +1 -0
  313. package/dist/types/drizzle/kit/index.d.ts +187 -0
  314. package/dist/types/drizzle/kit/index.d.ts.map +1 -0
  315. package/dist/types/drizzle/onchain.d.ts +298 -0
  316. package/dist/types/drizzle/onchain.d.ts.map +1 -0
  317. package/dist/types/drizzle/text.d.ts +29 -0
  318. package/dist/types/drizzle/text.d.ts.map +1 -0
  319. package/dist/types/graphql/graphiql.html.d.ts +2 -0
  320. package/dist/types/graphql/graphiql.html.d.ts.map +1 -0
  321. package/dist/types/graphql/index.d.ts +12 -0
  322. package/dist/types/graphql/index.d.ts.map +1 -0
  323. package/dist/types/graphql/json.d.ts +3 -0
  324. package/dist/types/graphql/json.d.ts.map +1 -0
  325. package/dist/types/graphql/middleware.d.ts +29 -0
  326. package/dist/types/graphql/middleware.d.ts.map +1 -0
  327. package/dist/types/index.d.ts +23 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/indexing/addStackTrace.d.ts +3 -0
  330. package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
  331. package/dist/types/indexing/client.d.ts +154 -0
  332. package/dist/types/indexing/client.d.ts.map +1 -0
  333. package/dist/types/indexing/index.d.ts +72 -0
  334. package/dist/types/indexing/index.d.ts.map +1 -0
  335. package/dist/types/indexing/profile.d.ts +16 -0
  336. package/dist/types/indexing/profile.d.ts.map +1 -0
  337. package/dist/types/indexing-store/cache.d.ts +115 -0
  338. package/dist/types/indexing-store/cache.d.ts.map +1 -0
  339. package/dist/types/indexing-store/index.d.ts +24 -0
  340. package/dist/types/indexing-store/index.d.ts.map +1 -0
  341. package/dist/types/indexing-store/profile.d.ts +7 -0
  342. package/dist/types/indexing-store/profile.d.ts.map +1 -0
  343. package/dist/types/indexing-store/utils.d.ts +19 -0
  344. package/dist/types/indexing-store/utils.d.ts.map +1 -0
  345. package/dist/types/internal/common.d.ts +15 -0
  346. package/dist/types/internal/common.d.ts.map +1 -0
  347. package/dist/types/internal/errors.d.ts +101 -0
  348. package/dist/types/internal/errors.d.ts.map +1 -0
  349. package/dist/types/internal/logger.d.ts +37 -0
  350. package/dist/types/internal/logger.d.ts.map +1 -0
  351. package/dist/types/internal/metrics.d.ts +120 -0
  352. package/dist/types/internal/metrics.d.ts.map +1 -0
  353. package/dist/types/internal/options.d.ts +62 -0
  354. package/dist/types/internal/options.d.ts.map +1 -0
  355. package/dist/types/internal/shutdown.d.ts +8 -0
  356. package/dist/types/internal/shutdown.d.ts.map +1 -0
  357. package/dist/types/internal/telemetry.d.ts +43 -0
  358. package/dist/types/internal/telemetry.d.ts.map +1 -0
  359. package/dist/types/internal/types.d.ts +443 -0
  360. package/dist/types/internal/types.d.ts.map +1 -0
  361. package/dist/types/rpc/actions.d.ts +360 -0
  362. package/dist/types/rpc/actions.d.ts.map +1 -0
  363. package/dist/types/rpc/http.d.ts +17 -0
  364. package/dist/types/rpc/http.d.ts.map +1 -0
  365. package/dist/types/rpc/index.d.ts +43 -0
  366. package/dist/types/rpc/index.d.ts.map +1 -0
  367. package/dist/types/runtime/events.d.ts +40 -0
  368. package/dist/types/runtime/events.d.ts.map +1 -0
  369. package/dist/types/runtime/filter.d.ts +96 -0
  370. package/dist/types/runtime/filter.d.ts.map +1 -0
  371. package/dist/types/runtime/fragments.d.ts +30 -0
  372. package/dist/types/runtime/fragments.d.ts.map +1 -0
  373. package/dist/types/runtime/historical.d.ts +123 -0
  374. package/dist/types/runtime/historical.d.ts.map +1 -0
  375. package/dist/types/runtime/index.d.ts +89 -0
  376. package/dist/types/runtime/index.d.ts.map +1 -0
  377. package/dist/types/runtime/init.d.ts +28 -0
  378. package/dist/types/runtime/init.d.ts.map +1 -0
  379. package/dist/types/runtime/isolated.d.ts +14 -0
  380. package/dist/types/runtime/isolated.d.ts.map +1 -0
  381. package/dist/types/runtime/multichain.d.ts +13 -0
  382. package/dist/types/runtime/multichain.d.ts.map +1 -0
  383. package/dist/types/runtime/omnichain.d.ts +23 -0
  384. package/dist/types/runtime/omnichain.d.ts.map +1 -0
  385. package/dist/types/runtime/realtime.d.ts +93 -0
  386. package/dist/types/runtime/realtime.d.ts.map +1 -0
  387. package/dist/types/server/error.d.ts +5 -0
  388. package/dist/types/server/error.d.ts.map +1 -0
  389. package/dist/types/server/index.d.ts +13 -0
  390. package/dist/types/server/index.d.ts.map +1 -0
  391. package/dist/types/sync-historical/index.d.ts +36 -0
  392. package/dist/types/sync-historical/index.d.ts.map +1 -0
  393. package/dist/types/sync-realtime/bloom.d.ts +18 -0
  394. package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
  395. package/dist/types/sync-realtime/index.d.ts +48 -0
  396. package/dist/types/sync-realtime/index.d.ts.map +1 -0
  397. package/dist/types/sync-store/encode.d.ts +25 -0
  398. package/dist/types/sync-store/encode.d.ts.map +1 -0
  399. package/dist/types/sync-store/index.d.ts +135 -0
  400. package/dist/types/sync-store/index.d.ts.map +1 -0
  401. package/dist/types/sync-store/migrations.d.ts +8 -0
  402. package/dist/types/sync-store/migrations.d.ts.map +1 -0
  403. package/dist/types/sync-store/schema.d.ts +1828 -0
  404. package/dist/types/sync-store/schema.d.ts.map +1 -0
  405. package/dist/types/types/db.d.ts +213 -0
  406. package/dist/types/types/db.d.ts.map +1 -0
  407. package/dist/types/types/eth.d.ts +196 -0
  408. package/dist/types/types/eth.d.ts.map +1 -0
  409. package/dist/types/types/utils.d.ts +38 -0
  410. package/dist/types/types/utils.d.ts.map +1 -0
  411. package/dist/types/types/virtual.d.ts +99 -0
  412. package/dist/types/types/virtual.d.ts.map +1 -0
  413. package/dist/types/ui/app.d.ts +22 -0
  414. package/dist/types/ui/app.d.ts.map +1 -0
  415. package/dist/types/ui/index.d.ts +5 -0
  416. package/dist/types/ui/index.d.ts.map +1 -0
  417. package/dist/types/ui/patch.d.ts +7 -0
  418. package/dist/types/ui/patch.d.ts.map +1 -0
  419. package/dist/types/utils/abi.d.ts +23 -0
  420. package/dist/types/utils/abi.d.ts.map +1 -0
  421. package/dist/types/utils/bigint.d.ts +15 -0
  422. package/dist/types/utils/bigint.d.ts.map +1 -0
  423. package/dist/types/utils/chains.d.ts +42 -0
  424. package/dist/types/utils/chains.d.ts.map +1 -0
  425. package/dist/types/utils/checkpoint.d.ts +52 -0
  426. package/dist/types/utils/checkpoint.d.ts.map +1 -0
  427. package/dist/types/utils/chunk.d.ts +2 -0
  428. package/dist/types/utils/chunk.d.ts.map +1 -0
  429. package/dist/types/utils/copy.d.ts +16 -0
  430. package/dist/types/utils/copy.d.ts.map +1 -0
  431. package/dist/types/utils/date.d.ts +7 -0
  432. package/dist/types/utils/date.d.ts.map +1 -0
  433. package/dist/types/utils/debug.d.ts +105 -0
  434. package/dist/types/utils/debug.d.ts.map +1 -0
  435. package/dist/types/utils/decodeAbiParameters.d.ts +28 -0
  436. package/dist/types/utils/decodeAbiParameters.d.ts.map +1 -0
  437. package/dist/types/utils/decodeEventLog.d.ts +12 -0
  438. package/dist/types/utils/decodeEventLog.d.ts.map +1 -0
  439. package/dist/types/utils/dedupe.d.ts +20 -0
  440. package/dist/types/utils/dedupe.d.ts.map +1 -0
  441. package/dist/types/utils/duplicates.d.ts +7 -0
  442. package/dist/types/utils/duplicates.d.ts.map +1 -0
  443. package/dist/types/utils/estimate.d.ts +11 -0
  444. package/dist/types/utils/estimate.d.ts.map +1 -0
  445. package/dist/types/utils/finality.d.ts +12 -0
  446. package/dist/types/utils/finality.d.ts.map +1 -0
  447. package/dist/types/utils/format.d.ts +3 -0
  448. package/dist/types/utils/format.d.ts.map +1 -0
  449. package/dist/types/utils/generators.d.ts +42 -0
  450. package/dist/types/utils/generators.d.ts.map +1 -0
  451. package/dist/types/utils/hash.d.ts +11 -0
  452. package/dist/types/utils/hash.d.ts.map +1 -0
  453. package/dist/types/utils/interval.d.ts +53 -0
  454. package/dist/types/utils/interval.d.ts.map +1 -0
  455. package/dist/types/utils/lowercase.d.ts +5 -0
  456. package/dist/types/utils/lowercase.d.ts.map +1 -0
  457. package/dist/types/utils/mutex.d.ts +5 -0
  458. package/dist/types/utils/mutex.d.ts.map +1 -0
  459. package/dist/types/utils/never.d.ts +2 -0
  460. package/dist/types/utils/never.d.ts.map +1 -0
  461. package/dist/types/utils/offset.d.ts +8 -0
  462. package/dist/types/utils/offset.d.ts.map +1 -0
  463. package/dist/types/utils/order.d.ts +2 -0
  464. package/dist/types/utils/order.d.ts.map +1 -0
  465. package/dist/types/utils/partition.d.ts +22 -0
  466. package/dist/types/utils/partition.d.ts.map +1 -0
  467. package/dist/types/utils/pg.d.ts +8 -0
  468. package/dist/types/utils/pg.d.ts.map +1 -0
  469. package/dist/types/utils/pglite.d.ts +25 -0
  470. package/dist/types/utils/pglite.d.ts.map +1 -0
  471. package/dist/types/utils/port.d.ts +5 -0
  472. package/dist/types/utils/port.d.ts.map +1 -0
  473. package/dist/types/utils/print.d.ts +2 -0
  474. package/dist/types/utils/print.d.ts.map +1 -0
  475. package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
  476. package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
  477. package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
  478. package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
  479. package/dist/types/utils/queue.d.ts +33 -0
  480. package/dist/types/utils/queue.d.ts.map +1 -0
  481. package/dist/types/utils/range.d.ts +8 -0
  482. package/dist/types/utils/range.d.ts.map +1 -0
  483. package/dist/types/utils/result.d.ts +17 -0
  484. package/dist/types/utils/result.d.ts.map +1 -0
  485. package/dist/types/utils/sql-parse.d.ts +21 -0
  486. package/dist/types/utils/sql-parse.d.ts.map +1 -0
  487. package/dist/types/utils/timer.d.ts +6 -0
  488. package/dist/types/utils/timer.d.ts.map +1 -0
  489. package/dist/types/utils/truncate.d.ts +9 -0
  490. package/dist/types/utils/truncate.d.ts.map +1 -0
  491. package/dist/types/utils/wait.d.ts +6 -0
  492. package/dist/types/utils/wait.d.ts.map +1 -0
  493. package/dist/types/utils/zipper.d.ts +36 -0
  494. package/dist/types/utils/zipper.d.ts.map +1 -0
  495. package/package.json +114 -0
  496. package/src/bin/commands/codegen.ts +56 -0
  497. package/src/bin/commands/createViews.ts +318 -0
  498. package/src/bin/commands/dev.ts +490 -0
  499. package/src/bin/commands/list.ts +208 -0
  500. package/src/bin/commands/prune.ts +322 -0
  501. package/src/bin/commands/serve.ts +236 -0
  502. package/src/bin/commands/start.ts +319 -0
  503. package/src/bin/isolatedController.ts +300 -0
  504. package/src/bin/isolatedWorker.ts +192 -0
  505. package/src/bin/ponder.ts +208 -0
  506. package/src/bin/utils/codegen.ts +32 -0
  507. package/src/bin/utils/exit.ts +112 -0
  508. package/src/build/config.ts +1141 -0
  509. package/src/build/factory.ts +147 -0
  510. package/src/build/index.ts +790 -0
  511. package/src/build/plugin.ts +58 -0
  512. package/src/build/pre.ts +114 -0
  513. package/src/build/schema.ts +358 -0
  514. package/src/build/stacktrace.ts +137 -0
  515. package/src/client/index.ts +551 -0
  516. package/src/config/address.ts +45 -0
  517. package/src/config/eventFilter.ts +33 -0
  518. package/src/config/index.ts +240 -0
  519. package/src/config/utilityTypes.ts +152 -0
  520. package/src/database/actions.ts +873 -0
  521. package/src/database/index.ts +1029 -0
  522. package/src/database/queryBuilder.ts +537 -0
  523. package/src/drizzle/bigint.ts +57 -0
  524. package/src/drizzle/bytes.ts +68 -0
  525. package/src/drizzle/hex.ts +58 -0
  526. package/src/drizzle/index.ts +40 -0
  527. package/src/drizzle/json.ts +159 -0
  528. package/src/drizzle/kit/index.ts +1348 -0
  529. package/src/drizzle/onchain.ts +476 -0
  530. package/src/drizzle/text.ts +77 -0
  531. package/src/graphql/graphiql.html.ts +59 -0
  532. package/src/graphql/index.ts +1351 -0
  533. package/src/graphql/json.ts +62 -0
  534. package/src/graphql/middleware.ts +115 -0
  535. package/src/index.ts +139 -0
  536. package/src/indexing/addStackTrace.ts +69 -0
  537. package/src/indexing/client.ts +1184 -0
  538. package/src/indexing/index.ts +976 -0
  539. package/src/indexing/profile.ts +771 -0
  540. package/src/indexing-store/cache.ts +1057 -0
  541. package/src/indexing-store/index.ts +628 -0
  542. package/src/indexing-store/profile.ts +557 -0
  543. package/src/indexing-store/utils.ts +162 -0
  544. package/src/internal/common.ts +15 -0
  545. package/src/internal/errors.ts +228 -0
  546. package/src/internal/logger.ts +252 -0
  547. package/src/internal/metrics.ts +1030 -0
  548. package/src/internal/options.ts +130 -0
  549. package/src/internal/shutdown.ts +32 -0
  550. package/src/internal/telemetry.ts +303 -0
  551. package/src/internal/types.ts +611 -0
  552. package/src/rpc/actions.ts +1344 -0
  553. package/src/rpc/http.ts +164 -0
  554. package/src/rpc/index.ts +959 -0
  555. package/src/runtime/events.ts +875 -0
  556. package/src/runtime/filter.ts +705 -0
  557. package/src/runtime/fragments.ts +674 -0
  558. package/src/runtime/historical.ts +1522 -0
  559. package/src/runtime/index.ts +569 -0
  560. package/src/runtime/init.ts +49 -0
  561. package/src/runtime/isolated.ts +775 -0
  562. package/src/runtime/multichain.ts +860 -0
  563. package/src/runtime/omnichain.ts +920 -0
  564. package/src/runtime/realtime.ts +1164 -0
  565. package/src/server/error.ts +68 -0
  566. package/src/server/index.ts +173 -0
  567. package/src/sync-historical/index.ts +1065 -0
  568. package/src/sync-realtime/bloom.ts +102 -0
  569. package/src/sync-realtime/index.ts +1304 -0
  570. package/src/sync-store/encode.ts +153 -0
  571. package/src/sync-store/index.ts +1633 -0
  572. package/src/sync-store/migrations.ts +1801 -0
  573. package/src/sync-store/schema.ts +248 -0
  574. package/src/types/db.ts +292 -0
  575. package/src/types/eth.ts +216 -0
  576. package/src/types/utils.ts +47 -0
  577. package/src/types/virtual.ts +244 -0
  578. package/src/types.d.ts +38 -0
  579. package/src/ui/app.ts +207 -0
  580. package/src/ui/index.ts +37 -0
  581. package/src/ui/patch.ts +204 -0
  582. package/src/utils/abi.ts +103 -0
  583. package/src/utils/bigint.ts +41 -0
  584. package/src/utils/chains.ts +22 -0
  585. package/src/utils/checkpoint.ts +203 -0
  586. package/src/utils/chunk.ts +7 -0
  587. package/src/utils/copy.ts +151 -0
  588. package/src/utils/date.ts +26 -0
  589. package/src/utils/debug.ts +110 -0
  590. package/src/utils/decodeAbiParameters.ts +428 -0
  591. package/src/utils/decodeEventLog.ts +100 -0
  592. package/src/utils/dedupe.ts +32 -0
  593. package/src/utils/duplicates.ts +19 -0
  594. package/src/utils/estimate.ts +27 -0
  595. package/src/utils/finality.ts +40 -0
  596. package/src/utils/format.ts +22 -0
  597. package/src/utils/generators.ts +157 -0
  598. package/src/utils/hash.ts +22 -0
  599. package/src/utils/interval.ts +212 -0
  600. package/src/utils/lowercase.ts +6 -0
  601. package/src/utils/mutex.ts +33 -0
  602. package/src/utils/never.ts +3 -0
  603. package/src/utils/offset.ts +133 -0
  604. package/src/utils/order.ts +16 -0
  605. package/src/utils/partition.ts +53 -0
  606. package/src/utils/pg.ts +230 -0
  607. package/src/utils/pglite.ts +97 -0
  608. package/src/utils/port.ts +34 -0
  609. package/src/utils/print.ts +31 -0
  610. package/src/utils/promiseAllSettledWithThrow.ts +27 -0
  611. package/src/utils/promiseWithResolvers.ts +20 -0
  612. package/src/utils/queue.ts +258 -0
  613. package/src/utils/range.ts +8 -0
  614. package/src/utils/result.ts +26 -0
  615. package/src/utils/sql-parse.ts +1477 -0
  616. package/src/utils/timer.ts +8 -0
  617. package/src/utils/truncate.ts +15 -0
  618. package/src/utils/wait.ts +8 -0
  619. package/src/utils/zipper.ts +80 -0
@@ -0,0 +1,546 @@
1
+ import { commitBlock, createIndexes, createLiveQueryTriggers, createTriggers, createViews, dropLiveQueryTriggers, dropTriggers, finalizeOmnichain, revertOmnichain, } from '../database/actions.js';
2
+ import { getPonderCheckpointTable, getPonderMetaTable, } from '../database/index.js';
3
+ import { getLiveQueryTempTableName } from '../drizzle/onchain.js';
4
+ import { createIndexingCache } from '../indexing-store/cache.js';
5
+ import { createIndexingStore } from '../indexing-store/index.js';
6
+ import { createCachedViemClient } from '../indexing/client.js';
7
+ import { createColumnAccessPattern, createIndexing, getEventCount, } from '../indexing/index.js';
8
+ import { InvalidEventAccessError, NonRetryableUserError, } from '../internal/errors.js';
9
+ import { getAppProgress } from '../internal/metrics.js';
10
+ import { splitEvents } from './events.js';
11
+ import { createSyncStore } from '../sync-store/index.js';
12
+ import { ZERO_CHECKPOINT_STRING, decodeCheckpoint, max, min, } from '../utils/checkpoint.js';
13
+ import { formatEta, formatPercentage } from '../utils/format.js';
14
+ import { bufferAsyncGenerator, recordAsyncGenerator, } from '../utils/generators.js';
15
+ import { never } from '../utils/never.js';
16
+ import { startClock } from '../utils/timer.js';
17
+ import { zipperMany } from '../utils/zipper.js';
18
+ import { eq, getTableName, isTable, isView, sql } from "drizzle-orm";
19
+ import { getHistoricalEventsOmnichain, refetchHistoricalEvents, } from "./historical.js";
20
+ import { getCachedIntervals, getChildAddresses, } from "./index.js";
21
+ import { initSyncProgress } from "./init.js";
22
+ import { getRealtimeEventsOmnichain } from "./realtime.js";
23
+ export async function runOmnichain({ common, preBuild, namespaceBuild, schemaBuild, indexingBuild, crashRecoveryCheckpoint, database, }) {
24
+ const columnAccessPattern = createColumnAccessPattern({
25
+ indexingBuild,
26
+ });
27
+ const syncStore = createSyncStore({ common, qb: database.syncQB });
28
+ const PONDER_CHECKPOINT = getPonderCheckpointTable(namespaceBuild.schema);
29
+ const PONDER_META = getPonderMetaTable(namespaceBuild.schema);
30
+ const eventCount = getEventCount(indexingBuild.indexingFunctions);
31
+ const cachedViemClient = createCachedViemClient({
32
+ common,
33
+ indexingBuild,
34
+ syncStore,
35
+ eventCount,
36
+ });
37
+ const indexingErrorHandler = {
38
+ getRetryableError: () => {
39
+ return indexingErrorHandler.error;
40
+ },
41
+ setRetryableError: (error) => {
42
+ indexingErrorHandler.error = error;
43
+ },
44
+ clearRetryableError: () => {
45
+ indexingErrorHandler.error = undefined;
46
+ },
47
+ error: undefined,
48
+ };
49
+ const indexingCache = createIndexingCache({
50
+ common,
51
+ schemaBuild,
52
+ crashRecoveryCheckpoint,
53
+ eventCount,
54
+ });
55
+ const indexingStore = createIndexingStore({
56
+ common,
57
+ schemaBuild,
58
+ indexingCache,
59
+ indexingErrorHandler,
60
+ });
61
+ const indexing = createIndexing({
62
+ common,
63
+ indexingBuild,
64
+ indexingStore,
65
+ indexingCache,
66
+ client: cachedViemClient,
67
+ indexingErrorHandler,
68
+ columnAccessPattern,
69
+ eventCount,
70
+ });
71
+ const perChainSync = new Map();
72
+ const seconds = {};
73
+ await Promise.all(indexingBuild.chains.map(async (chain) => {
74
+ const eventCallbacks = indexingBuild.eventCallbacks[indexingBuild.chains.indexOf(chain)];
75
+ const cachedIntervals = await getCachedIntervals({
76
+ chain,
77
+ filters: eventCallbacks.map(({ filter }) => filter),
78
+ syncStore,
79
+ });
80
+ const syncProgress = await initSyncProgress({
81
+ common,
82
+ filters: eventCallbacks.map(({ filter }) => filter),
83
+ chain,
84
+ rpc: indexingBuild.rpcs[indexingBuild.chains.indexOf(chain)],
85
+ finalizedBlock: indexingBuild.finalizedBlocks[indexingBuild.chains.indexOf(chain)],
86
+ cachedIntervals,
87
+ });
88
+ const childAddresses = await getChildAddresses({
89
+ filters: eventCallbacks.map(({ filter }) => filter),
90
+ syncStore,
91
+ });
92
+ const unfinalizedBlocks = [];
93
+ perChainSync.set(chain, {
94
+ syncProgress,
95
+ childAddresses,
96
+ cachedIntervals,
97
+ unfinalizedBlocks,
98
+ });
99
+ }));
100
+ const start = Number(decodeCheckpoint(getOmnichainCheckpoint({ perChainSync, tag: "start" }))
101
+ .blockTimestamp);
102
+ const end = Number(decodeCheckpoint(min(getOmnichainCheckpoint({ perChainSync, tag: "end" }), getOmnichainCheckpoint({ perChainSync, tag: "finalized" }))).blockTimestamp);
103
+ for (const chain of indexingBuild.chains) {
104
+ const _crashRecoveryCheckpoint = crashRecoveryCheckpoint?.find(({ chainId }) => chainId === chain.id)?.checkpoint;
105
+ const cached = Math.min(Number(decodeCheckpoint(_crashRecoveryCheckpoint ?? ZERO_CHECKPOINT_STRING)
106
+ .blockTimestamp), end);
107
+ seconds[chain.name] = { start, end, cached };
108
+ const label = { chain: chain.name };
109
+ common.metrics.ponder_historical_total_indexing_seconds.set(label, Math.max(seconds[chain.name].end - seconds[chain.name].start, 0));
110
+ common.metrics.ponder_historical_cached_indexing_seconds.set(label, Math.max(seconds[chain.name].cached - seconds[chain.name].start, 0));
111
+ common.metrics.ponder_historical_completed_indexing_seconds.set(label, 0);
112
+ common.metrics.ponder_indexing_timestamp.set(label, Math.max(seconds[chain.name].cached, seconds[chain.name].start));
113
+ }
114
+ const startTimestamp = Math.round(Date.now() / 1000);
115
+ for (const chain of indexingBuild.chains) {
116
+ common.metrics.ponder_historical_start_timestamp_seconds.set({ chain: chain.name }, startTimestamp);
117
+ }
118
+ // Reset the start timestamp so the eta estimate doesn't include
119
+ // the startup time.
120
+ common.metrics.start_timestamp = Date.now();
121
+ // If the initial checkpoint is zero, we need to run setup events.
122
+ if (crashRecoveryCheckpoint === undefined) {
123
+ await database.userQB.transaction(async (tx) => {
124
+ indexingStore.qb = tx;
125
+ indexingStore.isProcessingEvents = true;
126
+ indexingCache.qb = tx;
127
+ await indexing.processSetupEvents();
128
+ indexingStore.isProcessingEvents = false;
129
+ await indexingCache.flush();
130
+ await tx.wrap({ label: "update_checkpoints" }, (tx) => tx
131
+ .insert(PONDER_CHECKPOINT)
132
+ .values(indexingBuild.chains.map((chain) => {
133
+ const initialCheckpoint = min(perChainSync
134
+ .get(chain)
135
+ .syncProgress.getCheckpoint({ tag: "start" }), perChainSync
136
+ .get(chain)
137
+ .syncProgress.getCheckpoint({ tag: "finalized" }));
138
+ return {
139
+ chainName: chain.name,
140
+ chainId: chain.id,
141
+ latestCheckpoint: initialCheckpoint,
142
+ safeCheckpoint: initialCheckpoint,
143
+ finalizedCheckpoint: initialCheckpoint,
144
+ };
145
+ }))
146
+ .onConflictDoUpdate({
147
+ target: PONDER_CHECKPOINT.chainName,
148
+ set: {
149
+ finalizedCheckpoint: sql `excluded.finalized_checkpoint`,
150
+ safeCheckpoint: sql `excluded.safe_checkpoint`,
151
+ latestCheckpoint: sql `excluded.latest_checkpoint`,
152
+ },
153
+ }));
154
+ });
155
+ }
156
+ const etaInterval = setInterval(async () => {
157
+ // underlying metrics collection is actually synchronous
158
+ // https://github.com/siimon/prom-client/blob/master/lib/histogram.js#L102-L125
159
+ const { eta, progress } = await getAppProgress(common.metrics);
160
+ if (eta === undefined && progress === undefined) {
161
+ return;
162
+ }
163
+ common.logger.info({
164
+ msg: "Updated backfill indexing progress",
165
+ progress: progress === undefined ? undefined : formatPercentage(progress),
166
+ estimate: eta === undefined ? undefined : formatEta(eta * 1000),
167
+ });
168
+ }, 5000);
169
+ common.shutdown.add(() => {
170
+ clearInterval(etaInterval);
171
+ });
172
+ const backfillEndClock = startClock();
173
+ let pendingEvents = [];
174
+ // Run historical indexing until complete.
175
+ for await (const result of recordAsyncGenerator(getHistoricalEventsOmnichain({
176
+ common,
177
+ indexingBuild,
178
+ crashRecoveryCheckpoint,
179
+ perChainSync,
180
+ database,
181
+ }), (params) => {
182
+ common.metrics.ponder_historical_concurrency_group_duration.inc({ group: "extract" }, params.await);
183
+ common.metrics.ponder_historical_concurrency_group_duration.inc({ group: "transform" }, params.yield);
184
+ })) {
185
+ if (result.type === "pending") {
186
+ pendingEvents = result.result;
187
+ continue;
188
+ }
189
+ const context = {
190
+ logger: common.logger.child({ action: "index_block_range" }),
191
+ };
192
+ const indexStartClock = startClock();
193
+ let events = zipperMany(result.result.map(({ events }) => events), (a, b) => (a.checkpoint < b.checkpoint ? -1 : 1));
194
+ indexingCache.qb = database.userQB;
195
+ await Promise.all([
196
+ indexingCache.prefetch({ events }),
197
+ cachedViemClient.prefetch({ events }),
198
+ ]);
199
+ common.metrics.ponder_historical_transform_duration.inc({ step: "prefetch" }, indexStartClock());
200
+ let endClock = startClock();
201
+ await database.userQB.transaction(async (tx) => {
202
+ const initialCompletedEvents = structuredClone(await common.metrics.ponder_indexing_completed_events.get());
203
+ try {
204
+ indexingStore.qb = tx;
205
+ indexingStore.isProcessingEvents = true;
206
+ indexingCache.qb = tx;
207
+ common.metrics.ponder_historical_transform_duration.inc({ step: "begin" }, endClock());
208
+ endClock = startClock();
209
+ await indexing.processHistoricalEvents({
210
+ events,
211
+ updateIndexingSeconds(event) {
212
+ const checkpoint = decodeCheckpoint(event.checkpoint);
213
+ for (const chain of indexingBuild.chains) {
214
+ common.metrics.ponder_historical_completed_indexing_seconds.set({ chain: chain.name }, Math.min(Math.max(Number(checkpoint.blockTimestamp) -
215
+ Math.max(seconds[chain.name].cached, seconds[chain.name].start), 0), Math.max(seconds[chain.name].end - seconds[chain.name].start, 0)));
216
+ common.metrics.ponder_indexing_timestamp.set({ chain: chain.name }, Math.max(Number(checkpoint.blockTimestamp), seconds[chain.name].end));
217
+ }
218
+ },
219
+ });
220
+ indexingStore.isProcessingEvents = false;
221
+ common.metrics.ponder_historical_transform_duration.inc({ step: "index" }, endClock());
222
+ endClock = startClock();
223
+ // Note: at this point, the next events can be preloaded, as long as the are not indexed until
224
+ // the "flush" + "finalize" is complete.
225
+ await indexingCache.flush();
226
+ common.metrics.ponder_historical_transform_duration.inc({ step: "load" }, endClock());
227
+ endClock = startClock();
228
+ // Note: It is an invariant that result.result.length > 0
229
+ await tx.wrap({ label: "update_checkpoints" }, (tx) => tx
230
+ .insert(PONDER_CHECKPOINT)
231
+ .values(result.result.map(({ chainId, checkpoint }) => ({
232
+ chainName: indexingBuild.chains.find((chain) => chain.id === chainId).name,
233
+ chainId,
234
+ latestCheckpoint: checkpoint,
235
+ safeCheckpoint: checkpoint,
236
+ finalizedCheckpoint: checkpoint,
237
+ })))
238
+ .onConflictDoUpdate({
239
+ target: PONDER_CHECKPOINT.chainName,
240
+ set: {
241
+ safeCheckpoint: sql `excluded.safe_checkpoint`,
242
+ latestCheckpoint: sql `excluded.latest_checkpoint`,
243
+ finalizedCheckpoint: sql `excluded.finalized_checkpoint`,
244
+ },
245
+ }));
246
+ common.metrics.ponder_historical_transform_duration.inc({ step: "finalize" }, endClock());
247
+ endClock = startClock();
248
+ }
249
+ catch (error) {
250
+ for (const value of initialCompletedEvents.values) {
251
+ common.metrics.ponder_indexing_completed_events.set(value.labels, value.value);
252
+ }
253
+ indexingCache.invalidate();
254
+ indexingCache.clear();
255
+ if (error instanceof InvalidEventAccessError) {
256
+ common.logger.debug({
257
+ msg: "Failed to index block range",
258
+ duration: indexStartClock(),
259
+ error,
260
+ });
261
+ events = await refetchHistoricalEvents({
262
+ common,
263
+ indexingBuild,
264
+ perChainSync,
265
+ syncStore,
266
+ events,
267
+ });
268
+ }
269
+ else if (error instanceof NonRetryableUserError === false) {
270
+ common.logger.warn({
271
+ msg: "Failed to index block range",
272
+ duration: indexStartClock(),
273
+ error: error,
274
+ });
275
+ }
276
+ throw error;
277
+ }
278
+ }, undefined, context);
279
+ cachedViemClient.clear();
280
+ common.metrics.ponder_historical_transform_duration.inc({ step: "commit" }, endClock());
281
+ await new Promise(setImmediate);
282
+ for (const { chainId, events, blockRange } of result.result) {
283
+ common.logger.info({
284
+ msg: "Indexed block range",
285
+ chain: indexingBuild.chains.find((chain) => chain.id === chainId).name,
286
+ chain_id: chainId,
287
+ event_count: events.length,
288
+ block_range: JSON.stringify(blockRange),
289
+ duration: indexStartClock(),
290
+ });
291
+ }
292
+ }
293
+ indexingCache.clear();
294
+ // Note: Invalidating the cache means that only predicted rows will be in memory after this point.
295
+ indexingCache.invalidate();
296
+ // Manually update metrics to fix a UI bug that occurs when the end
297
+ // checkpoint is between the last processed event and the finalized
298
+ // checkpoint.
299
+ for (const chain of indexingBuild.chains) {
300
+ const label = { chain: chain.name };
301
+ common.metrics.ponder_historical_completed_indexing_seconds.set(label, Math.max(seconds[chain.name].end -
302
+ Math.max(seconds[chain.name].cached, seconds[chain.name].start), 0));
303
+ common.metrics.ponder_indexing_timestamp.set(label, seconds[chain.name].end);
304
+ }
305
+ const endTimestamp = Math.round(Date.now() / 1000);
306
+ for (const chain of indexingBuild.chains) {
307
+ common.metrics.ponder_historical_end_timestamp_seconds.set({ chain: chain.name }, endTimestamp);
308
+ }
309
+ common.logger.info({
310
+ msg: "Completed backfill indexing across all chains",
311
+ duration: backfillEndClock(),
312
+ });
313
+ clearInterval(etaInterval);
314
+ const tables = Object.values(schemaBuild.schema).filter(isTable);
315
+ const views = Object.values(schemaBuild.schema).filter(isView);
316
+ let endClock = startClock();
317
+ await createIndexes(database.adminQB, { statements: schemaBuild.statements });
318
+ if (schemaBuild.statements.indexes.sql.length > 0) {
319
+ common.logger.info({
320
+ msg: "Created database indexes",
321
+ count: schemaBuild.statements.indexes.sql.length,
322
+ duration: endClock(),
323
+ });
324
+ }
325
+ endClock = startClock();
326
+ await createTriggers(database.adminQB, { tables });
327
+ await createLiveQueryTriggers(database.adminQB, { namespaceBuild, tables });
328
+ common.logger.debug({
329
+ msg: "Created database triggers",
330
+ count: tables.length,
331
+ duration: endClock(),
332
+ });
333
+ if (namespaceBuild.viewsSchema !== undefined) {
334
+ const endClock = startClock();
335
+ await createViews(database.adminQB, { tables, views, namespaceBuild });
336
+ common.logger.info({
337
+ msg: "Created database views",
338
+ schema: namespaceBuild.viewsSchema,
339
+ count: tables.length,
340
+ duration: endClock(),
341
+ });
342
+ }
343
+ endClock = startClock();
344
+ await database.adminQB.wrap({ label: "update_ready" }, (db) => db
345
+ .update(PONDER_META)
346
+ .set({ value: sql `jsonb_set(value, '{is_ready}', to_jsonb(1))` }));
347
+ common.logger.info({
348
+ msg: "Started returning 200 responses",
349
+ endpoint: "/ready",
350
+ });
351
+ const bufferCallback = (bufferSize) => {
352
+ // Note: Only log when the buffer size is greater than 1 because
353
+ // a buffer size of 1 is not backpressure.
354
+ if (bufferSize === 1)
355
+ return;
356
+ common.logger.trace({
357
+ msg: "Detected live indexing backpressure",
358
+ buffer_size: bufferSize,
359
+ indexing_step: "index block",
360
+ });
361
+ };
362
+ for await (const event of bufferAsyncGenerator(getRealtimeEventsOmnichain({
363
+ common,
364
+ indexingBuild,
365
+ perChainSync,
366
+ database,
367
+ pendingEvents,
368
+ }), 100, bufferCallback)) {
369
+ switch (event.type) {
370
+ case "block": {
371
+ const context = {
372
+ logger: common.logger.child({ action: "index_block" }),
373
+ };
374
+ const endClock = startClock();
375
+ indexingCache.qb = database.userQB;
376
+ await Promise.all([
377
+ indexingCache.prefetch({ events: event.events }),
378
+ cachedViemClient.prefetch({ events: event.events }),
379
+ ]);
380
+ await database.userQB.transaction(async (tx) => {
381
+ if (database.userQB.$dialect === "postgres") {
382
+ await tx.wrap((tx) => tx.execute(`CREATE TEMP TABLE ${getLiveQueryTempTableName()} (table_name TEXT PRIMARY KEY) ON COMMIT DROP`), context);
383
+ }
384
+ else {
385
+ await tx.wrap((tx) => tx.execute(`CREATE TEMP TABLE IF NOT EXISTS ${getLiveQueryTempTableName()} (table_name TEXT PRIMARY KEY)`), context);
386
+ }
387
+ // Events must be run block-by-block, so that `database.commitBlock` can accurately
388
+ // update the temporary `checkpoint` value set in the trigger.
389
+ for (const { checkpoint, events } of splitEvents(event.events)) {
390
+ const chain = indexingBuild.chains.find((chain) => chain.id === Number(decodeCheckpoint(checkpoint).chainId));
391
+ try {
392
+ indexingStore.qb = tx;
393
+ indexingStore.isProcessingEvents = true;
394
+ indexingCache.qb = tx;
395
+ common.logger.trace({
396
+ msg: "Processing block events",
397
+ chain: chain.name,
398
+ chain_id: chain.id,
399
+ number: Number(decodeCheckpoint(checkpoint).blockNumber),
400
+ event_count: events.length,
401
+ });
402
+ await indexing.processRealtimeEvents({ events });
403
+ common.logger.trace({
404
+ msg: "Processed block events",
405
+ chain: chain.name,
406
+ chain_id: chain.id,
407
+ number: Number(decodeCheckpoint(checkpoint).blockNumber),
408
+ event_count: events.length,
409
+ });
410
+ indexingStore.isProcessingEvents = false;
411
+ await indexingCache.flush();
412
+ await Promise.all(tables.map((table) => commitBlock(tx, { table, checkpoint, preBuild }, context), context));
413
+ cachedViemClient.clear();
414
+ common.logger.trace({
415
+ msg: "Committed reorg data for block",
416
+ chain: chain.name,
417
+ chain_id: chain.id,
418
+ number: Number(decodeCheckpoint(checkpoint).blockNumber),
419
+ event_count: events.length,
420
+ checkpoint,
421
+ });
422
+ }
423
+ catch (error) {
424
+ indexingCache.clear();
425
+ if (error instanceof NonRetryableUserError === false) {
426
+ common.logger.warn({
427
+ msg: "Failed to index block",
428
+ chain: chain.name,
429
+ chain_id: chain.id,
430
+ number: Number(decodeCheckpoint(checkpoint).blockNumber),
431
+ error: error,
432
+ });
433
+ }
434
+ throw error;
435
+ }
436
+ for (const chain of indexingBuild.chains) {
437
+ common.metrics.ponder_indexing_timestamp.set({ chain: chain.name }, Number(decodeCheckpoint(checkpoint).blockTimestamp));
438
+ }
439
+ }
440
+ await tx.wrap({ label: "update_checkpoints" }, (db) => db
441
+ .update(PONDER_CHECKPOINT)
442
+ .set({ latestCheckpoint: event.checkpoint })
443
+ .where(eq(PONDER_CHECKPOINT.chainName, event.chain.name)), context);
444
+ if (database.userQB.$dialect === "pglite") {
445
+ await tx.wrap((tx) => tx.execute(`TRUNCATE TABLE ${getLiveQueryTempTableName()}`), context);
446
+ }
447
+ }, undefined, context);
448
+ event.blockCallback?.(true);
449
+ common.logger.info({
450
+ msg: "Indexed block",
451
+ chain: event.chain.name,
452
+ chain_id: event.chain.id,
453
+ number: Number(decodeCheckpoint(event.checkpoint).blockNumber),
454
+ event_count: event.events.length,
455
+ duration: endClock(),
456
+ });
457
+ break;
458
+ }
459
+ case "reorg": {
460
+ const context = {
461
+ logger: common.logger.child({ action: "reorg_block" }),
462
+ };
463
+ const endClock = startClock();
464
+ // Note: `_ponder_checkpoint` is not called here, instead it is called
465
+ // in the `block` case.
466
+ await database.userQB.transaction(async (tx) => {
467
+ await dropTriggers(tx, { tables }, context);
468
+ await dropLiveQueryTriggers(tx, { namespaceBuild, tables }, context);
469
+ const counts = await revertOmnichain(tx, {
470
+ tables,
471
+ checkpoint: event.checkpoint,
472
+ }, context);
473
+ for (const [index, table] of tables.entries()) {
474
+ common.logger.debug({
475
+ msg: "Reverted reorged database rows",
476
+ table: getTableName(table),
477
+ row_count: counts[index],
478
+ });
479
+ }
480
+ await createTriggers(tx, { tables }, context);
481
+ await createLiveQueryTriggers(tx, { namespaceBuild, tables }, context);
482
+ });
483
+ indexingCache.clear();
484
+ common.logger.info({
485
+ msg: "Reorged block",
486
+ chain: event.chain.name,
487
+ chain_id: event.chain.id,
488
+ number: Number(decodeCheckpoint(event.checkpoint).blockNumber),
489
+ duration: endClock(),
490
+ });
491
+ break;
492
+ }
493
+ case "finalize": {
494
+ const context = {
495
+ logger: common.logger.child({ action: "finalize_block" }),
496
+ };
497
+ const endClock = startClock();
498
+ await finalizeOmnichain(database.userQB, {
499
+ checkpoint: event.checkpoint,
500
+ tables,
501
+ namespaceBuild,
502
+ }, context);
503
+ common.logger.info({
504
+ msg: "Finalized block",
505
+ chain: event.chain.name,
506
+ chain_id: event.chain.id,
507
+ number: Number(decodeCheckpoint(event.checkpoint).blockNumber),
508
+ duration: endClock(),
509
+ });
510
+ break;
511
+ }
512
+ default:
513
+ never(event);
514
+ }
515
+ }
516
+ common.logger.info({
517
+ msg: "Completed indexing across all chains",
518
+ duration: backfillEndClock(),
519
+ });
520
+ }
521
+ /**
522
+ * Compute the checkpoint across all chains.
523
+ */
524
+ export const getOmnichainCheckpoint = ({ perChainSync, tag, }) => {
525
+ const checkpoints = Array.from(perChainSync.values()).map(({ syncProgress }) => syncProgress.getCheckpoint({ tag }));
526
+ if (tag === "end") {
527
+ if (checkpoints.some((c) => c === undefined)) {
528
+ return undefined;
529
+ }
530
+ // Note: `max` is used here because `end` is an upper bound.
531
+ return max(...checkpoints);
532
+ }
533
+ // Note: extra logic is needed for `current` because completed chains
534
+ // shouldn't be included in the minimum checkpoint. However, when all
535
+ // chains are completed, the maximum checkpoint should be computed across
536
+ // all chains.
537
+ if (tag === "current") {
538
+ const isComplete = Array.from(perChainSync.values()).map(({ syncProgress }) => syncProgress.isEnd());
539
+ if (isComplete.every((c) => c)) {
540
+ return max(...checkpoints);
541
+ }
542
+ return min(...checkpoints.filter((_, i) => isComplete[i] === false));
543
+ }
544
+ return min(...checkpoints);
545
+ };
546
+ //# sourceMappingURL=omnichain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omnichain.js","sourceRoot":"","sources":["../../../src/runtime/omnichain.ts"],"names":[],"mappings":"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"}