ponder 0.14.13 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/esm/bin/commands/createViews.js +28 -11
  3. package/dist/esm/bin/commands/createViews.js.map +1 -1
  4. package/dist/esm/bin/commands/dev.js +42 -22
  5. package/dist/esm/bin/commands/dev.js.map +1 -1
  6. package/dist/esm/bin/commands/prune.js +3 -0
  7. package/dist/esm/bin/commands/prune.js.map +1 -1
  8. package/dist/esm/bin/commands/serve.js +4 -1
  9. package/dist/esm/bin/commands/serve.js.map +1 -1
  10. package/dist/esm/bin/commands/start.js +18 -6
  11. package/dist/esm/bin/commands/start.js.map +1 -1
  12. package/dist/esm/bin/isolatedController.js +200 -0
  13. package/dist/esm/bin/isolatedController.js.map +1 -0
  14. package/dist/esm/bin/isolatedWorker.js +146 -0
  15. package/dist/esm/bin/isolatedWorker.js.map +1 -0
  16. package/dist/esm/build/config.js +322 -402
  17. package/dist/esm/build/config.js.map +1 -1
  18. package/dist/esm/build/index.js +8 -11
  19. package/dist/esm/build/index.js.map +1 -1
  20. package/dist/esm/build/pre.js +1 -4
  21. package/dist/esm/build/pre.js.map +1 -1
  22. package/dist/esm/build/schema.js +25 -3
  23. package/dist/esm/build/schema.js.map +1 -1
  24. package/dist/esm/client/index.js +306 -42
  25. package/dist/esm/client/index.js.map +1 -1
  26. package/dist/esm/database/actions.js +264 -104
  27. package/dist/esm/database/actions.js.map +1 -1
  28. package/dist/esm/database/index.js +39 -33
  29. package/dist/esm/database/index.js.map +1 -1
  30. package/dist/esm/database/queryBuilder.js +1 -0
  31. package/dist/esm/database/queryBuilder.js.map +1 -1
  32. package/dist/esm/drizzle/index.js +11 -7
  33. package/dist/esm/drizzle/index.js.map +1 -1
  34. package/dist/esm/drizzle/onchain.js +18 -0
  35. package/dist/esm/drizzle/onchain.js.map +1 -1
  36. package/dist/esm/indexing/client.js +32 -25
  37. package/dist/esm/indexing/client.js.map +1 -1
  38. package/dist/esm/indexing/index.js +110 -178
  39. package/dist/esm/indexing/index.js.map +1 -1
  40. package/dist/esm/indexing/profile.js +1 -1
  41. package/dist/esm/indexing/profile.js.map +1 -1
  42. package/dist/esm/indexing-store/cache.js +196 -274
  43. package/dist/esm/indexing-store/cache.js.map +1 -1
  44. package/dist/esm/indexing-store/historical.js +17 -13
  45. package/dist/esm/indexing-store/historical.js.map +1 -1
  46. package/dist/esm/indexing-store/index.js +10 -1
  47. package/dist/esm/indexing-store/index.js.map +1 -1
  48. package/dist/esm/indexing-store/profile.js +3 -3
  49. package/dist/esm/indexing-store/profile.js.map +1 -1
  50. package/dist/esm/indexing-store/realtime.js +27 -2
  51. package/dist/esm/indexing-store/realtime.js.map +1 -1
  52. package/dist/esm/internal/errors.js +28 -0
  53. package/dist/esm/internal/errors.js.map +1 -1
  54. package/dist/esm/internal/metrics.js +279 -82
  55. package/dist/esm/internal/metrics.js.map +1 -1
  56. package/dist/esm/internal/options.js +1 -0
  57. package/dist/esm/internal/options.js.map +1 -1
  58. package/dist/esm/internal/telemetry.js +1 -1
  59. package/dist/esm/internal/telemetry.js.map +1 -1
  60. package/dist/esm/rpc/http.js +130 -0
  61. package/dist/esm/rpc/http.js.map +1 -0
  62. package/dist/esm/rpc/index.js +38 -7
  63. package/dist/esm/rpc/index.js.map +1 -1
  64. package/dist/esm/runtime/events.js +179 -212
  65. package/dist/esm/runtime/events.js.map +1 -1
  66. package/dist/esm/runtime/filter.js +71 -0
  67. package/dist/esm/runtime/filter.js.map +1 -1
  68. package/dist/esm/runtime/fragments.js +78 -73
  69. package/dist/esm/runtime/fragments.js.map +1 -1
  70. package/dist/esm/runtime/historical.js +306 -130
  71. package/dist/esm/runtime/historical.js.map +1 -1
  72. package/dist/esm/runtime/index.js +183 -58
  73. package/dist/esm/runtime/index.js.map +1 -1
  74. package/dist/esm/runtime/isolated.js +462 -0
  75. package/dist/esm/runtime/isolated.js.map +1 -0
  76. package/dist/esm/runtime/multichain.js +80 -73
  77. package/dist/esm/runtime/multichain.js.map +1 -1
  78. package/dist/esm/runtime/omnichain.js +82 -75
  79. package/dist/esm/runtime/omnichain.js.map +1 -1
  80. package/dist/esm/runtime/realtime.js +198 -66
  81. package/dist/esm/runtime/realtime.js.map +1 -1
  82. package/dist/esm/sync-historical/index.js +416 -457
  83. package/dist/esm/sync-historical/index.js.map +1 -1
  84. package/dist/esm/sync-realtime/bloom.js +3 -3
  85. package/dist/esm/sync-realtime/bloom.js.map +1 -1
  86. package/dist/esm/sync-realtime/index.js +27 -46
  87. package/dist/esm/sync-realtime/index.js.map +1 -1
  88. package/dist/esm/sync-store/index.js +112 -63
  89. package/dist/esm/sync-store/index.js.map +1 -1
  90. package/dist/esm/utils/abi.js +20 -32
  91. package/dist/esm/utils/abi.js.map +1 -1
  92. package/dist/esm/utils/chunk.js +8 -0
  93. package/dist/esm/utils/chunk.js.map +1 -0
  94. package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
  95. package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
  96. package/dist/esm/{client/parse.js → utils/sql-parse.js} +94 -80
  97. package/dist/esm/utils/sql-parse.js.map +1 -0
  98. package/dist/types/bin/commands/createViews.d.ts.map +1 -1
  99. package/dist/types/bin/commands/dev.d.ts.map +1 -1
  100. package/dist/types/bin/commands/prune.d.ts.map +1 -1
  101. package/dist/types/bin/commands/serve.d.ts.map +1 -1
  102. package/dist/types/bin/commands/start.d.ts.map +1 -1
  103. package/dist/types/bin/isolatedController.d.ts +13 -0
  104. package/dist/types/bin/isolatedController.d.ts.map +1 -0
  105. package/dist/types/bin/isolatedWorker.d.ts +9 -0
  106. package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
  107. package/dist/types/build/config.d.ts +29 -11
  108. package/dist/types/build/config.d.ts.map +1 -1
  109. package/dist/types/build/index.d.ts +3 -2
  110. package/dist/types/build/index.d.ts.map +1 -1
  111. package/dist/types/build/pre.d.ts +1 -1
  112. package/dist/types/build/pre.d.ts.map +1 -1
  113. package/dist/types/build/schema.d.ts +5 -3
  114. package/dist/types/build/schema.d.ts.map +1 -1
  115. package/dist/types/client/index.d.ts +1 -1
  116. package/dist/types/client/index.d.ts.map +1 -1
  117. package/dist/types/config/index.d.ts +3 -3
  118. package/dist/types/config/index.d.ts.map +1 -1
  119. package/dist/types/database/actions.d.ts +53 -7
  120. package/dist/types/database/actions.d.ts.map +1 -1
  121. package/dist/types/database/index.d.ts +21 -21
  122. package/dist/types/database/index.d.ts.map +1 -1
  123. package/dist/types/database/queryBuilder.d.ts.map +1 -1
  124. package/dist/types/drizzle/index.d.ts +4 -5
  125. package/dist/types/drizzle/index.d.ts.map +1 -1
  126. package/dist/types/drizzle/onchain.d.ts +6 -0
  127. package/dist/types/drizzle/onchain.d.ts.map +1 -1
  128. package/dist/types/indexing/client.d.ts.map +1 -1
  129. package/dist/types/indexing/index.d.ts +2 -5
  130. package/dist/types/indexing/index.d.ts.map +1 -1
  131. package/dist/types/indexing-store/cache.d.ts +3 -2
  132. package/dist/types/indexing-store/cache.d.ts.map +1 -1
  133. package/dist/types/indexing-store/historical.d.ts +2 -1
  134. package/dist/types/indexing-store/historical.d.ts.map +1 -1
  135. package/dist/types/indexing-store/index.d.ts +1 -0
  136. package/dist/types/indexing-store/index.d.ts.map +1 -1
  137. package/dist/types/indexing-store/realtime.d.ts +2 -1
  138. package/dist/types/indexing-store/realtime.d.ts.map +1 -1
  139. package/dist/types/internal/errors.d.ts +5 -0
  140. package/dist/types/internal/errors.d.ts.map +1 -1
  141. package/dist/types/internal/metrics.d.ts +21 -0
  142. package/dist/types/internal/metrics.d.ts.map +1 -1
  143. package/dist/types/internal/options.d.ts +2 -0
  144. package/dist/types/internal/options.d.ts.map +1 -1
  145. package/dist/types/internal/types.d.ts +66 -58
  146. package/dist/types/internal/types.d.ts.map +1 -1
  147. package/dist/types/rpc/http.d.ts +17 -0
  148. package/dist/types/rpc/http.d.ts.map +1 -0
  149. package/dist/types/rpc/index.d.ts.map +1 -1
  150. package/dist/types/runtime/events.d.ts +4 -4
  151. package/dist/types/runtime/events.d.ts.map +1 -1
  152. package/dist/types/runtime/filter.d.ts +5 -1
  153. package/dist/types/runtime/filter.d.ts.map +1 -1
  154. package/dist/types/runtime/fragments.d.ts +4 -3
  155. package/dist/types/runtime/fragments.d.ts.map +1 -1
  156. package/dist/types/runtime/historical.d.ts +29 -13
  157. package/dist/types/runtime/historical.d.ts.map +1 -1
  158. package/dist/types/runtime/index.d.ts +49 -6
  159. package/dist/types/runtime/index.d.ts.map +1 -1
  160. package/dist/types/runtime/init.d.ts +5 -5
  161. package/dist/types/runtime/init.d.ts.map +1 -1
  162. package/dist/types/runtime/isolated.d.ts +14 -0
  163. package/dist/types/runtime/isolated.d.ts.map +1 -0
  164. package/dist/types/runtime/multichain.d.ts.map +1 -1
  165. package/dist/types/runtime/omnichain.d.ts.map +1 -1
  166. package/dist/types/runtime/realtime.d.ts +21 -10
  167. package/dist/types/runtime/realtime.d.ts.map +1 -1
  168. package/dist/types/sync-historical/index.d.ts +18 -8
  169. package/dist/types/sync-historical/index.d.ts.map +1 -1
  170. package/dist/types/sync-realtime/bloom.d.ts.map +1 -1
  171. package/dist/types/sync-realtime/index.d.ts +2 -2
  172. package/dist/types/sync-realtime/index.d.ts.map +1 -1
  173. package/dist/types/sync-store/index.d.ts +9 -9
  174. package/dist/types/sync-store/index.d.ts.map +1 -1
  175. package/dist/types/utils/abi.d.ts +3 -34
  176. package/dist/types/utils/abi.d.ts.map +1 -1
  177. package/dist/types/utils/chunk.d.ts +2 -0
  178. package/dist/types/utils/chunk.d.ts.map +1 -0
  179. package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
  180. package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
  181. package/dist/types/utils/sql-parse.d.ts +21 -0
  182. package/dist/types/utils/sql-parse.d.ts.map +1 -0
  183. package/package.json +2 -2
  184. package/src/bin/commands/createViews.ts +35 -15
  185. package/src/bin/commands/dev.ts +43 -21
  186. package/src/bin/commands/prune.ts +6 -0
  187. package/src/bin/commands/serve.ts +4 -1
  188. package/src/bin/commands/start.ts +20 -5
  189. package/src/bin/isolatedController.ts +300 -0
  190. package/src/bin/isolatedWorker.ts +192 -0
  191. package/src/build/config.ts +570 -632
  192. package/src/build/index.ts +14 -14
  193. package/src/build/pre.ts +1 -4
  194. package/src/build/schema.ts +49 -4
  195. package/src/client/index.ts +386 -48
  196. package/src/config/index.ts +3 -3
  197. package/src/database/actions.ts +469 -120
  198. package/src/database/index.ts +85 -58
  199. package/src/database/queryBuilder.ts +1 -0
  200. package/src/drizzle/index.ts +15 -7
  201. package/src/drizzle/onchain.ts +19 -0
  202. package/src/indexing/client.ts +38 -25
  203. package/src/indexing/index.ts +137 -230
  204. package/src/indexing/profile.ts +1 -1
  205. package/src/indexing-store/cache.ts +285 -414
  206. package/src/indexing-store/historical.ts +20 -10
  207. package/src/indexing-store/index.ts +16 -0
  208. package/src/indexing-store/profile.ts +3 -3
  209. package/src/indexing-store/realtime.ts +28 -0
  210. package/src/internal/errors.ts +26 -0
  211. package/src/internal/metrics.ts +341 -111
  212. package/src/internal/options.ts +4 -0
  213. package/src/internal/telemetry.ts +1 -1
  214. package/src/internal/types.ts +70 -87
  215. package/src/rpc/http.ts +164 -0
  216. package/src/rpc/index.ts +39 -7
  217. package/src/runtime/events.ts +195 -240
  218. package/src/runtime/filter.ts +85 -1
  219. package/src/runtime/fragments.ts +109 -113
  220. package/src/runtime/historical.ts +467 -189
  221. package/src/runtime/index.ts +337 -69
  222. package/src/runtime/init.ts +5 -5
  223. package/src/runtime/isolated.ts +768 -0
  224. package/src/runtime/multichain.ts +137 -102
  225. package/src/runtime/omnichain.ts +138 -106
  226. package/src/runtime/realtime.ts +322 -123
  227. package/src/sync-historical/index.ts +556 -692
  228. package/src/sync-realtime/bloom.ts +7 -3
  229. package/src/sync-realtime/index.ts +31 -46
  230. package/src/sync-store/index.ts +189 -95
  231. package/src/utils/abi.ts +33 -90
  232. package/src/utils/chunk.ts +7 -0
  233. package/src/utils/promiseAllSettledWithThrow.ts +27 -0
  234. package/src/{client/parse.ts → utils/sql-parse.ts} +100 -90
  235. package/dist/esm/client/parse.js.map +0 -1
  236. package/dist/types/client/parse.d.ts +0 -14
  237. package/dist/types/client/parse.d.ts.map +0 -1
