@secondlayer/subgraphs 3.12.0 → 3.13.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 (34) hide show
  1. package/dist/src/index.d.ts +7 -0
  2. package/dist/src/index.js +531 -180
  3. package/dist/src/index.js.map +10 -10
  4. package/dist/src/runtime/block-processor.d.ts +31 -1
  5. package/dist/src/runtime/block-processor.js +501 -72
  6. package/dist/src/runtime/block-processor.js.map +9 -8
  7. package/dist/src/runtime/catchup.d.ts +7 -0
  8. package/dist/src/runtime/catchup.js +520 -118
  9. package/dist/src/runtime/catchup.js.map +10 -9
  10. package/dist/src/runtime/context.d.ts +65 -3
  11. package/dist/src/runtime/context.js +390 -8
  12. package/dist/src/runtime/context.js.map +6 -4
  13. package/dist/src/runtime/processor.js +576 -229
  14. package/dist/src/runtime/processor.js.map +12 -12
  15. package/dist/src/runtime/reindex.d.ts +7 -0
  16. package/dist/src/runtime/reindex.js +531 -180
  17. package/dist/src/runtime/reindex.js.map +10 -10
  18. package/dist/src/runtime/reorg.d.ts +7 -0
  19. package/dist/src/runtime/reorg.js +521 -73
  20. package/dist/src/runtime/reorg.js.map +10 -9
  21. package/dist/src/runtime/replay.js.map +2 -2
  22. package/dist/src/runtime/runner.d.ts +70 -2
  23. package/dist/src/runtime/runner.js +56 -58
  24. package/dist/src/runtime/runner.js.map +3 -3
  25. package/dist/src/runtime/source-matcher.d.ts +2 -0
  26. package/dist/src/runtime/source-matcher.js.map +2 -2
  27. package/dist/src/schema/index.d.ts +7 -0
  28. package/dist/src/schema/index.js +18 -1
  29. package/dist/src/schema/index.js.map +3 -3
  30. package/dist/src/service.js +576 -229
  31. package/dist/src/service.js.map +12 -12
  32. package/dist/src/types.d.ts +7 -0
  33. package/dist/src/validate.d.ts +7 -0
  34. package/package.json +1 -1
@@ -165,6 +165,13 @@ interface SubgraphContext {
165
165
  update(table: string, where: Record<string, unknown>, set: Record<string, unknown>): void;
166
166
  upsert(table: string, key: Record<string, unknown>, row: Record<string, unknown>): void;
167
167
  delete(table: string, where: Record<string, unknown>): void;
168
+ /**
169
+ * Atomic counter update — the blessed accumulator primitive. Applies
170
+ * `col = COALESCE(col, 0) + delta` per column (insert-or-add); deltas may
171
+ * be negative. Requires a uniqueKeys constraint matching `key`. Prefer
172
+ * this over patchOrInsert with functional updaters for running totals.
173
+ */
174
+ increment(table: string, key: Record<string, unknown>, deltas: Record<string, bigint | number>): void;
168
175
  /** Partial update — sets only specified fields, preserves others */
169
176
  patch(table: string, where: Record<string, unknown>, set: Record<string, unknown>): void;
170
177
  /** Find-then-merge-or-insert. Values can be functions: (existing) => newValue */
@@ -242,6 +249,29 @@ interface ProcessBlockOptions {
242
249
  skipProgressUpdate?: boolean;
243
250
  /** Pre-loaded block data — skips DB reads when provided (used by batch catch-up). */
244
251
  preloaded?: PreloadedBlockData;
252
+ /**
253
+ * Crash-safe sequential processing (the reindex path). When set:
254
+ * - a block whose writes flush commits `last_processed_block = blockHeight`
255
+ * (with this status) in the SAME transaction, so a crash can never leave
256
+ * committed writes ahead of the checkpoint;
257
+ * - a block at or below the checkpoint is skipped entirely, so a replay
258
+ * (crash-resume overshoot, duplicate dispatch) can never double-apply
259
+ * deltas.
260
+ * Only valid for strictly ascending block walks over the subgraph's own
261
+ * cursor — backfill/reorg paths that legitimately revisit heights below
262
+ * the cursor must not set this.
263
+ */
264
+ atomicProgress?: {
265
+ status: string
266
+ };
245
267
  }
268
+ /** Default per-block retry schedule before a failure counts as persistent. */
269
+ declare const BLOCK_RETRY_DELAYS_MS: unknown;
270
+ /**
271
+ * processBlock with bounded retries. Throws the last error once the schedule
272
+ * is exhausted — callers decide whether that halts the walk (strict paths) or
273
+ * records a gap (backfill). Never advances any cursor on failure.
274
+ */
275
+ declare function processBlockWithRetry(subgraph: SubgraphDefinition, subgraphName: string, blockHeight: number, opts?: ProcessBlockOptions, retryDelaysMs?: number[]): Promise<ProcessBlockResult>;
246
276
  declare function processBlock(subgraph: SubgraphDefinition, subgraphName: string, blockHeight: number, opts?: ProcessBlockOptions): Promise<ProcessBlockResult>;
247
- export { processBlock, invalidateSubgraphRoute, ProcessBlockTiming, ProcessBlockResult, ProcessBlockOptions, PreloadedBlockData };
277
+ export { processBlockWithRetry, processBlock, invalidateSubgraphRoute, ProcessBlockTiming, ProcessBlockResult, ProcessBlockOptions, PreloadedBlockData, BLOCK_RETRY_DELAYS_MS };