@artblocks/abx-indexer 0.1.0-alpha.9 → 0.1.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.
package/dist/store.d.ts CHANGED
@@ -22,7 +22,7 @@ export interface ProjectRegistration {
22
22
  registeredAt: string;
23
23
  }
24
24
  /** One producer-published effect artifact — a row in the data plane's enumeration registry
25
- * (`specs/protocol/data-plane.md`). The resolver lists a token's rows and keeps only those whose
25
+ * (`site/content/docs/protocol/data-plane.mdx`). The resolver lists a token's rows and keeps only those whose
26
26
  * `key` matches the recomputed address at the CURRENT settled inputsHash, so stale rows go
27
27
  * silently unlisted (self-invalidation). `locator === null` means the bytes live in custody
28
28
  * (a co-located producer's bytes in the shared backend at `key`, or a bound output's `bytes` below).
@@ -40,7 +40,7 @@ export interface EffectArtifactRow {
40
40
  contentType: string | null;
41
41
  locator: string | null;
42
42
  /**
43
- * A **bound** output's content (`specs/protocol/effects.md → Bound vs referenced`): the bytes that
43
+ * A **bound** output's content (`site/content/docs/protocol/effects.mdx#metadata-binding`): the bytes that
44
44
  * stitch into the metadata JSON — `render/traits` today. Capped at
45
45
  * {@link BOUND_ARTIFACT_MAX_BYTES}; `null` for every **referenced** output, whose bytes stay with
46
46
  * the producer and reach us only as `locator`.
@@ -54,12 +54,12 @@ export interface EffectArtifactRow {
54
54
  updatedAt?: string;
55
55
  }
56
56
  /** The cap a serving node MUST accept per bound output, and MUST refuse above
57
- * (`specs/self-host-toolkit/remote-services.md → The mode is decided by the binding`). ~100× a real
57
+ * (`site/content/docs/protocol/effects.mdx#metadata-binding`). ~100× a real
58
58
  * traits payload: generous for what it is for, far too small to become blob storage. */
59
59
  export declare const BOUND_ARTIFACT_MAX_BYTES: number;
60
60
  /**
61
- * Where one project sits in the indexing lifecycle (`specs/self-host-toolkit/remote-services.md` →
62
- * The indexing lifecycle) — what the control plane's `status`/list routes report and what
61
+ * Where one project sits in the indexing lifecycle (`site/content/docs/using-abx/remote-services.mdx`) —
62
+ * what the control plane's `status`/list routes report and what
63
63
  * `abx status` prints, for a managed provider and for your own node in the same words.
64
64
  *
65
65
  * Deliberately its OWN table, not columns on `registrations`: `register()` is a full-column upsert,
@@ -140,7 +140,7 @@ export interface Store {
140
140
  * Drop the **bound** content of every superseded row for (project, token, effectKey, outputKey) —
141
141
  * everything whose `inputs_hash` isn't `currentHash`.
142
142
  *
143
- * The spec makes this a **MAY**, not a MUST (`specs/protocol/effects.md → Bound vs referenced`):
143
+ * The spec makes this a **MAY**, not a MUST (`site/content/docs/protocol/effects.mdx#metadata-binding`):
144
144
  * what's normative is that superseded content is never *served* or stitched, which leaves it with
145
145
  * no legal reader. Dropping it is therefore free of consequence, and this node drops eagerly — on
146
146
  * each bound registration — because that is what turns "held bytes" into
@@ -165,7 +165,12 @@ export interface Store {
165
165
  /** Clear one artifact key's status — the run finished; artifact presence takes over as truth. */
166
166
  clearEffectStatus(key: string): void;
167
167
  listEffectStatuses(address: string): EffectStatusRow[];
168
- putProject(state: ProjectState): void;
168
+ /** Persist a folded projection. `fullReplay: true` (the repair path — `abx index --full`) purges
169
+ * the project's append-only event log first, so a reorg-replaced event can't survive as a stale
170
+ * row; routine incremental writes leave the log append-only. */
171
+ putProject(state: ProjectState, opts?: {
172
+ fullReplay?: boolean;
173
+ }): void;
169
174
  getProject(address: string): ProjectState | null;
170
175
  listProjects(): ProjectState[];
171
176
  /** Drop the rebuildable projection (keeps registrations). Proves replay. */
