@abloatai/ablo 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +104 -88
  4. package/dist/BaseSyncedStore.d.ts +140 -266
  5. package/dist/BaseSyncedStore.js +338 -739
  6. package/dist/Database.d.ts +62 -77
  7. package/dist/Database.js +106 -127
  8. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  9. package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
  10. package/dist/LazyReferenceCollection.d.ts +11 -15
  11. package/dist/LazyReferenceCollection.js +16 -15
  12. package/dist/Model.d.ts +37 -52
  13. package/dist/Model.js +52 -69
  14. package/dist/ModelRegistry.d.ts +46 -25
  15. package/dist/ModelRegistry.js +32 -30
  16. package/dist/NetworkMonitor.d.ts +5 -6
  17. package/dist/NetworkMonitor.js +6 -7
  18. package/dist/SyncClient.d.ts +119 -109
  19. package/dist/SyncClient.js +303 -224
  20. package/dist/SyncEngineContext.d.ts +1 -3
  21. package/dist/SyncEngineContext.js +1 -2
  22. package/dist/adapters/alwaysOnline.d.ts +6 -8
  23. package/dist/adapters/alwaysOnline.js +6 -8
  24. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  25. package/dist/adapters/inMemoryStorage.js +9 -9
  26. package/dist/agent/Agent.d.ts +39 -31
  27. package/dist/agent/Agent.js +35 -23
  28. package/dist/agent/index.d.ts +4 -4
  29. package/dist/agent/index.js +5 -5
  30. package/dist/agent/session.d.ts +47 -44
  31. package/dist/agent/session.js +37 -48
  32. package/dist/agent/types.d.ts +26 -31
  33. package/dist/agent/types.js +6 -7
  34. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  35. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  36. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  37. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
  38. package/dist/ai-sdk/index.d.ts +25 -22
  39. package/dist/ai-sdk/index.js +25 -22
  40. package/dist/ai-sdk/wrap.d.ts +7 -8
  41. package/dist/ai-sdk/wrap.js +2 -2
  42. package/dist/auth/credentialPolicy.d.ts +74 -71
  43. package/dist/auth/credentialPolicy.js +51 -56
  44. package/dist/auth/credentialSource.d.ts +7 -18
  45. package/dist/auth/credentialSource.js +10 -18
  46. package/dist/auth/index.d.ts +59 -58
  47. package/dist/auth/index.js +34 -40
  48. package/dist/auth/schemas.d.ts +5 -4
  49. package/dist/auth/schemas.js +5 -4
  50. package/dist/batching/index.d.ts +19 -21
  51. package/dist/batching/index.js +14 -17
  52. package/dist/cli.cjs +483 -369
  53. package/dist/client/Ablo.d.ts +107 -836
  54. package/dist/client/Ablo.js +174 -833
  55. package/dist/client/ApiClient.d.ts +44 -20
  56. package/dist/client/ApiClient.js +193 -44
  57. package/dist/client/auth.d.ts +51 -60
  58. package/dist/client/auth.js +137 -110
  59. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  60. package/dist/client/claimHeartbeatLoop.js +88 -0
  61. package/dist/client/consoleLogger.d.ts +35 -0
  62. package/dist/client/consoleLogger.js +44 -0
  63. package/dist/client/createInternalComponents.d.ts +14 -17
  64. package/dist/client/createInternalComponents.js +26 -31
  65. package/dist/client/createModelProxy.d.ts +130 -120
  66. package/dist/client/createModelProxy.js +158 -124
  67. package/dist/client/credentialEndpoint.d.ts +61 -0
  68. package/dist/client/credentialEndpoint.js +86 -0
  69. package/dist/client/functionalUpdate.d.ts +29 -27
  70. package/dist/client/functionalUpdate.js +21 -21
  71. package/dist/client/hostedEndpoints.d.ts +21 -0
  72. package/dist/client/hostedEndpoints.js +21 -0
  73. package/dist/client/httpClient.d.ts +58 -54
  74. package/dist/client/httpClient.js +29 -31
  75. package/dist/client/identity.d.ts +15 -20
  76. package/dist/client/identity.js +49 -59
  77. package/dist/client/modelRegistration.d.ts +10 -0
  78. package/dist/client/modelRegistration.js +301 -0
  79. package/dist/client/options.d.ts +373 -0
  80. package/dist/client/options.js +6 -0
  81. package/dist/client/registerDataSource.d.ts +9 -9
  82. package/dist/client/registerDataSource.js +15 -16
  83. package/dist/client/resourceTypes.d.ts +333 -0
  84. package/dist/client/resourceTypes.js +7 -0
  85. package/dist/client/schemaConfig.d.ts +44 -0
  86. package/dist/client/schemaConfig.js +176 -0
  87. package/dist/client/sessionMint.d.ts +17 -13
  88. package/dist/client/sessionMint.js +26 -31
  89. package/dist/client/validateAbloOptions.d.ts +12 -14
  90. package/dist/client/validateAbloOptions.js +9 -10
  91. package/dist/client/writeOptionsSchema.d.ts +18 -16
  92. package/dist/client/writeOptionsSchema.js +23 -20
  93. package/dist/client/wsMutationExecutor.d.ts +28 -0
  94. package/dist/client/wsMutationExecutor.js +71 -0
  95. package/dist/context.d.ts +6 -4
  96. package/dist/context.js +6 -7
  97. package/dist/coordination/index.d.ts +13 -4
  98. package/dist/coordination/index.js +29 -4
  99. package/dist/coordination/schema.d.ts +176 -128
  100. package/dist/coordination/schema.js +197 -133
  101. package/dist/coordination/trace.d.ts +9 -11
  102. package/dist/coordination/trace.js +13 -15
  103. package/dist/core/DatabaseManager.d.ts +5 -8
  104. package/dist/core/DatabaseManager.js +38 -40
  105. package/dist/core/QueryProcessor.d.ts +7 -9
  106. package/dist/core/QueryProcessor.js +27 -34
  107. package/dist/core/QueryView.d.ts +17 -5
  108. package/dist/core/QueryView.js +6 -7
  109. package/dist/core/StoreManager.d.ts +14 -16
  110. package/dist/core/StoreManager.js +26 -25
  111. package/dist/core/ViewRegistry.d.ts +5 -5
  112. package/dist/core/ViewRegistry.js +4 -4
  113. package/dist/core/index.d.ts +18 -13
  114. package/dist/core/index.js +32 -26
  115. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  116. package/dist/core/openIDBWithTimeout.js +57 -54
  117. package/dist/core/queryUtils.d.ts +45 -0
  118. package/dist/core/queryUtils.js +69 -0
  119. package/dist/core/storeContract.d.ts +145 -0
  120. package/dist/core/storeContract.js +12 -0
  121. package/dist/environment.d.ts +28 -0
  122. package/dist/environment.js +21 -0
  123. package/dist/errorCodes.d.ts +118 -101
  124. package/dist/errorCodes.js +277 -260
  125. package/dist/errors.d.ts +170 -165
  126. package/dist/errors.js +161 -151
  127. package/dist/index.d.ts +30 -27
  128. package/dist/index.js +90 -82
  129. package/dist/interfaces/index.d.ts +108 -133
  130. package/dist/interfaces/index.js +5 -4
  131. package/dist/keys/index.d.ts +27 -29
  132. package/dist/keys/index.js +59 -49
  133. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  134. package/dist/mutators/RecordingTransaction.js +31 -37
  135. package/dist/mutators/Transaction.d.ts +18 -26
  136. package/dist/mutators/Transaction.js +14 -20
  137. package/dist/mutators/UndoManager.d.ts +122 -131
  138. package/dist/mutators/UndoManager.js +149 -155
  139. package/dist/mutators/defineMutators.d.ts +24 -37
  140. package/dist/mutators/defineMutators.js +14 -20
  141. package/dist/mutators/inverseOp.d.ts +12 -15
  142. package/dist/mutators/inverseOp.js +12 -15
  143. package/dist/mutators/mutateActions.d.ts +10 -9
  144. package/dist/mutators/mutateActions.js +1 -1
  145. package/dist/mutators/readerActions.d.ts +9 -8
  146. package/dist/mutators/readerActions.js +2 -2
  147. package/dist/mutators/undoApply.d.ts +31 -27
  148. package/dist/mutators/undoApply.js +26 -24
  149. package/dist/policy/index.d.ts +5 -3
  150. package/dist/policy/index.js +5 -3
  151. package/dist/policy/types.d.ts +105 -101
  152. package/dist/policy/types.js +67 -66
  153. package/dist/query/client.d.ts +32 -16
  154. package/dist/query/client.js +103 -72
  155. package/dist/query/types.d.ts +37 -60
  156. package/dist/query/types.js +13 -33
  157. package/dist/react/AbloProvider.d.ts +7 -11
  158. package/dist/react/AbloProvider.js +24 -17
  159. package/dist/react/context.d.ts +27 -146
  160. package/dist/react/context.js +9 -10
  161. package/dist/react/index.d.ts +41 -42
  162. package/dist/react/index.js +37 -38
  163. package/dist/react/internalContext.d.ts +17 -19
  164. package/dist/react/useAblo.d.ts +23 -22
  165. package/dist/react/useAblo.js +17 -15
  166. package/dist/react/useCurrentUserId.d.ts +8 -7
  167. package/dist/react/useCurrentUserId.js +8 -7
  168. package/dist/react/useErrorListener.d.ts +7 -7
  169. package/dist/react/useErrorListener.js +11 -12
  170. package/dist/react/useMutationFailureListener.d.ts +8 -8
  171. package/dist/react/useMutationFailureListener.js +9 -9
  172. package/dist/react/useMutators.d.ts +11 -11
  173. package/dist/react/useMutators.js +10 -4
  174. package/dist/react/useReactive.js +2 -3
  175. package/dist/react/useSyncStatus.d.ts +4 -6
  176. package/dist/react/useUndoScope.d.ts +7 -9
  177. package/dist/react/useUndoScope.js +3 -3
  178. package/dist/schema/coordination.d.ts +21 -25
  179. package/dist/schema/coordination.js +21 -25
  180. package/dist/schema/ddl.d.ts +43 -39
  181. package/dist/schema/ddl.js +75 -68
  182. package/dist/schema/ddlLock.d.ts +35 -0
  183. package/dist/schema/ddlLock.js +46 -0
  184. package/dist/schema/diff.d.ts +99 -61
  185. package/dist/schema/diff.js +43 -34
  186. package/dist/schema/field.d.ts +37 -42
  187. package/dist/schema/field.js +36 -49
  188. package/dist/schema/generate.d.ts +12 -12
  189. package/dist/schema/generate.js +12 -12
  190. package/dist/schema/index.d.ts +5 -4
  191. package/dist/schema/index.js +29 -21
  192. package/dist/schema/model.d.ts +121 -146
  193. package/dist/schema/model.js +24 -35
  194. package/dist/schema/openapi.d.ts +10 -9
  195. package/dist/schema/openapi.js +7 -1
  196. package/dist/schema/queries.d.ts +30 -32
  197. package/dist/schema/queries.js +24 -25
  198. package/dist/schema/relation.d.ts +89 -99
  199. package/dist/schema/relation.js +13 -13
  200. package/dist/schema/residency.d.ts +38 -0
  201. package/dist/schema/residency.js +30 -0
  202. package/dist/schema/roles.d.ts +45 -27
  203. package/dist/schema/roles.js +52 -21
  204. package/dist/schema/schema.d.ts +36 -45
  205. package/dist/schema/schema.js +42 -39
  206. package/dist/schema/select.d.ts +13 -13
  207. package/dist/schema/select.js +13 -13
  208. package/dist/schema/serialize.d.ts +36 -39
  209. package/dist/schema/serialize.js +27 -31
  210. package/dist/schema/sugar.d.ts +17 -32
  211. package/dist/schema/sugar.js +14 -29
  212. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
  213. package/dist/schema/syncDeltaRow.js +89 -0
  214. package/dist/schema/tenancy.d.ts +44 -46
  215. package/dist/schema/tenancy.js +46 -48
  216. package/dist/server/adapter.d.ts +58 -58
  217. package/dist/server/adapter.js +13 -14
  218. package/dist/server/commit.d.ts +60 -64
  219. package/dist/server/index.d.ts +9 -10
  220. package/dist/server/index.js +1 -1
  221. package/dist/server/readConfig.d.ts +70 -0
  222. package/dist/server/readConfig.js +8 -0
  223. package/dist/server/storageMode.d.ts +23 -0
  224. package/dist/server/storageMode.js +17 -0
  225. package/dist/source/adapter.d.ts +31 -26
  226. package/dist/source/adapter.js +10 -10
  227. package/dist/source/adapters/drizzle.d.ts +28 -23
  228. package/dist/source/adapters/drizzle.js +34 -28
  229. package/dist/source/adapters/kysely.d.ts +27 -25
  230. package/dist/source/adapters/kysely.js +28 -26
  231. package/dist/source/adapters/memory.d.ts +8 -7
  232. package/dist/source/adapters/memory.js +10 -9
  233. package/dist/source/adapters/prisma.d.ts +13 -12
  234. package/dist/source/adapters/prisma.js +27 -29
  235. package/dist/source/conformance.d.ts +18 -11
  236. package/dist/source/conformance.js +27 -19
  237. package/dist/source/connector.d.ts +31 -32
  238. package/dist/source/connector.js +30 -28
  239. package/dist/source/connectorProtocol.d.ts +160 -0
  240. package/dist/source/connectorProtocol.js +162 -0
  241. package/dist/source/contract.d.ts +26 -27
  242. package/dist/source/contract.js +28 -29
  243. package/dist/source/factory.d.ts +94 -0
  244. package/dist/source/factory.js +268 -0
  245. package/dist/source/index.d.ts +10 -462
  246. package/dist/source/index.js +17 -421
  247. package/dist/source/migrations.d.ts +9 -9
  248. package/dist/source/migrations.js +9 -9
  249. package/dist/source/next.d.ts +10 -11
  250. package/dist/source/next.js +7 -8
  251. package/dist/source/pushQueue.d.ts +70 -48
  252. package/dist/source/pushQueue.js +36 -29
  253. package/dist/source/signing.d.ts +88 -0
  254. package/dist/source/signing.js +159 -0
  255. package/dist/source/types.d.ts +351 -0
  256. package/dist/source/types.js +43 -0
  257. package/dist/stores/ObjectStore.d.ts +11 -12
  258. package/dist/stores/ObjectStore.js +34 -35
  259. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  260. package/dist/stores/SyncActionStore.d.ts +8 -12
  261. package/dist/stores/SyncActionStore.js +77 -46
  262. package/dist/surface.d.ts +28 -21
  263. package/dist/surface.js +28 -20
  264. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
  265. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
  266. package/dist/sync/ConnectionManager.d.ts +47 -50
  267. package/dist/sync/ConnectionManager.js +74 -70
  268. package/dist/sync/NetworkProbe.d.ts +27 -31
  269. package/dist/sync/NetworkProbe.js +67 -72
  270. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
  271. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
  272. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
  273. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
  274. package/dist/sync/SyncWebSocket.d.ts +175 -250
  275. package/dist/sync/SyncWebSocket.js +431 -769
  276. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  277. package/dist/sync/awaitClaimGrant.js +38 -30
  278. package/dist/sync/bootstrapApply.d.ts +70 -0
  279. package/dist/sync/bootstrapApply.js +73 -0
  280. package/dist/sync/commitFrames.d.ts +44 -0
  281. package/dist/sync/commitFrames.js +94 -0
  282. package/dist/sync/createClaimStream.d.ts +23 -22
  283. package/dist/sync/createClaimStream.js +108 -25
  284. package/dist/sync/createPresenceStream.d.ts +19 -18
  285. package/dist/sync/createPresenceStream.js +25 -26
  286. package/dist/sync/createSnapshot.d.ts +13 -17
  287. package/dist/sync/createSnapshot.js +20 -26
  288. package/dist/sync/credentialLifecycle.d.ts +175 -0
  289. package/dist/sync/credentialLifecycle.js +322 -0
  290. package/dist/sync/deltaPipeline.d.ts +113 -0
  291. package/dist/sync/deltaPipeline.js +261 -0
  292. package/dist/sync/groupChange.d.ts +113 -0
  293. package/dist/sync/groupChange.js +242 -0
  294. package/dist/sync/heartbeat.d.ts +63 -0
  295. package/dist/sync/heartbeat.js +91 -0
  296. package/dist/sync/participants.d.ts +27 -27
  297. package/dist/sync/schemas.d.ts +3 -2
  298. package/dist/sync/schemas.js +14 -10
  299. package/dist/sync/syncCursor.d.ts +40 -0
  300. package/dist/sync/syncCursor.js +55 -0
  301. package/dist/sync/syncPlan.d.ts +54 -0
  302. package/dist/sync/syncPlan.js +50 -0
  303. package/dist/sync/syncPosition.d.ts +54 -49
  304. package/dist/sync/syncPosition.js +57 -52
  305. package/dist/sync/wsFrameHandlers.d.ts +116 -0
  306. package/dist/sync/wsFrameHandlers.js +374 -0
  307. package/dist/testing/fixtures/bootstrap.d.ts +21 -17
  308. package/dist/testing/fixtures/bootstrap.js +12 -6
  309. package/dist/testing/fixtures/deltas.d.ts +31 -34
  310. package/dist/testing/fixtures/deltas.js +30 -33
  311. package/dist/testing/fixtures/models.d.ts +11 -10
  312. package/dist/testing/fixtures/models.js +12 -10
  313. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  314. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  315. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
  316. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
  317. package/dist/testing/helpers/wait.d.ts +13 -8
  318. package/dist/testing/helpers/wait.js +13 -8
  319. package/dist/testing/index.d.ts +4 -4
  320. package/dist/testing/index.js +3 -3
  321. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  322. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  323. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  324. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  325. package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
  326. package/dist/testing/mocks/MockSyncContext.js +16 -45
  327. package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
  328. package/dist/testing/mocks/MockSyncStore.js +11 -11
  329. package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
  330. package/dist/testing/mocks/MockWebSocket.js +22 -21
  331. package/dist/transactions/TransactionQueue.d.ts +190 -221
  332. package/dist/transactions/TransactionQueue.js +424 -822
  333. package/dist/transactions/TransactionStore.d.ts +20 -0
  334. package/dist/transactions/TransactionStore.js +53 -0
  335. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  336. package/dist/transactions/UnconfirmedWrites.js +104 -0
  337. package/dist/transactions/coalesceRules.d.ts +58 -0
  338. package/dist/transactions/coalesceRules.js +140 -0
  339. package/dist/transactions/commitPayload.d.ts +130 -0
  340. package/dist/transactions/commitPayload.js +143 -0
  341. package/dist/transactions/deltaConfirmation.d.ts +58 -0
  342. package/dist/transactions/deltaConfirmation.js +215 -0
  343. package/dist/transactions/optimisticApply.d.ts +49 -0
  344. package/dist/transactions/optimisticApply.js +65 -0
  345. package/dist/transactions/replayValidation.d.ts +99 -0
  346. package/dist/transactions/replayValidation.js +111 -0
  347. package/dist/types/global.d.ts +46 -41
  348. package/dist/types/global.js +20 -19
  349. package/dist/types/index.d.ts +74 -80
  350. package/dist/types/index.js +22 -27
  351. package/dist/types/modelData.d.ts +10 -0
  352. package/dist/types/modelData.js +9 -0
  353. package/dist/types/participant.d.ts +20 -0
  354. package/dist/types/participant.js +10 -0
  355. package/dist/types/streams.d.ts +216 -209
  356. package/dist/types/streams.js +7 -7
  357. package/dist/utils/asyncIterator.d.ts +25 -32
  358. package/dist/utils/asyncIterator.js +25 -32
  359. package/dist/utils/duration.d.ts +12 -15
  360. package/dist/utils/duration.js +12 -15
  361. package/dist/utils/mobxSetup.d.ts +53 -0
  362. package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
  363. package/dist/webhooks/events.d.ts +21 -16
  364. package/dist/webhooks/events.js +10 -8
  365. package/dist/webhooks/index.d.ts +5 -7
  366. package/dist/webhooks/index.js +5 -7
  367. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  368. package/dist/wire/delta.js +114 -0
  369. package/dist/wire/errorEnvelope.d.ts +35 -27
  370. package/dist/wire/errorEnvelope.js +38 -32
  371. package/dist/wire/frames.d.ts +150 -67
  372. package/dist/wire/frames.js +48 -1
  373. package/dist/wire/index.d.ts +18 -13
  374. package/dist/wire/index.js +36 -13
  375. package/dist/wire/listEnvelope.d.ts +16 -23
  376. package/dist/wire/listEnvelope.js +7 -6
  377. package/dist/wire/protocol.d.ts +38 -0
  378. package/dist/wire/protocol.js +38 -0
  379. package/dist/wire/protocolVersion.d.ts +60 -0
  380. package/dist/wire/protocolVersion.js +67 -0
  381. package/docs/api-keys.md +4 -3
  382. package/docs/coordination.md +59 -0
  383. package/docs/examples/existing-python-backend.md +3 -3
  384. package/docs/identity.md +4 -4
  385. package/docs/integration-guide.md +1 -1
  386. package/docs/react.md +1 -1
  387. package/docs/sessions.md +5 -7
  388. package/package.json +24 -21
  389. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  390. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  391. package/dist/client/index.d.ts +0 -36
  392. package/dist/client/index.js +0 -33
  393. package/dist/config/index.d.ts +0 -10
  394. package/dist/config/index.js +0 -12
  395. package/dist/core/query-utils.d.ts +0 -34
  396. package/dist/core/query-utils.js +0 -59
  397. package/dist/interfaces/headless.d.ts +0 -95
  398. package/dist/interfaces/headless.js +0 -41
  399. package/dist/query/index.d.ts +0 -6
  400. package/dist/query/index.js +0 -5
  401. package/dist/realtime/index.d.ts +0 -10
  402. package/dist/realtime/index.js +0 -9
  403. package/dist/schema/plane.d.ts +0 -23
  404. package/dist/schema/plane.js +0 -19
  405. package/dist/schema/sync-delta-row.js +0 -103
  406. package/dist/schema/sync-delta-wire.js +0 -102
  407. package/dist/server/next.d.ts +0 -51
  408. package/dist/server/next.js +0 -47
  409. package/dist/server/read-config.d.ts +0 -67
  410. package/dist/server/read-config.js +0 -8
  411. package/dist/server/storage-mode.d.ts +0 -1
  412. package/dist/server/storage-mode.js +0 -18
  413. package/dist/source/connector-protocol.d.ts +0 -159
  414. package/dist/source/connector-protocol.js +0 -161
  415. package/dist/sync/OfflineFlush.d.ts +0 -9
  416. package/dist/sync/OfflineFlush.js +0 -22
  417. package/dist/sync/OfflineTransactionStore.d.ts +0 -37
  418. package/dist/sync/OfflineTransactionStore.js +0 -263
  419. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  420. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  421. package/dist/transactions/index.d.ts +0 -16
  422. package/dist/transactions/index.js +0 -7
  423. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  424. package/dist/transactions/mutation-error-handler.js +0 -39
  425. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,10 +0,0 @@
