@powerhousedao/reactor 4.1.0-dev.41 → 4.1.0-dev.43

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 (36) hide show
  1. package/dist/bench/event-bus.bench.js.map +1 -1
  2. package/dist/src/events/event-bus.d.ts +2 -2
  3. package/dist/src/events/event-bus.d.ts.map +1 -1
  4. package/dist/src/events/event-bus.js +1 -1
  5. package/dist/src/events/event-bus.js.map +1 -1
  6. package/dist/src/events/interfaces.d.ts +1 -1
  7. package/dist/src/events/interfaces.d.ts.map +1 -1
  8. package/dist/src/events/types.d.ts +1 -1
  9. package/dist/src/events/types.d.ts.map +1 -1
  10. package/dist/src/events/types.js.map +1 -1
  11. package/dist/src/executor/interfaces.d.ts +2 -2
  12. package/dist/src/executor/interfaces.d.ts.map +1 -1
  13. package/dist/src/executor/job-executor.js +1 -1
  14. package/dist/src/executor/job-executor.js.map +1 -1
  15. package/dist/src/executor/types.d.ts +1 -1
  16. package/dist/src/executor/types.d.ts.map +1 -1
  17. package/dist/src/queue/interfaces.d.ts +1 -1
  18. package/dist/src/queue/interfaces.d.ts.map +1 -1
  19. package/dist/src/reactor.d.ts +15 -5
  20. package/dist/src/reactor.d.ts.map +1 -1
  21. package/dist/src/reactor.js +210 -215
  22. package/dist/src/reactor.js.map +1 -1
  23. package/dist/test/reactor-read.test.d.ts +2 -0
  24. package/dist/test/reactor-read.test.d.ts.map +1 -0
  25. package/dist/test/reactor-read.test.js +330 -0
  26. package/dist/test/reactor-read.test.js.map +1 -0
  27. package/dist/test/reactor-write.test.d.ts +2 -0
  28. package/dist/test/reactor-write.test.d.ts.map +1 -0
  29. package/dist/test/reactor-write.test.js +232 -0
  30. package/dist/test/reactor-write.test.js.map +1 -0
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +3 -3
  33. package/dist/test/reactor.test.d.ts +0 -2
  34. package/dist/test/reactor.test.d.ts.map +0 -1
  35. package/dist/test/reactor.test.js +0 -445
  36. package/dist/test/reactor.test.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powerhousedao/reactor",
3
- "version": "4.1.0-dev.41",
3
+ "version": "4.1.0-dev.43",
4
4
  "description": "",
