@abloatai/ablo 0.35.0 → 0.37.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 (622) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -1929
  3. package/NOTICE +2 -2
  4. package/README.md +23 -532
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -112
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -161
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +2 -2
  59. package/docs/api-keys.md +13 -12
  60. package/docs/api.md +15 -53
  61. package/docs/audit.md +4 -3
  62. package/docs/cli.md +11 -11
  63. package/docs/client-behavior.md +9 -9
  64. package/docs/concurrency-convention.md +28 -42
  65. package/docs/coordination.md +228 -86
  66. package/docs/data-sources.md +5 -5
  67. package/docs/debugging.md +34 -12
  68. package/docs/deployment.md +8 -8
  69. package/docs/examples/agent-human.md +4 -4
  70. package/docs/examples/ai-sdk-tool.md +1 -1
  71. package/docs/examples/existing-python-backend.md +15 -4
  72. package/docs/examples/nextjs.md +27 -6
  73. package/docs/examples/scoped-agent.md +3 -3
  74. package/docs/examples/server-agent.md +2 -2
  75. package/docs/groups.md +57 -3
  76. package/docs/guarantees.md +37 -10
  77. package/docs/how-it-works.md +32 -8
  78. package/docs/idempotency.md +6 -6
  79. package/docs/identity.md +24 -24
  80. package/docs/index.md +8 -8
  81. package/docs/integration-guide.md +38 -16
  82. package/docs/internal/README.md +18 -0
  83. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  84. package/docs/internal/agent-orchestration.md +58 -0
  85. package/docs/internal/commit-identifiers.md +91 -0
  86. package/docs/internal/concurrency-open-decisions.md +37 -0
  87. package/docs/internal/data-source-reverse-channel.md +150 -0
  88. package/docs/internal/per-field-conflict-detection.md +165 -0
  89. package/docs/internal/postgres-replication.md +64 -0
  90. package/docs/internal/serializable-schema.md +119 -0
  91. package/docs/internal/structure.md +32 -0
  92. package/docs/mcp.md +9 -9
  93. package/docs/migration.md +37 -18
  94. package/docs/projects.md +1 -1
  95. package/docs/quickstart.md +2 -2
  96. package/docs/react.md +24 -13
  97. package/docs/schema-contract.md +3 -3
  98. package/docs/sessions.md +91 -37
  99. package/docs/webhooks.md +9 -9
  100. package/examples/README.md +2 -2
  101. package/examples/data-source/README.md +1 -1
  102. package/examples/data-source/ablo-driver.ts +1 -1
  103. package/examples/data-source/customer-server.ts +1 -1
  104. package/examples/data-source/run.ts +1 -1
  105. package/examples/data-source/schema.ts +1 -1
  106. package/examples/quickstart.ts +2 -2
  107. package/llms.txt +12 -12
  108. package/package.json +64 -174
  109. package/dist/BaseSyncedStore.d.ts +0 -823
  110. package/dist/BaseSyncedStore.js +0 -1955
  111. package/dist/Database.d.ts +0 -335
  112. package/dist/Database.js +0 -1500
  113. package/dist/InstanceCache.d.ts +0 -233
  114. package/dist/InstanceCache.js +0 -1164
  115. package/dist/LazyReferenceCollection.d.ts +0 -177
  116. package/dist/LazyReferenceCollection.js +0 -461
  117. package/dist/Model.d.ts +0 -444
  118. package/dist/Model.js +0 -909
  119. package/dist/ModelRegistry.d.ts +0 -221
  120. package/dist/ModelRegistry.js +0 -537
  121. package/dist/NetworkMonitor.d.ts +0 -26
  122. package/dist/NetworkMonitor.js +0 -77
  123. package/dist/RuntimeContext.d.ts +0 -52
  124. package/dist/RuntimeContext.js +0 -80
  125. package/dist/SyncClient.d.ts +0 -551
  126. package/dist/SyncClient.js +0 -2199
  127. package/dist/adapters/alwaysOnline.d.ts +0 -14
  128. package/dist/adapters/alwaysOnline.js +0 -17
  129. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  130. package/dist/adapters/inMemoryStorage.js +0 -110
  131. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  132. package/dist/ai-sdk/coordinatedTool.js +0 -134
  133. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  134. package/dist/ai-sdk/coordinationContext.js +0 -106
  135. package/dist/ai-sdk/index.d.ts +0 -121
  136. package/dist/ai-sdk/index.js +0 -121
  137. package/dist/ai-sdk/wrap.d.ts +0 -65
  138. package/dist/ai-sdk/wrap.js +0 -39
  139. package/dist/auth/index.d.ts +0 -1
  140. package/dist/auth/index.js +0 -8
  141. package/dist/batching/index.d.ts +0 -55
  142. package/dist/batching/index.js +0 -147
  143. package/dist/cli.cjs +0 -288600
  144. package/dist/client/Ablo.d.ts +0 -231
  145. package/dist/client/Ablo.js +0 -149
  146. package/dist/client/abloClient.d.ts +0 -309
  147. package/dist/client/abloClient.js +0 -13
  148. package/dist/client/clientPrelude.d.ts +0 -52
  149. package/dist/client/clientPrelude.js +0 -60
  150. package/dist/client/consoleLogger.d.ts +0 -35
  151. package/dist/client/consoleLogger.js +0 -44
  152. package/dist/client/coreClient.d.ts +0 -60
  153. package/dist/client/coreClient.js +0 -118
  154. package/dist/client/createInternalComponents.d.ts +0 -46
  155. package/dist/client/createInternalComponents.js +0 -92
  156. package/dist/client/createModelProxy.d.ts +0 -228
  157. package/dist/client/createModelProxy.js +0 -818
  158. package/dist/client/humans.d.ts +0 -48
  159. package/dist/client/humans.js +0 -52
  160. package/dist/client/modelRegistration.d.ts +0 -10
  161. package/dist/client/modelRegistration.js +0 -312
  162. package/dist/client/options.d.ts +0 -461
  163. package/dist/client/options.js +0 -7
  164. package/dist/client/reactiveEngine.d.ts +0 -48
  165. package/dist/client/reactiveEngine.js +0 -910
  166. package/dist/client/resourceTypes.d.ts +0 -12
  167. package/dist/client/resourceTypes.js +0 -10
  168. package/dist/client/schemaConfig.d.ts +0 -44
  169. package/dist/client/schemaConfig.js +0 -185
  170. package/dist/client/validateAbloOptions.d.ts +0 -42
  171. package/dist/client/validateAbloOptions.js +0 -43
  172. package/dist/client/wsMutationExecutor.d.ts +0 -27
  173. package/dist/client/wsMutationExecutor.js +0 -72
  174. package/dist/context.d.ts +0 -29
  175. package/dist/context.js +0 -58
  176. package/dist/coordination/ClaimLog.d.ts +0 -26
  177. package/dist/coordination/ClaimLog.js +0 -32
  178. package/dist/coordination/index.d.ts +0 -1
  179. package/dist/coordination/index.js +0 -8
  180. package/dist/core/DatabaseManager.d.ts +0 -105
  181. package/dist/core/DatabaseManager.js +0 -387
  182. package/dist/core/QueryProcessor.d.ts +0 -75
  183. package/dist/core/QueryProcessor.js +0 -255
  184. package/dist/core/QueryView.d.ts +0 -79
  185. package/dist/core/QueryView.js +0 -218
  186. package/dist/core/StoreManager.d.ts +0 -112
  187. package/dist/core/StoreManager.js +0 -302
  188. package/dist/core/ViewRegistry.d.ts +0 -20
  189. package/dist/core/ViewRegistry.js +0 -55
  190. package/dist/core/index.d.ts +0 -33
  191. package/dist/core/index.js +0 -48
  192. package/dist/core/openIDBWithTimeout.d.ts +0 -65
  193. package/dist/core/openIDBWithTimeout.js +0 -153
  194. package/dist/core/queryUtils.d.ts +0 -45
  195. package/dist/core/queryUtils.js +0 -69
  196. package/dist/core/storeContract.d.ts +0 -145
  197. package/dist/core/storeContract.js +0 -12
  198. package/dist/docs/catalog.d.ts +0 -72
  199. package/dist/docs/catalog.js +0 -227
  200. package/dist/docs/index.d.ts +0 -10
  201. package/dist/docs/index.js +0 -10
  202. package/dist/environment.d.ts +0 -1
  203. package/dist/environment.js +0 -8
  204. package/dist/interfaces/index.d.ts +0 -311
  205. package/dist/interfaces/index.js +0 -9
  206. package/dist/keys/index.d.ts +0 -1
  207. package/dist/keys/index.js +0 -8
  208. package/dist/mutators/RecordingMutation.d.ts +0 -36
  209. package/dist/mutators/RecordingMutation.js +0 -182
  210. package/dist/mutators/Transaction.d.ts +0 -40
  211. package/dist/mutators/Transaction.js +0 -58
  212. package/dist/mutators/UndoManager.d.ts +0 -258
  213. package/dist/mutators/UndoManager.js +0 -658
  214. package/dist/mutators/defineMutators.d.ts +0 -60
  215. package/dist/mutators/defineMutators.js +0 -18
  216. package/dist/mutators/inverseOp.d.ts +0 -126
  217. package/dist/mutators/inverseOp.js +0 -71
  218. package/dist/mutators/mutateActions.d.ts +0 -45
  219. package/dist/mutators/mutateActions.js +0 -105
  220. package/dist/mutators/readerActions.d.ts +0 -33
  221. package/dist/mutators/readerActions.js +0 -57
  222. package/dist/mutators/undoApply.d.ts +0 -51
  223. package/dist/mutators/undoApply.js +0 -117
  224. package/dist/policy/index.d.ts +0 -21
  225. package/dist/policy/index.js +0 -20
  226. package/dist/query/client.d.ts +0 -61
  227. package/dist/query/client.js +0 -137
  228. package/dist/query/types.d.ts +0 -85
  229. package/dist/query/types.js +0 -16
  230. package/dist/react/AbloProvider.d.ts +0 -230
  231. package/dist/react/AbloProvider.js +0 -455
  232. package/dist/react/ClientSideSuspense.d.ts +0 -36
  233. package/dist/react/ClientSideSuspense.js +0 -17
  234. package/dist/react/DefaultFallback.d.ts +0 -24
  235. package/dist/react/DefaultFallback.js +0 -43
  236. package/dist/react/context.d.ts +0 -55
  237. package/dist/react/context.js +0 -29
  238. package/dist/react/index.d.ts +0 -61
  239. package/dist/react/index.js +0 -66
  240. package/dist/react/internalContext.d.ts +0 -33
  241. package/dist/react/internalContext.js +0 -3
  242. package/dist/react/useAblo.d.ts +0 -75
  243. package/dist/react/useAblo.js +0 -102
  244. package/dist/react/useCurrentUserId.d.ts +0 -22
  245. package/dist/react/useCurrentUserId.js +0 -34
  246. package/dist/react/useErrorListener.d.ts +0 -20
  247. package/dist/react/useErrorListener.js +0 -38
  248. package/dist/react/useMutationFailureListener.d.ts +0 -26
  249. package/dist/react/useMutationFailureListener.js +0 -38
  250. package/dist/react/useMutators.d.ts +0 -56
  251. package/dist/react/useMutators.js +0 -84
  252. package/dist/react/useReactive.d.ts +0 -35
  253. package/dist/react/useReactive.js +0 -123
  254. package/dist/react/useSyncStatus.d.ts +0 -59
  255. package/dist/react/useSyncStatus.js +0 -76
  256. package/dist/react/useUndoScope.d.ts +0 -34
  257. package/dist/react/useUndoScope.js +0 -81
  258. package/dist/schema/coordination.d.ts +0 -112
  259. package/dist/schema/coordination.js +0 -129
  260. package/dist/schema/ddl.d.ts +0 -97
  261. package/dist/schema/ddl.js +0 -491
  262. package/dist/schema/ddlLock.d.ts +0 -35
  263. package/dist/schema/ddlLock.js +0 -46
  264. package/dist/schema/diff.d.ts +0 -225
  265. package/dist/schema/diff.js +0 -289
  266. package/dist/schema/generate.d.ts +0 -19
  267. package/dist/schema/generate.js +0 -86
  268. package/dist/schema/index.d.ts +0 -41
  269. package/dist/schema/index.js +0 -76
  270. package/dist/schema/queries.d.ts +0 -201
  271. package/dist/schema/queries.js +0 -144
  272. package/dist/schema/select.d.ts +0 -40
  273. package/dist/schema/select.js +0 -87
  274. package/dist/schema/serialize.d.ts +0 -115
  275. package/dist/schema/serialize.js +0 -262
  276. package/dist/schema/sugar.d.ts +0 -109
  277. package/dist/schema/sugar.js +0 -83
  278. package/dist/schema/syncDeltaRow.d.ts +0 -6
  279. package/dist/schema/syncDeltaRow.js +0 -6
  280. package/dist/server/adapter.d.ts +0 -173
  281. package/dist/server/adapter.js +0 -18
  282. package/dist/server/commit.d.ts +0 -107
  283. package/dist/server/commit.js +0 -1
  284. package/dist/server/index.d.ts +0 -14
  285. package/dist/server/index.js +0 -2
  286. package/dist/server/readConfig.d.ts +0 -80
  287. package/dist/server/readConfig.js +0 -8
  288. package/dist/server/storageMode.d.ts +0 -23
  289. package/dist/server/storageMode.js +0 -17
  290. package/dist/source/adapter.d.ts +0 -81
  291. package/dist/source/adapter.js +0 -22
  292. package/dist/source/adapters/drizzle.d.ts +0 -48
  293. package/dist/source/adapters/drizzle.js +0 -219
  294. package/dist/source/adapters/kysely.d.ts +0 -42
  295. package/dist/source/adapters/kysely.js +0 -205
  296. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  297. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  298. package/dist/source/adapters/memory.d.ts +0 -13
  299. package/dist/source/adapters/memory.js +0 -130
  300. package/dist/source/adapters/prisma.d.ts +0 -63
  301. package/dist/source/adapters/prisma.js +0 -202
  302. package/dist/source/conformance.d.ts +0 -37
  303. package/dist/source/conformance.js +0 -215
  304. package/dist/source/connector.d.ts +0 -95
  305. package/dist/source/connector.js +0 -266
  306. package/dist/source/connectorProtocol.d.ts +0 -154
  307. package/dist/source/connectorProtocol.js +0 -163
  308. package/dist/source/contract.d.ts +0 -195
  309. package/dist/source/contract.js +0 -164
  310. package/dist/source/factory.d.ts +0 -92
  311. package/dist/source/factory.js +0 -286
  312. package/dist/source/footprint.d.ts +0 -111
  313. package/dist/source/footprint.js +0 -0
  314. package/dist/source/idempotency.d.ts +0 -61
  315. package/dist/source/idempotency.js +0 -144
  316. package/dist/source/index.d.ts +0 -23
  317. package/dist/source/index.js +0 -30
  318. package/dist/source/migrations.d.ts +0 -21
  319. package/dist/source/migrations.js +0 -103
  320. package/dist/source/next.d.ts +0 -32
  321. package/dist/source/next.js +0 -25
  322. package/dist/source/pushQueue.d.ts +0 -134
  323. package/dist/source/pushQueue.js +0 -256
  324. package/dist/source/signing.d.ts +0 -92
  325. package/dist/source/signing.js +0 -162
  326. package/dist/source/types.d.ts +0 -401
  327. package/dist/source/types.js +0 -59
  328. package/dist/stores/ObjectStore.d.ts +0 -115
  329. package/dist/stores/ObjectStore.js +0 -393
  330. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  331. package/dist/stores/ObjectStoreContract.js +0 -1
  332. package/dist/stores/SyncActionStore.d.ts +0 -97
  333. package/dist/stores/SyncActionStore.js +0 -504
  334. package/dist/stores/syncAction.d.ts +0 -26
  335. package/dist/stores/syncAction.js +0 -16
  336. package/dist/surface.d.ts +0 -36
  337. package/dist/surface.js +0 -75
  338. package/dist/sync/BootstrapFetcher.d.ts +0 -280
  339. package/dist/sync/BootstrapFetcher.js +0 -962
  340. package/dist/sync/ConnectionManager.d.ts +0 -8
  341. package/dist/sync/ConnectionManager.js +0 -8
  342. package/dist/sync/OnDemandLoader.d.ts +0 -228
  343. package/dist/sync/OnDemandLoader.js +0 -742
  344. package/dist/sync/SubscriptionManager.d.ts +0 -159
  345. package/dist/sync/SubscriptionManager.js +0 -243
  346. package/dist/sync/SyncWebSocket.d.ts +0 -173
  347. package/dist/sync/SyncWebSocket.js +0 -438
  348. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  349. package/dist/sync/awaitClaimGrant.js +0 -6
  350. package/dist/sync/bootstrapApply.d.ts +0 -70
  351. package/dist/sync/bootstrapApply.js +0 -73
  352. package/dist/sync/commitFrames.d.ts +0 -8
  353. package/dist/sync/commitFrames.js +0 -8
  354. package/dist/sync/contextPorts.d.ts +0 -18
  355. package/dist/sync/contextPorts.js +0 -31
  356. package/dist/sync/createClaimStream.d.ts +0 -7
  357. package/dist/sync/createClaimStream.js +0 -7
  358. package/dist/sync/createPresenceStream.d.ts +0 -69
  359. package/dist/sync/createPresenceStream.js +0 -200
  360. package/dist/sync/createSnapshot.d.ts +0 -29
  361. package/dist/sync/createSnapshot.js +0 -118
  362. package/dist/sync/credentialLifecycle.d.ts +0 -7
  363. package/dist/sync/credentialLifecycle.js +0 -7
  364. package/dist/sync/deltaPipeline.d.ts +0 -113
  365. package/dist/sync/deltaPipeline.js +0 -261
  366. package/dist/sync/groupChange.d.ts +0 -113
  367. package/dist/sync/groupChange.js +0 -242
  368. package/dist/sync/participants.d.ts +0 -115
  369. package/dist/sync/participants.js +0 -344
  370. package/dist/sync/persistedPrefix.d.ts +0 -12
  371. package/dist/sync/persistedPrefix.js +0 -22
  372. package/dist/sync/schemaDrift.d.ts +0 -55
  373. package/dist/sync/schemaDrift.js +0 -53
  374. package/dist/sync/schemas.d.ts +0 -70
  375. package/dist/sync/schemas.js +0 -94
  376. package/dist/sync/syncCursor.d.ts +0 -40
  377. package/dist/sync/syncCursor.js +0 -55
  378. package/dist/sync/syncPlan.d.ts +0 -54
  379. package/dist/sync/syncPlan.js +0 -50
  380. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  381. package/dist/sync/wsFrameHandlers.js +0 -8
  382. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  383. package/dist/testing/fixtures/bootstrap.js +0 -59
  384. package/dist/testing/fixtures/deltas.d.ts +0 -83
  385. package/dist/testing/fixtures/deltas.js +0 -136
  386. package/dist/testing/fixtures/httpResponses.d.ts +0 -70
  387. package/dist/testing/fixtures/httpResponses.js +0 -90
  388. package/dist/testing/fixtures/models.d.ts +0 -83
  389. package/dist/testing/fixtures/models.js +0 -272
  390. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  391. package/dist/testing/helpers/reactWrapper.js +0 -67
  392. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  393. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  394. package/dist/testing/helpers/wait.d.ts +0 -30
  395. package/dist/testing/helpers/wait.js +0 -49
  396. package/dist/testing/index.d.ts +0 -23
  397. package/dist/testing/index.js +0 -33
  398. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  399. package/dist/testing/mocks/FakeDatabase.js +0 -10
  400. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  401. package/dist/testing/mocks/MockMutationExecutor.js +0 -186
  402. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  403. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  404. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  405. package/dist/testing/mocks/MockSyncContext.js +0 -72
  406. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  407. package/dist/testing/mocks/MockSyncStore.js +0 -171
  408. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  409. package/dist/testing/mocks/MockWebSocket.js +0 -118
  410. package/dist/transaction/ablo.d.ts +0 -88
  411. package/dist/transaction/ablo.js +0 -33
  412. package/dist/transaction/auth/apiKey.d.ts +0 -152
  413. package/dist/transaction/auth/apiKey.js +0 -419
  414. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  415. package/dist/transaction/auth/bootstrapScope.js +0 -1
  416. package/dist/transaction/auth/capability.d.ts +0 -177
  417. package/dist/transaction/auth/capability.js +0 -199
  418. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  419. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  420. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  421. package/dist/transaction/auth/credentialPolicy.js +0 -125
  422. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  423. package/dist/transaction/auth/credentialSource.js +0 -55
  424. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  425. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  426. package/dist/transaction/auth/identity.d.ts +0 -55
  427. package/dist/transaction/auth/identity.js +0 -210
  428. package/dist/transaction/auth/index.d.ts +0 -162
  429. package/dist/transaction/auth/index.js +0 -304
  430. package/dist/transaction/auth/schemas.d.ts +0 -59
  431. package/dist/transaction/auth/schemas.js +0 -85
  432. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  433. package/dist/transaction/auth/sessionMint.js +0 -85
  434. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
  435. package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
  436. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
  437. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
  438. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  439. package/dist/transaction/coordination/claimMeta.js +0 -52
  440. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  441. package/dist/transaction/coordination/createClaimStream.js +0 -475
  442. package/dist/transaction/coordination/events.d.ts +0 -74
  443. package/dist/transaction/coordination/events.js +0 -7
  444. package/dist/transaction/coordination/index.d.ts +0 -19
  445. package/dist/transaction/coordination/index.js +0 -44
  446. package/dist/transaction/coordination/locator.d.ts +0 -83
  447. package/dist/transaction/coordination/locator.js +0 -82
  448. package/dist/transaction/coordination/schema.d.ts +0 -1473
  449. package/dist/transaction/coordination/schema.js +0 -1013
  450. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  451. package/dist/transaction/coordination/targetConflict.js +0 -103
  452. package/dist/transaction/coordination/trace.d.ts +0 -78
  453. package/dist/transaction/coordination/trace.js +0 -138
  454. package/dist/transaction/durableWrites.d.ts +0 -62
  455. package/dist/transaction/durableWrites.js +0 -71
  456. package/dist/transaction/environment.d.ts +0 -105
  457. package/dist/transaction/environment.js +0 -108
  458. package/dist/transaction/errorCodes.d.ts +0 -403
  459. package/dist/transaction/errorCodes.js +0 -480
  460. package/dist/transaction/errors.d.ts +0 -428
  461. package/dist/transaction/errors.js +0 -686
  462. package/dist/transaction/index.d.ts +0 -20
  463. package/dist/transaction/index.js +0 -20
  464. package/dist/transaction/keys/index.d.ts +0 -87
  465. package/dist/transaction/keys/index.js +0 -207
  466. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  467. package/dist/transaction/log/syncDeltaRow.js +0 -95
  468. package/dist/transaction/logPosition.d.ts +0 -97
  469. package/dist/transaction/logPosition.js +0 -125
  470. package/dist/transaction/logger.d.ts +0 -16
  471. package/dist/transaction/logger.js +0 -7
  472. package/dist/transaction/observability.d.ts +0 -53
  473. package/dist/transaction/observability.js +0 -19
  474. package/dist/transaction/persistence.d.ts +0 -12
  475. package/dist/transaction/persistence.js +0 -11
  476. package/dist/transaction/plugin.d.ts +0 -192
  477. package/dist/transaction/plugin.js +0 -87
  478. package/dist/transaction/policy/types.d.ts +0 -217
  479. package/dist/transaction/policy/types.js +0 -126
  480. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  481. package/dist/transaction/resources/functionalUpdate.js +0 -87
  482. package/dist/transaction/resources/httpResources.d.ts +0 -266
  483. package/dist/transaction/resources/httpResources.js +0 -7
  484. package/dist/transaction/resources/modelOperations.d.ts +0 -319
  485. package/dist/transaction/resources/modelOperations.js +0 -12
  486. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  487. package/dist/transaction/resources/mutationOptions.js +0 -9
  488. package/dist/transaction/resources/where.d.ts +0 -85
  489. package/dist/transaction/resources/where.js +0 -70
  490. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  491. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  492. package/dist/transaction/schema/field.d.ts +0 -126
  493. package/dist/transaction/schema/field.js +0 -265
  494. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  495. package/dist/transaction/schema/loadStrategy.js +0 -46
  496. package/dist/transaction/schema/model.d.ts +0 -379
  497. package/dist/transaction/schema/model.js +0 -123
  498. package/dist/transaction/schema/openapi.d.ts +0 -57
  499. package/dist/transaction/schema/openapi.js +0 -340
  500. package/dist/transaction/schema/relation.d.ts +0 -199
  501. package/dist/transaction/schema/relation.js +0 -104
  502. package/dist/transaction/schema/residency.d.ts +0 -29
  503. package/dist/transaction/schema/residency.js +0 -25
  504. package/dist/transaction/schema/roles.d.ts +0 -249
  505. package/dist/transaction/schema/roles.js +0 -230
  506. package/dist/transaction/schema/schema.d.ts +0 -324
  507. package/dist/transaction/schema/schema.js +0 -305
  508. package/dist/transaction/schema/tenancy.d.ts +0 -139
  509. package/dist/transaction/schema/tenancy.js +0 -190
  510. package/dist/transaction/transactionLayer.d.ts +0 -82
  511. package/dist/transaction/transactionLayer.js +0 -24
  512. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  513. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  514. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  515. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  516. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  517. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  518. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  519. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  520. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  521. package/dist/transaction/transport/commitFrames.js +0 -134
  522. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  523. package/dist/transaction/transport/connectionManager.js +0 -673
  524. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  525. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  526. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  527. package/dist/transaction/transport/heartbeat.js +0 -93
  528. package/dist/transaction/transport/httpClient.d.ts +0 -123
  529. package/dist/transaction/transport/httpClient.js +0 -145
  530. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  531. package/dist/transaction/transport/httpOptions.js +0 -12
  532. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  533. package/dist/transaction/transport/httpTransport.js +0 -1276
  534. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  535. package/dist/transaction/transport/networkProbe.js +0 -207
  536. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  537. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  538. package/dist/transaction/transport/wsTransport.d.ts +0 -576
  539. package/dist/transaction/transport/wsTransport.js +0 -1017
  540. package/dist/transaction/types/assertExact.d.ts +0 -17
  541. package/dist/transaction/types/assertExact.js +0 -1
  542. package/dist/transaction/types/global.d.ts +0 -107
  543. package/dist/transaction/types/global.js +0 -40
  544. package/dist/transaction/types/index.d.ts +0 -205
  545. package/dist/transaction/types/index.js +0 -56
  546. package/dist/transaction/types/modelData.d.ts +0 -10
  547. package/dist/transaction/types/modelData.js +0 -9
  548. package/dist/transaction/types/participant.d.ts +0 -20
  549. package/dist/transaction/types/participant.js +0 -10
  550. package/dist/transaction/types/streams.d.ts +0 -540
  551. package/dist/transaction/types/streams.js +0 -11
  552. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  553. package/dist/transaction/utils/asyncIterator.js +0 -135
  554. package/dist/transaction/utils/duration.d.ts +0 -25
  555. package/dist/transaction/utils/duration.js +0 -45
  556. package/dist/transaction/utils/json.d.ts +0 -57
  557. package/dist/transaction/utils/json.js +0 -276
  558. package/dist/transaction/wire/accountResponses.d.ts +0 -351
  559. package/dist/transaction/wire/accountResponses.js +0 -255
  560. package/dist/transaction/wire/auth.d.ts +0 -49
  561. package/dist/transaction/wire/auth.js +0 -57
  562. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  563. package/dist/transaction/wire/bootstrapReason.js +0 -8
  564. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  565. package/dist/transaction/wire/claimEvent.js +0 -73
  566. package/dist/transaction/wire/claims.d.ts +0 -463
  567. package/dist/transaction/wire/claims.js +0 -229
  568. package/dist/transaction/wire/commit.d.ts +0 -603
  569. package/dist/transaction/wire/commit.js +0 -321
  570. package/dist/transaction/wire/delta.d.ts +0 -250
  571. package/dist/transaction/wire/delta.js +0 -147
  572. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  573. package/dist/transaction/wire/errorEnvelope.js +0 -123
  574. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  575. package/dist/transaction/wire/feedCursor.js +0 -82
  576. package/dist/transaction/wire/feedEvent.d.ts +0 -177
  577. package/dist/transaction/wire/feedEvent.js +0 -39
  578. package/dist/transaction/wire/frames.d.ts +0 -194
  579. package/dist/transaction/wire/frames.js +0 -50
  580. package/dist/transaction/wire/inboundFrames.d.ts +0 -552
  581. package/dist/transaction/wire/inboundFrames.js +0 -116
  582. package/dist/transaction/wire/index.d.ts +0 -50
  583. package/dist/transaction/wire/index.js +0 -74
  584. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  585. package/dist/transaction/wire/listEnvelope.js +0 -42
  586. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  587. package/dist/transaction/wire/modelResponses.js +0 -43
  588. package/dist/transaction/wire/protocol.d.ts +0 -38
  589. package/dist/transaction/wire/protocol.js +0 -38
  590. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  591. package/dist/transaction/wire/protocolVersion.js +0 -83
  592. package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
  593. package/dist/transactions/mutations/MutationQueue.js +0 -2797
  594. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  595. package/dist/transactions/mutations/MutationStore.js +0 -53
  596. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  597. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  598. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  599. package/dist/transactions/mutations/coalesceRules.js +0 -140
  600. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  601. package/dist/transactions/mutations/commitLatency.js +0 -130
  602. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  603. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  604. package/dist/transactions/mutations/commitPayload.d.ts +0 -164
  605. package/dist/transactions/mutations/commitPayload.js +0 -152
  606. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
  607. package/dist/transactions/mutations/deltaConfirmation.js +0 -233
  608. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  609. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  610. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  611. package/dist/transactions/mutations/optimisticApply.js +0 -65
  612. package/dist/transactions/mutations/replayValidation.d.ts +0 -186
  613. package/dist/transactions/mutations/replayValidation.js +0 -163
  614. package/dist/utils/mobxSetup.d.ts +0 -53
  615. package/dist/utils/mobxSetup.js +0 -330
  616. package/dist/webhooks/events.d.ts +0 -43
  617. package/dist/webhooks/events.js +0 -42
  618. package/dist/webhooks/index.d.ts +0 -8
  619. package/dist/webhooks/index.js +0 -8
  620. package/dist/wire/index.d.ts +0 -1
  621. package/dist/wire/index.js +0 -8
  622. package/docs/interaction-model.md +0 -99
