@abloatai/ablo 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +104 -88
  4. package/dist/BaseSyncedStore.d.ts +140 -266
  5. package/dist/BaseSyncedStore.js +338 -739
  6. package/dist/Database.d.ts +62 -77
  7. package/dist/Database.js +106 -127
  8. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  9. package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
  10. package/dist/LazyReferenceCollection.d.ts +11 -15
  11. package/dist/LazyReferenceCollection.js +16 -15
  12. package/dist/Model.d.ts +37 -52
  13. package/dist/Model.js +52 -69
  14. package/dist/ModelRegistry.d.ts +46 -25
  15. package/dist/ModelRegistry.js +32 -30
  16. package/dist/NetworkMonitor.d.ts +5 -6
  17. package/dist/NetworkMonitor.js +6 -7
  18. package/dist/SyncClient.d.ts +119 -109
  19. package/dist/SyncClient.js +303 -224
  20. package/dist/SyncEngineContext.d.ts +1 -3
  21. package/dist/SyncEngineContext.js +1 -2
  22. package/dist/adapters/alwaysOnline.d.ts +6 -8
  23. package/dist/adapters/alwaysOnline.js +6 -8
  24. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  25. package/dist/adapters/inMemoryStorage.js +9 -9
  26. package/dist/agent/Agent.d.ts +39 -31
  27. package/dist/agent/Agent.js +35 -23
  28. package/dist/agent/index.d.ts +4 -4
  29. package/dist/agent/index.js +5 -5
  30. package/dist/agent/session.d.ts +47 -44
  31. package/dist/agent/session.js +37 -48
  32. package/dist/agent/types.d.ts +26 -31
  33. package/dist/agent/types.js +6 -7
  34. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  35. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  36. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  37. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
  38. package/dist/ai-sdk/index.d.ts +25 -22
  39. package/dist/ai-sdk/index.js +25 -22
  40. package/dist/ai-sdk/wrap.d.ts +7 -8
  41. package/dist/ai-sdk/wrap.js +2 -2
  42. package/dist/auth/credentialPolicy.d.ts +74 -71
  43. package/dist/auth/credentialPolicy.js +51 -56
  44. package/dist/auth/credentialSource.d.ts +7 -18
  45. package/dist/auth/credentialSource.js +10 -18
  46. package/dist/auth/index.d.ts +59 -58
  47. package/dist/auth/index.js +34 -40
  48. package/dist/auth/schemas.d.ts +5 -4
  49. package/dist/auth/schemas.js +5 -4
  50. package/dist/batching/index.d.ts +19 -21
  51. package/dist/batching/index.js +14 -17
  52. package/dist/cli.cjs +483 -369
  53. package/dist/client/Ablo.d.ts +107 -836
  54. package/dist/client/Ablo.js +174 -833
  55. package/dist/client/ApiClient.d.ts +44 -20
  56. package/dist/client/ApiClient.js +193 -44
  57. package/dist/client/auth.d.ts +51 -60
  58. package/dist/client/auth.js +137 -110
  59. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  60. package/dist/client/claimHeartbeatLoop.js +88 -0
  61. package/dist/client/consoleLogger.d.ts +35 -0
  62. package/dist/client/consoleLogger.js +44 -0
  63. package/dist/client/createInternalComponents.d.ts +14 -17
  64. package/dist/client/createInternalComponents.js +26 -31
  65. package/dist/client/createModelProxy.d.ts +130 -120
  66. package/dist/client/createModelProxy.js +158 -124
  67. package/dist/client/credentialEndpoint.d.ts +61 -0
  68. package/dist/client/credentialEndpoint.js +86 -0
  69. package/dist/client/functionalUpdate.d.ts +29 -27
  70. package/dist/client/functionalUpdate.js +21 -21
  71. package/dist/client/hostedEndpoints.d.ts +21 -0
  72. package/dist/client/hostedEndpoints.js +21 -0
  73. package/dist/client/httpClient.d.ts +58 -54
  74. package/dist/client/httpClient.js +29 -31
  75. package/dist/client/identity.d.ts +15 -20
  76. package/dist/client/identity.js +49 -59
  77. package/dist/client/modelRegistration.d.ts +10 -0
  78. package/dist/client/modelRegistration.js +301 -0
  79. package/dist/client/options.d.ts +373 -0
  80. package/dist/client/options.js +6 -0
  81. package/dist/client/registerDataSource.d.ts +9 -9
  82. package/dist/client/registerDataSource.js +15 -16
  83. package/dist/client/resourceTypes.d.ts +333 -0
  84. package/dist/client/resourceTypes.js +7 -0
  85. package/dist/client/schemaConfig.d.ts +44 -0
  86. package/dist/client/schemaConfig.js +176 -0
  87. package/dist/client/sessionMint.d.ts +17 -13
  88. package/dist/client/sessionMint.js +26 -31
  89. package/dist/client/validateAbloOptions.d.ts +12 -14
  90. package/dist/client/validateAbloOptions.js +9 -10
  91. package/dist/client/writeOptionsSchema.d.ts +18 -16
  92. package/dist/client/writeOptionsSchema.js +23 -20
  93. package/dist/client/wsMutationExecutor.d.ts +28 -0
  94. package/dist/client/wsMutationExecutor.js +71 -0
  95. package/dist/context.d.ts +6 -4
  96. package/dist/context.js +6 -7
  97. package/dist/coordination/index.d.ts +13 -4
  98. package/dist/coordination/index.js +29 -4
  99. package/dist/coordination/schema.d.ts +176 -128
  100. package/dist/coordination/schema.js +197 -133
  101. package/dist/coordination/trace.d.ts +9 -11
  102. package/dist/coordination/trace.js +13 -15
  103. package/dist/core/DatabaseManager.d.ts +5 -8
  104. package/dist/core/DatabaseManager.js +38 -40
  105. package/dist/core/QueryProcessor.d.ts +7 -9
  106. package/dist/core/QueryProcessor.js +27 -34
  107. package/dist/core/QueryView.d.ts +17 -5
  108. package/dist/core/QueryView.js +6 -7
  109. package/dist/core/StoreManager.d.ts +14 -16
  110. package/dist/core/StoreManager.js +26 -25
  111. package/dist/core/ViewRegistry.d.ts +5 -5
  112. package/dist/core/ViewRegistry.js +4 -4
  113. package/dist/core/index.d.ts +18 -13
  114. package/dist/core/index.js +32 -26
  115. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  116. package/dist/core/openIDBWithTimeout.js +57 -54
  117. package/dist/core/queryUtils.d.ts +45 -0
  118. package/dist/core/queryUtils.js +69 -0
  119. package/dist/core/storeContract.d.ts +145 -0
  120. package/dist/core/storeContract.js +12 -0
  121. package/dist/environment.d.ts +28 -0
  122. package/dist/environment.js +21 -0
  123. package/dist/errorCodes.d.ts +118 -101
  124. package/dist/errorCodes.js +277 -260
  125. package/dist/errors.d.ts +170 -165
  126. package/dist/errors.js +161 -151
  127. package/dist/index.d.ts +30 -27
  128. package/dist/index.js +90 -82
  129. package/dist/interfaces/index.d.ts +108 -133
  130. package/dist/interfaces/index.js +5 -4
  131. package/dist/keys/index.d.ts +27 -29
  132. package/dist/keys/index.js +59 -49
  133. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  134. package/dist/mutators/RecordingTransaction.js +31 -37
  135. package/dist/mutators/Transaction.d.ts +18 -26
  136. package/dist/mutators/Transaction.js +14 -20
  137. package/dist/mutators/UndoManager.d.ts +122 -131
  138. package/dist/mutators/UndoManager.js +149 -155
  139. package/dist/mutators/defineMutators.d.ts +24 -37
  140. package/dist/mutators/defineMutators.js +14 -20
  141. package/dist/mutators/inverseOp.d.ts +12 -15
  142. package/dist/mutators/inverseOp.js +12 -15
  143. package/dist/mutators/mutateActions.d.ts +10 -9
  144. package/dist/mutators/mutateActions.js +1 -1
  145. package/dist/mutators/readerActions.d.ts +9 -8
  146. package/dist/mutators/readerActions.js +2 -2
  147. package/dist/mutators/undoApply.d.ts +31 -27
  148. package/dist/mutators/undoApply.js +26 -24
  149. package/dist/policy/index.d.ts +5 -3
  150. package/dist/policy/index.js +5 -3
  151. package/dist/policy/types.d.ts +105 -101
  152. package/dist/policy/types.js +67 -66
  153. package/dist/query/client.d.ts +32 -16
  154. package/dist/query/client.js +103 -72
  155. package/dist/query/types.d.ts +37 -60
  156. package/dist/query/types.js +13 -33
  157. package/dist/react/AbloProvider.d.ts +7 -11
  158. package/dist/react/AbloProvider.js +24 -17
  159. package/dist/react/context.d.ts +27 -146
  160. package/dist/react/context.js +9 -10
  161. package/dist/react/index.d.ts +41 -42
  162. package/dist/react/index.js +37 -38
  163. package/dist/react/internalContext.d.ts +17 -19
  164. package/dist/react/useAblo.d.ts +23 -22
  165. package/dist/react/useAblo.js +17 -15
  166. package/dist/react/useCurrentUserId.d.ts +8 -7
  167. package/dist/react/useCurrentUserId.js +8 -7
  168. package/dist/react/useErrorListener.d.ts +7 -7
  169. package/dist/react/useErrorListener.js +11 -12
  170. package/dist/react/useMutationFailureListener.d.ts +8 -8
  171. package/dist/react/useMutationFailureListener.js +9 -9
  172. package/dist/react/useMutators.d.ts +11 -11
  173. package/dist/react/useMutators.js +10 -4
  174. package/dist/react/useReactive.js +2 -3
  175. package/dist/react/useSyncStatus.d.ts +4 -6
  176. package/dist/react/useUndoScope.d.ts +7 -9
  177. package/dist/react/useUndoScope.js +3 -3
  178. package/dist/schema/coordination.d.ts +21 -25
  179. package/dist/schema/coordination.js +21 -25
  180. package/dist/schema/ddl.d.ts +43 -39
  181. package/dist/schema/ddl.js +75 -68
  182. package/dist/schema/ddlLock.d.ts +35 -0
  183. package/dist/schema/ddlLock.js +46 -0
  184. package/dist/schema/diff.d.ts +99 -61
  185. package/dist/schema/diff.js +43 -34
  186. package/dist/schema/field.d.ts +37 -42
  187. package/dist/schema/field.js +36 -49
  188. package/dist/schema/generate.d.ts +12 -12
  189. package/dist/schema/generate.js +12 -12
  190. package/dist/schema/index.d.ts +5 -4
  191. package/dist/schema/index.js +29 -21
  192. package/dist/schema/model.d.ts +121 -146
  193. package/dist/schema/model.js +24 -35
  194. package/dist/schema/openapi.d.ts +10 -9
  195. package/dist/schema/openapi.js +7 -1
  196. package/dist/schema/queries.d.ts +30 -32
  197. package/dist/schema/queries.js +24 -25
  198. package/dist/schema/relation.d.ts +89 -99
  199. package/dist/schema/relation.js +13 -13
  200. package/dist/schema/residency.d.ts +38 -0
  201. package/dist/schema/residency.js +30 -0
  202. package/dist/schema/roles.d.ts +45 -27
  203. package/dist/schema/roles.js +52 -21
  204. package/dist/schema/schema.d.ts +36 -45
  205. package/dist/schema/schema.js +42 -39
  206. package/dist/schema/select.d.ts +13 -13
  207. package/dist/schema/select.js +13 -13
  208. package/dist/schema/serialize.d.ts +36 -39
  209. package/dist/schema/serialize.js +27 -31
  210. package/dist/schema/sugar.d.ts +17 -32
  211. package/dist/schema/sugar.js +14 -29
  212. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
  213. package/dist/schema/syncDeltaRow.js +89 -0
  214. package/dist/schema/tenancy.d.ts +44 -46
  215. package/dist/schema/tenancy.js +46 -48
  216. package/dist/server/adapter.d.ts +58 -58
  217. package/dist/server/adapter.js +13 -14
  218. package/dist/server/commit.d.ts +60 -64
  219. package/dist/server/index.d.ts +9 -10
  220. package/dist/server/index.js +1 -1
  221. package/dist/server/readConfig.d.ts +70 -0
  222. package/dist/server/readConfig.js +8 -0
  223. package/dist/server/storageMode.d.ts +23 -0
  224. package/dist/server/storageMode.js +17 -0
  225. package/dist/source/adapter.d.ts +31 -26
  226. package/dist/source/adapter.js +10 -10
  227. package/dist/source/adapters/drizzle.d.ts +28 -23
  228. package/dist/source/adapters/drizzle.js +34 -28
  229. package/dist/source/adapters/kysely.d.ts +27 -25
  230. package/dist/source/adapters/kysely.js +28 -26
  231. package/dist/source/adapters/memory.d.ts +8 -7
  232. package/dist/source/adapters/memory.js +10 -9
  233. package/dist/source/adapters/prisma.d.ts +13 -12
  234. package/dist/source/adapters/prisma.js +27 -29
  235. package/dist/source/conformance.d.ts +18 -11
  236. package/dist/source/conformance.js +27 -19
  237. package/dist/source/connector.d.ts +31 -32
  238. package/dist/source/connector.js +30 -28
  239. package/dist/source/connectorProtocol.d.ts +160 -0
  240. package/dist/source/connectorProtocol.js +162 -0
  241. package/dist/source/contract.d.ts +26 -27
  242. package/dist/source/contract.js +28 -29
  243. package/dist/source/factory.d.ts +94 -0
  244. package/dist/source/factory.js +268 -0
  245. package/dist/source/index.d.ts +10 -462
  246. package/dist/source/index.js +17 -421
  247. package/dist/source/migrations.d.ts +9 -9
  248. package/dist/source/migrations.js +9 -9
  249. package/dist/source/next.d.ts +10 -11
  250. package/dist/source/next.js +7 -8
  251. package/dist/source/pushQueue.d.ts +70 -48
  252. package/dist/source/pushQueue.js +36 -29
  253. package/dist/source/signing.d.ts +88 -0
  254. package/dist/source/signing.js +159 -0
  255. package/dist/source/types.d.ts +351 -0
  256. package/dist/source/types.js +43 -0
  257. package/dist/stores/ObjectStore.d.ts +11 -12
  258. package/dist/stores/ObjectStore.js +34 -35
  259. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  260. package/dist/stores/SyncActionStore.d.ts +8 -12
  261. package/dist/stores/SyncActionStore.js +77 -46
  262. package/dist/surface.d.ts +28 -21
  263. package/dist/surface.js +28 -20
  264. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
  265. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
  266. package/dist/sync/ConnectionManager.d.ts +47 -50
  267. package/dist/sync/ConnectionManager.js +74 -70
  268. package/dist/sync/NetworkProbe.d.ts +27 -31
  269. package/dist/sync/NetworkProbe.js +67 -72
  270. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
  271. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
  272. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
  273. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
  274. package/dist/sync/SyncWebSocket.d.ts +175 -250
  275. package/dist/sync/SyncWebSocket.js +431 -769
  276. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  277. package/dist/sync/awaitClaimGrant.js +38 -30
  278. package/dist/sync/bootstrapApply.d.ts +70 -0
  279. package/dist/sync/bootstrapApply.js +73 -0
  280. package/dist/sync/commitFrames.d.ts +44 -0
  281. package/dist/sync/commitFrames.js +94 -0
  282. package/dist/sync/createClaimStream.d.ts +23 -22
  283. package/dist/sync/createClaimStream.js +108 -25
  284. package/dist/sync/createPresenceStream.d.ts +19 -18
  285. package/dist/sync/createPresenceStream.js +25 -26
  286. package/dist/sync/createSnapshot.d.ts +13 -17
  287. package/dist/sync/createSnapshot.js +20 -26
  288. package/dist/sync/credentialLifecycle.d.ts +175 -0
  289. package/dist/sync/credentialLifecycle.js +322 -0
  290. package/dist/sync/deltaPipeline.d.ts +113 -0
  291. package/dist/sync/deltaPipeline.js +261 -0
  292. package/dist/sync/groupChange.d.ts +113 -0
  293. package/dist/sync/groupChange.js +242 -0
  294. package/dist/sync/heartbeat.d.ts +63 -0
  295. package/dist/sync/heartbeat.js +91 -0
  296. package/dist/sync/participants.d.ts +27 -27
  297. package/dist/sync/schemas.d.ts +3 -2
  298. package/dist/sync/schemas.js +14 -10
  299. package/dist/sync/syncCursor.d.ts +40 -0
  300. package/dist/sync/syncCursor.js +55 -0
  301. package/dist/sync/syncPlan.d.ts +54 -0
  302. package/dist/sync/syncPlan.js +50 -0
  303. package/dist/sync/syncPosition.d.ts +54 -49
  304. package/dist/sync/syncPosition.js +57 -52
  305. package/dist/sync/wsFrameHandlers.d.ts +116 -0
  306. package/dist/sync/wsFrameHandlers.js +374 -0
  307. package/dist/testing/fixtures/bootstrap.d.ts +21 -17
  308. package/dist/testing/fixtures/bootstrap.js +12 -6
  309. package/dist/testing/fixtures/deltas.d.ts +31 -34
  310. package/dist/testing/fixtures/deltas.js +30 -33
  311. package/dist/testing/fixtures/models.d.ts +11 -10
  312. package/dist/testing/fixtures/models.js +12 -10
  313. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  314. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  315. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
  316. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
  317. package/dist/testing/helpers/wait.d.ts +13 -8
  318. package/dist/testing/helpers/wait.js +13 -8
  319. package/dist/testing/index.d.ts +4 -4
  320. package/dist/testing/index.js +3 -3
  321. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  322. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  323. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  324. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  325. package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
  326. package/dist/testing/mocks/MockSyncContext.js +16 -45
  327. package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
  328. package/dist/testing/mocks/MockSyncStore.js +11 -11
  329. package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
  330. package/dist/testing/mocks/MockWebSocket.js +22 -21
  331. package/dist/transactions/TransactionQueue.d.ts +190 -221
  332. package/dist/transactions/TransactionQueue.js +424 -822
  333. package/dist/transactions/TransactionStore.d.ts +20 -0
  334. package/dist/transactions/TransactionStore.js +53 -0
  335. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  336. package/dist/transactions/UnconfirmedWrites.js +104 -0
  337. package/dist/transactions/coalesceRules.d.ts +58 -0
  338. package/dist/transactions/coalesceRules.js +140 -0
  339. package/dist/transactions/commitPayload.d.ts +130 -0
  340. package/dist/transactions/commitPayload.js +143 -0
  341. package/dist/transactions/deltaConfirmation.d.ts +58 -0
  342. package/dist/transactions/deltaConfirmation.js +215 -0
  343. package/dist/transactions/optimisticApply.d.ts +49 -0
  344. package/dist/transactions/optimisticApply.js +65 -0
  345. package/dist/transactions/replayValidation.d.ts +99 -0
  346. package/dist/transactions/replayValidation.js +111 -0
  347. package/dist/types/global.d.ts +46 -41
  348. package/dist/types/global.js +20 -19
  349. package/dist/types/index.d.ts +74 -80
  350. package/dist/types/index.js +22 -27
  351. package/dist/types/modelData.d.ts +10 -0
  352. package/dist/types/modelData.js +9 -0
  353. package/dist/types/participant.d.ts +20 -0
  354. package/dist/types/participant.js +10 -0
  355. package/dist/types/streams.d.ts +216 -209
  356. package/dist/types/streams.js +7 -7
  357. package/dist/utils/asyncIterator.d.ts +25 -32
  358. package/dist/utils/asyncIterator.js +25 -32
  359. package/dist/utils/duration.d.ts +12 -15
  360. package/dist/utils/duration.js +12 -15
  361. package/dist/utils/mobxSetup.d.ts +53 -0
  362. package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
  363. package/dist/webhooks/events.d.ts +21 -16
  364. package/dist/webhooks/events.js +10 -8
  365. package/dist/webhooks/index.d.ts +5 -7
  366. package/dist/webhooks/index.js +5 -7
  367. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  368. package/dist/wire/delta.js +114 -0
  369. package/dist/wire/errorEnvelope.d.ts +35 -27
  370. package/dist/wire/errorEnvelope.js +38 -32
  371. package/dist/wire/frames.d.ts +150 -67
  372. package/dist/wire/frames.js +48 -1
  373. package/dist/wire/index.d.ts +18 -13
  374. package/dist/wire/index.js +36 -13
  375. package/dist/wire/listEnvelope.d.ts +16 -23
  376. package/dist/wire/listEnvelope.js +7 -6
  377. package/dist/wire/protocol.d.ts +38 -0
  378. package/dist/wire/protocol.js +38 -0
  379. package/dist/wire/protocolVersion.d.ts +60 -0
  380. package/dist/wire/protocolVersion.js +67 -0
  381. package/docs/api-keys.md +4 -3
  382. package/docs/coordination.md +59 -0
  383. package/docs/examples/existing-python-backend.md +3 -3
  384. package/docs/identity.md +4 -4
  385. package/docs/integration-guide.md +1 -1
  386. package/docs/react.md +1 -1
  387. package/docs/sessions.md +5 -7
  388. package/package.json +24 -21
  389. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  390. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  391. package/dist/client/index.d.ts +0 -36
  392. package/dist/client/index.js +0 -33
  393. package/dist/config/index.d.ts +0 -10
  394. package/dist/config/index.js +0 -12
  395. package/dist/core/query-utils.d.ts +0 -34
  396. package/dist/core/query-utils.js +0 -59
  397. package/dist/interfaces/headless.d.ts +0 -95
  398. package/dist/interfaces/headless.js +0 -41
  399. package/dist/query/index.d.ts +0 -6
  400. package/dist/query/index.js +0 -5
  401. package/dist/realtime/index.d.ts +0 -10
  402. package/dist/realtime/index.js +0 -9
  403. package/dist/schema/plane.d.ts +0 -23
  404. package/dist/schema/plane.js +0 -19
  405. package/dist/schema/sync-delta-row.js +0 -103
  406. package/dist/schema/sync-delta-wire.js +0 -102
  407. package/dist/server/next.d.ts +0 -51
  408. package/dist/server/next.js +0 -47
  409. package/dist/server/read-config.d.ts +0 -67
  410. package/dist/server/read-config.js +0 -8
  411. package/dist/server/storage-mode.d.ts +0 -1
  412. package/dist/server/storage-mode.js +0 -18
  413. package/dist/source/connector-protocol.d.ts +0 -159
  414. package/dist/source/connector-protocol.js +0 -161
  415. package/dist/sync/OfflineFlush.d.ts +0 -9
  416. package/dist/sync/OfflineFlush.js +0 -22
  417. package/dist/sync/OfflineTransactionStore.d.ts +0 -37
  418. package/dist/sync/OfflineTransactionStore.js +0 -263
  419. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  420. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  421. package/dist/transactions/index.d.ts +0 -16
  422. package/dist/transactions/index.js +0 -7
  423. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  424. package/dist/transactions/mutation-error-handler.js +0 -39
  425. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -0,0 +1,111 @@
