@abloatai/ablo 0.26.0 → 0.28.0

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 (418) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/README.md +102 -86
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +134 -151
  5. package/dist/Database.d.ts +68 -69
  6. package/dist/Database.js +316 -135
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +54 -52
  12. package/dist/Model.js +78 -62
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +122 -118
  18. package/dist/SyncClient.js +541 -245
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +10 -9
  22. package/dist/adapters/inMemoryStorage.js +21 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +173 -121
  50. package/dist/client/Ablo.d.ts +97 -74
  51. package/dist/client/Ablo.js +129 -163
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +442 -81
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +16 -17
  61. package/dist/client/createInternalComponents.js +26 -31
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +59 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +78 -87
  76. package/dist/client/options.d.ts +157 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +16 -20
  91. package/dist/client/wsMutationExecutor.js +18 -23
  92. package/dist/commit/contract.d.ts +493 -0
  93. package/dist/commit/contract.js +187 -0
  94. package/dist/commit/index.d.ts +6 -0
  95. package/dist/commit/index.js +5 -0
  96. package/dist/context.d.ts +6 -4
  97. package/dist/context.js +6 -4
  98. package/dist/coordination/index.d.ts +10 -8
  99. package/dist/coordination/index.js +14 -12
  100. package/dist/coordination/schema.d.ts +176 -128
  101. package/dist/coordination/schema.js +197 -133
  102. package/dist/coordination/trace.d.ts +9 -10
  103. package/dist/coordination/trace.js +13 -14
  104. package/dist/core/DatabaseManager.d.ts +5 -7
  105. package/dist/core/DatabaseManager.js +15 -19
  106. package/dist/core/QueryProcessor.d.ts +7 -9
  107. package/dist/core/QueryProcessor.js +22 -28
  108. package/dist/core/QueryView.d.ts +8 -8
  109. package/dist/core/QueryView.js +2 -2
  110. package/dist/core/StoreManager.d.ts +14 -14
  111. package/dist/core/StoreManager.js +33 -24
  112. package/dist/core/ViewRegistry.d.ts +5 -5
  113. package/dist/core/ViewRegistry.js +4 -4
  114. package/dist/core/index.d.ts +17 -12
  115. package/dist/core/index.js +32 -26
  116. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  117. package/dist/core/openIDBWithTimeout.js +42 -43
  118. package/dist/core/queryUtils.d.ts +45 -0
  119. package/dist/core/queryUtils.js +69 -0
  120. package/dist/core/storeContract.d.ts +63 -61
  121. package/dist/core/storeContract.js +8 -12
  122. package/dist/environment.d.ts +28 -0
  123. package/dist/environment.js +21 -0
  124. package/dist/errorCodes.d.ts +107 -99
  125. package/dist/errorCodes.js +137 -134
  126. package/dist/errors.d.ts +160 -166
  127. package/dist/errors.js +155 -158
  128. package/dist/index.d.ts +36 -27
  129. package/dist/index.js +91 -86
  130. package/dist/interfaces/index.d.ts +102 -113
  131. package/dist/interfaces/index.js +5 -4
  132. package/dist/keys/index.d.ts +27 -29
  133. package/dist/keys/index.js +41 -40
  134. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  135. package/dist/mutators/RecordingTransaction.js +31 -37
  136. package/dist/mutators/Transaction.d.ts +18 -26
  137. package/dist/mutators/Transaction.js +14 -20
  138. package/dist/mutators/UndoManager.d.ts +124 -131
  139. package/dist/mutators/UndoManager.js +177 -156
  140. package/dist/mutators/defineMutators.d.ts +23 -34
  141. package/dist/mutators/defineMutators.js +14 -20
  142. package/dist/mutators/inverseOp.d.ts +12 -15
  143. package/dist/mutators/inverseOp.js +12 -15
  144. package/dist/mutators/mutateActions.d.ts +10 -9
  145. package/dist/mutators/mutateActions.js +1 -1
  146. package/dist/mutators/readerActions.d.ts +9 -8
  147. package/dist/mutators/readerActions.js +2 -2
  148. package/dist/mutators/undoApply.d.ts +31 -27
  149. package/dist/mutators/undoApply.js +26 -24
  150. package/dist/policy/index.d.ts +5 -3
  151. package/dist/policy/index.js +5 -3
  152. package/dist/policy/types.d.ts +104 -100
  153. package/dist/policy/types.js +67 -66
  154. package/dist/query/client.d.ts +28 -23
  155. package/dist/query/client.js +45 -43
  156. package/dist/query/types.d.ts +37 -60
  157. package/dist/query/types.js +13 -33
  158. package/dist/react/AbloProvider.d.ts +1 -1
  159. package/dist/react/AbloProvider.js +2 -2
  160. package/dist/react/context.d.ts +25 -28
  161. package/dist/react/context.js +9 -10
  162. package/dist/react/index.d.ts +41 -42
  163. package/dist/react/index.js +37 -38
  164. package/dist/react/internalContext.d.ts +17 -19
  165. package/dist/react/useAblo.d.ts +28 -25
  166. package/dist/react/useAblo.js +41 -17
  167. package/dist/react/useCurrentUserId.d.ts +8 -7
  168. package/dist/react/useCurrentUserId.js +8 -7
  169. package/dist/react/useErrorListener.d.ts +7 -7
  170. package/dist/react/useErrorListener.js +10 -11
  171. package/dist/react/useMutationFailureListener.d.ts +8 -8
  172. package/dist/react/useMutationFailureListener.js +8 -8
  173. package/dist/react/useMutators.d.ts +11 -11
  174. package/dist/react/useMutators.js +3 -3
  175. package/dist/react/useReactive.js +2 -2
  176. package/dist/react/useSyncStatus.d.ts +4 -6
  177. package/dist/react/useUndoScope.d.ts +7 -9
  178. package/dist/react/useUndoScope.js +1 -1
  179. package/dist/schema/coordination.d.ts +21 -25
  180. package/dist/schema/coordination.js +21 -25
  181. package/dist/schema/ddl.d.ts +43 -39
  182. package/dist/schema/ddl.js +75 -68
  183. package/dist/schema/ddlLock.d.ts +20 -24
  184. package/dist/schema/ddlLock.js +18 -23
  185. package/dist/schema/diff.d.ts +99 -61
  186. package/dist/schema/diff.js +43 -34
  187. package/dist/schema/field.d.ts +37 -42
  188. package/dist/schema/field.js +35 -48
  189. package/dist/schema/generate.d.ts +12 -12
  190. package/dist/schema/generate.js +12 -12
  191. package/dist/schema/index.d.ts +3 -3
  192. package/dist/schema/index.js +21 -23
  193. package/dist/schema/model.d.ts +118 -143
  194. package/dist/schema/model.js +22 -33
  195. package/dist/schema/openapi.d.ts +10 -9
  196. package/dist/schema/openapi.js +5 -3
  197. package/dist/schema/queries.d.ts +29 -31
  198. package/dist/schema/queries.js +23 -25
  199. package/dist/schema/relation.d.ts +89 -99
  200. package/dist/schema/relation.js +13 -13
  201. package/dist/schema/residency.d.ts +16 -13
  202. package/dist/schema/residency.js +16 -13
  203. package/dist/schema/roles.d.ts +36 -43
  204. package/dist/schema/roles.js +31 -37
  205. package/dist/schema/schema.d.ts +64 -43
  206. package/dist/schema/schema.js +31 -32
  207. package/dist/schema/select.d.ts +13 -13
  208. package/dist/schema/select.js +13 -13
  209. package/dist/schema/serialize.d.ts +28 -31
  210. package/dist/schema/serialize.js +27 -31
  211. package/dist/schema/sugar.d.ts +17 -32
  212. package/dist/schema/sugar.js +14 -29
  213. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  214. package/dist/schema/syncDeltaRow.js +89 -0
  215. package/dist/schema/tenancy.d.ts +44 -46
  216. package/dist/schema/tenancy.js +46 -48
  217. package/dist/server/adapter.d.ts +58 -58
  218. package/dist/server/adapter.js +13 -14
  219. package/dist/server/commit.d.ts +60 -64
  220. package/dist/server/index.d.ts +9 -10
  221. package/dist/server/index.js +1 -1
  222. package/dist/server/readConfig.d.ts +70 -0
  223. package/dist/server/readConfig.js +8 -0
  224. package/dist/server/storageMode.d.ts +23 -0
  225. package/dist/server/storageMode.js +17 -0
  226. package/dist/source/adapter.d.ts +30 -25
  227. package/dist/source/adapter.js +10 -10
  228. package/dist/source/adapters/drizzle.d.ts +28 -23
  229. package/dist/source/adapters/drizzle.js +30 -25
  230. package/dist/source/adapters/kysely.d.ts +27 -25
  231. package/dist/source/adapters/kysely.js +24 -23
  232. package/dist/source/adapters/memory.d.ts +8 -7
  233. package/dist/source/adapters/memory.js +9 -8
  234. package/dist/source/adapters/prisma.d.ts +13 -12
  235. package/dist/source/adapters/prisma.js +22 -25
  236. package/dist/source/conformance.d.ts +18 -11
  237. package/dist/source/conformance.js +17 -11
  238. package/dist/source/connector.d.ts +31 -32
  239. package/dist/source/connector.js +28 -28
  240. package/dist/source/connectorProtocol.d.ts +160 -0
  241. package/dist/source/connectorProtocol.js +162 -0
  242. package/dist/source/contract.d.ts +26 -27
  243. package/dist/source/contract.js +28 -29
  244. package/dist/source/factory.d.ts +46 -58
  245. package/dist/source/factory.js +22 -27
  246. package/dist/source/index.d.ts +7 -9
  247. package/dist/source/index.js +12 -14
  248. package/dist/source/migrations.d.ts +9 -9
  249. package/dist/source/migrations.js +9 -9
  250. package/dist/source/next.d.ts +9 -10
  251. package/dist/source/next.js +6 -7
  252. package/dist/source/pushQueue.d.ts +69 -47
  253. package/dist/source/pushQueue.js +32 -28
  254. package/dist/source/signing.d.ts +46 -17
  255. package/dist/source/signing.js +28 -11
  256. package/dist/source/types.d.ts +121 -104
  257. package/dist/source/types.js +13 -14
  258. package/dist/stores/ObjectStore.d.ts +24 -12
  259. package/dist/stores/ObjectStore.js +38 -16
  260. package/dist/stores/ObjectStoreContract.d.ts +14 -15
  261. package/dist/stores/SyncActionStore.d.ts +7 -11
  262. package/dist/stores/SyncActionStore.js +13 -17
  263. package/dist/surface.d.ts +28 -21
  264. package/dist/surface.js +29 -20
  265. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  266. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  267. package/dist/sync/ConnectionManager.d.ts +39 -50
  268. package/dist/sync/ConnectionManager.js +55 -66
  269. package/dist/sync/NetworkProbe.d.ts +24 -29
  270. package/dist/sync/NetworkProbe.js +63 -69
  271. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  272. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  273. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  274. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  275. package/dist/sync/SyncWebSocket.d.ts +141 -166
  276. package/dist/sync/SyncWebSocket.js +191 -223
  277. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  278. package/dist/sync/awaitClaimGrant.js +11 -11
  279. package/dist/sync/bootstrapApply.d.ts +34 -24
  280. package/dist/sync/bootstrapApply.js +27 -19
  281. package/dist/sync/commitFrames.d.ts +21 -20
  282. package/dist/sync/commitFrames.js +18 -18
  283. package/dist/sync/createClaimStream.d.ts +23 -22
  284. package/dist/sync/createClaimStream.js +105 -23
  285. package/dist/sync/createPresenceStream.d.ts +19 -18
  286. package/dist/sync/createPresenceStream.js +25 -26
  287. package/dist/sync/createSnapshot.d.ts +12 -14
  288. package/dist/sync/createSnapshot.js +20 -26
  289. package/dist/sync/credentialLifecycle.d.ts +104 -104
  290. package/dist/sync/credentialLifecycle.js +140 -147
  291. package/dist/sync/deltaPipeline.d.ts +36 -34
  292. package/dist/sync/deltaPipeline.js +64 -65
  293. package/dist/sync/groupChange.d.ts +63 -61
  294. package/dist/sync/groupChange.js +74 -78
  295. package/dist/sync/heartbeat.d.ts +34 -33
  296. package/dist/sync/heartbeat.js +31 -31
  297. package/dist/sync/participants.d.ts +19 -19
  298. package/dist/sync/persistedPrefix.d.ts +12 -0
  299. package/dist/sync/persistedPrefix.js +22 -0
  300. package/dist/sync/schemas.d.ts +3 -2
  301. package/dist/sync/schemas.js +14 -10
  302. package/dist/sync/syncCursor.d.ts +17 -21
  303. package/dist/sync/syncCursor.js +17 -21
  304. package/dist/sync/syncPlan.d.ts +28 -36
  305. package/dist/sync/syncPlan.js +18 -19
  306. package/dist/sync/syncPosition.d.ts +54 -49
  307. package/dist/sync/syncPosition.js +57 -52
  308. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  309. package/dist/sync/wsFrameHandlers.js +63 -67
  310. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  311. package/dist/testing/fixtures/bootstrap.js +12 -6
  312. package/dist/testing/fixtures/deltas.d.ts +30 -33
  313. package/dist/testing/fixtures/deltas.js +30 -33
  314. package/dist/testing/fixtures/models.d.ts +11 -10
  315. package/dist/testing/fixtures/models.js +11 -10
  316. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  317. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  318. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  319. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  320. package/dist/testing/helpers/wait.d.ts +13 -8
  321. package/dist/testing/helpers/wait.js +13 -8
  322. package/dist/testing/index.d.ts +5 -3
  323. package/dist/testing/index.js +3 -2
  324. package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
  325. package/dist/testing/mocks/FakeDatabase.js +10 -0
  326. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  327. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  328. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  329. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  330. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  331. package/dist/testing/mocks/MockSyncContext.js +15 -13
  332. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  333. package/dist/testing/mocks/MockSyncStore.js +11 -11
  334. package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
  335. package/dist/testing/mocks/MockWebSocket.js +22 -21
  336. package/dist/transactions/TransactionQueue.d.ts +244 -181
  337. package/dist/transactions/TransactionQueue.js +929 -423
  338. package/dist/transactions/TransactionStore.d.ts +6 -4
  339. package/dist/transactions/TransactionStore.js +6 -4
  340. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  341. package/dist/transactions/UnconfirmedWrites.js +104 -0
  342. package/dist/transactions/coalesceRules.d.ts +41 -17
  343. package/dist/transactions/coalesceRules.js +40 -17
  344. package/dist/transactions/commitEnvelope.d.ts +132 -0
  345. package/dist/transactions/commitEnvelope.js +139 -0
  346. package/dist/transactions/commitOutboxStore.d.ts +32 -0
  347. package/dist/transactions/commitOutboxStore.js +26 -0
  348. package/dist/transactions/commitPayload.d.ts +63 -52
  349. package/dist/transactions/commitPayload.js +54 -57
  350. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  351. package/dist/transactions/deltaConfirmation.js +37 -45
  352. package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
  353. package/dist/transactions/httpCommitEnvelope.js +179 -0
  354. package/dist/transactions/optimisticApply.d.ts +49 -0
  355. package/dist/transactions/optimisticApply.js +65 -0
  356. package/dist/transactions/replayValidation.d.ts +182 -0
  357. package/dist/transactions/replayValidation.js +156 -0
  358. package/dist/types/global.d.ts +46 -41
  359. package/dist/types/global.js +20 -19
  360. package/dist/types/index.d.ts +71 -77
  361. package/dist/types/index.js +22 -22
  362. package/dist/types/modelData.d.ts +6 -8
  363. package/dist/types/modelData.js +5 -7
  364. package/dist/types/participant.d.ts +10 -11
  365. package/dist/types/participant.js +6 -8
  366. package/dist/types/streams.d.ts +208 -195
  367. package/dist/types/streams.js +7 -7
  368. package/dist/utils/asyncIterator.d.ts +25 -32
  369. package/dist/utils/asyncIterator.js +25 -32
  370. package/dist/utils/duration.d.ts +12 -15
  371. package/dist/utils/duration.js +12 -15
  372. package/dist/utils/mobxSetup.d.ts +53 -0
  373. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  374. package/dist/webhooks/events.d.ts +21 -16
  375. package/dist/webhooks/events.js +10 -8
  376. package/dist/webhooks/index.d.ts +5 -7
  377. package/dist/webhooks/index.js +5 -7
  378. package/dist/wire/bootstrapReason.d.ts +9 -0
  379. package/dist/wire/bootstrapReason.js +8 -0
  380. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  381. package/dist/wire/delta.js +114 -0
  382. package/dist/wire/errorEnvelope.d.ts +30 -31
  383. package/dist/wire/errorEnvelope.js +34 -40
  384. package/dist/wire/frames.d.ts +315 -86
  385. package/dist/wire/frames.js +47 -33
  386. package/dist/wire/index.d.ts +18 -14
  387. package/dist/wire/index.js +32 -27
  388. package/dist/wire/listEnvelope.d.ts +16 -23
  389. package/dist/wire/listEnvelope.js +7 -6
  390. package/dist/wire/protocol.d.ts +25 -32
  391. package/dist/wire/protocol.js +25 -32
  392. package/dist/wire/protocolVersion.d.ts +44 -40
  393. package/dist/wire/protocolVersion.js +44 -40
  394. package/docs/api.md +10 -10
  395. package/docs/coordination.md +59 -0
  396. package/docs/mcp.md +1 -1
  397. package/package.json +17 -11
  398. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  399. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  400. package/dist/core/query-utils.d.ts +0 -34
  401. package/dist/core/query-utils.js +0 -59
  402. package/dist/schema/sync-delta-row.js +0 -103
  403. package/dist/schema/sync-delta-wire.js +0 -102
  404. package/dist/server/read-config.d.ts +0 -67
  405. package/dist/server/read-config.js +0 -8
  406. package/dist/server/storage-mode.d.ts +0 -8
  407. package/dist/server/storage-mode.js +0 -28
  408. package/dist/source/connector-protocol.d.ts +0 -159
  409. package/dist/source/connector-protocol.js +0 -161
  410. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  411. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  412. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  413. package/dist/transactions/mutation-error-handler.js +0 -39
  414. package/dist/transactions/optimistic.d.ts +0 -24
  415. package/dist/transactions/optimistic.js +0 -45
  416. package/dist/transactions/persistedReplay.d.ts +0 -93
  417. package/dist/transactions/persistedReplay.js +0 -105
  418. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,7 +1,8 @@
