@abloatai/ablo 0.26.0 → 0.28.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 (418) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/README.md +102 -86
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +134 -151
  5. package/dist/Database.d.ts +68 -69
  6. package/dist/Database.js +316 -135
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +54 -52
  12. package/dist/Model.js +78 -62
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +122 -118
  18. package/dist/SyncClient.js +541 -245
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +10 -9
  22. package/dist/adapters/inMemoryStorage.js +21 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +173 -121
  50. package/dist/client/Ablo.d.ts +97 -74
  51. package/dist/client/Ablo.js +129 -163
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +442 -81
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +16 -17
  61. package/dist/client/createInternalComponents.js +26 -31
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +59 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +78 -87
  76. package/dist/client/options.d.ts +157 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +16 -20
  91. package/dist/client/wsMutationExecutor.js +18 -23
  92. package/dist/commit/contract.d.ts +493 -0
  93. package/dist/commit/contract.js +187 -0
  94. package/dist/commit/index.d.ts +6 -0
  95. package/dist/commit/index.js +5 -0
  96. package/dist/context.d.ts +6 -4
  97. package/dist/context.js +6 -4
  98. package/dist/coordination/index.d.ts +10 -8
  99. package/dist/coordination/index.js +14 -12
  100. package/dist/coordination/schema.d.ts +176 -128
  101. package/dist/coordination/schema.js +197 -133
  102. package/dist/coordination/trace.d.ts +9 -10
  103. package/dist/coordination/trace.js +13 -14
  104. package/dist/core/DatabaseManager.d.ts +5 -7
  105. package/dist/core/DatabaseManager.js +15 -19
  106. package/dist/core/QueryProcessor.d.ts +7 -9
  107. package/dist/core/QueryProcessor.js +22 -28
  108. package/dist/core/QueryView.d.ts +8 -8
  109. package/dist/core/QueryView.js +2 -2
  110. package/dist/core/StoreManager.d.ts +14 -14
  111. package/dist/core/StoreManager.js +33 -24
  112. package/dist/core/ViewRegistry.d.ts +5 -5
  113. package/dist/core/ViewRegistry.js +4 -4
  114. package/dist/core/index.d.ts +17 -12
  115. package/dist/core/index.js +32 -26
  116. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  117. package/dist/core/openIDBWithTimeout.js +42 -43
  118. package/dist/core/queryUtils.d.ts +45 -0
  119. package/dist/core/queryUtils.js +69 -0
  120. package/dist/core/storeContract.d.ts +63 -61
  121. package/dist/core/storeContract.js +8 -12
  122. package/dist/environment.d.ts +28 -0
  123. package/dist/environment.js +21 -0
  124. package/dist/errorCodes.d.ts +107 -99
  125. package/dist/errorCodes.js +137 -134
  126. package/dist/errors.d.ts +160 -166
  127. package/dist/errors.js +155 -158
  128. package/dist/index.d.ts +36 -27
  129. package/dist/index.js +91 -86
  130. package/dist/interfaces/index.d.ts +102 -113
  131. package/dist/interfaces/index.js +5 -4
  132. package/dist/keys/index.d.ts +27 -29
  133. package/dist/keys/index.js +41 -40
  134. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  135. package/dist/mutators/RecordingTransaction.js +31 -37
  136. package/dist/mutators/Transaction.d.ts +18 -26
  137. package/dist/mutators/Transaction.js +14 -20
  138. package/dist/mutators/UndoManager.d.ts +124 -131
  139. package/dist/mutators/UndoManager.js +177 -156
  140. package/dist/mutators/defineMutators.d.ts +23 -34
  141. package/dist/mutators/defineMutators.js +14 -20
  142. package/dist/mutators/inverseOp.d.ts +12 -15
  143. package/dist/mutators/inverseOp.js +12 -15
  144. package/dist/mutators/mutateActions.d.ts +10 -9
  145. package/dist/mutators/mutateActions.js +1 -1
  146. package/dist/mutators/readerActions.d.ts +9 -8
  147. package/dist/mutators/readerActions.js +2 -2
  148. package/dist/mutators/undoApply.d.ts +31 -27
  149. package/dist/mutators/undoApply.js +26 -24
  150. package/dist/policy/index.d.ts +5 -3
  151. package/dist/policy/index.js +5 -3
  152. package/dist/policy/types.d.ts +104 -100
  153. package/dist/policy/types.js +67 -66
  154. package/dist/query/client.d.ts +28 -23
  155. package/dist/query/client.js +45 -43
  156. package/dist/query/types.d.ts +37 -60
  157. package/dist/query/types.js +13 -33
  158. package/dist/react/AbloProvider.d.ts +1 -1
  159. package/dist/react/AbloProvider.js +2 -2
  160. package/dist/react/context.d.ts +25 -28
  161. package/dist/react/context.js +9 -10
  162. package/dist/react/index.d.ts +41 -42
  163. package/dist/react/index.js +37 -38
  164. package/dist/react/internalContext.d.ts +17 -19
  165. package/dist/react/useAblo.d.ts +28 -25
  166. package/dist/react/useAblo.js +41 -17
  167. package/dist/react/useCurrentUserId.d.ts +8 -7
  168. package/dist/react/useCurrentUserId.js +8 -7
  169. package/dist/react/useErrorListener.d.ts +7 -7
  170. package/dist/react/useErrorListener.js +10 -11
  171. package/dist/react/useMutationFailureListener.d.ts +8 -8
  172. package/dist/react/useMutationFailureListener.js +8 -8
  173. package/dist/react/useMutators.d.ts +11 -11
  174. package/dist/react/useMutators.js +3 -3
  175. package/dist/react/useReactive.js +2 -2
  176. package/dist/react/useSyncStatus.d.ts +4 -6
  177. package/dist/react/useUndoScope.d.ts +7 -9
  178. package/dist/react/useUndoScope.js +1 -1
  179. package/dist/schema/coordination.d.ts +21 -25
  180. package/dist/schema/coordination.js +21 -25
  181. package/dist/schema/ddl.d.ts +43 -39
  182. package/dist/schema/ddl.js +75 -68
  183. package/dist/schema/ddlLock.d.ts +20 -24
  184. package/dist/schema/ddlLock.js +18 -23
  185. package/dist/schema/diff.d.ts +99 -61
  186. package/dist/schema/diff.js +43 -34
  187. package/dist/schema/field.d.ts +37 -42
  188. package/dist/schema/field.js +35 -48
  189. package/dist/schema/generate.d.ts +12 -12
  190. package/dist/schema/generate.js +12 -12
  191. package/dist/schema/index.d.ts +3 -3
  192. package/dist/schema/index.js +21 -23
  193. package/dist/schema/model.d.ts +118 -143
  194. package/dist/schema/model.js +22 -33
  195. package/dist/schema/openapi.d.ts +10 -9
  196. package/dist/schema/openapi.js +5 -3
  197. package/dist/schema/queries.d.ts +29 -31
  198. package/dist/schema/queries.js +23 -25
  199. package/dist/schema/relation.d.ts +89 -99
  200. package/dist/schema/relation.js +13 -13
  201. package/dist/schema/residency.d.ts +16 -13
  202. package/dist/schema/residency.js +16 -13
  203. package/dist/schema/roles.d.ts +36 -43
  204. package/dist/schema/roles.js +31 -37
  205. package/dist/schema/schema.d.ts +64 -43
  206. package/dist/schema/schema.js +31 -32
  207. package/dist/schema/select.d.ts +13 -13
  208. package/dist/schema/select.js +13 -13
  209. package/dist/schema/serialize.d.ts +28 -31
  210. package/dist/schema/serialize.js +27 -31
  211. package/dist/schema/sugar.d.ts +17 -32
  212. package/dist/schema/sugar.js +14 -29
  213. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  214. package/dist/schema/syncDeltaRow.js +89 -0
  215. package/dist/schema/tenancy.d.ts +44 -46
  216. package/dist/schema/tenancy.js +46 -48
  217. package/dist/server/adapter.d.ts +58 -58
  218. package/dist/server/adapter.js +13 -14
  219. package/dist/server/commit.d.ts +60 -64
  220. package/dist/server/index.d.ts +9 -10
  221. package/dist/server/index.js +1 -1
  222. package/dist/server/readConfig.d.ts +70 -0
  223. package/dist/server/readConfig.js +8 -0
  224. package/dist/server/storageMode.d.ts +23 -0
  225. package/dist/server/storageMode.js +17 -0
  226. package/dist/source/adapter.d.ts +30 -25
  227. package/dist/source/adapter.js +10 -10
  228. package/dist/source/adapters/drizzle.d.ts +28 -23
  229. package/dist/source/adapters/drizzle.js +30 -25
  230. package/dist/source/adapters/kysely.d.ts +27 -25
  231. package/dist/source/adapters/kysely.js +24 -23
  232. package/dist/source/adapters/memory.d.ts +8 -7
  233. package/dist/source/adapters/memory.js +9 -8
  234. package/dist/source/adapters/prisma.d.ts +13 -12
  235. package/dist/source/adapters/prisma.js +22 -25
  236. package/dist/source/conformance.d.ts +18 -11
  237. package/dist/source/conformance.js +17 -11
  238. package/dist/source/connector.d.ts +31 -32
  239. package/dist/source/connector.js +28 -28
  240. package/dist/source/connectorProtocol.d.ts +160 -0
  241. package/dist/source/connectorProtocol.js +162 -0
  242. package/dist/source/contract.d.ts +26 -27
  243. package/dist/source/contract.js +28 -29
  244. package/dist/source/factory.d.ts +46 -58
  245. package/dist/source/factory.js +22 -27
  246. package/dist/source/index.d.ts +7 -9
  247. package/dist/source/index.js +12 -14
  248. package/dist/source/migrations.d.ts +9 -9
  249. package/dist/source/migrations.js +9 -9
  250. package/dist/source/next.d.ts +9 -10
  251. package/dist/source/next.js +6 -7
  252. package/dist/source/pushQueue.d.ts +69 -47
  253. package/dist/source/pushQueue.js +32 -28
  254. package/dist/source/signing.d.ts +46 -17
  255. package/dist/source/signing.js +28 -11
  256. package/dist/source/types.d.ts +121 -104
  257. package/dist/source/types.js +13 -14
  258. package/dist/stores/ObjectStore.d.ts +24 -12
  259. package/dist/stores/ObjectStore.js +38 -16
  260. package/dist/stores/ObjectStoreContract.d.ts +14 -15
  261. package/dist/stores/SyncActionStore.d.ts +7 -11
  262. package/dist/stores/SyncActionStore.js +13 -17
  263. package/dist/surface.d.ts +28 -21
  264. package/dist/surface.js +29 -20
  265. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  266. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  267. package/dist/sync/ConnectionManager.d.ts +39 -50
  268. package/dist/sync/ConnectionManager.js +55 -66
  269. package/dist/sync/NetworkProbe.d.ts +24 -29
  270. package/dist/sync/NetworkProbe.js +63 -69
  271. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  272. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  273. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  274. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  275. package/dist/sync/SyncWebSocket.d.ts +141 -166
  276. package/dist/sync/SyncWebSocket.js +191 -223
  277. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  278. package/dist/sync/awaitClaimGrant.js +11 -11
  279. package/dist/sync/bootstrapApply.d.ts +34 -24
  280. package/dist/sync/bootstrapApply.js +27 -19
  281. package/dist/sync/commitFrames.d.ts +21 -20
  282. package/dist/sync/commitFrames.js +18 -18
  283. package/dist/sync/createClaimStream.d.ts +23 -22
  284. package/dist/sync/createClaimStream.js +105 -23
  285. package/dist/sync/createPresenceStream.d.ts +19 -18
  286. package/dist/sync/createPresenceStream.js +25 -26
  287. package/dist/sync/createSnapshot.d.ts +12 -14
  288. package/dist/sync/createSnapshot.js +20 -26
  289. package/dist/sync/credentialLifecycle.d.ts +104 -104
  290. package/dist/sync/credentialLifecycle.js +140 -147
  291. package/dist/sync/deltaPipeline.d.ts +36 -34
  292. package/dist/sync/deltaPipeline.js +64 -65
  293. package/dist/sync/groupChange.d.ts +63 -61
  294. package/dist/sync/groupChange.js +74 -78
  295. package/dist/sync/heartbeat.d.ts +34 -33
  296. package/dist/sync/heartbeat.js +31 -31
  297. package/dist/sync/participants.d.ts +19 -19
  298. package/dist/sync/persistedPrefix.d.ts +12 -0
  299. package/dist/sync/persistedPrefix.js +22 -0
  300. package/dist/sync/schemas.d.ts +3 -2
  301. package/dist/sync/schemas.js +14 -10
  302. package/dist/sync/syncCursor.d.ts +17 -21
  303. package/dist/sync/syncCursor.js +17 -21
  304. package/dist/sync/syncPlan.d.ts +28 -36
  305. package/dist/sync/syncPlan.js +18 -19
  306. package/dist/sync/syncPosition.d.ts +54 -49
  307. package/dist/sync/syncPosition.js +57 -52
  308. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  309. package/dist/sync/wsFrameHandlers.js +63 -67
  310. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  311. package/dist/testing/fixtures/bootstrap.js +12 -6
  312. package/dist/testing/fixtures/deltas.d.ts +30 -33
  313. package/dist/testing/fixtures/deltas.js +30 -33
  314. package/dist/testing/fixtures/models.d.ts +11 -10
  315. package/dist/testing/fixtures/models.js +11 -10
  316. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  317. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  318. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  319. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  320. package/dist/testing/helpers/wait.d.ts +13 -8
  321. package/dist/testing/helpers/wait.js +13 -8
  322. package/dist/testing/index.d.ts +5 -3
  323. package/dist/testing/index.js +3 -2
  324. package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
  325. package/dist/testing/mocks/FakeDatabase.js +10 -0
  326. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  327. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  328. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  329. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  330. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  331. package/dist/testing/mocks/MockSyncContext.js +15 -13
  332. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  333. package/dist/testing/mocks/MockSyncStore.js +11 -11
  334. package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
  335. package/dist/testing/mocks/MockWebSocket.js +22 -21
  336. package/dist/transactions/TransactionQueue.d.ts +244 -181
  337. package/dist/transactions/TransactionQueue.js +929 -423
  338. package/dist/transactions/TransactionStore.d.ts +6 -4
  339. package/dist/transactions/TransactionStore.js +6 -4
  340. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  341. package/dist/transactions/UnconfirmedWrites.js +104 -0
  342. package/dist/transactions/coalesceRules.d.ts +41 -17
  343. package/dist/transactions/coalesceRules.js +40 -17
  344. package/dist/transactions/commitEnvelope.d.ts +132 -0
  345. package/dist/transactions/commitEnvelope.js +139 -0
  346. package/dist/transactions/commitOutboxStore.d.ts +32 -0
  347. package/dist/transactions/commitOutboxStore.js +26 -0
  348. package/dist/transactions/commitPayload.d.ts +63 -52
  349. package/dist/transactions/commitPayload.js +54 -57
  350. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  351. package/dist/transactions/deltaConfirmation.js +37 -45
  352. package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
  353. package/dist/transactions/httpCommitEnvelope.js +179 -0
  354. package/dist/transactions/optimisticApply.d.ts +49 -0
  355. package/dist/transactions/optimisticApply.js +65 -0
  356. package/dist/transactions/replayValidation.d.ts +182 -0
  357. package/dist/transactions/replayValidation.js +156 -0
  358. package/dist/types/global.d.ts +46 -41
  359. package/dist/types/global.js +20 -19
  360. package/dist/types/index.d.ts +71 -77
  361. package/dist/types/index.js +22 -22
  362. package/dist/types/modelData.d.ts +6 -8
  363. package/dist/types/modelData.js +5 -7
  364. package/dist/types/participant.d.ts +10 -11
  365. package/dist/types/participant.js +6 -8
  366. package/dist/types/streams.d.ts +208 -195
  367. package/dist/types/streams.js +7 -7
  368. package/dist/utils/asyncIterator.d.ts +25 -32
  369. package/dist/utils/asyncIterator.js +25 -32
  370. package/dist/utils/duration.d.ts +12 -15
  371. package/dist/utils/duration.js +12 -15
  372. package/dist/utils/mobxSetup.d.ts +53 -0
  373. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  374. package/dist/webhooks/events.d.ts +21 -16
  375. package/dist/webhooks/events.js +10 -8
  376. package/dist/webhooks/index.d.ts +5 -7
  377. package/dist/webhooks/index.js +5 -7
  378. package/dist/wire/bootstrapReason.d.ts +9 -0
  379. package/dist/wire/bootstrapReason.js +8 -0
  380. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  381. package/dist/wire/delta.js +114 -0
  382. package/dist/wire/errorEnvelope.d.ts +30 -31
  383. package/dist/wire/errorEnvelope.js +34 -40
  384. package/dist/wire/frames.d.ts +315 -86
  385. package/dist/wire/frames.js +47 -33
  386. package/dist/wire/index.d.ts +18 -14
  387. package/dist/wire/index.js +32 -27
  388. package/dist/wire/listEnvelope.d.ts +16 -23
  389. package/dist/wire/listEnvelope.js +7 -6
  390. package/dist/wire/protocol.d.ts +25 -32
  391. package/dist/wire/protocol.js +25 -32
  392. package/dist/wire/protocolVersion.d.ts +44 -40
  393. package/dist/wire/protocolVersion.js +44 -40
  394. package/docs/api.md +10 -10
  395. package/docs/coordination.md +59 -0
  396. package/docs/mcp.md +1 -1
  397. package/package.json +17 -11
  398. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  399. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  400. package/dist/core/query-utils.d.ts +0 -34
  401. package/dist/core/query-utils.js +0 -59
  402. package/dist/schema/sync-delta-row.js +0 -103
  403. package/dist/schema/sync-delta-wire.js +0 -102
  404. package/dist/server/read-config.d.ts +0 -67
  405. package/dist/server/read-config.js +0 -8
  406. package/dist/server/storage-mode.d.ts +0 -8
  407. package/dist/server/storage-mode.js +0 -28
  408. package/dist/source/connector-protocol.d.ts +0 -159
  409. package/dist/source/connector-protocol.js +0 -161
  410. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  411. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  412. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  413. package/dist/transactions/mutation-error-handler.js +0 -39
  414. package/dist/transactions/optimistic.d.ts +0 -24
  415. package/dist/transactions/optimistic.js +0 -45
  416. package/dist/transactions/persistedReplay.d.ts +0 -93
  417. package/dist/transactions/persistedReplay.js +0 -105
  418. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,27 +1,31 @@