@@ -1,80 +0,0 @@
1
- /**
2
- * RuntimeContext — Runtime dependency container
3
- *
4
- * All SDK classes receive this context at construction time.
5
- * It bundles every injectable dependency so constructors stay clean.
6
- */
7
- import { AbloSessionError } from './transaction/errors.js';
8
- // ─────────────────────────────────────────────
9
- // No-op defaults for optional dependencies
10
- // ─────────────────────────────────────────────
11
- // Re-exported, not redeclared. `@ablo/transaction/logger` owns the no-op that
12
- // sits beside the `Logger` port. This package held a second, behaviourally
13
- // identical copy, and half of it imported the canonical one while the other
14
- // half imported this — so any change of semantics there would have reached
15
- // only one side, invisibly, because the identifier reads the same at both.
16
- export { noopLogger } from './transaction/logger.js';
17
- /** No-op observability — silently discards all observability calls */
18
- export const noopObservability = {
19
- setContext() { },
20
- setConnectionState() { },
21
- breadcrumb() { },
22
- captureRollback() { },
23
- captureMutationFailure() { },
24
- captureBootstrapFailure() { },
25
- captureReconciliation() { },
26
- captureDeltaRetryExhausted() { },
27
- captureWebSocketError() { },
28
- captureSelfHealing() { },
29
- captureClaim() { },
30
- captureConflict() { },
31
- captureCommitZeroSyncId() { },
32
- startSpan(_name, _op, fn, _attributes) {
33
- return fn();
34
- },
35
- async startSpanAsync(_name, _op, fn, _attributes) {
36
- return fn();
37
- },
38
- };
39
- /** No-op analytics — silently discards all analytics calls */
40
- export const noopAnalytics = {
41
- capture() { },
42
- };
43
- /** Browser-native online status provider */
44
- export const browserOnlineStatus = {
45
- isOnline() {
46
- // Only `navigator.onLine === false` is the MDN-reliable "definitely offline"
47
- // signal. Don't use `!navigator.onLine`: Node 18+ exposes a global
48
- // `navigator` whose `onLine` is `undefined`, which `!` would read as offline —
49
- // wedging every Node/server client (agents, worker, MCP) into a false offline.
50
- return !(typeof navigator !== 'undefined' && navigator.onLine === false);
51
- },
52
- };
53
- /** Session error detector — delegates to AbloSessionError so detection is
54
- * code-aware (only genuine session/JWT expiry counts), not a blunt 401/403. */
55
- export const defaultSessionErrorDetector = {
56
- isSessionError(error) {
57
- if (error && typeof error === 'object' && 'isSessionError' in error) {
58
- return error.isSessionError;
59
- }
60
- return false;
61
- },
62
- isSessionErrorResponse(status, body) {
63
- return AbloSessionError.isSessionErrorResponse(status, body);
64
- },
65
- };
66
- /**
67
- * Fallback config used when the context is read before
68
- * `createSyncEngine(...)` has initialized it (tests, early-boot code
69
- * paths). An empty `modelCreatePriority` means every model falls through
70
- * to `defaultCreatePriority`, so ordering is flat — fine for tests that
71
- * never exercise FK ordering; consumers who do rely on it should finish
72
- * wiring the engine before the first `create()` fires.
73
- */
74
- export const emptyConfig = {
75
- modelCreatePriority: new Map(),
76
- defaultCreatePriority: 40,
77
- defaultNonCreatePriority: 50,
78
- essentialFields: {},
79
- classNameFallbackMap: {},
80
- };
@@ -1,551 +0,0 @@
1
- /**
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 MutationQueue} that delivers writes
8
- * over the network.
9
- */
10
- import { InstanceCache } from './InstanceCache.js';
11
- import { Model } from './Model.js';
12
- import { EventEmitter } from 'events';
13
- import { MutationQueue } from './transactions/mutations/MutationQueue.js';
14
- import { type CommitLatencySample } from './transactions/mutations/commitLatency.js';
15
- import { type UnconfirmedWritesMetrics } from './transactions/mutations/UnconfirmedWrites.js';
16
- import type { Database } from './Database.js';
17
- import type { WriteOptions } from './interfaces/index.js';
18
- import { LogPosition } from './transaction/logPosition.js';
19
- import type { DurableWriteStore } from './transactions/mutations/durableWriteStore.js';
20
- interface SyncObserver {
21
- onSync?: (event: SyncEvent) => void;
22
- }
23
- interface SyncEvent {
24
- type: 'create' | 'update' | 'delete' | 'archive' | 'rollback';
25
- modelType: string;
26
- model?: Model;
27
- modelId?: string;
28
- transactionType?: string;
29
- }
30
- interface SyncState {
31
- connectionState: 'connected' | 'disconnected' | 'connecting';
32
- pendingMutations: number;
33
- lastSyncAt?: Date;
34
- error?: Error;
35
- }
36
- export interface RehydrationStats {
37
- added: number;
38
- updated: number;
39
- removed: number;
40
- skipped: number;
41
- healed: number;
42
- elapsedMs: number;
43
- }
44
- export declare class SyncClient extends EventEmitter {
45
- private objectPool;
46
- private database;
47
- private get mutationExecutor();
48
- private networkMonitor;
49
- private observers;
50
- private userId;
51
- private organizationId;
52
- private pendingMutations;
53
- private readonly stagedMutationIds;
54
- private pendingJournalBatch;
55
- private journalFlushScheduled;
56
- private readonly commitOutboxNamespace;
57
- /**
58
- * Tracks the ids of transactions the client has applied optimistically but
59
- * the server has not yet confirmed. When a delta arrives, the receive path
60
- * consults this set to recognize the echo of the client's own mutation and
61
- * skip the now-redundant pool update; the IndexedDB write still runs,
62
- * because the delta is the authoritative version of the row. Without this
63
- * discriminator, an optimistically applied delete followed by a
64
- * server-confirmed create echo would resurrect the row for the window
65
- * between the two confirmations.
66
- *
67
- * The set is bounded with first-in-first-out eviction, and
68
- * {@link SyncClient.getEchoMetrics} exposes its counters.
69
- */
70
- private readonly echoTracker;
71
- private connectionState;
72
- private isDisposed;
73
- /**
74
- * The client's position in the global delta order, held as the single
75
- * canonical {@link LogPosition} instance. The store advances `applied` and
76
- * `persisted` as deltas land, the queue advances `acked` on commit
77
- * responses, and snapshots and claims read `readFloor`.
78
- */
79
- readonly position: LogPosition;
80
- constructor(objectPool: InstanceCache, database: Database, commitOutbox?: DurableWriteStore, commitOutboxNamespace?: string);
81
- /**
82
- * Setup network monitoring handlers
83
- */
84
- private setupNetworkMonitoring;
85
- /**
86
- * Handle transaction rollback. Two distinct shapes flow through this
87
- * event:
88
- *
89
- * 1. **Server-rejected rollback** (`reason === 'permanent_error'`,
90
- * `'max_retries_exhausted'`, `'conflict_server_wins'`) — the
91
- * optimistic state is wrong, the row exists, restore previous
92
- * state and notify the UI.
93
- *
94
- * 2. **Local-cancellation cleanup** (`reason === 'model_cancelled'`,
95
- * `'cascade_parent_deleted'`) — the user deleted this model (or
96
- * its parent), so a pending UPDATE on it gets cancelled. There's
97
- * nothing to restore (the model is doomed) and no UI notification
98
- * needed (the delete itself already triggered re-renders). Just
99
- * discard the optimistic state silently.
100
- *
101
- * Treating both paths the same caused the deletion-flicker bug: every
102
- * cancelled update on a multi-child record fired a per-model observer
103
- * event and a `[SyncClient.rollback]` warn, producing N renders and N
104
- * spam log lines for one user-initiated delete.
105
- */
106
- private setupTransactionRollbackHandling;
107
- /**
108
- * Forward reconciliation requests from the {@link MutationQueue} to the
109
- * sync layer. When delta confirmation times out, the queue emits
110
- * `reconciliation:needed` instead of rolling back, so optimistic state the
111
- * server may already have committed is never destroyed.
112
- */
113
- private setupReconciliationForwarding;
114
- /**
115
- * Persist unconfirmed transactions to IndexedDB. When delta-confirmation
116
- * retries are exhausted, the transaction is cached so it survives a tab
117
- * close. On the next session, a WebSocket reconnect and delta catch-up
118
- * deliver the missing deltas and confirm the transaction.
119
- */
120
- private setupAwaitingTransactionPersistence;
121
- /** Persist an unconfirmed transaction to IndexedDB (never rejects — failures are captured). */
122
- private persistAwaitingTransaction;
123
- /** Drop the persisted awaiting-row once confirmed (never rejects). */
124
- private removeAwaitingTransaction;
125
- /**
126
- * Initialize sync client with authentication
127
- */
128
- initialize(userId: string, organizationId: string): Promise<void>;
129
- /**
130
- * The organization this client writes under (set by `initialize`).
131
- * Read by the model proxy so `create()` defaults `organizationId` the
132
- * same way the mutator path does — `null` until identity is wired.
133
- */
134
- getOrganizationId(): string | null;
135
- /**
136
- * Self-healing helper for individual model records.
137
- *
138
- * Two registry-driven repair passes run on every row hydrated from
139
- * IndexedDB or merged from a delta:
140
- *
141
- * 1. **Auto-fill** — for each `autoFill` rule the consumer's schema
142
- * declares on this model, copy the corresponding identity value
143
- * (`organizationId` / `userId`) onto the row when it's missing.
144
- * Repairs rows from a past version that didn't write the field.
145
- *
146
- * 2. **Required-field gate** — if the row is missing any field listed
147
- * in the model's `requiredFields`, return `null` so the caller
148
- * skips this record. Used for FK columns whose absence renders the
149
- * row unrecoverable (e.g. a Block with no sectionId).
150
- *
151
- * The engine itself is product-neutral: model identity (which fields
152
- * to back-fill, which absences are fatal) lives entirely in the
153
- * consumer schema.
154
- */
155
- healModelRecord(modelType: string, data: Record<string, unknown>): {
156
- data: Record<string, unknown>;
157
- healed: boolean;
158
- } | null;
159
- /**
160
- * Hydrate InstanceCache with data from Database
161
- * Called after bootstrap is complete
162
- */
163
- hydrateFromDatabase(): Promise<void>;
164
- /**
165
- * Re-hydrate InstanceCache from IndexedDB when the pool already has data.
166
- *
167
- * Unlike hydrateFromDatabase() (which uses addBatch and skips existing IDs),
168
- * this method properly:
169
- * 1. Upserts models — updates existing models in-place, adds new ones
170
- * 2. Removes ghosts — deletes models from the pool that no longer exist in IndexedDB
171
- *
172
- * Used by background bootstrap, network recovery, and server-triggered re-bootstrap.
173
- */
174
- rehydrateFromDatabase(): Promise<RehydrationStats>;
175
- /**
176
- * Apply a mutation to a model optimistically and queue it for server sync.
177
- * IndexedDB is updated only once the server confirms the change with a delta
178
- * packet.
179
- *
180
- * A model's changes are captured before the pool action runs, because a pool
181
- * operation such as an upsert can clear the model's local change set;
182
- * capturing first ensures those changes are never lost. The captured set is
183
- * frozen and handed to {@link queueMutation}.
184
- */
185
- private mutate;
186
- private pendingChangedTypes;
187
- private markModelChanged;
188
- /**
189
- * Capture model changes immutably BEFORE any pool operations
190
- * This prevents the fragile pattern of reading changes after state modification
191
- */
192
- private captureModelChanges;
193
- /** Add new model (CREATE) - works offline */
194
- add(model: Model, options?: WriteOptions): void;
195
- /** Update existing model (UPDATE) - works offline */
196
- update(model: Model, options?: WriteOptions): void;
197
- /**
198
- * Update existing model with pre-computed changes.
199
- * Used by saveManyOptimized when incoming models have empty change-tracking
200
- * (e.g. freshly constructed cell models from a bulk document decomposition).
201
- */
202
- updateWithChanges(model: Model, changes?: Record<string, unknown>): void;
203
- /** Expose the GraphQL client for atomic mutations (e.g., createSectionWithBlocks).
204
- * Used by SyncedStore for operations that bypass the transaction queue
205
- * but still need optimistic pool updates at the sync layer. */
206
- get gql(): import("./interfaces/index.js").MutationExecutor;
207
- /** Delete model (DELETE) - works offline */
208
- delete(model: Model, options?: WriteOptions): void;
209
- /**
210
- * Clear all pending mutations for a specific model
211
- * Called before deletion to prevent "record not found" errors on the server
212
- */
213
- private clearPendingMutationsForModel;
214
- /**
215
- * Upload a file and create its attachment record. The upload runs through
216
- * the {@link MutationQueue}, and a model is built from the server's
217
- * response and added to the pool.
218
- */
219
- uploadFile(file: File, options: {
220
- id: string;
221
- attachableType: string;
222
- attachableId: string;
223
- metadata?: Record<string, unknown>;
224
- }): Promise<Model | null>;
225
- /**
226
- * Batch upload files — single GraphQL call + parallel S3 PUTs.
227
- *
228
- * Returns the raw `Model[]` built by the object pool (typename is
229
- * determined by the payload the server returns — currently always
230
- * `Attachment`). The SDK has no knowledge of app-specific model classes,
231
- * so it cannot honestly claim a narrower return type; consumers that
232
- * need an `Attachment[]` project through their own typed accessor
233
- * (e.g. `store.query.attachments.findMany({ where: { id: IN ids } })`)
234
- * after the upload resolves.
235
- */
236
- batchUploadFiles(files: File[], options: {
237
- ids: string[];
238
- attachableType: string;
239
- attachableId: string;
240
- metadata?: Record<string, unknown>;
241
- }): Promise<Model[]>;
242
- /** Archive model (ARCHIVE) - works offline */
243
- archive(model: Model): void;
244
- /**
245
- * Append a mutation to the pending queue and schedule its sync work.
246
- *
247
- * IndexedDB persistence and the server push are deferred to a microtask, so
248
- * many pushes within the same tick collapse into a single serialization and
249
- * a single process call. Without the deferral, queueing a hundred mutations
250
- * at once — a large paste, a document import, bulk row creation — would
251
- * reserialize the whole growing queue a hundred times, an O(N²) cost in
252
- * `model.toJSON()`.
253
- *
254
- * @param mutation.capturedChanges - Pre-captured, frozen changes, used to
255
- * avoid re-reading a model after pool operations that might clear them.
256
- */
257
- private queueMutation;
258
- private scheduleJournalFlush;
259
- private flushPendingMutationJournal;
260
- private syncScheduled;
261
- private scheduleSync;
262
- private pendingMutationRecord;
263
- private persistPendingMutation;
264
- /**
265
- * Restore the mutation queue from IndexedDB.
266
- *
267
- * The persisted record was written by an earlier session, possibly by an
268
- * older build of the SDK, so each entry is validated as it is replayed:
269
- * corrupt entries are dropped and logged at debug level, and a failure is
270
- * never swallowed silently, because the survival of offline writes must be
271
- * observable.
272
- */
273
- private restoreMutationQueue;
274
- /**
275
- * Process pending mutations - can be called by SyncedStore when online
276
- *
277
- * Best Practice: Only sync models that still exist locally (local-first principle)
278
- * - If a model was deleted locally → skip any pending updates/creates for it
279
- * - This prevents "record not found" errors from fast copy-paste-delete workflows
280
- */
281
- processPendingMutations(): Promise<void>;
282
- /**
283
- * Stage mutation to MutationQueue - mutations in same tick are batched via microtask
284
- *
285
- * @param mutation.capturedChanges - Pre-captured changes to use instead of re-reading from model
286
- */
287
- private stageMutation;
288
- /**
289
- * Resolve a conflict between the local model and incoming server data,
290
- * called while processing deltas from the WebSocket. Certain server states,
291
- * such as deletions and deactivations, always take precedence even when the
292
- * local model has unsynced changes, so the two sides stay consistent.
293
- */
294
- resolveConflicts(localModel: Model, serverData: Record<string, unknown>): Model;
295
- /**
296
- * Extract the critical state fields from server data. These are the states
297
- * that must be honored even when the local model has unsynced changes. The
298
- * conflict resolver reads exactly these fields and no others.
299
- */
300
- private extractCriticalState;
301
- /**
302
- * Check if critical state changes exist that require forcing server state
303
- */
304
- private hasCriticalStateChange;
305
- /**
306
- * Handle network reconnection
307
- */
308
- private handleReconnection;
309
- /**
310
- * Handle network disconnection
311
- */
312
- private handleDisconnection;
313
- /**
314
- * Get current sync state
315
- */
316
- getState(): SyncState;
317
- /**
318
- * Set connection state
319
- */
320
- private setConnectionState;
321
- /**
322
- * Subscribe to events with disposer pattern
323
- */
324
- subscribe(event: string, handler: (data?: unknown) => void): () => void;
325
- /**
326
- * Add observer for sync events
327
- */
328
- addObserver(observer: SyncObserver): void;
329
- /**
330
- * Remove observer
331
- */
332
- removeObserver(observer: SyncObserver): void;
333
- /**
334
- * Notify all observers
335
- */
336
- private notifyObservers;
337
- /**
338
- * Disconnect from sync
339
- */
340
- disconnect(): void;
341
- /**
342
- * Mark the sync client as connected
343
- * Called when WebSocket successfully connects (can happen independently of browser online/offline)
344
- */
345
- markConnected(): void;
346
- /**
347
- * Dispose and cleanup
348
- */
349
- dispose(): void;
350
- /**
351
- * Notify the {@link MutationQueue} of an incoming delta so it can confirm
352
- * hosted writes by sync-id threshold and queued forwards by their echoed
353
- * source-batch correlation id.
354
- * @param syncId - The sync id of the received delta.
355
- * @param transactionId - Optional server echo of the originating local write.
356
- * @param correlationId - Opaque batch identity decoded from a source WAL echo.
357
- */
358
- onDeltaReceived(syncId: number, transactionId?: string, correlationId?: string): void;
359
- /**
360
- * Cancel pending transactions for child entities orphaned by a parent's
361
- * deletion. The store calls this when a delete delta arrives for a parent,
362
- * cancelling any queued writes on children that reference it.
363
- *
364
- * @param childModelName - The child model type (for example, `Block`).
365
- * @param foreignKey - The foreign-key property name (for example, `sectionId`).
366
- * @param parentId - The id of the deleted parent.
367
- * @returns The number of transactions cancelled.
368
- */
369
- cancelTransactionsByForeignKey(childModelName: string, foreignKey: string, parentId: string): number;
370
- /**
371
- * Wait for a transaction to be confirmed by its delta echo. Delegates to the
372
- * {@link MutationQueue}, which handles the confirmation timeout.
373
- */
374
- waitForDeltaConfirmation(transactionId: string): Promise<void>;
375
- /**
376
- * Force sync now - process pending mutations
377
- */
378
- syncNow(): Promise<void>;
379
- /**
380
- * Get sync statistics. Return type is inferred from the literal so
381
- * the call site sees the actual shape — `connectionState` narrowed
382
- * to its three states, `objectPoolStats` typed by `InstanceCache.getStats`.
383
- */
384
- getSyncStats(): {
385
- connectionState: 'connected' | 'disconnected' | 'connecting';
386
- pendingMutations: number;
387
- objectPoolStats: ReturnType<InstanceCache['getStats']>;
388
- };
389
- /**
390
- * Get pending transaction count from MutationQueue
391
- * Used by SyncedStore to compute hasUnsyncedChanges
392
- */
393
- getPendingTransactionCount(): number;
394
- /**
395
- * Subscribe to transaction events for sync status tracking
396
- * Returns unsubscribe function
397
- */
398
- onTransactionEvent(event: 'created' | 'completed' | 'failed', callback: () => void): () => void;
399
- /**
400
- * Subscribe to mutation failures with the full payload. Mirrors the
401
- * underlying MutationQueue 'transaction:failed' shape so consumers
402
- * can render typed UI (toast keyed by `AbloError.type`, route-level
403
- * "this entity reverted" boundaries, telemetry).
404
- *
405
- * Distinct from `onTransactionEvent('failed', cb)`, which serves the
406
- * parameterless `pendingChanges` counter and intentionally drops the
407
- * payload. The two coexist: the counter callback stays lightweight, while
408
- * this typed listener drives user-visible surfaces.
409
- */
410
- onMutationFailure(listener: (payload: {
411
- transaction: import('./transactions/mutations/MutationQueue.js').QueuedMutation;
412
- error: Error;
413
- permanent?: boolean;
414
- }) => void): () => void;
415
- /**
416
- * Subscribe to commit round-trip latency, split into the local seal and the
417
- * remote acknowledgement. Fires once per completed commit.
418
- *
419
- * Taps the {@link MutationQueue} emitter for the same reason
420
- * {@link onMutationFailure} does: the commit lifecycle events originate
421
- * there and the SyncClient's own emitter never rebroadcasts them.
422
- */
423
- onCommitLatency(listener: (sample: CommitLatencySample) => void): () => void;
424
- /**
425
- * Subscribe to local transaction creation with the full {@link QueuedMutation}
426
- * payload (`type`, `modelName`, `modelId`, `data`, `previousData`). This is
427
- * the feed the store's local-mutation subscription taps for undo recording.
428
- *
429
- * It subscribes to the {@link MutationQueue}'s emitter directly, since
430
- * that is the only emitter that fires `transaction:created`. The SyncClient's
431
- * own emitter (reached through {@link subscribe}) never rebroadcasts that
432
- * event, so routing undo through `subscribe('transaction:created')` would
433
- * record nothing. {@link onMutationFailure} taps the queue for the same
434
- * reason.
435
- */
436
- onLocalTransaction(listener: (tx: import('./transactions/mutations/MutationQueue.js').QueuedMutation) => void): () => void;
437
- /**
438
- * Wait for the latest in-flight transaction for (modelName, modelId)
439
- * to be confirmed by the server, or reject if it's rolled back.
440
- * Resolves immediately when no transaction is in flight — see
441
- * `MutationQueue.confirmationFor` for the lookup contract.
442
- *
443
- * Distinct from `waitForDeltaConfirmation(transactionId)` which keys
444
- * off a known tx id; this variant is for call sites that hold a
445
- * Model reference but never see the underlying transaction.
446
- */
447
- waitForConfirmation(modelName: string, modelId: string): Promise<void>;
448
- /**
449
- * Get detailed debug info for the sync debug page
450
- */
451
- getDebugInfo(): {
452
- connectionState: "connected" | "disconnected" | "connecting";
453
- pendingMutationsCount: number;
454
- mutationQueue: {
455
- lastSeenSyncId: number;
456
- awaitingDeltaCount: number;
457
- awaitingDeltaTransactions: {
458
- id: string;
459
- type: "update" | "create" | "delete" | "archive" | "unarchive";
460
- modelName: string;
461
- modelId: string;
462
- syncIdNeeded: number | undefined;
463
- createdAt: number;
464
- age: number;
465
- }[];
466
- pendingTransactions: {
467
- id: string;
468
- type: "update" | "create" | "delete" | "archive" | "unarchive";
469
- modelName: string;
470
- modelId: string;
471
- }[];
472
- executingTransactions: {
473
- id: string;
474
- type: "update" | "create" | "delete" | "archive" | "unarchive";
475
- modelName: string;
476
- modelId: string;
477
- }[];
478
- };
479
- };
480
- unassignEntity(entityType: string, entityId: string): Promise<void>;
481
- reassignEntity(entityType: string, entityId: string, assigneeType: string, assigneeId: string, id?: string): Promise<void>;
482
- /**
483
- * Apply a batch of delta results from Database to the InstanceCache.
484
- * Owns: model creation, upsert, remove, archive, conflict resolution.
485
- * Returns: nothing — InstanceCache is updated in place.
486
- */
487
- /**
488
- * Mark a local transaction as optimistically applied. The matching
489
- * server delta (when it arrives with the same `transactionId`) will
490
- * be recognized as an echo and skip the pool mutation. Called
491
- * automatically by `MutationQueue` when a transaction is staged;
492
- * exposed publicly so tests can drive the API directly.
493
- */
494
- markTransactionPending(transactionId: string): void;
495
- /**
496
- * Read echo-detection counters: hits, rollbacks, evictions, and the
497
- * current pending-set size. Surfaced for production observability
498
- * — a sustained `evictions > 0` rate or `rollbacks` spike is a
499
- * health signal worth alerting on.
500
- */
501
- getEchoMetrics(): Readonly<UnconfirmedWritesMetrics>;
502
- /**
503
- * Package-internal accessor for the {@link MutationQueue}. Used by
504
- * `Ablo.commits.create()` to route raw multi-operation envelopes through the
505
- * same retry-on-reconnect lane as the model proxy path, and by tests to
506
- * exercise the queue's interaction with {@link markTransactionPending} on the
507
- * real instance the SyncClient subscribes to. It is not re-exported to SDK
508
- * consumers; `Ablo` is the public surface.
509
- */
510
- getMutationQueue(): MutationQueue;
511
- applyDeltaBatchToPool(dbResults: {
512
- action: string;
513
- modelName: string;
514
- modelId: string;
515
- data?: Record<string, unknown> | null;
516
- /**
517
- * Server-stamped transaction id, echoing the client's commit op
518
- * id. Used by echo detection to recognize "this is the
519
- * confirmation of a mutation I've already applied locally."
520
- * Optional because system-emitted deltas (sync_group changes,
521
- * schema-derived deltas, etc.) don't have a client transaction.
522
- */
523
- transactionId?: string;
524
- }[], enrichRelations: (modelName: string, data: Record<string, unknown>) => Record<string, unknown>): void;
525
- /**
526
- * Apply bootstrap data to the InstanceCache with ghost removal.
527
- * Owns: model creation, batch upsert, ghost detection + removal.
528
- */
529
- applyBootstrapDataToPool(bootstrapData: {
530
- models?: Record<string, unknown[]>;
531
- failedModels?: string[];
532
- }, protectedIds?: ReadonlySet<string>, options?: {
533
- /**
534
- * Scoped backfill for the hydrate-on-enter path: the snapshot covers only
535
- * the groups just entered, not the whole model type. Two behaviors change
536
- * so the subset cannot corrupt the pool. First, the upsert is
537
- * version-guarded ({@link InstanceCache.upsertIfNewer}) so a concurrent live
538
- * delta is not clobbered back to the snapshot version. Second, ghost
539
- * removal is skipped, because a subset snapshot must never evict rows of
540
- * the same type that belong to other, unhydrated groups.
541
- */
542
- scoped?: boolean;
543
- }): {
544
- added: number;
545
- updated: number;
546
- removed: number;
547
- skipped: number;
548
- healed: number;
549
- };
550
- }
551
- export {};