1
1
  /**
2
- * Delta factories for sync engine tests.
3
- *
4
- * Creates well-formed SyncAction objects matching the server wire format.
2
+ * Factories that build well-formed delta objects for tests. A delta, a
3
+ * {@link SyncAction}, is a single change to one model instance in the wire
4
+ * format the server sends: an insert, update, delete, archive, and so on.
5
+ * These helpers let tests construct deltas without a live server.
5
6
  */
6
7
  import type { SyncActionType, SyncAction } from '../../types/index.js';
7
8
  /** Reset the delta counter (call in beforeEach for deterministic IDs) */
@@ -19,68 +20,64 @@ export interface CreateDeltaOptions {
19
20
  data?: Record<string, unknown>;
20
21
  }
21
22
  /**
22
- * Create a single SyncAction (delta) matching the server wire format.
23
+ * Builds a single delta ({@link SyncAction}) in the server's wire format.
23
24
  */
24
25
  export declare function createDelta(options: CreateDeltaOptions): SyncAction;
25
26
  /**
26
- * Create an INSERT delta for a new entity.
27
+ * Builds an insert delta for a new entity.
27
28
  */
28
29
  export declare function createInsertDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
29
30
  /**
30
- * Create an UPDATE delta for an existing entity.
31
+ * Builds an update delta for an existing entity.
31
32
  */