1
1
  /**
2
- * `@abloatai/ablo/wire` the canonical HTTP/frame WIRE CONTRACT, with no
3
- * client-runtime (mobx / react / IndexedDB) dependency, so a server-side
4
- * consumer — a Next.js route handler, an edge function — can import the
5
- * envelope producers without pulling in the whole sync client.
2
+ * The wire contract for the sync protocol: the HTTP envelope shapes and the
3
+ * write-path frames, with no dependency on the client runtime. A server — a
4
+ * route handler, an edge function — can import the envelope producers here
5
+ * without pulling in the full sync client.
6
6
  *
7
- * Two halves, both Stripe-shaped and used across every Ablo surface:
8
- * - ERROR egress — {@link errorEnvelope} / {@link ErrorEnvelope} /
9
- * {@link statusForType} turn any thrown value into
10
- * `{ type, code, param, message, doc_url, request_id }`.
11
- * - LIST egress — {@link listEnvelope} / {@link ListEnvelope} stamp the
7
+ * It has two halves, used across every endpoint:
8
+ * - Error responses — {@link errorEnvelope}, {@link ErrorEnvelope}, and
9
+ * {@link statusForType} turn any thrown value into the uniform
10
+ * `{ type, code, param, message, doc_url, request_id }` body.
11
+ * - List responses — {@link listEnvelope} and {@link ListEnvelope} stamp the
12
12
  * uniform `{ object: 'list', data, has_more, next_cursor }` collection.
13
13
  *
14
- * The {@link AbloError} hierarchy + {@link docUrlForCode} + the wire-PARSE
15
- * helpers are re-exported so a route can THROW the right typed error and
16
- * SERIALIZE it through a single import.
14
+ * The {@link AbloError} hierarchy, {@link docUrlForCode}, and the wire-parsing
15
+ * helpers are re-exported too, so a single import lets a route throw the right
16
+ * typed error and serialize it back out.
17
17
  */
