@powerhousedao/reactor 4.1.0-dev.59 → 4.1.0-dev.61

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 (44) hide show
  1. package/dist/src/core/reactor.d.ts.map +1 -1
  2. package/dist/src/core/reactor.js +33 -21
  3. package/dist/src/core/reactor.js.map +1 -1
  4. package/dist/src/executor/simple-job-executor.d.ts +5 -0
  5. package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
  6. package/dist/src/executor/simple-job-executor.js +45 -0
  7. package/dist/src/executor/simple-job-executor.js.map +1 -1
  8. package/dist/src/index.d.ts +3 -0
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +3 -0
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/queue/queue.js +8 -8
  13. package/dist/src/queue/queue.js.map +1 -1
  14. package/dist/src/read-models/document-view.d.ts +21 -0
  15. package/dist/src/read-models/document-view.d.ts.map +1 -0
  16. package/dist/src/read-models/document-view.js +285 -0
  17. package/dist/src/read-models/document-view.js.map +1 -0
  18. package/dist/src/read-models/types.d.ts +46 -0
  19. package/dist/src/read-models/types.d.ts.map +1 -0
  20. package/dist/src/read-models/types.js +2 -0
  21. package/dist/src/read-models/types.js.map +1 -0
  22. package/dist/src/shared/awaiter.js +3 -3
  23. package/dist/src/shared/awaiter.js.map +1 -1
  24. package/dist/src/shared/types.d.ts +5 -0
  25. package/dist/src/shared/types.d.ts.map +1 -1
  26. package/dist/src/shared/types.js +5 -0
  27. package/dist/src/shared/types.js.map +1 -1
  28. package/dist/src/storage/interfaces.d.ts +124 -0
  29. package/dist/src/storage/interfaces.d.ts.map +1 -0
  30. package/dist/src/storage/interfaces.js +19 -0
  31. package/dist/src/storage/interfaces.js.map +1 -0
  32. package/dist/src/storage/kysely/store.d.ts +15 -0
  33. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  34. package/dist/src/storage/kysely/store.js +173 -0
  35. package/dist/src/storage/kysely/store.js.map +1 -0
  36. package/dist/src/storage/kysely/types.d.ts +26 -0
  37. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  38. package/dist/src/storage/kysely/types.js +2 -0
  39. package/dist/src/storage/kysely/types.js.map +1 -0
  40. package/dist/src/storage/txn.d.ts +15 -0
  41. package/dist/src/storage/txn.d.ts.map +1 -0
  42. package/dist/src/storage/txn.js +42 -0
  43. package/dist/src/storage/txn.js.map +1 -0
  44. package/package.json +7 -4