32
33
  export declare function createUpdateDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
33
34
  /**
34
- * Create a DELETE delta.
35
+ * Builds a delete delta.
35
36
  */
36
37
  export declare function createDeleteDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
37
38
  /**
38
- * Create an ARCHIVE delta.
39
+ * Builds an archive delta, stamping `archivedAt` with the current time.
39
40
  */
40
41
  export declare function createArchiveDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
41
42
  /**
42
- * Create an UNARCHIVE (reVive) delta.
43
+ * Builds an unarchive delta, clearing `archivedAt`.
43
44
  */
44
45
  export declare function createUnarchiveDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
45
46
  /**
46
- * Create a COVERING ('C') delta.
47
- *
48
- * Signals that the client has gained permission to see an existing entity.
49
- * Treated as an insert by the client — the entity is added to the local
50
- * store as if newly created. Typically follows a GroupAdded delta.
47
+ * Builds a covering ('C') delta. It signals that the client has gained
48
+ * permission to see an entity that already exists. The client treats it
49
+ * like an insert, adding the entity to its local store as if newly created.
50
+ * A covering delta typically follows a group-added delta.
51
51
  */
52
52
  export declare function createCoveringDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
53
53
  /**
54
- * Create a GROUP ADDED ('G') delta using the incremental payload shape.
55
- *
56
- * Signals that the recipient was added to a single sync group. The client
57
- * updates its subscription metadata and waits for Covering deltas to
58
- * deliver the newly-visible entities. Unlike the legacy 'G' payload
59
- * (addedGroups/removedGroups), this does not trigger a re-bootstrap.
54
+ * Builds a group-added ('G') delta in the incremental payload shape. It
55
+ * signals that the recipient was added to a single sync group. The client
56
+ * updates its subscription state and waits for covering deltas to deliver
57
+ * the newly visible entities. Unlike the older payload that carries both
58
+ * added and removed groups, this shape does not trigger a re-bootstrap.
60
59
  */