18
18
  export { errorEnvelope, statusForType } from './errorEnvelope.js';
19
19
  export type { ErrorEnvelope } from './errorEnvelope.js';
20
20
  export { listEnvelope } from './listEnvelope.js';
21
21
  export type { ListEnvelope } from './listEnvelope.js';
22
- export { commitOperationSchema, commitPayloadSchema } from './frames.js';
22
+ export { bootstrapReasonSchema } from './bootstrapReason.js';
23
+ export type { BootstrapReason } from './bootstrapReason.js';
24
+ export { commitOperationSchema, commitPayloadSchema, commitRequestMessageSchema, commitResultMessageSchema, legacyCommitOperationSchema, legacyCommitPayloadSchema, } from './frames.js';
23
25
  export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, } from './protocolVersion.js';
24
- export type { CommitOperation, MutationMessage, CommitMessage, MutationResultMessage, } from './frames.js';
26
+ export type { CommitOperation, MutationMessage, CommitMessage, MutationResultMessage, CommitRequestMessage, CommitResultMessage, LegacyCommitOperation, LegacyCommitMessage, LegacyMutationResultMessage, } from './frames.js';
27
+ export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from './delta.js';
28
+ export type { ParticipantKind, ConfirmationState, SyncDeltaAction, WireDeltaData, ParticipantRef, SyncDeltaWireCore, ClientSyncDelta, ServerSyncDelta, } from './delta.js';
25
29
  export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloServerError, AbloStaleContextError, AbloClaimedError, CapabilityError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION, errorCodeSpec, } from '../errors.js';
