@abloatai/ablo 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +101 -85
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +131 -147
  5. package/dist/Database.d.ts +54 -68
  6. package/dist/Database.js +97 -113
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +37 -52
  12. package/dist/Model.js +46 -61
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +112 -112
  18. package/dist/SyncClient.js +165 -172
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  22. package/dist/adapters/inMemoryStorage.js +9 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +167 -119
  50. package/dist/client/Ablo.d.ts +73 -73
  51. package/dist/client/Ablo.js +125 -160
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +133 -38
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +14 -17
  61. package/dist/client/createInternalComponents.js +25 -30
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +57 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +67 -87
  76. package/dist/client/options.d.ts +134 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +15 -20
  91. package/dist/client/wsMutationExecutor.js +17 -23
  92. package/dist/context.d.ts +6 -4
  93. package/dist/context.js +6 -4
  94. package/dist/coordination/index.d.ts +10 -8
  95. package/dist/coordination/index.js +14 -12
  96. package/dist/coordination/schema.d.ts +176 -128
  97. package/dist/coordination/schema.js +197 -133
  98. package/dist/coordination/trace.d.ts +9 -10
  99. package/dist/coordination/trace.js +13 -14
  100. package/dist/core/DatabaseManager.d.ts +5 -7
  101. package/dist/core/DatabaseManager.js +15 -19
  102. package/dist/core/QueryProcessor.d.ts +7 -9
  103. package/dist/core/QueryProcessor.js +22 -28
  104. package/dist/core/QueryView.d.ts +8 -8
  105. package/dist/core/QueryView.js +2 -2
  106. package/dist/core/StoreManager.d.ts +12 -14
  107. package/dist/core/StoreManager.js +21 -24
  108. package/dist/core/ViewRegistry.d.ts +5 -5
  109. package/dist/core/ViewRegistry.js +4 -4
  110. package/dist/core/index.d.ts +17 -12
  111. package/dist/core/index.js +32 -26
  112. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  113. package/dist/core/openIDBWithTimeout.js +42 -43
  114. package/dist/core/queryUtils.d.ts +45 -0
  115. package/dist/core/queryUtils.js +69 -0
  116. package/dist/core/storeContract.d.ts +63 -61
  117. package/dist/core/storeContract.js +8 -12
  118. package/dist/environment.d.ts +28 -0
  119. package/dist/environment.js +21 -0
  120. package/dist/errorCodes.d.ts +107 -99
  121. package/dist/errorCodes.js +131 -132
  122. package/dist/errors.d.ts +160 -166
  123. package/dist/errors.js +155 -158
  124. package/dist/index.d.ts +30 -27
  125. package/dist/index.js +89 -86
  126. package/dist/interfaces/index.d.ts +102 -113
  127. package/dist/interfaces/index.js +5 -4
  128. package/dist/keys/index.d.ts +27 -29
  129. package/dist/keys/index.js +41 -40
  130. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  131. package/dist/mutators/RecordingTransaction.js +31 -37
  132. package/dist/mutators/Transaction.d.ts +18 -26
  133. package/dist/mutators/Transaction.js +14 -20
  134. package/dist/mutators/UndoManager.d.ts +122 -131
  135. package/dist/mutators/UndoManager.js +145 -156
  136. package/dist/mutators/defineMutators.d.ts +23 -34
  137. package/dist/mutators/defineMutators.js +14 -20
  138. package/dist/mutators/inverseOp.d.ts +12 -15
  139. package/dist/mutators/inverseOp.js +12 -15
  140. package/dist/mutators/mutateActions.d.ts +10 -9
  141. package/dist/mutators/mutateActions.js +1 -1
  142. package/dist/mutators/readerActions.d.ts +9 -8
  143. package/dist/mutators/readerActions.js +2 -2
  144. package/dist/mutators/undoApply.d.ts +31 -27
  145. package/dist/mutators/undoApply.js +26 -24
  146. package/dist/policy/index.d.ts +5 -3
  147. package/dist/policy/index.js +5 -3
  148. package/dist/policy/types.d.ts +104 -100
  149. package/dist/policy/types.js +67 -66
  150. package/dist/query/client.d.ts +28 -23
  151. package/dist/query/client.js +45 -43
  152. package/dist/query/types.d.ts +37 -60
  153. package/dist/query/types.js +13 -33
  154. package/dist/react/AbloProvider.d.ts +1 -1
  155. package/dist/react/AbloProvider.js +2 -2
  156. package/dist/react/context.d.ts +25 -28
  157. package/dist/react/context.js +9 -10
  158. package/dist/react/index.d.ts +41 -42
  159. package/dist/react/index.js +37 -38
  160. package/dist/react/internalContext.d.ts +17 -19
  161. package/dist/react/useAblo.d.ts +23 -22
  162. package/dist/react/useAblo.js +16 -14
  163. package/dist/react/useCurrentUserId.d.ts +8 -7
  164. package/dist/react/useCurrentUserId.js +8 -7
  165. package/dist/react/useErrorListener.d.ts +7 -7
  166. package/dist/react/useErrorListener.js +10 -11
  167. package/dist/react/useMutationFailureListener.d.ts +8 -8
  168. package/dist/react/useMutationFailureListener.js +8 -8
  169. package/dist/react/useMutators.d.ts +11 -11
  170. package/dist/react/useMutators.js +3 -3
  171. package/dist/react/useReactive.js +2 -2
  172. package/dist/react/useSyncStatus.d.ts +4 -6
  173. package/dist/react/useUndoScope.d.ts +7 -9
  174. package/dist/react/useUndoScope.js +1 -1
  175. package/dist/schema/coordination.d.ts +21 -25
  176. package/dist/schema/coordination.js +21 -25
  177. package/dist/schema/ddl.d.ts +43 -39
  178. package/dist/schema/ddl.js +75 -68
  179. package/dist/schema/ddlLock.d.ts +20 -24
  180. package/dist/schema/ddlLock.js +18 -23
  181. package/dist/schema/diff.d.ts +99 -61
  182. package/dist/schema/diff.js +43 -34
  183. package/dist/schema/field.d.ts +37 -42
  184. package/dist/schema/field.js +35 -48
  185. package/dist/schema/generate.d.ts +12 -12
  186. package/dist/schema/generate.js +12 -12
  187. package/dist/schema/index.d.ts +2 -2
  188. package/dist/schema/index.js +21 -23
  189. package/dist/schema/model.d.ts +118 -143
  190. package/dist/schema/model.js +22 -33
  191. package/dist/schema/openapi.d.ts +10 -9
  192. package/dist/schema/openapi.js +5 -3
  193. package/dist/schema/queries.d.ts +29 -31
  194. package/dist/schema/queries.js +23 -25
  195. package/dist/schema/relation.d.ts +89 -99
  196. package/dist/schema/relation.js +13 -13
  197. package/dist/schema/residency.d.ts +16 -13
  198. package/dist/schema/residency.js +16 -13
  199. package/dist/schema/roles.d.ts +36 -43
  200. package/dist/schema/roles.js +31 -37
  201. package/dist/schema/schema.d.ts +33 -42
  202. package/dist/schema/schema.js +31 -32
  203. package/dist/schema/select.d.ts +13 -13
  204. package/dist/schema/select.js +13 -13
  205. package/dist/schema/serialize.d.ts +28 -31
  206. package/dist/schema/serialize.js +27 -31
  207. package/dist/schema/sugar.d.ts +17 -32
  208. package/dist/schema/sugar.js +14 -29
  209. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  210. package/dist/schema/syncDeltaRow.js +89 -0
  211. package/dist/schema/tenancy.d.ts +44 -46
  212. package/dist/schema/tenancy.js +46 -48
  213. package/dist/server/adapter.d.ts +58 -58
  214. package/dist/server/adapter.js +13 -14
  215. package/dist/server/commit.d.ts +60 -64
  216. package/dist/server/index.d.ts +9 -10
  217. package/dist/server/index.js +1 -1
  218. package/dist/server/readConfig.d.ts +70 -0
  219. package/dist/server/readConfig.js +8 -0
  220. package/dist/server/storageMode.d.ts +23 -0
  221. package/dist/server/storageMode.js +17 -0
  222. package/dist/source/adapter.d.ts +30 -25
  223. package/dist/source/adapter.js +10 -10
  224. package/dist/source/adapters/drizzle.d.ts +28 -23
  225. package/dist/source/adapters/drizzle.js +30 -25
  226. package/dist/source/adapters/kysely.d.ts +27 -25
  227. package/dist/source/adapters/kysely.js +24 -23
  228. package/dist/source/adapters/memory.d.ts +8 -7
  229. package/dist/source/adapters/memory.js +9 -8
  230. package/dist/source/adapters/prisma.d.ts +13 -12
  231. package/dist/source/adapters/prisma.js +22 -25
  232. package/dist/source/conformance.d.ts +18 -11
  233. package/dist/source/conformance.js +17 -11
  234. package/dist/source/connector.d.ts +31 -32
  235. package/dist/source/connector.js +28 -28
  236. package/dist/source/connectorProtocol.d.ts +160 -0
  237. package/dist/source/connectorProtocol.js +162 -0
  238. package/dist/source/contract.d.ts +26 -27
  239. package/dist/source/contract.js +28 -29
  240. package/dist/source/factory.d.ts +46 -58
  241. package/dist/source/factory.js +22 -27
  242. package/dist/source/index.d.ts +7 -9
  243. package/dist/source/index.js +12 -14
  244. package/dist/source/migrations.d.ts +9 -9
  245. package/dist/source/migrations.js +9 -9
  246. package/dist/source/next.d.ts +9 -10
  247. package/dist/source/next.js +6 -7
  248. package/dist/source/pushQueue.d.ts +69 -47
  249. package/dist/source/pushQueue.js +32 -28
  250. package/dist/source/signing.d.ts +46 -17
  251. package/dist/source/signing.js +28 -11
  252. package/dist/source/types.d.ts +121 -104
  253. package/dist/source/types.js +13 -14
  254. package/dist/stores/ObjectStore.d.ts +10 -11
  255. package/dist/stores/ObjectStore.js +11 -12
  256. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  257. package/dist/stores/SyncActionStore.d.ts +7 -11
  258. package/dist/stores/SyncActionStore.js +13 -17
  259. package/dist/surface.d.ts +27 -20
  260. package/dist/surface.js +27 -20
  261. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  262. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  263. package/dist/sync/ConnectionManager.d.ts +39 -50
  264. package/dist/sync/ConnectionManager.js +55 -66
  265. package/dist/sync/NetworkProbe.d.ts +24 -29
  266. package/dist/sync/NetworkProbe.js +63 -69
  267. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  268. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  269. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  270. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  271. package/dist/sync/SyncWebSocket.d.ts +139 -165
  272. package/dist/sync/SyncWebSocket.js +191 -223
  273. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  274. package/dist/sync/awaitClaimGrant.js +11 -11
  275. package/dist/sync/bootstrapApply.d.ts +34 -24
  276. package/dist/sync/bootstrapApply.js +27 -19
  277. package/dist/sync/commitFrames.d.ts +21 -20
  278. package/dist/sync/commitFrames.js +18 -18
  279. package/dist/sync/createClaimStream.d.ts +23 -22
  280. package/dist/sync/createClaimStream.js +105 -23
  281. package/dist/sync/createPresenceStream.d.ts +19 -18
  282. package/dist/sync/createPresenceStream.js +25 -26
  283. package/dist/sync/createSnapshot.d.ts +12 -14
  284. package/dist/sync/createSnapshot.js +20 -26
  285. package/dist/sync/credentialLifecycle.d.ts +104 -104
  286. package/dist/sync/credentialLifecycle.js +140 -147
  287. package/dist/sync/deltaPipeline.d.ts +36 -34
  288. package/dist/sync/deltaPipeline.js +64 -65
  289. package/dist/sync/groupChange.d.ts +63 -61
  290. package/dist/sync/groupChange.js +74 -78
  291. package/dist/sync/heartbeat.d.ts +34 -33
  292. package/dist/sync/heartbeat.js +31 -31
  293. package/dist/sync/participants.d.ts +19 -19
  294. package/dist/sync/schemas.d.ts +3 -2
  295. package/dist/sync/schemas.js +14 -10
  296. package/dist/sync/syncCursor.d.ts +17 -21
  297. package/dist/sync/syncCursor.js +17 -21
  298. package/dist/sync/syncPlan.d.ts +28 -36
  299. package/dist/sync/syncPlan.js +18 -19
  300. package/dist/sync/syncPosition.d.ts +54 -49
  301. package/dist/sync/syncPosition.js +57 -52
  302. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  303. package/dist/sync/wsFrameHandlers.js +63 -67
  304. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  305. package/dist/testing/fixtures/bootstrap.js +12 -6
  306. package/dist/testing/fixtures/deltas.d.ts +30 -33
  307. package/dist/testing/fixtures/deltas.js +30 -33
  308. package/dist/testing/fixtures/models.d.ts +11 -10
  309. package/dist/testing/fixtures/models.js +11 -10
  310. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  311. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  312. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  313. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  314. package/dist/testing/helpers/wait.d.ts +13 -8
  315. package/dist/testing/helpers/wait.js +13 -8
  316. package/dist/testing/index.d.ts +3 -3
  317. package/dist/testing/index.js +2 -2
  318. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  319. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  320. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  321. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  322. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  323. package/dist/testing/mocks/MockSyncContext.js +15 -13
  324. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  325. package/dist/testing/mocks/MockSyncStore.js +11 -11
  326. package/dist/testing/mocks/MockWebSocket.d.ts +26 -22
  327. package/dist/testing/mocks/MockWebSocket.js +22 -21
  328. package/dist/transactions/TransactionQueue.d.ts +181 -176
  329. package/dist/transactions/TransactionQueue.js +338 -350
  330. package/dist/transactions/TransactionStore.d.ts +6 -4
  331. package/dist/transactions/TransactionStore.js +6 -4
  332. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  333. package/dist/transactions/UnconfirmedWrites.js +104 -0
  334. package/dist/transactions/coalesceRules.d.ts +41 -17
  335. package/dist/transactions/coalesceRules.js +40 -17
  336. package/dist/transactions/commitPayload.d.ts +48 -52
  337. package/dist/transactions/commitPayload.js +48 -57
  338. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  339. package/dist/transactions/deltaConfirmation.js +37 -45
  340. package/dist/transactions/optimisticApply.d.ts +49 -0
  341. package/dist/transactions/optimisticApply.js +65 -0
  342. package/dist/transactions/{persistedReplay.d.ts → replayValidation.d.ts} +28 -22
  343. package/dist/transactions/{persistedReplay.js → replayValidation.js} +33 -27
  344. package/dist/types/global.d.ts +46 -41
  345. package/dist/types/global.js +20 -19
  346. package/dist/types/index.d.ts +71 -77
  347. package/dist/types/index.js +22 -22
  348. package/dist/types/modelData.d.ts +6 -8
  349. package/dist/types/modelData.js +5 -7
  350. package/dist/types/participant.d.ts +10 -11
  351. package/dist/types/participant.js +6 -8
  352. package/dist/types/streams.d.ts +208 -195
  353. package/dist/types/streams.js +7 -7
  354. package/dist/utils/asyncIterator.d.ts +25 -32
  355. package/dist/utils/asyncIterator.js +25 -32
  356. package/dist/utils/duration.d.ts +12 -15
  357. package/dist/utils/duration.js +12 -15
  358. package/dist/utils/mobxSetup.d.ts +53 -0
  359. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  360. package/dist/webhooks/events.d.ts +21 -16
  361. package/dist/webhooks/events.js +10 -8
  362. package/dist/webhooks/index.d.ts +5 -7
  363. package/dist/webhooks/index.js +5 -7
  364. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  365. package/dist/wire/delta.js +114 -0
  366. package/dist/wire/errorEnvelope.d.ts +30 -31
  367. package/dist/wire/errorEnvelope.js +34 -40
  368. package/dist/wire/frames.d.ts +79 -86
  369. package/dist/wire/frames.js +26 -33
  370. package/dist/wire/index.d.ts +14 -12
  371. package/dist/wire/index.js +30 -26
  372. package/dist/wire/listEnvelope.d.ts +16 -23
  373. package/dist/wire/listEnvelope.js +7 -6
  374. package/dist/wire/protocol.d.ts +25 -32
  375. package/dist/wire/protocol.js +25 -32
  376. package/dist/wire/protocolVersion.d.ts +44 -40
  377. package/dist/wire/protocolVersion.js +44 -40
  378. package/docs/coordination.md +59 -0
  379. package/package.json +11 -10
  380. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  381. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  382. package/dist/core/query-utils.d.ts +0 -34
  383. package/dist/core/query-utils.js +0 -59
  384. package/dist/schema/sync-delta-row.js +0 -103
  385. package/dist/schema/sync-delta-wire.js +0 -102
  386. package/dist/server/read-config.d.ts +0 -67
  387. package/dist/server/read-config.js +0 -8
  388. package/dist/server/storage-mode.d.ts +0 -8
  389. package/dist/server/storage-mode.js +0 -28
  390. package/dist/source/connector-protocol.d.ts +0 -159
  391. package/dist/source/connector-protocol.js +0 -161
  392. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  393. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  394. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  395. package/dist/transactions/mutation-error-handler.js +0 -39
  396. package/dist/transactions/optimistic.d.ts +0 -24
  397. package/dist/transactions/optimistic.js +0 -45
  398. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,30 +1,24 @@