61
60
  export declare function createGroupAddedDelta(userId: string, group: string, syncId?: number): SyncAction;
62
61
  /**
63
- * Create a legacy GROUP CHANGE ('G') delta with the old payload shape.
64
- *
65
- * Carries both added and removed groups in one delta and forces a full
66
- * re-bootstrap on the client. Use for testing backward compatibility with
67
- * the deprecated EmitGroupChange path.
62
+ * Builds a group-change ('G') delta in the older payload shape, which
63
+ * carries both added and removed groups in one delta and forces a full
64
+ * re-bootstrap on the client. Useful for testing backward compatibility
65
+ * with that older shape.
68
66
  */
69
67
  export declare function createLegacyGroupChangeDelta(userId: string, added: string[], removed: string[], syncId?: number): SyncAction;
70
68
  /**
71
- * Create a GROUP REMOVED ('S') delta.
72
- *
73
- * Signals that the recipient lost access to a sync group. The client
74
- * purges affected local state and triggers a re-bootstrap with the
75
- * updated group list.
69
+ * Builds a group-removed ('S') delta. It signals that the recipient lost
70
+ * access to a sync group. The client purges the affected local state and
71
+ * re-bootstraps with the updated group list.
76
72
  */
77
73
  export declare function createGroupRemovedDelta(userId: string, group: string, syncId?: number): SyncAction;
78
74
  /**
79
- * Create a batch of deltas with sequential sync IDs.
75
+ * Builds a batch of deltas with sequential sync IDs.
80
76
  */
81
77
  export declare function createDeltaBatch(deltas: Omit<CreateDeltaOptions, 'id'>[], startingSyncId?: number): SyncAction[];
82
78
  /**
83
- * Create a confirmation delta used to confirm that a mutation
84
- * was persisted by the server (TransactionQueue watches for this).
79
+ * Builds a confirmation delta, which signals that a mutation was persisted
80
+ * by the server. The client's transaction queue watches for these to
81
+ * confirm its in-flight writes.
85
82
  */
86
83
  export declare function createConfirmationDelta(modelName: string, modelId: string, syncId: number, action?: SyncActionType, data?: Record<string, unknown>): SyncAction;
@@ -1,7 +1,8 @@
1
1
  /**
2
- * Delta factories for sync engine tests.
3
- *
4
- * Creates well-formed SyncAction objects matching the server wire format.
2
+ * Factories that build well-formed delta objects for tests. A delta, a
3
+ * {@link SyncAction}, is a single change to one model instance in the wire
4
+ * format the server sends: an insert, update, delete, archive, and so on.
5
+ * These helpers let tests construct deltas without a live server.
5
6
  */