1
+ /**
2
+ * The validation boundary for replaying persisted transactions after a restart.
3
+ *
4
+ * Rows read back from the on-disk transaction store may have been written by an
5
+ * earlier run — possibly by an older version of this package, possibly
6
+ * corrupted. Rather than trust them, the schemas here validate exactly the
7
+ * fields the transaction queue and the offline-mutation restore read during
8
+ * replay. A row that fails to parse is dropped and reported, never replayed as
9
+ * a malformed commit.
10
+ *
11
+ * The same store also holds two kinds of rows that are not replayable
12
+ * transactions — the offline mutation queue (`type: 'queue'`) and delta-await
13
+ * markers (`type: 'awaiting_delta'`), each owned by another part of the client.
14
+ * {@link isNonReplayablePersistedRow} recognizes them so they are skipped
15
+ * quietly rather than flagged as corruption.
16
+ */
17
+ import { z } from 'zod';
18
+ import { computePriorityScore, normalizeModelKey } from './commitPayload.js';
19
+ /** The subset of a write's options that is stored with each transaction or queued mutation. */
20
+ const persistedWriteOptionsSchema = z
21
+ .object({
22
+ readAt: z.number().nullable().optional(),
23
+ onStale: z.enum(['reject', 'overwrite', 'notify']).nullable().optional(),
24
+ idempotencyKey: z.string().optional(),
25
+ label: z.string().optional(),
26
+ })
27
+ .loose();
28
+ /**
29
+ * The shape of a persisted transaction that can be replayed: the fields the
30
+ * transaction queue reads when it re-enqueues the row — its id, operation type,
31
+ * model addressing, payload, and identity context. Any remaining bookkeeping is
32
+ * filled in with defaults when the row is rehydrated by
33
+ * {@link deserializePersistedTransaction}.
34
+ */
35
+ export const persistedTransactionSchema = z
36
+ .object({
37
+ id: z.string().min(1),
38
+ type: z.enum(['create', 'update', 'delete', 'archive', 'unarchive']),
39
+ modelName: z.string().min(1),
40
+ modelId: z.string().min(1),
41
+ modelKey: z.string().min(1).optional(),
42
+ data: z.record(z.string(), z.unknown()).optional(),
43
+ previousData: z.record(z.string(), z.unknown()).nullable().optional(),
44
+ context: z.object({
45
+ userId: z.string().min(1),
46
+ organizationId: z.string().min(1),
47
+ role: z.string().optional(),
48
+ teamIds: z.array(z.string()).optional(),
49
+ }),
50
+ createdAt: z.number().optional(),
51
+ batchId: z.string().optional(),
52
+ writeOptions: persistedWriteOptionsSchema.optional(),
53
+ localOnly: z.boolean().optional(),
54
+ })
55
+ .loose();
56
+ /** The `type` values of stored rows that belong to other parts of the client and are not replayable transactions. */
57
+ const NON_REPLAYABLE_TYPES = new Set(['queue', 'awaiting_delta']);
58
+ /**
59
+ * Reports whether a stored row is one of the non-transaction kinds, so callers
60
+ * skip it instead of treating it as a corrupt transaction.
61
+ */
62
+ export function isNonReplayablePersistedRow(row) {
63
+ return (typeof row === 'object' &&
64
+ row !== null &&
65
+ typeof row.type === 'string' &&
66
+ NON_REPLAYABLE_TYPES.has(row.type));
67
+ }
68
+ /**
69
+ * Validates one stored row and rehydrates it into a {@link Transaction} ready
70
+ * to replay, or returns `null` when the row fails validation. Bookkeeping
71
+ * fields the stored row lacks — status, attempts, priority, timestamp — are
72
+ * re-derived the same way a freshly staged transaction derives them.
73
+ */
74
+ export function deserializePersistedTransaction(row) {
75
+ const parsed = persistedTransactionSchema.safeParse(row);
76
+ if (!parsed.success)
77
+ return null;
78
+ const tx = parsed.data;
79
+ return {
80
+ id: tx.id,
81
+ type: tx.type,
82
+ modelName: tx.modelName,
83
+ modelId: tx.modelId,
84
+ modelKey: tx.modelKey ?? normalizeModelKey(tx.modelName),
85
+ ...(tx.data !== undefined ? { data: tx.data } : {}),
86
+ ...(tx.previousData !== undefined ? { previousData: tx.previousData } : {}),
87
+ context: tx.context,
88
+ status: 'pending',
89
+ createdAt: tx.createdAt ?? Date.now(),
90
+ attempts: 0,
91
+ priority: 'normal',
92
+ priorityScore: computePriorityScore(tx.type, tx.modelName),
93
+ ...(tx.batchId !== undefined ? { batchId: tx.batchId } : {}),
94
+ ...(tx.writeOptions !== undefined ? { writeOptions: tx.writeOptions } : {}),
95
+ ...(tx.localOnly !== undefined ? { localOnly: tx.localOnly } : {}),
96
+ };
97
+ }
98
+ /**
99
+ * The shape of one entry in the persisted offline mutation queue — an item of
100
+ * the `'queue'` row's `mutations` array, carrying the fields read when the
101
+ * queue is restored on reconnect.
102
+ */
103
+ export const persistedMutationSchema = z
104
+ .object({
105
+ type: z.enum(['create', 'update', 'delete', 'archive']),
106
+ modelData: z.record(z.string(), z.unknown()),
107
+ modelName: z.string().min(1),
108
+ timestamp: z.string(),
109
+ writeOptions: persistedWriteOptionsSchema.optional(),
110
+ })
111
+ .loose();
@@ -1,23 +1,24 @@
1
1
  /**
2
- * Type registration point for SDK consumers.
2
+ * The single place where you tell the SDK about your application's types.
3
3
  *
4
- * A consumer registers their Schema, Presence, Claims, and UserMeta ONCE by
5
- * augmenting the {@link Register} interface, and every SDK hook — `useAblo`,
6
- * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from the
7
- * resolved registration. No generics at call sites, no `schema` arg per call.
4
+ * You register your Schema, Presence, Claims, and UserMeta once by augmenting
5
+ * the {@link Register} interface. From then on every SDK hook — `useAblo`,
6
+ * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from that
7
+ * registration, so you never pass a generic or a `schema` argument at a call
8
+ * site.
8
9
  *
9
- * Registration is done via **module augmentation** of `@abloatai/ablo`
10
- * the same pattern TanStack Router uses for its `Register` interface. The brand
11
- * lives in the module specifier, so the interface is just `Register` (not a
12
- * global, not prefixed). It's a language feature, not a library trick: any file
13
- * in the compilation can augment it and every resolver below picks it up.
10
+ * Registration uses TypeScript module augmentation: any file in your project
11
+ * can add an `interface Register` to a `declare module '@abloatai/ablo'`
12
+ * block, and every resolver below picks it up. Because the name is scoped to
13
+ * this module, the interface is simply `Register` not a global and not
14
+ * prefixed.
14
15
  *
15
- * Consumer example (`npx ablo init` scaffolds this as `ablo/register.ts`, a
16
- * sibling of `ablo/schema.ts`). It's a regular `.ts` module, NOT a hand-authored
17
- * `.d.ts`: the top-level `import type { schema }` makes the `declare module`
18
- * block MERGE (augment) this interface rather than collide with it — the same
19
- * shape TanStack Router uses in `src/router.tsx`. Any `.ts` file in the
20
- * `tsconfig` `include` works; it never needs to be imported.
16
+ * The `npx ablo init` command scaffolds this file as `ablo/register.ts`, next
17
+ * to `ablo/schema.ts`. Write it as a normal `.ts` module, not a hand-authored
18
+ * `.d.ts`: the top-level `import type { schema }` is what makes the
19
+ * `declare module` block merge into this interface rather than collide with it.
20
+ * Any `.ts` file covered by your `tsconfig` works, and it never needs to be
21
+ * imported anywhere.
21
22
  *
22
23
  * ```ts
23
24
  * // ablo/register.ts
@@ -34,15 +35,15 @@
34
35
  * export {};
35
36
  * ```
36
37
  *
37
- * If `Register` is never augmented, every resolver falls back to
38
- * {@link DefaultSyncShape} — a loose shape that keeps consumers compiling
39
- * without typed benefits until they opt in.
38
+ * When `Register` is never augmented, every resolver falls back to
39
+ * {@link DefaultSyncShape} — a loose shape that keeps your code compiling
40
+ * without typed results until you opt in.
40
41
  */
