@abloatai/ablo 0.25.0 → 0.27.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 (425) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +104 -88
  4. package/dist/BaseSyncedStore.d.ts +140 -266
  5. package/dist/BaseSyncedStore.js +338 -739
  6. package/dist/Database.d.ts +62 -77
  7. package/dist/Database.js +106 -127
  8. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  9. package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
  10. package/dist/LazyReferenceCollection.d.ts +11 -15
  11. package/dist/LazyReferenceCollection.js +16 -15
  12. package/dist/Model.d.ts +37 -52
  13. package/dist/Model.js +52 -69
  14. package/dist/ModelRegistry.d.ts +46 -25
  15. package/dist/ModelRegistry.js +32 -30
  16. package/dist/NetworkMonitor.d.ts +5 -6
  17. package/dist/NetworkMonitor.js +6 -7
  18. package/dist/SyncClient.d.ts +119 -109
  19. package/dist/SyncClient.js +303 -224
  20. package/dist/SyncEngineContext.d.ts +1 -3
  21. package/dist/SyncEngineContext.js +1 -2
  22. package/dist/adapters/alwaysOnline.d.ts +6 -8
  23. package/dist/adapters/alwaysOnline.js +6 -8
  24. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  25. package/dist/adapters/inMemoryStorage.js +9 -9
  26. package/dist/agent/Agent.d.ts +39 -31
  27. package/dist/agent/Agent.js +35 -23
  28. package/dist/agent/index.d.ts +4 -4
  29. package/dist/agent/index.js +5 -5
  30. package/dist/agent/session.d.ts +47 -44
  31. package/dist/agent/session.js +37 -48
  32. package/dist/agent/types.d.ts +26 -31
  33. package/dist/agent/types.js +6 -7
  34. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  35. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  36. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  37. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
  38. package/dist/ai-sdk/index.d.ts +25 -22
  39. package/dist/ai-sdk/index.js +25 -22
  40. package/dist/ai-sdk/wrap.d.ts +7 -8
  41. package/dist/ai-sdk/wrap.js +2 -2
  42. package/dist/auth/credentialPolicy.d.ts +74 -71
  43. package/dist/auth/credentialPolicy.js +51 -56
  44. package/dist/auth/credentialSource.d.ts +7 -18
  45. package/dist/auth/credentialSource.js +10 -18
  46. package/dist/auth/index.d.ts +59 -58
  47. package/dist/auth/index.js +34 -40
  48. package/dist/auth/schemas.d.ts +5 -4
  49. package/dist/auth/schemas.js +5 -4
  50. package/dist/batching/index.d.ts +19 -21
  51. package/dist/batching/index.js +14 -17
  52. package/dist/cli.cjs +483 -369
  53. package/dist/client/Ablo.d.ts +107 -836
  54. package/dist/client/Ablo.js +174 -833
  55. package/dist/client/ApiClient.d.ts +44 -20
  56. package/dist/client/ApiClient.js +193 -44
  57. package/dist/client/auth.d.ts +51 -60
  58. package/dist/client/auth.js +137 -110
  59. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  60. package/dist/client/claimHeartbeatLoop.js +88 -0
  61. package/dist/client/consoleLogger.d.ts +35 -0
  62. package/dist/client/consoleLogger.js +44 -0
  63. package/dist/client/createInternalComponents.d.ts +14 -17
  64. package/dist/client/createInternalComponents.js +26 -31
  65. package/dist/client/createModelProxy.d.ts +130 -120
  66. package/dist/client/createModelProxy.js +158 -124
  67. package/dist/client/credentialEndpoint.d.ts +61 -0
  68. package/dist/client/credentialEndpoint.js +86 -0
  69. package/dist/client/functionalUpdate.d.ts +29 -27
  70. package/dist/client/functionalUpdate.js +21 -21
  71. package/dist/client/hostedEndpoints.d.ts +21 -0
  72. package/dist/client/hostedEndpoints.js +21 -0
  73. package/dist/client/httpClient.d.ts +58 -54
  74. package/dist/client/httpClient.js +29 -31
  75. package/dist/client/identity.d.ts +15 -20
  76. package/dist/client/identity.js +49 -59
  77. package/dist/client/modelRegistration.d.ts +10 -0
  78. package/dist/client/modelRegistration.js +301 -0
  79. package/dist/client/options.d.ts +373 -0
  80. package/dist/client/options.js +6 -0
  81. package/dist/client/registerDataSource.d.ts +9 -9
  82. package/dist/client/registerDataSource.js +15 -16
  83. package/dist/client/resourceTypes.d.ts +333 -0
  84. package/dist/client/resourceTypes.js +7 -0
  85. package/dist/client/schemaConfig.d.ts +44 -0
  86. package/dist/client/schemaConfig.js +176 -0
  87. package/dist/client/sessionMint.d.ts +17 -13
  88. package/dist/client/sessionMint.js +26 -31
  89. package/dist/client/validateAbloOptions.d.ts +12 -14
  90. package/dist/client/validateAbloOptions.js +9 -10
  91. package/dist/client/writeOptionsSchema.d.ts +18 -16
  92. package/dist/client/writeOptionsSchema.js +23 -20
  93. package/dist/client/wsMutationExecutor.d.ts +28 -0
  94. package/dist/client/wsMutationExecutor.js +71 -0
  95. package/dist/context.d.ts +6 -4
  96. package/dist/context.js +6 -7
  97. package/dist/coordination/index.d.ts +13 -4
  98. package/dist/coordination/index.js +29 -4
  99. package/dist/coordination/schema.d.ts +176 -128
  100. package/dist/coordination/schema.js +197 -133
  101. package/dist/coordination/trace.d.ts +9 -11
  102. package/dist/coordination/trace.js +13 -15
  103. package/dist/core/DatabaseManager.d.ts +5 -8
  104. package/dist/core/DatabaseManager.js +38 -40
  105. package/dist/core/QueryProcessor.d.ts +7 -9
  106. package/dist/core/QueryProcessor.js +27 -34
  107. package/dist/core/QueryView.d.ts +17 -5
  108. package/dist/core/QueryView.js +6 -7
  109. package/dist/core/StoreManager.d.ts +14 -16
  110. package/dist/core/StoreManager.js +26 -25
  111. package/dist/core/ViewRegistry.d.ts +5 -5
  112. package/dist/core/ViewRegistry.js +4 -4
  113. package/dist/core/index.d.ts +18 -13
  114. package/dist/core/index.js +32 -26
  115. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  116. package/dist/core/openIDBWithTimeout.js +57 -54
  117. package/dist/core/queryUtils.d.ts +45 -0
  118. package/dist/core/queryUtils.js +69 -0
  119. package/dist/core/storeContract.d.ts +145 -0
  120. package/dist/core/storeContract.js +12 -0
  121. package/dist/environment.d.ts +28 -0
  122. package/dist/environment.js +21 -0
  123. package/dist/errorCodes.d.ts +118 -101
  124. package/dist/errorCodes.js +277 -260
  125. package/dist/errors.d.ts +170 -165
  126. package/dist/errors.js +161 -151
  127. package/dist/index.d.ts +30 -27
  128. package/dist/index.js +90 -82
  129. package/dist/interfaces/index.d.ts +108 -133
  130. package/dist/interfaces/index.js +5 -4
  131. package/dist/keys/index.d.ts +27 -29
  132. package/dist/keys/index.js +59 -49
  133. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  134. package/dist/mutators/RecordingTransaction.js +31 -37
  135. package/dist/mutators/Transaction.d.ts +18 -26
  136. package/dist/mutators/Transaction.js +14 -20
  137. package/dist/mutators/UndoManager.d.ts +122 -131
  138. package/dist/mutators/UndoManager.js +149 -155
  139. package/dist/mutators/defineMutators.d.ts +24 -37
  140. package/dist/mutators/defineMutators.js +14 -20
  141. package/dist/mutators/inverseOp.d.ts +12 -15
  142. package/dist/mutators/inverseOp.js +12 -15
  143. package/dist/mutators/mutateActions.d.ts +10 -9
  144. package/dist/mutators/mutateActions.js +1 -1
  145. package/dist/mutators/readerActions.d.ts +9 -8
  146. package/dist/mutators/readerActions.js +2 -2
  147. package/dist/mutators/undoApply.d.ts +31 -27
  148. package/dist/mutators/undoApply.js +26 -24
  149. package/dist/policy/index.d.ts +5 -3
  150. package/dist/policy/index.js +5 -3
  151. package/dist/policy/types.d.ts +105 -101
  152. package/dist/policy/types.js +67 -66
  153. package/dist/query/client.d.ts +32 -16
  154. package/dist/query/client.js +103 -72
  155. package/dist/query/types.d.ts +37 -60
  156. package/dist/query/types.js +13 -33
  157. package/dist/react/AbloProvider.d.ts +7 -11
  158. package/dist/react/AbloProvider.js +24 -17
  159. package/dist/react/context.d.ts +27 -146
  160. package/dist/react/context.js +9 -10
  161. package/dist/react/index.d.ts +41 -42
  162. package/dist/react/index.js +37 -38
  163. package/dist/react/internalContext.d.ts +17 -19
  164. package/dist/react/useAblo.d.ts +23 -22
  165. package/dist/react/useAblo.js +17 -15
  166. package/dist/react/useCurrentUserId.d.ts +8 -7
  167. package/dist/react/useCurrentUserId.js +8 -7
  168. package/dist/react/useErrorListener.d.ts +7 -7
  169. package/dist/react/useErrorListener.js +11 -12
  170. package/dist/react/useMutationFailureListener.d.ts +8 -8
  171. package/dist/react/useMutationFailureListener.js +9 -9
  172. package/dist/react/useMutators.d.ts +11 -11
  173. package/dist/react/useMutators.js +10 -4
  174. package/dist/react/useReactive.js +2 -3
  175. package/dist/react/useSyncStatus.d.ts +4 -6
  176. package/dist/react/useUndoScope.d.ts +7 -9
  177. package/dist/react/useUndoScope.js +3 -3
  178. package/dist/schema/coordination.d.ts +21 -25
  179. package/dist/schema/coordination.js +21 -25
  180. package/dist/schema/ddl.d.ts +43 -39
  181. package/dist/schema/ddl.js +75 -68
  182. package/dist/schema/ddlLock.d.ts +35 -0
  183. package/dist/schema/ddlLock.js +46 -0
  184. package/dist/schema/diff.d.ts +99 -61
  185. package/dist/schema/diff.js +43 -34
  186. package/dist/schema/field.d.ts +37 -42
  187. package/dist/schema/field.js +36 -49
  188. package/dist/schema/generate.d.ts +12 -12
  189. package/dist/schema/generate.js +12 -12
  190. package/dist/schema/index.d.ts +5 -4
  191. package/dist/schema/index.js +29 -21
  192. package/dist/schema/model.d.ts +121 -146
  193. package/dist/schema/model.js +24 -35
  194. package/dist/schema/openapi.d.ts +10 -9
  195. package/dist/schema/openapi.js +7 -1
  196. package/dist/schema/queries.d.ts +30 -32
  197. package/dist/schema/queries.js +24 -25
  198. package/dist/schema/relation.d.ts +89 -99
  199. package/dist/schema/relation.js +13 -13
  200. package/dist/schema/residency.d.ts +38 -0
  201. package/dist/schema/residency.js +30 -0
  202. package/dist/schema/roles.d.ts +45 -27
  203. package/dist/schema/roles.js +52 -21
  204. package/dist/schema/schema.d.ts +36 -45
  205. package/dist/schema/schema.js +42 -39
  206. package/dist/schema/select.d.ts +13 -13
  207. package/dist/schema/select.js +13 -13
  208. package/dist/schema/serialize.d.ts +36 -39
  209. package/dist/schema/serialize.js +27 -31
  210. package/dist/schema/sugar.d.ts +17 -32
  211. package/dist/schema/sugar.js +14 -29
  212. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
  213. package/dist/schema/syncDeltaRow.js +89 -0
  214. package/dist/schema/tenancy.d.ts +44 -46
  215. package/dist/schema/tenancy.js +46 -48
  216. package/dist/server/adapter.d.ts +58 -58
  217. package/dist/server/adapter.js +13 -14
  218. package/dist/server/commit.d.ts +60 -64
  219. package/dist/server/index.d.ts +9 -10
  220. package/dist/server/index.js +1 -1
  221. package/dist/server/readConfig.d.ts +70 -0
  222. package/dist/server/readConfig.js +8 -0
  223. package/dist/server/storageMode.d.ts +23 -0
  224. package/dist/server/storageMode.js +17 -0
  225. package/dist/source/adapter.d.ts +31 -26
  226. package/dist/source/adapter.js +10 -10
  227. package/dist/source/adapters/drizzle.d.ts +28 -23
  228. package/dist/source/adapters/drizzle.js +34 -28
  229. package/dist/source/adapters/kysely.d.ts +27 -25
  230. package/dist/source/adapters/kysely.js +28 -26
  231. package/dist/source/adapters/memory.d.ts +8 -7
  232. package/dist/source/adapters/memory.js +10 -9
  233. package/dist/source/adapters/prisma.d.ts +13 -12
  234. package/dist/source/adapters/prisma.js +27 -29
  235. package/dist/source/conformance.d.ts +18 -11
  236. package/dist/source/conformance.js +27 -19
  237. package/dist/source/connector.d.ts +31 -32
  238. package/dist/source/connector.js +30 -28
  239. package/dist/source/connectorProtocol.d.ts +160 -0
  240. package/dist/source/connectorProtocol.js +162 -0
  241. package/dist/source/contract.d.ts +26 -27
  242. package/dist/source/contract.js +28 -29
  243. package/dist/source/factory.d.ts +94 -0
  244. package/dist/source/factory.js +268 -0
  245. package/dist/source/index.d.ts +10 -462
  246. package/dist/source/index.js +17 -421
  247. package/dist/source/migrations.d.ts +9 -9
  248. package/dist/source/migrations.js +9 -9
  249. package/dist/source/next.d.ts +10 -11
  250. package/dist/source/next.js +7 -8
  251. package/dist/source/pushQueue.d.ts +70 -48
  252. package/dist/source/pushQueue.js +36 -29
  253. package/dist/source/signing.d.ts +88 -0
  254. package/dist/source/signing.js +159 -0
  255. package/dist/source/types.d.ts +351 -0
  256. package/dist/source/types.js +43 -0
  257. package/dist/stores/ObjectStore.d.ts +11 -12
  258. package/dist/stores/ObjectStore.js +34 -35
  259. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  260. package/dist/stores/SyncActionStore.d.ts +8 -12
  261. package/dist/stores/SyncActionStore.js +77 -46
  262. package/dist/surface.d.ts +28 -21
  263. package/dist/surface.js +28 -20
  264. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
  265. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
  266. package/dist/sync/ConnectionManager.d.ts +47 -50
  267. package/dist/sync/ConnectionManager.js +74 -70
  268. package/dist/sync/NetworkProbe.d.ts +27 -31
  269. package/dist/sync/NetworkProbe.js +67 -72
  270. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
  271. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
  272. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
  273. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
  274. package/dist/sync/SyncWebSocket.d.ts +175 -250
  275. package/dist/sync/SyncWebSocket.js +431 -769
  276. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  277. package/dist/sync/awaitClaimGrant.js +38 -30
  278. package/dist/sync/bootstrapApply.d.ts +70 -0
  279. package/dist/sync/bootstrapApply.js +73 -0
  280. package/dist/sync/commitFrames.d.ts +44 -0
  281. package/dist/sync/commitFrames.js +94 -0
  282. package/dist/sync/createClaimStream.d.ts +23 -22
  283. package/dist/sync/createClaimStream.js +108 -25
  284. package/dist/sync/createPresenceStream.d.ts +19 -18
  285. package/dist/sync/createPresenceStream.js +25 -26
  286. package/dist/sync/createSnapshot.d.ts +13 -17
  287. package/dist/sync/createSnapshot.js +20 -26
  288. package/dist/sync/credentialLifecycle.d.ts +175 -0
  289. package/dist/sync/credentialLifecycle.js +322 -0
  290. package/dist/sync/deltaPipeline.d.ts +113 -0
  291. package/dist/sync/deltaPipeline.js +261 -0
  292. package/dist/sync/groupChange.d.ts +113 -0
  293. package/dist/sync/groupChange.js +242 -0
  294. package/dist/sync/heartbeat.d.ts +63 -0
  295. package/dist/sync/heartbeat.js +91 -0
  296. package/dist/sync/participants.d.ts +27 -27
  297. package/dist/sync/schemas.d.ts +3 -2
  298. package/dist/sync/schemas.js +14 -10
  299. package/dist/sync/syncCursor.d.ts +40 -0
  300. package/dist/sync/syncCursor.js +55 -0
  301. package/dist/sync/syncPlan.d.ts +54 -0
  302. package/dist/sync/syncPlan.js +50 -0
  303. package/dist/sync/syncPosition.d.ts +54 -49
  304. package/dist/sync/syncPosition.js +57 -52
  305. package/dist/sync/wsFrameHandlers.d.ts +116 -0
  306. package/dist/sync/wsFrameHandlers.js +374 -0
  307. package/dist/testing/fixtures/bootstrap.d.ts +21 -17
  308. package/dist/testing/fixtures/bootstrap.js +12 -6
  309. package/dist/testing/fixtures/deltas.d.ts +31 -34
  310. package/dist/testing/fixtures/deltas.js +30 -33
  311. package/dist/testing/fixtures/models.d.ts +11 -10
  312. package/dist/testing/fixtures/models.js +12 -10
  313. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  314. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  315. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
  316. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
  317. package/dist/testing/helpers/wait.d.ts +13 -8
  318. package/dist/testing/helpers/wait.js +13 -8
  319. package/dist/testing/index.d.ts +4 -4
  320. package/dist/testing/index.js +3 -3
  321. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  322. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  323. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  324. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  325. package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
  326. package/dist/testing/mocks/MockSyncContext.js +16 -45
  327. package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
  328. package/dist/testing/mocks/MockSyncStore.js +11 -11
  329. package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
  330. package/dist/testing/mocks/MockWebSocket.js +22 -21
  331. package/dist/transactions/TransactionQueue.d.ts +190 -221
  332. package/dist/transactions/TransactionQueue.js +424 -822
  333. package/dist/transactions/TransactionStore.d.ts +20 -0
  334. package/dist/transactions/TransactionStore.js +53 -0
  335. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  336. package/dist/transactions/UnconfirmedWrites.js +104 -0
  337. package/dist/transactions/coalesceRules.d.ts +58 -0
  338. package/dist/transactions/coalesceRules.js +140 -0
  339. package/dist/transactions/commitPayload.d.ts +130 -0
  340. package/dist/transactions/commitPayload.js +143 -0
  341. package/dist/transactions/deltaConfirmation.d.ts +58 -0
  342. package/dist/transactions/deltaConfirmation.js +215 -0
  343. package/dist/transactions/optimisticApply.d.ts +49 -0
  344. package/dist/transactions/optimisticApply.js +65 -0
  345. package/dist/transactions/replayValidation.d.ts +99 -0
  346. package/dist/transactions/replayValidation.js +111 -0
  347. package/dist/types/global.d.ts +46 -41
  348. package/dist/types/global.js +20 -19
  349. package/dist/types/index.d.ts +74 -80
  350. package/dist/types/index.js +22 -27
  351. package/dist/types/modelData.d.ts +10 -0
  352. package/dist/types/modelData.js +9 -0
  353. package/dist/types/participant.d.ts +20 -0
  354. package/dist/types/participant.js +10 -0
  355. package/dist/types/streams.d.ts +216 -209
  356. package/dist/types/streams.js +7 -7
  357. package/dist/utils/asyncIterator.d.ts +25 -32
  358. package/dist/utils/asyncIterator.js +25 -32
  359. package/dist/utils/duration.d.ts +12 -15
  360. package/dist/utils/duration.js +12 -15
  361. package/dist/utils/mobxSetup.d.ts +53 -0
  362. package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
  363. package/dist/webhooks/events.d.ts +21 -16
  364. package/dist/webhooks/events.js +10 -8
  365. package/dist/webhooks/index.d.ts +5 -7
  366. package/dist/webhooks/index.js +5 -7
  367. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  368. package/dist/wire/delta.js +114 -0
  369. package/dist/wire/errorEnvelope.d.ts +35 -27
  370. package/dist/wire/errorEnvelope.js +38 -32
  371. package/dist/wire/frames.d.ts +150 -67
  372. package/dist/wire/frames.js +48 -1
  373. package/dist/wire/index.d.ts +18 -13
  374. package/dist/wire/index.js +36 -13
  375. package/dist/wire/listEnvelope.d.ts +16 -23
  376. package/dist/wire/listEnvelope.js +7 -6
  377. package/dist/wire/protocol.d.ts +38 -0
  378. package/dist/wire/protocol.js +38 -0
  379. package/dist/wire/protocolVersion.d.ts +60 -0
  380. package/dist/wire/protocolVersion.js +67 -0
  381. package/docs/api-keys.md +4 -3
  382. package/docs/coordination.md +59 -0
  383. package/docs/examples/existing-python-backend.md +3 -3
  384. package/docs/identity.md +4 -4
  385. package/docs/integration-guide.md +1 -1
  386. package/docs/react.md +1 -1
  387. package/docs/sessions.md +5 -7
  388. package/package.json +24 -21
  389. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  390. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  391. package/dist/client/index.d.ts +0 -36
  392. package/dist/client/index.js +0 -33
  393. package/dist/config/index.d.ts +0 -10
  394. package/dist/config/index.js +0 -12
  395. package/dist/core/query-utils.d.ts +0 -34
  396. package/dist/core/query-utils.js +0 -59
  397. package/dist/interfaces/headless.d.ts +0 -95
  398. package/dist/interfaces/headless.js +0 -41
  399. package/dist/query/index.d.ts +0 -6
  400. package/dist/query/index.js +0 -5
  401. package/dist/realtime/index.d.ts +0 -10
  402. package/dist/realtime/index.js +0 -9
  403. package/dist/schema/plane.d.ts +0 -23
  404. package/dist/schema/plane.js +0 -19
  405. package/dist/schema/sync-delta-row.js +0 -103
  406. package/dist/schema/sync-delta-wire.js +0 -102
  407. package/dist/server/next.d.ts +0 -51
  408. package/dist/server/next.js +0 -47
  409. package/dist/server/read-config.d.ts +0 -67
  410. package/dist/server/read-config.js +0 -8
  411. package/dist/server/storage-mode.d.ts +0 -1
  412. package/dist/server/storage-mode.js +0 -18
  413. package/dist/source/connector-protocol.d.ts +0 -159
  414. package/dist/source/connector-protocol.js +0 -161
  415. package/dist/sync/OfflineFlush.d.ts +0 -9
  416. package/dist/sync/OfflineFlush.js +0 -22
  417. package/dist/sync/OfflineTransactionStore.d.ts +0 -37
  418. package/dist/sync/OfflineTransactionStore.js +0 -263
  419. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  420. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  421. package/dist/transactions/index.d.ts +0 -16
  422. package/dist/transactions/index.js +0 -7
  423. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  424. package/dist/transactions/mutation-error-handler.js +0 -39
  425. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,45 +1,49 @@