@@ -0,0 +1,285 @@
1
+ import { createPresignedHeader } from "document-model/core";
2
+ import { v4 as uuidv4 } from "uuid";
3
+ export class KyselyDocumentView {
4
+ db;
5
+ operationStore;
6
+ lastOperationId = 0;
7
+ constructor(db, operationStore) {
8
+ this.db = db;
9
+ this.operationStore = operationStore;
10
+ }
11
+ async init() {
12
+ // Create tables if they don't exist
13
+ await this.createTablesIfNotExist();
14
+ // Load the last processed operation ID from ViewState
15
+ const viewState = await this.db
16
+ .selectFrom("ViewState")
17
+ .selectAll()
18
+ .executeTakeFirst();
19
+ if (viewState) {
20
+ this.lastOperationId = viewState.lastOperationId;
21
+ // Catch up with any operations we missed
22
+ const missedOperations = await this.operationStore.getSinceId(this.lastOperationId);
23
+ if (missedOperations.length > 0) {
24
+ await this.indexOperations(missedOperations);
25
+ }
26
+ }
27
+ else {
28
+ // Initialize ViewState with ID 0
29
+ await this.db
30
+ .insertInto("ViewState")
31
+ .values({
32
+ lastOperationId: 0,
33
+ })
34
+ .execute();
35
+ // Process all existing operations
36
+ const allOperations = await this.operationStore.getSinceId(0);
37
+ if (allOperations.length > 0) {
38
+ await this.indexOperations(allOperations);
39
+ }
40
+ }
41
+ }
42
+ async indexOperations(items) {
43
+ if (items.length === 0)
44
+ return;
45
+ await this.db.transaction().execute(async (trx) => {
46
+ for (const item of items) {
47
+ const { operation, context } = item;
48
+ const { documentId, scope, branch, documentType } = context;
49
+ const { index, hash } = operation;
50
+ // Check if we need to create or update a snapshot
51
+ const existingSnapshot = await trx
52
+ .selectFrom("DocumentSnapshot")
53
+ .selectAll()
54
+ .where("documentId", "=", documentId)
55
+ .where("scope", "=", scope)
56
+ .where("branch", "=", branch)
57
+ .executeTakeFirst();
58
+ if (existingSnapshot) {
59
+ // Update existing snapshot
60
+ await trx
61
+ .updateTable("DocumentSnapshot")
62
+ .set({
63
+ lastOperationIndex: index,
64
+ lastOperationHash: hash,
65
+ lastUpdatedAt: new Date(),
66
+ snapshotVersion: existingSnapshot.snapshotVersion + 1,
67
+ })
68
+ .where("documentId", "=", documentId)
69
+ .where("scope", "=", scope)
70
+ .where("branch", "=", branch)
71
+ .execute();
72
+ }
73
+ else {
74
+ // Create new snapshot
75
+ const snapshot = {
76
+ id: uuidv4(),
77
+ documentId,
78
+ slug: null,
79
+ name: null,
80
+ scope,
81
+ branch,
82
+ content: JSON.stringify({}), // Empty for now, will be filled when we build full documents
83
+ documentType,
84
+ lastOperationIndex: index,
85
+ lastOperationHash: hash,
86
+ identifiers: null,
87
+ metadata: null,
88
+ deletedAt: null,
89
+ };
90
+ await trx.insertInto("DocumentSnapshot").values(snapshot).execute();
91
+ }
92
+ }
93
+ });
94
+ }
95
+ async getHeader(documentId, branch, signal) {
96
+ if (signal?.aborted) {
97
+ throw new Error("Operation aborted");
98
+ }
99
+ // Query operations from header and document scopes only
100
+ // - "header" scope: CREATE_DOCUMENT actions contain initial header metadata
101
+ // - "document" scope: UPGRADE_DOCUMENT actions contain version transitions
102
+ const headerAndDocOps = await this.db
103
+ .selectFrom("Operation")
104
+ .selectAll()
105
+ .where("documentId", "=", documentId)
106
+ .where("branch", "=", branch)
107
+ .where("scope", "in", ["header", "document"])
108
+ .orderBy("timestampUtcMs", "asc") // Process in chronological order
109
+ .execute();
110
+ if (headerAndDocOps.length === 0) {
111
+ throw new Error(`Document header not found: ${documentId}`);
112
+ }
113
+ // Reconstruct header from header and document scope operations
114
+ let header = createPresignedHeader();
115
+ for (const op of headerAndDocOps) {
116
+ const action = JSON.parse(op.action);
117
+ if (action.type === "CREATE_DOCUMENT") {
118
+ const input = action.input;
119
+ // Extract header from CREATE_DOCUMENT action's signing parameters
120
+ if (input.signing) {
121
+ header = {
122
+ ...header,
123
+ id: input.signing.signature, // documentId === signing.signature
124
+ documentType: input.signing.documentType,
125
+ createdAtUtcIso: input.signing.createdAtUtcIso,
126
+ lastModifiedAtUtcIso: input.signing.createdAtUtcIso,
127
+ sig: {
128
+ nonce: input.signing.nonce,
129
+ publicKey: input.signing.publicKey,
130
+ },
131
+ };
132
+ }
133
+ }
134
+ else if (action.type === "UPGRADE_DOCUMENT") {
135
+ // UPGRADE_DOCUMENT tracks version changes in the document scope
136
+ // Version information would be in the operation's resulting state
137
+ // For now, this is handled elsewhere in the document state
138
+ }
139
+ }
140
+ // Get revision map and latest timestamp from all scopes efficiently
141
+ const { revision, latestTimestamp } = await this.operationStore.getRevisions(documentId, branch, signal);
142
+ // Update header with cross-scope revision and timestamp information
143
+ header.revision = revision;
144
+ header.lastModifiedAtUtcIso = latestTimestamp;
145
+ return header;
146
+ }
147
+ async exists(documentIds, signal) {
148
+ if (signal?.aborted) {
149
+ throw new Error("Operation aborted");
150
+ }
151
+ if (documentIds.length === 0) {
152
+ return [];
153
+ }
154
+ // Query for all documents at once
155
+ const snapshots = await this.db
156
+ .selectFrom("DocumentSnapshot")
157
+ .select(["documentId"])
158
+ .where("documentId", "in", documentIds)
159
+ .where("isDeleted", "=", false)
160
+ .distinct()
161
+ .execute();
162
+ // Create a Set of existing document IDs for fast lookup
163
+ const existingIds = new Set(snapshots.map((s) => s.documentId));
164
+ // Return a boolean array in the same order as the input
165
+ return documentIds.map((id) => existingIds.has(id));
166
+ }
167
+ async getMany(documentIds, scope = "global", branch = "main", signal) {
168
+ if (signal?.aborted) {
169
+ throw new Error("Operation aborted");
170
+ }
171
+ if (documentIds.length === 0) {
172
+ return [];
173
+ }
174
+ // Query for all documents at once
175
+ const snapshots = await this.db
176
+ .selectFrom("DocumentSnapshot")
177
+ .selectAll()
178
+ .where("documentId", "in", documentIds)
179
+ .where("scope", "=", scope)
180
+ .where("branch", "=", branch)
181
+ .where("isDeleted", "=", false)
182
+ .execute();
183
+ // Create a Map of document ID to snapshot for fast lookup
184
+ const snapshotMap = new Map(snapshots.map((s) => [s.documentId, s]));
185
+ // Return an array in the same order as the input, with null for missing documents
186
+ return documentIds.map((id) => snapshotMap.get(id) || null);
187
+ }
188
+ async createTablesIfNotExist() {
189
+ // Check if tables exist by trying to query them
190
+ const tablesExist = await this.checkTablesExist();
191
+ if (!tablesExist) {
192
+ // Create ViewState table
193
+ await this.db.schema
194
+ .createTable("ViewState")
195
+ .ifNotExists()
196
+ .addColumn("lastOperationId", "integer", (col) => col.primaryKey())
197
+ .addColumn("lastOperationTimestamp", "timestamptz", (col) => col.defaultTo("now()").notNull())
198
+ .execute();
199
+ // Create DocumentSnapshot table
200
+ await this.db.schema
201
+ .createTable("DocumentSnapshot")
202
+ .ifNotExists()
203
+ .addColumn("id", "text", (col) => col.primaryKey())
204
+ .addColumn("documentId", "text", (col) => col.notNull())
205
+ .addColumn("slug", "text")
206
+ .addColumn("name", "text")
207
+ .addColumn("scope", "text", (col) => col.notNull())
208
+ .addColumn("branch", "text", (col) => col.notNull())
209
+ .addColumn("content", "text", (col) => col.notNull())
210
+ .addColumn("documentType", "text", (col) => col.notNull())
211
+ .addColumn("lastOperationIndex", "integer", (col) => col.notNull())
212
+ .addColumn("lastOperationHash", "text", (col) => col.notNull())
213
+ .addColumn("lastUpdatedAt", "timestamptz", (col) => col.defaultTo("now()").notNull())
214
+ .addColumn("snapshotVersion", "integer", (col) => col.defaultTo(1).notNull())
215
+ .addColumn("identifiers", "text")
216
+ .addColumn("metadata", "text")
217
+ .addColumn("isDeleted", "boolean", (col) => col.defaultTo(false).notNull())
218
+ .addColumn("deletedAt", "timestamptz")
219
+ .addUniqueConstraint("unique_doc_scope_branch", [
220
+ "documentId",
221
+ "scope",
222
+ "branch",
223
+ ])
224
+ .execute();
225
+ // Create indexes for DocumentSnapshot
226
+ await this.db.schema
227
+ .createIndex("idx_slug_scope_branch")
228
+ .on("DocumentSnapshot")
229
+ .columns(["slug", "scope", "branch"])
230
+ .execute();
231
+ await this.db.schema
232
+ .createIndex("idx_doctype_scope_branch")
233
+ .on("DocumentSnapshot")
234
+ .columns(["documentType", "scope", "branch"])
235
+ .execute();
236
+ await this.db.schema
237
+ .createIndex("idx_last_updated")
238
+ .on("DocumentSnapshot")
239
+ .column("lastUpdatedAt")
240
+ .execute();
241
+ await this.db.schema
242
+ .createIndex("idx_is_deleted")
243
+ .on("DocumentSnapshot")
244
+ .column("isDeleted")
245
+ .execute();
246
+ // Create SlugMapping table
247
+ await this.db.schema
248
+ .createTable("SlugMapping")
249
+ .ifNotExists()
250
+ .addColumn("slug", "text", (col) => col.primaryKey())
251
+ .addColumn("documentId", "text", (col) => col.notNull())
252
+ .addColumn("scope", "text", (col) => col.notNull())
253
+ .addColumn("branch", "text", (col) => col.notNull())
254
+ .addColumn("createdAt", "timestamptz", (col) => col.defaultTo("now()").notNull())
255
+ .addColumn("updatedAt", "timestamptz", (col) => col.defaultTo("now()").notNull())
256
+ .addUniqueConstraint("unique_docid_scope_branch", [
257
+ "documentId",
258
+ "scope",
259
+ "branch",
260
+ ])
261
+ .execute();
262
+ // Create index for SlugMapping
263
+ await this.db.schema
264
+ .createIndex("idx_slug_documentid")
265
+ .on("SlugMapping")
266
+ .column("documentId")
267
+ .execute();
268
+ }
269
+ }
270
+ async checkTablesExist() {
271
+ try {
272
+ // Try to query ViewState table
273
+ await this.db
274
+ .selectFrom("ViewState")
275
+ .select("lastOperationId")
276
+ .limit(1)
277
+ .execute();
278
+ return true;
279
+ }
280
+ catch {
281
+ return false;
282
+ }
283
+ }
284
+ }
285
+ //# sourceMappingURL=document-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-view.js","sourceRoot":"","sources":["../../../src/read-models/document-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { Generated, Insertable, Selectable, Updateable } from "kysely";
2
+ export interface ViewStateTable {
3
+ lastOperationId: number;
4
+ lastOperationTimestamp: Generated<Date>;
5
+ }
6
+ export interface DocumentSnapshotTable {
7
+ id: Generated<string>;
8
+ documentId: string;
9
+ slug: string | null;
10
+ name: string | null;
11
+ scope: string;
12
+ branch: string;
13
+ content: string;
14
+ documentType: string;
15
+ lastOperationIndex: number;
16
+ lastOperationHash: string;
17
+ lastUpdatedAt: Generated<Date>;
18
+ snapshotVersion: Generated<number>;
19
+ identifiers: string | null;
20
+ metadata: string | null;
21
+ isDeleted: Generated<boolean>;
22
+ deletedAt: Date | null;
23
+ }
24
+ export interface SlugMappingTable {
25
+ slug: string;
26
+ documentId: string;
27
+ scope: string;
28
+ branch: string;
29
+ createdAt: Generated<Date>;
30
+ updatedAt: Generated<Date>;
31
+ }
32
+ export interface DocumentViewDatabase {
33
+ ViewState: ViewStateTable;
34
+ DocumentSnapshot: DocumentSnapshotTable;
35
+ SlugMapping: SlugMappingTable;
36
+ }
37
+ export type ViewStateRow = Selectable<ViewStateTable>;
38
+ export type InsertableViewState = Insertable<ViewStateTable>;
39
+ export type UpdateableViewState = Updateable<ViewStateTable>;
40
+ export type DocumentSnapshotRow = Selectable<DocumentSnapshotTable>;
41
+ export type InsertableDocumentSnapshot = Insertable<DocumentSnapshotTable>;
42
+ export type UpdateableDocumentSnapshot = Updateable<DocumentSnapshotTable>;
43
+ export type SlugMappingRow = Selectable<SlugMappingTable>;
44
+ export type InsertableSlugMapping = Insertable<SlugMappingTable>;
45
+ export type UpdateableSlugMapping = Updateable<SlugMappingTable>;
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/read-models/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE5E,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,EAAE,qBAAqB,CAAC;IACxC,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAC7D,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;AAE7D,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAC3E,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,qBAAqB,CAAC,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAC1D,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACjE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/read-models/types.ts"],"names":[],"mappings":""}
@@ -65,11 +65,11 @@ export class JobAwaiter {
65
65
  }
