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