41
42
  /**
42
- * Default fallback shapes used when the consumer hasn't augmented
43
- * {@link Register}. `DefaultSyncShape.Schema` is intentionally structural — it
44
- * carries `{ models: Record<string, unknown> }` so hooks can still validate the
45
- * model key argument against *something*, just without a typed entity shape.
43
+ * The fallback shapes the resolvers use when {@link Register} has not been
44
+ * augmented. `DefaultSyncShape.Schema` is deliberately structural — it carries
45
+ * `{ models: Record<string, unknown> }` so hooks can still check a model-key
46
+ * argument against something, just without a typed entity shape behind it.
46
47
  */
47
48
  export interface DefaultSyncShape {
48
49
  readonly Schema: {
@@ -55,20 +56,21 @@ export interface DefaultSyncShape {
55
56
  };
56
57
  }
57
58
  /**
58
- * The registration interface. Consumers augment it via
59
- * `declare module '@abloatai/ablo' { interface Register { Schema: ...; … } }`.
60
- * Empty by default every SDK resolver falls back to {@link DefaultSyncShape}
61
- * when an expected key is absent. Exported from the package root so the module
62
- * augmentation merges into this declaration.
59
+ * The registration interface you augment to declare your application's types.
60
+ * Add keys inside a `declare module '@abloatai/ablo'` block for example
61
+ * `interface Register { Schema: ...; Presence: ...; }`. It is empty by default,
62
+ * so any key you omit falls back to {@link DefaultSyncShape}. It is exported
63
+ * from the package root so your augmentation merges into this declaration.
63
64
  *
64
- * The `Schema` augmentation key holds the type produced by `defineSchema`, so
65
- * the same noun reads consistently here and in {@link ResolveSchema}.
65
+ * The `Schema` key holds the type returned by `defineSchema`, and
66
+ * {@link ResolveSchema} reads it back out.
66
67
  */
67
68
  export interface Register {
68
69
  }
69
70
  /**
70
- * The consumer's schema, or the default shape if unregistered. Hooks use this
71
- * to type their model-key argument and infer the entity type returned.
71
+ * Your registered schema, or the default shape when none is registered. Hooks
72
+ * read this to type their model-key argument and to infer the entity type they
73
+ * return.
72
74
  */
73
75
  export type ResolveSchema = Register extends {
74
76
  Schema: infer S;
@@ -76,30 +78,33 @@ export type ResolveSchema = Register extends {
76
78
  models: Record<string, unknown>;
77
79
  } ? S : DefaultSyncShape['Schema'] : DefaultSyncShape['Schema'];
78
80
  /**
79
- * The consumer's presence shape, or the default if unregistered. Used by
80
- * `usePresence`. Free-form — any serializable JSON broadcast per session.
81
+ * Your registered presence shape, or the default when none is registered.
82
+ * `usePresence` reads it. The shape is free-form — any JSON-serializable value
83
+ * you broadcast per session.
81
84
  */
82
85
  export type ResolvePresence = Register extends {
83
86
  Presence: infer P;
84
87
  } ? P : DefaultSyncShape['Presence'];
85
88
  /**
86
- * The consumer's claim vocabulary, or the default if unregistered. Keys are
87
- * claim names; values are the claim payload for each claim. Used by
88
- * `useClaim(claimName)`.
89
+ * Your registered claim vocabulary, or the default when none is registered.
90
+ * Each key is a claim name and its value is that claim's payload.
91
+ * `useClaim(claimName)` reads it.
89
92
  */
90
93
  export type ResolveClaims = Register extends {
91
94
  Claims: infer I;
92
95
  } ? I : DefaultSyncShape['Claims'];
93
96
  /**
94
- * The consumer's user-metadata shape, or the default if unregistered. Carries
95
- * identity info the consumer trusts from their auth layer not SDK-validated.
97
+ * Your registered user-metadata shape, or the default when none is registered.
98
+ * It carries identity information you trust from your own auth layer; the SDK
99
+ * does not validate it.
96
100
  */
97
101
  export type ResolveUserMeta = Register extends {
98
102
  UserMeta: infer U;
99
103
  } ? U : DefaultSyncShape['UserMeta'];
100
104
  /**
101
- * The keys of the consumer's schema models. `useQuery(modelKey)` narrows its
102
- * first argument to this union, so unknown key literals fail at compile time.
105
+ * The union of your schema's model names. `useQuery(modelKey)` narrows its
106
+ * first argument to this union, so a misspelled or unknown model name fails at
107
+ * compile time.
103
108
  */
104
109
  export type ResolveModelKey = ResolveSchema extends {
105
110
  models: infer M;
@@ -1,23 +1,24 @@
1
1
  /**
2
- * Type registration point for SDK consumers.
2
+ * The single place where you tell the SDK about your application's types.
3
3
  *
4
- * A consumer registers their Schema, Presence, Claims, and UserMeta ONCE by
5
- * augmenting the {@link Register} interface, and every SDK hook — `useAblo`,
6
- * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from the
7
- * resolved registration. No generics at call sites, no `schema` arg per call.
4
+ * You register your Schema, Presence, Claims, and UserMeta once by augmenting
5
+ * the {@link Register} interface. From then on every SDK hook — `useAblo`,
6
+ * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from that
7
+ * registration, so you never pass a generic or a `schema` argument at a call
8
+ * site.
8
9
  *
9
- * Registration is done via **module augmentation** of `@abloatai/ablo`
10
- * the same pattern TanStack Router uses for its `Register` interface. The brand
11
- * lives in the module specifier, so the interface is just `Register` (not a
12
- * global, not prefixed). It's a language feature, not a library trick: any file
13
- * in the compilation can augment it and every resolver below picks it up.
10
+ * Registration uses TypeScript module augmentation: any file in your project
11
+ * can add an `interface Register` to a `declare module '@abloatai/ablo'`
12
+ * block, and every resolver below picks it up. Because the name is scoped to
13
+ * this module, the interface is simply `Register` not a global and not
14
+ * prefixed.
14
15
  *
15
- * Consumer example (`npx ablo init` scaffolds this as `ablo/register.ts`, a
16
- * sibling of `ablo/schema.ts`). It's a regular `.ts` module, NOT a hand-authored
17
- * `.d.ts`: the top-level `import type { schema }` makes the `declare module`
18
- * block MERGE (augment) this interface rather than collide with it — the same
19
- * shape TanStack Router uses in `src/router.tsx`. Any `.ts` file in the
20
- * `tsconfig` `include` works; it never needs to be imported.
16
+ * The `npx ablo init` command scaffolds this file as `ablo/register.ts`, next
17
+ * to `ablo/schema.ts`. Write it as a normal `.ts` module, not a hand-authored
18
+ * `.d.ts`: the top-level `import type { schema }` is what makes the
19
+ * `declare module` block merge into this interface rather than collide with it.
20
+ * Any `.ts` file covered by your `tsconfig` works, and it never needs to be
21
+ * imported anywhere.
21
22
  *
22
23
  * ```ts
23
24
  * // ablo/register.ts
@@ -34,8 +35,8 @@
34
35
  * export {};
35
36
  * ```
36
37
  *
37
- * If `Register` is never augmented, every resolver falls back to
38
- * {@link DefaultSyncShape} — a loose shape that keeps consumers compiling
39
- * without typed benefits until they opt in.
38
+ * When `Register` is never augmented, every resolver falls back to
39
+ * {@link DefaultSyncShape} — a loose shape that keeps your code compiling
40
+ * without typed results until you opt in.
40
41
  */
41
42
  export {};
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Linear Sync Engine - Core Types
2
+ * Core type definitions for the model-driven sync layer.
3
3
  *
4
- * Foundational type definitions for the model-driven sync architecture.
5
- * These types define how properties are tracked, loaded, and synchronized.
4
+ * These types describe how a model's properties are declared, when their data
5
+ * is loaded, and how changes are represented on the wire as they synchronize.
6
6
  */
7
7
  import type { FieldMeta } from '../schema/field.js';
8
8
  /**
9
- * Model Scope - lifecycle filter for queries.
10
- * Controls whether live, archived, or all entities are returned.
9
+ * A lifecycle filter for queries: whether to return live entities, archived
10
+ * ones, or both.
11
11
  */
12
12
  export declare enum ModelScope {
13
13
  live = "live",
@@ -15,43 +15,43 @@ export declare enum ModelScope {
15
15
  all = "all"
16
16
  }
17
17
  /**
18
- * Property Types - EXACTLY 7 types as per Linear Sync Engine
19
- * These define how model properties behave in the sync system
18
+ * The kinds of property a model can declare. Each kind determines how the
19
+ * property behaves in the sync system whether it is persisted, how it relates
20
+ * to other models, and how it is loaded.
20
21
  */
21
22
  export declare enum PropertyType {
22
- /** Standard observable property - owned by model, persisted and synced */
23
+ /** A standard observable field owned by the model, both persisted and synced. */
23
24
  property = "property",
24
- /** Property that doesn't persist or sync - runtime only */
25
+ /** A runtime-only field that is neither persisted nor synced. */
25
26
  ephemeralProperty = "ephemeralProperty",
26
- /** Foreign key reference - stores ID only */
27
+ /** A foreign-key reference that stores only the related model's id. */
27
28
  reference = "reference",
28
- /** Lazy-loaded model reference - getter/setter for model based on ID */
29
+ /** A single related model resolved on demand from its id, exposed as a getter and setter. */
29
30
  referenceModel = "referenceModel",
30
- /** Collection of related models - one-to-many relationship */
31
+ /** A collection of related models the many side of a one-to-many relationship. */
31
32
  referenceCollection = "referenceCollection",
32
- /** Back-reference computed property - inverse relationship */
33
+ /** A computed field that follows a relationship in the inverse direction. */
33
34
  backReference = "backReference",
34
- /** Array of foreign key references - many-to-many relationship */
35
+ /** An array of foreign-key ids a many-to-many relationship. */
35
36
  referenceArray = "referenceArray"
36
37
  }
37
38
  /**
38
- * Load Strategies - EXACTLY 5 strategies as per Linear Sync Engine
39
- * Controls when and how model data is loaded from the server
39
+ * When and how a model's data is loaded from the server.
40
40
  */
41
41
  export declare enum LoadStrategy {
42
- /** Load immediately into ObjectPool during bootstrap - for critical models */
42
+ /** Loaded during startup, before it is first used — for models needed right away. */
43
43
  instant = "instant",
44
- /** Load all at once when first needed - for secondary models */
44
+ /** Loaded all at once the first time it is needed for secondary models. */
45
45
  lazy = "lazy",
46
- /** Load on demand in subsets - for large collections */
46
+ /** Loaded on demand in subsets for large collections. */
47
47
  partial = "partial",
48
- /** Only load when explicitly requested - for optional data */
48
+ /** Loaded only when the application asks for it — for optional data. */
49
49
  explicitlyRequested = "explicitlyRequested",
50
- /** Never sync with server, local only - for client-side state */
50
+ /** Never synced with the server; kept only on the client — for local-only state. */
51
51
  local = "local"
52
52
  }
53
53
  /**
54
- * Property Metadata - Configuration for decorated properties
54
+ * The resolved configuration for a single model property.
55
55
  */
56
56
  export interface PropertyMetadata {
57
57
  type: PropertyType;
@@ -61,31 +61,32 @@ export interface PropertyMetadata {
61
61
  defaultValue?: unknown;
62
62
  loadStrategy?: LoadStrategy;
63
63
  /**
64
- * MobX observability annotation for this property. Controls how deeply
65
- * MobX wraps the value when `M1` registers the model.
64
+ * How deeply the reactivity layer wraps this property's value when the model
65
+ * is registered. The engine uses MobX, so the choice maps directly to MobX's
66
+ * observability modes.
66
67
  *
67
- * - `'deep'` (default): full recursive observability. Every nested
68
- * object/array becomes its own atom. Correct for scalar fields and
69
- * small structured values where consumers subscribe to inner
70
- * properties.
71
- * - `'shallow'`: track the reference and array/map/set operations, but
72
- * do NOT recurse into element internals. Right for collections whose
68
+ * - `'deep'` (the default): full recursive observability, where every nested
69
+ * object or array becomes its own reactive node. Correct for scalar fields
70
+ * and small structured values whose inner properties are read directly.
71
+ * - `'shallow'`: track the reference and array, map, and set operations, but
72
+ * do not recurse into element internals. Right for collections whose
73
73
  * elements are replaced wholesale.
74
- * - `'ref'`: track ONLY reassignment. Right for opaque JSON blobs
75
- * (chart specs, ProseMirror docs, style maps) that are treated as
76
- * immutable values consumers always read the whole blob and pass
77
- * it to a renderer. Deep enhancement on these produces a microtask
78
- * storm with no benefit.
74
+ * - `'ref'`: track only reassignment of the value. Right for opaque JSON
75
+ * blobs — chart specs, rich-text documents, style maps that are treated
76
+ * as immutable values and always read whole before being handed to a
77
+ * renderer. Deep-wrapping these produces many needless reactions for no
78
+ * benefit.
79
79
  *
80
- * Schema-driven registration auto-sets this to `'ref'` for fields with
81
- * wire type `'json'`, which is the right default for the blob pattern.
80
+ * Schema-driven registration sets this to `'ref'` automatically for fields
81
+ * whose wire type is `'json'`, the right default for the blob pattern.
82
82
  */
83
83
  observability?: 'deep' | 'shallow' | 'ref';
84
84
  }
85
- /** Model constructor type for reference metadata */
85
+ /** The constructor type of a model class, used by reference metadata to point at the related model. */
86
86
  type ModelConstructor = abstract new (...args: never[]) => unknown;
87
87
  /**
88
- * Reference Metadata - Configuration for reference properties
88
+ * The configuration for a reference property — which model it points to and how
89
+ * the relationship behaves.
89
90
  */
90
91
  export interface ReferenceMetadata {
91
92
  referencedModel: () => ModelConstructor;
@@ -94,7 +95,7 @@ export interface ReferenceMetadata {
94
95
  nullable?: boolean;
95
96
  }
96
97
  /**
97
- * Model Metadata - Configuration for model classes
98
+ * The resolved configuration for a model class.
98
99
  */
99
100
  export interface ModelMetadata {
100
101
  loadStrategy: LoadStrategy;
@@ -104,45 +105,35 @@ export interface ModelMetadata {
104
105
  usedForPartialIndexes?: boolean;
105
106
  schemaVersion?: number;
106
107
  /**
107
- * Schema-declared fields for this model, keyed by field name. Drives
108
- * commit payload projection (filter to declared fields + stringify
109
- * JSON-typed values) inside the transaction queue.
108
+ * The schema-declared fields for this model, keyed by field name. When a
109
+ * change is committed, the transaction queue uses this to project the payload
110
+ * down to the declared fields and to serialize JSON-typed values.
110
111
  *
111
- * Populated by `registerModelsFromSchema`. Each entry carries the
112
- * sync-engine type tag (the canonical {@link FieldMeta.type} union),
113
- * which tells the wire serializer how to handle the value. Missing →
114
- * projection becomes identity pass-through (back-compat for models
115
- * registered outside the schema path).
116
- *
117
- * Narrowed to the canonical union via `Pick` rather than re-declared —
118
- * a hand-rolled copy silently drifts when a new field type lands.
112
+ * Each entry carries the field's {@link FieldMeta.type} tag, which tells the
113
+ * wire serializer how to encode the value. When this is absent — a model
114
+ * registered without a schema the payload is passed through unchanged.
119
115
  */
120
116
  fields?: Readonly<Record<string, Pick<FieldMeta, 'type'>>>;
121
117
  /**
122
- * Fields to back-fill from the sync client identity when missing
123
- * during IndexedDB self-healing. Populated from
124
- * `ModelOptions.autoFill` in the schema. Each entry maps a field on
125
- * this model to one of the identity values held by `SyncClient`
126
- * (`organizationId` or `userId`).
127
- *
128
- * Used by `SyncClient.healModelRecord` to keep the engine
129
- * product-neutral: the engine no longer hardcodes which models carry
130
- * `organizationId` / `createdBy` — the consumer's schema declares it.
118
+ * Fields to fill in from the signed-in identity when they are missing from a
119
+ * stored row during self-healing. Each entry maps a field on this model to
120
+ * one of the identity values the client holds `organizationId` or `userId`.
121
+ * Declaring it in the schema keeps the engine product-neutral: it does not
122
+ * assume which models carry an organization or owner field.
131
123
  */
132
- autoFill?: ReadonlyArray<{
124
+ autoFill?: readonly {
133
125
  field: string;
134
126
  from: 'organizationId' | 'userId';
135
- }>;
127
+ }[];
136
128
  /**
137
- * Fields whose absence makes a stored row orphaned. When healing
138
- * encounters a record missing any of these fields, it returns `null`
139
- * to signal the caller to skip the row. Populated from
140
- * `ModelOptions.requiredFields` in the schema.
129
+ * Fields a stored row must have to be usable. During self-healing, a row
130
+ * missing any of these is treated as orphaned and skipped rather than loaded.
141
131
  */
142
132
  requiredFields?: readonly string[];
143
133
  }
144
134
  /**
145
- * Model Options - Options for @ClientModel decorator
135
+ * The options accepted when declaring a model — its load strategy, optional
136
+ * sync group, and optional table name.
146
137
  */
147
138
  export interface ModelOptions {
148
139
  loadStrategy: LoadStrategy;
@@ -150,7 +141,7 @@ export interface ModelOptions {
150
141
  tableName?: string;
151
142
  }
152
143
  /**
153
- * Property Options - Options for @Property decorator
144
+ * The options accepted when declaring a model property.
154
145
  */
155
146
  export interface PropertyOptions {
156
147
  indexed?: boolean;
@@ -159,21 +150,22 @@ export interface PropertyOptions {
159
150
  ephemeral?: boolean;
160
151
  }
161
152
  /**
162
- * Reference Options - Options for @Reference decorator
153
+ * The options accepted when declaring a reference property.
163
154
  */
164
155
  export interface ReferenceOptions {
165
156
  indexed?: boolean;
166
157
  nullable?: boolean;
167
158
  }
168
159
  /**
169
- * GraphQL Mutation Interface
160
+ * A GraphQL mutation: its query text and the variables to run it with.
170
161
  */
171
162
  export interface GraphQLMutation {
172
163
  mutationText: string;
173
164
  variables: Record<string, unknown>;
174
165
  }
175
166
  /**
176
- * Load Request Interface
167
+ * A request to load model rows by an indexed key. When the load completes,
168
+ * `resolve` is called with the matching rows.
177
169
  */
178
170
  export interface LoadRequest {
179
171
  modelName: string;
@@ -182,11 +174,11 @@ export interface LoadRequest {
182
174
  resolve?: (value: unknown[]) => void;
183
175
  }
184
176
  /**
185
- * Sync Action Types - Complete Linear specification
177
+ * The one-letter code identifying what kind of change a sync action carries.
186
178
  */
187
179
  export type SyncActionType = 'I' | 'U' | 'A' | 'D' | 'C' | 'G' | 'S' | 'V';
188
180
  /**
189
- * Sync Action Interface - Linear format
181
+ * A single change to one model row, as carried on the sync stream.
190
182
  */
191
183
  export interface SyncAction {
192
184
  id: number;
@@ -197,22 +189,24 @@ export interface SyncAction {
197
189
  __class: 'SyncAction';
198
190
  }
199
191
  /**
200
- * Delta Packet - Array of sync actions
192
+ * A batch of sync actions delivered together.
201
193
  */
202
194
  export type DeltaPacket = SyncAction[];
203
195
  /**
204
- * Bootstrap Types
196
+ * The kind of initial data load performed when a client starts: a full load, a
197
+ * partial subset, or local-only.
205
198
  */
206
199
  export type BootstrapType = 'full' | 'partial' | 'local';
207
200
  /**
208
- * Bootstrap Metadata
201
+ * The metadata returned with a bootstrap: the last sync id seen and the sync
202
+ * groups the client is subscribed to.
209
203
  */
210
204
  export interface BootstrapMetadata {
211
205
  lastSyncId: number;
212
206
  subscribedSyncGroups: string[];
213
207
  }
214
208
  /**
215
- * Database Metadata - Sync engine state tracking
209
+ * The locally tracked sync state that lets a client resume where it left off.
216
210
  */
217
211
  export interface DatabaseMetadata {
218
212
  lastSyncId: number;
@@ -222,7 +216,7 @@ export interface DatabaseMetadata {
222
216
  updatedAt: Date;
223
217
  }
224
218
  /**
225
- * Mutation operation types for batch mutations.
219
+ * The operation a batch mutation performs on a model row.
226
220
  */
227
221
  export declare enum MutationOperationType {
228
222
  ARCHIVE = "ARCHIVE",
@@ -232,7 +226,7 @@ export declare enum MutationOperationType {
232
226
  UPDATE = "UPDATE"
233
227
  }
234
228
  /**
235
- * Partial Index Information - For complex querying
229
+ * Describes a partial index used to load subsets of a large model.
236
230
  */
237
231
  export interface PartialIndexInfo {
238
232
  modelName: string;
@@ -240,4 +234,4 @@ export interface PartialIndexInfo {
240
234
  depth: number;
241
235
  path: string[];
242
236
  }
243
- export * from "./streams.js";
237
+ export type { TargetRange, OnStaleMode, WireClaim, ClaimRejection, PresenceKind, ParticipantKind, ParticipantRef, JsonValue, ConfirmationState, AgentDelta, Snapshot, ContextChange, ClaimTarget, PresenceTarget, PresenceStream, Activity, Peer, PresenceUpdatePayload, ClaimLeaseOptions, Duration, ClaimOptions, ClaimStream, ClaimLost, ClaimStatus, ClaimWaitOptions, Claim, HeldClaim, } from './streams.js';