@abloatai/ablo 0.26.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 (398) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +101 -85
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +131 -147
  5. package/dist/Database.d.ts +54 -68
  6. package/dist/Database.js +97 -113
  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 +37 -52
  12. package/dist/Model.js +46 -61
  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 +112 -112
  18. package/dist/SyncClient.js +165 -172
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  22. package/dist/adapters/inMemoryStorage.js +9 -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 +167 -119
  50. package/dist/client/Ablo.d.ts +73 -73
  51. package/dist/client/Ablo.js +125 -160
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +133 -38
  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 +14 -17
  61. package/dist/client/createInternalComponents.js +25 -30
  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 +57 -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 +67 -87
  76. package/dist/client/options.d.ts +134 -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 +15 -20
  91. package/dist/client/wsMutationExecutor.js +17 -23
  92. package/dist/context.d.ts +6 -4
  93. package/dist/context.js +6 -4
  94. package/dist/coordination/index.d.ts +10 -8
  95. package/dist/coordination/index.js +14 -12
  96. package/dist/coordination/schema.d.ts +176 -128
  97. package/dist/coordination/schema.js +197 -133
  98. package/dist/coordination/trace.d.ts +9 -10
  99. package/dist/coordination/trace.js +13 -14
  100. package/dist/core/DatabaseManager.d.ts +5 -7
  101. package/dist/core/DatabaseManager.js +15 -19
  102. package/dist/core/QueryProcessor.d.ts +7 -9
  103. package/dist/core/QueryProcessor.js +22 -28
  104. package/dist/core/QueryView.d.ts +8 -8
  105. package/dist/core/QueryView.js +2 -2
  106. package/dist/core/StoreManager.d.ts +12 -14
  107. package/dist/core/StoreManager.js +21 -24
  108. package/dist/core/ViewRegistry.d.ts +5 -5
  109. package/dist/core/ViewRegistry.js +4 -4
  110. package/dist/core/index.d.ts +17 -12
  111. package/dist/core/index.js +32 -26
  112. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  113. package/dist/core/openIDBWithTimeout.js +42 -43
  114. package/dist/core/queryUtils.d.ts +45 -0
  115. package/dist/core/queryUtils.js +69 -0
  116. package/dist/core/storeContract.d.ts +63 -61
  117. package/dist/core/storeContract.js +8 -12
  118. package/dist/environment.d.ts +28 -0
  119. package/dist/environment.js +21 -0
  120. package/dist/errorCodes.d.ts +107 -99
  121. package/dist/errorCodes.js +131 -132
  122. package/dist/errors.d.ts +160 -166
  123. package/dist/errors.js +155 -158
  124. package/dist/index.d.ts +30 -27
  125. package/dist/index.js +89 -86
  126. package/dist/interfaces/index.d.ts +102 -113
  127. package/dist/interfaces/index.js +5 -4
  128. package/dist/keys/index.d.ts +27 -29
  129. package/dist/keys/index.js +41 -40
  130. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  131. package/dist/mutators/RecordingTransaction.js +31 -37
  132. package/dist/mutators/Transaction.d.ts +18 -26
  133. package/dist/mutators/Transaction.js +14 -20
  134. package/dist/mutators/UndoManager.d.ts +122 -131
  135. package/dist/mutators/UndoManager.js +145 -156
  136. package/dist/mutators/defineMutators.d.ts +23 -34
  137. package/dist/mutators/defineMutators.js +14 -20
  138. package/dist/mutators/inverseOp.d.ts +12 -15
  139. package/dist/mutators/inverseOp.js +12 -15
  140. package/dist/mutators/mutateActions.d.ts +10 -9
  141. package/dist/mutators/mutateActions.js +1 -1
  142. package/dist/mutators/readerActions.d.ts +9 -8
  143. package/dist/mutators/readerActions.js +2 -2
  144. package/dist/mutators/undoApply.d.ts +31 -27
  145. package/dist/mutators/undoApply.js +26 -24
  146. package/dist/policy/index.d.ts +5 -3
  147. package/dist/policy/index.js +5 -3
  148. package/dist/policy/types.d.ts +104 -100
  149. package/dist/policy/types.js +67 -66
  150. package/dist/query/client.d.ts +28 -23
  151. package/dist/query/client.js +45 -43
  152. package/dist/query/types.d.ts +37 -60
  153. package/dist/query/types.js +13 -33
  154. package/dist/react/AbloProvider.d.ts +1 -1
  155. package/dist/react/AbloProvider.js +2 -2
  156. package/dist/react/context.d.ts +25 -28
  157. package/dist/react/context.js +9 -10
  158. package/dist/react/index.d.ts +41 -42
  159. package/dist/react/index.js +37 -38
  160. package/dist/react/internalContext.d.ts +17 -19
  161. package/dist/react/useAblo.d.ts +23 -22
  162. package/dist/react/useAblo.js +16 -14
  163. package/dist/react/useCurrentUserId.d.ts +8 -7
  164. package/dist/react/useCurrentUserId.js +8 -7
  165. package/dist/react/useErrorListener.d.ts +7 -7
  166. package/dist/react/useErrorListener.js +10 -11
  167. package/dist/react/useMutationFailureListener.d.ts +8 -8
  168. package/dist/react/useMutationFailureListener.js +8 -8
  169. package/dist/react/useMutators.d.ts +11 -11
  170. package/dist/react/useMutators.js +3 -3
  171. package/dist/react/useReactive.js +2 -2
  172. package/dist/react/useSyncStatus.d.ts +4 -6
  173. package/dist/react/useUndoScope.d.ts +7 -9
  174. package/dist/react/useUndoScope.js +1 -1
  175. package/dist/schema/coordination.d.ts +21 -25
  176. package/dist/schema/coordination.js +21 -25
  177. package/dist/schema/ddl.d.ts +43 -39
  178. package/dist/schema/ddl.js +75 -68
  179. package/dist/schema/ddlLock.d.ts +20 -24
  180. package/dist/schema/ddlLock.js +18 -23
  181. package/dist/schema/diff.d.ts +99 -61
  182. package/dist/schema/diff.js +43 -34
  183. package/dist/schema/field.d.ts +37 -42
  184. package/dist/schema/field.js +35 -48
  185. package/dist/schema/generate.d.ts +12 -12
  186. package/dist/schema/generate.js +12 -12
  187. package/dist/schema/index.d.ts +2 -2
  188. package/dist/schema/index.js +21 -23
  189. package/dist/schema/model.d.ts +118 -143
  190. package/dist/schema/model.js +22 -33
  191. package/dist/schema/openapi.d.ts +10 -9
  192. package/dist/schema/openapi.js +5 -3
  193. package/dist/schema/queries.d.ts +29 -31
  194. package/dist/schema/queries.js +23 -25
  195. package/dist/schema/relation.d.ts +89 -99
  196. package/dist/schema/relation.js +13 -13
  197. package/dist/schema/residency.d.ts +16 -13
  198. package/dist/schema/residency.js +16 -13
  199. package/dist/schema/roles.d.ts +36 -43
  200. package/dist/schema/roles.js +31 -37
  201. package/dist/schema/schema.d.ts +33 -42
  202. package/dist/schema/schema.js +31 -32
  203. package/dist/schema/select.d.ts +13 -13
  204. package/dist/schema/select.js +13 -13
  205. package/dist/schema/serialize.d.ts +28 -31
  206. package/dist/schema/serialize.js +27 -31
  207. package/dist/schema/sugar.d.ts +17 -32
  208. package/dist/schema/sugar.js +14 -29
  209. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  210. package/dist/schema/syncDeltaRow.js +89 -0
  211. package/dist/schema/tenancy.d.ts +44 -46
  212. package/dist/schema/tenancy.js +46 -48
  213. package/dist/server/adapter.d.ts +58 -58
  214. package/dist/server/adapter.js +13 -14
  215. package/dist/server/commit.d.ts +60 -64
  216. package/dist/server/index.d.ts +9 -10
  217. package/dist/server/index.js +1 -1
  218. package/dist/server/readConfig.d.ts +70 -0
  219. package/dist/server/readConfig.js +8 -0
  220. package/dist/server/storageMode.d.ts +23 -0
  221. package/dist/server/storageMode.js +17 -0
  222. package/dist/source/adapter.d.ts +30 -25
  223. package/dist/source/adapter.js +10 -10
  224. package/dist/source/adapters/drizzle.d.ts +28 -23
  225. package/dist/source/adapters/drizzle.js +30 -25
  226. package/dist/source/adapters/kysely.d.ts +27 -25
  227. package/dist/source/adapters/kysely.js +24 -23
  228. package/dist/source/adapters/memory.d.ts +8 -7
  229. package/dist/source/adapters/memory.js +9 -8
  230. package/dist/source/adapters/prisma.d.ts +13 -12
  231. package/dist/source/adapters/prisma.js +22 -25
  232. package/dist/source/conformance.d.ts +18 -11
  233. package/dist/source/conformance.js +17 -11
  234. package/dist/source/connector.d.ts +31 -32
  235. package/dist/source/connector.js +28 -28
  236. package/dist/source/connectorProtocol.d.ts +160 -0
  237. package/dist/source/connectorProtocol.js +162 -0
  238. package/dist/source/contract.d.ts +26 -27
  239. package/dist/source/contract.js +28 -29
  240. package/dist/source/factory.d.ts +46 -58
  241. package/dist/source/factory.js +22 -27
  242. package/dist/source/index.d.ts +7 -9
  243. package/dist/source/index.js +12 -14
  244. package/dist/source/migrations.d.ts +9 -9
  245. package/dist/source/migrations.js +9 -9
  246. package/dist/source/next.d.ts +9 -10
  247. package/dist/source/next.js +6 -7
  248. package/dist/source/pushQueue.d.ts +69 -47
  249. package/dist/source/pushQueue.js +32 -28
  250. package/dist/source/signing.d.ts +46 -17
  251. package/dist/source/signing.js +28 -11
  252. package/dist/source/types.d.ts +121 -104
  253. package/dist/source/types.js +13 -14
  254. package/dist/stores/ObjectStore.d.ts +10 -11
  255. package/dist/stores/ObjectStore.js +11 -12
  256. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  257. package/dist/stores/SyncActionStore.d.ts +7 -11
  258. package/dist/stores/SyncActionStore.js +13 -17
  259. package/dist/surface.d.ts +27 -20
  260. package/dist/surface.js +27 -20
  261. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  262. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  263. package/dist/sync/ConnectionManager.d.ts +39 -50
  264. package/dist/sync/ConnectionManager.js +55 -66
  265. package/dist/sync/NetworkProbe.d.ts +24 -29
  266. package/dist/sync/NetworkProbe.js +63 -69
  267. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  268. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  269. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  270. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  271. package/dist/sync/SyncWebSocket.d.ts +139 -165
  272. package/dist/sync/SyncWebSocket.js +191 -223
  273. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  274. package/dist/sync/awaitClaimGrant.js +11 -11
  275. package/dist/sync/bootstrapApply.d.ts +34 -24
  276. package/dist/sync/bootstrapApply.js +27 -19
  277. package/dist/sync/commitFrames.d.ts +21 -20
  278. package/dist/sync/commitFrames.js +18 -18
  279. package/dist/sync/createClaimStream.d.ts +23 -22
  280. package/dist/sync/createClaimStream.js +105 -23
  281. package/dist/sync/createPresenceStream.d.ts +19 -18
  282. package/dist/sync/createPresenceStream.js +25 -26
  283. package/dist/sync/createSnapshot.d.ts +12 -14
  284. package/dist/sync/createSnapshot.js +20 -26
  285. package/dist/sync/credentialLifecycle.d.ts +104 -104
  286. package/dist/sync/credentialLifecycle.js +140 -147
  287. package/dist/sync/deltaPipeline.d.ts +36 -34
  288. package/dist/sync/deltaPipeline.js +64 -65
  289. package/dist/sync/groupChange.d.ts +63 -61
  290. package/dist/sync/groupChange.js +74 -78
  291. package/dist/sync/heartbeat.d.ts +34 -33
  292. package/dist/sync/heartbeat.js +31 -31
  293. package/dist/sync/participants.d.ts +19 -19
  294. package/dist/sync/schemas.d.ts +3 -2
  295. package/dist/sync/schemas.js +14 -10
  296. package/dist/sync/syncCursor.d.ts +17 -21
  297. package/dist/sync/syncCursor.js +17 -21
  298. package/dist/sync/syncPlan.d.ts +28 -36
  299. package/dist/sync/syncPlan.js +18 -19
  300. package/dist/sync/syncPosition.d.ts +54 -49
  301. package/dist/sync/syncPosition.js +57 -52
  302. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  303. package/dist/sync/wsFrameHandlers.js +63 -67
  304. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  305. package/dist/testing/fixtures/bootstrap.js +12 -6
  306. package/dist/testing/fixtures/deltas.d.ts +30 -33
  307. package/dist/testing/fixtures/deltas.js +30 -33
  308. package/dist/testing/fixtures/models.d.ts +11 -10
  309. package/dist/testing/fixtures/models.js +11 -10
  310. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  311. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  312. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  313. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  314. package/dist/testing/helpers/wait.d.ts +13 -8
  315. package/dist/testing/helpers/wait.js +13 -8
  316. package/dist/testing/index.d.ts +3 -3
  317. package/dist/testing/index.js +2 -2
  318. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  319. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  320. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  321. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  322. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  323. package/dist/testing/mocks/MockSyncContext.js +15 -13
  324. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  325. package/dist/testing/mocks/MockSyncStore.js +11 -11
  326. package/dist/testing/mocks/MockWebSocket.d.ts +26 -22
  327. package/dist/testing/mocks/MockWebSocket.js +22 -21
  328. package/dist/transactions/TransactionQueue.d.ts +181 -176
  329. package/dist/transactions/TransactionQueue.js +338 -350
  330. package/dist/transactions/TransactionStore.d.ts +6 -4
  331. package/dist/transactions/TransactionStore.js +6 -4
  332. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  333. package/dist/transactions/UnconfirmedWrites.js +104 -0
  334. package/dist/transactions/coalesceRules.d.ts +41 -17
  335. package/dist/transactions/coalesceRules.js +40 -17
  336. package/dist/transactions/commitPayload.d.ts +48 -52
  337. package/dist/transactions/commitPayload.js +48 -57
  338. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  339. package/dist/transactions/deltaConfirmation.js +37 -45
  340. package/dist/transactions/optimisticApply.d.ts +49 -0
  341. package/dist/transactions/optimisticApply.js +65 -0
  342. package/dist/transactions/{persistedReplay.d.ts → replayValidation.d.ts} +28 -22
  343. package/dist/transactions/{persistedReplay.js → replayValidation.js} +33 -27
  344. package/dist/types/global.d.ts +46 -41
  345. package/dist/types/global.js +20 -19
  346. package/dist/types/index.d.ts +71 -77
  347. package/dist/types/index.js +22 -22
  348. package/dist/types/modelData.d.ts +6 -8
  349. package/dist/types/modelData.js +5 -7
  350. package/dist/types/participant.d.ts +10 -11
  351. package/dist/types/participant.js +6 -8
  352. package/dist/types/streams.d.ts +208 -195
  353. package/dist/types/streams.js +7 -7
  354. package/dist/utils/asyncIterator.d.ts +25 -32
  355. package/dist/utils/asyncIterator.js +25 -32
  356. package/dist/utils/duration.d.ts +12 -15
  357. package/dist/utils/duration.js +12 -15
  358. package/dist/utils/mobxSetup.d.ts +53 -0
  359. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  360. package/dist/webhooks/events.d.ts +21 -16
  361. package/dist/webhooks/events.js +10 -8
  362. package/dist/webhooks/index.d.ts +5 -7
  363. package/dist/webhooks/index.js +5 -7
  364. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  365. package/dist/wire/delta.js +114 -0
  366. package/dist/wire/errorEnvelope.d.ts +30 -31
  367. package/dist/wire/errorEnvelope.js +34 -40
  368. package/dist/wire/frames.d.ts +79 -86
  369. package/dist/wire/frames.js +26 -33
  370. package/dist/wire/index.d.ts +14 -12
  371. package/dist/wire/index.js +30 -26
  372. package/dist/wire/listEnvelope.d.ts +16 -23
  373. package/dist/wire/listEnvelope.js +7 -6
  374. package/dist/wire/protocol.d.ts +25 -32
  375. package/dist/wire/protocol.js +25 -32
  376. package/dist/wire/protocolVersion.d.ts +44 -40
  377. package/dist/wire/protocolVersion.js +44 -40
  378. package/docs/coordination.md +59 -0
  379. package/package.json +11 -10
  380. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  381. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  382. package/dist/core/query-utils.d.ts +0 -34
  383. package/dist/core/query-utils.js +0 -59
  384. package/dist/schema/sync-delta-row.js +0 -103
  385. package/dist/schema/sync-delta-wire.js +0 -102
  386. package/dist/server/read-config.d.ts +0 -67
  387. package/dist/server/read-config.js +0 -8
  388. package/dist/server/storage-mode.d.ts +0 -8
  389. package/dist/server/storage-mode.js +0 -28
  390. package/dist/source/connector-protocol.d.ts +0 -159
  391. package/dist/source/connector-protocol.js +0 -161
  392. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  393. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  394. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  395. package/dist/transactions/mutation-error-handler.js +0 -39
  396. package/dist/transactions/optimistic.d.ts +0 -24
  397. package/dist/transactions/optimistic.js +0 -45
  398. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,17 +1,17 @@