1
1
  /**
2
- * `@abloatai/ablo/wire` canonical COMMIT-PATH frame contract.
2
+ * The write-path message shapes for the sync protocol. These cover the frames
3
+ * a client sends to commit work — {@link CommitMessage} (a batch of raw
4
+ * operations) and {@link MutationMessage} (a single named mutation) — and the
5
+ * server's {@link MutationResultMessage} acknowledgement. The same frames flow
6
+ * over a WebSocket connection and over the HTTP commit endpoint.
3
7
  *
4
- * These are the WebSocket (and HTTP-fallback) message shapes for the
5
- * write path: the client's `commit` / `mutation` frames and the server's
6
- * `mutation_result` ack. They live here not in the server app and not
7
- * inlined in the SDK's `SyncWebSocket` so the client, the server, and
8
- * any future `@abloatai/ablo/server` host all import ONE definition
9
- * and cannot drift.
10
- *
11
- * Scope note: the delta/sync frames (`sync_response`, `delta`) are NOT
12
- * here yet — they reference `SyncDelta`, which currently has two
13
- * definitions (server `db/deltas` vs package `core`) pending unification.
14
- * They stay server-local until that lands. Everything in this file
15
- * depends only on package-canonical types (`OnStaleMode`, `ErrorCode`,
16
- * `RequiredCapability`), so it is safe to share today.
17
- *
18
- * Changing any shape here is a wire-contract change — it requires
19
- * coordinated client + server updates.
8
+ * Both the client and the server import these definitions from here, so the two
9
+ * sides cannot drift. Each interface is paired with a Zod validator
10
+ * ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
11
+ * compile time, so the runtime check and the type stay in lockstep. Changing
12
+ * any shape in this file changes the wire contract and requires the client and
13
+ * server to update together.
20
14
  */
