@powerhousedao/reactor 5.0.3 → 5.0.5

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 (232) hide show
  1. package/dist/src/cache/index.d.ts +3 -0
  2. package/dist/src/cache/index.d.ts.map +1 -0
  3. package/dist/src/cache/index.js +2 -0
  4. package/dist/src/cache/index.js.map +1 -0
  5. package/dist/src/cache/kysely-operation-index.d.ts +13 -0
  6. package/dist/src/cache/kysely-operation-index.d.ts.map +1 -0
  7. package/dist/src/cache/kysely-operation-index.js +207 -0
  8. package/dist/src/cache/kysely-operation-index.js.map +1 -0
  9. package/dist/src/cache/kysely-write-cache.d.ts +5 -4
  10. package/dist/src/cache/kysely-write-cache.d.ts.map +1 -1
  11. package/dist/src/cache/kysely-write-cache.js +12 -12
  12. package/dist/src/cache/kysely-write-cache.js.map +1 -1
  13. package/dist/src/cache/operation-index-types.d.ts +49 -0
  14. package/dist/src/cache/operation-index-types.d.ts.map +1 -0
  15. package/dist/src/cache/operation-index-types.js +4 -0
  16. package/dist/src/cache/operation-index-types.js.map +1 -0
  17. package/dist/src/cache/{types.d.ts → write-cache-types.d.ts} +1 -1
  18. package/dist/src/cache/write-cache-types.d.ts.map +1 -0
  19. package/dist/src/cache/write-cache-types.js +2 -0
  20. package/dist/src/cache/write-cache-types.js.map +1 -0
  21. package/dist/src/client/reactor-client.d.ts +6 -4
  22. package/dist/src/client/reactor-client.d.ts.map +1 -1
  23. package/dist/src/client/reactor-client.js +118 -37
  24. package/dist/src/client/reactor-client.js.map +1 -1
  25. package/dist/src/client/types.d.ts +4 -4
  26. package/dist/src/client/types.d.ts.map +1 -1
  27. package/dist/src/core/builder.d.ts +15 -2
  28. package/dist/src/core/builder.d.ts.map +1 -1
  29. package/dist/src/core/builder.js +48 -7
  30. package/dist/src/core/builder.js.map +1 -1
  31. package/dist/src/core/reactor-builder.d.ts +40 -0
  32. package/dist/src/core/reactor-builder.d.ts.map +1 -0
  33. package/dist/src/core/reactor-builder.js +141 -0
  34. package/dist/src/core/reactor-builder.js.map +1 -0
  35. package/dist/src/core/reactor.d.ts +36 -11
  36. package/dist/src/core/reactor.d.ts.map +1 -1
  37. package/dist/src/core/reactor.js +609 -279
  38. package/dist/src/core/reactor.js.map +1 -1
  39. package/dist/src/core/types.d.ts +84 -7
  40. package/dist/src/core/types.d.ts.map +1 -1
  41. package/dist/src/core/utils.d.ts +44 -4
  42. package/dist/src/core/utils.d.ts.map +1 -1
  43. package/dist/src/core/utils.js +116 -6
  44. package/dist/src/core/utils.js.map +1 -1
  45. package/dist/src/events/types.d.ts +28 -0
  46. package/dist/src/events/types.d.ts.map +1 -1
  47. package/dist/src/events/types.js +2 -0
  48. package/dist/src/events/types.js.map +1 -1
  49. package/dist/src/executor/simple-job-executor-manager.d.ts.map +1 -1
  50. package/dist/src/executor/simple-job-executor-manager.js +19 -1
  51. package/dist/src/executor/simple-job-executor-manager.js.map +1 -1
  52. package/dist/src/executor/simple-job-executor.d.ts +16 -2
  53. package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
  54. package/dist/src/executor/simple-job-executor.js +458 -252
  55. package/dist/src/executor/simple-job-executor.js.map +1 -1
  56. package/dist/src/executor/types.d.ts +2 -0
  57. package/dist/src/executor/types.d.ts.map +1 -1
  58. package/dist/src/executor/types.js.map +1 -1
  59. package/dist/src/executor/util.d.ts +18 -0
  60. package/dist/src/executor/util.d.ts.map +1 -1
  61. package/dist/src/executor/util.js +42 -1
  62. package/dist/src/executor/util.js.map +1 -1
  63. package/dist/src/index.d.ts +12 -7
  64. package/dist/src/index.d.ts.map +1 -1
  65. package/dist/src/index.js +9 -2
  66. package/dist/src/index.js.map +1 -1
  67. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +10 -1
  68. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +1 -1
  69. package/dist/src/job-tracker/in-memory-job-tracker.js +57 -23
  70. package/dist/src/job-tracker/in-memory-job-tracker.js.map +1 -1
  71. package/dist/src/job-tracker/interfaces.d.ts +5 -7
  72. package/dist/src/job-tracker/interfaces.d.ts.map +1 -1
  73. package/dist/src/queue/types.d.ts +6 -1
  74. package/dist/src/queue/types.d.ts.map +1 -1
  75. package/dist/src/queue/types.js.map +1 -1
  76. package/dist/src/read-models/coordinator.d.ts.map +1 -1
  77. package/dist/src/read-models/coordinator.js +11 -0
  78. package/dist/src/read-models/coordinator.js.map +1 -1
  79. package/dist/src/read-models/document-view.d.ts +11 -6
  80. package/dist/src/read-models/document-view.d.ts.map +1 -1
  81. package/dist/src/read-models/document-view.js +156 -113
  82. package/dist/src/read-models/document-view.js.map +1 -1
  83. package/dist/src/read-models/types.d.ts +3 -3
  84. package/dist/src/read-models/types.d.ts.map +1 -1
  85. package/dist/src/shared/awaiter.d.ts +11 -8
  86. package/dist/src/shared/awaiter.d.ts.map +1 -1
  87. package/dist/src/shared/awaiter.js +66 -75
  88. package/dist/src/shared/awaiter.js.map +1 -1
  89. package/dist/src/shared/consistency-tracker.d.ts +48 -0
  90. package/dist/src/shared/consistency-tracker.d.ts.map +1 -0
  91. package/dist/src/shared/consistency-tracker.js +123 -0
  92. package/dist/src/shared/consistency-tracker.js.map +1 -0
  93. package/dist/src/shared/types.d.ts +30 -2
  94. package/dist/src/shared/types.d.ts.map +1 -1
  95. package/dist/src/shared/types.js +4 -2
  96. package/dist/src/shared/types.js.map +1 -1
  97. package/dist/src/storage/index.d.ts +4 -0
  98. package/dist/src/storage/index.d.ts.map +1 -0
  99. package/dist/src/storage/index.js +3 -0
  100. package/dist/src/storage/index.js.map +1 -0
  101. package/dist/src/storage/interfaces.d.ts +227 -2
  102. package/dist/src/storage/interfaces.d.ts.map +1 -1
  103. package/dist/src/storage/interfaces.js.map +1 -1
  104. package/dist/src/storage/kysely/document-indexer.d.ts +28 -0
  105. package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -0
  106. package/dist/src/storage/kysely/document-indexer.js +350 -0
  107. package/dist/src/storage/kysely/document-indexer.js.map +1 -0
  108. package/dist/src/storage/kysely/keyframe-store.d.ts.map +1 -1
  109. package/dist/src/storage/kysely/keyframe-store.js +6 -13
  110. package/dist/src/storage/kysely/keyframe-store.js.map +1 -1
  111. package/dist/src/storage/kysely/store.js +1 -1
  112. package/dist/src/storage/kysely/store.js.map +1 -1
  113. package/dist/src/storage/kysely/sync-cursor-storage.d.ts +13 -0
  114. package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -0
  115. package/dist/src/storage/kysely/sync-cursor-storage.js +93 -0
  116. package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -0
  117. package/dist/src/storage/kysely/sync-remote-storage.d.ts +13 -0
  118. package/dist/src/storage/kysely/sync-remote-storage.d.ts.map +1 -0
  119. package/dist/src/storage/kysely/sync-remote-storage.js +134 -0
  120. package/dist/src/storage/kysely/sync-remote-storage.js.map +1 -0
  121. package/dist/src/storage/kysely/types.d.ts +98 -2
  122. package/dist/src/storage/kysely/types.d.ts.map +1 -1
  123. package/dist/src/storage/migrations/001_create_operation_table.d.ts +3 -0
  124. package/dist/src/storage/migrations/001_create_operation_table.d.ts.map +1 -0
  125. package/dist/src/storage/migrations/001_create_operation_table.js +40 -0
  126. package/dist/src/storage/migrations/001_create_operation_table.js.map +1 -0
  127. package/dist/src/storage/migrations/002_create_keyframe_table.d.ts +3 -0
  128. package/dist/src/storage/migrations/002_create_keyframe_table.d.ts.map +1 -0
  129. package/dist/src/storage/migrations/002_create_keyframe_table.js +27 -0
  130. package/dist/src/storage/migrations/002_create_keyframe_table.js.map +1 -0
  131. package/dist/src/storage/migrations/003_create_document_table.d.ts +3 -0
  132. package/dist/src/storage/migrations/003_create_document_table.d.ts.map +1 -0
  133. package/dist/src/storage/migrations/003_create_document_table.js +10 -0
  134. package/dist/src/storage/migrations/003_create_document_table.js.map +1 -0
  135. package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts +3 -0
  136. package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts.map +1 -0
  137. package/dist/src/storage/migrations/004_create_document_relationship_table.js +35 -0
  138. package/dist/src/storage/migrations/004_create_document_relationship_table.js.map +1 -0
  139. package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts +3 -0
  140. package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts.map +1 -0
  141. package/dist/src/storage/migrations/005_create_indexer_state_table.js +10 -0
  142. package/dist/src/storage/migrations/005_create_indexer_state_table.js.map +1 -0
  143. package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts +3 -0
  144. package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts.map +1 -0
  145. package/dist/src/storage/migrations/006_create_document_snapshot_table.js +49 -0
  146. package/dist/src/storage/migrations/006_create_document_snapshot_table.js.map +1 -0
  147. package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts +3 -0
  148. package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts.map +1 -0
  149. package/dist/src/storage/migrations/007_create_slug_mapping_table.js +24 -0
  150. package/dist/src/storage/migrations/007_create_slug_mapping_table.js.map +1 -0
  151. package/dist/src/storage/migrations/008_create_view_state_table.d.ts +3 -0
  152. package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +1 -0
  153. package/dist/src/storage/migrations/008_create_view_state_table.js +9 -0
  154. package/dist/src/storage/migrations/008_create_view_state_table.js.map +1 -0
  155. package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts +3 -0
  156. package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts.map +1 -0
  157. package/dist/src/storage/migrations/009_create_operation_index_tables.js +50 -0
  158. package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +1 -0
  159. package/dist/src/storage/migrations/010_create_sync_tables.d.ts +3 -0
  160. package/dist/src/storage/migrations/010_create_sync_tables.d.ts.map +1 -0
  161. package/dist/src/storage/migrations/010_create_sync_tables.js +43 -0
  162. package/dist/src/storage/migrations/010_create_sync_tables.js.map +1 -0
  163. package/dist/src/storage/migrations/index.d.ts +3 -0
  164. package/dist/src/storage/migrations/index.d.ts.map +1 -0
  165. package/dist/src/storage/migrations/index.js +3 -0
  166. package/dist/src/storage/migrations/index.js.map +1 -0
  167. package/dist/src/storage/migrations/migrator.d.ts +5 -0
  168. package/dist/src/storage/migrations/migrator.d.ts.map +1 -0
  169. package/dist/src/storage/migrations/migrator.js +55 -0
  170. package/dist/src/storage/migrations/migrator.js.map +1 -0
  171. package/dist/src/storage/migrations/run-migrations.d.ts +2 -0
  172. package/dist/src/storage/migrations/run-migrations.d.ts.map +1 -0
  173. package/dist/src/storage/migrations/run-migrations.js +58 -0
  174. package/dist/src/storage/migrations/run-migrations.js.map +1 -0
  175. package/dist/src/storage/migrations/types.d.ts +9 -0
  176. package/dist/src/storage/migrations/types.d.ts.map +1 -0
  177. package/dist/src/storage/migrations/types.js.map +1 -0
  178. package/dist/src/storage/txn.d.ts.map +1 -1
  179. package/dist/src/storage/txn.js +2 -0
  180. package/dist/src/storage/txn.js.map +1 -1
  181. package/dist/src/sync/channels/index.d.ts +3 -0
  182. package/dist/src/sync/channels/index.d.ts.map +1 -0
  183. package/dist/src/sync/channels/index.js +3 -0
  184. package/dist/src/sync/channels/index.js.map +1 -0
  185. package/dist/src/sync/channels/internal-channel.d.ts +57 -0
  186. package/dist/src/sync/channels/internal-channel.d.ts.map +1 -0
  187. package/dist/src/sync/channels/internal-channel.js +106 -0
  188. package/dist/src/sync/channels/internal-channel.js.map +1 -0
  189. package/dist/src/sync/channels/utils.d.ts +15 -0
  190. package/dist/src/sync/channels/utils.d.ts.map +1 -0
  191. package/dist/src/sync/channels/utils.js +26 -0
  192. package/dist/src/sync/channels/utils.js.map +1 -0
  193. package/dist/src/sync/errors.d.ts +10 -0
  194. package/dist/src/sync/errors.d.ts.map +1 -0
  195. package/dist/src/sync/errors.js +17 -0
  196. package/dist/src/sync/errors.js.map +1 -0
  197. package/dist/src/sync/index.d.ts +12 -0
  198. package/dist/src/sync/index.d.ts.map +1 -0
  199. package/dist/src/sync/index.js +9 -0
  200. package/dist/src/sync/index.js.map +1 -0
  201. package/dist/src/sync/interfaces.d.ts +150 -0
  202. package/dist/src/sync/interfaces.d.ts.map +1 -0
  203. package/dist/src/sync/interfaces.js +2 -0
  204. package/dist/src/sync/interfaces.js.map +1 -0
  205. package/dist/src/sync/mailbox.d.ts +21 -0
  206. package/dist/src/sync/mailbox.d.ts.map +1 -0
  207. package/dist/src/sync/mailbox.js +59 -0
  208. package/dist/src/sync/mailbox.js.map +1 -0
  209. package/dist/src/sync/sync-builder.d.ts +17 -0
  210. package/dist/src/sync/sync-builder.d.ts.map +1 -0
  211. package/dist/src/sync/sync-builder.js +29 -0
  212. package/dist/src/sync/sync-builder.js.map +1 -0
  213. package/dist/src/sync/sync-manager.d.ts +33 -0
  214. package/dist/src/sync/sync-manager.d.ts.map +1 -0
  215. package/dist/src/sync/sync-manager.js +197 -0
  216. package/dist/src/sync/sync-manager.js.map +1 -0
  217. package/dist/src/sync/sync-operation.d.ts +28 -0
  218. package/dist/src/sync/sync-operation.d.ts.map +1 -0
  219. package/dist/src/sync/sync-operation.js +63 -0
  220. package/dist/src/sync/sync-operation.js.map +1 -0
  221. package/dist/src/sync/types.d.ts +61 -0
  222. package/dist/src/sync/types.d.ts.map +1 -0
  223. package/dist/src/sync/types.js +16 -0
  224. package/dist/src/sync/types.js.map +1 -0
  225. package/dist/src/sync/utils.d.ts +17 -0
  226. package/dist/src/sync/utils.d.ts.map +1 -0
  227. package/dist/src/sync/utils.js +34 -0
  228. package/dist/src/sync/utils.js.map +1 -0
  229. package/package.json +9 -5
  230. package/dist/src/cache/types.d.ts.map +0 -1
  231. package/dist/src/cache/types.js.map +0 -1
  232. /package/dist/src/{cache → storage/migrations}/types.js +0 -0