1
1
  /**
2
- * SyncClient - Mutation and offline queue manager
3
- *
4
- * Responsibilities:
5
- * - Handle model mutations (create, update, delete, archive)
6
- * - Manage offline mutation queue with persistence
7
- * - Send mutations to server via API client
8
- * - Handle conflict resolution for local changes
2
+ * Applies model mutations and manages the offline write queue. The
3
+ * SyncClient turns local create, update, delete, and archive calls into
4
+ * optimistic changes, holds them while the client is offline, sends them to
5
+ * the server when connectivity returns, and resolves conflicts when the
6
+ * server's version of a row disagrees with the local one. It sits between the
7
+ * reactive object pool and the {@link TransactionQueue} that delivers writes
8
+ * over the network.
9
9
  */
10
- import { ObjectPool } from './ObjectPool.js';
10
+ import { InstanceCache } from './InstanceCache.js';
11
11
  import { Model } from './Model.js';
12
12
  import { EventEmitter } from 'events';
13
13
  import { TransactionQueue } from './transactions/TransactionQueue.js';
14
- import { type OptimisticEchoMetrics } from './transactions/OptimisticEchoTracker.js';
14
+ import { type UnconfirmedWritesMetrics } from './transactions/UnconfirmedWrites.js';
15
15
  import type { Database } from './Database.js';