5
5
  "repository": {
6
6
  "url": "https://github.com/powerhouse-inc/powerhouse",
@@ -25,8 +25,8 @@
25
25
  "license": "AGPL-3.0-only",
26
26
  "dependencies": {
27
27
  "uuid": "^11.0.5",
28
- "document-drive": "4.1.0-dev.41",
29
- "document-model": "4.1.0-dev.41"
28
+ "document-drive": "4.1.0-dev.43",
29
+ "document-model": "4.1.0-dev.43"
30
30
  },
31
31
  "devDependencies": {
32
32
  "typescript": "^5.7.3",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=reactor.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reactor.test.d.ts","sourceRoot":"","sources":["../../test/reactor.test.ts"],"names":[],"mappings":""}
@@ -1,445 +0,0 @@
1
- import { beforeEach, describe, expect, it, vi } from "vitest";
2
- import { Reactor } from "../src/reactor.js";
3
- import { JobStatus, PropagationMode } from "../src/shared/types.js";
4
- // Mock BaseDocumentDriveServer with proper interface
5
- const mockDriveServer = {
6
- getDocumentModelModules: vi.fn(),
7
- getDocument: vi.fn(),
8
- getDocuments: vi.fn(),
9
- getDrives: vi.fn(),
10
- addDocument: vi.fn(),
11
- deleteDocument: vi.fn(),
12
- addOperations: vi.fn(),
13
- };
14
- // Helper to create a valid PHDocument
15
- function createMockDocument(overrides = {}) {
16
- const baseDoc = {
17
- header: {
18
- id: "doc1",
19
- sig: {
20
- publicKey: {},
21
- nonce: "nonce",
22
- },
23
- documentType: "test",
24
- createdAtUtcIso: "2023-01-01T00:00:00.000Z",
25
- slug: "test-doc",
26
- name: "Test Document",
27
- branch: "main",
28
- revision: { global: 1 },
29
- lastModifiedAtUtcIso: "2023-01-01T00:00:00.000Z",
30
- ...overrides.header,
31
- },
32
- state: {
33
- auth: {},
34
- document: { version: "1.0.0" },
35
- ...overrides.state,
36
- },
37
- history: {},
38
- initialState: {
39
- auth: {},
40
- document: { version: "1.0.0" },
41
- },
42
- operations: {},
43
- };
44
- return baseDoc;
45
- }
46
- describe("Reactor", () => {
47
- let reactor;
48
- beforeEach(() => {
49
- vi.clearAllMocks();
50
- reactor = new Reactor(mockDriveServer);
51
- });
52
- describe("kill", () => {
53
- it("should return a shutdown status", () => {
54
- const status = reactor.kill();
55
- expect(status.isShutdown).toBe(true);
56
- });
57
- it("should maintain shutdown state", () => {
58
- const status = reactor.kill();
59
- expect(status.isShutdown).toBe(true);
60
- // Check again to ensure state is maintained
61
- expect(status.isShutdown).toBe(true);
62
- });
63
- });
64
- describe("getDocumentModels", () => {
65
- it("should retrieve document models", async () => {
66
- const mockModules = [
67
- {
68
- documentModel: {
69
- id: "model1",
70
- name: "TestModel",
71
- extension: ".test",
72
- specifications: [],
73
- author: { name: "Test Author", website: "test.com" },
74
- description: "Test description",
75
- },
76
- },
77
- {
78
- documentModel: {
79
- id: "model2",
80
- name: "AnotherModel",
81
- extension: ".another",
82
- specifications: [],
83
- author: { name: "Test Author", website: "test.com" },
84
- description: "Another description",
85
- },
86
- },
87
- ];
88
- mockDriveServer.getDocumentModelModules.mockReturnValue(mockModules);
89
- const result = await reactor.getDocumentModels();
90
- expect(mockDriveServer.getDocumentModelModules).toHaveBeenCalledOnce();
91
- expect(result.results).toHaveLength(2);
92
- expect(result.results[0]).toMatchObject({
93
- id: "model1",
94
- name: "TestModel",
95
- extension: ".test",
96
- author: { name: "Test Author", website: "test.com" },
97
- description: "Test description",
98
- });
99
- });
100
- it("should handle paging", async () => {
101
- const mockModules = Array.from({ length: 10 }, (_, i) => ({
102
- documentModel: {
103
- id: `model${i}`,
104
- name: `Model${i}`,
105
- extension: `.ext${i}`,
106
- specifications: [],
107
- },
108
- }));
109
- mockDriveServer.getDocumentModelModules.mockReturnValue(mockModules);
110
- const result = await reactor.getDocumentModels(undefined, {
111
- cursor: "2",
112
- limit: 3,
113
- });
114
- expect(result.results).toHaveLength(3);
115
- expect(result.results[0].id).toBe("model2");
116
- expect(result.nextCursor).toBe("5");
117
- expect(result.next).toBeDefined();
118
- });
119
- });
120
- describe("get", () => {
121
- it("should retrieve a document by id", async () => {
122
- const mockDocument = createMockDocument();
123
- mockDriveServer.getDocument.mockResolvedValue(mockDocument);
124
- mockDriveServer.getDocuments.mockResolvedValue(["child1", "child2"]);
125
- const result = await reactor.get("doc1");
126
- expect(mockDriveServer.getDocument).toHaveBeenCalledWith("doc1");
127
- expect(mockDriveServer.getDocuments).toHaveBeenCalledWith("doc1");
128
- expect(result.document).toEqual(mockDocument);
129
- expect(result.childIds).toEqual(["child1", "child2"]);
130
- });
131
- it("should filter by scopes when view filter is provided", async () => {
132
- const mockDocument = createMockDocument();
133
- // Add scoped data to the state in a type-safe way
134
- mockDocument.state.global = { someData: "global" };
135
- mockDocument.state.local = { someData: "local" };
136
- mockDocument.state.private = { someData: "private" };
137
- mockDriveServer.getDocument.mockResolvedValue(mockDocument);
138
- mockDriveServer.getDocuments.mockResolvedValue([]);
139
- const result = await reactor.get("doc1", { scopes: ["global", "local"] });
140
- expect(result.document.state).toHaveProperty("global");
141
- expect(result.document.state).toHaveProperty("local");
142
- expect(result.document.state).not.toHaveProperty("private");
143
- });
144
- it("should throw error if document not found", async () => {
145
- mockDriveServer.getDocument.mockResolvedValue(null);
146
- await expect(reactor.get("nonexistent")).rejects.toThrow("Document not found: nonexistent");
147
- });
148
- });
149
- describe("getBySlug", () => {
150
- it("should retrieve a document by slug", async () => {
151
- const mockDocument = createMockDocument({
152
- header: { slug: "test-slug" },
153
- });
154
- mockDriveServer.getDrives.mockResolvedValue(["drive1"]);
155
- mockDriveServer.getDocuments
156
- .mockResolvedValueOnce(["doc1"]) // documents in drive1
157
- .mockResolvedValueOnce([]); // children of doc1
158
- mockDriveServer.getDocument.mockResolvedValue(mockDocument);
159
- const result = await reactor.getBySlug("test-slug");
160
- expect(result.document.header.slug).toBe("test-slug");
161
- expect(result.childIds).toEqual([]);
162
- });
163
- it("should throw error if document with slug not found", async () => {
164
- mockDriveServer.getDrives.mockResolvedValue([]);
165
- await expect(reactor.getBySlug("nonexistent")).rejects.toThrow("Document not found with slug: nonexistent");
166
- });
167
- });
168
- describe("getOperations", () => {
169
- it("should retrieve operations for a document", async () => {
170
- const mockOperations = {
171
- global: [
172
- {
173
- index: 0,
174
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
175
- hash: "hash1",
176
- skip: 0,
177
- action: {
178
- id: "action1",
179
- type: "CREATE",
180
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
181
- input: {},
182
- scope: "global",
183
- },
184
- },
185
- ],
186
- local: [
187
- {
188
- index: 1,
189
- timestampUtcMs: "2023-01-02T00:00:00.000Z",
190
- hash: "hash2",
191
- skip: 0,
192
- action: {
193
- id: "action2",
194
- type: "UPDATE",
195
- timestampUtcMs: "2023-01-02T00:00:00.000Z",
196
- input: { field: "value" },
197
- scope: "local",
198
- },
199
- },
200
- ],
201
- };
202
- const mockDocument = { operations: mockOperations };
203
- mockDriveServer.getDocument.mockResolvedValue(mockDocument);
204
- const result = await reactor.getOperations("doc1");
205
- expect(mockDriveServer.getDocument).toHaveBeenCalledWith("doc1");
206
- expect(result).toHaveProperty("global");
207
- expect(result).toHaveProperty("local");
208
- expect(result.global.results).toEqual(mockOperations.global);
209
- expect(result.local.results).toEqual(mockOperations.local);
210
- });
211
- it("should filter operations by scopes", async () => {
212
- const mockOperations = {
213
- global: [
214
- {
215
- index: 0,
216
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
217
- hash: "hash1",
218
- skip: 0,
219
- action: {
220
- id: "action1",
221
- type: "CREATE",
222
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
223
- input: {},
224
- scope: "global",
225
- },
226
- },
227
- ],
228
- local: [
229
- {
230
- index: 1,
231
- timestampUtcMs: "2023-01-02T00:00:00.000Z",
232
- hash: "hash2",
233
- skip: 0,
234
- action: {
235
- id: "action2",
236
- type: "UPDATE",
237
- timestampUtcMs: "2023-01-02T00:00:00.000Z",
238
- input: {},
239
- scope: "local",
240
- },
241
- },
242
- ],
243
- private: [
244
- {
245
- index: 2,
246
- timestampUtcMs: "2023-01-03T00:00:00.000Z",
247
- hash: "hash3",
248
- skip: 0,
249
- action: {
250
- id: "action3",
251
- type: "DELETE",
252
- timestampUtcMs: "2023-01-03T00:00:00.000Z",
253
- input: {},
254
- scope: "private",
255
- },
256
- },
257
- ],
258
- };
259
- const mockDocument = { operations: mockOperations };
260
- mockDriveServer.getDocument.mockResolvedValue(mockDocument);
261
- const result = await reactor.getOperations("doc1", {
262
- scopes: ["global", "local"],
263
- });
264
- expect(result).toHaveProperty("global");
265
- expect(result).toHaveProperty("local");
266
- expect(result).not.toHaveProperty("private");
267
- });
268
- });
269
- describe("find", () => {
270
- it("should filter documents by type", async () => {
271
- const mockDocument1 = createMockDocument({
272
- header: { id: "doc1", documentType: "type1" },
273
- });
274
- const mockDocument2 = createMockDocument({
275
- header: { id: "doc2", documentType: "type2" },
276
- });
277
- mockDriveServer.getDrives.mockResolvedValue(["drive1"]);
278
- mockDriveServer.getDocuments.mockResolvedValue(["doc1", "doc2"]);
279
- mockDriveServer.getDocument
280
- .mockResolvedValueOnce(mockDocument1)
281
- .mockResolvedValueOnce(mockDocument2);
282
- const result = await reactor.find({ type: "type1" });
283
- expect(result.results).toHaveLength(1);
284
- expect(result.results[0].header.id).toBe("doc1");
285
- });
286
- it("should filter documents by ids", async () => {
287
- const mockDocuments = Array.from({ length: 5 }, (_, i) => createMockDocument({ header: { id: `doc${i}` } }));
288
- // Reset mock to ensure clean state
289
- mockDriveServer.getDocument.mockReset();
290
- mockDriveServer.getDrives.mockResolvedValue(["drive1"]);
291
- mockDriveServer.getDocuments.mockResolvedValue(mockDocuments.map((d) => d.header.id));
292
- mockDriveServer.getDocument.mockImplementation(async (id) => {
293
- return mockDocuments.find((d) => d.header.id === id) || null;
294
- });
295
- const result = await reactor.find({ ids: ["doc1", "doc3"] });
296
- expect(result.results).toHaveLength(2);
297
- expect(result.results.map((d) => d.header.id)).toEqual(["doc1", "doc3"]);
298
- });
299
- it("should filter documents by scopes when view filter is provided", async () => {
300
- const mockDocument = createMockDocument();
301
- // Add scoped data to the state in a type-safe way
302
- mockDocument.state.global = { someData: "global" };
303
- mockDocument.state.local = { someData: "local" };
304
- mockDocument.state.private = { someData: "private" };
305
- mockDriveServer.getDrives.mockResolvedValue(["drive1"]);
306
- mockDriveServer.getDocuments.mockResolvedValue(["doc1"]);
307
- mockDriveServer.getDocument.mockResolvedValue(mockDocument);
308
- const result = await reactor.find({}, { scopes: ["global"] });
309
- expect(result.results[0].state).toHaveProperty("global");
310
- expect(result.results[0].state).not.toHaveProperty("local");
311
- expect(result.results[0].state).not.toHaveProperty("private");
312
- });
313
- });
314
- describe("create", () => {
315
- it("should create a document successfully", async () => {
316
- const mockDocument = createMockDocument({ header: { id: "new-doc" } });
317
- mockDriveServer.addDocument.mockResolvedValue(mockDocument);
318
- const status = await reactor.create(mockDocument);
319
- expect(mockDriveServer.addDocument).toHaveBeenCalledWith(mockDocument);
320
- expect(status).toBe(JobStatus.COMPLETED);
321
- });
322
- it("should return failed status on error", async () => {
323
- const mockDocument = createMockDocument({ header: { id: "new-doc" } });
324
- mockDriveServer.addDocument.mockRejectedValue(new Error("Create failed"));
325
- const status = await reactor.create(mockDocument);
326
- expect(status).toBe(JobStatus.FAILED);
327
- });
328
- });
329
- describe("deleteDocument", () => {
330
- it("should delete a document successfully", async () => {
331
- mockDriveServer.deleteDocument.mockResolvedValue(undefined);
332
- const jobInfo = await reactor.deleteDocument("doc1");
333
- expect(mockDriveServer.deleteDocument).toHaveBeenCalledWith("doc1");
334
- expect(jobInfo.status).toBe(JobStatus.COMPLETED);
335
- expect(jobInfo.id).toBeDefined();
336
- expect(jobInfo.error).toBeUndefined();
337
- });
338
- it("should return failed job info on error", async () => {
339
- mockDriveServer.deleteDocument.mockRejectedValue(new Error("Delete failed"));
340
- const jobInfo = await reactor.deleteDocument("doc1");
341
- expect(jobInfo.status).toBe(JobStatus.FAILED);
342
- expect(jobInfo.error).toBe("Delete failed");
343
- });
344
- it("should accept propagation mode parameter", async () => {
345
- mockDriveServer.deleteDocument.mockResolvedValue(undefined);
346
- const jobInfo = await reactor.deleteDocument("doc1", PropagationMode.Cascade);
347
- expect(jobInfo.status).toBe(JobStatus.COMPLETED);
348
- // TODO: Verify cascade deletion when implemented
349
- });
350
- });
351
- describe("mutate", () => {
352
- it("should apply actions to a document", async () => {
353
- const actions = [
354
- {
355
- id: "action1",
356
- type: "UPDATE",
357
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
358
- input: { field: "value" },
359
- scope: "global",
360
- },
361
- {
362
- id: "action2",
363
- type: "UPDATE",
364
- timestampUtcMs: "2023-01-02T00:00:00.000Z",
365
- input: { field2: "value2" },
366
- scope: "global",
367
- },
368
- ];
369
- mockDriveServer.addOperations.mockResolvedValue({ success: true });
370
- const jobInfo = await reactor.mutate("doc1", actions);
371
- expect(mockDriveServer.addOperations).toHaveBeenCalledWith("doc1", expect.arrayContaining([
372
- expect.objectContaining({
373
- index: 0,
374
- action: actions[0],
375
- }),
376
- expect.objectContaining({
377
- index: 1,
378
- action: actions[1],
379
- }),
380
- ]));
381
- expect(jobInfo.status).toBe(JobStatus.COMPLETED);
382
- });
383
- it("should return failed job info on error", async () => {
384
- const actions = [
385
- {
386
- id: "action1",
387
- type: "UPDATE",
388
- timestampUtcMs: "2023-01-01T00:00:00.000Z",
389
- input: { field: "value" },
390
- scope: "global",
391
- },
392
- ];
393
- mockDriveServer.addOperations.mockRejectedValue(new Error("Mutation failed"));
394
- const jobInfo = await reactor.mutate("doc1", actions);
395
- expect(jobInfo.status).toBe(JobStatus.FAILED);
396
- expect(jobInfo.error).toBe("Mutation failed");
397
- });
398
- });
399
- describe("addChildren", () => {
400
- it("should verify parent and children exist", async () => {
401
- const parentDoc = createMockDocument({ header: { id: "parent" } });
402
- const childDoc = createMockDocument({ header: { id: "child1" } });
403
- mockDriveServer.getDocument
404
- .mockResolvedValueOnce(parentDoc)
405
- .mockResolvedValueOnce(childDoc);
406
- const jobInfo = await reactor.addChildren("parent", ["child1"]);
407
- expect(mockDriveServer.getDocument).toHaveBeenCalledWith("parent");
408
- expect(mockDriveServer.getDocument).toHaveBeenCalledWith("child1");
409
- expect(jobInfo.status).toBe(JobStatus.COMPLETED);
410
- });
411
- it("should return failed job info if parent not found", async () => {
412
- mockDriveServer.getDocument.mockRejectedValue(new Error("Document not found"));
413
- const jobInfo = await reactor.addChildren("nonexistent", ["child1"]);
414
- expect(jobInfo.status).toBe(JobStatus.FAILED);
415
- expect(jobInfo.error).toBe("Document not found");
416
- });
417
- });
418
- describe("removeChildren", () => {
419
- it("should verify parent exists", async () => {
420
- const parentDoc = createMockDocument({ header: { id: "parent" } });
421
- mockDriveServer.getDocument.mockResolvedValue(parentDoc);
422
- const jobInfo = await reactor.removeChildren("parent", [
423
- "child1",
424
- "child2",
425
- ]);
426
- expect(mockDriveServer.getDocument).toHaveBeenCalledWith("parent");
427
- expect(jobInfo.status).toBe(JobStatus.COMPLETED);
428
- });
429
- it("should return failed job info if parent not found", async () => {
430
- mockDriveServer.getDocument.mockRejectedValue(new Error("Parent not found"));
431
- const jobInfo = await reactor.removeChildren("nonexistent", ["child1"]);
432
- expect(jobInfo.status).toBe(JobStatus.FAILED);
433
- expect(jobInfo.error).toBe("Parent not found");
434
- });
435
- });
436
- describe("getJobStatus", () => {
437
- it("should return not implemented status", async () => {
438
- const jobInfo = await reactor.getJobStatus("job-123");
439
- expect(jobInfo.id).toBe("job-123");
440
- expect(jobInfo.status).toBe(JobStatus.FAILED);
441
- expect(jobInfo.error).toBe("Job tracking not yet implemented");
442
- });
443
- });
444
- });
445
- //# sourceMappingURL=reactor.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reactor.test.js","sourceRoot":"","sources":["../../test/reactor.test.ts"],"names":[],"mappings":"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"}