1
1
  /**
2
- * Bootstrap response factories for sync engine tests.
3
- *
4
- * Creates well-formed bootstrap responses matching the server API.
2
+ * Factories that build well-formed bootstrap responses for tests. A
3
+ * bootstrap response is what the server returns when a client first syncs:
4
+ * either a full snapshot of the models or a partial batch of deltas since a
5
+ * known point. These helpers produce the same shapes, so tests can exercise
6
+ * client sync logic without a live server.
5
7
  */
6
8
  import type { BootstrapType } from '../../types/index.js';
7
- export interface BootstrapModelData {
8
- [modelName: string]: Array<Record<string, unknown>>;
9
- }
9
+ export type BootstrapModelData = Record<string, Record<string, unknown>[]>;
10
10
  export interface BootstrapResponse {
11
11
  type: BootstrapType;
12
12
  lastSyncId: number;
13
13
  models?: BootstrapModelData;
14
- deltas?: Array<{
14
+ deltas?: {
15
15
  id: number;
16
16
  modelName: string;
17
17
  modelId: string;
18
18
  action: string;
19
19
  data: Record<string, unknown>;
20
- }>;
20
+ }[];
21
21
  deltaCount?: number;
22
22
  failedModels?: string[];
23
23
  timestamp: number;
24
24
  }