16
16
  import type { WriteOptions } from './interfaces/index.js';
17
17
  import { SyncPosition } from './sync/syncPosition.js';
@@ -50,33 +50,29 @@ export declare class SyncClient extends EventEmitter {
50
50
  private organizationId;
51
51
  private pendingMutations;
52
52
  /**
53
- * Tracks transaction ids the client has optimistically applied but
54
- * the server has not yet confirmed. The receive path consults it
55
- * to recognize delta echoes of own mutations and suppress the
56
- * (otherwise-redundant) pool mutation the IDB write still runs
57
- * because the delta is the authoritative version of the row.
53
+ * Tracks the ids of transactions the client has applied optimistically but
54
+ * the server has not yet confirmed. When a delta arrives, the receive path
55
+ * consults this set to recognize the echo of the client's own mutation and
56
+ * skip the now-redundant pool update; the IndexedDB write still runs,
57
+ * because the delta is the authoritative version of the row. Without this
58
+ * discriminator, an optimistically applied delete followed by a
59
+ * server-confirmed create echo would resurrect the row for the window
60
+ * between the two confirmations.
58
61
  *
59
- * The receive-layer discriminator named in
60
- * `apps/sync-server/docs/OPTIMISTIC_RECONCILIATION.md`. Without
61
- * it, an optimistically-applied DELETE followed by a
62
- * server-confirming CREATE echo resurrects the row for the window
63
- * between the two confirmations (the chart-delete flicker).
64
- *
65
- * Bounded with FIFO eviction; observability via `getEchoMetrics()`.
62
+ * The set is bounded with first-in-first-out eviction, and
63
+ * {@link SyncClient.getEchoMetrics} exposes its counters.
66
64
  */
67
65
  private readonly echoTracker;
68
66
  private connectionState;
69
- private offlineSince?;
70
- private maxRetries;
71
67
  private isDisposed;
72
68
  /**
73
- * THE client's place in the global delta order the one canonical
74
- * instance (see `sync/syncPosition.ts`). The store advances
75
- * `applied`/`persisted` as deltas land; the queue advances `acked` on
76
- * commit responses; snapshots/claims read `readFloor`.
69
+ * The client's position in the global delta order, held as the single
70
+ * canonical {@link SyncPosition} instance. The store advances `applied` and
71
+ * `persisted` as deltas land, the queue advances `acked` on commit
72
+ * responses, and snapshots and claims read `readFloor`.
77
73
  */
78
74
  readonly position: SyncPosition;
79
- constructor(objectPool: ObjectPool, database: Database);
75
+ constructor(objectPool: InstanceCache, database: Database);
80
76
  /**
81
77
  * Setup network monitoring handlers
82
78
  */
@@ -104,20 +100,20 @@ export declare class SyncClient extends EventEmitter {
104
100
  */
105
101
  private setupTransactionRollbackHandling;
106
102
  /**
107
- * Forward reconciliation requests from TransactionQueue to the sync layer.
108
- * When delta confirmation times out, TransactionQueue emits 'reconciliation:needed'
109
- * instead of rolling back following the Replicache/PowerSync pattern of never
110
- * destroying optimistic state that the server may have committed.
103
+ * Forward reconciliation requests from the {@link TransactionQueue} to the
104
+ * sync layer. When delta confirmation times out, the queue emits
105
+ * `reconciliation:needed` instead of rolling back, so optimistic state the
106
+ * server may already have committed is never destroyed.
111
107
  */
112
108
  private setupReconciliationForwarding;
113
109
  /**
114
- * LINEAR PATTERN: Persist unconfirmed transactions to IndexedDB.
115
- * When delta confirmation retries exhaust, the transaction data is cached in IDB
116
- * so it survives tab close. On next session, WebSocket reconnect + delta catch-up
117
- * will deliver the missing deltas and naturally confirm the transaction.
110
+ * Persist unconfirmed transactions to IndexedDB. When delta-confirmation
111
+ * retries are exhausted, the transaction is cached so it survives a tab
112
+ * close. On the next session, a WebSocket reconnect and delta catch-up
113
+ * deliver the missing deltas and confirm the transaction.
118
114
  */
119
115
  private setupAwaitingTransactionPersistence;
120
- /** Persist an unconfirmed transaction to IDB (never rejects — failures are captured). */
116
+ /** Persist an unconfirmed transaction to IndexedDB (never rejects — failures are captured). */
121
117
  private persistAwaitingTransaction;
122
118
  /** Drop the persisted awaiting-row once confirmed (never rejects). */
123
119
  private removeAwaitingTransaction;
@@ -135,7 +131,7 @@ export declare class SyncClient extends EventEmitter {
135
131
  * Self-healing helper for individual model records.
136
132
  *
137
133
  * Two registry-driven repair passes run on every row hydrated from
138
- * IDB or merged from a delta:
134
+ * IndexedDB or merged from a delta:
139
135
  *
140
136
  * 1. **Auto-fill** — for each `autoFill` rule the consumer's schema
141
137
  * declares on this model, copy the corresponding identity value
@@ -156,12 +152,12 @@ export declare class SyncClient extends EventEmitter {
156
152
  healed: boolean;
157
153
  } | null;
158
154
  /**
159
- * Hydrate ObjectPool with data from Database
155
+ * Hydrate InstanceCache with data from Database
160
156
  * Called after bootstrap is complete
161
157
  */
162
158
  hydrateFromDatabase(): Promise<void>;
163
159
  /**
164
- * Re-hydrate ObjectPool from IndexedDB when the pool already has data.
160
+ * Re-hydrate InstanceCache from IndexedDB when the pool already has data.
165
161
  *
166
162
  * Unlike hydrateFromDatabase() (which uses addBatch and skips existing IDs),
167
163
  * this method properly:
@@ -172,13 +168,14 @@ export declare class SyncClient extends EventEmitter {
172
168
  */
173
169
  rehydrateFromDatabase(): Promise<RehydrationStats>;
174
170
  /**
175
- * Mutate model optimistically and queue for server sync.
176
- * IndexedDB is only updated when server confirms via delta packet.
177
- *
178
- * CRITICAL: Changes are captured BEFORE poolAction to prevent data loss.
179
- * The captured changes are frozen and passed to queueMutation.
171
+ * Apply a mutation to a model optimistically and queue it for server sync.
172
+ * IndexedDB is updated only once the server confirms the change with a delta
173
+ * packet.
180
174
  *
181
- * @see src/sync-engine/types/TrackableModel.ts for change capture pattern
175
+ * A model's changes are captured before the pool action runs, because a pool
176
+ * operation such as an upsert can clear the model's local change set;
177
+ * capturing first ensures those changes are never lost. The captured set is
178
+ * frozen and handed to {@link queueMutation}.
182
179
  */
183
180
  private mutate;
184
181
  private pendingChangedTypes;
@@ -210,8 +207,9 @@ export declare class SyncClient extends EventEmitter {
210
207
  */
211
208
  private clearPendingMutationsForModel;
212
209
  /**
213
- * Upload file and create attachment (UPLOAD operation)
214
- * Uses Linear-style pattern with immediate URL generation
210
+ * Upload a file and create its attachment record. The upload runs through
211
+ * the {@link TransactionQueue}, and a model is built from the server's
212
+ * response and added to the pool.
215
213
  */
216
214
  uploadFile(file: File, options: {
217
215
  id: string;
@@ -239,16 +237,17 @@ export declare class SyncClient extends EventEmitter {
239
237
  /** Archive model (ARCHIVE) - works offline */
240
238
  archive(model: Model): void;
241
239
  /**
242
- * Append a mutation and schedule its sync work.
240
+ * Append a mutation to the pending queue and schedule its sync work.
243
241
  *
244
- * IDB persistence and the server push are deferred to a microtask so N
245
- * pushes inside the same tick collapse into ONE IDB serialization + ONE
246
- * process call. Without the deferral, queueing 100 mutations (paste,
247
- * PPTX import, AI sandbox layer creation) reserializes the entire
248
- * growing queue 100× O(N²) `model.toJSON()`.
242
+ * IndexedDB persistence and the server push are deferred to a microtask, so
243
+ * many pushes within the same tick collapse into a single serialization and
244
+ * a single process call. Without the deferral, queueing a hundred mutations
245
+ * at once — a large paste, a document import, bulk layer creation would
246
+ * reserialize the whole growing queue a hundred times, an O(N²) cost in
247
+ * `model.toJSON()`.
249
248
  *
250
- * @param mutation.capturedChanges - Pre-captured changes (frozen), used
251
- * to avoid re-reading changes after pool ops that might clear them.
249
+ * @param mutation.capturedChanges - Pre-captured, frozen changes, used to
250
+ * avoid re-reading a model after pool operations that might clear them.
252
251
  */
253
252
  private queueMutation;
254
253
  private syncScheduled;
@@ -258,12 +257,13 @@ export declare class SyncClient extends EventEmitter {
258
257
  */
259
258
  private persistMutationQueue;
260
259
  /**
261
- * Restore mutation queue from IndexedDB.
260
+ * Restore the mutation queue from IndexedDB.
262
261
  *
263
- * The persisted record was written by a PREVIOUS session (possibly an older
264
- * SDK build), so each entry is validated at this replay boundary (T1.8):
265
- * corrupt entries are dropped + logged at debug, and a failure never
266
- * vanishes into an empty catch offline write survival must be observable.
262
+ * The persisted record was written by an earlier session, possibly by an
263
+ * older build of the SDK, so each entry is validated as it is replayed:
264
+ * corrupt entries are dropped and logged at debug level, and a failure is
265
+ * never swallowed silently, because the survival of offline writes must be
266
+ * observable.
267
267
  */
268
268
  private restoreMutationQueue;
269
269
  /**
@@ -281,17 +281,16 @@ export declare class SyncClient extends EventEmitter {
281
281
  */
282
282
  private stageMutation;
283
283
  /**
284
- * Resolve conflicts between local and server data
285
- * Used when processing deltas from WebSocket
286
- *
287
- * CRITICAL: Always respects certain server states (deletes, deactivations)
288
- * even when there are local changes, to maintain data consistency.
284
+ * Resolve a conflict between the local model and incoming server data,
285
+ * called while processing deltas from the WebSocket. Certain server states,
286
+ * such as deletions and deactivations, always take precedence even when the
287
+ * local model has unsynced changes, so the two sides stay consistent.
289
288
  */
290
289
  resolveConflicts(localModel: Model, serverData: Record<string, unknown>): Model;
291
290
  /**
292
- * Extract critical state fields from server data
293
- * These are states that must always be respected, even with local changes.
294
- * The conflict brain reads exactly these known fields nothing else.
291
+ * Extract the critical state fields from server data. These are the states
292
+ * that must be honored even when the local model has unsynced changes. The
293
+ * conflict resolver reads exactly these fields and no others.
295
294
  */
296
295
  private extractCriticalState;
297
296
  /**
@@ -344,26 +343,26 @@ export declare class SyncClient extends EventEmitter {
344
343
  */
345
344
  dispose(): void;
346
345
  /**
347
- * LINEAR PATTERN: Notify TransactionQueue of incoming delta for sync ID threshold confirmation.
348
- * Transactions are confirmed when any delta with id >= their lastSyncId threshold arrives.
349
- * @param syncId - The sync ID of the received delta
346
+ * Notify the {@link TransactionQueue} of an incoming delta so it can confirm
347
+ * transactions by sync-id threshold. A transaction is confirmed once any
348
+ * delta with an id at or beyond its `lastSyncId` threshold arrives.
349
+ * @param syncId - The sync id of the received delta.
350
350
  */
351
351
  onDeltaReceived(syncId: number): void;
352
352
  /**
353
- * LINEAR PATTERN: Cancel transactions for orphaned child entities
354
- *
355
- * Called by SyncedStore when a DELETE delta arrives for a parent entity.
356
- * Cancels pending transactions for children that reference the deleted parent.
353
+ * Cancel pending transactions for child entities orphaned by a parent's
354
+ * deletion. The store calls this when a delete delta arrives for a parent,
355
+ * cancelling any queued writes on children that reference it.
357
356
  *
358
- * @param childModelName - The child model type (e.g., 'SlideLayer')
359
- * @param foreignKey - The FK property name (e.g., 'slideId')
360
- * @param parentId - The deleted parent's ID
361
- * @returns Number of transactions cancelled
357
+ * @param childModelName - The child model type (for example, `SlideLayer`).
358
+ * @param foreignKey - The foreign-key property name (for example, `slideId`).
359
+ * @param parentId - The id of the deleted parent.
360
+ * @returns The number of transactions cancelled.
362
361
  */
363
362
  cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
364
363
  /**
365
- * Wait for a transaction to be confirmed via delta echo (Linear pattern)
366
- * Delegates to TransactionQueue which already handles timeouts
364
+ * Wait for a transaction to be confirmed by its delta echo. Delegates to the
365
+ * {@link TransactionQueue}, which handles the confirmation timeout.
367
366
  */
368
367
  waitForDeltaConfirmation(transactionId: string): Promise<void>;
369
368
  /**
@@ -373,12 +372,12 @@ export declare class SyncClient extends EventEmitter {
373
372
  /**
374
373
  * Get sync statistics. Return type is inferred from the literal so
375
374
  * the call site sees the actual shape — `connectionState` narrowed
376
- * to its three states, `objectPoolStats` typed by `ObjectPool.getStats`.
375
+ * to its three states, `objectPoolStats` typed by `InstanceCache.getStats`.
377
376
  */
378
377
  getSyncStats(): {
379
378
  connectionState: 'connected' | 'disconnected' | 'connecting';
380
379
  pendingMutations: number;
381
- objectPoolStats: ReturnType<ObjectPool['getStats']>;
380
+ objectPoolStats: ReturnType<InstanceCache['getStats']>;
382
381
  };
383
382
  /**
384
383
  * Get pending transaction count from TransactionQueue
@@ -396,10 +395,10 @@ export declare class SyncClient extends EventEmitter {
396
395
  * can render typed UI (toast keyed by `AbloError.type`, route-level
397
396
  * "this entity reverted" boundaries, telemetry).
398
397
  *
399
- * Distinct from `onTransactionEvent('failed', cb)`, which exists only
400
- * for the legacy parameterless `pendingChanges` counter and intentionally
401
- * drops the payload. The two coexist — keep the counter callback fast
402
- * and the typed listener for user-visible surfaces.
398
+ * Distinct from `onTransactionEvent('failed', cb)`, which serves the
399
+ * parameterless `pendingChanges` counter and intentionally drops the
400
+ * payload. The two coexist: the counter callback stays lightweight, while
401
+ * this typed listener drives user-visible surfaces.
403
402
  */
404
403
  onMutationFailure(listener: (payload: {
405
404
  transaction: import('./transactions/TransactionQueue.js').Transaction;
@@ -407,15 +406,16 @@ export declare class SyncClient extends EventEmitter {
407
406
  permanent?: boolean;
408
407
  }) => void): () => void;
409
408
  /**
410
- * Subscribe to LOCAL transaction creation with the full {@link Transaction}
409
+ * Subscribe to local transaction creation with the full {@link Transaction}
411
410
  * payload (`type`, `modelName`, `modelId`, `data`, `previousData`). This is
412
- * the feed `BaseSyncedStore.subscribeLocalMutations` taps for undo recording.
411
+ * the feed the store's local-mutation subscription taps for undo recording.
413
412
  *
414
- * MUST subscribe to the TransactionQueue's emitter directly — that is the
415
- * ONLY emitter that fires `transaction:created`. SyncClient's own emitter
416
- * (reached via `subscribe()`) never re-broadcasts it, so routing undo through
417
- * `subscribe('transaction:created')` silently records nothing. Mirrors
418
- * `onMutationFailure`, which taps the queue for the same reason.
413
+ * It subscribes to the {@link TransactionQueue}'s emitter directly, since
414
+ * that is the only emitter that fires `transaction:created`. The SyncClient's
415
+ * own emitter (reached through {@link subscribe}) never rebroadcasts that
416
+ * event, so routing undo through `subscribe('transaction:created')` would
417
+ * record nothing. {@link onMutationFailure} taps the queue for the same
418
+ * reason.
419
419
  */
420
420
  onLocalTransaction(listener: (tx: import('./transactions/TransactionQueue.js').Transaction) => void): () => void;
421
421
  /**
@@ -464,9 +464,9 @@ export declare class SyncClient extends EventEmitter {
464
464
  unassignEntity(entityType: string, entityId: string): Promise<void>;
465
465
  reassignEntity(entityType: string, entityId: string, assigneeType: string, assigneeId: string, id?: string): Promise<void>;
466
466
  /**
467
- * Apply a batch of delta results from Database to the ObjectPool.
467
+ * Apply a batch of delta results from Database to the InstanceCache.
468
468
  * Owns: model creation, upsert, remove, archive, conflict resolution.
469
- * Returns: nothing — ObjectPool is updated in place.
469
+ * Returns: nothing — InstanceCache is updated in place.
470
470
  */
471
471
  /**
472
472
  * Mark a local transaction as optimistically applied. The matching
@@ -482,14 +482,14 @@ export declare class SyncClient extends EventEmitter {
482
482
  * — a sustained `evictions > 0` rate or `rollbacks` spike is a
483
483
  * health signal worth alerting on.
484
484
  */
485
- getEchoMetrics(): Readonly<OptimisticEchoMetrics>;
485
+ getEchoMetrics(): Readonly<UnconfirmedWritesMetrics>;
486
486
  /**
487
- * Package-internal accessor for the TransactionQueue. Used by
488
- * `Ablo.commits.create()` to route raw multi-op envelopes through the
489
- * same retry-on-reconnect lane as the Model proxy path, and by tests
490
- * to exercise the queue markTransactionPending wiring on the real
491
- * instance the SyncClient subscribes to. NOT re-exported to SDK
492
- * consumers `Ablo` itself is the public surface.
487
+ * Package-internal accessor for the {@link TransactionQueue}. Used by
488
+ * `Ablo.commits.create()` to route raw multi-operation envelopes through the
489
+ * same retry-on-reconnect lane as the model proxy path, and by tests to
490
+ * exercise the queue's interaction with {@link markTransactionPending} on the
491
+ * real instance the SyncClient subscribes to. It is not re-exported to SDK
492
+ * consumers; `Ablo` is the public surface.
493
493
  */
494
494
  getTransactionQueue(): TransactionQueue;
495
495
  applyDeltaBatchToPool(dbResults: {
@@ -507,7 +507,7 @@ export declare class SyncClient extends EventEmitter {
507
507
  transactionId?: string;
508
508
  }[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
509
509
  /**
510
- * Apply bootstrap data to the ObjectPool with ghost removal.
510
+ * Apply bootstrap data to the InstanceCache with ghost removal.
511
511
  * Owns: model creation, batch upsert, ghost detection + removal.
512
512
  */
513
513
  applyBootstrapDataToPool(bootstrapData: {
@@ -515,13 +515,13 @@ export declare class SyncClient extends EventEmitter {
515
515
  failedModels?: string[];
516
516
  }, protectedIds?: ReadonlySet<string>, options?: {
517
517
  /**
518
- * SCOPED backfill (P4 hydrate-on-enter): the snapshot covers only the
519
- * groups just entered, NOT the whole type. Two behaviors change to keep
520
- * it from corrupting the pool:
521
- * - upsert is version-guarded ({@link ObjectPool.upsertIfNewer}) so a
522
- * concurrent live delta isn't clobbered back to the snapshot version;
523
- * - ghost removal is SKIPPED a subset snapshot must never evict rows
524
- * of the same type that belong to other (unhydrated) groups.
518
+ * Scoped backfill for the hydrate-on-enter path: the snapshot covers only
519
+ * the groups just entered, not the whole model type. Two behaviors change
520
+ * so the subset cannot corrupt the pool. First, the upsert is
521
+ * version-guarded ({@link InstanceCache.upsertIfNewer}) so a concurrent live
522
+ * delta is not clobbered back to the snapshot version. Second, ghost
523
+ * removal is skipped, because a subset snapshot must never evict rows of
524
+ * the same type that belong to other, unhydrated groups.
525
525
  */
526
526
  scoped?: boolean;
527
527
  }): {