26
30
  export type { ErrorCode, WireErrorCode } from '../errors.js';
27
31
  export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
@@ -1,40 +1,45 @@
1
1
  /**
2
- * `@abloatai/ablo/wire` the canonical HTTP/frame WIRE CONTRACT, with no
3
- * client-runtime (mobx / react / IndexedDB) dependency, so a server-side
4
- * consumer — a Next.js route handler, an edge function — can import the
5
- * envelope producers without pulling in the whole sync client.
2
+ * The wire contract for the sync protocol: the HTTP envelope shapes and the
3
+ * write-path frames, with no dependency on the client runtime. A server — a
4
+ * route handler, an edge function — can import the envelope producers here
5
+ * without pulling in the full sync client.
6
6
  *
7
- * Two halves, both Stripe-shaped and used across every Ablo surface:
8
- * - ERROR egress — {@link errorEnvelope} / {@link ErrorEnvelope} /
9
- * {@link statusForType} turn any thrown value into
10
- * `{ type, code, param, message, doc_url, request_id }`.
11
- * - LIST egress — {@link listEnvelope} / {@link ListEnvelope} stamp the
7
+ * It has two halves, used across every endpoint:
8
+ * - Error responses — {@link errorEnvelope}, {@link ErrorEnvelope}, and
9
+ * {@link statusForType} turn any thrown value into the uniform
10
+ * `{ type, code, param, message, doc_url, request_id }` body.
11
+ * - List responses — {@link listEnvelope} and {@link ListEnvelope} stamp the
12
12
  * uniform `{ object: 'list', data, has_more, next_cursor }` collection.
13
13
  *
14
- * The {@link AbloError} hierarchy + {@link docUrlForCode} + the wire-PARSE
15
- * helpers are re-exported so a route can THROW the right typed error and
16
- * SERIALIZE it through a single import.
14
+ * The {@link AbloError} hierarchy, {@link docUrlForCode}, and the wire-parsing
15
+ * helpers are re-exported too, so a single import lets a route throw the right
16
+ * typed error and serialize it back out.
17
17
  */
18
18
  export { errorEnvelope, statusForType } from './errorEnvelope.js';
19
19
  export { listEnvelope } from './listEnvelope.js';
20
- // Commit-path frame contract the canonical write-path message shapes shared
21
- // by the SDK client, the sync-server, and any `@abloatai/ablo/server` host.
22
- // The runtime Zod validators live beside the interfaces (z.infer-bound so the
23
- // two cannot drift) the per-op / per-payload ingest gates for both commit
20
+ export { bootstrapReasonSchema } from './bootstrapReason.js';
21
+ // The write-path frame contract: the message shapes shared by the client and
22
+ // the server. The runtime Zod validators sit beside the interfaces and are
23
+ // pinned to them, and they gate every operation and payload on both commit
24
24
  // transports.
25
- export { commitOperationSchema, commitPayloadSchema } from './frames.js';
26
- // Protocol versioning the one integer client and server compare to know
27
- // they can speak, plus the typed WS rejection close code. See the module's
28
- // changelog + deploy contract.
25
+ export { commitOperationSchema, commitPayloadSchema, commitRequestMessageSchema, commitResultMessageSchema, legacyCommitOperationSchema, legacyCommitPayloadSchema, } from './frames.js';
26
+ // Protocol versioning: the single integer the client and server compare to
27
+ // confirm they can speak to each other, plus the WebSocket close code used to
28
+ // reject a mismatch. See protocolVersion.ts for the changelog and deploy rules.
29
29
  export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, } from './protocolVersion.js';
30
+ // The read-path delta contract: the shape the server broadcasts to clients as the
31
+ // payload of a `delta` or `sync_response` frame, together with the shared
32
+ // participant vocabulary it carries. Both ends derive their delta type from these
33
+ // schemas, so the client and server cannot drift apart.
34
+ export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from './delta.js';
30
35
  // The error surface a wire consumer needs to throw, classify, and serialize.
31
36
  export { AbloError, AbloAuthenticationError, AbloPermissionError, AbloValidationError, AbloRateLimitError, AbloIdempotencyError, AbloConnectionError, AbloServerError, AbloStaleContextError, AbloClaimedError, CapabilityError, SyncSessionError, docUrlForCode, translateHttpError, errorFromWire, toAbloError, ERROR_CONTRACT_VERSION,
32
- // The code→{httpStatus,retryable} registry table dependency-free data a
33
- // server needs to resolve a code's canonical status exactly like the SDK's
34
- // wire producer does (pinned by the sync-server envelope parity test).
37
+ // The table mapping each error code to its HTTP status and retryable flag —
38
+ // plain data a server can use to resolve a code's canonical status the same
39
+ // way the client's error serializer does.
35
40
  errorCodeSpec, } from '../errors.js';