1
- /**
2
- * @abloatai/ablo/config — App initialization
3
- *
4
- * One-time setup at app boot. Provides DI interface types
5
- * and the initSyncEngine() function to wire real implementations.
6
- */
7
- export { initSyncEngine, resetSyncEngine, isSyncEngineInitialized } from '../context.js';
8
- export { noopLogger, noopObservability, noopAnalytics, browserOnlineStatus, defaultSessionErrorDetector, emptyConfig, type SyncEngineContext, } from '../SyncEngineContext.js';
9
- export type { SyncEngineConfig, SyncLogger, SyncObservabilityProvider, SyncAnalytics, MutationExecutor, MutationDispatcher, SessionErrorDetector, OnlineStatusProvider, CommitResult, MutationOperation, BreadcrumbLevel, SyncBreadcrumbCategory, TransactionFailureDetails, BootstrapFailureDetails, WebSocketErrorDetails, RollbackDetails, SpanAttributes, } from '../interfaces/index.js';
10
- export { SyncSessionError } from '../errors.js';
@@ -1,12 +0,0 @@
1
- /**
2
- * @abloatai/ablo/config — App initialization
3
- *
4
- * One-time setup at app boot. Provides DI interface types
5
- * and the initSyncEngine() function to wire real implementations.
6
- */
7
- // Context lifecycle
8
- export { initSyncEngine, resetSyncEngine, isSyncEngineInitialized } from '../context.js';
9
- // Context type + no-op defaults (for testing or gradual adoption)
10
- export { noopLogger, noopObservability, noopAnalytics, browserOnlineStatus, defaultSessionErrorDetector, emptyConfig, } from '../SyncEngineContext.js';
11
- // Errors
12
- export { SyncSessionError } from '../errors.js';
@@ -1,34 +0,0 @@
1
- /**
2
- * query-utils — Pure query helpers for the MobX `QueryView`. One source of
3
- * truth for sort, filter, and binary insertion logic.
4
- *
5
- * No MobX, no ObjectPool, no Model — just arrays and values.
6
- */
7
- /**
8
- * The incremental-update contract a view satisfies. `ViewRegistry` stores views
9
- * as this base type so it can dispatch to many views with different `T`
10
- * parameters from one Set — `View<T>` is invariant in T, so without this shared
11
- * base the registry would have to widen via `unknown as View<Record<...>>` at
12
- * every register/unregister/notify call.
13
- */
14
- export interface IncrementalView {
15
- handleAdded(entity: Record<string, unknown>): void;
16
- handleUpdated(entity: Record<string, unknown>): void;
17
- handleRemoved(id: string): void;
18
- }
19
- /** Compare two values for sorting, null-safe. Returns -1 | 0 | 1. */
20
- export declare function compareValues(a: unknown, b: unknown, dir: 1 | -1): number;
21
- /**
22
- * Binary search for the correct insertion index in a sorted array.
23
- * Returns the index at which `item` should be inserted.
24
- */
25
- export declare function binaryInsertionIndex<T>(arr: ArrayLike<T>, item: T, sortKey: string, dir: 1 | -1): number;
26
- /**
27
- * Check whether an entity matches a declarative `where` clause.
28
- * Every key in `where` must exactly match the entity's value.
29
- */
30
- export declare function matchesWhere<T extends Record<string, unknown>>(entity: T, where: Partial<T>): boolean;
31
- /**
32
- * Find the index of an entity by id in an array. Returns -1 if not found.
33
- */
34
- export declare function findIndexById<T extends Record<string, unknown>>(arr: ArrayLike<T>, id: string): number;
@@ -1,59 +0,0 @@
1
- /**
2
- * query-utils — Pure query helpers for the MobX `QueryView`. One source of
3
- * truth for sort, filter, and binary insertion logic.
4
- *
5
- * No MobX, no ObjectPool, no Model — just arrays and values.
6
- */
7
- /** Compare two values for sorting, null-safe. Returns -1 | 0 | 1. */
8
- export function compareValues(a, b, dir) {
9
- if (a === b)
10
- return 0;
11
- if (a == null)
12
- return 1;
13
- if (b == null)
14
- return -1;
15
- return (a < b ? -1 : 1) * dir;
16
- }
17
- /**
18
- * Binary search for the correct insertion index in a sorted array.
19
- * Returns the index at which `item` should be inserted.
20
- */
21
- export function binaryInsertionIndex(arr, item, sortKey, dir) {
22
- let lo = 0;
23
- let hi = arr.length;
24
- const itemVal = item[sortKey];
25
- while (lo < hi) {
26
- const mid = (lo + hi) >>> 1;
27
- const midVal = arr[mid][sortKey];
28
- if (compareValues(midVal, itemVal, dir) <= 0) {
29
- lo = mid + 1;
30
- }
31
- else {
32
- hi = mid;
33
- }
34
- }
35
- return lo;
36
- }
37
- /**
38
- * Check whether an entity matches a declarative `where` clause.
39
- * Every key in `where` must exactly match the entity's value.
40
- */
41
- export function matchesWhere(entity, where) {
42
- for (const [key, value] of Object.entries(where)) {
43
- if (value === undefined)
44
- continue;
45
- if (entity[key] !== value)
46
- return false;
47
- }
48
- return true;
49
- }
50
- /**
51
- * Find the index of an entity by id in an array. Returns -1 if not found.
52
- */
53
- export function findIndexById(arr, id) {
54
- for (let i = 0; i < arr.length; i++) {
55
- if (arr[i]['id'] === id)
56
- return i;
57
- }
58
- return -1;
59
- }
@@ -1,95 +0,0 @@
1
- /**
2
- * Headless DI interfaces — the three abstractions createSyncEngine needs
3
- * to run in Node.js without browser globals.
4
- *
5
- * STATUS: Type stubs only. No implementation yet. These interfaces are
6
- * the deliverable of Path C Phase 1. When all three have both a browser
7
- * implementation and a Node implementation, the SDK is truly headless.
8
- *
9
- * Usage (once implemented):
10
- *
11
- * // Browser (default — no DI needed, uses browser globals)
12
- * const engine = createSyncEngine({ url, userId, organizationId });
13
- *
14
- * // Node.js / agent / sidecar (headless — DI overrides)
15
- * import { inMemoryStorage, alwaysOnline } from '@abloatai/ablo/headless';
16
- * const engine = createSyncEngine({
17
- * url, userId, organizationId,
18
- * storage: inMemoryStorage(),
19
- * network: alwaysOnline(),
20
- * });
21
- *
22
- * The `transport` override is optional because Node 22 has a built-in
23
- * global `WebSocket` class. It's included for testing (mock WebSocket)
24
- * and for environments where the built-in WebSocket isn't available
25
- * (Node 20, Deno, Bun — each has its own WebSocket story).
26
- *
27
- * See also: apps/sync-server/src/sdk-headless-entrypoint.test.ts
28
- * (the skipped tests that become the acceptance tests for Phase 1)
29
- */
30
- /** A record in an object store. */
31
- export type StorageRecord = Record<string, unknown> & {
32
- id: string;
33
- };
34
- /** An object store — analogous to an IDBObjectStore. */
35
- export interface ObjectStore {
36
- get(id: string): Promise<StorageRecord | undefined>;
37
- getAll(): Promise<StorageRecord[]>;
38
- getAllFromIndex(indexName: string, value: string): Promise<StorageRecord[]>;
39
- put(record: StorageRecord): Promise<void>;
40
- delete(id: string): Promise<void>;
41
- clear(): Promise<void>;
42
- }
43
- /** A database — analogous to an IDBDatabase. */
44
- export interface StorageDatabase {
45
- getStore(name: string): ObjectStore | undefined;
46
- close(): void;
47
- }
48
- /**
49
- * Opens or creates a named database.
50
- *
51
- * Browser: wraps indexedDB.open(name, version)
52
- * Node: returns an in-memory database backed by Maps
53
- */
54
- export interface StorageProvider {
55
- open(name: string, version?: number): Promise<StorageDatabase>;
56
- delete(name: string): Promise<void>;
57
- }
58
- export interface NetworkProvider {
59
- /** Current online status. */
60
- isOnline(): boolean;
61
- /**
62
- * Subscribe to online/offline transitions. Returns an unsubscribe function.
63
- * The callback receives `true` when coming online, `false` when going offline.
64
- *
65
- * Browser: listens for window 'online'/'offline' events + visibilitychange
66
- * Node: never fires (always online)
67
- * Test: fires when the test calls setOnline(true/false)
68
- */
69
- onStatusChange(callback: (online: boolean) => void): () => void;
70
- }
71
- /** Minimal WebSocket interface that SyncWebSocket uses. */
72
- export interface WebSocketLike {
73
- readonly readyState: number;
74
- readonly bufferedAmount: number;
75
- send(data: string | ArrayBuffer): void;
76
- close(code?: number, reason?: string): void;
77
- ping?(): void;
78
- addEventListener(type: 'open', handler: () => void): void;
79
- addEventListener(type: 'close', handler: (event: {
80
- code: number;
81
- reason: string;
82
- }) => void): void;
83
- addEventListener(type: 'message', handler: (event: {
84
- data: unknown;
85
- }) => void): void;
86
- addEventListener(type: 'error', handler: (event: unknown) => void): void;
87
- removeEventListener(type: string, handler: (...args: unknown[]) => void): void;
88
- }
89
- export interface TransportProvider {
90
- /**
91
- * Create a WebSocket connection to the given URL.
92
- * Returns an object satisfying the WebSocketLike interface.
93
- */
94
- connect(url: string): WebSocketLike;
95
- }
@@ -1,41 +0,0 @@
1
- /**
2
- * Headless DI interfaces — the three abstractions createSyncEngine needs
3
- * to run in Node.js without browser globals.
4
- *
5
- * STATUS: Type stubs only. No implementation yet. These interfaces are
6
- * the deliverable of Path C Phase 1. When all three have both a browser
7
- * implementation and a Node implementation, the SDK is truly headless.
8
- *
9
- * Usage (once implemented):
10
- *
11
- * // Browser (default — no DI needed, uses browser globals)
12
- * const engine = createSyncEngine({ url, userId, organizationId });
13
- *
14
- * // Node.js / agent / sidecar (headless — DI overrides)
15
- * import { inMemoryStorage, alwaysOnline } from '@abloatai/ablo/headless';
16
- * const engine = createSyncEngine({
17
- * url, userId, organizationId,
18
- * storage: inMemoryStorage(),
19
- * network: alwaysOnline(),
20
- * });
21
- *
22
- * The `transport` override is optional because Node 22 has a built-in
23
- * global `WebSocket` class. It's included for testing (mock WebSocket)
24
- * and for environments where the built-in WebSocket isn't available
25
- * (Node 20, Deno, Bun — each has its own WebSocket story).
26
- *
27
- * See also: apps/sync-server/src/sdk-headless-entrypoint.test.ts
28
- * (the skipped tests that become the acceptance tests for Phase 1)
29
- */
30
- export {};
31
- // ── Factory functions (to be implemented in Phase 1) ─────────────────────
32
- //
33
- // These will be the public API that headless consumers import:
34
- //
35
- // import { inMemoryStorage, alwaysOnline } from '@abloatai/ablo/headless';
36
- //
37
- // Stubs below show the intended signatures. Implementation is Phase 1 work.
38
- // export function inMemoryStorage(): StorageProvider { ... }
39
- // export function alwaysOnline(): NetworkProvider { ... }
40
- // export function nodeWebSocket(): TransportProvider { ... }
41
- // export function controllableNetwork(): NetworkProvider & { setOnline(v: boolean): void } { ... }
@@ -1,6 +0,0 @@
1
- /**
2
- * Query module barrel — re-exports the public surface for convenience.
3
- * See types.ts and client.ts for the actual definitions.
4
- */
5
- export type { Query, QueryBatch, QueryBatchResult } from './types.js';
6
- export { postQuery, type PostQueryOptions } from './client.js';
@@ -1,5 +0,0 @@
1
- /**
2
- * Query module barrel — re-exports the public surface for convenience.
3
- * See types.ts and client.ts for the actual definitions.
4
- */
5
- export { postQuery } from './client.js';
@@ -1,10 +0,0 @@
1
- /**
2
- * Internal compatibility entrypoint for the schema-powered realtime client.
3
- *
4
- * Use this build for applications that need typed model proxies,
5
- * subscriptions, presence, offline queueing, and a long-lived WebSocket.
6
- */
7
- export { Ablo, computeFKDepthPriority } from '../client/Ablo.js';
8
- export type { AbloOptions, InternalAbloOptions, LocalCountOptions, LocalReadOptions, ModelListScope, ServerReadOptions, ModelOperations, } from '../client/Ablo.js';
9
- import { Ablo } from '../client/Ablo.js';
10
- export default Ablo;
@@ -1,9 +0,0 @@
1
- /**
2
- * Internal compatibility entrypoint for the schema-powered realtime client.
3
- *
4
- * Use this build for applications that need typed model proxies,
5
- * subscriptions, presence, offline queueing, and a long-lived WebSocket.
6
- */
7
- export { Ablo, computeFKDepthPriority } from '../client/Ablo.js';
8
- import { Ablo } from '../client/Ablo.js';
9
- export default Ablo;
@@ -1,23 +0,0 @@
1
- /**
2
- * Database PLANE — which database a model's rows live in. A sibling axis to
3
- * `tenancy` (which says how rows are isolated *within* a database):
4
- *
5
- * - `tenant` — the tenant data plane. For a BYO/dedicated customer this is
6
- * THEIR database; provisioning emits these tables there.
7
- * - `control` — Ablo's control plane (the sync log, attribution, audit, …).
8
- * Never emitted into a customer DB; lives only in Ablo's own DB.
9
- *
10
- * P1 of the sync-delta decomposition (`docs/plans/sync-delta-zod-decomposition.md`):
11
- * declaring the boundary lets BYO provisioning *derive* "what a customer DB gets"
12
- * (`plane === 'tenant'`) instead of hand-coding it. Defaults to `tenant` —
13
- * today every `defineSchema` model is the customer's own data; only Ablo's
14
- * internal tables (once modeled in P2) declare `control`.
15
- */
16
- import { z } from 'zod';
17
- export declare const planeSchema: z.ZodEnum<{
18
- tenant: "tenant";
19
- control: "control";
20
- }>;
21
- export type SchemaPlane = z.infer<typeof planeSchema>;
22
- /** Default plane for a model that doesn't declare one — the tenant data plane. */
23
- export declare const DEFAULT_PLANE: SchemaPlane;
@@ -1,19 +0,0 @@
1
- /**
2
- * Database PLANE — which database a model's rows live in. A sibling axis to
3
- * `tenancy` (which says how rows are isolated *within* a database):
4
- *
5
- * - `tenant` — the tenant data plane. For a BYO/dedicated customer this is
6
- * THEIR database; provisioning emits these tables there.
7
- * - `control` — Ablo's control plane (the sync log, attribution, audit, …).
8
- * Never emitted into a customer DB; lives only in Ablo's own DB.
9
- *
10
- * P1 of the sync-delta decomposition (`docs/plans/sync-delta-zod-decomposition.md`):
11
- * declaring the boundary lets BYO provisioning *derive* "what a customer DB gets"
12
- * (`plane === 'tenant'`) instead of hand-coding it. Defaults to `tenant` —
13
- * today every `defineSchema` model is the customer's own data; only Ablo's
14
- * internal tables (once modeled in P2) declare `control`.
15
- */
16
- import { z } from 'zod';
17
- export const planeSchema = z.enum(['tenant', 'control']);
18
- /** Default plane for a model that doesn't declare one — the tenant data plane. */
19
- export const DEFAULT_PLANE = 'tenant';
@@ -1,103 +0,0 @@
1
- /**
2
- * Canonical Zod description of the `sync_deltas` STORAGE ROW, decomposed by the
3
- * subsystem it belongs to and the database plane it lives in.
4
- *
5
- * `sync_deltas` fuses five control-plane subsystems onto one denormalized row
6
- * (see `docs/plans/sync-delta-zod-decomposition.md`). This module is **P0** of
7
- * that decomposition: it DESCRIBES the existing columns as Zod schemas — no DB
8
- * change, no rewiring — so the subsystem + plane boundaries become explicit and
9
- * type-enforced:
10
- *
11
- * - {@link syncDeltaCoreSchema} — the SYNC-PROTOCOL slice. `tenant` plane:
12
- * the only part that must be written
13
- * atomically with the app row, and the shape
14
- * a BYO outbox marker carries (the portable
15
- * slice).
16
- * - {@link deltaAttributionSchema} — who / on whose authority. `control` plane.
17
- * - {@link deltaProvenanceSchema} — which AI task caused it. `control` plane.
18
- *
19
- * {@link syncDeltaRowSchema} is the full stored row (core ∪ attribution ∪
20
- * provenance). {@link DELTA_PLANES} declares each slice's plane so provisioning
21
- * (P1) can derive "what a customer DB gets" from the schema, not hand-code it.
22
- *
23
- * Distinct from the WIRE `SyncDelta` (`sync/SyncWebSocket.ts`, client-facing) and
24
- * `SourceDelta` (`source/index.ts`, source-mode input) — those are projections of
25
- * this row. Field names mirror those + `AuditChainRow` (`@ablo/audit-chain`).
26
- *
27
- * Monorepo is on Zod v4 — `.extend(...).shape` (not deprecated `.merge`).
28
- */
29
- import { z } from 'zod';
30
- // ── Enums (mirror the Postgres enums; @@map name in the comment) ──────────────
31
- /** `participant_kind` */
32
- export const participantKindSchema = z.enum(['user', 'agent', 'system']);
33
- /** `confirmation_state` */
34
- export const confirmationStateSchema = z.enum([
35
- 'auto',
36
- 'previewed',
37
- 'approved',
38
- 'required_human_approval',
39
- 'auto_historical',
40
- ]);
41
- /** `backfill_provenance` */
42
- export const backfillProvenanceSchema = z.enum(['exact', 'inferred', 'unknown']);
43
- /** A delta payload: the full post-mutation row (or null for deletes). */
44
- const deltaDataSchema = z.record(z.string(), z.unknown()).nullable();
45
- // ── Core — `tenant` plane (the sync-protocol slice) ───────────────────────────
46
- /**
47
- * Everything a client needs to materialize the change, plus the tenant key. The
48
- * portable slice: the only part written atomically with the app row, and the
49
- * shape a BYO outbox marker carries. `id` / `createdAt` / `syncGroups` are
50
- * control-plane-assigned at enrich/append time, so they're optional here (an
51
- * outbox marker doesn't have them yet).
52
- */
53
- export const syncDeltaCoreSchema = z.object({
54
- /** Monotonic sync id; assigned control-plane on append (absent on a marker). */
55
- id: z.union([z.bigint(), z.number()]).optional(),
56
- /** `action_type` — single char: `I` | `U` | `D`. */
57
- actionType: z.string().min(1).max(1),
58
- modelName: z.string().min(1),
59
- modelId: z.string().min(1),
60
- data: deltaDataSchema,
61
- previousData: deltaDataSchema.optional(),
62
- /** Sync-group routing keys; computed control-plane (`buildDeltaSyncGroups`). */
63
- syncGroups: z.array(z.string()).optional(),
64
- /** The TRUSTED committing org — the coarse tenant-isolation boundary. */
65
- organizationId: z.string().nullable(),
66
- /** ISO timestamp; control-plane-assigned at append. */
67
- createdAt: z.string().optional(),
68
- transactionId: z.string().nullable(),
69
- });
70
- // ── Attribution — `control` plane ─────────────────────────────────────────────
71
- export const deltaAttributionSchema = z.object({
72
- /** Legacy single-actor column, derived during the dual-write window. */
73
- createdBy: z.string().nullable(),
74
- actorId: z.string().nullable(),
75
- actorKind: participantKindSchema.nullable(),
76
- onBehalfOfId: z.string().nullable(),
77
- onBehalfOfKind: participantKindSchema.nullable(),
78
- capabilityId: z.string().nullable(),
79
- delegationChainRootUserId: z.string().nullable().optional(),
80
- confirmationState: confirmationStateSchema.nullable(),
81
- backfillProvenance: backfillProvenanceSchema.nullable(),
82
- });
83
- // ── Provenance — `control` plane (→ tasks) ────────────────────────────────────
84
- export const deltaProvenanceSchema = z.object({
85
- /** FK to `Task.id` — the LLM turn that produced this commit. */
86
- causedByTaskId: z.string().nullable(),
87
- });
88
- // ── Full stored row + plane map ───────────────────────────────────────────────
89
- /** The complete `sync_deltas` row as stored today (core ∪ attribution ∪ provenance). */
90
- export const syncDeltaRowSchema = syncDeltaCoreSchema
91
- .extend(deltaAttributionSchema.shape)
92
- .extend(deltaProvenanceSchema.shape);
93
- /**
94
- * Each slice's database plane. The durable answer to "what does a BYO customer DB
95
- * get?" — only `tenant`-plane slices. Provisioning (P1) reads this instead of
96
- * hand-coding the boundary; the BYO outbox writes the `tenant` slice and the
97
- * relay enriches the `control` slices in Ablo's own database.
98
- */
99
- export const DELTA_PLANES = {
100
- core: 'tenant',
101
- attribution: 'control',
102
- provenance: 'control',
103
- };
@@ -1,102 +0,0 @@
1
- /**
2
- * Canonical Zod contract for the WIRE delta — the broadcast object that travels
3
- * server → client (the `delta` / `sync_response` frame payload). This is the
4
- * "same contract across both" seam: the SDK client and the sync-server each
5
- * derive their `SyncDelta` type from THESE schemas via `z.infer`, instead of
6
- * hand-maintaining two interfaces that drift (they had: the server typed
7
- * `actionType` as `string` and `createdBy` as a nested ref; the client typed
8
- * `actionType` as the 8-value union and `createdBy` as a flat string — a silent
9
- * divergence the client never noticed because it ignores attribution).
10
- *
11
- * Distinct from {@link import('./sync-delta-row.js').syncDeltaRowSchema} — that
12
- * is the STORED ROW (has `organizationId`, flat `actor_id`/`actor_kind`
13
- * columns, single-char action). The wire delta is a PROJECTION: no
14
- * `organizationId` (the server-trusted isolation predicate is never broadcast),
15
- * the full Linear action vocabulary, and attribution hydrated into nested
16
- * {@link ParticipantRef}s.
17
- *
18
- * Shape (per the "shared core + layer extensions" decision):
19
- * - {@link syncDeltaWireCoreSchema} — the fields BOTH sides agree on.
20
- * - {@link clientSyncDeltaSchema} — core + the SDK-only extras.
21
- * - {@link serverSyncDeltaSchema} — core + the audit attribution the server
22
- * enriches each broadcast with (the client
23
- * structurally ignores these).
24
- *
25
- * Monorepo is on Zod v4.
26
- */
27
- import { z } from 'zod';
28
- import { participantKindSchema, confirmationStateSchema } from './sync-delta-row.js';
29
- /**
30
- * `action_type` on the WIRE — the full Linear-compatible vocabulary a broadcast
31
- * carries (vs the stored row's core CRUD). `I`nsert, `U`pdate, `D`elete,
32
- * `A`rchive, `V` reVive/unarchive, `C`overing (gained visibility), `G`roupAdded,
33
- * `S` groupRemoved.
34
- */
35
- export const syncDeltaActionSchema = z.enum(['I', 'U', 'D', 'A', 'V', 'C', 'G', 'S']);
36
- /**
37
- * A wire delta payload: the post-mutation row object, a control-frame STRING
38
- * (e.g. a serialized group-change payload on `G`/`S` deltas), or `null` (on
39
- * deletes). Wider than the stored `data` (row-or-null) precisely because the
40
- * group/permission frames serialize a string.
41
- */
42
- export const wireDeltaDataSchema = z
43
- .union([z.record(z.string(), z.unknown()), z.string()])
44
- .nullable();
45
- /**
46
- * A nested participant reference as carried on a BROADCAST delta. The server
47
- * hydrates the flat `actor_id`/`actor_kind` stored columns into this.
48
- */
49
- export const participantRefSchema = z.object({
50
- kind: participantKindSchema,
51
- id: z.string(),
52
- });
53
- /**
54
- * The fields BOTH server and client agree on for a broadcast delta — the shared
55
- * contract. `transactionId` is modelled as the client sees it (optional string);
56
- * the server projection widens it to nullable. No `organizationId` (never
57
- * broadcast). No `createdBy`/attribution here — those types differ per layer and
58
- * live in the extensions below.
59
- */
60
- export const syncDeltaWireCoreSchema = z.object({
61
- id: z.number(),
62
- actionType: syncDeltaActionSchema,
63
- modelName: z.string().min(1),
64
- modelId: z.string().min(1),
65
- data: wireDeltaDataSchema,
66
- previousData: wireDeltaDataSchema.optional(),
67
- syncGroups: z.array(z.string()),
68
- transactionId: z.string().optional(),
69
- createdAt: z.string(),
70
- });
71
- /**
72
- * Client projection — core + the SDK-only fields the client reads locally.
73
- * `z.infer` of this is the SDK's `SyncDelta` (see `sync/SyncWebSocket.ts`).
74
- */
75
- export const clientSyncDeltaSchema = syncDeltaWireCoreSchema.extend({
76
- /** @deprecated Flat actor id; superseded by the server's nested `actor`. The
77
- * client never reads it — kept only so the wire shape round-trips. */
78
- createdBy: z.string().optional(),
79
- /** Client-only payload slot (e.g. legacy group-change metadata). */
80
- metadata: wireDeltaDataSchema.optional(),
81
- /** Echo-matching id the client correlates against its optimistic mutation. */
82
- clientMutationId: z.string().optional(),
83
- });
84
- /**
85
- * Server projection — core + the audit attribution the server enriches each
86
- * broadcast with (for the audit pane). The client ignores all of it. Overrides
87
- * `transactionId` to nullable (the server's stored-column reality).
88
- */
89
- export const serverSyncDeltaSchema = syncDeltaWireCoreSchema.extend({
90
- transactionId: z.string().nullable(),
91
- /** @deprecated Mirrors `actor` 1:1. */
92
- createdBy: participantRefSchema.nullable(),
93
- /** Who DID the action. */
94
- actor: participantRefSchema.nullable(),
95
- /** On WHOSE AUTHORITY they acted (equals `actor` for human-direct commits). */
96
- onBehalfOf: participantRefSchema.nullable(),
97
- /** FK to AgentCapabilityRoot.capabilityId; non-null for agent/system commits. */
98
- capabilityId: z.string().nullable(),
99
- confirmationState: confirmationStateSchema.nullable(),
100
- /** FK to AgentTurn.id — the prompt that caused this delta. */
101
- causedByTaskId: z.string().nullable(),
102
- });
@@ -1,51 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server/next` — mount Ablo's HTTP surface in a consumer's
3
- * Next.js App Router, the Better-Auth `toNextJsHandler` way:
4
- *
5
- * ```ts
6
- * // app/api/ablo/[...all]/route.ts
7
- * import { toAbloHandler } from '@abloatai/ablo/server/next';
8
- * import { ablo } from '@/lib/ablo'; // your configured Ablo HTTP app
9
- * export const { GET, POST } = toAbloHandler(ablo);
10
- * ```
11
- *
12
- * Ablo's HTTP endpoints (bootstrap / query / the commit fallback) are stateless
13
- * request→response, so they drop straight into a route handler. The realtime
14
- * WebSocket channel is deliberately NOT served here — it is a persistent
15
- * connection a serverless route handler cannot host, and stays an Ablo-hosted
16
- * (or long-running Node) service. That is the HTTP/WSS split the architecture
17
- * draws on purpose (see docs/plans/sync-gateway-audit-log-architecture.md).
18
- *
19
- * The package owns this MOUNT PRIMITIVE; the host owns the infra-bound app it
20
- * wraps (the Hono app holding the Hub + routes + auth). Mirrors Better Auth,
21
- * where `betterAuth()` builds the `.handler` and `toNextJsHandler` just maps it
22
- * onto the HTTP verbs.
23
- */
24
- /**
25
- * Anything that resolves a Web `Request` to a `Response` — e.g. a Hono app's
26
- * `.fetch`, a Better-Auth-style `{ handler }`, or a bare function.
27
- */
28
- export type AbloFetchHandler = (request: Request) => Response | Promise<Response>;
29
- /** The shapes `toAbloHandler` accepts: a Hono-style `{ fetch }`, a
30
- * `{ handler }`, or a bare `(Request) => Response`. */
31
- export type AbloHttpApp = {
32
- readonly fetch: AbloFetchHandler;
33
- } | {
34
- readonly handler: AbloFetchHandler;
35
- } | AbloFetchHandler;
36
- /** The route-handler object a Next.js App Router `route.ts` re-exports. One
37
- * handler bound to every method the `[...all]` catch-all may receive. */
38
- export interface AbloRouteHandlers {
39
- readonly GET: AbloFetchHandler;
40
- readonly POST: AbloFetchHandler;
41
- readonly PATCH: AbloFetchHandler;
42
- readonly PUT: AbloFetchHandler;
43
- readonly DELETE: AbloFetchHandler;
44
- readonly OPTIONS: AbloFetchHandler;
45
- }
46
- /**
47
- * Wrap a configured Ablo HTTP app into Next.js App Router route handlers.
48
- * Mirrors Better Auth's `toNextJsHandler` — accepts the app's `fetch`/`handler`
49
- * (or a bare function) and returns one handler per verb.
50
- */
51
- export declare function toAbloHandler(app: AbloHttpApp): AbloRouteHandlers;
@@ -1,47 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server/next` — mount Ablo's HTTP surface in a consumer's
3
- * Next.js App Router, the Better-Auth `toNextJsHandler` way:
4
- *
5
- * ```ts
6
- * // app/api/ablo/[...all]/route.ts
7
- * import { toAbloHandler } from '@abloatai/ablo/server/next';
8
- * import { ablo } from '@/lib/ablo'; // your configured Ablo HTTP app
9
- * export const { GET, POST } = toAbloHandler(ablo);
10
- * ```
11
- *
12
- * Ablo's HTTP endpoints (bootstrap / query / the commit fallback) are stateless
13
- * request→response, so they drop straight into a route handler. The realtime
14
- * WebSocket channel is deliberately NOT served here — it is a persistent
15
- * connection a serverless route handler cannot host, and stays an Ablo-hosted
16
- * (or long-running Node) service. That is the HTTP/WSS split the architecture
17
- * draws on purpose (see docs/plans/sync-gateway-audit-log-architecture.md).
18
- *
19
- * The package owns this MOUNT PRIMITIVE; the host owns the infra-bound app it
20
- * wraps (the Hono app holding the Hub + routes + auth). Mirrors Better Auth,
21
- * where `betterAuth()` builds the `.handler` and `toNextJsHandler` just maps it
22
- * onto the HTTP verbs.
23
- */
24
- function resolveFetch(app) {
25
- if (typeof app === 'function')
26
- return app;
27
- if ('fetch' in app)
28
- return app.fetch;
29
- return app.handler;
30
- }
31
- /**
32
- * Wrap a configured Ablo HTTP app into Next.js App Router route handlers.
33
- * Mirrors Better Auth's `toNextJsHandler` — accepts the app's `fetch`/`handler`
34
- * (or a bare function) and returns one handler per verb.
35
- */
36
- export function toAbloHandler(app) {
37
- const fetch = resolveFetch(app);
38
- const handler = (request) => fetch(request);
39
- return {
40
- GET: handler,
41
- POST: handler,
42
- PATCH: handler,
43
- PUT: handler,
44
- DELETE: handler,
45
- OPTIONS: handler,
46
- };
47
- }