@@ -192,12 +197,30 @@ export declare class SqliteStore implements Store {
192
197
  constructor(dataDir?: string);
193
198
  /** Shape changes that must land BEFORE the schema exec (its indexes reference new columns).
194
199
  * effect_artifacts pre-data-plane shape (key/address/locator only) → drop; the schema recreates
195
- * it. Dropping is safe pre-release: rows are producer-published and self-heal from a runner's
196
- * next sweep (record-on-skip / republish) — no chain data is lost. */
200
+ * it. Dropping is safe: rows are producer-published and self-heal from a runner's next sweep
201
+ * (record-on-skip / republish) — no chain data is lost. */
197
202
  private premigrate;
198
203
  /** Idempotently add columns introduced after a DB was first created (CREATE IF NOT
199
204
  * EXISTS won't backfill them). Keeps an existing projection working across upgrades. */
200
205
  private migrate;
206
+ /**
207
+ * One-time data migration, gated on `PRAGMA user_version` (unused before this — starts at 0 on
208
+ * every existing store). `migrate()` above only ever ADDs columns; recomputing `seq` rewrites
209
+ * VALUES in an existing column, which a `PRAGMA table_info` presence check can't gate — hence a
210
+ * separate versioned step.
211
+ *
212
+ * `events.seq` used to be the array index at write time (positional — renumbers on every re-fold).
213
+ * This recomputes every existing row to the chain-derived value `(block_number << 32) | log_index`
214
+ * — the same formula {@link eventSeq} uses going forward — so an upgraded store's history becomes
215
+ * append-only-compatible without re-indexing from chain. No collisions are possible: `(block,
216
+ * logIndex)` is already unique per project (the table's own history proves it — it was a valid
217
+ * event log before this ran), and the shift preserves that uniqueness.
218
+ *
219
+ * A fresh install has no rows yet, so the `UPDATE` is a no-op — but `user_version` still advances,
220
+ * so this never re-scans an empty table on every open. Wrapped in a transaction: a crash mid-way
221
+ * leaves `user_version` at 0 and retries the whole thing next open, never a half-migrated table.
222
+ */
223
+ private migrateSeq;
201
224
  register(reg: ProjectRegistration): void;
202
225
  listRegistrations(): ProjectRegistration[];
203
226
  getRegistration(address: string): ProjectRegistration | null;
@@ -221,11 +244,78 @@ export declare class SqliteStore implements Store {
221
244
  putEffectStatus(row: EffectStatusRow): void;
222
245
  clearEffectStatus(key: string): void;
223
246
  listEffectStatuses(address: string): EffectStatusRow[];
224
- putProject(state: ProjectState): void;
247
+ /**
248
+ * Persist a reconstructed `ProjectState`. O(delta), not O(history): the routine case — one new
249
+ * mint on an otherwise-unchanged project — writes one project row and one token row, appends
250
+ * whatever events are new, and touches nothing else. A delete-and-reinsert approach would rewrite
251
+ * the entire projection (every token, every event) on every call.
252
+ *
253
+ * `contract_uri`/`token_uri` are bound NULL unconditionally regardless of what `state` carries —
254
+ * see the schema comments on those columns. This is deliberate even when a caller passed populated
255
+ * values (e.g. a reconstruct run with `readUriDocuments: true`): the store's job is never to cache
256
+ * a value with no settled state, only to serve it live when asked.
257
+ */
258
+ putProject(state: ProjectState, opts?: {
259
+ fullReplay?: boolean;
260
+ }): void;
225
261
  getProject(address: string): ProjectState | null;
226
262
  listProjects(): ProjectState[];
227
263
  wipeProjections(): void;
228
264
  destroy(): void;
265
+ /**
266
+ * This store's actual `PRAGMA auto_vacuum` mode, right now. A store opened from a file created
267
+ * before `SCHEMA` started setting `PRAGMA auto_vacuum = INCREMENTAL` BEFORE its first `CREATE
268
+ * TABLE` (see the comment on that pragma above) is permanently stuck at `'none'` — the pragma
269
+ * silently no-ops on a database that already has tables — until {@link vacuumConvert} runs. This
270
+ * is the detection half of the two-part approach: every other read/write path in this class is
271
+ * indifferent to the mode, so nothing breaks for a store still at `'none'`; only reclamation cares.
272
+ */
273
+ autoVacuumMode(): 'none' | 'full' | 'incremental';
274
+ /** Diagnostics behind `abx vacuum status`: {@link autoVacuumMode} alongside the raw page/freelist
275
+ * counts a caller (or a test) can watch move as maintenance runs. */
276
+ vacuumStats(): {
277
+ mode: 'none' | 'full' | 'incremental';
278
+ freelistPages: number;
279
+ pageCount: number;
280
+ };
281
+ /**
282
+ * The one-time, EXPLICIT conversion for a store stuck at `auto_vacuum='none'`: sets the pragma —
283
+ * on its own a no-op here, same as it was at construction, since the database already has tables
284
+ * — and then runs a full `VACUUM`, the only operation that actually rebuilds the file under the
285
+ * new mode. This is deliberately not run automatically anywhere in this class or in
286
+ * {@link SelfHostIndexer}: a full `VACUUM` rewrites the ENTIRE database file and can briefly need
287
+ * up to ~2x its on-disk size while it runs, so it must be an operator's explicit choice, made with
288
+ * that cost understood — `abx vacuum convert` (and the docs it points at) is that explicit surface.
289
+ * A no-op, returning the mode unchanged, once the store is already `'full'` or `'incremental'`.
290
+ */
291
+ vacuumConvert(): 'none' | 'full' | 'incremental';
292
+ /**
293
+ * Bounded `PRAGMA incremental_vacuum(N)`: reclaims at most `maxPages` freed pages THIS call, never
294
+ * the whole freelist at once. `node:sqlite`'s `DatabaseSync` is SYNCHRONOUS and shares this process
295
+ * with token-api reads on a co-located `abx serve` — an unbounded reclaim would block every request
296
+ * in flight for however long a large freelist takes to drain. Bounding it is what makes it safe to
297
+ * call automatically between watch-loop ticks (see {@link SelfHostIndexer.runIncrementalVacuum})
298
+ * rather than only from the explicit `abx vacuum convert` command above.
299
+ *
300
+ * A no-op (returns 0, touches nothing) before the store has been converted to `'incremental'` mode
301
+ * — `incremental_vacuum` only does anything in that mode, and running it blind on a `'none'` store
302
+ * would be silent maintenance with no effect, which is worse than an honest no-op.
303
+ *
304
+ * Returns the number of pages actually REQUESTED of SQLite this call (capped by the freelist's
305
+ * current size), not a guarantee it moved exactly that many — draining an already-small freelist
306
+ * legitimately returns fewer than `maxPages`.
307
+ */
308
+ runIncrementalVacuum(maxPages: number): number;
309
+ /**
310
+ * Drop one project's projection — `extensions` / `tokens` / `projects` — but deliberately NOT
311
+ * `events`. The event log is append-only and chain-derived (`seq` is `(block << 32) | logIndex`,
312
+ * so a re-fold always lands on the same rows): a re-index after this re-derives the identical
313
+ * event set from chain and re-inserts it as a no-op (`ON CONFLICT DO NOTHING`), so nothing is lost
314
+ * by leaving the rows in place, and `abx demo`'s "drop + replay" proof doesn't depend on the log
315
+ * being gone. `deregister`/forget-the-project-entirely paths delete events explicitly — this
316
+ * helper is for `dropProjection`, which keeps the registration precisely so the next reindex can
317
+ * rebuild from it.
318
+ */
229
319
  private deleteProjection;
230
320
  private hydrate;
231
321
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAIV,UAAU,EACV,eAAe,EACf,WAAW,EAEX,YAAY,EAGb,MAAM,oBAAoB,CAAC;AAE5B,4EAA4E;AAC5E,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;iFAC6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;kGAE8F;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;uGACmG;IACnG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;2BAM2B;AAC3B,MAAM,WAAW,iBAAiB;IAChC,8EAA8E;IAC9E,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;yFAEyF;AACzF,eAAO,MAAM,wBAAwB,QAAY,CAAC;AAElD;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,gFAAgF;IAChF,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;4CACwC;IACxC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;+FAC+F;AAC/F,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED;;iFAEiF;AACjF,MAAM,WAAW,eAAe;IAC9B,4FAA4F;IAC5F,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,KAAK;IACpB,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACzC,iBAAiB,IAAI,mBAAmB,EAAE,CAAC;IAC3C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI,CAAC;IAC7D,yGAAyG;IACzG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC;;oGAEgG;IAChG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC;;gDAE4C;IAC5C,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAChD,uEAAuE;IACvE,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAAC;IACzD;kGAC8F;IAC9F,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAC3E;;;;;;;;;;;;OAYG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3H;sDACkD;IAClD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,cAAc,CAAC;IACzE,4EAA4E;IAC5E,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IACvD,yEAAyE;IACzE,iBAAiB,IAAI,cAAc,EAAE,CAAC;IAEtC,oFAAoF;IACpF,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAEpC,0FAA0F;IAC1F,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAAC;IAC5C,iGAAiG;IACjG,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAAC;IAEvD,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACtC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC;IACjD,YAAY,IAAI,YAAY,EAAE,CAAC;IAE/B,4EAA4E;IAC5E,eAAe,IAAI,IAAI,CAAC;IACxB,sDAAsD;IACtD,OAAO,IAAI,IAAI,CAAC;CACjB;AAyKD;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAY,YAAW,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAe;gBAEb,OAAO,CAAC,EAAE,MAAM;IAU5B;;;2EAGuE;IACvE,OAAO,CAAC,UAAU;IAOlB;6FACyF;IACzF,OAAO,CAAC,OAAO;IAqCf,QAAQ,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;IA4BxC,iBAAiB,IAAI,mBAAmB,EAAE;IAO1C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAK5D,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUjC,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAyB/C,uBAAuB,CACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,IAAI;IAUP,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAOxD,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAS1E,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMzC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMnC;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,cAAc;IAoCxE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAKtD,iBAAiB,IAAI,cAAc,EAAE;IAQrC,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAqB3C,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE;IAiBtD,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAgGrC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKhD,YAAY,IAAI,YAAY,EAAE;IAO9B,eAAe,IAAI,IAAI;IAIvB,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,OAAO;CAmEhB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}