@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,36 +1,32 @@
1
1
  /**
2
- * Tenancy — the single source of truth for how a model's rows are scoped to a
3
- * tenant. There are exactly two layers here, and keeping them separate is the
4
- * whole point:
2
+ * Defines how a model's rows are scoped to a tenant. Two forms live here, and the
3
+ * separation between them is deliberate:
5
4
  *
6
- * 1. The CANONICAL form {@link Tenancy}, a Zod discriminated union. This is
7
- * what every consumer (provision/RLS, introspection, runtime, CLI) reads
8
- * and what crosses the wire in `ModelJSON`. One shape, exhaustively
9
- * switchable, so the type system holds the isolation boundary.
10
- * 2. The AUTHORING form — {@link PolicyInput}, the `policy: { by }` option a
11
- * schema author writes. The name follows Postgres/Supabase RLS vocabulary:
12
- * a `policy` is the rule that decides which rows a tenant may read.
13
- * {@link resolvePolicy} maps it to the canonical {@link Tenancy} at
14
- * `model()`-build time (much as Supabase's `create policy` compiles to a
15
- * `pg_policy` row), so the authoring vocabulary never reaches the wire or
16
- * any consumer.
5
+ * 1. The canonical form, {@link Tenancy} a discriminated union that every
6
+ * consumer reads (provisioning and row-level security, introspection, the
7
+ * runtime, and the CLI) and the shape that crosses the wire in `ModelJSON`.
8
+ * One exhaustively switchable shape, so the type system enforces the isolation
9
+ * boundary.
10
+ * 2. The authoring form, {@link PolicyInput} — the `policy: { by }` option a
11
+ * schema author writes. The name follows SQL row-level security, where a
12
+ * policy is the rule that decides which rows a tenant may read.
13
+ * {@link resolvePolicy} converts it to the canonical {@link Tenancy} when the
14
+ * model is built, so the authoring vocabulary never reaches the wire or any
15
+ * consumer.
17
16
  *
18
- * Why one authoring option (`policy`) instead of the old
19
- * `orgScoped`/`scopedVia`/`orgColumn` trio: those three were synonyms for one
20
- * decision ("how is this row scoped?"), and the most dangerous of them
21
- * (`orgScoped: false`) silently exposed a whole table cross-tenant. Collapsing
22
- * them into a single discriminated union makes the opt-out (`{ by: 'none' }`) a
23
- * loud, deliberate branch instead of a falsy flag — one concept, one name.
17
+ * Both forms discriminate on a single tag, which makes the opt-out from tenant
18
+ * scoping (`{ by: 'none' }`) an explicit, named branch rather than a falsy flag —
19
+ * important, because that branch makes an entire table readable across tenants.
24
20
  */
25
21
  import { z } from 'zod';
26
- /** Default physical tenancy column. The ONLY place this literal is canonical. */
22
+ /** The default physical tenancy column. This is the single canonical definition of that column name. */
27
23
  export declare const DEFAULT_ORG_COLUMN = "organization_id";
28
24
  /**
29
- * Scope a table's rows through a parent table (for rows that carry no tenancy
30
- * column of their own e.g. `slide_layers` → slide deck org). This is the
31
- * CANONICAL `parent` payload; authors write the friendlier {@link PolicyInput}
32
- * `{ by: 'parent', fk, parent }` shape, normalized into this by
33
- * {@link resolvePolicy}.
25
+ * Scopes a table's rows through a parent table, for rows that carry no tenancy
26
+ * column of their own (for example, slide layers scoped through their slide, deck,
27
+ * and organization). This is the canonical `parent` payload; authors write the
28
+ * friendlier {@link PolicyInput} `{ by: 'parent', fk, parent }` form, which
29
+ * {@link resolvePolicy} normalizes into this.
34
30
  */
35
31
  export declare const scopedViaRefSchema: z.ZodObject<{
36
32
  localKey: z.ZodString;
@@ -39,7 +35,7 @@ export declare const scopedViaRefSchema: z.ZodObject<{
39
35
  parentOrgColumn: z.ZodOptional<z.ZodString>;
40
36
  }, z.core.$strip>;
41
37
  export type ScopedViaRef = z.infer<typeof scopedViaRefSchema>;
42
- /** How a model's rows are scoped to a tenant — the CANONICAL, wire-facing form. */
38
+ /** How a model's rows are scoped to a tenant — the canonical, wire-facing form. */
43
39
  export declare const tenancySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
44
40
  kind: z.ZodLiteral<"column">;
45
41
  column: z.ZodString;
@@ -56,19 +52,19 @@ export declare const tenancySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
56
52
  }, z.core.$strip>], "kind">;