66
66
  startInterval() {
67
67
  if (this.intervalId === null && this.pendingJobs.size > 0) {
68
- this.intervalId = setInterval(async () => {
69
- await this.checkPendingJobs();
68
+ this.intervalId = setInterval(() => {
69
+ void this.checkPendingJobs();
70
70
  }, this.pollIntervalMs);
71
71
  // Check immediately as well - schedule it for next tick
72
- setTimeout(() => this.checkPendingJobs(), 0);
72
+ setTimeout(() => void this.checkPendingJobs(), 0);
73
73
  }
74
74
  }
75
75
  stopIntervalIfNoJobs() {
@@ -1 +1 @@
1
- {"version":3,"file":"awaiter.js","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"awaiter.js","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * The document ID used for system operations (CREATE_DOCUMENT, DELETE_DOCUMENT, etc.)
3
+ * System operations use this special ID along with the "system" scope.
4
+ */
5
+ export declare const SYSTEM_DOCUMENT_ID = "00000000-0000-0000-0000-000000000000";
1
6
  /**
2
7
  * Describes the status of a shutdown operation.
3
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;OAQG;IACH,IAAI,UAAU,IAAI,OAAO,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,oBAAY,SAAS;IACnB,wCAAwC;IACxC,OAAO,YAAY;IACnB,sCAAsC;IACtC,OAAO,YAAY;IACnB,iCAAiC;IACjC,SAAS,cAAc;IACvB,kCAAkC;IAClC,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IAEvB,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,kBAAkB,yCAAyC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;;;;OAQG;IACH,IAAI,UAAU,IAAI,OAAO,CAAC;CAC3B,CAAC;AAEF;;GAEG;AACH,oBAAY,eAAe;IACzB,IAAI,SAAS;IACb,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,UAAU;IACf,OAAO,YAAY;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,oBAAY,SAAS;IACnB,wCAAwC;IACxC,OAAO,YAAY;IACnB,sCAAsC;IACtC,OAAO,YAAY;IACnB,iCAAiC;IACjC,SAAS,cAAc;IACvB,kCAAkC;IAClC,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IAEvB,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * The document ID used for system operations (CREATE_DOCUMENT, DELETE_DOCUMENT, etc.)
3
+ * System operations use this special ID along with the "system" scope.
4
+ */
5
+ export const SYSTEM_DOCUMENT_ID = "00000000-0000-0000-0000-000000000000";
1
6
  /**
2
7
  * Enum that determines deletion propagation.
3
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,sCAAmB,CAAA;AACrB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,yCAAe,CAAA;IACf,6CAAmB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAcD;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,wCAAwC;IACxC,gCAAmB,CAAA;IACnB,sCAAsC;IACtC,gCAAmB,CAAA;IACnB,iCAAiC;IACjC,oCAAuB,CAAA;IACvB,kCAAkC;IAClC,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,sCAAsC,CAAC;AAkBzE;;GAEG;AACH,MAAM,CAAN,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,sCAAmB,CAAA;AACrB,CAAC,EAHW,eAAe,KAAf,eAAe,QAG1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,yCAAe,CAAA;IACf,6CAAmB,CAAA;AACrB,CAAC,EAHW,sBAAsB,KAAtB,sBAAsB,QAGjC;AAcD;;GAEG;AACH,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,wCAAwC;IACxC,gCAAmB,CAAA;IACnB,sCAAsC;IACtC,gCAAmB,CAAA;IACnB,iCAAiC;IACjC,oCAAuB,CAAA;IACvB,kCAAkC;IAClC,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB"}
@@ -0,0 +1,124 @@
1
+ import type { Operation, PHDocumentHeader } from "document-model";
2
+ export type OperationContext = {
3
+ documentId: string;
4
+ documentType: string;
5
+ scope: string;
6
+ branch: string;
7
+ };
8
+ export type OperationWithContext = {
9
+ operation: Operation;
10
+ context: OperationContext;
11
+ };
12
+ export declare class DuplicateOperationError extends Error {
13
+ constructor(opId: string);
14
+ }
15
+ export declare class OptimisticLockError extends Error {
16
+ constructor(message: string);
17
+ }
18
+ export declare class RevisionMismatchError extends Error {
19
+ constructor(expected: number, actual: number);
20
+ }
21
+ export interface AtomicTxn {
22
+ addOperations(...operations: Operation[]): void;
23
+ }
24
+ export type DocumentRevisions = {
25
+ /** Map of scope to operation index for that scope */
26
+ revision: Record<string, number>;
27
+ /** Latest timestamp across revisions */
28
+ latestTimestamp: string;
29
+ };
30
+ export interface IOperationStore {
31
+ apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<void>;
32
+ get(documentId: string, scope: string, branch: string, revision: number, signal?: AbortSignal): Promise<OperationWithContext>;
33
+ getSince(documentId: string, scope: string, branch: string, revision: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
34
+ getSinceTimestamp(documentId: string, scope: string, branch: string, timestampUtcMs: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
35
+ getSinceId(id: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
36
+ /**
37
+ * Gets the latest operation index for each scope of a document, along with
38
+ * the latest timestamp across all scopes. This is used to efficiently reconstruct
39
+ * the revision map and lastModified timestamp for document headers.
40
+ *
41
+ * @param documentId - The document id
42
+ * @param branch - The branch name
43
+ * @param signal - Optional abort signal to cancel the request
44
+ * @returns Object containing revision map and latest timestamp
45
+ */
46
+ getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
47
+ }
48
+ export interface ViewFilter {
49
+ branch?: string;
50
+ scopes?: string[];
51
+ }
52
+ export interface SearchFilter {
53
+ documentType?: string;
54
+ parentId?: string;
55
+ identifiers?: Record<string, any>;
56
+ }
57
+ export interface PagingOptions {
58
+ cursor?: string;
59
+ limit?: number;
60
+ }
61
+ export interface PagedResults<T> {
62
+ items: T[];
63
+ nextCursor?: string;
64
+ hasMore: boolean;
65
+ }
66
+ export interface DocumentSnapshot {
67
+ id: string;
68
+ documentId: string;
69
+ slug: string | null;
70
+ name: string | null;
71
+ scope: string;
72
+ branch: string;
73
+ content: string;
74
+ documentType: string;
75
+ lastOperationIndex: number;
76
+ lastOperationHash: string;
77
+ lastUpdatedAt: Date;
78
+ snapshotVersion: number;
79
+ identifiers: string | null;
80
+ metadata: string | null;
81
+ isDeleted: boolean;
82
+ deletedAt: Date | null;
83
+ }
84
+ export interface IDocumentView {
85
+ /**
86
+ * Initializes the view.
87
+ */
88
+ init(): Promise<void>;
89
+ /**
90
+ * Indexes a list of operations.
91
+ */
92
+ indexOperations(items: OperationWithContext[]): Promise<void>;
93
+ /**
94
+ * Retrieves a document header by reconstructing it from operations across all scopes.
95
+ *
96
+ * Headers contain cross-scope metadata (revision tracking, lastModified timestamps)
97
+ * that require aggregating information from multiple scopes, making this a
98
+ * view-layer concern rather than an operation store concern.
99
+ *
100
+ * @param documentId - The document id
101
+ * @param branch - The branch name
102
+ * @param signal - Optional abort signal to cancel the request
103
+ * @returns The reconstructed document header
104
+ */
105
+ getHeader(documentId: string, branch: string, signal?: AbortSignal): Promise<PHDocumentHeader>;
106
+ /**
107
+ * Returns true if and only if the documents exist.
108
+ *
109
+ * @param documentIds - The list of document ids to check.
110
+ * @param signal - Optional abort signal to cancel the request
111
+ */
112
+ exists(documentIds: string[], signal?: AbortSignal): Promise<boolean[]>;
113
+ /**
114
+ * Retrieves multiple document snapshots by their IDs.
115
+ *
116
+ * @param documentIds - The list of document ids to retrieve.
117
+ * @param scope - The scope to filter by (default: "global")
118
+ * @param branch - The branch to filter by (default: "main")
119
+ * @param signal - Optional abort signal to cancel the request
120
+ * @returns Array of document snapshots in the same order as input IDs (null for non-existent docs)
121
+ */
122
+ getMany(documentIds: string[], scope?: string, branch?: string, signal?: AbortSignal): Promise<(DocumentSnapshot | null)[]>;
123
+ }
124
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export class DuplicateOperationError extends Error {
2
+ constructor(opId) {
3
+ super(`Operation with opId ${opId} already exists`);
4
+ this.name = "DuplicateOperationError";
5
+ }
6
+ }
7
+ export class OptimisticLockError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "OptimisticLockError";
11
+ }
12
+ }
13
+ export class RevisionMismatchError extends Error {
14
+ constructor(expected, actual) {
15
+ super(`Revision mismatch: expected ${expected}, got ${actual}`);
16
+ this.name = "RevisionMismatchError";
17
+ }
18
+ }
19
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,IAAY;QACtB,KAAK,CAAC,uBAAuB,IAAI,iBAAiB,CAAC,CAAC;QACpD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CAAC,+BAA+B,QAAQ,SAAS,MAAM,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { Kysely } from "kysely";
2
+ import { type AtomicTxn, type DocumentRevisions, type IOperationStore, type OperationWithContext } from "../interfaces.js";
3
+ import type { Database } from "./types.js";
4
+ export declare class KyselyOperationStore implements IOperationStore {
5
+ private db;
6
+ constructor(db: Kysely<Database>);
7
+ apply(documentId: string, documentType: string, scope: string, branch: string, revision: number, fn: (txn: AtomicTxn) => void | Promise<void>, signal?: AbortSignal): Promise<void>;
8
+ get(documentId: string, scope: string, branch: string, index: number, signal?: AbortSignal): Promise<OperationWithContext>;
9
+ getSince(documentId: string, scope: string, branch: string, index: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
10
+ getSinceTimestamp(documentId: string, scope: string, branch: string, timestampUtcMs: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
11
+ getSinceId(id: number, signal?: AbortSignal): Promise<OperationWithContext[]>;
12
+ getRevisions(documentId: string, branch: string, signal?: AbortSignal): Promise<DocumentRevisions>;
13
+ private rowToOperationWithContext;
14
+ }
15
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AAEzD,qBAAa,oBAAqB,YAAW,eAAe;IAC9C,OAAO,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;IAElC,KAAK,CACT,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC5C,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC;IAiEV,GAAG,CACP,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC;IAuB1B,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAkB5B,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAkB5B,UAAU,CACd,EAAE,EAAE,MAAM,EACV,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAe5B,YAAY,CAChB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,iBAAiB,CAAC;IA4C7B,OAAO,CAAC,yBAAyB;CAoBlC"}