@@ -1,12 +1,13 @@
1
- import { runCodegen } from "@/bin/utils/codegen.js";
2
1
  import {
3
2
  commitBlock,
4
3
  createIndexes,
4
+ createLiveQueryTriggers,
5
5
  createTriggers,
6
6
  createViews,
7
+ dropLiveQueryTriggers,
7
8
  dropTriggers,
8
- finalize,
9
- revert,
9
+ finalizeOmnichain,
10
+ revertOmnichain,
10
11
  } from "@/database/actions.js";
11
12
  import {
12
13
  type Database,
@@ -89,17 +90,15 @@ export async function runOmnichain({
89
90
  crashRecoveryCheckpoint: CrashRecoveryCheckpoint;
90
91
  database: Database;
91
92
  }) {
92
- runCodegen({ common });
93
-
94
93
  const columnAccessPattern = createColumnAccessPattern({
95
94
  indexingBuild,
96
95
  });
97
- const syncStore = createSyncStore({ common, database });
96
+ const syncStore = createSyncStore({ common, qb: database.syncQB });
98
97
 
99
98
  const PONDER_CHECKPOINT = getPonderCheckpointTable(namespaceBuild.schema);
100
99
  const PONDER_META = getPonderMetaTable(namespaceBuild.schema);
101
100
 
102
- let eventCount = getEventCount(indexingBuild.indexingFunctions);
101
+ const eventCount = getEventCount(indexingBuild.indexingFunctions);
103
102
 
104
103
  const cachedViemClient = createCachedViemClient({
105
104
  common,
@@ -125,7 +124,6 @@ export async function runOmnichain({
125
124
  common,
126
125
  indexingBuild,
127
126
  client: cachedViemClient,
128
- eventCount,
129
127
  indexingErrorHandler,
130
128
  columnAccessPattern,
131
129
  });
@@ -160,18 +158,17 @@ export async function runOmnichain({
160
158
 
161
159
  await Promise.all(
162
160
  indexingBuild.chains.map(async (chain) => {
163
- const sources = indexingBuild.sources.filter(
164
- ({ filter }) => filter.chainId === chain.id,
165
- );
161
+ const eventCallbacks =
162
+ indexingBuild.eventCallbacks[indexingBuild.chains.indexOf(chain)]!;
166
163
 
167
164
  const cachedIntervals = await getCachedIntervals({
168
165
  chain,
169
- sources,
166
+ filters: eventCallbacks.map(({ filter }) => filter),
170
167
  syncStore,
171
168
  });
172
169
  const syncProgress = await initSyncProgress({
173
170
  common,
174
- sources,
171
+ filters: eventCallbacks.map(({ filter }) => filter),
175
172
  chain,
176
173
  rpc: indexingBuild.rpcs[indexingBuild.chains.indexOf(chain)]!,
177
174
  finalizedBlock:
@@ -179,7 +176,7 @@ export async function runOmnichain({
179
176
  cachedIntervals,
180
177
  });
181
178
  const childAddresses = await getChildAddresses({
182
- sources,
179
+ filters: eventCallbacks.map(({ filter }) => filter),
183
180
  syncStore,
184
181
  });
185
182
  const unfinalizedBlocks: Omit<
@@ -305,14 +302,14 @@ export async function runOmnichain({
305
302
  // underlying metrics collection is actually synchronous
306
303
  // https://github.com/siimon/prom-client/blob/master/lib/histogram.js#L102-L125
307
304
  const { eta, progress } = await getAppProgress(common.metrics);
308
- if (eta === undefined || progress === undefined) {
305
+ if (eta === undefined && progress === undefined) {
309
306
  return;
310
307
  }
311
308
 
312
309
  common.logger.info({
313
310
  msg: "Updated backfill indexing progress",
314
- progress: formatPercentage(progress),
315
- estimate: formatEta(eta * 1_000),
311
+ progress: progress === undefined ? undefined : formatPercentage(progress),
312
+ estimate: eta === undefined ? undefined : formatEta(eta * 1_000),
316
313
  });
317
314
  }, 5_000);
318
315
 
@@ -331,7 +328,7 @@ export async function runOmnichain({
331
328
  indexingBuild,
332
329
  crashRecoveryCheckpoint,
333
330
  perChainSync,
334
- syncStore,
331
+ database,
335
332
  }),
336
333
  (params) => {
337
334
  common.metrics.ponder_historical_concurrency_group_duration.inc(
@@ -371,7 +368,9 @@ export async function runOmnichain({
371
368
  let endClock = startClock();
372
369
  await database.userQB.transaction(
373
370
  async (tx) => {
374
- const initialEventCount = structuredClone(eventCount);
371
+ const initialCompletedEvents = structuredClone(
372
+ await common.metrics.ponder_indexing_completed_events.get(),
373
+ );
375
374
 
376
375
  try {
377
376
  historicalIndexingStore.qb = tx;
@@ -472,7 +471,12 @@ export async function runOmnichain({
472
471
  );
473
472
  endClock = startClock();
474
473
  } catch (error) {
475
- eventCount = initialEventCount;
474
+ for (const value of initialCompletedEvents.values) {
475
+ common.metrics.ponder_indexing_completed_events.set(
476
+ value.labels,
477
+ value.value,
478
+ );
479
+ }
476
480
  indexingCache.invalidate();
477
481
  indexingCache.clear();
478
482
 
@@ -541,7 +545,7 @@ export async function runOmnichain({
541
545
  ),
542
546
  );
543
547
  common.metrics.ponder_indexing_timestamp.set(
544
- { chain: chain.name },
548
+ label,
545
549
  seconds[chain.name]!.end,
546
550
  );
547
551
  }
@@ -578,6 +582,7 @@ export async function runOmnichain({
578
582
  endClock = startClock();
579
583
 
580
584
  await createTriggers(database.adminQB, { tables });
585
+ await createLiveQueryTriggers(database.adminQB, { namespaceBuild, tables });
581
586
 
582
587
  common.logger.debug({
583
588
  msg: "Created database triggers",
@@ -598,6 +603,8 @@ export async function runOmnichain({
598
603
  });
599
604
  }
600
605
 
606
+ endClock = startClock();
607
+
601
608
  await database.adminQB.wrap({ label: "update_ready" }, (db) =>
602
609
  db
603
610
  .update(PONDER_META)
@@ -631,7 +638,7 @@ export async function runOmnichain({
631
638
  common,
632
639
  indexingBuild,
633
640
  perChainSync,
634
- syncStore,
641
+ database,
635
642
  pendingEvents,
636
643
  }),
637
644
  100,
@@ -644,96 +651,117 @@ export async function runOmnichain({
644
651
  };
645
652
  const endClock = startClock();
646
653
 
647
- if (event.events.length > 0) {
648
- // Events must be run block-by-block, so that `database.commitBlock` can accurately
649
- // update the temporary `checkpoint` value set in the trigger.
650
-
651
- const perBlockEvents = splitEvents(event.events);
652
-
653
- for (const { checkpoint, events } of perBlockEvents) {
654
- await database.userQB.transaction(
655
- async (tx) => {
656
- const chain = indexingBuild.chains.find(
657
- (chain) =>
658
- chain.id === Number(decodeCheckpoint(checkpoint).chainId),
659
- )!;
660
-
661
- try {
662
- realtimeIndexingStore.qb = tx;
663
- realtimeIndexingStore.isProcessingEvents = true;
664
-
665
- common.logger.trace({
666
- msg: "Processing block events",
667
- chain: chain.name,
668
- chain_id: chain.id,
669
- number: Number(decodeCheckpoint(checkpoint).blockNumber),
670
- event_count: events.length,
671
- });
672
-
673
- await indexing.processRealtimeEvents({
674
- events,
675
- db: realtimeIndexingStore,
676
- });
654
+ await database.userQB.transaction(
655
+ async (tx) => {
656
+ if (database.userQB.$dialect === "postgres") {
657
+ await tx.wrap(
658
+ (tx) =>
659
+ tx.execute(
660
+ "CREATE TEMP TABLE live_query_tables (table_name TEXT PRIMARY KEY) ON COMMIT DROP",
661
+ ),
662
+ context,
663
+ );
664
+ } else {
665
+ await tx.wrap(
666
+ (tx) =>
667
+ tx.execute(
668
+ "CREATE TEMP TABLE IF NOT EXISTS live_query_tables (table_name TEXT PRIMARY KEY)",
669
+ ),
670
+ context,
671
+ );
672
+ }
673
+
674
+ // Events must be run block-by-block, so that `database.commitBlock` can accurately
675
+ // update the temporary `checkpoint` value set in the trigger.
676
+ for (const { checkpoint, events } of splitEvents(event.events)) {
677
+ const chain = indexingBuild.chains.find(
678
+ (chain) =>
679
+ chain.id === Number(decodeCheckpoint(checkpoint).chainId),
680
+ )!;
681
+
682
+ try {
683
+ realtimeIndexingStore.qb = tx;
684
+ realtimeIndexingStore.isProcessingEvents = true;
685
+
686
+ common.logger.trace({
687
+ msg: "Processing block events",
688
+ chain: chain.name,
689
+ chain_id: chain.id,
690
+ number: Number(decodeCheckpoint(checkpoint).blockNumber),
691
+ event_count: events.length,
692
+ });
693
+
694
+ await indexing.processRealtimeEvents({
695
+ events,
696
+ db: realtimeIndexingStore,
697
+ });
698
+
699
+ common.logger.trace({
700
+ msg: "Processed block events",
701
+ chain: chain.name,
702
+ chain_id: chain.id,
703
+ number: Number(decodeCheckpoint(checkpoint).blockNumber),
704
+ event_count: events.length,
705
+ });
706
+
707
+ realtimeIndexingStore.isProcessingEvents = false;
708
+
709
+ await Promise.all(
710
+ tables.map(
711
+ (table) =>
712
+ commitBlock(tx, { table, checkpoint, preBuild }, context),
713
+ context,
714
+ ),
715
+ );
677
716
 
678
- common.logger.trace({
679
- msg: "Processed block events",
717
+ common.logger.trace({
718
+ msg: "Committed reorg data for block",
719
+ chain: chain.name,
720
+ chain_id: chain.id,
721
+ number: Number(decodeCheckpoint(checkpoint).blockNumber),
722
+ event_count: events.length,
723
+ checkpoint,
724
+ });
725
+ } catch (error) {
726
+ if (error instanceof NonRetryableUserError === false) {
727
+ common.logger.warn({
728
+ msg: "Failed to index block",
680
729
  chain: chain.name,
681
730
  chain_id: chain.id,
682
731
  number: Number(decodeCheckpoint(checkpoint).blockNumber),
683
- event_count: events.length,
732
+ error: error,
684
733
  });
734
+ }
685
735
 
686
- realtimeIndexingStore.isProcessingEvents = false;
687
-
688
- await Promise.all(
689
- tables.map(
690
- (table) => commitBlock(tx, { table, checkpoint }),
691
- context,
692
- ),
693
- );
694
-
695
- common.logger.trace({
696
- msg: "Committed reorg data for block",
697
- chain: chain.name,
698
- chain_id: chain.id,
699
- number: Number(decodeCheckpoint(checkpoint).blockNumber),
700
- event_count: events.length,
701
- checkpoint,
702
- });
736
+ throw error;
737
+ }
703
738
 
704
- for (const chain of indexingBuild.chains) {
705
- common.metrics.ponder_indexing_timestamp.set(
706
- { chain: chain.name },
707
- Number(decodeCheckpoint(checkpoint).blockTimestamp),
708
- );
709
- }
710
- } catch (error) {
711
- if (error instanceof NonRetryableUserError === false) {
712
- common.logger.warn({
713
- msg: "Failed to index block",
714
- chain: chain.name,
715
- chain_id: chain.id,
716
- number: Number(decodeCheckpoint(checkpoint).blockNumber),
717
- error: error,
718
- });
719
- }
720
-
721
- throw error;
722
- }
723
- },
724
- undefined,
739
+ for (const chain of indexingBuild.chains) {
740
+ common.metrics.ponder_indexing_timestamp.set(
741
+ { chain: chain.name },
742
+ Number(decodeCheckpoint(checkpoint).blockTimestamp),
743
+ );
744
+ }
745
+ }
746
+
747
+ await tx.wrap(
748
+ { label: "update_checkpoints" },
749
+ (db) =>
750
+ db
751
+ .update(PONDER_CHECKPOINT)
752
+ .set({ latestCheckpoint: event.checkpoint })
753
+ .where(eq(PONDER_CHECKPOINT.chainName, event.chain.name)),
725
754
  context,
726
755
  );
727
- }
728
- }
729
756
 
730
- await database.userQB.wrap(
731
- { label: "update_checkpoints" },
732
- (db) =>
733
- db
734
- .update(PONDER_CHECKPOINT)
735
- .set({ latestCheckpoint: event.checkpoint })
736
- .where(eq(PONDER_CHECKPOINT.chainName, event.chain.name)),
757
+ if (database.userQB.$dialect === "pglite") {
758
+ await tx.wrap(
759
+ (tx) => tx.execute("TRUNCATE TABLE live_query_tables"),
760
+ context,
761
+ );
762
+ }
763
+ },
764
+ undefined,
737
765
  context,
738
766
  );
739
767
 
@@ -761,13 +789,13 @@ export async function runOmnichain({
761
789
 
762
790
  await database.userQB.transaction(async (tx) => {
763
791
  await dropTriggers(tx, { tables }, context);
792
+ await dropLiveQueryTriggers(tx, { namespaceBuild, tables }, context);
764
793
 
765
- const counts = await revert(
794
+ const counts = await revertOmnichain(
766
795
  tx,
767
796
  {
768
797
  tables,
769
798
  checkpoint: event.checkpoint,
770
- preBuild,
771
799
  },
772
800
  context,
773
801
  );
@@ -781,6 +809,11 @@ export async function runOmnichain({
781
809
  }
782
810
 
783
811
  await createTriggers(tx, { tables }, context);
812
+ await createLiveQueryTriggers(
813
+ tx,
814
+ { namespaceBuild, tables },
815
+ context,
816
+ );
784
817
  });
785
818
 
786
819
  common.logger.info({
@@ -799,12 +832,11 @@ export async function runOmnichain({
799
832
  };
800
833
  const endClock = startClock();
801
834
 
802
- await finalize(
835
+ await finalizeOmnichain(
803
836
  database.userQB,
804
837
  {
805
838
  checkpoint: event.checkpoint,
806
839
  tables,
807
- preBuild,
808
840
  namespaceBuild,
809
841
  },
810
842
  context,