21
15
  import { z } from 'zod';
22
16
  import type { OnStaleMode, StaleNotification, ReadDependency } from '../coordination/index.js';
23
17
  import type { ErrorCode, RequiredCapability } from '../errors.js';
24
18
  /**
25
- * A single operation within a {@link CommitMessage} batch. The atomic unit
26
- * the server's commit executor applies (and, once the mutator seam lands,
27
- * the raw-op fallback path when no named mutator is registered).
19
+ * A single operation within a {@link CommitMessage} batch. Each operation is
20
+ * the smallest unit the server applies atomically one create, update,
21
+ * delete, archive, or unarchive against one model row.
28
22
  */
29
23
  export interface CommitOperation {
30
24
  type: 'CREATE' | 'UPDATE' | 'DELETE' | 'ARCHIVE' | 'UNARCHIVE';
@@ -32,45 +26,44 @@ export interface CommitOperation {
32
26
  id?: string | null;
33
27
  input?: Record<string, unknown> | null;
34
28
  /**
35
- * Per-op client transaction id. Stamped onto `sync_deltas.transaction_id`
36
- * so the originating client can recognize the broadcast as an echo of its
37
- * own optimistic mutation. Distinct from the batch-level `clientTxId`
38
- * (which keys `mutation_log` for retry idempotency).
29
+ * A client-generated transaction id for this one operation. The server
30
+ * stamps it onto the `sync_deltas.transaction_id` column so the originating
31
+ * client can recognize the resulting broadcast as an echo of its own
32
+ * optimistic write. This is distinct from the batch-level `clientTxId` on
33
+ * {@link CommitMessage}, which the server uses to deduplicate retried batches.
39
34
  */
40
35
  transactionId?: string | null;
41
36
  /**
42
- * Watermark from `context.capture`. The server checks whether the target
43
- * has received deltas since this id; if so the operation's `onStale` mode
44
- * applies.
37
+ * A read watermark captured when the client last read this row. The server
38
+ * checks whether the target has changed since this point; if it has, the
39
+ * operation's {@link CommitOperation.onStale} mode decides what happens.
45
40
  */
46
41
  readAt?: number | null;
47
42
  /**
48
- * Mode on stale detection (non-coercion). `'reject'` (default) throws
49
- * AbloStaleContextError; `'overwrite'` applies unconditionally (blind LWW);
50
- * `'notify'` holds the write and returns a `StaleNotification` for the actor
51
- * to resolve.
43
+ * What to do when the server detects the row changed since
44
+ * {@link CommitOperation.readAt}. `'reject'` (the default) fails the
45
+ * operation with a stale-context error; `'overwrite'` applies the write
46
+ * regardless; `'notify'` holds the write and returns a
47
+ * {@link StaleNotification} for the caller to resolve.
52
48
  */
53
49
  onStale?: OnStaleMode | null;
54
50
  /**
55
- * Write even if another participant holds a claim on this entity. The
56
- * default (`false`) rejects with `AbloClaimedError` when claimed `bypass`
57
- * is the explicit, recorded override, honored only for participants the
58
- * claim guard trusts (humans / framework identities; agent `bypass` is
59
- * ignored). Previously honored by the server's commit executor without
60
- * being declared here — the exact contract drift this file exists to
61
- * prevent.
51
+ * Write even when another participant holds a claim on this row. The default
52
+ * (`false`) rejects the operation with a claimed-entity error while a claim
53
+ * is held. Setting `bypass` overrides that, and the override is recorded. It
54
+ * is honored only for participants the claim guard trusts, such as human and
55
+ * framework identities; a bypass requested by an agent is ignored.
62
56
  */
63
57
  bypass?: boolean | null;
64
58
  }
65
59
  /**
66
- * Runtime validator for {@link CommitOperation} the per-op ingest gate both
67
- * commit transports (WS `commit` frame, HTTP `/v1/commits`) run before an
68
- * operation reaches the executor. Extends the canonical coordination-layer
69
- * schema (writeGuard `readAt`/`onStale`/`bypass` + op identity), widening only
70
- * `bypass` to `nullish` to match the interface (`boolean | null`).
71
- *
72
- * `readAt` is `z.number()` — a string watermark previously flowed into the
73
- * stale-guard SQL (`id > $3`) unvalidated.
60
+ * Runtime validator for {@link CommitOperation}. Both commit transports the
61
+ * WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
62
+ * on every operation before it is applied, so a malformed operation is rejected
63
+ * at the edge. It builds on the shared coordination schema, widening `bypass`
64
+ * to also accept `null` so the validator and the interface match exactly. Note
65
+ * that `readAt` must be a number: it feeds the server's stale-check comparison,
66
+ * so a non-numeric watermark is refused here.
74
67
  */
75
68
  export declare const commitOperationSchema: z.ZodObject<{
76
69
  readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
@@ -93,10 +86,10 @@ export declare const commitOperationSchema: z.ZodObject<{
93
86
  bypass: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
94
87
  }, z.core.$strip>;
95
88
  /**
96
- * Client Server single named-mutation frame. The named-mutator write
97
- * primitive (claim + args), as opposed to the raw-op {@link CommitMessage}
98
- * batch. Server-side mutator dispatch resolves `mutatorName` against the
99
- * host-provided registry.
89
+ * A client-to-server frame that invokes a single named mutation by name and
90
+ * arguments, as opposed to the raw operation batch in {@link CommitMessage}.
91
+ * The server resolves `mutatorName` against the set of mutations registered on
92
+ * it and runs the matching one.
100
93
  */
101
94
  export interface MutationMessage {
102
95
  type: 'mutation';
@@ -107,10 +100,10 @@ export interface MutationMessage {
107
100
  };
108
101
  }
109
102
  /**
110
- * Client Server "commit this batch of operations" frame. Formerly named
111
- * `batch_ack` / `BatchAckMessage` renamed pre-stable to the customer-facing
112
- * verb (`commit`) consistently across the wire and the SDK method
113
- * (`MutationExecutor.commit`).
103
+ * A client-to-server frame that asks the server to commit a batch of operations
104
+ * atomically. This is the raw-operation counterpart to {@link MutationMessage};
105
+ * it carries a list of {@link CommitOperation} entries plus the batch metadata
106
+ * below.
114
107
  */
115
108
  export interface CommitMessage {
116
109
  type: 'commit';
@@ -118,30 +111,28 @@ export interface CommitMessage {
118
111
  operations: CommitOperation[];
119
112
  clientTxId: string;
120
113
  /**
121
- * Dormant agent-task lineage field. The SDK no longer populates it
122
- * turns/tasks were removed and write attribution now rides on the
123
- * claim (`claim`) id plus the server-stamped actor/capability. Kept
124
- * optional for wire-compat; when present the Hub still validates and
125
- * threads it onto `caused_by_task_id`, but client writes leave it
126
- * `null` (the audit pane treats null as "no prompt-side context").
114
+ * Optional lineage id linking this batch to the task that caused it. When
115
+ * present, the server validates it and records it on the delta's
116
+ * `caused_by_task_id` column for audit trails; when omitted or `null`, the
117
+ * batch simply carries no task attribution.
127
118
  */
128
119
  causedByTaskId?: string | null;
129
120
  /**
130
- * Batch-level read dependencies (the STORM "did anything I looked at
131
- * change?" layer). Each entry is a row (`{model,id,readAt,fields?}`) or a
132
- * sync group (`{group,readAt}`) the batch's writes were premised on; the
133
- * server validates none moved since `readAt` and fires the entry's
134
- * `onStale` disposition over the batch. Omitted only write-targets are
135
- * checked (legacy behavior).
121
+ * The reads this batch's writes were premised on. Each entry names either a
122
+ * specific row (`{ model, id, readAt, fields? }`) or a sync group
123
+ * (`{ group, readAt }`) that must not have changed since its `readAt`
124
+ * watermark. The server checks every entry and applies its `onStale`
125
+ * disposition to the whole batch if one moved. When omitted, only the rows
126
+ * being written are checked for staleness.
136
127
  */
137
128
  reads?: ReadDependency[] | null;
138
129
  };
139
130
  }
140
131
  /**
141
- * Runtime validator for {@link CommitMessage}'s payload every field the
142
- * server's commit path actually honors (`operations`, `clientTxId`,
143
- * `causedByTaskId`, `reads`), each entry validated by
144
- * {@link commitOperationSchema} / the canonical `readDependencySchema`.
132
+ * Runtime validator for the payload of {@link CommitMessage}. It checks every
133
+ * field the server acts on `operations`, `clientTxId`, `causedByTaskId`, and
134
+ * `reads` — validating each operation with {@link commitOperationSchema} and
135
+ * each read dependency with the shared read-dependency schema.
145
136
  */
146
137
  export declare const commitPayloadSchema: z.ZodObject<{
147
138
  operations: z.ZodArray<z.ZodObject<{
@@ -187,13 +178,13 @@ export declare const commitPayloadSchema: z.ZodObject<{
187
178
  }, z.core.$strip>]>>>>;
188
179
  }, z.core.$strip>;
189
180
  /**
190
- * Wire ack for a `commit` frame. Payload mirrors the canonical
191
- * `CommitReceipt` shape so WebSocket, HTTP `/v1/commits`, and persisted
192
- * `AgentJob.result.receipt` all carry identical fields.
181
+ * The server's acknowledgement of a {@link CommitMessage}. Its payload mirrors
182
+ * the commit-receipt shape, so a commit acknowledged over a WebSocket, over the
183
+ * HTTP `/v1/commits` endpoint, or read back from a persisted job result all
184
+ * carry the same fields.
193
185
  *
194
- * `object`, `status`, and `ops` are typed optional because pre-unification
195
- * WS clients didn't ship them; servers always populate them on the way out.
196
- * New clients can rely on them.
186
+ * `object`, `status`, and `ops` are optional in the type but the server always
187
+ * populates them, so a current client can rely on them being present.
197
188
  */
198
189
  export interface MutationResultMessage {
199
190
  type: 'mutation_result';
@@ -206,25 +197,27 @@ export interface MutationResultMessage {
206
197
  lastSyncId?: number;
207
198
  ops?: number;
208
199
  /**
209
- * Stale-context notifications for `onStale: 'notify' ops whose
210
- * premise moved concurrently. Present only on a successful ack that hit a
211
- * notify-resolved conflict; the client surfaces these via the
212
- * `conflict:notified` event and the commit receipt instead of rejecting.
200
+ * Notifications for operations that used `onStale: 'notify'` and whose
201
+ * premise changed while the batch was being applied. Present only on a
202
+ * successful acknowledgement that resolved such a conflict; the client
203
+ * surfaces each one through its `conflict:notified` event and the commit
204
+ * receipt rather than failing the write.
213
205
  */
214
206
  notifications?: StaleNotification[];
215
207
  /**
216
- * Ids of UPDATE/DELETE targets that matched ZERO rows (don't exist or are
217
- * outside the org). Present (non-empty) only when a write missed. The
218
- * client turns this into a loud `AbloNotFoundError` for the affected
219
- * caller instead of treating the no-op as success.
208
+ * Ids of update or delete targets that matched no rows because they do
209
+ * not exist or fall outside the caller's organization. Present and
210
+ * non-empty only when a write missed. The client raises a not-found error
211
+ * for the affected caller rather than treating the no-op as a success.
220
212
  */
221
213
  missingIds?: string[];
222
214
  error?: {
223
215
  code: ErrorCode;
224
216
  message: string;
225
217
  field?: string;
226
- /** Structured rejection body (x402-style) emitted when the cap
227
- * verifier denies the commit. */
218
+ /** The capability the commit required but the caller lacked. Present when
219
+ * the commit was denied for want of a capability, so the client can tell
220
+ * the caller exactly what to obtain. */
228
221
  requiredCapability?: RequiredCapability;
229
222
  };
230
223
  };
@@ -1,48 +1,41 @@
1
1
  /**
2
- * `@abloatai/ablo/wire` canonical COMMIT-PATH frame contract.
2
+ * The write-path message shapes for the sync protocol. These cover the frames
3
+ * a client sends to commit work — {@link CommitMessage} (a batch of raw
4
+ * operations) and {@link MutationMessage} (a single named mutation) — and the
5
+ * server's {@link MutationResultMessage} acknowledgement. The same frames flow
6
+ * over a WebSocket connection and over the HTTP commit endpoint.
3
7
  *
4
- * These are the WebSocket (and HTTP-fallback) message shapes for the
5
- * write path: the client's `commit` / `mutation` frames and the server's
6
- * `mutation_result` ack. They live here not in the server app and not
7
- * inlined in the SDK's `SyncWebSocket` so the client, the server, and
8
- * any future `@abloatai/ablo/server` host all import ONE definition
9
- * and cannot drift.
10
- *
11
- * Scope note: the delta/sync frames (`sync_response`, `delta`) are NOT
12
- * here yet — they reference `SyncDelta`, which currently has two
13
- * definitions (server `db/deltas` vs package `core`) pending unification.
14
- * They stay server-local until that lands. Everything in this file
15
- * depends only on package-canonical types (`OnStaleMode`, `ErrorCode`,
16
- * `RequiredCapability`), so it is safe to share today.
17
- *
18
- * Changing any shape here is a wire-contract change — it requires
19
- * coordinated client + server updates.
8
+ * Both the client and the server import these definitions from here, so the two
9
+ * sides cannot drift. Each interface is paired with a Zod validator
10
+ * ({@link commitOperationSchema}, {@link commitPayloadSchema}) pinned to it at
11
+ * compile time, so the runtime check and the type stay in lockstep. Changing
12
+ * any shape in this file changes the wire contract and requires the client and
13
+ * server to update together.
20
14
  */
21
15
  import { z } from 'zod';
22
- // Runtime schema primitives come from the coordination LEAF module (a pure
23
- // zod file), not the barrel keeps `wire/` lean (zod-leaf runtime deps only).
16
+ // The runtime schema primitives are imported straight from the coordination
17
+ // schema module to keep this file's runtime dependencies limited to Zod.
24
18
  import { commitOperationSchema as coordinationCommitOperationSchema, readDependencySchema, } from '../coordination/schema.js';
25
19
  /**
26
- * Runtime validator for {@link CommitOperation} the per-op ingest gate both
27
- * commit transports (WS `commit` frame, HTTP `/v1/commits`) run before an
28
- * operation reaches the executor. Extends the canonical coordination-layer
29
- * schema (writeGuard `readAt`/`onStale`/`bypass` + op identity), widening only
30
- * `bypass` to `nullish` to match the interface (`boolean | null`).
31
- *
32
- * `readAt` is `z.number()` — a string watermark previously flowed into the
33
- * stale-guard SQL (`id > $3`) unvalidated.
20
+ * Runtime validator for {@link CommitOperation}. Both commit transports the
21
+ * WebSocket `commit` frame and the HTTP `/v1/commits` endpoint — run this check
22
+ * on every operation before it is applied, so a malformed operation is rejected
23
+ * at the edge. It builds on the shared coordination schema, widening `bypass`
24
+ * to also accept `null` so the validator and the interface match exactly. Note
25
+ * that `readAt` must be a number: it feeds the server's stale-check comparison,
26
+ * so a non-numeric watermark is refused here.
34
27
  */
35
28
  export const commitOperationSchema = coordinationCommitOperationSchema.extend({
36
29
  bypass: z.boolean().nullish(),
37
30
  });
38
- // z.infer-bound: the schema and the interface cannot drift in either direction.
31
+ // Pins the schema to the interface: this fails to compile if either side drifts.
39
32
  const _commitOperationContract = true;
40
33
  void _commitOperationContract;
41
34
  /**
42
- * Runtime validator for {@link CommitMessage}'s payload every field the
43
- * server's commit path actually honors (`operations`, `clientTxId`,
44
- * `causedByTaskId`, `reads`), each entry validated by
45
- * {@link commitOperationSchema} / the canonical `readDependencySchema`.
35
+ * Runtime validator for the payload of {@link CommitMessage}. It checks every
36
+ * field the server acts on `operations`, `clientTxId`, `causedByTaskId`, and
37
+ * `reads` — validating each operation with {@link commitOperationSchema} and
38
+ * each read dependency with the shared read-dependency schema.
46
39
  */
47
40
  export const commitPayloadSchema = z.object({
48
41
  operations: z.array(commitOperationSchema),
@@ -50,6 +43,6 @@ export const commitPayloadSchema = z.object({
50
43
  causedByTaskId: z.string().nullish(),
51
44
  reads: z.array(readDependencySchema).nullish(),
52
45
  });
53
- // z.infer-bound: payload schema and CommitMessage['payload'] cannot drift.
46
+ // Pins the schema to the payload type: fails to compile if either side drifts.
54
47
  const _commitPayloadContract = true;
55
48
  void _commitPayloadContract;
@@ -1,19 +1,19 @@
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';
@@ -22,6 +22,8 @@ export type { ListEnvelope } from './listEnvelope.js';
22
22
  export { commitOperationSchema, commitPayloadSchema } from './frames.js';
23
23
  export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, } from './protocolVersion.js';
24
24
  export type { CommitOperation, MutationMessage, CommitMessage, MutationResultMessage, } from './frames.js';
25
+ export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from './delta.js';
26
+ export type { ParticipantKind, ConfirmationState, SyncDeltaAction, WireDeltaData, ParticipantRef, SyncDeltaWireCore, ClientSyncDelta, ServerSyncDelta, } from './delta.js';
25
27
  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
28
  export type { ErrorCode, WireErrorCode } from '../errors.js';
27
29
  export { PING_INTERVAL_MS, LEASE_TTL_MS, WS_BEARER_SUBPROTOCOL_PREFIX, WS_SYNC_SUBPROTOCOL, } from './protocol.js';
@@ -1,40 +1,44 @@
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
+ // The write-path frame contract: the message shapes shared by the client and
21
+ // the server. The runtime Zod validators sit beside the interfaces and are
22
+ // pinned to them, and they gate every operation and payload on both commit
24
23
  // transports.
25
24
  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
+ // Protocol versioning: the single integer the client and server compare to
26
+ // confirm they can speak to each other, plus the WebSocket close code used to
27
+ // reject a mismatch. See protocolVersion.ts for the changelog and deploy rules.
29
28
  export { PROTOCOL_VERSION, MIN_SUPPORTED_PROTOCOL_VERSION, WS_CLOSE_PROTOCOL_VERSION, PROTOCOL_VERSION_HEADER, protocolVersionProblem, } from './protocolVersion.js';
29
+ // The read-path delta contract: the shape the server broadcasts to clients as the
30
+ // payload of a `delta` or `sync_response` frame, together with the shared
31
+ // participant vocabulary it carries. Both ends derive their delta type from these
32
+ // schemas, so the client and server cannot drift apart.
33
+ export { participantKindSchema, confirmationStateSchema, syncDeltaActionSchema, wireDeltaDataSchema, participantRefSchema, syncDeltaWireCoreSchema, clientSyncDeltaSchema, serverSyncDeltaSchema, } from './delta.js';
30
34
  // The error surface a wire consumer needs to throw, classify, and serialize.
31
35
  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).
36
+ // The table mapping each error code to its HTTP status and retryable flag —
37
+ // plain data a server can use to resolve a code's canonical status the same
38
+ // way the client's error serializer does.
35
39
  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.
40
+ // Protocol timing constants — the 30-second ping cadence and the lease window
41
+ // derived from it, shared by the client heartbeat and the server keepalive,
42
+ // claim leasing, and presence expiry (see protocol.ts) — plus the WebSocket
43
+ // subprotocols used during the authenticated handshake.
40
44
  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 {