@powerhousedao/reactor 4.1.0-dev.7 → 4.1.0-dev.71

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 (173) hide show
  1. package/dist/src/client/reactor-client.d.ts +103 -0
  2. package/dist/src/client/reactor-client.d.ts.map +1 -0
  3. package/dist/src/client/reactor-client.js +184 -0
  4. package/dist/src/client/reactor-client.js.map +1 -0
  5. package/dist/src/client/types.d.ts +213 -0
  6. package/dist/src/client/types.d.ts.map +1 -0
  7. package/dist/src/client/types.js +14 -0
  8. package/dist/src/client/types.js.map +1 -0
  9. package/dist/src/core/builder.d.ts +20 -0
  10. package/dist/src/core/builder.d.ts.map +1 -0
  11. package/dist/src/core/builder.js +47 -0
  12. package/dist/src/core/builder.js.map +1 -0
  13. package/dist/src/core/reactor.d.ts +98 -0
  14. package/dist/src/core/reactor.d.ts.map +1 -0
  15. package/dist/src/core/reactor.js +630 -0
  16. package/dist/src/core/reactor.js.map +1 -0
  17. package/dist/src/core/types.d.ts +121 -0
  18. package/dist/src/core/types.d.ts.map +1 -0
  19. package/dist/src/core/types.js +2 -0
  20. package/dist/src/core/types.js.map +1 -0
  21. package/dist/src/core/utils.d.ts +11 -0
  22. package/dist/src/core/utils.d.ts.map +1 -0
  23. package/dist/src/core/utils.js +31 -0
  24. package/dist/src/core/utils.js.map +1 -0
  25. package/dist/src/events/event-bus.d.ts +3 -3
  26. package/dist/src/events/event-bus.d.ts.map +1 -1
  27. package/dist/src/events/event-bus.js.map +1 -1
  28. package/dist/src/events/interfaces.d.ts +1 -1
  29. package/dist/src/events/interfaces.d.ts.map +1 -1
  30. package/dist/src/events/types.d.ts +1 -1
  31. package/dist/src/events/types.d.ts.map +1 -1
  32. package/dist/src/events/types.js.map +1 -1
  33. package/dist/src/executor/interfaces.d.ts +31 -54
  34. package/dist/src/executor/interfaces.d.ts.map +1 -1
  35. package/dist/src/executor/simple-job-executor-manager.d.ts +27 -0
  36. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -0
  37. package/dist/src/executor/simple-job-executor-manager.js +128 -0
  38. package/dist/src/executor/simple-job-executor-manager.js.map +1 -0
  39. package/dist/src/executor/simple-job-executor.d.ts +29 -0
  40. package/dist/src/executor/simple-job-executor.d.ts.map +1 -0
  41. package/dist/src/executor/simple-job-executor.js +154 -0
  42. package/dist/src/executor/simple-job-executor.js.map +1 -0
  43. package/dist/src/executor/types.d.ts +23 -8
  44. package/dist/src/executor/types.d.ts.map +1 -1
  45. package/dist/src/executor/types.js.map +1 -1
  46. package/dist/src/index.d.ts +19 -2
  47. package/dist/src/index.d.ts.map +1 -1
  48. package/dist/src/index.js +25 -1
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/queue/interfaces.d.ts +45 -5
  51. package/dist/src/queue/interfaces.d.ts.map +1 -1
  52. package/dist/src/queue/job-execution-handle.d.ts +24 -0
  53. package/dist/src/queue/job-execution-handle.d.ts.map +1 -0
  54. package/dist/src/queue/job-execution-handle.js +62 -0
  55. package/dist/src/queue/job-execution-handle.js.map +1 -0
  56. package/dist/src/queue/queue.d.ts +54 -5
  57. package/dist/src/queue/queue.d.ts.map +1 -1
  58. package/dist/src/queue/queue.js +265 -36
  59. package/dist/src/queue/queue.js.map +1 -1
  60. package/dist/src/queue/types.d.ts +26 -1
  61. package/dist/src/queue/types.d.ts.map +1 -1
  62. package/dist/src/queue/types.js +12 -0
  63. package/dist/src/queue/types.js.map +1 -1
  64. package/dist/src/read-models/document-view.d.ts +21 -0
  65. package/dist/src/read-models/document-view.d.ts.map +1 -0
  66. package/dist/src/read-models/document-view.js +285 -0
  67. package/dist/src/read-models/document-view.js.map +1 -0
  68. package/dist/src/read-models/types.d.ts +46 -0
  69. package/dist/src/read-models/types.d.ts.map +1 -0
  70. package/dist/src/read-models/types.js +2 -0
  71. package/dist/src/read-models/types.js.map +1 -0
  72. package/dist/src/registry/implementation.d.ts +62 -0
  73. package/dist/src/registry/implementation.d.ts.map +1 -0
  74. package/dist/src/registry/implementation.js +96 -0
  75. package/dist/src/registry/implementation.js.map +1 -0
  76. package/dist/src/registry/index.d.ts +3 -0
  77. package/dist/src/registry/index.d.ts.map +1 -0
  78. package/dist/src/registry/index.js +2 -0
  79. package/dist/src/registry/index.js.map +1 -0
  80. package/dist/src/registry/interfaces.d.ts +39 -0
  81. package/dist/src/registry/interfaces.d.ts.map +1 -0
  82. package/dist/src/registry/interfaces.js +2 -0
  83. package/dist/src/registry/interfaces.js.map +1 -0
  84. package/dist/src/shared/awaiter.d.ts +32 -0
  85. package/dist/src/shared/awaiter.d.ts.map +1 -0
  86. package/dist/src/shared/awaiter.js +132 -0
  87. package/dist/src/shared/awaiter.js.map +1 -0
  88. package/dist/src/shared/errors.d.ts +9 -0
  89. package/dist/src/shared/errors.d.ts.map +1 -0
  90. package/dist/src/shared/errors.js +18 -0
  91. package/dist/src/shared/errors.js.map +1 -0
  92. package/dist/src/shared/factories.d.ts +16 -0
  93. package/dist/src/shared/factories.d.ts.map +1 -0
  94. package/dist/src/shared/factories.js +33 -0
  95. package/dist/src/shared/factories.js.map +1 -0
  96. package/dist/src/shared/types.d.ts +91 -19
  97. package/dist/src/shared/types.d.ts.map +1 -1
  98. package/dist/src/shared/types.js +35 -1
  99. package/dist/src/shared/types.js.map +1 -1
  100. package/dist/src/shared/utils.d.ts +3 -0
  101. package/dist/src/shared/utils.d.ts.map +1 -0
  102. package/dist/src/shared/utils.js +8 -0
  103. package/dist/src/shared/utils.js.map +1 -0
  104. package/dist/src/signer/passthrough-signer.d.ts +6 -0
  105. package/dist/src/signer/passthrough-signer.d.ts.map +1 -0
  106. package/dist/src/signer/passthrough-signer.js +6 -0
  107. package/dist/src/signer/passthrough-signer.js.map +1 -0
  108. package/dist/src/signer/types.d.ts +15 -0
  109. package/dist/src/signer/types.d.ts.map +1 -0
  110. package/dist/src/signer/types.js +2 -0
  111. package/dist/src/signer/types.js.map +1 -0
  112. package/dist/src/storage/interfaces.d.ts +125 -0
  113. package/dist/src/storage/interfaces.d.ts.map +1 -0
  114. package/dist/src/storage/interfaces.js +19 -0
  115. package/dist/src/storage/interfaces.js.map +1 -0
  116. package/dist/src/storage/kysely/store.d.ts +15 -0
  117. package/dist/src/storage/kysely/store.d.ts.map +1 -0
  118. package/dist/src/storage/kysely/store.js +173 -0
  119. package/dist/src/storage/kysely/store.js.map +1 -0
  120. package/dist/src/storage/kysely/types.d.ts +26 -0
  121. package/dist/src/storage/kysely/types.d.ts.map +1 -0
  122. package/dist/src/storage/kysely/types.js +2 -0
  123. package/dist/src/storage/kysely/types.js.map +1 -0
  124. package/dist/src/storage/txn.d.ts +15 -0
  125. package/dist/src/storage/txn.d.ts.map +1 -0
  126. package/dist/src/storage/txn.js +42 -0
  127. package/dist/src/storage/txn.js.map +1 -0
  128. package/dist/src/subs/default-error-handler.d.ts +13 -0
  129. package/dist/src/subs/default-error-handler.d.ts.map +1 -0
  130. package/dist/src/subs/default-error-handler.js +27 -0
  131. package/dist/src/subs/default-error-handler.js.map +1 -0
  132. package/dist/src/subs/react-subscription-manager.d.ts +45 -0
  133. package/dist/src/subs/react-subscription-manager.d.ts.map +1 -0
  134. package/dist/src/subs/react-subscription-manager.js +185 -0
  135. package/dist/src/subs/react-subscription-manager.js.map +1 -0
  136. package/dist/src/subs/types.d.ts +64 -0
  137. package/dist/src/subs/types.d.ts.map +1 -0
  138. package/dist/src/subs/types.js +2 -0
  139. package/dist/src/subs/types.js.map +1 -0
  140. package/package.json +13 -5
  141. package/dist/bench/end-to-end-flow.bench.d.ts +0 -2
  142. package/dist/bench/end-to-end-flow.bench.d.ts.map +0 -1
  143. package/dist/bench/end-to-end-flow.bench.js +0 -256
  144. package/dist/bench/end-to-end-flow.bench.js.map +0 -1
  145. package/dist/bench/event-bus.bench.d.ts +0 -2
  146. package/dist/bench/event-bus.bench.d.ts.map +0 -1
  147. package/dist/bench/event-bus.bench.js +0 -238
  148. package/dist/bench/event-bus.bench.js.map +0 -1
  149. package/dist/bench/queue-only.bench.d.ts +0 -2
  150. package/dist/bench/queue-only.bench.d.ts.map +0 -1
  151. package/dist/bench/queue-only.bench.js +0 -40
  152. package/dist/bench/queue-only.bench.js.map +0 -1
  153. package/dist/bench/reactor-throughput.bench.d.ts +0 -2
  154. package/dist/bench/reactor-throughput.bench.d.ts.map +0 -1
  155. package/dist/bench/reactor-throughput.bench.js +0 -137
  156. package/dist/bench/reactor-throughput.bench.js.map +0 -1
  157. package/dist/src/executor/job-executor.d.ts +0 -62
  158. package/dist/src/executor/job-executor.d.ts.map +0 -1
  159. package/dist/src/executor/job-executor.js +0 -325
  160. package/dist/src/executor/job-executor.js.map +0 -1
  161. package/dist/test/event-bus.test.d.ts +0 -2
  162. package/dist/test/event-bus.test.d.ts.map +0 -1
  163. package/dist/test/event-bus.test.js +0 -532
  164. package/dist/test/event-bus.test.js.map +0 -1
  165. package/dist/test/job-executor.test.d.ts +0 -2
  166. package/dist/test/job-executor.test.d.ts.map +0 -1
  167. package/dist/test/job-executor.test.js +0 -581
  168. package/dist/test/job-executor.test.js.map +0 -1
  169. package/dist/test/queue.test.d.ts +0 -2
  170. package/dist/test/queue.test.d.ts.map +0 -1
  171. package/dist/test/queue.test.js +0 -396
  172. package/dist/test/queue.test.js.map +0 -1
  173. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,132 @@
