@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,126 +1,122 @@
1
1
  /**
2
- * `@abloatai/ablo/server` the COMMIT contract types.
2
+ * The commit contract types for the sync engine's server surface.
3
3
  *
4
- * `CommitContext` is the attribution/claim envelope the host's commit executor
5
- * stamps onto every delta a batch produces; `CommitResult` is the receipt. Both
6
- * are PURE descriptors (no `postgres`, no SQL, no functions), which is why they
7
- * live in the portable package while the SQL engine that consumes them
8
- * (`executeCommit`) stays host-side. They feed the `ChangeSet`/`DataAdapter`
9
- * contract.
4
+ * {@link CommitContext} is the attribution envelope stamped onto every delta a
5
+ * commit produces; {@link CommitResult} is the receipt returned when the commit
6
+ * finishes. Both are plain data descriptors no database driver, no SQL, no
7
+ * functions so they belong to this package's public contract, which your commit
8
+ * implementation reads and writes. They feed the `ChangeSet` and `DataAdapter`
9
+ * contracts defined alongside them.
10
10
  *
11
- * The attribution fields reuse the canonical `ParticipantKind` /
12
- * `ConfirmationState` / `ParticipantRef` so the commit-time shape and the
13
- * stored/broadcast delta shape share ONE source of truth (these were previously
14
- * a server-local interface "kept in sync by convention").
11
+ * The attribution fields reuse the shared {@link ParticipantKind},
12
+ * {@link ConfirmationState}, and {@link ParticipantRef} types, so the shape at
13
+ * commit time and the shape of a stored or broadcast delta share one definition
14
+ * rather than being kept in step by hand.
15
15
  */
16
- import type { ParticipantKind, ConfirmationState } from '../schema/sync-delta-row.js';
17
- import type { ParticipantRef } from '../schema/sync-delta-wire.js';
16
+ import type { ParticipantKind, ConfirmationState } from '../schema/syncDeltaRow.js';
17
+ import type { ParticipantRef } from '../wire/delta.js';
18
18
  import type { Environment } from '../environment.js';
19
19
  import type { StaleNotification, ReadDependency } from '../coordination/schema.js';