36
- // Protocol timing constants — the 30s ping cadence + the 3×-ping claim/
37
- // presence lease window shared by the SDK heartbeat, the Hub keepalive,
38
- // the claim coordinator, and the presence reaper (see protocol.ts) — plus
39
- // the WS auth-handshake subprotocols shared by SyncWebSocket and the Hub.
41
+ // Protocol timing constants — the 30-second ping cadence and the lease window
42
+ // derived from it, shared by the client heartbeat and the server keepalive,
43
+ // claim leasing, and presence expiry (see protocol.ts) — plus the WebSocket
44
+ // subprotocols used during the authenticated handshake.
40
45
  export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
@@ -1,24 +1,16 @@
1
1
  /**
2
- * The canonical Ablo LIST envelope the one shape every endpoint that returns
3
- * a collection uses, so a consumer can detect + paginate any list uniformly
4
- * instead of learning a per-endpoint payload key (`{ keys }`, `{ origins }`,
5
- * `{ events }`, `{ buckets }`…).
2
+ * The envelope every endpoint that returns a collection wraps its results in.
3
+ * Because the shape is always the same `{ object: 'list', data, has_more,
4
+ * next_cursor }` a consumer can detect and paginate any list the same way,
5
+ * instead of learning a different payload key for each endpoint.
6
6
  *
7
- * `{ object: 'list', data: [...], has_more, next_cursor }` is the shape the
8
- * hosted `GET /v1/models/:model` endpoint already emits (apps/sync-server
9
- * `routes/query.ts`) and that `@ablo/mcp` already consumes promoted here so
10
- * sync-web's dashboard lists, the SDK, and any future surface produce the
11
- * identical envelope from one definition.
12
- *
13
- * The field NAMES are Stripe's (`object`/`has_more`/`next_cursor`), not
14
- * PlanetScale's (`type`/`cursor_start`/`has_next`): the rest of the Ablo API is
15
- * Stripe-modeled, so this keeps one vocabulary across the surface. The
16
- * PlanetScale discipline we deliberately borrow is *"every list is the same
17
- * envelope"* — not the concrete key names.
7
+ * The list endpoints emit this shape and the {@link listEnvelope} helper
8
+ * produces it, so every list across the API reads from one definition. The
9
+ * generic type parameter carries the row type of `data`.
18
10
  */