1
+ import { JobStatus } from "./types.js";
2
+ /**
3
+ * Default implementation of IJobAwaiter that polls for job status.
4
+ * Uses a single interval timer to check all pending jobs.
5
+ */
6
+ export class JobAwaiter {
7
+ getJobStatus;
8
+ pollIntervalMs;
9
+ // Map from job ID to list of waiters (multiple waiters can wait for same job)
10
+ pendingJobs = new Map();
11
+ intervalId = null;
12
+ constructor(getJobStatus, pollIntervalMs = 10) {
13
+ this.getJobStatus = getJobStatus;
14
+ this.pollIntervalMs = pollIntervalMs;
15
+ //
16
+ }
17
+ shutdown() {
18
+ if (this.intervalId !== null) {
19
+ clearInterval(this.intervalId);
20
+ this.intervalId = null;
21
+ }
22
+ // Reject all pending jobs
23
+ for (const [, waiters] of this.pendingJobs) {
24
+ for (const waiter of waiters) {
25
+ waiter.reject(new Error("JobAwaiter destroyed"));
26
+ }
27
+ }
28
+ this.pendingJobs.clear();
29
+ }
30
+ async waitForJob(jobId, signal) {
31
+ // Check if signal is already aborted
32
+ if (signal?.aborted) {
33
+ throw new Error("Operation aborted");
34
+ }
35
+ // Create promise for this job
36
+ const promise = new Promise((resolve, reject) => {
37
+ const waiter = { resolve, reject, signal };
38
+ // Add to the list of waiters for this job
39
+ const existingWaiters = this.pendingJobs.get(jobId) || [];
40
+ existingWaiters.push(waiter);
41
+ this.pendingJobs.set(jobId, existingWaiters);
42
+ // If signal is provided, handle abort
43
+ if (signal) {
44
+ const abortHandler = () => {
45
+ // Find and remove this specific waiter
46
+ const waiters = this.pendingJobs.get(jobId);
47
+ if (waiters) {
48
+ const index = waiters.indexOf(waiter);
49
+ if (index !== -1) {
50
+ waiters.splice(index, 1);
51
+ if (waiters.length === 0) {
52
+ this.pendingJobs.delete(jobId);
53
+ }
54
+ waiter.reject(new Error("Operation aborted"));
55
+ this.stopIntervalIfNoJobs();
56
+ }
57
+ }
58
+ };
59
+ signal.addEventListener("abort", abortHandler, { once: true });
60
+ }
61
+ });
62
+ // Start interval if not already running
63
+ this.startInterval();
64
+ return promise;
65
+ }
66
+ startInterval() {
67
+ if (this.intervalId === null && this.pendingJobs.size > 0) {
68
+ this.intervalId = setInterval(() => {
69
+ void this.checkPendingJobs();
70
+ }, this.pollIntervalMs);
71
+ // Check immediately as well - schedule it for next tick
72
+ setTimeout(() => void this.checkPendingJobs(), 0);
73
+ }
74
+ }
75
+ stopIntervalIfNoJobs() {
76
+ if (this.pendingJobs.size === 0 && this.intervalId !== null) {
77
+ clearInterval(this.intervalId);
78
+ this.intervalId = null;
79
+ }
80
+ }
81
+ async checkPendingJobs() {
82
+ // Get unique job IDs to check
83
+ const jobIds = Array.from(this.pendingJobs.keys());
84
+ // Check each job
85
+ const jobChecks = jobIds.map(async (jobId) => {
86
+ const waiters = this.pendingJobs.get(jobId);
87
+ if (!waiters || waiters.length === 0) {
88
+ return;
89
+ }
90
+ try {
91
+ // Filter out aborted waiters
92
+ const activeWaiters = waiters.filter((w) => !w.signal?.aborted);
93
+ if (activeWaiters.length === 0) {
94
+ // All waiters were aborted
95
+ this.pendingJobs.delete(jobId);
96
+ return;
97
+ }
98
+ // Use the first active waiter's signal for the status check
99
+ const jobInfo = await this.getJobStatus(jobId, activeWaiters[0].signal);
100
+ // Check if job is complete
101
+ if (jobInfo.status === JobStatus.COMPLETED ||
102
+ jobInfo.status === JobStatus.FAILED) {
103
+ // Remove from pending
104
+ this.pendingJobs.delete(jobId);
105
+ // Resolve all active waiters
106
+ for (const waiter of activeWaiters) {
107
+ waiter.resolve(jobInfo);
108
+ }
109
+ // Reject aborted waiters
110
+ for (const waiter of waiters) {
111
+ if (waiter.signal?.aborted) {
112
+ waiter.reject(new Error("Operation aborted"));
113
+ }
114
+ }
115
+ }
116
+ }
117
+ catch (error) {
118
+ // Remove from pending
119
+ this.pendingJobs.delete(jobId);
120
+ // Reject all waiters with the error
121
+ for (const waiter of waiters) {
122
+ waiter.reject(error instanceof Error ? error : new Error(String(error)));
123
+ }
124
+ }
125
+ });
126
+ // Wait for all checks to complete
127
+ await Promise.all(jobChecks);
128
+ // Stop interval if no more jobs
129
+ this.stopIntervalIfNoJobs();
130
+ }
131
+ }
132
+ //# sourceMappingURL=awaiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"awaiter.js","sourceRoot":"","sources":["../../../src/shared/awaiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,YAAY,CAAC;AAwBrD;;;GAGG;AACH,MAAM,OAAO,UAAU;IAMX;IAIA;IATV,8EAA8E;IACtE,WAAW,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,UAAU,GAA0B,IAAI,CAAC;IAEjD,YACU,YAGa,EACb,iBAAiB,EAAE;QAJnB,iBAAY,GAAZ,YAAY,CAGC;QACb,mBAAc,GAAd,cAAc,CAAK;QAE3B,EAAE;IACJ,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,0BAA0B;QAC1B,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,MAAoB;QAClD,qCAAqC;QACrC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,8BAA8B;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,MAAM,GAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAEtD,0CAA0C;YAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC1D,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;YAE7C,sCAAsC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,YAAY,GAAG,GAAG,EAAE;oBACxB,uCAAuC;oBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC5C,IAAI,OAAO,EAAE,CAAC;wBACZ,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBACtC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;4BACjB,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;4BACzB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gCACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;4BACjC,CAAC;4BACD,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;4BAC9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;wBAC9B,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,wCAAwC;QACxC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC/B,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACxB,wDAAwD;YACxD,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,oBAAoB;QAC1B,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC5D,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,8BAA8B;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QAEnD,iBAAiB;QACjB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,6BAA6B;gBAC7B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEhE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/B,2BAA2B;oBAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBAED,4DAA4D;gBAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAExE,2BAA2B;gBAC3B,IACE,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,SAAS;oBACtC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EACnC,CAAC;oBACD,sBAAsB;oBACtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAE/B,6BAA6B;oBAC7B,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;wBACnC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC1B,CAAC;oBAED,yBAAyB;oBACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wBAC7B,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;4BAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;wBAChD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,sBAAsB;gBACtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAE/B,oCAAoC;gBACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,CAAC,MAAM,CACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,kCAAkC;QAClC,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE7B,gCAAgC;QAChC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Error thrown when attempting to access a deleted document.
3
+ */
4
+ export declare class DocumentDeletedError extends Error {
5
+ readonly documentId: string;
6
+ readonly deletedAtUtcIso: string | null;
7
+ constructor(documentId: string, deletedAtUtcIso?: string | null);
8
+ }
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/shared/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEnC,UAAU,EAAE,MAAM,EAAE,eAAe,GAAE,MAAM,GAAG,IAAW;CAYtE"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Error thrown when attempting to access a deleted document.
3
+ */
4
+ export class DocumentDeletedError extends Error {
5
+ documentId;
6
+ deletedAtUtcIso;
7
+ constructor(documentId, deletedAtUtcIso = null) {
8
+ const message = deletedAtUtcIso
9
+ ? `Document ${documentId} was deleted at ${deletedAtUtcIso}`
10
+ : `Document ${documentId} has been deleted`;
11
+ super(message);
12
+ this.name = "DocumentDeletedError";
13
+ this.documentId = documentId;
14
+ this.deletedAtUtcIso = deletedAtUtcIso;
15
+ Error.captureStackTrace(this, DocumentDeletedError);
16
+ }
17
+ }
18
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/shared/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7B,UAAU,CAAS;IACnB,eAAe,CAAgB;IAE/C,YAAY,UAAkB,EAAE,kBAAiC,IAAI;QACnE,MAAM,OAAO,GAAG,eAAe;YAC7B,CAAC,CAAC,YAAY,UAAU,mBAAmB,eAAe,EAAE;YAC5D,CAAC,CAAC,YAAY,UAAU,mBAAmB,CAAC;QAE9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IACtD,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { ShutdownStatus } from "./types.js";
2
+ /**
3
+ * Factory method to create a ShutdownStatus object
4
+ *
5
+ * @param isShutdown - Initial shutdown state
6
+ * @returns A ShutdownStatus object with a getter for the shutdown state
7
+ */
8
+ export declare function createShutdownStatus(isShutdown: boolean): ShutdownStatus;
9
+ /**
10
+ * Factory method to create a ShutdownStatus that can be updated
11
+ *
12
+ * @param initialState - Initial shutdown state (default: false)
13
+ * @returns A tuple of [ShutdownStatus, setter function]
14
+ */
15
+ export declare function createMutableShutdownStatus(initialState?: boolean): [ShutdownStatus, (value: boolean) => void];
16
+ //# sourceMappingURL=factories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../../../src/shared/factories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,OAAO,GAAG,cAAc,CAQxE;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,UAAQ,GACnB,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAc5C"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Factory method to create a ShutdownStatus object
3
+ *
4
+ * @param isShutdown - Initial shutdown state
5
+ * @returns A ShutdownStatus object with a getter for the shutdown state
6
+ */
7
+ export function createShutdownStatus(isShutdown) {
8
+ const shutdownState = isShutdown;
9
+ return {
10
+ get isShutdown() {
11
+ return shutdownState;
12
+ },
13
+ };
14
+ }
15
+ /**
16
+ * Factory method to create a ShutdownStatus that can be updated
17
+ *
18
+ * @param initialState - Initial shutdown state (default: false)
19
+ * @returns A tuple of [ShutdownStatus, setter function]
20
+ */
21
+ export function createMutableShutdownStatus(initialState = false) {
22
+ let shutdownState = initialState;
23
+ const status = {
24
+ get isShutdown() {
25
+ return shutdownState;
26
+ },
27
+ };
28
+ const setShutdown = (value) => {
29
+ shutdownState = value;
30
+ };
31
+ return [status, setShutdown];
32
+ }
33
+ //# sourceMappingURL=factories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../src/shared/factories.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAmB;IACtD,MAAM,aAAa,GAAG,UAAU,CAAC;IAEjC,OAAO;QACL,IAAI,UAAU;YACZ,OAAO,aAAa,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,YAAY,GAAG,KAAK;IAEpB,IAAI,aAAa,GAAG,YAAY,CAAC;IAEjC,MAAM,MAAM,GAAmB;QAC7B,IAAI,UAAU;YACZ,OAAO,aAAa,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE;QACrC,aAAa,GAAG,KAAK,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,23 +1,95 @@
1
1
  /**
2
- * Basic Operation type for the queue
3
- * This is a simplified version that includes the essential fields needed for queuing
4
- */
5
- export type Operation = {
6
- /** Position of the operation in the history */
7
- index: number;
8
- /** Timestamp of when the operation was added */
9
- timestamp: string;
10
- /** Hash of the resulting document data after the operation */
11
- hash: string;
12
- /** The number of operations skipped with this Operation */
13
- skip: number;
14
- /** The type/name of the operation */
15
- type: string;
16
- /** The input data for the operation */
17
- input: any;
18
- /** Error message for a failed action */
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";
6
+ /**
7
+ * Describes the status of a shutdown operation.
8
+ */
9
+ export type ShutdownStatus = {
10
+ /**
11
+ * True if and only if the system has been shutdown.
12
+ *
13
+ * This value is meant to be polled to determine if the system has been shutdown.
14
+ *
15
+ * In the case of a browser process, the `kill` method should be able to synchronously set this to true.
16
+ *
17
+ * In the case of a server process, a graceful shutdown period should be allowed for the system to finish its work.
18
+ */
19
+ get isShutdown(): boolean;
20
+ };
21
+ /**
22
+ * Enum that determines deletion propagation.
23
+ */
24
+ export declare enum PropagationMode {
25
+ None = "none",
26
+ Cascade = "cascade"
27
+ }
28
+ /**
29
+ * Enum that describes the type of relationship change.
30
+ */
31
+ export declare enum RelationshipChangeType {
32
+ Added = "added",
33
+ Removed = "removed"
34
+ }
35
+ /**
36
+ * Describes the current state of a job.
37
+ */
38
+ export type JobInfo = {
39
+ id: string;
40
+ status: JobStatus;
41
+ createdAtUtcIso: string;
42
+ completedAtUtcIso?: string;
19
43
  error?: string;
20
- /** Unique operation id */
21
- id?: string;
44
+ result?: any;
45
+ };
46
+ /**
47
+ * Job execution statuses
48
+ */
49
+ export declare enum JobStatus {
50
+ /** Job is queued but not yet started */
51
+ PENDING = "PENDING",
52
+ /** Job is currently being executed */
53
+ RUNNING = "RUNNING",
54
+ /** Job completed successfully */
55
+ COMPLETED = "COMPLETED",
56
+ /** Job failed (may be retried) */
57
+ FAILED = "FAILED"
58
+ }
59
+ /**
60
+ * Describe the view of a set of documents. That is, what pieces of the
61
+ * documents are populated.
62
+ */
63
+ export type ViewFilter = {
64
+ branch?: string;
65
+ scopes?: string[];
66
+ revision?: number;
67
+ };
68
+ /**
69
+ * Describes filter options for searching documents.
70
+ *
71
+ * Each parameter is treated as an AND condition.
72
+ */
73
+ export type SearchFilter = {
74
+ type?: string;
75
+ parentId?: string;
76
+ ids?: string[];
77
+ slugs?: string[];
78
+ };
79
+ /**
80
+ * Describes the options for paging.
81
+ */
82
+ export type PagingOptions = {
83
+ cursor: string;
84
+ limit: number;
85
+ };
86
+ /**
87
+ * The paged result.
88
+ */
89
+ export type PagedResults<T> = {
90
+ results: T[];
91
+ options: PagingOptions;
92
+ next?: () => Promise<PagedResults<T>>;
93
+ nextCursor?: string;
22
94
  };
23
95
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,KAAK,EAAE,GAAG,CAAC;IACX,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,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,2 +1,36 @@
1
- export {};
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";
6
+ /**
7
+ * Enum that determines deletion propagation.
8
+ */
9
+ export var PropagationMode;
10
+ (function (PropagationMode) {
11
+ PropagationMode["None"] = "none";
12
+ PropagationMode["Cascade"] = "cascade";
13
+ })(PropagationMode || (PropagationMode = {}));
14
+ /**
15
+ * Enum that describes the type of relationship change.
16
+ */
17
+ export var RelationshipChangeType;
18
+ (function (RelationshipChangeType) {
19
+ RelationshipChangeType["Added"] = "added";
20
+ RelationshipChangeType["Removed"] = "removed";
21
+ })(RelationshipChangeType || (RelationshipChangeType = {}));
22
+ /**
23
+ * Job execution statuses
24
+ */
25
+ export var JobStatus;
26
+ (function (JobStatus) {
27
+ /** Job is queued but not yet started */
28
+ JobStatus["PENDING"] = "PENDING";
29
+ /** Job is currently being executed */
30
+ JobStatus["RUNNING"] = "RUNNING";
31
+ /** Job completed successfully */
32
+ JobStatus["COMPLETED"] = "COMPLETED";
33
+ /** Job failed (may be retried) */
34
+ JobStatus["FAILED"] = "FAILED";
35
+ })(JobStatus || (JobStatus = {}));
2
36
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/shared/types.ts"],"names":[],"mappings":""}
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,3 @@
1
+ import type { ViewFilter } from "./types.js";
2
+ export declare function matchesScope(view: ViewFilter | undefined, scope: string): boolean;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/shared/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,YAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAO1E"}
@@ -0,0 +1,8 @@
1
+ export function matchesScope(view = {}, scope) {
2
+ if (view.scopes) {
3
+ return view.scopes.includes(scope);
4
+ }
5
+ // if there are no scopes specified, we match all scopes
6
+ return true;
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/shared/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,OAAmB,EAAE,EAAE,KAAa;IAC/D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,wDAAwD;IACxD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Signature } from "document-model";
2
+ import type { ISigner } from "./types.js";
3
+ export declare class PassthroughSigner implements ISigner {
4
+ sign(): Promise<Signature>;
5
+ }
6
+ //# sourceMappingURL=passthrough-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough-signer.d.ts","sourceRoot":"","sources":["../../../src/signer/passthrough-signer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,qBAAa,iBAAkB,YAAW,OAAO;IAC/C,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;CAG3B"}
@@ -0,0 +1,6 @@
1
+ export class PassthroughSigner {
2
+ sign() {
3
+ return Promise.resolve(["", "", "", "", ""]);
4
+ }
5
+ }
6
+ //# sourceMappingURL=passthrough-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passthrough-signer.js","sourceRoot":"","sources":["../../../src/signer/passthrough-signer.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,iBAAiB;IAC5B,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { Action, Signature } from "document-model";
2
+ /**
3
+ * Interface for signing actions before submission to the reactor.
4
+ */
5
+ export interface ISigner {
6
+ /**
7
+ * Signs an action
8
+ *
9
+ * @param action - The action to sign
10
+ * @param abortSignal - Optional abort signal to cancel the signing
11
+ * @returns The signature
12
+ */
13
+ sign(action: Action, abortSignal?: AbortSignal): Promise<Signature>;
14
+ }
15
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/signer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB;;;;;;OAMG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACrE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/signer/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
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
+ includeDeleted?: boolean;
57
+ }
58
+ export interface PagingOptions {
59
+ cursor?: string;
60
+ limit?: number;
61
+ }
62
+ export interface PagedResults<T> {
63
+ items: T[];
64
+ nextCursor?: string;
65
+ hasMore: boolean;
66
+ }
67
+ export interface DocumentSnapshot {
68
+ id: string;
69
+ documentId: string;
70
+ slug: string | null;
71
+ name: string | null;
72
+ scope: string;
73
+ branch: string;
74
+ content: string;
75
+ documentType: string;
76
+ lastOperationIndex: number;
77
+ lastOperationHash: string;
78
+ lastUpdatedAt: Date;
79
+ snapshotVersion: number;
80
+ identifiers: string | null;
81
+ metadata: string | null;
82
+ isDeleted: boolean;
83
+ deletedAt: Date | null;
84
+ }
85
+ export interface IDocumentView {
86
+ /**
87
+ * Initializes the view.
88
+ */
89
+ init(): Promise<void>;
90
+ /**
91
+ * Indexes a list of operations.
92
+ */
93
+ indexOperations(items: OperationWithContext[]): Promise<void>;
94
+ /**
95
+ * Retrieves a document header by reconstructing it from operations across all scopes.
96
+ *
97
+ * Headers contain cross-scope metadata (revision tracking, lastModified timestamps)
98
+ * that require aggregating information from multiple scopes, making this a
99
+ * view-layer concern rather than an operation store concern.
100
+ *
101
+ * @param documentId - The document id
102
+ * @param branch - The branch name
103
+ * @param signal - Optional abort signal to cancel the request
104
+ * @returns The reconstructed document header
105
+ */
106
+ getHeader(documentId: string, branch: string, signal?: AbortSignal): Promise<PHDocumentHeader>;
107
+ /**
108
+ * Returns true if and only if the documents exist.
109
+ *
110
+ * @param documentIds - The list of document ids to check.
111
+ * @param signal - Optional abort signal to cancel the request
112
+ */
113
+ exists(documentIds: string[], signal?: AbortSignal): Promise<boolean[]>;
114
+ /**
115
+ * Retrieves multiple document snapshots by their IDs.
116
+ *
117
+ * @param documentIds - The list of document ids to retrieve.
118
+ * @param scope - The scope to filter by (default: "global")
119
+ * @param branch - The branch to filter by (default: "main")
120
+ * @param signal - Optional abort signal to cancel the request
121
+ * @returns Array of document snapshots in the same order as input IDs (null for non-existent docs)
122
+ */
123
+ getMany(documentIds: string[], scope?: string, branch?: string, signal?: AbortSignal): Promise<(DocumentSnapshot | null)[]>;
124
+ }
125
+ //# 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"}