20
20
  export interface CommitContext {
21
21
  participantId: string;
22
22
  /**
23
- * Typed participant classification required so every delta written through
24
- * the commit executor carries structured attribution, not a string-prefix
25
- * convention.
23
+ * The kind of participant making the commit. Required, so that every delta carries
24
+ * structured attribution rather than a string-prefix convention.
26
25
  */
27
26
  participantKind: ParticipantKind;
28
27
  organizationId: string;
29
28
  /**
30
- * Product/project scope for routing source-mode storage. Omitted means the
31
- * org-default project (the legacy behavior).
29
+ * Project scope used to route source-mode storage. When omitted, the commit
30
+ * targets the organization's default project.
32
31
  */
33
32
  projectId?: string;
34
33
  /** Optional external account scope forwarded to storage resolvers. */
35
34
  accountScope?: string;
36
35
  /**
37
- * Canonical environment for this commit. Source-mode adapters forward this to
38
- * customer handlers so sandbox and production traffic can hit distinct
36
+ * The environment this commit runs in. Source-mode adapters forward it to the
37
+ * customer's handlers so that sandbox and production traffic can reach distinct
39
38
  * customer-owned stores.
40
39
  */
41
40
  environment?: Environment;
42
41
  /**
43
- * The participant's own subscribed sync groups (from the WS upgrade or
44
- * capability token). Appended to every delta's `sync_groups` so writes fan
45
- * out to agents scoped to entity-level groups (e.g. `deck:abc`), not only the
46
- * default `org:X` / `user:Y` surface. Callers that omit this fall back to the
47
- * legacy `[org, user]` broadcast behavior.
42
+ * The sync groups this participant subscribes to, taken from the connection
43
+ * upgrade or the capability token. Each is appended to every delta's `sync_groups`
44
+ * so that writes fan out to subscribers of entity-level groups (such as
45
+ * `deck:abc`), not only the default `org:X` and `user:Y` groups. When omitted, the
46
+ * commit fans out to just the organization and user groups.
48
47
  */
49
48
  syncGroups?: readonly string[];
50
49
  /**
51
- * Sandbox keys should not stamp `org:<organizationId>` on deltas otherwise
52
- * live org subscribers would see test-environment writes.
50
+ * When true, the commit does not add `org:<organizationId>` to a delta's sync
51
+ * groups. Set this for sandbox writes, so that live organization subscribers do
52
+ * not receive test-environment changes.
53
53
  */
54
54
  omitOrgSyncGroup?: boolean;
55
55
  /**
56
- * On-behalf-of attribution whose authority the actor acted under. For
57
- * human-direct commits, equals the actor. For agent commits, the human at the
58
- * root of the capability's delegation chain. Null for `system` principals.
56
+ * The participant on whose authority the actor acted. For a direct human commit
57
+ * this equals the actor; for an agent commit it is the human at the root of the
58
+ * capability's delegation chain. Null for `system` principals.
59
59
  */
60
60
  onBehalfOf?: ParticipantRef | null;
61
61
  /**
62
- * Scoped credential id. Non-null for agent / system commits when the
63
- * authorizing credential is known; null for human-direct commits.
62
+ * The id of the scoped credential that authorized the commit. Non-null for agent
63
+ * and system commits when that credential is known; null for direct human commits.
64
64
  */
65
65
  capabilityId?: string | null;
66
66
  /**
67
- * Human user id at the root of the delegated authority chain. Stored directly
68
- * on `sync_deltas` so audit triggers never need to join mutable credential
69
- * tables while appending the hash chain.
67
+ * The id of the human user at the root of the delegated-authority chain. Stored
68
+ * directly on `sync_deltas` so that audit triggers appending the hash chain never
69
+ * need to join mutable credential tables.
70
70
  */
71
71
  delegationChainRootUserId?: string | null;
72
72
  /**
73
- * ApiKey row id when the caller authenticated with an API key. Used by the
74
- * idempotency cache and usage attribution. Null for session / capability
73
+ * The id of the API key row when the caller authenticated with an API key. Used by
74
+ * the idempotency cache and for usage attribution. Null for session and capability
75
75
  * callers.
76
76
  */
77
77
  apiKeyId?: string | null;
78
78
  /**
79
- * Whether the human explicitly approved the change. Defaults to `auto` until
80
- * the chat-side previewed/approved plumbing lands.
79
+ * Whether a human explicitly approved the change. Defaults to `auto` when the
80
+ * caller does not specify an approval state.
81
81
  */
82
82
  confirmationState?: ConfirmationState;
83
83
  /**
84
- * Dormant FK to the agent-task id (`agent_tasks.id`). The SDK no longer
85
- * sets it (turns/tasks removed; attribution rides on the claim/claim id
86
- * + server-stamped actor/capability). Still validated + written onto
87
- * `caused_by_task_id` when present, but client writes leave it `null`.
84
+ * Optional foreign key to the task that caused the change, written to the
85
+ * `caused_by_task_id` column when present. Validated when set; clients typically
86
+ * leave it null and let attribution ride on the actor and capability instead.
88
87
  */
89
88
  causedByTaskId?: string | null;
90
89
  /**
91
- * Batch-level read dependencies (the STORM read-set layer). The committer
92
- * declares rows/groups it READ to form this batch; the engine validates none
93
- * changed since their `readAt` and fires each entry's `onStale` disposition
94
- * over the whole batch. Distinct from the per-op `readAt` guard, which only
95
- * validates the rows being WRITTEN. Omit for write-target-only checking.
90
+ * Read dependencies for the whole batch. The committer declares the rows or groups
91
+ * it read to form this batch; the engine checks that none of them changed since
92
+ * each entry's `readAt` timestamp and applies that entry's `onStale` disposition
93
+ * across the batch. This differs from the per-operation `readAt` guard, which
94
+ * validates only the rows being written. Omit it to check the write targets alone.
96
95
  */
97
96
  reads?: ReadDependency[] | null;
98
97
  }
99
98
  /**
100
- * The receipt of a commit. Pins the exact `sync_deltas` id range the batch
101
- * produced, so a caller can broadcast just THIS batch's deltas
102
- * (`getDeltasInRange(firstSyncId - 1, lastSyncId, …)`) without racing concurrent
103
- * commits with adjacent ids. `firstSyncId` is 0 when the batch produced no
104
- * deltas (empty ops / all no-ops).
99
+ * The receipt returned when a commit finishes. It pins the exact range of
100
+ * `sync_deltas` ids the batch produced, so a caller can broadcast just this batch's
101
+ * deltas without racing concurrent commits that hold adjacent ids. `firstSyncId` is
102
+ * 0 when the batch produced no deltas (no operations, or all of them were no-ops).
105
103
  */
