@powerhousedao/reactor 6.0.0-dev.25 → 6.0.0-dev.251

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 (409) hide show
  1. package/dist/index.d.ts +4594 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +10037 -0
  4. package/dist/index.js.map +1 -0
  5. package/package.json +26 -20
  6. package/dist/src/actions/index.d.ts +0 -24
  7. package/dist/src/actions/index.d.ts.map +0 -1
  8. package/dist/src/actions/index.js +0 -76
  9. package/dist/src/actions/index.js.map +0 -1
  10. package/dist/src/cache/buffer/ring-buffer.d.ts +0 -37
  11. package/dist/src/cache/buffer/ring-buffer.d.ts.map +0 -1
  12. package/dist/src/cache/buffer/ring-buffer.js +0 -69
  13. package/dist/src/cache/buffer/ring-buffer.js.map +0 -1
  14. package/dist/src/cache/document-meta-cache-types.d.ts +0 -114
  15. package/dist/src/cache/document-meta-cache-types.d.ts.map +0 -1
  16. package/dist/src/cache/document-meta-cache-types.js +0 -2
  17. package/dist/src/cache/document-meta-cache-types.js.map +0 -1
  18. package/dist/src/cache/document-meta-cache.d.ts +0 -30
  19. package/dist/src/cache/document-meta-cache.d.ts.map +0 -1
  20. package/dist/src/cache/document-meta-cache.js +0 -128
  21. package/dist/src/cache/document-meta-cache.js.map +0 -1
  22. package/dist/src/cache/index.d.ts +0 -3
  23. package/dist/src/cache/index.d.ts.map +0 -1
  24. package/dist/src/cache/index.js +0 -2
  25. package/dist/src/cache/index.js.map +0 -1
  26. package/dist/src/cache/kysely-operation-index.d.ts +0 -16
  27. package/dist/src/cache/kysely-operation-index.d.ts.map +0 -1
  28. package/dist/src/cache/kysely-operation-index.js +0 -265
  29. package/dist/src/cache/kysely-operation-index.js.map +0 -1
  30. package/dist/src/cache/kysely-write-cache.d.ts +0 -134
  31. package/dist/src/cache/kysely-write-cache.d.ts.map +0 -1
  32. package/dist/src/cache/kysely-write-cache.js +0 -388
  33. package/dist/src/cache/kysely-write-cache.js.map +0 -1
  34. package/dist/src/cache/lru/lru-tracker.d.ts +0 -15
  35. package/dist/src/cache/lru/lru-tracker.d.ts.map +0 -1
  36. package/dist/src/cache/lru/lru-tracker.js +0 -96
  37. package/dist/src/cache/lru/lru-tracker.js.map +0 -1
  38. package/dist/src/cache/operation-index-types.d.ts +0 -51
  39. package/dist/src/cache/operation-index-types.d.ts.map +0 -1
  40. package/dist/src/cache/operation-index-types.js +0 -4
  41. package/dist/src/cache/operation-index-types.js.map +0 -1
  42. package/dist/src/cache/write/interfaces.d.ts +0 -83
  43. package/dist/src/cache/write/interfaces.d.ts.map +0 -1
  44. package/dist/src/cache/write/interfaces.js +0 -2
  45. package/dist/src/cache/write/interfaces.js.map +0 -1
  46. package/dist/src/cache/write-cache-types.d.ts +0 -42
  47. package/dist/src/cache/write-cache-types.d.ts.map +0 -1
  48. package/dist/src/cache/write-cache-types.js +0 -2
  49. package/dist/src/cache/write-cache-types.js.map +0 -1
  50. package/dist/src/client/reactor-client.d.ts +0 -121
  51. package/dist/src/client/reactor-client.d.ts.map +0 -1
  52. package/dist/src/client/reactor-client.js +0 -425
  53. package/dist/src/client/reactor-client.js.map +0 -1
  54. package/dist/src/client/types.d.ts +0 -253
  55. package/dist/src/client/types.d.ts.map +0 -1
  56. package/dist/src/client/types.js +0 -14
  57. package/dist/src/client/types.js.map +0 -1
  58. package/dist/src/core/reactor-builder.d.ts +0 -47
  59. package/dist/src/core/reactor-builder.d.ts.map +0 -1
  60. package/dist/src/core/reactor-builder.js +0 -231
  61. package/dist/src/core/reactor-builder.js.map +0 -1
  62. package/dist/src/core/reactor-client-builder.d.ts +0 -49
  63. package/dist/src/core/reactor-client-builder.d.ts.map +0 -1
  64. package/dist/src/core/reactor-client-builder.js +0 -123
  65. package/dist/src/core/reactor-client-builder.js.map +0 -1
  66. package/dist/src/core/reactor.d.ts +0 -116
  67. package/dist/src/core/reactor.d.ts.map +0 -1
  68. package/dist/src/core/reactor.js +0 -986
  69. package/dist/src/core/reactor.js.map +0 -1
  70. package/dist/src/core/types.d.ts +0 -277
  71. package/dist/src/core/types.d.ts.map +0 -1
  72. package/dist/src/core/types.js +0 -2
  73. package/dist/src/core/types.js.map +0 -1
  74. package/dist/src/core/utils.d.ts +0 -59
  75. package/dist/src/core/utils.d.ts.map +0 -1
  76. package/dist/src/core/utils.js +0 -171
  77. package/dist/src/core/utils.js.map +0 -1
  78. package/dist/src/events/event-bus.d.ts +0 -8
  79. package/dist/src/events/event-bus.d.ts.map +0 -1
  80. package/dist/src/events/event-bus.js +0 -53
  81. package/dist/src/events/event-bus.js.map +0 -1
  82. package/dist/src/events/interfaces.d.ts +0 -27
  83. package/dist/src/events/interfaces.d.ts.map +0 -1
  84. package/dist/src/events/interfaces.js +0 -2
  85. package/dist/src/events/interfaces.js.map +0 -1
  86. package/dist/src/events/types.d.ts +0 -69
  87. package/dist/src/events/types.d.ts.map +0 -1
  88. package/dist/src/events/types.js +0 -28
  89. package/dist/src/events/types.js.map +0 -1
  90. package/dist/src/executor/interfaces.d.ts +0 -49
  91. package/dist/src/executor/interfaces.d.ts.map +0 -1
  92. package/dist/src/executor/interfaces.js +0 -2
  93. package/dist/src/executor/interfaces.js.map +0 -1
  94. package/dist/src/executor/simple-job-executor-manager.d.ts +0 -34
  95. package/dist/src/executor/simple-job-executor-manager.d.ts.map +0 -1
  96. package/dist/src/executor/simple-job-executor-manager.js +0 -236
  97. package/dist/src/executor/simple-job-executor-manager.js.map +0 -1
  98. package/dist/src/executor/simple-job-executor.d.ts +0 -80
  99. package/dist/src/executor/simple-job-executor.d.ts.map +0 -1
  100. package/dist/src/executor/simple-job-executor.js +0 -898
  101. package/dist/src/executor/simple-job-executor.js.map +0 -1
  102. package/dist/src/executor/types.d.ts +0 -93
  103. package/dist/src/executor/types.d.ts.map +0 -1
  104. package/dist/src/executor/types.js +0 -11
  105. package/dist/src/executor/types.js.map +0 -1
  106. package/dist/src/executor/util.d.ts +0 -74
  107. package/dist/src/executor/util.d.ts.map +0 -1
  108. package/dist/src/executor/util.js +0 -184
  109. package/dist/src/executor/util.js.map +0 -1
  110. package/dist/src/index.d.ts +0 -53
  111. package/dist/src/index.d.ts.map +0 -1
  112. package/dist/src/index.js +0 -62
  113. package/dist/src/index.js.map +0 -1
  114. package/dist/src/job-tracker/in-memory-job-tracker.d.ts +0 -26
  115. package/dist/src/job-tracker/in-memory-job-tracker.d.ts.map +0 -1
  116. package/dist/src/job-tracker/in-memory-job-tracker.js +0 -112
  117. package/dist/src/job-tracker/in-memory-job-tracker.js.map +0 -1
  118. package/dist/src/job-tracker/index.d.ts +0 -3
  119. package/dist/src/job-tracker/index.d.ts.map +0 -1
  120. package/dist/src/job-tracker/index.js +0 -2
  121. package/dist/src/job-tracker/index.js.map +0 -1
  122. package/dist/src/job-tracker/interfaces.d.ts +0 -41
  123. package/dist/src/job-tracker/interfaces.d.ts.map +0 -1
  124. package/dist/src/job-tracker/interfaces.js +0 -2
  125. package/dist/src/job-tracker/interfaces.js.map +0 -1
  126. package/dist/src/logging/console.d.ts +0 -23
  127. package/dist/src/logging/console.d.ts.map +0 -1
  128. package/dist/src/logging/console.js +0 -108
  129. package/dist/src/logging/console.js.map +0 -1
  130. package/dist/src/logging/types.d.ts +0 -12
  131. package/dist/src/logging/types.d.ts.map +0 -1
  132. package/dist/src/logging/types.js +0 -2
  133. package/dist/src/logging/types.js.map +0 -1
  134. package/dist/src/processors/index.d.ts +0 -3
  135. package/dist/src/processors/index.d.ts.map +0 -1
  136. package/dist/src/processors/index.js +0 -2
  137. package/dist/src/processors/index.js.map +0 -1
  138. package/dist/src/processors/processor-manager.d.ts +0 -38
  139. package/dist/src/processors/processor-manager.d.ts.map +0 -1
  140. package/dist/src/processors/processor-manager.js +0 -165
  141. package/dist/src/processors/processor-manager.js.map +0 -1
  142. package/dist/src/processors/types.d.ts +0 -63
  143. package/dist/src/processors/types.d.ts.map +0 -1
  144. package/dist/src/processors/types.js +0 -2
  145. package/dist/src/processors/types.js.map +0 -1
  146. package/dist/src/processors/utils.d.ts +0 -10
  147. package/dist/src/processors/utils.d.ts.map +0 -1
  148. package/dist/src/processors/utils.js +0 -59
  149. package/dist/src/processors/utils.js.map +0 -1
  150. package/dist/src/queue/interfaces.d.ts +0 -103
  151. package/dist/src/queue/interfaces.d.ts.map +0 -1
  152. package/dist/src/queue/interfaces.js +0 -2
  153. package/dist/src/queue/interfaces.js.map +0 -1
  154. package/dist/src/queue/job-execution-handle.d.ts +0 -25
  155. package/dist/src/queue/job-execution-handle.d.ts.map +0 -1
  156. package/dist/src/queue/job-execution-handle.js +0 -62
  157. package/dist/src/queue/job-execution-handle.js.map +0 -1
  158. package/dist/src/queue/queue.d.ts +0 -81
  159. package/dist/src/queue/queue.d.ts.map +0 -1
  160. package/dist/src/queue/queue.js +0 -384
  161. package/dist/src/queue/queue.js.map +0 -1
  162. package/dist/src/queue/types.d.ts +0 -73
  163. package/dist/src/queue/types.d.ts.map +0 -1
  164. package/dist/src/queue/types.js +0 -19
  165. package/dist/src/queue/types.js.map +0 -1
  166. package/dist/src/read-models/base-read-model.d.ts +0 -60
  167. package/dist/src/read-models/base-read-model.d.ts.map +0 -1
  168. package/dist/src/read-models/base-read-model.js +0 -143
  169. package/dist/src/read-models/base-read-model.js.map +0 -1
  170. package/dist/src/read-models/coordinator.d.ts +0 -39
  171. package/dist/src/read-models/coordinator.d.ts.map +0 -1
  172. package/dist/src/read-models/coordinator.js +0 -72
  173. package/dist/src/read-models/coordinator.js.map +0 -1
  174. package/dist/src/read-models/document-view.d.ts +0 -24
  175. package/dist/src/read-models/document-view.d.ts.map +0 -1
  176. package/dist/src/read-models/document-view.js +0 -356
  177. package/dist/src/read-models/document-view.js.map +0 -1
  178. package/dist/src/read-models/interfaces.d.ts +0 -29
  179. package/dist/src/read-models/interfaces.d.ts.map +0 -1
  180. package/dist/src/read-models/interfaces.js +0 -2
  181. package/dist/src/read-models/interfaces.js.map +0 -1
  182. package/dist/src/read-models/types.d.ts +0 -47
  183. package/dist/src/read-models/types.d.ts.map +0 -1
  184. package/dist/src/read-models/types.js +0 -2
  185. package/dist/src/read-models/types.js.map +0 -1
  186. package/dist/src/registry/implementation.d.ts +0 -70
  187. package/dist/src/registry/implementation.d.ts.map +0 -1
  188. package/dist/src/registry/implementation.js +0 -216
  189. package/dist/src/registry/implementation.js.map +0 -1
  190. package/dist/src/registry/index.d.ts +0 -3
  191. package/dist/src/registry/index.d.ts.map +0 -1
  192. package/dist/src/registry/index.js +0 -2
  193. package/dist/src/registry/index.js.map +0 -1
  194. package/dist/src/registry/interfaces.d.ts +0 -100
  195. package/dist/src/registry/interfaces.d.ts.map +0 -1
  196. package/dist/src/registry/interfaces.js +0 -2
  197. package/dist/src/registry/interfaces.js.map +0 -1
  198. package/dist/src/shared/awaiter.d.ts +0 -35
  199. package/dist/src/shared/awaiter.d.ts.map +0 -1
  200. package/dist/src/shared/awaiter.js +0 -123
  201. package/dist/src/shared/awaiter.js.map +0 -1
  202. package/dist/src/shared/consistency-tracker.d.ts +0 -48
  203. package/dist/src/shared/consistency-tracker.d.ts.map +0 -1
  204. package/dist/src/shared/consistency-tracker.js +0 -123
  205. package/dist/src/shared/consistency-tracker.js.map +0 -1
  206. package/dist/src/shared/drive-url.d.ts +0 -15
  207. package/dist/src/shared/drive-url.d.ts.map +0 -1
  208. package/dist/src/shared/drive-url.js +0 -17
  209. package/dist/src/shared/drive-url.js.map +0 -1
  210. package/dist/src/shared/errors.d.ts +0 -41
  211. package/dist/src/shared/errors.d.ts.map +0 -1
  212. package/dist/src/shared/errors.js +0 -75
  213. package/dist/src/shared/errors.js.map +0 -1
  214. package/dist/src/shared/factories.d.ts +0 -16
  215. package/dist/src/shared/factories.d.ts.map +0 -1
  216. package/dist/src/shared/factories.js +0 -33
  217. package/dist/src/shared/factories.js.map +0 -1
  218. package/dist/src/shared/types.d.ts +0 -140
  219. package/dist/src/shared/types.d.ts.map +0 -1
  220. package/dist/src/shared/types.js +0 -38
  221. package/dist/src/shared/types.js.map +0 -1
  222. package/dist/src/shared/utils.d.ts +0 -3
  223. package/dist/src/shared/utils.d.ts.map +0 -1
  224. package/dist/src/shared/utils.js +0 -8
  225. package/dist/src/shared/utils.js.map +0 -1
  226. package/dist/src/signer/passthrough-signer.d.ts +0 -12
  227. package/dist/src/signer/passthrough-signer.d.ts.map +0 -1
  228. package/dist/src/signer/passthrough-signer.js +0 -19
  229. package/dist/src/signer/passthrough-signer.js.map +0 -1
  230. package/dist/src/signer/types.d.ts +0 -17
  231. package/dist/src/signer/types.d.ts.map +0 -1
  232. package/dist/src/signer/types.js +0 -2
  233. package/dist/src/signer/types.js.map +0 -1
  234. package/dist/src/storage/consistency-aware-legacy-storage.d.ts +0 -33
  235. package/dist/src/storage/consistency-aware-legacy-storage.d.ts.map +0 -1
  236. package/dist/src/storage/consistency-aware-legacy-storage.js +0 -65
  237. package/dist/src/storage/consistency-aware-legacy-storage.js.map +0 -1
  238. package/dist/src/storage/index.d.ts +0 -4
  239. package/dist/src/storage/index.d.ts.map +0 -1
  240. package/dist/src/storage/index.js +0 -3
  241. package/dist/src/storage/index.js.map +0 -1
  242. package/dist/src/storage/interfaces.d.ts +0 -453
  243. package/dist/src/storage/interfaces.d.ts.map +0 -1
  244. package/dist/src/storage/interfaces.js +0 -19
  245. package/dist/src/storage/interfaces.js.map +0 -1
  246. package/dist/src/storage/kysely/document-indexer.d.ts +0 -28
  247. package/dist/src/storage/kysely/document-indexer.d.ts.map +0 -1
  248. package/dist/src/storage/kysely/document-indexer.js +0 -350
  249. package/dist/src/storage/kysely/document-indexer.js.map +0 -1
  250. package/dist/src/storage/kysely/keyframe-store.d.ts +0 -15
  251. package/dist/src/storage/kysely/keyframe-store.d.ts.map +0 -1
  252. package/dist/src/storage/kysely/keyframe-store.js +0 -64
  253. package/dist/src/storage/kysely/keyframe-store.js.map +0 -1
  254. package/dist/src/storage/kysely/store.d.ts +0 -16
  255. package/dist/src/storage/kysely/store.d.ts.map +0 -1
  256. package/dist/src/storage/kysely/store.js +0 -246
  257. package/dist/src/storage/kysely/store.js.map +0 -1
  258. package/dist/src/storage/kysely/sync-cursor-storage.d.ts +0 -13
  259. package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +0 -1
  260. package/dist/src/storage/kysely/sync-cursor-storage.js +0 -93
  261. package/dist/src/storage/kysely/sync-cursor-storage.js.map +0 -1
  262. package/dist/src/storage/kysely/sync-remote-storage.d.ts +0 -13
  263. package/dist/src/storage/kysely/sync-remote-storage.d.ts.map +0 -1
  264. package/dist/src/storage/kysely/sync-remote-storage.js +0 -133
  265. package/dist/src/storage/kysely/sync-remote-storage.js.map +0 -1
  266. package/dist/src/storage/kysely/types.d.ts +0 -135
  267. package/dist/src/storage/kysely/types.d.ts.map +0 -1
  268. package/dist/src/storage/kysely/types.js +0 -2
  269. package/dist/src/storage/kysely/types.js.map +0 -1
  270. package/dist/src/storage/migrations/001_create_operation_table.d.ts +0 -3
  271. package/dist/src/storage/migrations/001_create_operation_table.d.ts.map +0 -1
  272. package/dist/src/storage/migrations/001_create_operation_table.js +0 -41
  273. package/dist/src/storage/migrations/001_create_operation_table.js.map +0 -1
  274. package/dist/src/storage/migrations/002_create_keyframe_table.d.ts +0 -3
  275. package/dist/src/storage/migrations/002_create_keyframe_table.d.ts.map +0 -1
  276. package/dist/src/storage/migrations/002_create_keyframe_table.js +0 -27
  277. package/dist/src/storage/migrations/002_create_keyframe_table.js.map +0 -1
  278. package/dist/src/storage/migrations/003_create_document_table.d.ts +0 -3
  279. package/dist/src/storage/migrations/003_create_document_table.d.ts.map +0 -1
  280. package/dist/src/storage/migrations/003_create_document_table.js +0 -10
  281. package/dist/src/storage/migrations/003_create_document_table.js.map +0 -1
  282. package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts +0 -3
  283. package/dist/src/storage/migrations/004_create_document_relationship_table.d.ts.map +0 -1
  284. package/dist/src/storage/migrations/004_create_document_relationship_table.js +0 -35
  285. package/dist/src/storage/migrations/004_create_document_relationship_table.js.map +0 -1
  286. package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts +0 -3
  287. package/dist/src/storage/migrations/005_create_indexer_state_table.d.ts.map +0 -1
  288. package/dist/src/storage/migrations/005_create_indexer_state_table.js +0 -10
  289. package/dist/src/storage/migrations/005_create_indexer_state_table.js.map +0 -1
  290. package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts +0 -3
  291. package/dist/src/storage/migrations/006_create_document_snapshot_table.d.ts.map +0 -1
  292. package/dist/src/storage/migrations/006_create_document_snapshot_table.js +0 -49
  293. package/dist/src/storage/migrations/006_create_document_snapshot_table.js.map +0 -1
  294. package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts +0 -3
  295. package/dist/src/storage/migrations/007_create_slug_mapping_table.d.ts.map +0 -1
  296. package/dist/src/storage/migrations/007_create_slug_mapping_table.js +0 -24
  297. package/dist/src/storage/migrations/007_create_slug_mapping_table.js.map +0 -1
  298. package/dist/src/storage/migrations/008_create_view_state_table.d.ts +0 -3
  299. package/dist/src/storage/migrations/008_create_view_state_table.d.ts.map +0 -1
  300. package/dist/src/storage/migrations/008_create_view_state_table.js +0 -10
  301. package/dist/src/storage/migrations/008_create_view_state_table.js.map +0 -1
  302. package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts +0 -3
  303. package/dist/src/storage/migrations/009_create_operation_index_tables.d.ts.map +0 -1
  304. package/dist/src/storage/migrations/009_create_operation_index_tables.js +0 -50
  305. package/dist/src/storage/migrations/009_create_operation_index_tables.js.map +0 -1
  306. package/dist/src/storage/migrations/010_create_sync_tables.d.ts +0 -3
  307. package/dist/src/storage/migrations/010_create_sync_tables.d.ts.map +0 -1
  308. package/dist/src/storage/migrations/010_create_sync_tables.js +0 -43
  309. package/dist/src/storage/migrations/010_create_sync_tables.js.map +0 -1
  310. package/dist/src/storage/migrations/index.d.ts +0 -3
  311. package/dist/src/storage/migrations/index.d.ts.map +0 -1
  312. package/dist/src/storage/migrations/index.js +0 -3
  313. package/dist/src/storage/migrations/index.js.map +0 -1
  314. package/dist/src/storage/migrations/migrator.d.ts +0 -6
  315. package/dist/src/storage/migrations/migrator.d.ts.map +0 -1
  316. package/dist/src/storage/migrations/migrator.js +0 -78
  317. package/dist/src/storage/migrations/migrator.js.map +0 -1
  318. package/dist/src/storage/migrations/run-migrations.d.ts +0 -2
  319. package/dist/src/storage/migrations/run-migrations.d.ts.map +0 -1
  320. package/dist/src/storage/migrations/run-migrations.js +0 -58
  321. package/dist/src/storage/migrations/run-migrations.js.map +0 -1
  322. package/dist/src/storage/migrations/types.d.ts +0 -9
  323. package/dist/src/storage/migrations/types.d.ts.map +0 -1
  324. package/dist/src/storage/migrations/types.js +0 -2
  325. package/dist/src/storage/migrations/types.js.map +0 -1
  326. package/dist/src/storage/txn.d.ts +0 -15
  327. package/dist/src/storage/txn.d.ts.map +0 -1
  328. package/dist/src/storage/txn.js +0 -42
  329. package/dist/src/storage/txn.js.map +0 -1
  330. package/dist/src/subs/default-error-handler.d.ts +0 -13
  331. package/dist/src/subs/default-error-handler.d.ts.map +0 -1
  332. package/dist/src/subs/default-error-handler.js +0 -27
  333. package/dist/src/subs/default-error-handler.js.map +0 -1
  334. package/dist/src/subs/react-subscription-manager.d.ts +0 -45
  335. package/dist/src/subs/react-subscription-manager.d.ts.map +0 -1
  336. package/dist/src/subs/react-subscription-manager.js +0 -185
  337. package/dist/src/subs/react-subscription-manager.js.map +0 -1
  338. package/dist/src/subs/subscription-notification-read-model.d.ts +0 -17
  339. package/dist/src/subs/subscription-notification-read-model.d.ts.map +0 -1
  340. package/dist/src/subs/subscription-notification-read-model.js +0 -62
  341. package/dist/src/subs/subscription-notification-read-model.js.map +0 -1
  342. package/dist/src/subs/types.d.ts +0 -64
  343. package/dist/src/subs/types.d.ts.map +0 -1
  344. package/dist/src/subs/types.js +0 -2
  345. package/dist/src/subs/types.js.map +0 -1
  346. package/dist/src/sync/channels/composite-channel-factory.d.ts +0 -32
  347. package/dist/src/sync/channels/composite-channel-factory.d.ts.map +0 -1
  348. package/dist/src/sync/channels/composite-channel-factory.js +0 -88
  349. package/dist/src/sync/channels/composite-channel-factory.js.map +0 -1
  350. package/dist/src/sync/channels/gql-channel-factory.d.ts +0 -27
  351. package/dist/src/sync/channels/gql-channel-factory.d.ts.map +0 -1
  352. package/dist/src/sync/channels/gql-channel-factory.js +0 -77
  353. package/dist/src/sync/channels/gql-channel-factory.js.map +0 -1
  354. package/dist/src/sync/channels/gql-channel.d.ts +0 -120
  355. package/dist/src/sync/channels/gql-channel.d.ts.map +0 -1
  356. package/dist/src/sync/channels/gql-channel.js +0 -436
  357. package/dist/src/sync/channels/gql-channel.js.map +0 -1
  358. package/dist/src/sync/channels/index.d.ts +0 -6
  359. package/dist/src/sync/channels/index.d.ts.map +0 -1
  360. package/dist/src/sync/channels/index.js +0 -6
  361. package/dist/src/sync/channels/index.js.map +0 -1
  362. package/dist/src/sync/channels/polling-channel.d.ts +0 -39
  363. package/dist/src/sync/channels/polling-channel.d.ts.map +0 -1
  364. package/dist/src/sync/channels/polling-channel.js +0 -72
  365. package/dist/src/sync/channels/polling-channel.js.map +0 -1
  366. package/dist/src/sync/channels/utils.d.ts +0 -30
  367. package/dist/src/sync/channels/utils.d.ts.map +0 -1
  368. package/dist/src/sync/channels/utils.js +0 -96
  369. package/dist/src/sync/channels/utils.js.map +0 -1
  370. package/dist/src/sync/errors.d.ts +0 -10
  371. package/dist/src/sync/errors.d.ts.map +0 -1
  372. package/dist/src/sync/errors.js +0 -17
  373. package/dist/src/sync/errors.js.map +0 -1
  374. package/dist/src/sync/index.d.ts +0 -12
  375. package/dist/src/sync/index.d.ts.map +0 -1
  376. package/dist/src/sync/index.js +0 -9
  377. package/dist/src/sync/index.js.map +0 -1
  378. package/dist/src/sync/interfaces.d.ts +0 -182
  379. package/dist/src/sync/interfaces.d.ts.map +0 -1
  380. package/dist/src/sync/interfaces.js +0 -2
  381. package/dist/src/sync/interfaces.js.map +0 -1
  382. package/dist/src/sync/mailbox.d.ts +0 -21
  383. package/dist/src/sync/mailbox.d.ts.map +0 -1
  384. package/dist/src/sync/mailbox.js +0 -59
  385. package/dist/src/sync/mailbox.js.map +0 -1
  386. package/dist/src/sync/sync-builder.d.ts +0 -19
  387. package/dist/src/sync/sync-builder.d.ts.map +0 -1
  388. package/dist/src/sync/sync-builder.js +0 -39
  389. package/dist/src/sync/sync-builder.js.map +0 -1
  390. package/dist/src/sync/sync-manager.d.ts +0 -37
  391. package/dist/src/sync/sync-manager.d.ts.map +0 -1
  392. package/dist/src/sync/sync-manager.js +0 -267
  393. package/dist/src/sync/sync-manager.js.map +0 -1
  394. package/dist/src/sync/sync-operation.d.ts +0 -28
  395. package/dist/src/sync/sync-operation.d.ts.map +0 -1
  396. package/dist/src/sync/sync-operation.js +0 -63
  397. package/dist/src/sync/sync-operation.js.map +0 -1
  398. package/dist/src/sync/types.d.ts +0 -62
  399. package/dist/src/sync/types.d.ts.map +0 -1
  400. package/dist/src/sync/types.js +0 -16
  401. package/dist/src/sync/types.js.map +0 -1
  402. package/dist/src/sync/utils.d.ts +0 -36
  403. package/dist/src/sync/utils.d.ts.map +0 -1
  404. package/dist/src/sync/utils.js +0 -78
  405. package/dist/src/sync/utils.js.map +0 -1
  406. package/dist/src/utils/reshuffle.d.ts +0 -40
  407. package/dist/src/utils/reshuffle.d.ts.map +0 -1
  408. package/dist/src/utils/reshuffle.js +0 -70
  409. package/dist/src/utils/reshuffle.js.map +0 -1