25
25
  /**
26
- * Create a full bootstrap response (fresh snapshot from server).
26
+ * Builds a full bootstrap response — a fresh snapshot of the given models,
27
+ * as the server sends on a client's first sync.
27
28
  */
28
29
  export declare function createFullBootstrapResponse(models: BootstrapModelData, lastSyncId?: number): BootstrapResponse;
29
30
  /**
30
- * Create a partial bootstrap response (delta batch from lastSyncId).
31
+ * Builds a partial bootstrap response a batch of deltas applied on top of
32
+ * the client's last known sync point, given by `lastSyncId`.
31
33
  */
32
34
  export declare function createPartialBootstrapResponse(deltas: BootstrapResponse['deltas'], lastSyncId: number): BootstrapResponse;
33
35
  /**
34
- * Create a full bootstrap response with test model data pre-populated.
36
+ * Builds a full bootstrap response with the common test models
37
+ * pre-populated. Pass any of the named model arrays to include them in the
38
+ * snapshot.
35
39
  */
36
40
  export declare function createTestBootstrapResponse(options?: {
37
- tasks?: Array<Record<string, unknown>>;
38
- projects?: Array<Record<string, unknown>>;
39
- slideDecks?: Array<Record<string, unknown>>;
40
- slides?: Array<Record<string, unknown>>;
41
- slideLayers?: Array<Record<string, unknown>>;
42
- comments?: Array<Record<string, unknown>>;
41
+ tasks?: Record<string, unknown>[];
42
+ projects?: Record<string, unknown>[];
43
+ slideDecks?: Record<string, unknown>[];
44
+ slides?: Record<string, unknown>[];
45
+ slideLayers?: Record<string, unknown>[];
46
+ comments?: Record<string, unknown>[];
43
47
  lastSyncId?: number;
44
48
  failedModels?: string[];
45
49
  }): BootstrapResponse;