106
104
  export interface CommitResult {
107
105
  lastSyncId: number;
108
106
  firstSyncId: number;
109
107
  /**
110
- * Stale-context notifications for ops the committer guarded with
111
- * `onStale: 'notify'. Present (non-empty) only when a guarded write
112
- * collided with a concurrent change; the committer self-heals from these
113
- * rather than receiving an `AbloStaleContextError`. See
114
- * `StaleNotification` in `coordination/schema.ts`.
108
+ * Stale-context notifications for operations the committer guarded with
109
+ * `onStale: 'notify'`. Non-empty only when a guarded write collided with a
110
+ * concurrent change; the committer heals from these instead of receiving an
111
+ * `AbloStaleContextError`. See {@link StaleNotification}.
115
112
  */
116
113
  notifications?: StaleNotification[];
117
114
  /**
118
- * Ids of UPDATE/DELETE targets that matched ZERO rows — the row doesn't
119
- * exist (or is outside the caller's org). The engine has always detected
120
- * this (and logged it); surfacing it here lets the client turn a silent
121
- * no-op into a loud `AbloNotFoundError`. Present (non-empty) only when at
122
- * least one op missed. Ids are globally-unique uuids, so a caller can match
123
- * its own target id against this set without ambiguity.
115
+ * Ids of update or delete targets that matched no rows — the row does not exist, or
116
+ * lies outside the caller's organization. Surfacing them here lets a client turn a
117
+ * silent no-op into an `AbloNotFoundError`. Non-empty only when at least one
118
+ * operation missed. The ids are globally unique, so a caller can match its own
119
+ * target id against this set without ambiguity.
124
120
  */
125
121
  missingIds?: string[];
126
122
  }
@@ -1,14 +1,13 @@
1
1
  /**
2
- * `@abloatai/ablo/server` — the host-side surface of the sync engine.
3
- *
4
- * Today this exposes the DataAdapter CONTRACT vocabulary (see {@link Row}).
5
- * It will grow to hold the transport/storage-agnostic commit orchestration and
6
- * the `Hub` core lifted out of `apps/sync-server` (see
7
- * docs/plans/sync-engine-server-extraction-plan.md). The reference Postgres
8
- * adapter (`executeCommit`/`selectAdapter`) and the WebSocket process lifecycle
9
- * stay in the host — only the portable, driver-free pieces live here.
2
+ * The server-side entry point of the sync engine. It re-exports the contract types
3
+ * you implement a storage backend against: the {@link DataAdapter} and its
4
+ * vocabulary ({@link Row}, {@link ReadRequest}, {@link ChangeSet}, and the rest),
5
+ * the {@link CommitContext} and {@link CommitResult} commit types, the
6
+ * {@link StorageMode} enumeration, and the per-model read configuration
7
+ * ({@link BootstrapModel}, {@link ColumnOverride}). These are plain, driver-free
8
+ * types; you supply the database code that fulfills them.
10
9
  */
11
10
  export type { Row, ReadResult, SyncCursor, DataAdapterCapabilities, ProposalResult, ReadRequest, ChangeSet, SyncResult, DataAdapter, ProposableDataAdapter, AdapterResolver, } from './adapter.js';
12
11
  export type { CommitContext, CommitResult } from './commit.js';