6
7
  let deltaCounter = 0;
7
8
  /** Reset the delta counter (call in beforeEach for deterministic IDs) */
@@ -9,7 +10,7 @@ export function resetDeltaCounter() {
9
10
  deltaCounter = 0;
10
11
  }
11
12
  /**
12
- * Create a single SyncAction (delta) matching the server wire format.
13
+ * Builds a single delta ({@link SyncAction}) in the server's wire format.
13
14
  */
14
15
  export function createDelta(options) {
15
16
  deltaCounter++;
@@ -23,25 +24,25 @@ export function createDelta(options) {
23
24
  };
24
25
  }
25
26
  /**
26
- * Create an INSERT delta for a new entity.
27
+ * Builds an insert delta for a new entity.
27
28
  */
28
29
  export function createInsertDelta(modelName, modelId, data, syncId) {
29
30
  return createDelta({ modelName, modelId, action: 'I', data, id: syncId });
30
31
  }
31
32
  /**
32
- * Create an UPDATE delta for an existing entity.
33
+ * Builds an update delta for an existing entity.
33
34
  */
34
35
  export function createUpdateDelta(modelName, modelId, data, syncId) {
35
36
  return createDelta({ modelName, modelId, action: 'U', data, id: syncId });
36
37
  }
37
38
  /**
38
- * Create a DELETE delta.
39
+ * Builds a delete delta.
39
40
  */
40
41
  export function createDeleteDelta(modelName, modelId, syncId) {
41
42
  return createDelta({ modelName, modelId, action: 'D', data: {}, id: syncId });
42
43
  }
43
44
  /**
44
- * Create an ARCHIVE delta.
45
+ * Builds an archive delta, stamping `archivedAt` with the current time.
45
46
  */