57
53
  export type Tenancy = z.infer<typeof tenancySchema>;
58
54
  /**
59
- * The AUTHORING form of tenancy — what a schema author writes as the model's
60
- * `policy` option (Postgres/Supabase RLS vocabulary: a policy is the rule that
61
- * scopes which rows a tenant may read). A Zod discriminated union on `by`, so
62
- * the three branches are mutually exclusive and the dangerous opt-out
55
+ * The authoring form of tenancy — what a schema author writes as the model's
56
+ * `policy` option. The name follows SQL row-level security, where a policy is the
57
+ * rule that decides which rows a tenant may read. It is a discriminated union on
58
+ * `by`, so the three branches are mutually exclusive and the opt-out
63
59
  * (`{ by: 'none' }`) is an explicit, named choice rather than a falsy flag.
64
60
  *
65
- * - `{ by: 'column' }` — row-local tenancy column (the default).
66
- * `column` overrides the name (default {@link DEFAULT_ORG_COLUMN}).
61
+ * - `{ by: 'column' }` a row-local tenancy column (the default). `column`
62
+ * overrides the name (default {@link DEFAULT_ORG_COLUMN}).
67
63
  * - `{ by: 'parent', fk, parent }` — inherit tenancy through a foreign key when
68
- * this table has no tenancy column of its own. `parentKey` (default `'id'`)
69
- * and `parentTenantColumn` (default {@link DEFAULT_ORG_COLUMN}) are overrides.
70
- * - `{ by: 'none' }` — genuinely global / reference data. Makes
71
- * the whole table readable cross-tenant only correct for tenant-less tables.
64
+ * this table has no tenancy column of its own. `parentKey` (default `'id'`) and
65
+ * `parentTenantColumn` (default {@link DEFAULT_ORG_COLUMN}) are optional overrides.
66
+ * - `{ by: 'none' }` — genuinely global or reference data. This makes the whole
67
+ * table readable across tenants, so it is correct only for tables that have no tenant.
72
68
  */
73
69
  export declare const policyInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
74
70
  by: z.ZodLiteral<"column">;
@@ -84,19 +80,21 @@ export declare const policyInputSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
84
80
  }, z.core.$strip>], "by">;
85
81
  export type PolicyInput = z.infer<typeof policyInputSchema>;
86
82
  /**
87
- * Normalize the authoring {@link PolicyInput} into the one canonical
88
- * {@link Tenancy}. Called once, at `model()`-build, so `ModelDef`/`ModelJSON`
89
- * and every consumer see only the canonical union. Omitting `policy` defaults
90
- * to a row-local `organization_id` column.
83
+ * Normalizes the authoring {@link PolicyInput} into the canonical {@link Tenancy}.
84
+ * Called once, when the model is built, so that `ModelDef`, `ModelJSON`, and every
85
+ * consumer see only the canonical union. Omitting `policy` defaults to a row-local
86
+ * `organization_id` column.
91
87
  */
92
88
  export declare function resolvePolicy(input?: PolicyInput): Tenancy;
93
89
  /**
94
- * Read the canonical {@link Tenancy} off an already-built model def (or parsed
95
- * `ModelJSON`), defaulting to a row-local `organization_id` column when absent.
90
+ * Reads the canonical {@link Tenancy} off an already-built model definition (or a
91
+ * parsed `ModelJSON`), defaulting to a row-local `organization_id` column when it is
92
+ * absent.
96
93
  *
97
- * This is the READ-side helper — consumers (provision/RLS, membership resolver,
98
- * DDL, CLI) call it to get a model's tenancy without re-deriving the default in
99
- * each place. It is NOT the authoring normalizer; that's {@link resolveIsolation}.
94
+ * This is the read-side helper. Consumers provisioning and row-level security, the
95
+ * membership resolver, DDL generation, and the CLI call it to get a model's
96
+ * tenancy without re-deriving the default each time. It is not the authoring
97
+ * normalizer; that is {@link resolvePolicy}.
100
98
  */