13
- export { storageModeSchema, type StorageMode } from './storage-mode.js';
14
- export type { ColumnOverride, BootstrapModel } from './read-config.js';
12
+ export { storageModeSchema, type StorageMode } from './storageMode.js';
13
+ export type { ColumnOverride, BootstrapModel } from './readConfig.js';
@@ -1 +1 @@
1
- export { storageModeSchema } from './storage-mode.js';
1
+ export { storageModeSchema } from './storageMode.js';
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Per-model read configuration consumed when a client bootstraps. Each
3
+ * {@link BootstrapModel} maps a model to its physical table, its tenancy column, and
4
+ * any parent scoping — plain data with no database driver. It feeds the read side of
5
+ * the data adapter contract; your query builder reads it to load a model's initial
6
+ * rows.
7
+ */
8
+ /** A mapping from a declared field to a physical column, with the alias to apply after a `SELECT *`. */
9
+ export interface ColumnOverride {
10
+ readonly field: string;
11
+ readonly column: string;
12
+ readonly alias: string;
13
+ }
14
+ /** Read configuration for one model: how to locate its rows and scope them to a tenant. */
15
+ export interface BootstrapModel {
16
+ name: string;
17
+ /**
18
+ * Extra names accepted when a request looks up or filters this model. When the
19
+ * physical table name is canonical, `name` stays that table name and the aliases
20
+ * cover generated compatibility names such as `WeatherReports` or `weatherReports`.
21
+ */
22
+ aliases?: readonly string[];
23
+ /**
24
+ * The schema key used by source endpoints. `name` stays the wire and result model
25
+ * name (usually the typename), while source handlers are keyed by the developer's
26
+ * schema key, such as `files` or `slideLayers`.
27
+ */
28
+ sourceModel?: string;
29
+ table: string;
30
+ syncGroups?: string[];
31
+ enabled?: boolean;
32
+ /** Max rows to return. Omit for unlimited. Maps to schema's bootstrapLimit. */
33
+ limit?: number;
34
+ /** SQL ORDER BY clause. Default: 'id'. Maps to schema's bootstrapOrderBy. */
35
+ orderBy?: string;
36
+ /** Whether the table has organization_id. Default: true. */
37
+ orgScoped?: boolean;
38
+ /** Physical tenancy column (default `organization_id`, configurable per model). */
39
+ orgColumn?: string;
40
+ /**
41
+ * Parent-table scoping for rows that have no `organization_id` column, mirroring
42
+ * the schema's `scopedVia` option. When set, the bootstrap query adds:
43
+ *
44
+ * WHERE <table>.<localKey> IN
45
+ * (SELECT <parentKey> FROM <parentTable> WHERE <parentOrgColumn> = $1)
46
+ *
47
+ * This applies on top of whatever `orgScoped` dictates, so a table can carry its
48
+ * own `organization_id` and still narrow through a parent. The common case,
49
+ * though, is `orgScoped: false` together with `scopedVia` on a table that lacks the
50
+ * column.
51
+ */
52
+ scopedVia?: {
53
+ localKey: string;
54
+ parentTable: string;
55
+ parentKey?: string;
56
+ parentOrgColumn?: string;
57
+ };
58
+ /** Client-facing field name → physical DB column for declared fields. */
59
+ fieldColumns?: Record<string, string>;
60
+ /** Physical-column aliases needed after SELECT * for `.from(...)` fields. */
61
+ columnOverrides?: readonly ColumnOverride[];
62
+ /**
63
+ * Physical columns the schema declares as JSON (via `field.json()`). A JSON field
64
+ * stored in a text column comes back from `row_to_json` as a serialized string, so
65
+ * the bootstrap reparses these columns to make the wire value the canonical object
66
+ * regardless of the physical column type. A `jsonb` column already returns an
67
+ * object, so reparsing it is a no-op.
68
+ */
69
+ jsonColumns?: readonly string[];
70
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Per-model read configuration consumed when a client bootstraps. Each
3
+ * {@link BootstrapModel} maps a model to its physical table, its tenancy column, and
4
+ * any parent scoping — plain data with no database driver. It feeds the read side of
5
+ * the data adapter contract; your query builder reads it to load a model's initial
6
+ * rows.
7
+ */
8
+ export {};
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The set of storage modes a `DataAdapter` can run in. An adapter carries one of
3
+ * these as a label for diagnostics; it does not decide routing, which the adapter
4
+ * resolver handles separately. The package defines the enum so that the contract
5
+ * and every adapter agree on the same closed set of values:
6
+ *
7
+ * - `hosted` — a database this engine operates on the caller's behalf.
8
+ * - `selfHosted` — the caller's own database, reached through the same execution
9
+ * path as `hosted`.
10
+ * - `source` — a caller-owned endpoint that accepts changes over HTTP without
11
+ * database credentials.
12
+ *
13
+ * These names describe where the data lives, not anything an end user sees.
14
+ */
15
+ import { z } from 'zod';
16
+ /** Runtime validator for the storage-mode values; {@link StorageMode} is its inferred type. */
17
+ export declare const storageModeSchema: z.ZodEnum<{
18
+ source: "source";
19
+ hosted: "hosted";
20
+ selfHosted: "selfHosted";
21
+ }>;
22
+ /** The storage mode an adapter runs in — one of the values described in the module overview. */
23
+ export type StorageMode = z.infer<typeof storageModeSchema>;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The set of storage modes a `DataAdapter` can run in. An adapter carries one of
3
+ * these as a label for diagnostics; it does not decide routing, which the adapter
4
+ * resolver handles separately. The package defines the enum so that the contract
5
+ * and every adapter agree on the same closed set of values:
6
+ *
7
+ * - `hosted` — a database this engine operates on the caller's behalf.
8
+ * - `selfHosted` — the caller's own database, reached through the same execution
9
+ * path as `hosted`.
10
+ * - `source` — a caller-owned endpoint that accepts changes over HTTP without
11
+ * database credentials.
12
+ *
13
+ * These names describe where the data lives, not anything an end user sees.
14
+ */
15
+ import { z } from 'zod';
16
+ /** Runtime validator for the storage-mode values; {@link StorageMode} is its inferred type. */
17
+ export const storageModeSchema = z.enum(['hosted', 'source', 'selfHosted']);
@@ -1,32 +1,33 @@
1
1
  /**
2
- * The Data Source adapter — ONE interface every ORM backend implements, and the
3
- * bridge that wires it into the core `dataSource()` handler.
2
+ * The interface every data-source backend implements, together with the bridge
3
+ * that wires an implementation into the `dataSource()` HTTP handler. This package
4
+ * defines the contract and ships adapters for three object-relational mappers —
5
+ * {@link prismaDataSource}, {@link drizzleDataSource}, and {@link kyselyDataSource} —
6
+ * each verified by the shared conformance suite. You can also write your own.
4
7
  *
5
- * Pattern (Auth.js / Better Auth): one core interface, one package per ORM
6
- * (`prismaDataSource`, `drizzleDataSource`, `kyselyDataSource`), each provably
7
- * correct via the shared conformance suite. The adapter owns reading and writing
8
- * the database, plus the transactional outbox and idempotency, so a customer never
9
- * hand-writes them:
8
+ * An adapter reads and writes your database, and it owns the transactional outbox
9
+ * and idempotency bookkeeping as well, so you never write those by hand:
10
10
  *
11
11
  * export const POST = dataSource({
12
12
  * schema, apiKey: process.env.ABLO_API_KEY!,
13
13
  * ...sourceHandlersFromAdapter(prismaDataSource(prisma, schema), schema),
14
14
  * });
15
15
  *
16
- * The bridge below connects the adapter to the core: it turns ONE adapter into the
17
- * core handler's `commit` / `events` / per-model `load`+`list` no per-ORM
18
- * branching anywhere above the adapter.
16
+ * `sourceHandlersFromAdapter` is the bridge: it turns a single adapter into the
17
+ * handler's `commit`, `events`, and per-model `load` and `list` operations, so no
18
+ * code above the adapter needs to know which mapper you chose.
19
19
  */
20
20
  import type { SourceListQuery, SourceRequestContext } from './types.js';
21
21
  import type { AdapterCapabilities, ChangeSet, EventsPage, Migration } from './contract.js';
22
22
  /**
23
- * A canonical row keyed by schema FIELD name (e.g. `operatorId`) — the SDK shape,
24
- * NOT physical column names. Each adapter is the translation boundary: Prisma maps
25
- * via its `@map`, Drizzle via the schema's `camelToSnake`/`column` rule. `unknown`
26
- * leaf is narrowed by codegen later.
23
+ * A single row keyed by the schema's field names (for example `operatorId`), not
24
+ * by physical column names. Each adapter is the boundary that translates between
25
+ * the two, mapping a field name to whatever the underlying database column is
26
+ * called. Values are typed as `unknown`, so a caller must narrow a value before
27
+ * using it.
27
28
  */
28
29
  export type Row = Record<string, unknown>;
29
- /** A read against the canonical store a single-row load or a filtered list. */
30
+ /** A read request handed to an adapter: either a single-row load by id, or a filtered list. */
30
31
  export type AdapterReadRequest = {
31
32
  readonly kind: 'load';
32
33
  readonly model: string;
@@ -38,28 +39,32 @@ export type AdapterReadRequest = {
38
39
  readonly query?: SourceListQuery;
39
40
  readonly scope?: SourceRequestContext;
40
41
  };
42
+ /** What {@link DataSourceAdapter.commit} returns: the rows as they stand after the write. */
41
43
  export interface AdapterCommitResult {
42
- /** Canonical rows after the write Ablo derives deltas from these. */
44
+ /** The affected rows after the write. The change log is derived from these. */
43
45
  readonly rows: readonly Row[];
44
46
  }
45
47
  /**
46
- * The adapter interface. An ORM adapter implements exactly these. `read`/`commit`
47
- * read and write the database; `events` reads the outbox; `migrations` ships the
48
- * `ablo_idempotency` + `ablo_outbox` table-creation SQL so the customer never writes it.
48
+ * The interface an adapter implements to serve one data source. `read` and
49
+ * `commit` read from and write to your database, `events` reads the outbox that
50
+ * `commit` appends to, and `migrations` supplies the SQL that creates the adapter's
51
+ * own two tables. `capabilities` advertises which optional features the adapter
52
+ * supports.
49
53
  */
50
54
  export interface DataSourceAdapter {
51
55
  readonly capabilities: AdapterCapabilities;
52
- /** The table-creation SQL the adapter ships for its own tables (`ablo_idempotency` + `ablo_outbox`). */
56
+ /** The table-creation SQL the adapter needs for its own tables, `ablo_idempotency` and `ablo_outbox`. */
53
57
  migrations(): readonly Migration[];
54
- /** Canonical rows for a load/list. */
58
+ /** The rows matching a load or list request. */
55
59
  read(req: AdapterReadRequest): Promise<readonly Row[]>;
56
60
  /**
57
- * Apply a change set transactionally and idempotently by `clientTxId`:
58
- * a duplicate `clientTxId` returns the original rows without re-applying.
59
- * Writes the `ablo_outbox` rows in the SAME transaction as the app rows.
61
+ * Applies a change set in one transaction, keyed for idempotency by `clientTxId`.
62
+ * Replaying the same `clientTxId` returns the original rows without applying the
63
+ * change again. The matching `ablo_outbox` rows are written in the same
64
+ * transaction as the data rows, so the outbox can never drift from the data.
60
65
  */
61
66
  commit(change: ChangeSet): Promise<AdapterCommitResult>;
62
- /** Read outbox events after `cursor` (null = from the beginning), up to `limit`. */
67
+ /** Reads outbox events after `cursor` (`null` starts from the beginning), up to `limit` events. */
63
68
  events(cursor: string | null, limit: number): Promise<EventsPage>;
64
69
  }
65
70
  export type { AdapterCapabilities, ChangeSet, Migration, OutboxEvent, EventsPage } from './contract.js';
@@ -1,20 +1,20 @@
1
1
  /**
2
- * The Data Source adapter — ONE interface every ORM backend implements, and the
3
- * bridge that wires it into the core `dataSource()` handler.
2
+ * The interface every data-source backend implements, together with the bridge
3
+ * that wires an implementation into the `dataSource()` HTTP handler. This package
4
+ * defines the contract and ships adapters for three object-relational mappers —
5
+ * {@link prismaDataSource}, {@link drizzleDataSource}, and {@link kyselyDataSource} —
6
+ * each verified by the shared conformance suite. You can also write your own.
4
7
  *
5
- * Pattern (Auth.js / Better Auth): one core interface, one package per ORM
6
- * (`prismaDataSource`, `drizzleDataSource`, `kyselyDataSource`), each provably
7
- * correct via the shared conformance suite. The adapter owns reading and writing
8
- * the database, plus the transactional outbox and idempotency, so a customer never
9
- * hand-writes them:
8
+ * An adapter reads and writes your database, and it owns the transactional outbox
9
+ * and idempotency bookkeeping as well, so you never write those by hand:
10
10
  *
11
11
  * export const POST = dataSource({
12
12
  * schema, apiKey: process.env.ABLO_API_KEY!,
13
13
  * ...sourceHandlersFromAdapter(prismaDataSource(prisma, schema), schema),
14
14
  * });
15
15
  *
16
- * The bridge below connects the adapter to the core: it turns ONE adapter into the
17
- * core handler's `commit` / `events` / per-model `load`+`list` no per-ORM
18
- * branching anywhere above the adapter.
16
+ * `sourceHandlersFromAdapter` is the bridge: it turns a single adapter into the
17
+ * handler's `commit`, `events`, and per-model `load` and `list` operations, so no
18
+ * code above the adapter needs to know which mapper you chose.
19
19
  */
20
20
  export {};
@@ -1,32 +1,37 @@
1
1
  /**
2
- * Drizzle Data Source adapter. Same adapter interface + conformance as `prismaDataSource`,
3
- * built against Drizzle's REAL API (read from drizzle-orm's own source/docs):
4
- * - `db.transaction(async (tx) => …)` interactive transaction (commit/rollback).
5
- * - `db.execute(sql`…`)` parametrized raw SQL; `sql.identifier()` safely quotes
6
- * dynamic table/column names, `sql`${value}`` parametrizes values.
2
+ * The Drizzle adapter for the data-source interface. It implements the same
3
+ * {@link DataSourceAdapter} contract as {@link prismaDataSource} and passes the
4
+ * same conformance suite, built against Drizzle's query API:
5
+ * - `db.transaction(async (tx) => …)` runs an interactive transaction that
6
+ * commits or rolls back as a unit.
7
+ * - `db.execute(sql`…`)` runs parameterized raw SQL; `sql.identifier()` safely
8
+ * quotes dynamic table and column names, and `sql`${value}`` parameterizes
9
+ * values.
7
10
  *
8
- * SCHEMA-DRIVEN COLUMNS. Unlike Prisma whose delegate applies the model's
9
- * `@map` for free — this adapter writes raw SQL, so it would otherwise bypass any
10
- * fieldcolumn translation. It therefore derives every table + column name from
11
- * the SAME rule the provisioner uses (`generateProvisionPlan`):
11
+ * Table and column names come from your schema, not from a hand-written Drizzle
12
+ * table. Because this adapter issues raw SQL, it would otherwise bypass any
13
+ * field-to-column translation, so it derives every name from the same rule the
14
+ * table provisioner uses:
12
15
  * table = `model.tableName ?? key`
13
- * column = `fieldMeta.column ?? camelToSnake(field)` (+ the model's tenancy column)
14
- * so `ablo migrate` (which emits `operator_id`) and this adapter (which now writes
15
- * `operator_id`) COMPOSE. Define the schema once, point Ablo at your Postgres
16
- * no hand-written parallel Drizzle table. The adapter is the translation boundary:
17
- * its public surface (rows in/out, outbox `data`) is field-keyed (the SDK shape);
18
- * the physical columns it reads/writes are snake_case.
16
+ * column = `fieldMeta.column ?? camelToSnake(field)` (plus the tenancy column)
17
+ * This keeps the tables `ablo migrate` creates (for example `operator_id`) and the
18
+ * columns this adapter reads and writes in agreement. You define the schema once
19
+ * and point the engine at your Postgres database. The adapter is the translation
20
+ * boundary: the rows it accepts and returns, and the outbox `data` it writes, are
21
+ * keyed by field name, while the physical columns it touches are snake_case.
19
22
  *
20
- * IMPORTANT GOTCHAS (from drizzle-orm docs):
21
- * 1. Interactive `db.transaction` requires a driver that supports it. Neon's
22
- * `neon-http` driver does NOT (single-shot only) use `neon-serverless`
23
- * (WebSocket) or `pg`. With neon-http the commit path throws at runtime.
24
- * 2. `db.execute` result shape is driver-specific (postgres-js returns an
25
- * array-like RowList; node-postgres returns `{ rows }`). `rowsOf()`
23
+ * Two things to know about drivers:
24
+ * 1. Interactive `db.transaction` needs a driver that supports it. Neon's
25
+ * `neon-http` driver is single-shot and does not, so use `neon-serverless`
26
+ * (over WebSocket) or `pg`; under `neon-http` the commit path throws at
27
+ * runtime.
28
+ * 2. The `db.execute` result shape is driver-specific `postgres-js` returns an
29
+ * array-like row list, while `node-postgres` returns `{ rows }`. `rowsOf`
26
30
  * normalizes both.
27
31
  *
28
- * We use `sql` + `db.execute` for ALL writes (not the fluent builder) so the
29
- * adapter is one small, fully-typed unit with no per-driver builder generics.
32
+ * Every write goes through `sql` and `db.execute` rather than the fluent builder,
33
+ * which keeps the adapter one small, fully typed unit with no per-driver builder
34
+ * generics.
30
35
  */
31
36
  import { type SQL } from 'drizzle-orm';
32
37
  import type { DataSourceAdapter, Row } from '../adapter.js';