46
47
  export function createArchiveDelta(modelName, modelId, syncId) {
47
48
  return createDelta({
@@ -53,7 +54,7 @@ export function createArchiveDelta(modelName, modelId, syncId) {
53
54
  });
54
55
  }
55
56
  /**
56
- * Create an UNARCHIVE (reVive) delta.
57
+ * Builds an unarchive delta, clearing `archivedAt`.
57
58
  */
58
59
  export function createUnarchiveDelta(modelName, modelId, syncId) {
59
60
  return createDelta({
@@ -65,22 +66,20 @@ export function createUnarchiveDelta(modelName, modelId, syncId) {
65
66
  });
66
67
  }
67
68
  /**
68
- * Create a COVERING ('C') delta.
69
- *
70
- * Signals that the client has gained permission to see an existing entity.
71
- * Treated as an insert by the client — the entity is added to the local
72
- * store as if newly created. Typically follows a GroupAdded delta.
69
+ * Builds a covering ('C') delta. It signals that the client has gained
70
+ * permission to see an entity that already exists. The client treats it
71
+ * like an insert, adding the entity to its local store as if newly created.
72
+ * A covering delta typically follows a group-added delta.
73
73
  */
74
74
  export function createCoveringDelta(modelName, modelId, data, syncId) {
75
75
  return createDelta({ modelName, modelId, action: 'C', data, id: syncId });
76
76
  }
77
77
  /**
78
- * Create a GROUP ADDED ('G') delta using the incremental payload shape.
79
- *
80
- * Signals that the recipient was added to a single sync group. The client
81
- * updates its subscription metadata and waits for Covering deltas to
82
- * deliver the newly-visible entities. Unlike the legacy 'G' payload
83
- * (addedGroups/removedGroups), this does not trigger a re-bootstrap.
78
+ * Builds a group-added ('G') delta in the incremental payload shape. It
79
+ * signals that the recipient was added to a single sync group. The client
80
+ * updates its subscription state and waits for covering deltas to deliver
81
+ * the newly visible entities. Unlike the older payload that carries both
82
+ * added and removed groups, this shape does not trigger a re-bootstrap.
84
83
  */
85
84
  export function createGroupAddedDelta(userId, group, syncId) {
86
85
  return createDelta({
@@ -92,11 +91,10 @@ export function createGroupAddedDelta(userId, group, syncId) {
92
91
  });
93
92
  }
94
93
  /**
95
- * Create a legacy GROUP CHANGE ('G') delta with the old payload shape.
96
- *
97
- * Carries both added and removed groups in one delta and forces a full
98
- * re-bootstrap on the client. Use for testing backward compatibility with
99
- * the deprecated EmitGroupChange path.
94
+ * Builds a group-change ('G') delta in the older payload shape, which
95
+ * carries both added and removed groups in one delta and forces a full
96
+ * re-bootstrap on the client. Useful for testing backward compatibility
97
+ * with that older shape.
100
98
  */
101
99
  export function createLegacyGroupChangeDelta(userId, added, removed, syncId) {
102
100
  return createDelta({
@@ -108,11 +106,9 @@ export function createLegacyGroupChangeDelta(userId, added, removed, syncId) {
108
106
  });
109
107
  }
110
108
  /**
111
- * Create a GROUP REMOVED ('S') delta.
112
- *
113
- * Signals that the recipient lost access to a sync group. The client
114
- * purges affected local state and triggers a re-bootstrap with the
115
- * updated group list.
109
+ * Builds a group-removed ('S') delta. It signals that the recipient lost
110
+ * access to a sync group. The client purges the affected local state and
111
+ * re-bootstraps with the updated group list.
116
112
  */
117
113
  export function createGroupRemovedDelta(userId, group, syncId) {
118
114
  return createDelta({
@@ -124,15 +120,16 @@ export function createGroupRemovedDelta(userId, group, syncId) {
124
120
  });
125
121
  }
126
122
  /**
127
- * Create a batch of deltas with sequential sync IDs.
123
+ * Builds a batch of deltas with sequential sync IDs.
128
124
  */
129
125
  export function createDeltaBatch(deltas, startingSyncId) {
130
126
  const start = startingSyncId ?? deltaCounter + 1;
131
127
  return deltas.map((d, i) => createDelta({ ...d, id: start + i }));
132
128
  }
133
129
  /**
134
- * Create a confirmation delta used to confirm that a mutation
135
- * was persisted by the server (TransactionQueue watches for this).
130
+ * Builds a confirmation delta, which signals that a mutation was persisted
131
+ * by the server. The client's transaction queue watches for these to
132
+ * confirm its in-flight writes.
136
133
  */
137
134
  export function createConfirmationDelta(modelName, modelId, syncId, action = 'U', data = {}) {
138
135
  return createDelta({ modelName, modelId, action, data, id: syncId });
@@ -1,10 +1,9 @@
1
1
  /**
2
- * Test Model subclasses for @abloatai/ablo tests.
3
- *
4
- * Lightweight Model implementations with FK relationships matching
5
- * the MODEL_CREATE_PRIORITY map in TransactionQueue:
6
- * TestProject (10) → TestTask (10, FK→Project) → TestComment (30, FK→Task)
7
- * TestSlideDeck (10) → TestSlide (15, FK→SlideDeck) → TestSlideLayer (20, FK→Slide)
2
+ * A small set of {@link Model} subclasses used across the package's tests.
3
+ * They form two foreign-key chains and carry the creation priorities the
4
+ * transaction queue uses to order dependent writes:
5
+ * TestProject (10) TestTask (10, references Project) → TestComment (30, references Task)
6
+ * TestSlideDeck (10) → TestSlide (15, references SlideDeck) → TestSlideLayer (20, references Slide)
8
7
  */
9
8
  import { Model } from '../../Model.js';
10
9
  import { ModelRegistry } from '../../ModelRegistry.js';
@@ -54,16 +53,18 @@ export declare class TestSlideLayer extends Model {
54
53
  getModelName(): string;
55
54
  }
56
55
  /**
57
- * Model priority mapping matching TransactionQueue's MODEL_CREATE_PRIORITY.
56
+ * Maps each test model to its creation priority, matching the order the
57
+ * transaction queue uses when writing dependent models.
58
58
  */
59
59
  export declare const TEST_MODEL_PRIORITIES: Map<string, number>;
60
60
  /**
61
- * Register all test models with a ModelRegistry instance.
62
- * Sets up properties, references, and FK relationships.
61
+ * Registers every test model with a {@link ModelRegistry}, wiring up their
62
+ * properties, references, and foreign-key relationships.
63
63
  */
64
64
  export declare function registerTestModels(registry: ModelRegistry): void;
65
65
  /**
66
- * Create a SyncEngineConfig pre-configured with test model priorities.
66
+ * Builds a sync engine configuration pre-loaded with the test models'
67
+ * creation priorities and related settings.
67
68
  */
68
69
  export declare function createTestConfig(): {
69
70
  modelCreatePriority: ReadonlyMap<string, number>;
@@ -1,10 +1,9 @@
1
1
  /**
2
- * Test Model subclasses for @abloatai/ablo tests.
3
- *
4
- * Lightweight Model implementations with FK relationships matching
5
- * the MODEL_CREATE_PRIORITY map in TransactionQueue:
6
- * TestProject (10) → TestTask (10, FK→Project) → TestComment (30, FK→Task)
7
- * TestSlideDeck (10) → TestSlide (15, FK→SlideDeck) → TestSlideLayer (20, FK→Slide)
2
+ * A small set of {@link Model} subclasses used across the package's tests.
3
+ * They form two foreign-key chains and carry the creation priorities the
4
+ * transaction queue uses to order dependent writes:
5
+ * TestProject (10) TestTask (10, references Project) → TestComment (30, references Task)
6
+ * TestSlideDeck (10) → TestSlide (15, references SlideDeck) → TestSlideLayer (20, references Slide)
8
7
  */
9
8
  import { Model } from '../../Model.js';
10
9
  import { ModelRegistry } from '../../ModelRegistry.js';
@@ -127,7 +126,8 @@ export class TestSlideLayer extends Model {
127
126
  // Model Registration Helper
128
127
  // ─────────────────────────────────────────────
129
128
  /**
130
- * Model priority mapping matching TransactionQueue's MODEL_CREATE_PRIORITY.
129
+ * Maps each test model to its creation priority, matching the order the
130
+ * transaction queue uses when writing dependent models.
131
131
  */
132
132
  export const TEST_MODEL_PRIORITIES = new Map([
133
133
  ['Project', 10],
@@ -138,8 +138,8 @@ export const TEST_MODEL_PRIORITIES = new Map([
138
138
  ['Comment', 30],
139
139
  ]);
140
140
  /**
141
- * Register all test models with a ModelRegistry instance.
142
- * Sets up properties, references, and FK relationships.
141
+ * Registers every test model with a {@link ModelRegistry}, wiring up their
142
+ * properties, references, and foreign-key relationships.
143
143
  */
144
144
  export function registerTestModels(registry) {
145
145
  registry.startBatch();
@@ -183,7 +183,8 @@ export function registerTestModels(registry) {
183
183
  // Test SyncEngineConfig factory
184
184
  // ─────────────────────────────────────────────
185
185
  /**
186
- * Create a SyncEngineConfig pre-configured with test model priorities.
186
+ * Builds a sync engine configuration pre-loaded with the test models'
187
+ * creation priorities and related settings.
187
188
  */
188
189
  export function createTestConfig() {
189
190
  return {
@@ -1,8 +1,8 @@
1
1
  /**
2
- * React test helpers for the sync engine SDK.
3
- *
4
- * These helpers wire the SDK's SyncProvider into @testing-library/react
5
- * so consumers can test components and hooks that use useModel/useModels/useMutations.
2
+ * React testing helpers for this package. They wire the package's
3
+ * `SyncProvider` into `@testing-library/react` so you can test components
4
+ * and hooks built on `useModel`, `useModels`, and `useMutations` against a
5
+ * mock store, with no live server.
6
6
  */
7
7
  import * as React from 'react';
8
8
  import { type SyncStoreContract } from '../../react/context.js';
@@ -14,8 +14,10 @@ export interface TestWrapperOptions {
14
14
  organizationId?: string;
15
15
  }
16
16
  /**
17
- * Create a wrapper component for @testing-library/react's renderHook/render.
18
- * Wraps children in the SDK's SyncProvider with a mock store.
17
+ * Builds a wrapper component for `@testing-library/react`'s `renderHook`
18
+ * and `render`. It wraps the children in the package's `SyncProvider`,
19
+ * backed by a mock store, so the hooks and components under test can read
20
+ * from it. Pass your own store to seed specific data, or let one be created.
19
21
  *
20
22
  * @example
21
23
  * import { renderHook } from '@testing-library/react';
@@ -33,11 +35,12 @@ export declare function createReactTestWrapper(options?: TestWrapperOptions): Re
33
35
  children: React.ReactNode;
34
36
  }>;
35
37
  /**
36
- * Drop-in replacement for @testing-library/react's `renderHook` that
37
- * automatically provides the SDK's SyncProvider with a mock store.
38
+ * A drop-in replacement for `@testing-library/react`'s `renderHook` that
39
+ * wraps the hook in the package's `SyncProvider` and a mock store for you,
40
+ * so you don't build the wrapper by hand.
38
41
  *
39
- * Note: This helper lazy-loads @testing-library/react to avoid forcing
40
- * consumers without React tests to install it.
42
+ * `@testing-library/react` is loaded lazily, so projects that don't use
43
+ * these helpers never have to install it.
41
44
  *
42
45
  * @example
43
46
  * import { renderSyncHook, createMockSyncStore } from '@abloatai/ablo/testing';
@@ -1,15 +1,17 @@
1
1
  /**
2
- * React test helpers for the sync engine SDK.
3
- *
4
- * These helpers wire the SDK's SyncProvider into @testing-library/react
5
- * so consumers can test components and hooks that use useModel/useModels/useMutations.
2
+ * React testing helpers for this package. They wire the package's
3
+ * `SyncProvider` into `@testing-library/react` so you can test components
4
+ * and hooks built on `useModel`, `useModels`, and `useMutations` against a
5
+ * mock store, with no live server.
6
6
  */
7
7
  import * as React from 'react';
8
8
  import { SyncProvider } from '../../react/context.js';
9
9
  import { MockSyncStore, createMockSyncStore } from '../mocks/MockSyncStore.js';
10
10
  /**
11
- * Create a wrapper component for @testing-library/react's renderHook/render.
12
- * Wraps children in the SDK's SyncProvider with a mock store.
11
+ * Builds a wrapper component for `@testing-library/react`'s `renderHook`
12
+ * and `render`. It wraps the children in the package's `SyncProvider`,
13
+ * backed by a mock store, so the hooks and components under test can read
14
+ * from it. Pass your own store to seed specific data, or let one be created.
13
15
  *
14
16
  * @example
15
17
  * import { renderHook } from '@testing-library/react';
@@ -30,11 +32,12 @@ export function createReactTestWrapper(options = {}) {
30
32
  return Wrapper;
31
33
  }
32
34
  /**
33
- * Drop-in replacement for @testing-library/react's `renderHook` that
34
- * automatically provides the SDK's SyncProvider with a mock store.
35
+ * A drop-in replacement for `@testing-library/react`'s `renderHook` that
36
+ * wraps the hook in the package's `SyncProvider` and a mock store for you,
37
+ * so you don't build the wrapper by hand.
35
38
  *
36
- * Note: This helper lazy-loads @testing-library/react to avoid forcing
37
- * consumers without React tests to install it.
39
+ * `@testing-library/react` is loaded lazily, so projects that don't use
40
+ * these helpers never have to install it.
38
41
  *
39
42
  * @example
40
43
  * import { renderSyncHook, createMockSyncStore } from '@abloatai/ablo/testing';
@@ -49,8 +52,8 @@ export function createReactTestWrapper(options = {}) {
49
52
  * expect(result.current?.id).toBe(myTask.id);
50
53
  */
51
54
  export function renderSyncHook(callback, options = {}) {
52
- // Lazy-load @testing-library/react so the SDK doesn't force consumers
53
- // to install it unless they actually use these helpers.
55
+ // Load @testing-library/react lazily so projects that never call these
56
+ // helpers don't have to install it.
54
57
  // eslint-disable-next-line @typescript-eslint/no-require-imports
55
58
  const rtl = require('@testing-library/react');
56
59
  return rtl.renderHook(callback, {
@@ -1,29 +1,29 @@
1
1
  /**
2
- * Full sync engine test harness.
3
- *
4
- * Creates a complete stack (ModelRegistry, ObjectPool, TransactionQueue, etc.)
5
- * with real implementations backed by mocked I/O for integration tests.
2
+ * An integration-test harness that assembles a full sync engine stack
3
+ * the model registry, object pool, transaction queue, and related parts —
4
+ * from the real implementations, but with mocked input and output. It lets
5
+ * tests exercise the engine end to end without a network or a live server.
6
6
  */
7
7
  import { ModelRegistry } from '../../ModelRegistry.js';
8
- import { ObjectPool } from '../../ObjectPool.js';
8
+ import { InstanceCache } from '../../InstanceCache.js';
9
9
  import { MockMutationExecutor } from '../mocks/MockMutationExecutor.js';
10
10
  import { MockNetworkMonitor } from '../mocks/MockNetworkMonitor.js';
11
11
  import { MockWebSocket } from '../mocks/MockWebSocket.js';
12
12
  import type { TestContextResult } from '../mocks/MockSyncContext.js';
13
13
  export interface TestHarness {
14
- /** Pre-registered ModelRegistry with test models */
14
+ /** A model registry pre-loaded with the test models. */
15
15
  registry: ModelRegistry;
16
- /** Real ObjectPool with FK indexes configured */
17
- pool: ObjectPool;
18
- /** Mock WebSocket for delta injection */
16
+ /** A real object pool with the test foreign-key indexes configured. */
17
+ pool: InstanceCache;
18
+ /** A mock WebSocket for injecting deltas into the engine. */
19
19
  webSocket: MockWebSocket;
20
- /** DI context with all mocks */
20
+ /** The dependency-injection context holding every mock. */
21
21
  context: TestContextResult;
22
- /** Shorthand: mock mutation executor */
22
+ /** Shorthand for the mock mutation executor on {@link context}. */
23
23
  mutationExecutor: MockMutationExecutor;
24
- /** Shorthand: mock network monitor */
24
+ /** Shorthand for the mock network monitor on {@link context}. */
25
25
  networkMonitor: MockNetworkMonitor;
26
- /** Cleanup everything */
26
+ /** Tears down the harness and resets its counters. */
27
27
  cleanup: () => void;
28
28
  }
29
29
  export interface TestHarnessOptions {
@@ -31,7 +31,7 @@ export interface TestHarnessOptions {
31
31
  startOffline?: boolean;
32
32
  /** Initial sync ID for mutation executor */
33
33
  initialSyncId?: number;
34
- /** ObjectPool config overrides */
34
+ /** InstanceCache config overrides */
35
35
  poolConfig?: {
36
36
  maxSize?: number;
37
37
  maxAge?: number;
@@ -40,7 +40,9 @@ export interface TestHarnessOptions {
40
40
  };
41
41
  }
42
42
  /**
43
- * Create a full test harness with real sync engine components + mocked I/O.
43
+ * Builds a full test harness: real sync engine components wired to mocked
44
+ * input and output. Reset the counters and tear everything down through the
45
+ * returned {@link TestHarness.cleanup}.
44
46
  *
45
47
  * Usage:
46
48
  * ```ts
@@ -1,11 +1,11 @@
1
1
  /**
2
- * Full sync engine test harness.
3
- *
4
- * Creates a complete stack (ModelRegistry, ObjectPool, TransactionQueue, etc.)
5
- * with real implementations backed by mocked I/O for integration tests.
2
+ * An integration-test harness that assembles a full sync engine stack
3
+ * the model registry, object pool, transaction queue, and related parts —
4
+ * from the real implementations, but with mocked input and output. It lets
5
+ * tests exercise the engine end to end without a network or a live server.
6
6
  */
7
7
  import { ModelRegistry, setActiveRegistry } from '../../ModelRegistry.js';
8
- import { ObjectPool } from '../../ObjectPool.js';
8
+ import { InstanceCache } from '../../InstanceCache.js';
9
9
  import { MockMutationExecutor } from '../mocks/MockMutationExecutor.js';
10
10
  import { MockNetworkMonitor } from '../mocks/MockNetworkMonitor.js';
11
11
  import { MockWebSocket } from '../mocks/MockWebSocket.js';
@@ -13,7 +13,9 @@ import { createTestContext } from '../mocks/MockSyncContext.js';
13
13
  import { registerTestModels, createTestConfig, resetFixtureCounter, } from '../fixtures/models.js';
14
14
  import { resetDeltaCounter } from '../fixtures/deltas.js';
15
15
  /**
16
- * Create a full test harness with real sync engine components + mocked I/O.
16
+ * Builds a full test harness: real sync engine components wired to mocked
17
+ * input and output. Reset the counters and tear everything down through the
18
+ * returned {@link TestHarness.cleanup}.
17
19
  *
18
20
  * Usage:
19
21
  * ```ts
@@ -30,7 +32,7 @@ export function createTestHarness(options = {}) {
30
32
  const registry = new ModelRegistry();
31
33
  setActiveRegistry(registry);
32
34
  registerTestModels(registry);
33
- // Create DI context with test config
35
+ // Create the dependency-injection context with the test config
34
36
  const testConfig = createTestConfig();
35
37
  const context = createTestContext({
36
38
  config: testConfig,
@@ -39,14 +41,14 @@ export function createTestHarness(options = {}) {
39
41
  initialSyncId: options.initialSyncId ?? 1,
40
42
  },
41
43
  });
42
- // Create real ObjectPool with FK indexes
43
- const pool = new ObjectPool({
44
+ // Create the real object pool with foreign-key indexes
45
+ const pool = new InstanceCache({
44
46
  maxSize: options.poolConfig?.maxSize ?? 10000,
45
47
  maxAge: options.poolConfig?.maxAge ?? 5 * 60 * 1000,
46
48
  gcInterval: options.poolConfig?.gcInterval ?? 0, // Disable auto-GC in tests
47
49
  useWeakRefs: options.poolConfig?.useWeakRefs ?? false, // Disable WeakRefs for predictable tests
48
50
  }, registry);
49
- // Register FK indexes for test models
51
+ // Register foreign-key indexes for the test models
50
52
  pool.registerForeignKey('Task', 'projectId');
51
53
  pool.registerForeignKey('Comment', 'taskId');
52
54
  pool.registerForeignKey('Slide', 'deckId');
@@ -1,25 +1,30 @@
1
1
  /**
2
- * Async test helpers for timing-sensitive sync engine tests.
2
+ * Asynchronous helpers for tests whose assertions depend on timing for
3
+ * flushing pending work, polling for a condition, or waiting a fixed delay.
3
4
  */
4
5
  /**
5
- * Flush all pending microtasks (Promise.resolve, queueMicrotask).
6
- * Critical for testing TransactionQueue's microtask batching.
6
+ * Flushes all pending microtasks, such as resolved promises and
7
+ * `queueMicrotask` callbacks. Useful for testing work the transaction queue
8
+ * batches on the microtask queue.
7
9
  */
8
10
  export declare function flushMicrotasks(): Promise<void>;
9
11
  /**
10
- * Wait for a condition to become true, polling at intervals.
11
- * Times out after maxWait ms.
12
+ * Polls `condition` until it returns true, checking every `interval`
13
+ * milliseconds. Rejects with an {@link AbloConnectionError} if `maxWait`
14
+ * milliseconds pass first.
12
15
  */
13
16
  export declare function waitFor(condition: () => boolean, options?: {
14
17
  maxWait?: number;
15
18
  interval?: number;
16
19
  }): Promise<void>;
17
20
  /**
18
- * Wait for N milliseconds. Use sparingly prefer flushMicrotasks() or waitFor().
21
+ * Waits for the given number of milliseconds. Use sparingly; prefer
22
+ * {@link flushMicrotasks} or {@link waitFor}, which don't tie tests to
23
+ * wall-clock time.
19
24
  */
20
25
  export declare function delay(ms: number): Promise<void>;
21
26
  /**
22
- * Run a callback after flushing microtasks.
23
- * Useful for asserting state after TransactionQueue batch processing.
27
+ * Flushes pending microtasks, then runs `fn` and returns its result. Handy
28
+ * for asserting state after the transaction queue processes a batch.
24
29
  */
25
30
  export declare function afterMicrotasks<T>(fn: () => T): Promise<T>;