@@ -1,4 +1,6 @@
1
1
  import type { Operation, PHDocument } from "document-model";
2
+ import type { ConsistencyToken } from "../shared/types.js";
3
+ import type { RemoteCursor, RemoteRecord } from "../sync/types.js";
2
4
  export type OperationContext = {
3
5
  documentId: string;
4
6
  documentType: string;
@@ -102,20 +104,243 @@ export interface IDocumentView {
102
104
  * documents from operations - it always requires resultingState.
103
105
  */
104
106
  indexOperations(items: OperationWithContext[]): Promise<void>;
107
+ /**
108
+ * Blocks until the view has processed the coordinates referenced by the
109
+ * provided consistency token.
110
+ *
111
+ * @param token - Consistency token derived from the originating job
112
+ * @param timeoutMs - Optional timeout window in milliseconds
113
+ * @param signal - Optional abort signal to cancel the wait
114
+ */
115
+ waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
105
116
  /**
106
117
  * Returns true if and only if the documents exist.
107
118
  *
108
119
  * @param documentIds - The list of document ids to check.
120
+ * @param consistencyToken - Optional token for read-after-write consistency
109
121
  * @param signal - Optional abort signal to cancel the request
110
122
  */
111
- exists(documentIds: string[], signal?: AbortSignal): Promise<boolean[]>;
123
+ exists(documentIds: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean[]>;
112
124
  /**
113
125
  * Returns the document with the given id.
114
126
  *
115
127
  * @param documentId - The id of the document to get.
116
128
  * @param view - Optional filter containing branch and scopes information
129
+ * @param consistencyToken - Optional token for read-after-write consistency
130
+ * @param signal - Optional abort signal to cancel the request
131
+ */
132
+ get<TDocument extends PHDocument>(documentId: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
133
+ /**
134
+ * Returns the document with the given identifier (either id or slug).
135
+ * Throws an error if the identifier matches both an id and a slug that refer to different documents.
136
+ *
137
+ * @param identifier - The id or slug of the document to get.
138
+ * @param view - Optional filter containing branch and scopes information
139
+ * @param consistencyToken - Optional token for read-after-write consistency
140
+ * @param signal - Optional abort signal to cancel the request
141
+ * @throws {Error} If identifier matches both an ID and slug referring to different documents
142
+ */
143
+ getByIdOrSlug<TDocument extends PHDocument>(identifier: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<TDocument>;
144
+ /**
145
+ * Finds documents by their document type.
146
+ *
147
+ * @param type - The document type to search for
148
+ * @param view - Optional filter containing branch and scopes information
149
+ * @param paging - Optional paging options for cursor-based pagination
150
+ * @param consistencyToken - Optional token for read-after-write consistency
151
+ * @param signal - Optional abort signal to cancel the request
152
+ */
153
+ findByType(type: string, view?: ViewFilter, paging?: PagingOptions, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<PagedResults<PHDocument>>;
154
+ /**
155
+ * Resolves a slug to a document ID.
156
+ *
157
+ * @param slug - The slug to resolve
158
+ * @param view - Optional filter containing branch and scopes information
159
+ * @param consistencyToken - Optional token for read-after-write consistency
160
+ * @param signal - Optional abort signal to cancel the request
161
+ * @returns The document ID or undefined if the slug doesn't exist
162
+ */
163
+ resolveSlug(slug: string, view?: ViewFilter, consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string | undefined>;
164
+ }
165
+ export type DocumentRelationship = {
166
+ sourceId: string;
167
+ targetId: string;
168
+ relationshipType: string;
169
+ metadata?: Record<string, unknown>;
170
+ createdAt: Date;
171
+ updatedAt: Date;
172
+ };
173
+ export type DocumentGraphEdge = {
174
+ from: string;
175
+ to: string;
176
+ type: string;
177
+ };
178
+ export interface IDocumentGraph {
179
+ nodes: string[];
180
+ edges: DocumentGraphEdge[];
181
+ }
182
+ export interface IDocumentIndexer {
183
+ /**
184
+ * Initializes the indexer and catches up on any missed operations.
185
+ */
186
+ init(): Promise<void>;
187
+ /**
188
+ * Indexes a list of operations to update the relationship graph.
189
+ *
190
+ * @param operations - Operations to index. Will process ADD_RELATIONSHIP and
191
+ * REMOVE_RELATIONSHIP operations.
192
+ */
193
+ indexOperations(operations: OperationWithContext[]): Promise<void>;
194
+ /**
195
+ * Blocks until the indexer has processed the coordinates referenced by the
196
+ * provided consistency token.
197
+ *
198
+ * @param token - Consistency token derived from the originating job
199
+ * @param timeoutMs - Optional timeout window in milliseconds
200
+ * @param signal - Optional abort signal to cancel the wait
201
+ */
202
+ waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
203
+ /**
204
+ * Returns outgoing relationships from a document.
205
+ *
206
+ * @param documentId - The source document id
207
+ * @param types - Optional filter by relationship types
208
+ * @param consistencyToken - Optional token for read-after-write consistency
209
+ * @param signal - Optional abort signal to cancel the request
210
+ */
211
+ getOutgoing(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
212
+ /**
213
+ * Returns incoming relationships to a document.
214
+ *
215
+ * @param documentId - The target document id
216
+ * @param types - Optional filter by relationship types
217
+ * @param consistencyToken - Optional token for read-after-write consistency
218
+ * @param signal - Optional abort signal to cancel the request
219
+ */
220
+ getIncoming(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
221
+ /**
222
+ * Checks if a relationship exists between two documents.
223
+ *
224
+ * @param sourceId - The source document id
225
+ * @param targetId - The target document id
226
+ * @param types - Optional filter by relationship types
227
+ * @param consistencyToken - Optional token for read-after-write consistency
228
+ * @param signal - Optional abort signal to cancel the request
229
+ */
230
+ hasRelationship(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean>;
231
+ /**
232
+ * Returns all undirected relationships between two documents.
233
+ *
234
+ * @param a - The ID of the first document
235
+ * @param b - The ID of the second document
236
+ * @param types - Optional filter by relationship types
237
+ * @param consistencyToken - Optional token for read-after-write consistency
238
+ * @param signal - Optional abort signal to cancel the request
239
+ */
240
+ getUndirectedRelationships(a: string, b: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
241
+ /**
242
+ * Returns all directed relationships between two documents.
243
+ *
244
+ * @param sourceId - The source document id
245
+ * @param targetId - The target document id
246
+ * @param types - Optional filter by relationship types
247
+ * @param consistencyToken - Optional token for read-after-write consistency
248
+ * @param signal - Optional abort signal to cancel the request
249
+ */
250
+ getDirectedRelationships(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
251
+ /**
252
+ * Finds a path from source to target following directed edges.
253
+ *
254
+ * @param sourceId - The source document id
255
+ * @param targetId - The target document id
256
+ * @param types - Optional filter by relationship types
257
+ * @param consistencyToken - Optional token for read-after-write consistency
258
+ * @param signal - Optional abort signal to cancel the request
259
+ * @returns Array of document ids representing the path, or null if no path exists
260
+ */
261
+ findPath(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[] | null>;
262
+ /**
263
+ * Returns all ancestors of a document in the relationship graph.
264
+ *
265
+ * @param documentId - The document id
266
+ * @param types - Optional filter by relationship types
267
+ * @param consistencyToken - Optional token for read-after-write consistency
268
+ * @param signal - Optional abort signal to cancel the request
269
+ */
270
+ findAncestors(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<IDocumentGraph>;
271
+ /**
272
+ * Returns all relationship types currently in the system.
273
+ *
274
+ * @param consistencyToken - Optional token for read-after-write consistency
275
+ * @param signal - Optional abort signal to cancel the request
276
+ */
277
+ getRelationshipTypes(consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
278
+ }
279
+ export interface ISyncRemoteStorage {
280
+ /**
281
+ * Lists all remotes.
282
+ *
283
+ * @param signal - Optional abort signal to cancel the request
284
+ * @returns The remotes
285
+ */
286
+ list(signal?: AbortSignal): Promise<RemoteRecord[]>;
287
+ /**
288
+ * Gets a remote by name.
289
+ *
290
+ * @param name - The name of the remote
291
+ * @param signal - Optional abort signal to cancel the request
292
+ * @returns The remote
293
+ */
294
+ get(name: string, signal?: AbortSignal): Promise<RemoteRecord>;
295
+ /**
296
+ * Upserts a remote.
297
+ *
298
+ * @param remote - The remote to upsert
299
+ * @param signal - Optional abort signal to cancel the request
300
+ * @returns The remote
301
+ */
302
+ upsert(remote: RemoteRecord, signal?: AbortSignal): Promise<void>;
303
+ /**
304
+ * Removes a remote by name.
305
+ *
306
+ * @param name - The name of the remote
307
+ * @param signal - Optional abort signal to cancel the request
308
+ * @returns The remote
309
+ */
310
+ remove(name: string, signal?: AbortSignal): Promise<void>;
311
+ }
312
+ export interface ISyncCursorStorage {
313
+ /**
314
+ * Lists all cursors for a remote.
315
+ *
316
+ * @param remoteName - The name of the remote
317
+ * @param signal - Optional abort signal to cancel the request
318
+ * @returns The cursors
319
+ */
320
+ list(remoteName: string, signal?: AbortSignal): Promise<RemoteCursor[]>;
321
+ /**
322
+ * Gets a cursor for a remote.
323
+ *
324
+ * @param remoteName - The name of the remote
325
+ * @param signal - Optional abort signal to cancel the request
326
+ * @returns The cursor
327
+ */
328
+ get(remoteName: string, signal?: AbortSignal): Promise<RemoteCursor>;
329
+ /**
330
+ * Upserts a cursor.
331
+ *
332
+ * @param cursor - The cursor to upsert
333
+ * @param signal - Optional abort signal to cancel the request
334
+ * @returns The cursor
335
+ */
336
+ upsert(cursor: RemoteCursor, signal?: AbortSignal): Promise<void>;
337
+ /**
338
+ * Removes a cursor for a remote.
339
+ *
340
+ * @param remoteName - The name of the remote
117
341
  * @param signal - Optional abort signal to cancel the request
342
+ * @returns The cursor
118
343
  */
119
- get<TDocument extends PHDocument>(documentId: string, view?: ViewFilter, signal?: AbortSignal): Promise<TDocument>;
344
+ remove(remoteName: string, signal?: AbortSignal): Promise<void>;
120
345
  }
121
346
  //# sourceMappingURL=interfaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"AAeA,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"}
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/storage/interfaces.ts"],"names":[],"mappings":"AAiBA,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,28 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { IConsistencyTracker } from "../../shared/consistency-tracker.js";
3
+ import type { ConsistencyToken } from "../../shared/types.js";
4
+ import type { DocumentRelationship, IDocumentGraph, IDocumentIndexer, IOperationStore, OperationWithContext } from "../interfaces.js";
5
+ import type { Database as StorageDatabase, DocumentIndexerDatabase } from "./types.js";
6
+ type Database = StorageDatabase & DocumentIndexerDatabase;
7
+ export declare class KyselyDocumentIndexer implements IDocumentIndexer {
8
+ private db;
9
+ private operationStore;
10
+ private consistencyTracker;
11
+ private lastOperationId;
12
+ constructor(db: Kysely<Database>, operationStore: IOperationStore, consistencyTracker: IConsistencyTracker);
13
+ init(): Promise<void>;
14
+ indexOperations(items: OperationWithContext[]): Promise<void>;
15
+ waitForConsistency(token: ConsistencyToken, timeoutMs?: number, signal?: AbortSignal): Promise<void>;
16
+ getOutgoing(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
17
+ getIncoming(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
18
+ hasRelationship(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<boolean>;
19
+ getUndirectedRelationships(a: string, b: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
20
+ getDirectedRelationships(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<DocumentRelationship[]>;
21
+ findPath(sourceId: string, targetId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[] | null>;
22
+ findAncestors(documentId: string, types?: string[], consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<IDocumentGraph>;
23
+ getRelationshipTypes(consistencyToken?: ConsistencyToken, signal?: AbortSignal): Promise<string[]>;
24
+ private handleAddRelationship;
25
+ private handleRemoveRelationship;
26
+ }
27
+ export {};
28
+ //# sourceMappingURL=document-indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-indexer.d.ts","sourceRoot":"","sources":["../../../../src/storage/kysely/document-indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,350 @@
1
+ import { v4 as uuidv4 } from "uuid";
2
+ export class KyselyDocumentIndexer {
3
+ db;
4
+ operationStore;
5
+ consistencyTracker;
6
+ lastOperationId = 0;
7
+ constructor(db, operationStore, consistencyTracker) {
8
+ this.db = db;
9
+ this.operationStore = operationStore;
10
+ this.consistencyTracker = consistencyTracker;
11
+ }
12
+ async init() {
13
+ const indexerState = await this.db
14
+ .selectFrom("IndexerState")
15
+ .selectAll()
16
+ .executeTakeFirst();
17
+ if (indexerState) {
18
+ this.lastOperationId = indexerState.lastOperationId;
19
+ const missedOperations = await this.operationStore.getSinceId(this.lastOperationId);
20
+ if (missedOperations.items.length > 0) {
21
+ await this.indexOperations(missedOperations.items);
22
+ }
23
+ }
24
+ else {
25
+ await this.db
26
+ .insertInto("IndexerState")
27
+ .values({
28
+ lastOperationId: 0,
29
+ })
30
+ .execute();
31
+ const allOperations = await this.operationStore.getSinceId(0);
32
+ if (allOperations.items.length > 0) {
33
+ await this.indexOperations(allOperations.items);
34
+ }
35
+ }
36
+ }
37
+ async indexOperations(items) {
38
+ if (items.length === 0)
39
+ return;
40
+ await this.db.transaction().execute(async (trx) => {
41
+ for (const item of items) {
42
+ const { operation } = item;
43
+ const actionType = operation.action.type;
44
+ if (actionType === "ADD_RELATIONSHIP") {
45
+ await this.handleAddRelationship(trx, operation);
46
+ }
47
+ else if (actionType === "REMOVE_RELATIONSHIP") {
48
+ await this.handleRemoveRelationship(trx, operation);
49
+ }
50
+ }
51
+ const lastOpId = items[items.length - 1].operation.id;
52
+ if (lastOpId && typeof lastOpId === "number") {
53
+ this.lastOperationId = lastOpId;
54
+ await trx
55
+ .updateTable("IndexerState")
56
+ .set({
57
+ lastOperationId: lastOpId,
58
+ lastOperationTimestamp: new Date(),
59
+ })
60
+ .execute();
61
+ }
62
+ });
63
+ const coordinates = [];
64
+ for (let i = 0; i < items.length; i++) {
65
+ const item = items[i];
66
+ coordinates.push({
67
+ documentId: item.context.documentId,
68
+ scope: item.context.scope,
69
+ branch: item.context.branch,
70
+ operationIndex: item.operation.index,
71
+ });
72
+ }
73
+ this.consistencyTracker.update(coordinates);
74
+ }
75
+ async waitForConsistency(token, timeoutMs, signal) {
76
+ if (token.coordinates.length === 0) {
77
+ return;
78
+ }
79
+ await this.consistencyTracker.waitFor(token.coordinates, timeoutMs, signal);
80
+ }
81
+ async getOutgoing(documentId, types, consistencyToken, signal) {
82
+ if (consistencyToken) {
83
+ await this.waitForConsistency(consistencyToken, undefined, signal);
84
+ }
85
+ if (signal?.aborted) {
86
+ throw new Error("Operation aborted");
87
+ }
88
+ let query = this.db
89
+ .selectFrom("DocumentRelationship")
90
+ .selectAll()
91
+ .where("sourceId", "=", documentId);
92
+ if (types && types.length > 0) {
93
+ query = query.where("relationshipType", "in", types);
94
+ }
95
+ const rows = await query.execute();
96
+ return rows.map((row) => ({
97
+ sourceId: row.sourceId,
98
+ targetId: row.targetId,
99
+ relationshipType: row.relationshipType,
100
+ metadata: row.metadata
101
+ ? row.metadata
102
+ : undefined,
103
+ createdAt: row.createdAt,
104
+ updatedAt: row.updatedAt,
105
+ }));
106
+ }
107
+ async getIncoming(documentId, types, consistencyToken, signal) {
108
+ if (consistencyToken) {
109
+ await this.waitForConsistency(consistencyToken, undefined, signal);
110
+ }
111
+ if (signal?.aborted) {
112
+ throw new Error("Operation aborted");
113
+ }
114
+ let query = this.db
115
+ .selectFrom("DocumentRelationship")
116
+ .selectAll()
117
+ .where("targetId", "=", documentId);
118
+ if (types && types.length > 0) {
119
+ query = query.where("relationshipType", "in", types);
120
+ }
121
+ const rows = await query.execute();
122
+ return rows.map((row) => ({
123
+ sourceId: row.sourceId,
124
+ targetId: row.targetId,
125
+ relationshipType: row.relationshipType,
126
+ metadata: row.metadata
127
+ ? row.metadata
128
+ : undefined,
129
+ createdAt: row.createdAt,
130
+ updatedAt: row.updatedAt,
131
+ }));
132
+ }
133
+ async hasRelationship(sourceId, targetId, types, consistencyToken, signal) {
134
+ if (consistencyToken) {
135
+ await this.waitForConsistency(consistencyToken, undefined, signal);
136
+ }
137
+ if (signal?.aborted) {
138
+ throw new Error("Operation aborted");
139
+ }
140
+ let query = this.db
141
+ .selectFrom("DocumentRelationship")
142
+ .select("id")
143
+ .where("sourceId", "=", sourceId)
144
+ .where("targetId", "=", targetId);
145
+ if (types && types.length > 0) {
146
+ query = query.where("relationshipType", "in", types);
147
+ }
148
+ const result = await query.executeTakeFirst();
149
+ return result !== undefined;
150
+ }
151
+ async getUndirectedRelationships(a, b, types, consistencyToken, signal) {
152
+ if (consistencyToken) {
153
+ await this.waitForConsistency(consistencyToken, undefined, signal);
154
+ }
155
+ if (signal?.aborted) {
156
+ throw new Error("Operation aborted");
157
+ }
158
+ let query = this.db
159
+ .selectFrom("DocumentRelationship")
160
+ .selectAll()
161
+ .where((eb) => eb.or([
162
+ eb.and([eb("sourceId", "=", a), eb("targetId", "=", b)]),
163
+ eb.and([eb("sourceId", "=", b), eb("targetId", "=", a)]),
164
+ ]));
165
+ if (types && types.length > 0) {
166
+ query = query.where("relationshipType", "in", types);
167
+ }
168
+ const rows = await query.execute();
169
+ return rows.map((row) => ({
170
+ sourceId: row.sourceId,
171
+ targetId: row.targetId,
172
+ relationshipType: row.relationshipType,
173
+ metadata: row.metadata
174
+ ? row.metadata
175
+ : undefined,
176
+ createdAt: row.createdAt,
177
+ updatedAt: row.updatedAt,
178
+ }));
179
+ }
180
+ async getDirectedRelationships(sourceId, targetId, types, consistencyToken, signal) {
181
+ if (consistencyToken) {
182
+ await this.waitForConsistency(consistencyToken, undefined, signal);
183
+ }
184
+ if (signal?.aborted) {
185
+ throw new Error("Operation aborted");
186
+ }
187
+ let query = this.db
188
+ .selectFrom("DocumentRelationship")
189
+ .selectAll()
190
+ .where("sourceId", "=", sourceId)
191
+ .where("targetId", "=", targetId);
192
+ if (types && types.length > 0) {
193
+ query = query.where("relationshipType", "in", types);
194
+ }
195
+ const rows = await query.execute();
196
+ return rows.map((row) => ({
197
+ sourceId: row.sourceId,
198
+ targetId: row.targetId,
199
+ relationshipType: row.relationshipType,
200
+ metadata: row.metadata
201
+ ? row.metadata
202
+ : undefined,
203
+ createdAt: row.createdAt,
204
+ updatedAt: row.updatedAt,
205
+ }));
206
+ }
207
+ async findPath(sourceId, targetId, types, consistencyToken, signal) {
208
+ if (consistencyToken) {
209
+ await this.waitForConsistency(consistencyToken, undefined, signal);
210
+ }
211
+ if (signal?.aborted) {
212
+ throw new Error("Operation aborted");
213
+ }
214
+ if (sourceId === targetId) {
215
+ return [sourceId];
216
+ }
217
+ const visited = new Set();
218
+ const queue = [
219
+ { id: sourceId, path: [sourceId] },
220
+ ];
221
+ while (queue.length > 0) {
222
+ const current = queue.shift();
223
+ if (current.id === targetId) {
224
+ return current.path;
225
+ }
226
+ if (visited.has(current.id)) {
227
+ continue;
228
+ }
229
+ visited.add(current.id);
230
+ const outgoing = await this.getOutgoing(current.id, types, undefined, signal);
231
+ for (const rel of outgoing) {
232
+ if (!visited.has(rel.targetId)) {
233
+ queue.push({
234
+ id: rel.targetId,
235
+ path: [...current.path, rel.targetId],
236
+ });
237
+ }
238
+ }
239
+ }
240
+ return null;
241
+ }
242
+ async findAncestors(documentId, types, consistencyToken, signal) {
243
+ if (consistencyToken) {
244
+ await this.waitForConsistency(consistencyToken, undefined, signal);
245
+ }
246
+ if (signal?.aborted) {
247
+ throw new Error("Operation aborted");
248
+ }
249
+ const nodes = new Set([documentId]);
250
+ const edges = [];
251
+ const queue = [documentId];
252
+ const visited = new Set();
253
+ while (queue.length > 0) {
254
+ const currentId = queue.shift();
255
+ if (visited.has(currentId)) {
256
+ continue;
257
+ }
258
+ visited.add(currentId);
259
+ const incoming = await this.getIncoming(currentId, types, undefined, signal);
260
+ for (const rel of incoming) {
261
+ nodes.add(rel.sourceId);
262
+ edges.push({
263
+ from: rel.sourceId,
264
+ to: rel.targetId,
265
+ type: rel.relationshipType,
266
+ });
267
+ if (!visited.has(rel.sourceId)) {
268
+ queue.push(rel.sourceId);
269
+ }
270
+ }
271
+ }
272
+ return {
273
+ nodes: Array.from(nodes),
274
+ edges,
275
+ };
276
+ }
277
+ async getRelationshipTypes(consistencyToken, signal) {
278
+ if (consistencyToken) {
279
+ await this.waitForConsistency(consistencyToken, undefined, signal);
280
+ }
281
+ if (signal?.aborted) {
282
+ throw new Error("Operation aborted");
283
+ }
284
+ const rows = await this.db
285
+ .selectFrom("DocumentRelationship")
286
+ .select("relationshipType")
287
+ .distinct()
288
+ .execute();
289
+ return rows.map((row) => row.relationshipType);
290
+ }
291
+ async handleAddRelationship(trx, operation) {
292
+ const input = operation.action.input;
293
+ const existingDoc = await trx
294
+ .selectFrom("Document")
295
+ .select("id")
296
+ .where("id", "=", input.sourceId)
297
+ .executeTakeFirst();
298
+ if (!existingDoc) {
299
+ await trx
300
+ .insertInto("Document")
301
+ .values({
302
+ id: input.sourceId,
303
+ })
304
+ .execute();
305
+ }
306
+ const existingTargetDoc = await trx
307
+ .selectFrom("Document")
308
+ .select("id")
309
+ .where("id", "=", input.targetId)
310
+ .executeTakeFirst();
311
+ if (!existingTargetDoc) {
312
+ await trx
313
+ .insertInto("Document")
314
+ .values({
315
+ id: input.targetId,
316
+ })
317
+ .execute();
318
+ }
319
+ const existingRel = await trx
320
+ .selectFrom("DocumentRelationship")
321
+ .select("id")
322
+ .where("sourceId", "=", input.sourceId)
323
+ .where("targetId", "=", input.targetId)
324
+ .where("relationshipType", "=", input.relationshipType)
325
+ .executeTakeFirst();
326
+ if (!existingRel) {
327
+ const relationship = {
328
+ id: uuidv4(),
329
+ sourceId: input.sourceId,
330
+ targetId: input.targetId,
331
+ relationshipType: input.relationshipType,
332
+ metadata: input.metadata || null,
333
+ };
334
+ await trx
335
+ .insertInto("DocumentRelationship")
336
+ .values(relationship)
337
+ .execute();
338
+ }
339
+ }
340
+ async handleRemoveRelationship(trx, operation) {
341
+ const input = operation.action.input;
342
+ await trx
343
+ .deleteFrom("DocumentRelationship")
344
+ .where("sourceId", "=", input.sourceId)
345
+ .where("targetId", "=", input.targetId)
346
+ .where("relationshipType", "=", input.relationshipType)
347
+ .execute();
348
+ }
349
+ }
350
+ //# sourceMappingURL=document-indexer.js.map