@@ -1,10 +1,13 @@
1
1
  /**
2
- * Bootstrap response factories for sync engine tests.
3
- *
4
- * Creates well-formed bootstrap responses matching the server API.
2
+ * Factories that build well-formed bootstrap responses for tests. A
3
+ * bootstrap response is what the server returns when a client first syncs:
4
+ * either a full snapshot of the models or a partial batch of deltas since a
5
+ * known point. These helpers produce the same shapes, so tests can exercise
6
+ * client sync logic without a live server.
5
7
  */
6
8
  /**
7
- * Create a full bootstrap response (fresh snapshot from server).
9
+ * Builds a full bootstrap response — a fresh snapshot of the given models,
10
+ * as the server sends on a client's first sync.
8
11
  */
9
12
  export function createFullBootstrapResponse(models, lastSyncId = 100) {
10
13
  return {
@@ -15,7 +18,8 @@ export function createFullBootstrapResponse(models, lastSyncId = 100) {
15
18
  };
16
19
  }
17
20
  /**
18
- * Create a partial bootstrap response (delta batch from lastSyncId).
21
+ * Builds a partial bootstrap response a batch of deltas applied on top of
22
+ * the client's last known sync point, given by `lastSyncId`.
19
23
  */
20
24
  export function createPartialBootstrapResponse(deltas, lastSyncId) {
21
25
  return {
@@ -27,7 +31,9 @@ export function createPartialBootstrapResponse(deltas, lastSyncId) {
27
31
  };
28
32
  }
29
33
  /**
30
- * Create a full bootstrap response with test model data pre-populated.
34
+ * Builds a full bootstrap response with the common test models
35
+ * pre-populated. Pass any of the named model arrays to include them in the
36
+ * snapshot.
31
37
  */
32
38
  export function createTestBootstrapResponse(options = {}) {
33
39
  const models = {};
@@ -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
- export declare function createDeltaBatch(deltas: Array<Omit<CreateDeltaOptions, 'id'>>, startingSyncId?: number): SyncAction[];
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,12 +1,12 @@
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';
9
+ import { ModelRegistry } from '../../ModelRegistry.js';
10
10
  import { PropertyType, LoadStrategy } from '../../types/index.js';
11
11
  // ─────────────────────────────────────────────
12
12
  // Test Model Classes
@@ -126,7 +126,8 @@ export class TestSlideLayer extends Model {
126
126
  // Model Registration Helper
127
127
  // ─────────────────────────────────────────────
128
128
  /**
129
- * 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.
130
131
  */
131
132
  export const TEST_MODEL_PRIORITIES = new Map([
132
133
  ['Project', 10],
@@ -137,8 +138,8 @@ export const TEST_MODEL_PRIORITIES = new Map([
137
138
  ['Comment', 30],
138
139
  ]);
139
140
  /**
140
- * Register all test models with a ModelRegistry instance.
141
- * 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.
142
143
  */
143
144
  export function registerTestModels(registry) {
144
145
  registry.startBatch();
@@ -182,7 +183,8 @@ export function registerTestModels(registry) {
182
183
  // Test SyncEngineConfig factory
183
184
  // ─────────────────────────────────────────────
184
185
  /**
185
- * 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.
186
188
  */
187
189
  export function createTestConfig() {
188
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,32 +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
- import { MockMutationDispatcher } from '../mocks/MockSyncContext.js';
13
12
  import type { TestContextResult } from '../mocks/MockSyncContext.js';
14
13
  export interface TestHarness {
15
- /** Pre-registered ModelRegistry with test models */
14
+ /** A model registry pre-loaded with the test models. */
16
15
  registry: ModelRegistry;
17
- /** Real ObjectPool with FK indexes configured */
18
- pool: ObjectPool;
19
- /** 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. */
20
19
  webSocket: MockWebSocket;
21
- /** DI context with all mocks */
20
+ /** The dependency-injection context holding every mock. */
22
21
  context: TestContextResult;
23
- /** Shorthand: mock mutation executor */
22
+ /** Shorthand for the mock mutation executor on {@link context}. */
24
23
  mutationExecutor: MockMutationExecutor;
25
- /** Shorthand: mock network monitor */
24
+ /** Shorthand for the mock network monitor on {@link context}. */
26
25
  networkMonitor: MockNetworkMonitor;
27
- /** Shorthand: mock mutation dispatcher */
28
- mutationDispatcher: MockMutationDispatcher;
29
- /** Cleanup everything */
26
+ /** Tears down the harness and resets its counters. */
30
27
  cleanup: () => void;
31
28
  }
32
29
  export interface TestHarnessOptions {
@@ -34,7 +31,7 @@ export interface TestHarnessOptions {
34
31
  startOffline?: boolean;
35
32
  /** Initial sync ID for mutation executor */
36
33
  initialSyncId?: number;
37
- /** ObjectPool config overrides */
34
+ /** InstanceCache config overrides */
38
35
  poolConfig?: {
39
36
  maxSize?: number;
40
37
  maxAge?: number;
@@ -43,7 +40,9 @@ export interface TestHarnessOptions {
43
40
  };
44
41
  }
45
42
  /**
46
- * 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}.
47
46
  *
48
47
  * Usage:
49
48
  * ```ts