19
11
  export interface ListEnvelope<T> {
20
- /** Discriminator always `'list'`. Lets a generic client recognise a
21
- * paginated collection without per-endpoint special-casing. */
12
+ /** Always the literal `'list'`. Lets a generic client recognize a collection
13
+ * response without special-casing each endpoint. */
22
14
  readonly object: 'list';
23
15
  /** The page of results. Always present (an empty array when there are none),
24
16
  * never omitted, so `body.data` is a stable access path. */
@@ -31,13 +23,14 @@ export interface ListEnvelope<T> {
31
23
  readonly next_cursor: string | null;
32
24
  }
33
25
  /**
34
- * Stamp the uniform {@link ListEnvelope} onto an already-resolved page of rows.
26
+ * Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
35
27
  *
36
- * Pagination stays the caller's responsibility (fetch `limit + 1`, decide
37
- * `hasMore`, derive the cursor from the last row's order key) — this only
38
- * applies the envelope so no endpoint hand-rolls the shape. The defaults model
39
- * the common "small, unpaginated collection" case (`has_more: false`,
40
- * `next_cursor: null`); a paginated endpoint passes both explicitly.
28
+ * Pagination stays the caller's job fetch one more row than the limit to
29
+ * decide `hasMore`, and derive the cursor from the last row's sort key. This
30
+ * helper only applies the envelope so no endpoint has to build the shape by
31
+ * hand. The defaults describe a small, unpaginated collection
32
+ * (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
33
+ * explicitly.
41
34
  */
42
35
  export declare function listEnvelope<T>(data: readonly T[], opts?: {
43
36
  hasMore?: boolean;
@@ -1,11 +1,12 @@
1
1
  /**
2
- * Stamp the uniform {@link ListEnvelope} onto an already-resolved page of rows.
2
+ * Wraps an already-fetched page of rows in the uniform {@link ListEnvelope}.
3
3
  *
4
- * Pagination stays the caller's responsibility (fetch `limit + 1`, decide
5
- * `hasMore`, derive the cursor from the last row's order key) — this only
6
- * applies the envelope so no endpoint hand-rolls the shape. The defaults model
7
- * the common "small, unpaginated collection" case (`has_more: false`,
8
- * `next_cursor: null`); a paginated endpoint passes both explicitly.
4
+ * Pagination stays the caller's job fetch one more row than the limit to
5
+ * decide `hasMore`, and derive the cursor from the last row's sort key. This
6
+ * helper only applies the envelope so no endpoint has to build the shape by
7
+ * hand. The defaults describe a small, unpaginated collection
8
+ * (`has_more: false`, `next_cursor: null`); a paginated endpoint passes both
9
+ * explicitly.
9
10
  */
10
11
  export function listEnvelope(data, opts = {}) {
11
12
  return {
@@ -1,45 +1,38 @@
1
1
  /**
2
- * Cross-boundary protocol TIMING constants the one place the 30s ping
3
- * cadence and the claim/presence lease window are defined. Before this leaf
4
- * existed the pair was copy-pasted across five sites in four modules, kept
5
- * in sync only by comments ("~3× the 30s ping"); changing the server ping
6
- * silently skewed the SDK's claim-expiry estimate and presence reaping.
2
+ * The timing constants both sides of the protocol must agree on: the ping
3
+ * cadence and the lease window derived from it. Defining them here once keeps
4
+ * the client and the server from skewing apart a change to the ping interval
5
+ * that did not also move the lease window would make claim expiry and presence
6
+ * timeouts disagree between the two.
7
7
  *
8
- * Consumers (SDK side, relative import):
9
- * - `sync/heartbeat.ts` `HEARTBEAT_INTERVAL_MS`, the SDK's
10
- * application-level `{ type: 'ping' }` cadence.
11
- * - `client/createModelProxy.ts` `DEFAULT_LEASE_TTL_MS`, the client's
12
- * expiry estimate for a claim taken without an explicit TTL.
8
+ * {@link PING_INTERVAL_MS} is how often the connection pings to prove it is
9
+ * alive. {@link LEASE_TTL_MS} is how long a claim or presence entry stays valid
10
+ * without a renewing ping. On the client, these set the heartbeat cadence and
11
+ * the fallback expiry for a claim taken without an explicit lease. On the
12
+ * server, they set the keepalive interval, the lease granted per keepalive, and
13
+ * the presence-entry lifetime, so a silently disconnected client drops off the
14
+ * roster within one lease window.
13
15
  *
14
- * Consumers (server side, via `@abloatai/ablo/wire`):
15
- * - `apps/sync-server/src/hub/Hub.ts` the RFC 6455 `ws.ping()`
16
- * keepalive interval (the tick that renews claim leases).
17
- * - `apps/sync-server/src/hub/claimCoordinator.ts`
18
- * `LEASE_RENEW_TTL_MS`, the lease lifetime granted per keepalive tick.
19
- * - `apps/sync-server/src/presence/PresenceStore.ts` — the default
20
- * presence-entry TTL (a silently-dead client leaves the roster within
21
- * one lease window).
22
- *
23
- * INVARIANT: `LEASE_TTL_MS === 3 * PING_INTERVAL_MS`. The lease is renewed
24
- * on every ping, so a live holder always has ≥ 2 ping intervals of runway,
25
- * and a silent one lapses ~2 missed pings after it stops renewing. TTL is
26
- * liveness, not work-duration — never widen the lease without widening the
27
- * ping (or holders will flap), and never derive either value locally.
16
+ * The lease is three ping intervals long and is renewed on every ping, so a
17
+ * live holder always has at least two intervals of runway and a silent one
18
+ * lapses about two missed pings after it stops renewing. The window measures
19
+ * liveness, not how long a task may run: widening the lease without also
20
+ * widening the ping makes holders flap, and neither value should be redefined
21
+ * anywhere else.
28
22
  */
29
23
  export declare const PING_INTERVAL_MS = 30000;
30
24
  export declare const LEASE_TTL_MS: number;
31
25
  /**
32
- * WebSocket subprotocols used to carry the bearer credential OUT of the URL.
26
+ * The WebSocket subprotocols that carry the bearer credential out of the URL.
33
27
  *
34
- * Browsers cannot set an `Authorization` header on a WebSocket, so the SDK
28
+ * A browser cannot set an `Authorization` header on a WebSocket, so the client
35
29
  * offers the token as a `Sec-WebSocket-Protocol` value — `ablo.bearer.<token>` —
36
30
  * alongside the real `ablo.sync.v1` protocol the server selects. This keeps the
37
- * credential out of the query string, which ALB access logs, proxies, and
38
- * browser history capture. The server reads the token from the subprotocol and
39
- * echoes back ONLY `ablo.sync.v1`, never the token-bearing value. Lives in
40
- * `wire/` (not `auth/`) because it IS the wire contract: client and server
41
- * import the same constants so the handshake format can never drift.
42
- * Re-exported from `auth/credentialSource.ts` for existing SDK importers.
31
+ * credential out of the query string, which access logs, proxies, and browser
32
+ * history would otherwise capture. The server reads the token from the
33
+ * subprotocol and echoes back only `ablo.sync.v1`, never the token-bearing
34
+ * value. Both the client and the server import these constants, so the
35
+ * handshake format cannot drift.
43
36
  */
44
37
  export declare const WS_BEARER_SUBPROTOCOL_PREFIX = "ablo.bearer.";
45
38
  export declare const WS_SYNC_SUBPROTOCOL = "ablo.sync.v1";
@@ -1,45 +1,38 @@
1
1
  /**
2
- * Cross-boundary protocol TIMING constants the one place the 30s ping
3
- * cadence and the claim/presence lease window are defined. Before this leaf
4
- * existed the pair was copy-pasted across five sites in four modules, kept
5
- * in sync only by comments ("~3× the 30s ping"); changing the server ping
6
- * silently skewed the SDK's claim-expiry estimate and presence reaping.
2
+ * The timing constants both sides of the protocol must agree on: the ping
3
+ * cadence and the lease window derived from it. Defining them here once keeps
4
+ * the client and the server from skewing apart a change to the ping interval
5
+ * that did not also move the lease window would make claim expiry and presence
6
+ * timeouts disagree between the two.
7
7
  *
8
- * Consumers (SDK side, relative import):
9
- * - `sync/heartbeat.ts` `HEARTBEAT_INTERVAL_MS`, the SDK's
10
- * application-level `{ type: 'ping' }` cadence.
11
- * - `client/createModelProxy.ts` `DEFAULT_LEASE_TTL_MS`, the client's
12
- * expiry estimate for a claim taken without an explicit TTL.
8
+ * {@link PING_INTERVAL_MS} is how often the connection pings to prove it is
9
+ * alive. {@link LEASE_TTL_MS} is how long a claim or presence entry stays valid
10
+ * without a renewing ping. On the client, these set the heartbeat cadence and
11
+ * the fallback expiry for a claim taken without an explicit lease. On the
12
+ * server, they set the keepalive interval, the lease granted per keepalive, and
13
+ * the presence-entry lifetime, so a silently disconnected client drops off the
14
+ * roster within one lease window.
13
15
  *
14
- * Consumers (server side, via `@abloatai/ablo/wire`):
15
- * - `apps/sync-server/src/hub/Hub.ts` the RFC 6455 `ws.ping()`
16
- * keepalive interval (the tick that renews claim leases).
17
- * - `apps/sync-server/src/hub/claimCoordinator.ts`
18
- * `LEASE_RENEW_TTL_MS`, the lease lifetime granted per keepalive tick.
19
- * - `apps/sync-server/src/presence/PresenceStore.ts` — the default
20
- * presence-entry TTL (a silently-dead client leaves the roster within
21
- * one lease window).
22
- *
23
- * INVARIANT: `LEASE_TTL_MS === 3 * PING_INTERVAL_MS`. The lease is renewed
24
- * on every ping, so a live holder always has ≥ 2 ping intervals of runway,
25
- * and a silent one lapses ~2 missed pings after it stops renewing. TTL is
26
- * liveness, not work-duration — never widen the lease without widening the
27
- * ping (or holders will flap), and never derive either value locally.
16
+ * The lease is three ping intervals long and is renewed on every ping, so a
17
+ * live holder always has at least two intervals of runway and a silent one
18
+ * lapses about two missed pings after it stops renewing. The window measures
19
+ * liveness, not how long a task may run: widening the lease without also
20
+ * widening the ping makes holders flap, and neither value should be redefined
21
+ * anywhere else.
28
22
  */
29
23
  export const PING_INTERVAL_MS = 30_000;
30
24
  export const LEASE_TTL_MS = 3 * PING_INTERVAL_MS;
31
25
  /**
32
- * WebSocket subprotocols used to carry the bearer credential OUT of the URL.
26
+ * The WebSocket subprotocols that carry the bearer credential out of the URL.
33
27
  *
34
- * Browsers cannot set an `Authorization` header on a WebSocket, so the SDK
28
+ * A browser cannot set an `Authorization` header on a WebSocket, so the client
35
29
  * offers the token as a `Sec-WebSocket-Protocol` value — `ablo.bearer.<token>` —
36
30
  * alongside the real `ablo.sync.v1` protocol the server selects. This keeps the
37
- * credential out of the query string, which ALB access logs, proxies, and
38
- * browser history capture. The server reads the token from the subprotocol and
39
- * echoes back ONLY `ablo.sync.v1`, never the token-bearing value. Lives in
40
- * `wire/` (not `auth/`) because it IS the wire contract: client and server
41
- * import the same constants so the handshake format can never drift.
42
- * Re-exported from `auth/credentialSource.ts` for existing SDK importers.
31
+ * credential out of the query string, which access logs, proxies, and browser
32
+ * history would otherwise capture. The server reads the token from the
33
+ * subprotocol and echoes back only `ablo.sync.v1`, never the token-bearing
34
+ * value. Both the client and the server import these constants, so the
35
+ * handshake format cannot drift.
43
36
  */
44
37
  export const WS_BEARER_SUBPROTOCOL_PREFIX = 'ablo.bearer.';
45
38
  export const WS_SYNC_SUBPROTOCOL = 'ablo.sync.v1';
@@ -1,56 +1,60 @@
1
1
  /**
2
- * The sync protocol version — ONE monotonically increasing integer covering
3
- * everything client and server must agree on to speak: WS frame shapes
4
- * (hub `ClientMessage`/`ServerMessage`), HTTP request/response envelopes, and
5
- * the persisted delta encodings a client replays. Zero's recipe: schemaHash
6
- * (WS close 4009) only detects APP-schema drift; this detects PROTOCOL drift
7
- * before it, every main-push deploy was an old-client/new-server encounter
8
- * with no detector at all.
2
+ * The sync protocol version — a single integer, increasing over time, that
3
+ * covers everything the client and server must agree on to talk to each other:
4
+ * the WebSocket frame shapes, the HTTP request and response envelopes, and the
5
+ * delta encodings a client replays. It is separate from the app-schema hash
6
+ * (WebSocket close code 4009), which detects drift in your data model; this
7
+ * detects drift in the protocol itself.
9
8
  *
10
- * Deploy contract: SERVER DEPLOYS FIRST. The server accepts every version in
11
- * `[MIN_SUPPORTED_PROTOCOL_VERSION, PROTOCOL_VERSION]`; a client never
12
- * connects to a server older than itself (if it does a rollback mid-fleet —
13
- * the too-new rejection below makes it visible instead of undefined behavior).
9
+ * Deploy ordering: the server is deployed first. It accepts every version in
10
+ * the inclusive range from {@link MIN_SUPPORTED_PROTOCOL_VERSION} to
11
+ * {@link PROTOCOL_VERSION}, and a client is never expected to connect to a
12
+ * server older than itself. If that does happen for example a partial server
13
+ * rollback — {@link protocolVersionProblem} reports it as `too_new` so the
14
+ * mismatch is visible rather than undefined.
14
15
  *
15
- * How to change the protocol:
16
- * 1. Make the wire change backward-tolerant where possible (the server's
17
- * `clientMessageSchema` accepts-and-ignores unknown payload keys an
18
- * ADDITIVE field usually needs NO version bump).
19
- * 2. For a breaking change: bump `PROTOCOL_VERSION`, append a changelog
20
- * entry below, and keep `MIN_SUPPORTED_PROTOCOL_VERSION` covering every
21
- * SDK version still in the wild; raise it only with a deprecation window.
22
- * 3. The contract test (`__tests__/protocolVersion.test.ts`) fails on any
23
- * bump — update it in the same change, deliberately.
16
+ * To change the protocol:
17
+ * 1. Make the change backward-tolerant where you can. The server ignores
18
+ * unknown payload keys, so an additive field usually needs no version bump.
19
+ * 2. For a breaking change, bump {@link PROTOCOL_VERSION}, add a changelog
20
+ * entry below, and keep {@link MIN_SUPPORTED_PROTOCOL_VERSION} low enough
21
+ * to cover every client still in use; raise it only after a deprecation
22
+ * window.
23
+ * 3. The protocol-version contract test fails on any bump — update it in the
24
+ * same change, deliberately.
24
25
  *
25
- * CHANGELOG
26
- * v1 (2026-07-03) — the protocol as of the version field's introduction:
27
- * sync_request{cursor,lastSyncId,capabilities,protocolVersion?},
28
- * commit/mutation/claim/release/ack/presence_update frames, bootstrap +
29
- * delta batches, HTTP envelopes per `wire/errorEnvelope` +
30
- * `wire/listEnvelope`. Clients that predate the field send NO
31
- * `protocolVersion` treated as v1 (the field's introduction changed no
32
- * semantics).
26
+ * Changelog
27
+ * v1 (2026-07-03) — the protocol as of this field's introduction: the
28
+ * sync-request frame (`cursor`, `lastSyncId`, `capabilities`, optional
29
+ * `protocolVersion`), the commit, mutation, claim, release, ack, and
30
+ * presence-update frames, the bootstrap and delta batches, and the HTTP
31
+ * error and list envelopes. A client that predates this field sends no
32
+ * `protocolVersion` and is treated as v1, since introducing the field
33
+ * changed no behavior.
33
34
  */
34
35
  export declare const PROTOCOL_VERSION = 1;
35
36
  /**
36
- * Oldest client protocol this build still serves. Raising it is a BREAKING
37
- * cut for un-upgraded clients do it only with a deprecation window and a
38
- * changelog entry.
37
+ * The oldest client protocol version this build still serves. Raising it cuts
38
+ * off clients that have not upgraded, so do it only after a deprecation window
39
+ * and with a changelog entry.
39
40
  */
40
41
  export declare const MIN_SUPPORTED_PROTOCOL_VERSION = 1;
41
42
  /**
42
- * WS application close code for a protocol-version rejection (4001 =
43
- * credential, 4009 = app-schema drift). The reason string is the error code
44
- * `protocol_version_unsupported`; the SDK treats this close as TERMINAL
45
- * reconnecting cannot heal a version mismatch, upgrading the SDK (or rolling
46
- * the server forward) can.
43
+ * The WebSocket close code the server sends to reject a protocol-version
44
+ * mismatch. It sits alongside the other application close codes (4001 for a
45
+ * credential problem, 4009 for app-schema drift), and its reason string is the
46
+ * error code `protocol_version_unsupported`. A client should treat this close
47
+ * as terminal: reconnecting cannot heal a version mismatch, but upgrading the
48
+ * client or rolling the server forward can.
47
49
  */
48
50
  export declare const WS_CLOSE_PROTOCOL_VERSION = 4010;
49
51
  /**
50
- * Classify a peer's announced protocol version. `undefined` (a pre-versioning
51
- * client) is v1 by definition. Non-integer garbage classifies as `too_old` —
52
- * fail closed, visibly.
52
+ * Classifies a peer's announced protocol version against what this build
53
+ * supports, returning `'too_old'`, `'too_new'`, or `null` when the versions are
54
+ * compatible. An `undefined` version — a client from before versioning existed
55
+ * — counts as v1. A non-integer value is treated as `'too_old'` so the check
56
+ * fails closed and visibly.
53
57
  */
54
58
  export declare function protocolVersionProblem(announced: number | undefined): 'too_old' | 'too_new' | null;
55
- /** HTTP request header carrying the client's protocol version. */
59
+ /** The HTTP request header a client uses to announce its protocol version. */
56
60
  export declare const PROTOCOL_VERSION_HEADER = "Ablo-Protocol-Version";
@@ -1,55 +1,59 @@
1
1
  /**
2
- * The sync protocol version — ONE monotonically increasing integer covering
3
- * everything client and server must agree on to speak: WS frame shapes
4
- * (hub `ClientMessage`/`ServerMessage`), HTTP request/response envelopes, and
5
- * the persisted delta encodings a client replays. Zero's recipe: schemaHash
6
- * (WS close 4009) only detects APP-schema drift; this detects PROTOCOL drift
7
- * before it, every main-push deploy was an old-client/new-server encounter
8
- * with no detector at all.
2
+ * The sync protocol version — a single integer, increasing over time, that
3
+ * covers everything the client and server must agree on to talk to each other:
4
+ * the WebSocket frame shapes, the HTTP request and response envelopes, and the
5
+ * delta encodings a client replays. It is separate from the app-schema hash
6
+ * (WebSocket close code 4009), which detects drift in your data model; this
7
+ * detects drift in the protocol itself.
9
8
  *
10
- * Deploy contract: SERVER DEPLOYS FIRST. The server accepts every version in
11
- * `[MIN_SUPPORTED_PROTOCOL_VERSION, PROTOCOL_VERSION]`; a client never
12
- * connects to a server older than itself (if it does a rollback mid-fleet —
13
- * the too-new rejection below makes it visible instead of undefined behavior).
9
+ * Deploy ordering: the server is deployed first. It accepts every version in
10
+ * the inclusive range from {@link MIN_SUPPORTED_PROTOCOL_VERSION} to
11
+ * {@link PROTOCOL_VERSION}, and a client is never expected to connect to a
12
+ * server older than itself. If that does happen for example a partial server
13
+ * rollback — {@link protocolVersionProblem} reports it as `too_new` so the
14
+ * mismatch is visible rather than undefined.
14
15
  *
15
- * How to change the protocol:
16
- * 1. Make the wire change backward-tolerant where possible (the server's
17
- * `clientMessageSchema` accepts-and-ignores unknown payload keys an
18
- * ADDITIVE field usually needs NO version bump).
19
- * 2. For a breaking change: bump `PROTOCOL_VERSION`, append a changelog
20
- * entry below, and keep `MIN_SUPPORTED_PROTOCOL_VERSION` covering every
21
- * SDK version still in the wild; raise it only with a deprecation window.
22
- * 3. The contract test (`__tests__/protocolVersion.test.ts`) fails on any
23
- * bump — update it in the same change, deliberately.
16
+ * To change the protocol:
17
+ * 1. Make the change backward-tolerant where you can. The server ignores
18
+ * unknown payload keys, so an additive field usually needs no version bump.
19
+ * 2. For a breaking change, bump {@link PROTOCOL_VERSION}, add a changelog
20
+ * entry below, and keep {@link MIN_SUPPORTED_PROTOCOL_VERSION} low enough
21
+ * to cover every client still in use; raise it only after a deprecation
22
+ * window.
23
+ * 3. The protocol-version contract test fails on any bump — update it in the
24
+ * same change, deliberately.
24
25
  *
25
- * CHANGELOG
26
- * v1 (2026-07-03) — the protocol as of the version field's introduction:
27
- * sync_request{cursor,lastSyncId,capabilities,protocolVersion?},
28
- * commit/mutation/claim/release/ack/presence_update frames, bootstrap +
29
- * delta batches, HTTP envelopes per `wire/errorEnvelope` +
30
- * `wire/listEnvelope`. Clients that predate the field send NO
31
- * `protocolVersion` treated as v1 (the field's introduction changed no
32
- * semantics).
26
+ * Changelog
27
+ * v1 (2026-07-03) — the protocol as of this field's introduction: the
28
+ * sync-request frame (`cursor`, `lastSyncId`, `capabilities`, optional
29
+ * `protocolVersion`), the commit, mutation, claim, release, ack, and
30
+ * presence-update frames, the bootstrap and delta batches, and the HTTP
31
+ * error and list envelopes. A client that predates this field sends no
32
+ * `protocolVersion` and is treated as v1, since introducing the field
33
+ * changed no behavior.
33
34
  */
34
35
  export const PROTOCOL_VERSION = 1;
35
36
  /**
36
- * Oldest client protocol this build still serves. Raising it is a BREAKING
37
- * cut for un-upgraded clients do it only with a deprecation window and a
38
- * changelog entry.
37
+ * The oldest client protocol version this build still serves. Raising it cuts
38
+ * off clients that have not upgraded, so do it only after a deprecation window
39
+ * and with a changelog entry.
39
40
  */
40
41
  export const MIN_SUPPORTED_PROTOCOL_VERSION = 1;
41
42
  /**
42
- * WS application close code for a protocol-version rejection (4001 =
43
- * credential, 4009 = app-schema drift). The reason string is the error code
44
- * `protocol_version_unsupported`; the SDK treats this close as TERMINAL
45
- * reconnecting cannot heal a version mismatch, upgrading the SDK (or rolling
46
- * the server forward) can.
43
+ * The WebSocket close code the server sends to reject a protocol-version
44
+ * mismatch. It sits alongside the other application close codes (4001 for a
45
+ * credential problem, 4009 for app-schema drift), and its reason string is the
46
+ * error code `protocol_version_unsupported`. A client should treat this close
47
+ * as terminal: reconnecting cannot heal a version mismatch, but upgrading the
48
+ * client or rolling the server forward can.
47
49
  */
48
50
  export const WS_CLOSE_PROTOCOL_VERSION = 4010;
49
51
  /**
50
- * Classify a peer's announced protocol version. `undefined` (a pre-versioning
51
- * client) is v1 by definition. Non-integer garbage classifies as `too_old` —
52
- * fail closed, visibly.
52
+ * Classifies a peer's announced protocol version against what this build
53
+ * supports, returning `'too_old'`, `'too_new'`, or `null` when the versions are
54
+ * compatible. An `undefined` version — a client from before versioning existed
55
+ * — counts as v1. A non-integer value is treated as `'too_old'` so the check
56
+ * fails closed and visibly.
53
57
  */
54
58
  export function protocolVersionProblem(announced) {
55
59
  const v = announced ?? 1;
@@ -59,5 +63,5 @@ export function protocolVersionProblem(announced) {
59
63
  return 'too_new';
60
64
  return null;
61
65
  }
62
- /** HTTP request header carrying the client's protocol version. */
66
+ /** The HTTP request header a client uses to announce its protocol version. */
63
67
  export const PROTOCOL_VERSION_HEADER = 'Ablo-Protocol-Version';