@@ -1,986 +0,0 @@
1
- import { addRelationshipAction, createDocumentAction, deleteDocumentAction, removeRelationshipAction, upgradeDocumentAction, } from "#actions/index.js";
2
- import { AbortError } from "document-drive";
3
- import { v4 as uuidv4 } from "uuid";
4
- import { createMutableShutdownStatus } from "../shared/factories.js";
5
- import { JobStatus } from "../shared/types.js";
6
- import { matchesScope } from "../shared/utils.js";
7
- import { filterByType, getSharedScope, signAction, signActions, toErrorInfo, topologicalSort, validateActionScopes, validateBatchRequest, } from "./utils.js";
8
- /**
9
- * This class implements the IReactor interface and serves as the main entry point
10
- * for the new Reactor architecture.
11
- */
12
- export class Reactor {
13
- logger;
14
- documentModelRegistry;
15
- documentStorage;
16
- shutdownStatus;
17
- setShutdown;
18
- queue;
19
- jobTracker;
20
- readModelCoordinator;
21
- features;
22
- documentView;
23
- _documentIndexer;
24
- operationStore;
25
- constructor(logger, documentModelRegistry, documentStorage, queue, jobTracker, readModelCoordinator, features, documentView, documentIndexer, operationStore) {
26
- this.logger = logger;
27
- this.documentModelRegistry = documentModelRegistry;
28
- this.documentStorage = documentStorage;
29
- this.queue = queue;
30
- this.jobTracker = jobTracker;
31
- this.readModelCoordinator = readModelCoordinator;
32
- this.features = features;
33
- this.documentView = documentView;
34
- this._documentIndexer = documentIndexer;
35
- this.operationStore = operationStore;
36
- const [status, setter] = createMutableShutdownStatus(false);
37
- this.shutdownStatus = status;
38
- this.setShutdown = setter;
39
- this.logger.verbose("Reactor({ legacyStorage: @legacy })", features.legacyStorageEnabled);
40
- this.readModelCoordinator.start();
41
- }
42
- /**
43
- * Signals that the reactor should shutdown.
44
- */
45
- kill() {
46
- this.logger.verbose("kill()");
47
- // Mark the reactor as shutdown
48
- this.setShutdown(true);
49
- // Stop the read model coordinator
50
- this.readModelCoordinator.stop();
51
- // Stop the job tracker
52
- this.jobTracker.shutdown();
53
- return this.shutdownStatus;
54
- }
55
- /**
56
- * Retrieves a list of document model specifications
57
- */
58
- getDocumentModels(namespace, paging, signal) {
59
- this.logger.verbose("getDocumentModels(@namespace, @paging)", namespace, paging);
60
- // Get document model modules from the registry + filter
61
- const modules = this.documentModelRegistry.getAllModules();
62
- const filteredModels = modules.filter((module) => !namespace || module.documentModel.global.id.startsWith(namespace));
63
- // Apply paging
64
- const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
65
- const limit = paging?.limit || filteredModels.length;
66
- const pagedModels = filteredModels.slice(startIndex, startIndex + limit);
67
- // Create paged results
68
- const hasMore = startIndex + limit < filteredModels.length;
69
- const nextCursor = hasMore ? String(startIndex + limit) : undefined;
70
- // even thought this is currently synchronous, they could have passed in an already-aborted signal
71
- if (signal?.aborted) {
72
- throw new AbortError();
73
- }
74
- return Promise.resolve({
75
- results: pagedModels,
76
- options: paging || { cursor: "0", limit: filteredModels.length },
77
- nextCursor,
78
- next: hasMore
79
- ? () => this.getDocumentModels(namespace, { cursor: nextCursor, limit }, signal)
80
- : undefined,
81
- });
82
- }
83
- /**
84
- * Retrieves a specific PHDocument by id
85
- */
86
- async get(id, view, consistencyToken, signal) {
87
- this.logger.verbose("get(@id, @view)", id, view);
88
- if (this.features.legacyStorageEnabled) {
89
- const document = await this.documentStorage.get(id, consistencyToken, signal);
90
- if (signal?.aborted) {
91
- throw new AbortError();
92
- }
93
- const childIds = await this.documentStorage.getChildren(id, consistencyToken, signal);
94
- if (signal?.aborted) {
95
- throw new AbortError();
96
- }
97
- for (const scope in document.state) {
98
- if (!matchesScope(view, scope)) {
99
- delete document.state[scope];
100
- }
101
- }
102
- return {
103
- document,
104
- childIds,
105
- };
106
- }
107
- else {
108
- const document = await this.documentView.get(id, view, consistencyToken, signal);
109
- if (signal?.aborted) {
110
- throw new AbortError();
111
- }
112
- const relationships = await this._documentIndexer.getOutgoing(id, ["child"], consistencyToken, signal);
113
- if (signal?.aborted) {
114
- throw new AbortError();
115
- }
116
- const childIds = relationships.map((rel) => rel.targetId);
117
- return {
118
- document,
119
- childIds,
120
- };
121
- }
122
- }
123
- /**
124
- * Retrieves a specific PHDocument by slug
125
- */
126
- async getBySlug(slug, view, consistencyToken, signal) {
127
- this.logger.verbose("getBySlug(@slug, @view)", slug, view);
128
- if (this.features.legacyStorageEnabled) {
129
- let ids;
130
- try {
131
- ids = await this.documentStorage.resolveIds([slug], consistencyToken, signal);
132
- }
133
- catch (error) {
134
- if (error instanceof Error && error.message.includes("not found")) {
135
- throw new Error(`Document not found with slug: ${slug}`);
136
- }
137
- throw error;
138
- }
139
- if (ids.length === 0 || !ids[0]) {
140
- throw new Error(`Document not found with slug: ${slug}`);
141
- }
142
- return await this.get(ids[0], view, consistencyToken, signal);
143
- }
144
- else {
145
- const documentId = await this.documentView.resolveSlug(slug, view, consistencyToken, signal);
146
- if (!documentId) {
147
- throw new Error(`Document not found with slug: ${slug}`);
148
- }
149
- return await this.get(documentId, view, consistencyToken, signal);
150
- }
151
- }
152
- /**
153
- * Retrieves a specific PHDocument by identifier (either id or slug)
154
- */
155
- async getByIdOrSlug(identifier, view, consistencyToken, signal) {
156
- this.logger.verbose("getByIdOrSlug(@identifier, @view)", identifier, view);
157
- if (this.features.legacyStorageEnabled) {
158
- try {
159
- return await this.get(identifier, view, consistencyToken, signal);
160
- }
161
- catch {
162
- try {
163
- const ids = await this.documentStorage.resolveIds([identifier], consistencyToken, signal);
164
- if (ids.length === 0 || !ids[0]) {
165
- throw new Error(`Document not found: ${identifier}`);
166
- }
167
- return await this.get(ids[0], view, consistencyToken, signal);
168
- }
169
- catch {
170
- throw new Error(`Document not found: ${identifier}`);
171
- }
172
- }
173
- }
174
- else {
175
- const document = await this.documentView.getByIdOrSlug(identifier, view, consistencyToken, signal);
176
- if (signal?.aborted) {
177
- throw new AbortError();
178
- }
179
- const relationships = await this._documentIndexer.getOutgoing(document.header.id, ["child"], consistencyToken, signal);
180
- if (signal?.aborted) {
181
- throw new AbortError();
182
- }
183
- const childIds = relationships.map((rel) => rel.targetId);
184
- return {
185
- document,
186
- childIds,
187
- };
188
- }
189
- }
190
- /**
191
- * Retrieves the operations for a document
192
- */
193
- async getOperations(documentId, view, filter, paging, consistencyToken, signal) {
194
- this.logger.verbose("getOperations(@documentId, @view, @filter, @paging)", documentId, view, filter, paging);
195
- if (this.features.legacyStorageEnabled) {
196
- const document = await this.documentStorage.get(documentId, consistencyToken, signal);
197
- if (signal?.aborted) {
198
- throw new AbortError();
199
- }
200
- const operations = document.operations;
201
- const result = {};
202
- for (const scope in operations) {
203
- if (matchesScope(view, scope)) {
204
- let scopeOperations = operations[scope];
205
- if (filter) {
206
- if (filter.actionTypes && filter.actionTypes.length > 0) {
207
- scopeOperations = scopeOperations.filter((op) => filter.actionTypes.includes(op.action.type));
208
- }
209
- if (filter.sinceRevision !== undefined) {
210
- scopeOperations = scopeOperations.filter((op) => op.index >= filter.sinceRevision);
211
- }
212
- if (filter.timestampFrom) {
213
- const fromMs = new Date(filter.timestampFrom).getTime();
214
- scopeOperations = scopeOperations.filter((op) => new Date(op.timestampUtcMs).getTime() >= fromMs);
215
- }
216
- if (filter.timestampTo) {
217
- const toMs = new Date(filter.timestampTo).getTime();
218
- scopeOperations = scopeOperations.filter((op) => new Date(op.timestampUtcMs).getTime() <= toMs);
219
- }
220
- }
221
- const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
222
- const limit = paging?.limit || scopeOperations.length;
223
- const pagedOperations = scopeOperations.slice(startIndex, startIndex + limit);
224
- result[scope] = {
225
- results: pagedOperations,
226
- options: { cursor: String(startIndex + limit), limit },
227
- };
228
- }
229
- }
230
- return Promise.resolve(result);
231
- }
232
- else {
233
- const branch = view?.branch || "main";
234
- const revisions = await this.operationStore.getRevisions(documentId, branch, signal);
235
- if (signal?.aborted) {
236
- throw new AbortError();
237
- }
238
- const allScopes = Object.keys(revisions.revision);
239
- const result = {};
240
- for (const scope of allScopes) {
241
- if (!matchesScope(view, scope)) {
242
- continue;
243
- }
244
- if (signal?.aborted) {
245
- throw new AbortError();
246
- }
247
- const scopeResult = await this.operationStore.getSince(documentId, scope, branch, -1, filter, paging, signal);
248
- const currentCursor = paging?.cursor ? parseInt(paging.cursor) : 0;
249
- const currentLimit = paging?.limit || 100;
250
- result[scope] = {
251
- results: scopeResult.items,
252
- options: {
253
- cursor: scopeResult.nextCursor || String(currentCursor),
254
- limit: currentLimit,
255
- },
256
- nextCursor: scopeResult.nextCursor,
257
- next: scopeResult.hasMore
258
- ? async () => {
259
- const nextPage = await this.getOperations(documentId, view, filter, {
260
- cursor: scopeResult.nextCursor,
261
- limit: currentLimit,
262
- }, consistencyToken, signal);
263
- return nextPage[scope];
264
- }
265
- : undefined,
266
- };
267
- }
268
- return result;
269
- }
270
- }
271
- /**
272
- * Filters documents by criteria and returns a list of them
273
- */
274
- async find(search, view, paging, consistencyToken, signal) {
275
- this.logger.verbose("find(@search, @view, @paging)", search, view, paging);
276
- let results;
277
- if (search.ids) {
278
- if (search.slugs && search.slugs.length > 0) {
279
- throw new Error("Cannot use both ids and slugs in the same search");
280
- }
281
- results = await this.findByIds(search.ids, view, paging, consistencyToken, signal);
282
- if (search.type) {
283
- results = filterByType(results, search.type);
284
- }
285
- }
286
- else if (search.slugs) {
287
- results = await this.findBySlugs(search.slugs, view, paging, consistencyToken, signal);
288
- if (search.type) {
289
- results = filterByType(results, search.type);
290
- }
291
- }
292
- else if (search.parentId) {
293
- results = await this.findByParentId(search.parentId, view, paging, signal);
294
- if (search.type) {
295
- results = filterByType(results, search.type);
296
- }
297
- }
298
- else if (search.type) {
299
- results = await this.findByType(search.type, view, paging, consistencyToken, signal);
300
- }
301
- else {
302
- throw new Error("No search criteria provided");
303
- }
304
- if (signal?.aborted) {
305
- throw new AbortError();
306
- }
307
- return results;
308
- }
309
- /**
310
- * Creates a document
311
- */
312
- async create(document, signer, signal, meta) {
313
- this.logger.verbose("create(@id, @type, @slug)", document.header.id, document.header.documentType, document.header.slug);
314
- const createdAtUtcIso = new Date().toISOString();
315
- if (signal?.aborted) {
316
- throw new AbortError();
317
- }
318
- const createInput = {
319
- model: document.header.documentType,
320
- version: 0,
321
- documentId: document.header.id,
322
- signing: {
323
- signature: document.header.id,
324
- publicKey: document.header.sig.publicKey,
325
- nonce: document.header.sig.nonce,
326
- createdAtUtcIso: document.header.createdAtUtcIso,
327
- documentType: document.header.documentType,
328
- },
329
- slug: document.header.slug,
330
- name: document.header.name,
331
- branch: document.header.branch,
332
- meta: document.header.meta,
333
- protocolVersions: document.header.protocolVersions ?? {
334
- "base-reducer": 2,
335
- },
336
- };
337
- const createAction = createDocumentAction(createInput);
338
- const upgradeAction = upgradeDocumentAction({
339
- documentId: document.header.id,
340
- model: document.header.documentType,
341
- fromVersion: 0,
342
- toVersion: document.state.document.version,
343
- initialState: document.state,
344
- });
345
- // Sign actions if signer is provided
346
- let actions = [createAction, upgradeAction];
347
- if (signer) {
348
- actions = await signActions(actions, signer, signal);
349
- }
350
- // Create a single job with both CREATE_DOCUMENT and UPGRADE_DOCUMENT actions
351
- const job = {
352
- id: uuidv4(),
353
- kind: "mutation",
354
- documentId: document.header.id,
355
- scope: "document",
356
- branch: "main",
357
- actions,
358
- operations: [],
359
- createdAt: new Date().toISOString(),
360
- queueHint: [],
361
- maxRetries: 3,
362
- errorHistory: [],
363
- meta,
364
- };
365
- // Create job info and register with tracker
366
- const jobInfo = {
367
- id: job.id,
368
- status: JobStatus.PENDING,
369
- createdAtUtcIso,
370
- consistencyToken: {
371
- version: 1,
372
- createdAtUtcIso,
373
- coordinates: [],
374
- },
375
- meta,
376
- };
377
- this.jobTracker.registerJob(jobInfo);
378
- // Enqueue the job
379
- await this.queue.enqueue(job);
380
- return jobInfo;
381
- }
382
- /**
383
- * Deletes a document
384
- */
385
- async deleteDocument(id, signer, signal, meta) {
386
- this.logger.verbose("deleteDocument(@id)", id);
387
- const createdAtUtcIso = new Date().toISOString();
388
- if (signal?.aborted) {
389
- throw new AbortError();
390
- }
391
- let action = deleteDocumentAction(id);
392
- // Sign action if signer is provided
393
- if (signer) {
394
- action = await signAction(action, signer, signal);
395
- }
396
- const job = {
397
- id: uuidv4(),
398
- kind: "mutation",
399
- documentId: id,
400
- scope: "document",
401
- branch: "main",
402
- actions: [action],
403
- operations: [],
404
- createdAt: new Date().toISOString(),
405
- queueHint: [],
406
- maxRetries: 3,
407
- errorHistory: [],
408
- meta,
409
- };
410
- const jobInfo = {
411
- id: job.id,
412
- status: JobStatus.PENDING,
413
- createdAtUtcIso,
414
- consistencyToken: {
415
- version: 1,
416
- createdAtUtcIso,
417
- coordinates: [],
418
- },
419
- meta,
420
- };
421
- this.jobTracker.registerJob(jobInfo);
422
- await this.queue.enqueue(job);
423
- return jobInfo;
424
- }
425
- /**
426
- * Applies a list of actions to a document
427
- */
428
- async execute(docId, branch, actions, signal, meta) {
429
- this.logger.verbose("execute(@docId, @branch, @actions)", docId, branch, actions);
430
- if (signal?.aborted) {
431
- throw new AbortError();
432
- }
433
- const createdAtUtcIso = new Date().toISOString();
434
- // Determine scope from first action (all actions should have the same scope)
435
- const scope = actions.length > 0 ? actions[0].scope || "global" : "global";
436
- // Create a single job with all actions
437
- const job = {
438
- id: uuidv4(),
439
- kind: "mutation",
440
- documentId: docId,
441
- scope: scope,
442
- branch: branch,
443
- actions: actions,
444
- operations: [],
445
- createdAt: new Date().toISOString(),
446
- queueHint: [],
447
- maxRetries: 3,
448
- errorHistory: [],
449
- meta,
450
- };
451
- // Create job info and register with tracker
452
- const jobInfo = {
453
- id: job.id,
454
- status: JobStatus.PENDING,
455
- createdAtUtcIso,
456
- consistencyToken: {
457
- version: 1,
458
- createdAtUtcIso,
459
- coordinates: [],
460
- },
461
- meta,
462
- };
463
- this.jobTracker.registerJob(jobInfo);
464
- // Enqueue the job
465
- await this.queue.enqueue(job);
466
- if (signal?.aborted) {
467
- throw new AbortError();
468
- }
469
- return jobInfo;
470
- }
471
- /**
472
- * Imports pre-existing operations that were produced by another reactor.
473
- * This function may cause a reshuffle, which will generate additional
474
- * operations.
475
- */
476
- async load(docId, branch, operations, signal, meta) {
477
- this.logger.verbose("load(@docId, @branch, @count, @operations)", docId, branch, operations.length, operations);
478
- if (signal?.aborted) {
479
- throw new AbortError();
480
- }
481
- if (operations.length === 0) {
482
- throw new Error("load requires at least one operation");
483
- }
484
- // validate the operations
485
- const scope = getSharedScope(operations);
486
- operations.forEach((operation, index) => {
487
- if (!operation.timestampUtcMs) {
488
- throw new Error(`Operation at position ${index} is missing timestampUtcMs`);
489
- }
490
- });
491
- const createdAtUtcIso = new Date().toISOString();
492
- const job = {
493
- id: uuidv4(),
494
- kind: "load",
495
- documentId: docId,
496
- scope,
497
- branch,
498
- actions: [],
499
- operations,
500
- createdAt: createdAtUtcIso,
501
- queueHint: [],
502
- maxRetries: 3,
503
- errorHistory: [],
504
- meta,
505
- };
506
- const jobInfo = {
507
- id: job.id,
508
- status: JobStatus.PENDING,
509
- createdAtUtcIso,
510
- consistencyToken: {
511
- version: 1,
512
- createdAtUtcIso,
513
- coordinates: [],
514
- },
515
- meta,
516
- };
517
- this.jobTracker.registerJob(jobInfo);
518
- await this.queue.enqueue(job);
519
- if (signal?.aborted) {
520
- throw new AbortError();
521
- }
522
- return jobInfo;
523
- }
524
- /**
525
- * Applies multiple mutations across documents with dependency management
526
- */
527
- async executeBatch(request, signal, meta) {
528
- this.logger.verbose("executeBatch(@count jobs)", request.jobs.length);
529
- if (signal?.aborted) {
530
- throw new AbortError();
531
- }
532
- validateBatchRequest(request.jobs);
533
- for (const jobPlan of request.jobs) {
534
- validateActionScopes(jobPlan);
535
- }
536
- const createdAtUtcIso = new Date().toISOString();
537
- const planKeyToJobId = new Map();
538
- for (const jobPlan of request.jobs) {
539
- planKeyToJobId.set(jobPlan.key, uuidv4());
540
- }
541
- const jobInfos = new Map();
542
- for (const jobPlan of request.jobs) {
543
- const jobId = planKeyToJobId.get(jobPlan.key);
544
- const jobInfo = {
545
- id: jobId,
546
- status: JobStatus.PENDING,
547
- createdAtUtcIso,
548
- consistencyToken: {
549
- version: 1,
550
- createdAtUtcIso,
551
- coordinates: [],
552
- },
553
- meta,
554
- };
555
- this.jobTracker.registerJob(jobInfo);
556
- jobInfos.set(jobPlan.key, jobInfo);
557
- }
558
- const sortedKeys = topologicalSort(request.jobs);
559
- const enqueuedKeys = [];
560
- try {
561
- for (const key of sortedKeys) {
562
- if (signal?.aborted) {
563
- throw new AbortError();
564
- }
565
- const jobPlan = request.jobs.find((j) => j.key === key);
566
- const jobId = planKeyToJobId.get(key);
567
- const queueHint = jobPlan.dependsOn.map((depKey) => planKeyToJobId.get(depKey));
568
- const job = {
569
- id: jobId,
570
- kind: "mutation",
571
- documentId: jobPlan.documentId,
572
- scope: jobPlan.scope,
573
- branch: jobPlan.branch,
574
- actions: jobPlan.actions,
575
- operations: [],
576
- createdAt: createdAtUtcIso,
577
- queueHint,
578
- maxRetries: 3,
579
- errorHistory: [],
580
- meta,
581
- };
582
- await this.queue.enqueue(job);
583
- enqueuedKeys.push(key);
584
- }
585
- }
586
- catch (error) {
587
- for (const key of enqueuedKeys) {
588
- const jobId = planKeyToJobId.get(key);
589
- try {
590
- await this.queue.remove(jobId);
591
- }
592
- catch {
593
- // Ignore removal errors during cleanup
594
- }
595
- }
596
- for (const jobInfo of jobInfos.values()) {
597
- this.jobTracker.markFailed(jobInfo.id, toErrorInfo("Batch enqueue failed"));
598
- }
599
- throw error;
600
- }
601
- const result = {
602
- jobs: Object.fromEntries(jobInfos),
603
- };
604
- return result;
605
- }
606
- /**
607
- * Adds multiple documents as children to another
608
- */
609
- async addChildren(parentId, documentIds, branch = "main", signer, signal) {
610
- this.logger.verbose("addChildren(@parentId, @count children, @branch)", parentId, documentIds.length, branch);
611
- if (signal?.aborted) {
612
- throw new AbortError();
613
- }
614
- let actions = documentIds.map((childId) => addRelationshipAction(parentId, childId, "child"));
615
- // Sign actions if signer is provided
616
- if (signer) {
617
- actions = await signActions(actions, signer, signal);
618
- }
619
- return await this.execute(parentId, branch, actions, signal);
620
- }
621
- /**
622
- * Removes multiple documents as children from another
623
- */
624
- async removeChildren(parentId, documentIds, branch = "main", signer, signal) {
625
- this.logger.verbose("removeChildren(@parentId, @count children, @branch)", parentId, documentIds.length, branch);
626
- if (signal?.aborted) {
627
- throw new AbortError();
628
- }
629
- let actions = documentIds.map((childId) => removeRelationshipAction(parentId, childId, "child"));
630
- // Sign actions if signer is provided
631
- if (signer) {
632
- actions = await signActions(actions, signer, signal);
633
- }
634
- return await this.execute(parentId, branch, actions, signal);
635
- }
636
- /**
637
- * Retrieves the status of a job
638
- */
639
- getJobStatus(jobId, signal) {
640
- this.logger.verbose("getJobStatus(@jobId)", jobId);
641
- if (signal?.aborted) {
642
- throw new AbortError();
643
- }
644
- const jobInfo = this.jobTracker.getJobStatus(jobId);
645
- if (!jobInfo) {
646
- // Job not found - return FAILED status with appropriate error
647
- const now = new Date().toISOString();
648
- return Promise.resolve({
649
- id: jobId,
650
- status: JobStatus.FAILED,
651
- createdAtUtcIso: now,
652
- completedAtUtcIso: now,
653
- error: toErrorInfo("Job not found"),
654
- consistencyToken: {
655
- version: 1,
656
- createdAtUtcIso: now,
657
- coordinates: [],
658
- },
659
- });
660
- }
661
- return Promise.resolve(jobInfo);
662
- }
663
- /**
664
- * Finds documents by their IDs
665
- */
666
- async findByIds(ids, view, paging, consistencyToken, signal) {
667
- this.logger.verbose("findByIds(@count ids)", ids.length);
668
- if (consistencyToken) {
669
- await this.documentView.waitForConsistency(consistencyToken, undefined, signal);
670
- }
671
- if (this.features.legacyStorageEnabled) {
672
- const documents = [];
673
- // Fetch each document by ID using storage directly
674
- for (const id of ids) {
675
- if (signal?.aborted) {
676
- throw new AbortError();
677
- }
678
- let document;
679
- try {
680
- document = await this.documentStorage.get(id, consistencyToken, signal);
681
- }
682
- catch {
683
- // Skip documents that don't exist or can't be accessed
684
- // This matches the behavior expected from a search operation
685
- continue;
686
- }
687
- // Apply view filter - This will be removed when we pass the viewfilter along
688
- // to the underlying store, but is here now for the interface.
689
- for (const scope in document.state) {
690
- if (!matchesScope(view, scope)) {
691
- delete document.state[scope];
692
- }
693
- }
694
- documents.push(document);
695
- }
696
- if (signal?.aborted) {
697
- throw new AbortError();
698
- }
699
- // Apply paging
700
- const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
701
- const limit = paging?.limit || documents.length;
702
- const pagedDocuments = documents.slice(startIndex, startIndex + limit);
703
- // Create paged results
704
- const hasMore = startIndex + limit < documents.length;
705
- const nextCursor = hasMore ? String(startIndex + limit) : undefined;
706
- return {
707
- results: pagedDocuments,
708
- options: paging || { cursor: "0", limit: documents.length },
709
- nextCursor,
710
- next: hasMore
711
- ? () => this.findByIds(ids, view, { cursor: nextCursor, limit }, consistencyToken, signal)
712
- : undefined,
713
- };
714
- }
715
- else {
716
- const documents = [];
717
- // Fetch each document by ID using documentView
718
- for (const id of ids) {
719
- if (signal?.aborted) {
720
- throw new AbortError();
721
- }
722
- try {
723
- const document = await this.documentView.get(id, view, undefined, signal);
724
- documents.push(document);
725
- }
726
- catch {
727
- // Skip documents that don't exist or can't be accessed
728
- continue;
729
- }
730
- }
731
- if (signal?.aborted) {
732
- throw new AbortError();
733
- }
734
- // Apply paging
735
- const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
736
- const limit = paging?.limit || documents.length;
737
- const pagedDocuments = documents.slice(startIndex, startIndex + limit);
738
- // Create paged results
739
- const hasMore = startIndex + limit < documents.length;
740
- const nextCursor = hasMore ? String(startIndex + limit) : undefined;
741
- return {
742
- results: pagedDocuments,
743
- options: paging || { cursor: "0", limit: documents.length },
744
- nextCursor,
745
- next: hasMore
746
- ? () => this.findByIds(ids, view, { cursor: nextCursor, limit }, consistencyToken, signal)
747
- : undefined,
748
- };
749
- }
750
- }
751
- /**
752
- * Finds documents by their slugs
753
- */
754
- async findBySlugs(slugs, view, paging, consistencyToken, signal) {
755
- this.logger.verbose("findBySlugs(@count slugs)", slugs.length);
756
- if (consistencyToken) {
757
- await this.documentView.waitForConsistency(consistencyToken, undefined, signal);
758
- }
759
- if (this.features.legacyStorageEnabled) {
760
- const documents = [];
761
- // Use storage to resolve slugs to IDs
762
- let ids;
763
- try {
764
- ids = await this.documentStorage.resolveIds(slugs, consistencyToken, signal);
765
- }
766
- catch {
767
- // If slug resolution fails, return empty results
768
- // This matches the behavior expected from a search operation
769
- ids = [];
770
- }
771
- // Fetch each document by resolved ID
772
- for (const id of ids) {
773
- if (signal?.aborted) {
774
- throw new AbortError();
775
- }
776
- let document;
777
- try {
778
- document = await this.documentStorage.get(id, consistencyToken, signal);
779
- }
780
- catch {
781
- // Skip documents that don't exist or can't be accessed
782
- continue;
783
- }
784
- // Apply view filter - This will be removed when we pass the viewfilter along
785
- // to the underlying store, but is here now for the interface.
786
- for (const scope in document.state) {
787
- if (!matchesScope(view, scope)) {
788
- delete document.state[scope];
789
- }
790
- }
791
- documents.push(document);
792
- }
793
- if (signal?.aborted) {
794
- throw new AbortError();
795
- }
796
- // Apply paging - this will be removed when we pass the paging along
797
- // to the underlying store, but is here now for the interface.
798
- const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
799
- const limit = paging?.limit || documents.length;
800
- const pagedDocuments = documents.slice(startIndex, startIndex + limit);
801
- // Create paged results
802
- const hasMore = startIndex + limit < documents.length;
803
- const nextCursor = hasMore ? String(startIndex + limit) : undefined;
804
- return {
805
- results: pagedDocuments,
806
- options: paging || { cursor: "0", limit: documents.length },
807
- nextCursor,
808
- next: hasMore
809
- ? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit }, consistencyToken, signal)
810
- : undefined,
811
- };
812
- }
813
- else {
814
- const documents = [];
815
- // Resolve each slug to a document ID
816
- const documentIds = [];
817
- for (const slug of slugs) {
818
- if (signal?.aborted) {
819
- throw new AbortError();
820
- }
821
- const documentId = await this.documentView.resolveSlug(slug, view, undefined, signal);
822
- if (documentId) {
823
- documentIds.push(documentId);
824
- }
825
- }
826
- // Fetch each document
827
- for (const documentId of documentIds) {
828
- if (signal?.aborted) {
829
- throw new AbortError();
830
- }
831
- try {
832
- const document = await this.documentView.get(documentId, view, undefined, signal);
833
- documents.push(document);
834
- }
835
- catch {
836
- // Skip documents that don't exist or can't be accessed
837
- continue;
838
- }
839
- }
840
- if (signal?.aborted) {
841
- throw new AbortError();
842
- }
843
- // Apply paging
844
- const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
845
- const limit = paging?.limit || documents.length;
846
- const pagedDocuments = documents.slice(startIndex, startIndex + limit);
847
- // Create paged results
848
- const hasMore = startIndex + limit < documents.length;
849
- const nextCursor = hasMore ? String(startIndex + limit) : undefined;
850
- return {
851
- results: pagedDocuments,
852
- options: paging || { cursor: "0", limit: documents.length },
853
- nextCursor,
854
- next: hasMore
855
- ? () => this.findBySlugs(slugs, view, { cursor: nextCursor, limit }, consistencyToken, signal)
856
- : undefined,
857
- };
858
- }
859
- }
860
- /**
861
- * Finds documents by parent ID
862
- */
863
- async findByParentId(parentId, view, paging, signal) {
864
- this.logger.verbose("findByParentId(@parentId)", parentId);
865
- // Get child relationships from indexer
866
- const relationships = await this._documentIndexer.getOutgoing(parentId, ["child"], undefined, signal);
867
- if (signal?.aborted) {
868
- throw new AbortError();
869
- }
870
- const documents = [];
871
- // Fetch each child document using the appropriate storage method
872
- for (const relationship of relationships) {
873
- if (signal?.aborted) {
874
- throw new AbortError();
875
- }
876
- try {
877
- let document;
878
- if (this.features.legacyStorageEnabled) {
879
- document = await this.documentStorage.get(relationship.targetId);
880
- // Apply view filter for legacy storage
881
- for (const scope in document.state) {
882
- if (!matchesScope(view, scope)) {
883
- delete document.state[scope];
884
- }
885
- }
886
- }
887
- else {
888
- document = await this.documentView.get(relationship.targetId, view, undefined, signal);
889
- }
890
- documents.push(document);
891
- }
892
- catch {
893
- // Skip documents that don't exist or can't be accessed
894
- continue;
895
- }
896
- }
897
- if (signal?.aborted) {
898
- throw new AbortError();
899
- }
900
- // Apply paging
901
- const startIndex = paging ? parseInt(paging.cursor) || 0 : 0;
902
- const limit = paging?.limit || documents.length;
903
- const pagedDocuments = documents.slice(startIndex, startIndex + limit);
904
- // Create paged results
905
- const hasMore = startIndex + limit < documents.length;
906
- const nextCursor = hasMore ? String(startIndex + limit) : undefined;
907
- return {
908
- results: pagedDocuments,
909
- options: paging || { cursor: "0", limit: documents.length },
910
- nextCursor,
911
- next: hasMore
912
- ? () => this.findByParentId(parentId, view, { cursor: nextCursor, limit }, signal)
913
- : undefined,
914
- };
915
- }
916
- /**
917
- * Finds documents by type
918
- */
919
- async findByType(type, view, paging, consistencyToken, signal) {
920
- this.logger.verbose("findByType(@type)", type);
921
- if (consistencyToken) {
922
- await this.documentView.waitForConsistency(consistencyToken, undefined, signal);
923
- }
924
- if (this.features.legacyStorageEnabled) {
925
- const documents = [];
926
- // Use storage's findByType method directly
927
- const cursor = paging?.cursor;
928
- const limit = paging?.limit || 100;
929
- // Get document IDs of the specified type
930
- const { documents: documentIds, nextCursor } = await this.documentStorage.findByType(type, limit, cursor, consistencyToken, signal);
931
- if (signal?.aborted) {
932
- throw new AbortError();
933
- }
934
- // Fetch each document by its ID
935
- for (const documentId of documentIds) {
936
- if (signal?.aborted) {
937
- throw new AbortError();
938
- }
939
- let document;
940
- try {
941
- document = await this.documentStorage.get(documentId, consistencyToken, signal);
942
- }
943
- catch {
944
- // Skip documents that can't be retrieved
945
- continue;
946
- }
947
- // Apply view filter
948
- for (const scope in document.state) {
949
- if (!matchesScope(view, scope)) {
950
- delete document.state[scope];
951
- }
952
- }
953
- documents.push(document);
954
- }
955
- if (signal?.aborted) {
956
- throw new AbortError();
957
- }
958
- // Results are already paged from the storage layer
959
- return {
960
- results: documents,
961
- options: paging || { cursor: cursor || "0", limit },
962
- nextCursor,
963
- next: nextCursor
964
- ? async () => this.findByType(type, view, { cursor: nextCursor, limit }, consistencyToken, signal)
965
- : undefined,
966
- };
967
- }
968
- else {
969
- const result = await this.documentView.findByType(type, view, paging, consistencyToken, signal);
970
- if (signal?.aborted) {
971
- throw new AbortError();
972
- }
973
- const cursor = paging?.cursor;
974
- const limit = paging?.limit || 100;
975
- return {
976
- results: result.items,
977
- options: paging || { cursor: cursor || "0", limit },
978
- nextCursor: result.nextCursor,
979
- next: result.nextCursor
980
- ? async () => this.findByType(type, view, { cursor: result.nextCursor, limit }, consistencyToken, signal)
981
- : undefined,
982
- };
983
- }
984
- }
985
- }
986
- //# sourceMappingURL=reactor.js.map