101
99
  export declare function resolveTenancy(def: {
102
100
  tenancy?: Tenancy;
@@ -1,39 +1,35 @@
1
1
  /**
2
- * Tenancy — the single source of truth for how a model's rows are scoped to a
3
- * tenant. There are exactly two layers here, and keeping them separate is the
4
- * whole point:
2
+ * Defines how a model's rows are scoped to a tenant. Two forms live here, and the
3
+ * separation between them is deliberate:
5
4
  *
6
- * 1. The CANONICAL form {@link Tenancy}, a Zod discriminated union. This is
7
- * what every consumer (provision/RLS, introspection, runtime, CLI) reads
8
- * and what crosses the wire in `ModelJSON`. One shape, exhaustively
9
- * switchable, so the type system holds the isolation boundary.
10
- * 2. The AUTHORING form — {@link PolicyInput}, the `policy: { by }` option a
11
- * schema author writes. The name follows Postgres/Supabase RLS vocabulary:
12
- * a `policy` is the rule that decides which rows a tenant may read.
13
- * {@link resolvePolicy} maps it to the canonical {@link Tenancy} at
14
- * `model()`-build time (much as Supabase's `create policy` compiles to a
15
- * `pg_policy` row), so the authoring vocabulary never reaches the wire or
16
- * any consumer.
5
+ * 1. The canonical form, {@link Tenancy} a discriminated union that every
6
+ * consumer reads (provisioning and row-level security, introspection, the
7
+ * runtime, and the CLI) and the shape that crosses the wire in `ModelJSON`.
8
+ * One exhaustively switchable shape, so the type system enforces the isolation
9
+ * boundary.
10
+ * 2. The authoring form, {@link PolicyInput} — the `policy: { by }` option a
11
+ * schema author writes. The name follows SQL row-level security, where a
12
+ * policy is the rule that decides which rows a tenant may read.
13
+ * {@link resolvePolicy} converts it to the canonical {@link Tenancy} when the
14
+ * model is built, so the authoring vocabulary never reaches the wire or any
15
+ * consumer.
17
16
  *
18
- * Why one authoring option (`policy`) instead of the old
19
- * `orgScoped`/`scopedVia`/`orgColumn` trio: those three were synonyms for one
20
- * decision ("how is this row scoped?"), and the most dangerous of them
21
- * (`orgScoped: false`) silently exposed a whole table cross-tenant. Collapsing
22
- * them into a single discriminated union makes the opt-out (`{ by: 'none' }`) a
23
- * loud, deliberate branch instead of a falsy flag — one concept, one name.
17
+ * Both forms discriminate on a single tag, which makes the opt-out from tenant
18
+ * scoping (`{ by: 'none' }`) an explicit, named branch rather than a falsy flag —
19
+ * important, because that branch makes an entire table readable across tenants.
24
20
  */
25
21
  import { z } from 'zod';
26
- /** Default physical tenancy column. The ONLY place this literal is canonical. */
22
+ /** The default physical tenancy column. This is the single canonical definition of that column name. */
27
23
  export const DEFAULT_ORG_COLUMN = 'organization_id';
28
24
  /**
29
- * Scope a table's rows through a parent table (for rows that carry no tenancy
30
- * column of their own e.g. `slide_layers` → slide deck org). This is the
31
- * CANONICAL `parent` payload; authors write the friendlier {@link PolicyInput}
32
- * `{ by: 'parent', fk, parent }` shape, normalized into this by
33
- * {@link resolvePolicy}.
25
+ * Scopes a table's rows through a parent table, for rows that carry no tenancy
26
+ * column of their own (for example, slide layers scoped through their slide, deck,
27
+ * and organization). This is the canonical `parent` payload; authors write the
28
+ * friendlier {@link PolicyInput} `{ by: 'parent', fk, parent }` form, which
29
+ * {@link resolvePolicy} normalizes into this.
34
30
  */
35
31
  export const scopedViaRefSchema = z.object({
36
- /** Column on THIS table pointing at the parent (e.g. `'team_id'`). */
32
+ /** Column on this table that points at the parent (for example, `'team_id'`). */
37
33
  localKey: z.string().min(1),
38
34
  /** Parent table name (e.g. `'team'`). */
39
35
  parentTable: z.string().min(1),
@@ -42,7 +38,7 @@ export const scopedViaRefSchema = z.object({
42
38
  /** Column on the parent holding the tenant id. Default {@link DEFAULT_ORG_COLUMN}. */
43
39
  parentOrgColumn: z.string().min(1).optional(),
44
40
  });
45
- /** How a model's rows are scoped to a tenant — the CANONICAL, wire-facing form. */
41
+ /** How a model's rows are scoped to a tenant — the canonical, wire-facing form. */
46
42
  export const tenancySchema = z.discriminatedUnion('kind', [
47
43
  /** Row-local tenancy column (default name `organization_id`, overridable). */
48
44
  z.object({ kind: z.literal('column'), column: z.string().min(1) }),
@@ -52,19 +48,19 @@ export const tenancySchema = z.discriminatedUnion('kind', [
52
48
  z.object({ kind: z.literal('none') }),
53
49
  ]);
54
50
  /**
55
- * The AUTHORING form of tenancy — what a schema author writes as the model's
56
- * `policy` option (Postgres/Supabase RLS vocabulary: a policy is the rule that
57
- * scopes which rows a tenant may read). A Zod discriminated union on `by`, so
58
- * the three branches are mutually exclusive and the dangerous opt-out
51
+ * The authoring form of tenancy — what a schema author writes as the model's
52
+ * `policy` option. The name follows SQL row-level security, where a policy is the
53
+ * rule that decides which rows a tenant may read. It is a discriminated union on
54
+ * `by`, so the three branches are mutually exclusive and the opt-out
59
55
  * (`{ by: 'none' }`) is an explicit, named choice rather than a falsy flag.
60
56
  *
61
- * - `{ by: 'column' }` — row-local tenancy column (the default).
62
- * `column` overrides the name (default {@link DEFAULT_ORG_COLUMN}).
57
+ * - `{ by: 'column' }` a row-local tenancy column (the default). `column`
58
+ * overrides the name (default {@link DEFAULT_ORG_COLUMN}).
63
59
  * - `{ by: 'parent', fk, parent }` — inherit tenancy through a foreign key when
64
- * this table has no tenancy column of its own. `parentKey` (default `'id'`)
65
- * and `parentTenantColumn` (default {@link DEFAULT_ORG_COLUMN}) are overrides.
66
- * - `{ by: 'none' }` — genuinely global / reference data. Makes
67
- * the whole table readable cross-tenant only correct for tenant-less tables.
60
+ * this table has no tenancy column of its own. `parentKey` (default `'id'`) and
61
+ * `parentTenantColumn` (default {@link DEFAULT_ORG_COLUMN}) are optional overrides.
62
+ * - `{ by: 'none' }` — genuinely global or reference data. This makes the whole
63
+ * table readable across tenants, so it is correct only for tables that have no tenant.
68
64
  */
69
65
  export const policyInputSchema = z.discriminatedUnion('by', [
70
66
  z.object({
@@ -74,7 +70,7 @@ export const policyInputSchema = z.discriminatedUnion('by', [
74
70
  }),
75
71
  z.object({
76
72
  by: z.literal('parent'),
77
- /** Column on THIS table pointing at the parent (e.g. `'slideId'`). */
73
+ /** Column on this table that points at the parent (for example, `'slideId'`). */
78
74
  fk: z.string().min(1),
79
75
  /** Parent table name (e.g. `'slides'`). */
80
76
  parent: z.string().min(1),
@@ -86,10 +82,10 @@ export const policyInputSchema = z.discriminatedUnion('by', [
86
82
  z.object({ by: z.literal('none') }),
87
83
  ]);
88
84
  /**
89
- * Normalize the authoring {@link PolicyInput} into the one canonical
90
- * {@link Tenancy}. Called once, at `model()`-build, so `ModelDef`/`ModelJSON`
91
- * and every consumer see only the canonical union. Omitting `policy` defaults
92
- * to a row-local `organization_id` column.
85
+ * Normalizes the authoring {@link PolicyInput} into the canonical {@link Tenancy}.
86
+ * Called once, when the model is built, so that `ModelDef`, `ModelJSON`, and every
87
+ * consumer see only the canonical union. Omitting `policy` defaults to a row-local
88
+ * `organization_id` column.
93
89
  */
94
90
  export function resolvePolicy(input) {
95
91
  if (!input)
@@ -112,12 +108,14 @@ export function resolvePolicy(input) {
112
108
  }
113
109
  }
114
110
  /**
115
- * Read the canonical {@link Tenancy} off an already-built model def (or parsed
116
- * `ModelJSON`), defaulting to a row-local `organization_id` column when absent.
111
+ * Reads the canonical {@link Tenancy} off an already-built model definition (or a
112
+ * parsed `ModelJSON`), defaulting to a row-local `organization_id` column when it is
113
+ * absent.
117
114
  *
118
- * This is the READ-side helper — consumers (provision/RLS, membership resolver,
119
- * DDL, CLI) call it to get a model's tenancy without re-deriving the default in
120
- * each place. It is NOT the authoring normalizer; that's {@link resolveIsolation}.
115
+ * This is the read-side helper. Consumers provisioning and row-level security, the
116
+ * membership resolver, DDL generation, and the CLI call it to get a model's
117
+ * tenancy without re-deriving the default each time. It is not the authoring
118
+ * normalizer; that is {@link resolvePolicy}.
121
119
  */
122
120
  export function resolveTenancy(def) {
123
121
  return def.tenancy ?? { kind: 'column', column: DEFAULT_ORG_COLUMN };
@@ -1,39 +1,39 @@
1
1
  /**
2
- * `@abloatai/ablo/server` — the DataAdapter CONTRACT vocabulary.
2
+ * `@abloatai/ablo/server` — the `DataAdapter` storage contract.
3
3
  *
4
- * This is the Better-Auth-style seam: the package defines the storage
5
- * interface and its value types; a host (today `apps/sync-server`, tomorrow a
6
- * consumer's app) implements it against a real database. The reference Postgres
7
- * implementation (`executeCommit` + `selectAdapter`) stays host-side it
8
- * carries a `postgres` driver and raw SQL, which must never enter this
9
- * browser-shippable package.
4
+ * A `DataAdapter` is the boundary between the sync engine and a database. The
5
+ * engine asks it to do three things `read` canonical rows, `commit` a change,
6
+ * and `sync` the change log and expects nothing beyond that. Everything
7
+ * higher up, such as proposing a change or resolving a conflict, is handled
8
+ * before the adapter is ever called.
10
9
  *
11
- * Scope note: this file holds the parts of the contract that are PURE — they
12
- * depend only on primitives and {@link Row}. The full `DataAdapter` interface
13
- * (and its `sync()` method) references `SyncDelta`, which currently has two
14
- * definitions (server `db/deltas` vs package `core`) pending unification; the
15
- * `commit`/`read` request envelopes reference server domain types
16
- * (`CommitContext`, `BootstrapModel`). Those stay server-local and re-import
17
- * these primitives until that canonicalization lands.
10
+ * This module declares the contract and the value types that travel through it;
11
+ * you supply the implementation for your own database. The reference Postgres
12
+ * implementation ships separately, because it carries a SQL driver and raw
13
+ * queries that have no place in this browser-safe build.
14
+ *
15
+ * Every shape here builds on {@link Row}, the single canonical form of a
16
+ * database row that the rest of the engine reads and writes.
18
17
  */
19
18
  import type { SourceListQuery, SourceOperation, SourceRequestContext } from '../source/index.js';
20
- import type { ServerSyncDelta } from '../schema/sync-delta-wire.js';
21
- import type { BootstrapModel } from './read-config.js';
19
+ import type { ServerSyncDelta } from '../wire/delta.js';
20
+ import type { BootstrapModel } from './readConfig.js';
22
21
  import type { CommitContext, CommitResult } from './commit.js';
23
- import type { StorageMode } from './storage-mode.js';
22
+ import type { StorageMode } from './storageMode.js';
24
23
  /**
25
- * A canonical row one model record keyed by column name. The VALUE type is
26
- * `unknown`, on purpose and as a best practice: a row's columns are JSONB /
27
- * driver-dynamic, so `unknown` forces callers to narrow before use (the safe
28
- * opposite of `any`). This is the single named domain type for "a row"; nothing
29
- * in the spine uses a bare `unknown[]`. When the schema engine emits per-model
30
- * types, `read<T>()` can narrow this to `T` without touching call sites.
24
+ * A canonical database row: one record, keyed by column name. The value type is
25
+ * `unknown` by design, not `any` columns arrive as JSON or in whatever form
26
+ * the driver hands back, so a caller must narrow a value before using it. Reach
27
+ * for this type wherever a row is passed around; it is the one name for that
28
+ * shape, and a later schema-typed `read<T>()` can specialize it to a concrete
29
+ * model without changing any call site.
31
30
  */
32
31
  export type Row = Record<string, unknown>;
33
32
  /**
34
- * The result of a {@link Row} read. Two shapes mirror the two request kinds:
35
- * - `bootstrap`: full-load — model name → its rows (empty models omitted).
36
- * - `query`: a single filtered model query.
33
+ * The result of a {@link Row} read. Its two shapes mirror the two kinds of
34
+ * {@link ReadRequest}:
35
+ * - `bootstrap`: a full load, returned as a map from model name to its rows.
36
+ * - `query`: the rows of a single filtered query.
37
37
  */
38
38
  export type ReadResult = {
39
39
  readonly kind: 'bootstrap';
@@ -46,11 +46,12 @@ export type ReadResult = {
46
46
  readonly rows: readonly Row[];
47
47
  };
48
48
  /**
49
- * Resume position for `sync` the client's last-seen `sync_deltas` watermark.
50
- * Deliberately JUST the position: org / syncGroups / maxGap are server-derived
51
- * and bound onto the adapter at resolve time (a trust boundary the client
52
- * never supplies the org it reads). `lastSyncId <= 0` means "no position yet",
53
- * which `sync` reports as `needsFullRead`.
49
+ * Where a `sync` call resumes: the client's last-seen position in the
50
+ * `sync_deltas` change log. The cursor carries only that position. Everything
51
+ * else a sync needs the organization, the sync groups, the largest gap it
52
+ * will stream — is bound onto the adapter when it is resolved, so a client can
53
+ * never ask to read an organization other than its own. A `lastSyncId` of zero
54
+ * or less means "no position yet", which `sync` answers with `needsFullRead`.
54
55
  */
55
56
  export interface SyncCursor {
56
57
  readonly lastSyncId: number;
@@ -76,14 +77,16 @@ export interface ProposalResult {
76
77
  readonly rows?: readonly Row[];
77
78
  }
78
79
  /**
79
- * A request for canonical rows. Two shapes:
80
- * - `bootstrap`: the full-load reader — give me every (enabled) model's rows.
81
- * - `query`: a single filtered model query (the live `/sync/query` path).
80
+ * A request for canonical rows, in one of two shapes:
81
+ * - `bootstrap`: the full-load reader — every enabled model's rows at once.
82
+ * - `query`: a single filtered query against one model, used by the live
83
+ * `/sync/query` path.
82
84
  *
83
- * The `query` shape keeps the hosted SQL/tenant/RLS execution as a `runHosted`
84
- * closure (same seam as a commit's `runHosted`): the adapter DISPATCHES source
85
- * the customer's `list`, hosted/selfHosted run the closure but the query
86
- * engine itself stays host-side rather than leaking into the adapter.
85
+ * A `query` carries its own execution as the `runHosted` closure, the same way
86
+ * a {@link ChangeSet} carries its write. This lets the adapter decide how to
87
+ * answer the request a data source runs the customer's `list`, a hosted
88
+ * database runs the closure without the query engine itself having to live
89
+ * inside the adapter.
87
90
  */
88
91
  export type ReadRequest = {
89
92
  readonly kind: 'bootstrap';
@@ -99,16 +102,15 @@ export type ReadRequest = {
99
102
  readonly typename: string;
100
103
  readonly query: SourceListQuery;
101
104
  readonly scope?: SourceRequestContext;
102
- /** Hosted/self-hosted execution (compile + tenant pool + RLS + unpack). */
105
+ /** Runs the query against a hosted database: compile, take the tenant pool, apply row-level security, unpack the rows. */
103
106
  readonly runHosted: () => Promise<Row[]>;
104
107
  };
105
108
  /**
106
- * A change to apply to the canonical store. `runHosted` is the pre-bound local
107
- * mutator execution (the hosted/self-hosted write path lives in the mutator
108
- * engine above the adapter); the hosted adapter simply runs it, while the source
109
- * adapter ignores it and ships the operations to the customer endpoint. This is
110
- * the seam that lets the adapter OWN the mode decision while the heavy mutator
111
- * logic stays host-side.
109
+ * A change to apply to the canonical store. `runHosted` holds the write already
110
+ * bound to its execution: a hosted adapter simply runs it, while a data-source
111
+ * adapter ignores it and ships the operations to the customer's own endpoint.
112
+ * The adapter therefore decides how a change is applied, while the write logic
113
+ * itself is prepared above it.
112
114
  */
113
115
  export interface ChangeSet {
114
116
  readonly operations: readonly SourceOperation[];
@@ -126,30 +128,28 @@ export interface SyncResult {
126
128
  readonly needsFullRead: boolean;
127
129
  }
128
130
  /**
129
- * The ONE interface every storage mode implements the Better-Auth-style
130
- * `Adapter` seam. The package owns this contract; a host (today
131
- * `apps/sync-server`, tomorrow a consumer app) implements it against a real
132
- * database. Design rule (load-bearing, = Zero's mutator principle): **adapters
133
- * only guarantee reality access.** `read` fetches canonical rows, `commit`
134
- * applies a change, `sync` reads the change log; orchestration (proposal,
135
- * conflict policy) lives ABOVE the adapter. `propose` is a capability, never a
136
- * required method.
131
+ * The interface every storage mode implements. The package defines the
132
+ * contract; you implement it against your own database. An adapter is
133
+ * responsible for one thing reaching the data and offers exactly three
134
+ * methods to do it: `read` fetches canonical rows, `commit` applies a change,
135
+ * and `sync` reads the change log. Anything above that line, such as proposing
136
+ * a change or resolving a conflict, happens before the adapter is called.
137
+ * `propose` is an optional capability, not a required method.
137
138
  */
138
139
  export interface DataAdapter {
139
- /** Diagnostic discriminator (≈ Better Auth's `adapterId`). Routing decisions
140
- * go through the resolver/factory, not this. */
140
+ /** Names the adapter's storage mode, for diagnostics. Routing is decided by
141
+ * the resolver, not by reading this field. */
141
142
  readonly mode: StorageMode;
142
143
  readonly capabilities: DataAdapterCapabilities;
143
144
  read(req: ReadRequest): Promise<ReadResult>;
144
145
  commit(change: ChangeSet): Promise<CommitResult>;
145
146
  sync(cursor: SyncCursor): Promise<SyncResult>;
146
147
  }
147
- /** An adapter whose backend can dry-run. Narrow to this only after checking the capability. */
148
+ /** A `DataAdapter` whose backend can dry-run a change. Narrow to this only after confirming the `propose` capability. */
148
149
  export interface ProposableDataAdapter extends DataAdapter {
149
150
  propose(change: ChangeSet): Promise<ProposalResult>;
150
151
  }
151
- /** Resolves an authenticated scope to the adapter that serves it (≈ Better Auth's
152
- * `createAdapter` factory seam). */
152
+ /** Resolves an authenticated scope to the adapter that serves it. */
153
153
  export type AdapterResolver = (scope: {
154
154
  readonly projectId: string;
155
155
  readonly accountScope?: string;
@@ -1,19 +1,18 @@
1
1
  /**
2
- * `@abloatai/ablo/server` — the DataAdapter CONTRACT vocabulary.
2
+ * `@abloatai/ablo/server` — the `DataAdapter` storage contract.
3
3
  *
4
- * This is the Better-Auth-style seam: the package defines the storage
5
- * interface and its value types; a host (today `apps/sync-server`, tomorrow a
6
- * consumer's app) implements it against a real database. The reference Postgres
7
- * implementation (`executeCommit` + `selectAdapter`) stays host-side it
8
- * carries a `postgres` driver and raw SQL, which must never enter this
9
- * browser-shippable package.
4
+ * A `DataAdapter` is the boundary between the sync engine and a database. The
5
+ * engine asks it to do three things `read` canonical rows, `commit` a change,
6
+ * and `sync` the change log and expects nothing beyond that. Everything
7
+ * higher up, such as proposing a change or resolving a conflict, is handled
8
+ * before the adapter is ever called.
10
9
  *
11
- * Scope note: this file holds the parts of the contract that are PURE — they
12
- * depend only on primitives and {@link Row}. The full `DataAdapter` interface
13
- * (and its `sync()` method) references `SyncDelta`, which currently has two
14
- * definitions (server `db/deltas` vs package `core`) pending unification; the
15
- * `commit`/`read` request envelopes reference server domain types
16
- * (`CommitContext`, `BootstrapModel`). Those stay server-local and re-import
17
- * these primitives until that canonicalization lands.
10
+ * This module declares the contract and the value types that travel through it;
11
+ * you supply the implementation for your own database. The reference Postgres
12
+ * implementation ships separately, because it carries a SQL driver and raw
13
+ * queries that have no place in this browser-safe build.
14
+ *
15
+ * Every shape here builds on {@link Row}, the single canonical form of a
16
+ * database row that the rest of the engine reads and writes.
18
17
  */
19
18
  export {};