@abloatai/ablo 0.26.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +101 -85
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +131 -147
  5. package/dist/Database.d.ts +54 -68
  6. package/dist/Database.js +97 -113
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +37 -52
  12. package/dist/Model.js +46 -61
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +112 -112
  18. package/dist/SyncClient.js +165 -172
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  22. package/dist/adapters/inMemoryStorage.js +9 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +167 -119
  50. package/dist/client/Ablo.d.ts +73 -73
  51. package/dist/client/Ablo.js +125 -160
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +133 -38
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +14 -17
  61. package/dist/client/createInternalComponents.js +25 -30
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +57 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +67 -87
  76. package/dist/client/options.d.ts +134 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +15 -20
  91. package/dist/client/wsMutationExecutor.js +17 -23
  92. package/dist/context.d.ts +6 -4
  93. package/dist/context.js +6 -4
  94. package/dist/coordination/index.d.ts +10 -8
  95. package/dist/coordination/index.js +14 -12
  96. package/dist/coordination/schema.d.ts +176 -128
  97. package/dist/coordination/schema.js +197 -133
  98. package/dist/coordination/trace.d.ts +9 -10
  99. package/dist/coordination/trace.js +13 -14
  100. package/dist/core/DatabaseManager.d.ts +5 -7
  101. package/dist/core/DatabaseManager.js +15 -19
  102. package/dist/core/QueryProcessor.d.ts +7 -9
  103. package/dist/core/QueryProcessor.js +22 -28
  104. package/dist/core/QueryView.d.ts +8 -8
  105. package/dist/core/QueryView.js +2 -2
  106. package/dist/core/StoreManager.d.ts +12 -14
  107. package/dist/core/StoreManager.js +21 -24
  108. package/dist/core/ViewRegistry.d.ts +5 -5
  109. package/dist/core/ViewRegistry.js +4 -4
  110. package/dist/core/index.d.ts +17 -12
  111. package/dist/core/index.js +32 -26
  112. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  113. package/dist/core/openIDBWithTimeout.js +42 -43
  114. package/dist/core/queryUtils.d.ts +45 -0
  115. package/dist/core/queryUtils.js +69 -0
  116. package/dist/core/storeContract.d.ts +63 -61
  117. package/dist/core/storeContract.js +8 -12
  118. package/dist/environment.d.ts +28 -0
  119. package/dist/environment.js +21 -0
  120. package/dist/errorCodes.d.ts +107 -99
  121. package/dist/errorCodes.js +131 -132
  122. package/dist/errors.d.ts +160 -166
  123. package/dist/errors.js +155 -158
  124. package/dist/index.d.ts +30 -27
  125. package/dist/index.js +89 -86
  126. package/dist/interfaces/index.d.ts +102 -113
  127. package/dist/interfaces/index.js +5 -4
  128. package/dist/keys/index.d.ts +27 -29
  129. package/dist/keys/index.js +41 -40
  130. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  131. package/dist/mutators/RecordingTransaction.js +31 -37
  132. package/dist/mutators/Transaction.d.ts +18 -26
  133. package/dist/mutators/Transaction.js +14 -20
  134. package/dist/mutators/UndoManager.d.ts +122 -131
  135. package/dist/mutators/UndoManager.js +145 -156
  136. package/dist/mutators/defineMutators.d.ts +23 -34
  137. package/dist/mutators/defineMutators.js +14 -20
  138. package/dist/mutators/inverseOp.d.ts +12 -15
  139. package/dist/mutators/inverseOp.js +12 -15
  140. package/dist/mutators/mutateActions.d.ts +10 -9
  141. package/dist/mutators/mutateActions.js +1 -1
  142. package/dist/mutators/readerActions.d.ts +9 -8
  143. package/dist/mutators/readerActions.js +2 -2
  144. package/dist/mutators/undoApply.d.ts +31 -27
  145. package/dist/mutators/undoApply.js +26 -24
  146. package/dist/policy/index.d.ts +5 -3
  147. package/dist/policy/index.js +5 -3
  148. package/dist/policy/types.d.ts +104 -100
  149. package/dist/policy/types.js +67 -66
  150. package/dist/query/client.d.ts +28 -23
  151. package/dist/query/client.js +45 -43
  152. package/dist/query/types.d.ts +37 -60
  153. package/dist/query/types.js +13 -33
  154. package/dist/react/AbloProvider.d.ts +1 -1
  155. package/dist/react/AbloProvider.js +2 -2
  156. package/dist/react/context.d.ts +25 -28
  157. package/dist/react/context.js +9 -10
  158. package/dist/react/index.d.ts +41 -42
  159. package/dist/react/index.js +37 -38
  160. package/dist/react/internalContext.d.ts +17 -19
  161. package/dist/react/useAblo.d.ts +23 -22
  162. package/dist/react/useAblo.js +16 -14
  163. package/dist/react/useCurrentUserId.d.ts +8 -7
  164. package/dist/react/useCurrentUserId.js +8 -7
  165. package/dist/react/useErrorListener.d.ts +7 -7
  166. package/dist/react/useErrorListener.js +10 -11
  167. package/dist/react/useMutationFailureListener.d.ts +8 -8
  168. package/dist/react/useMutationFailureListener.js +8 -8
  169. package/dist/react/useMutators.d.ts +11 -11
  170. package/dist/react/useMutators.js +3 -3
  171. package/dist/react/useReactive.js +2 -2
  172. package/dist/react/useSyncStatus.d.ts +4 -6
  173. package/dist/react/useUndoScope.d.ts +7 -9
  174. package/dist/react/useUndoScope.js +1 -1
  175. package/dist/schema/coordination.d.ts +21 -25
  176. package/dist/schema/coordination.js +21 -25
  177. package/dist/schema/ddl.d.ts +43 -39
  178. package/dist/schema/ddl.js +75 -68
  179. package/dist/schema/ddlLock.d.ts +20 -24
  180. package/dist/schema/ddlLock.js +18 -23
  181. package/dist/schema/diff.d.ts +99 -61
  182. package/dist/schema/diff.js +43 -34
  183. package/dist/schema/field.d.ts +37 -42
  184. package/dist/schema/field.js +35 -48
  185. package/dist/schema/generate.d.ts +12 -12
  186. package/dist/schema/generate.js +12 -12
  187. package/dist/schema/index.d.ts +2 -2
  188. package/dist/schema/index.js +21 -23
  189. package/dist/schema/model.d.ts +118 -143
  190. package/dist/schema/model.js +22 -33
  191. package/dist/schema/openapi.d.ts +10 -9
  192. package/dist/schema/openapi.js +5 -3
  193. package/dist/schema/queries.d.ts +29 -31
  194. package/dist/schema/queries.js +23 -25
  195. package/dist/schema/relation.d.ts +89 -99
  196. package/dist/schema/relation.js +13 -13
  197. package/dist/schema/residency.d.ts +16 -13
  198. package/dist/schema/residency.js +16 -13
  199. package/dist/schema/roles.d.ts +36 -43
  200. package/dist/schema/roles.js +31 -37
  201. package/dist/schema/schema.d.ts +33 -42
  202. package/dist/schema/schema.js +31 -32
  203. package/dist/schema/select.d.ts +13 -13
  204. package/dist/schema/select.js +13 -13
  205. package/dist/schema/serialize.d.ts +28 -31
  206. package/dist/schema/serialize.js +27 -31
  207. package/dist/schema/sugar.d.ts +17 -32
  208. package/dist/schema/sugar.js +14 -29
  209. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  210. package/dist/schema/syncDeltaRow.js +89 -0
  211. package/dist/schema/tenancy.d.ts +44 -46
  212. package/dist/schema/tenancy.js +46 -48
  213. package/dist/server/adapter.d.ts +58 -58
  214. package/dist/server/adapter.js +13 -14
  215. package/dist/server/commit.d.ts +60 -64
  216. package/dist/server/index.d.ts +9 -10
  217. package/dist/server/index.js +1 -1
  218. package/dist/server/readConfig.d.ts +70 -0
  219. package/dist/server/readConfig.js +8 -0
  220. package/dist/server/storageMode.d.ts +23 -0
  221. package/dist/server/storageMode.js +17 -0
  222. package/dist/source/adapter.d.ts +30 -25
  223. package/dist/source/adapter.js +10 -10
  224. package/dist/source/adapters/drizzle.d.ts +28 -23
  225. package/dist/source/adapters/drizzle.js +30 -25
  226. package/dist/source/adapters/kysely.d.ts +27 -25
  227. package/dist/source/adapters/kysely.js +24 -23
  228. package/dist/source/adapters/memory.d.ts +8 -7
  229. package/dist/source/adapters/memory.js +9 -8
  230. package/dist/source/adapters/prisma.d.ts +13 -12
  231. package/dist/source/adapters/prisma.js +22 -25
  232. package/dist/source/conformance.d.ts +18 -11
  233. package/dist/source/conformance.js +17 -11
  234. package/dist/source/connector.d.ts +31 -32
  235. package/dist/source/connector.js +28 -28
  236. package/dist/source/connectorProtocol.d.ts +160 -0
  237. package/dist/source/connectorProtocol.js +162 -0
  238. package/dist/source/contract.d.ts +26 -27
  239. package/dist/source/contract.js +28 -29
  240. package/dist/source/factory.d.ts +46 -58
  241. package/dist/source/factory.js +22 -27
  242. package/dist/source/index.d.ts +7 -9
  243. package/dist/source/index.js +12 -14
  244. package/dist/source/migrations.d.ts +9 -9
  245. package/dist/source/migrations.js +9 -9
  246. package/dist/source/next.d.ts +9 -10
  247. package/dist/source/next.js +6 -7
  248. package/dist/source/pushQueue.d.ts +69 -47
  249. package/dist/source/pushQueue.js +32 -28
  250. package/dist/source/signing.d.ts +46 -17
  251. package/dist/source/signing.js +28 -11
  252. package/dist/source/types.d.ts +121 -104
  253. package/dist/source/types.js +13 -14
  254. package/dist/stores/ObjectStore.d.ts +10 -11
  255. package/dist/stores/ObjectStore.js +11 -12
  256. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  257. package/dist/stores/SyncActionStore.d.ts +7 -11
  258. package/dist/stores/SyncActionStore.js +13 -17
  259. package/dist/surface.d.ts +27 -20
  260. package/dist/surface.js +27 -20
  261. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  262. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  263. package/dist/sync/ConnectionManager.d.ts +39 -50
  264. package/dist/sync/ConnectionManager.js +55 -66
  265. package/dist/sync/NetworkProbe.d.ts +24 -29
  266. package/dist/sync/NetworkProbe.js +63 -69
  267. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  268. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  269. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  270. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  271. package/dist/sync/SyncWebSocket.d.ts +139 -165
  272. package/dist/sync/SyncWebSocket.js +191 -223
  273. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  274. package/dist/sync/awaitClaimGrant.js +11 -11
  275. package/dist/sync/bootstrapApply.d.ts +34 -24
  276. package/dist/sync/bootstrapApply.js +27 -19
  277. package/dist/sync/commitFrames.d.ts +21 -20
  278. package/dist/sync/commitFrames.js +18 -18
  279. package/dist/sync/createClaimStream.d.ts +23 -22
  280. package/dist/sync/createClaimStream.js +105 -23
  281. package/dist/sync/createPresenceStream.d.ts +19 -18
  282. package/dist/sync/createPresenceStream.js +25 -26
  283. package/dist/sync/createSnapshot.d.ts +12 -14
  284. package/dist/sync/createSnapshot.js +20 -26
  285. package/dist/sync/credentialLifecycle.d.ts +104 -104
  286. package/dist/sync/credentialLifecycle.js +140 -147
  287. package/dist/sync/deltaPipeline.d.ts +36 -34
  288. package/dist/sync/deltaPipeline.js +64 -65
  289. package/dist/sync/groupChange.d.ts +63 -61
  290. package/dist/sync/groupChange.js +74 -78
  291. package/dist/sync/heartbeat.d.ts +34 -33
  292. package/dist/sync/heartbeat.js +31 -31
  293. package/dist/sync/participants.d.ts +19 -19
  294. package/dist/sync/schemas.d.ts +3 -2
  295. package/dist/sync/schemas.js +14 -10
  296. package/dist/sync/syncCursor.d.ts +17 -21
  297. package/dist/sync/syncCursor.js +17 -21
  298. package/dist/sync/syncPlan.d.ts +28 -36
  299. package/dist/sync/syncPlan.js +18 -19
  300. package/dist/sync/syncPosition.d.ts +54 -49
  301. package/dist/sync/syncPosition.js +57 -52
  302. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  303. package/dist/sync/wsFrameHandlers.js +63 -67
  304. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  305. package/dist/testing/fixtures/bootstrap.js +12 -6
  306. package/dist/testing/fixtures/deltas.d.ts +30 -33
  307. package/dist/testing/fixtures/deltas.js +30 -33
  308. package/dist/testing/fixtures/models.d.ts +11 -10
  309. package/dist/testing/fixtures/models.js +11 -10
  310. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  311. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  312. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  313. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  314. package/dist/testing/helpers/wait.d.ts +13 -8
  315. package/dist/testing/helpers/wait.js +13 -8
  316. package/dist/testing/index.d.ts +3 -3
  317. package/dist/testing/index.js +2 -2
  318. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  319. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  320. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  321. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  322. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  323. package/dist/testing/mocks/MockSyncContext.js +15 -13
  324. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  325. package/dist/testing/mocks/MockSyncStore.js +11 -11
  326. package/dist/testing/mocks/MockWebSocket.d.ts +26 -22
  327. package/dist/testing/mocks/MockWebSocket.js +22 -21
  328. package/dist/transactions/TransactionQueue.d.ts +181 -176
  329. package/dist/transactions/TransactionQueue.js +338 -350
  330. package/dist/transactions/TransactionStore.d.ts +6 -4
  331. package/dist/transactions/TransactionStore.js +6 -4
  332. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  333. package/dist/transactions/UnconfirmedWrites.js +104 -0
  334. package/dist/transactions/coalesceRules.d.ts +41 -17
  335. package/dist/transactions/coalesceRules.js +40 -17
  336. package/dist/transactions/commitPayload.d.ts +48 -52
  337. package/dist/transactions/commitPayload.js +48 -57
  338. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  339. package/dist/transactions/deltaConfirmation.js +37 -45
  340. package/dist/transactions/optimisticApply.d.ts +49 -0
  341. package/dist/transactions/optimisticApply.js +65 -0
  342. package/dist/transactions/{persistedReplay.d.ts → replayValidation.d.ts} +28 -22
  343. package/dist/transactions/{persistedReplay.js → replayValidation.js} +33 -27
  344. package/dist/types/global.d.ts +46 -41
  345. package/dist/types/global.js +20 -19
  346. package/dist/types/index.d.ts +71 -77
  347. package/dist/types/index.js +22 -22
  348. package/dist/types/modelData.d.ts +6 -8
  349. package/dist/types/modelData.js +5 -7
  350. package/dist/types/participant.d.ts +10 -11
  351. package/dist/types/participant.js +6 -8
  352. package/dist/types/streams.d.ts +208 -195
  353. package/dist/types/streams.js +7 -7
  354. package/dist/utils/asyncIterator.d.ts +25 -32
  355. package/dist/utils/asyncIterator.js +25 -32
  356. package/dist/utils/duration.d.ts +12 -15
  357. package/dist/utils/duration.js +12 -15
  358. package/dist/utils/mobxSetup.d.ts +53 -0
  359. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  360. package/dist/webhooks/events.d.ts +21 -16
  361. package/dist/webhooks/events.js +10 -8
  362. package/dist/webhooks/index.d.ts +5 -7
  363. package/dist/webhooks/index.js +5 -7
  364. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  365. package/dist/wire/delta.js +114 -0
  366. package/dist/wire/errorEnvelope.d.ts +30 -31
  367. package/dist/wire/errorEnvelope.js +34 -40
  368. package/dist/wire/frames.d.ts +79 -86
  369. package/dist/wire/frames.js +26 -33
  370. package/dist/wire/index.d.ts +14 -12
  371. package/dist/wire/index.js +30 -26
  372. package/dist/wire/listEnvelope.d.ts +16 -23
  373. package/dist/wire/listEnvelope.js +7 -6
  374. package/dist/wire/protocol.d.ts +25 -32
  375. package/dist/wire/protocol.js +25 -32
  376. package/dist/wire/protocolVersion.d.ts +44 -40
  377. package/dist/wire/protocolVersion.js +44 -40
  378. package/docs/coordination.md +59 -0
  379. package/package.json +11 -10
  380. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  381. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  382. package/dist/core/query-utils.d.ts +0 -34
  383. package/dist/core/query-utils.js +0 -59
  384. package/dist/schema/sync-delta-row.js +0 -103
  385. package/dist/schema/sync-delta-wire.js +0 -102
  386. package/dist/server/read-config.d.ts +0 -67
  387. package/dist/server/read-config.js +0 -8
  388. package/dist/server/storage-mode.d.ts +0 -8
  389. package/dist/server/storage-mode.js +0 -28
  390. package/dist/source/connector-protocol.d.ts +0 -159
  391. package/dist/source/connector-protocol.js +0 -161
  392. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  393. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  394. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  395. package/dist/transactions/mutation-error-handler.js +0 -39
  396. package/dist/transactions/optimistic.d.ts +0 -24
  397. package/dist/transactions/optimistic.js +0 -45
  398. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,52 +0,0 @@
1
- /**
2
- * Coordination context middleware — reads peer claims on the same
3
- * entity from the sync engine's presence stream and injects a brief
4
- * coordination note into the prompt before the LLM call.
5
- *
6
- * The complement of `claim-broadcast.ts`: that one declares what
7
- * THIS agent is about to do; this one reads what OTHERS are doing
8
- * and tells the LLM about it. Together they make multiplayer-with-
9
- * AI structurally real — the AI knows when a human or another
10
- * agent is mid-edit and can defer / phrase its work as
11
- * "while you finish that, I'll …" / suggest waiting / coordinate
12
- * explicitly.
13
- *
14
- * Open-source-clean: depends only on `@ai-sdk/provider` types and
15
- * the package's own `SyncAgent`. Consumers compose via the AI
16
- * SDK's `wrapLanguageModel`.
17
- *
18
- * Cost: zero extra LLM calls (read happens locally from the agent's
19
- * cached presence stream — already in memory from the WS subscription).
20
- * Adds a few sentences to the system prompt (typically <100 tokens)
21
- * only when peers are actively editing.
22
- */
23
- import type { LanguageModelV3Middleware } from '@ai-sdk/provider';
24
- import type { Ablo } from '../client/Ablo.js';
25
- import type { SchemaRecord } from '../schema/schema.js';
26
- import type { ClaimTarget } from '../types/streams.js';
27
- export type { ClaimTarget };
28
- export interface CoordinationContextMiddlewareOptions<R extends SchemaRecord = SchemaRecord> {
29
- readonly agent: Ablo<R> | null;
30
- readonly target: ClaimTarget | null;
31
- /**
32
- * Optional claimId(s) to exclude from the read — typically this
33
- * agent's own active claim so the coordination note doesn't tell
34
- * the AI "you yourself are editing this." When middleware is
35
- * composed with `claimBroadcastMiddleware` in the standard order,
36
- * `transformParams` runs BEFORE the broadcast's `wrapStream`
37
- * declares its claim, so the agent's own claim isn't yet in the
38
- * cached presence and self-filtering isn't needed. The hook is
39
- * here for callers that compose differently or for fleet
40
- * coordination (filter sibling worker claims).
41
- */
42
- readonly excludeClaimIds?: readonly string[];
43
- }
44
- /**
45
- * Build the middleware. When `agent` or `target` is null, returns a
46
- * pass-through.
47
- *
48
- * Generic over the schema record — see `claimBroadcastMiddleware`
49
- * for why `Ablo<S>` and `Ablo<SchemaRecord>` aren't structurally
50
- * assignable.
51
- */
52
- export declare function coordinationContextMiddleware<R extends SchemaRecord = SchemaRecord>(options: CoordinationContextMiddlewareOptions<R>): LanguageModelV3Middleware;
@@ -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,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_RESIDENCY} 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_RESIDENCY = {
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,67 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — per-model READ configuration the bootstrap
3
- * reader consumes. Host-side type config (physical table, tenancy column,
4
- * parent-scoping) — pure data, no `postgres` — so it lives in the server
5
- * subpath and feeds the `DataAdapter` read contract. The SQL that consumes it
6
- * (the bootstrap query builder) stays host-side.
7
- */
8
- /** A field→column mapping with an explicit post-`SELECT *` alias. */
9
- export interface ColumnOverride {
10
- readonly field: string;
11
- readonly column: string;
12
- readonly alias: string;
13
- }
14
- export interface BootstrapModel {
15
- name: string;
16
- /**
17
- * Additional names accepted for request-side lookup/filtering. In DB-canonical
18
- * mode `name` stays the physical table name, while aliases cover generated
19
- * compatibility names such as `WeatherReports` / `weatherReports`.
20
- */
21
- aliases?: readonly string[];
22
- /**
23
- * Schema key used by source endpoints. `name` remains the wire/result model
24
- * name, usually the typename; source handlers are keyed by the developer's
25
- * schema object (`files`, `slideLayers`, ...).
26
- */
27
- sourceModel?: string;
28
- table: string;
29
- syncGroups?: string[];
30
- enabled?: boolean;
31
- /** Max rows to return. Omit for unlimited. Maps to schema's bootstrapLimit. */
32
- limit?: number;
33
- /** SQL ORDER BY clause. Default: 'id'. Maps to schema's bootstrapOrderBy. */
34
- orderBy?: string;
35
- /** Whether the table has organization_id. Default: true. */
36
- orgScoped?: boolean;
37
- /** Physical tenancy column (default `organization_id`, configurable per model). */
38
- orgColumn?: string;
39
- /**
40
- * Parent-table scoping for rows with no `organization_id` column. Mirrors the
41
- * schema's `scopedVia` option. When set, the bootstrap query emits:
42
- *
43
- * WHERE <table>.<localKey> IN
44
- * (SELECT <parentKey> FROM <parentTable> WHERE <parentOrgColumn> = $1)
45
- *
46
- * Applied IN ADDITION TO whatever `orgScoped` dictates — so a table can have
47
- * its own `organization_id` AND further narrow via a parent, though the common
48
- * use is `orgScoped: false` + `scopedVia` on tables that lack the column.
49
- */
50
- scopedVia?: {
51
- localKey: string;
52
- parentTable: string;
53
- parentKey?: string;
54
- parentOrgColumn?: string;
55
- };
56
- /** Client-facing field name → physical DB column for declared fields. */
57
- fieldColumns?: Record<string, string>;
58
- /** Physical-column aliases needed after SELECT * for `.from(...)` fields. */
59
- columnOverrides?: readonly ColumnOverride[];
60
- /**
61
- * Physical columns the schema declares as `json` (`field.json()`). A json
62
- * field stored in a TEXT column comes back from `row_to_json` as a serialized
63
- * string; the bootstrap re-parses these so the wire is the canonical object
64
- * regardless of physical column type (jsonb returns objects natively → no-op).
65
- */
66
- jsonColumns?: readonly string[];
67
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — per-model READ configuration the bootstrap
3
- * reader consumes. Host-side type config (physical table, tenancy column,
4
- * parent-scoping) — pure data, no `postgres` — so it lives in the server
5
- * subpath and feeds the `DataAdapter` read contract. The SQL that consumes it
6
- * (the bootstrap query builder) stays host-side.
7
- */
8
- export {};
@@ -1,8 +0,0 @@
1
- /** See module note — host-deployment vocabulary, never customer-facing. */
2
- export declare const storageModeSchema: z.ZodEnum<{
3
- source: "source";
4
- hosted: "hosted";
5
- selfHosted: "selfHosted";
6
- }>;
7
- /** See module note — host-deployment vocabulary, never customer-facing. */
8
- export type StorageMode = z.infer<typeof storageModeSchema>;
@@ -1,28 +0,0 @@
1
- /**
2
- * `@abloatai/ablo/server` — the storage-mode vocabulary the `DataAdapter`
3
- * contract supports. Analogous to Better Auth's adapter `id`/`adapterId`: a
4
- * diagnostic discriminator on the adapter, NOT a routing switch (routing goes
5
- * through the resolver/factory). The package owns this enum so the contract and
6
- * every host adapter agree on the closed set:
7
- * - `hosted` — Ablo's control-plane database.
8
- * - `selfHosted` — the customer's database, same execution path as hosted.
9
- * - `source` — a customer-owned endpoint (credentialless ingestion).
10
- *
11
- * Deployment topology, not product vocabulary. Customers never see a
12
- * "storage mode" — their story is `ablo connect` (WAL replication: reads tail
13
- * their database's logical-replication stream, the data stays in their DB)
14
- * with the signed `dataSource()` endpoint as the marked fallback (ADR 0002,
15
- * docs/decisions/0002-read-path-logical-replication-vs-data-hosting.md).
16
- * The `databaseUrl` dial-in that this enum's `selfHosted` arm serves is
17
- * DEPRECATED pending the WAL read cutover — do not build on it.
18
- * This export exists for the sync-server host only.
19
- *
20
- * NOT `@internal`-tagged: tsconfig.build.json sets `stripInternal`, and these
21
- * symbols are re-exported by `server/index.ts` — tagging them strips them from
22
- * the emitted d.ts, leaving an empty `export {}` module behind a live
23
- * re-export. `skipLibCheck` masks the break and `StorageMode` silently
24
- * degrades to an error-any for every dist consumer (the sync-server host).
25
- */
26
- import { z } from 'zod';
27
- /** See module note — host-deployment vocabulary, never customer-facing. */
28
- export const storageModeSchema = z.enum(['hosted', 'source', 'selfHosted']);
@@ -1,159 +0,0 @@
1
- /**
2
- * Data Source reverse-channel wire protocol.
3
- *
4
- * The `commit`/`load`/`list` leg of Data Source mode is normally an INBOUND
5
- * webhook (Ablo Cloud → your HTTPS endpoint). That requires a public URL, so it
6
- * doesn't work on `localhost` or inside a locked-down VPC with no inbound path.
7
- *
8
- * The reverse channel inverts the direction: the customer's connector dials OUT
9
- * to Ablo Cloud over a WebSocket and serves those same requests over the open
10
- * socket — the Stripe-CLI `stripe listen` pattern. This module defines the
11
- * frames that travel over that socket.
12
- *
13
- * Trust model is unchanged. A `request` frame carries the SAME Standard Webhooks
14
- * signature headers (`webhook-id` / `webhook-timestamp` / `webhook-signature`)
15
- * and the SAME raw body Ablo would have POSTed, so the connector verifies it
16
- * through the unchanged `verifyAbloSourceRequest`. Only the transport differs.
17
- *
18
- * Frames are validated with zod at the boundary (matching `contract.ts`): a
19
- * malformed frame is rejected at the edge, and every wire type is inferred from
20
- * one schema so the two sides can never silently drift.
21
- */
22
- import { z } from 'zod';
23
- /**
24
- * Wire-protocol version. Bumped on any breaking frame-shape change so an old
25
- * connector talking to a new server (or vice-versa) fails fast at `register`
26
- * instead of misparsing a frame mid-stream.
27
- */
28
- export declare const SOURCE_CONNECTOR_PROTOCOL_VERSION = 1;
29
- /** Path the connector dials. Appended to the connector's `baseURL`. */
30
- export declare const SOURCE_CONNECTOR_WS_PATH = "/v1/source/listen";
31
- /**
32
- * Negotiated WebSocket subprotocol that marks a reverse-channel source
33
- * connector (vs. the SDK sync client's `ablo.sync.v1`). The server selects and
34
- * echoes back ONLY this value, never the token-bearing subprotocol — keeping the
35
- * credential out of ALB / proxy logs exactly like the sync socket does.
36
- */
37
- export declare const WS_SOURCE_SUBPROTOCOL = "ablo.source.v1";
38
- /**
39
- * Build the `Sec-WebSocket-Protocol` list a connector offers: the source
40
- * protocol plus the bearer credential (`ablo.bearer.<apiKey>`). Browsers can't
41
- * set an `Authorization` header on a WebSocket, so the API key rides as a
42
- * subprotocol — the same mechanism the SDK sync client uses, read server-side by
43
- * the shared `extractBearer`.
44
- */
45
- export declare function sourceConnectorSubprotocols(apiKey: string): string[];
46
- /**
47
- * Connector → server, first frame after the socket opens and authenticates.
48
- * Auth and source resolution happen at the WS handshake from the API key; this
49
- * frame only carries protocol negotiation + advisory metadata.
50
- */
51
- export declare const registerFrameSchema: z.ZodObject<{
52
- type: z.ZodLiteral<"register">;
53
- protocolVersion: z.ZodNumber;
54
- client: z.ZodOptional<z.ZodString>;
55
- }, z.core.$strip>;
56
- export type RegisterFrame = z.infer<typeof registerFrameSchema>;
57
- /**
58
- * Server → connector, acknowledges a successful `register`. Echoes the resolved
59
- * source identity so the connector can log/verify which source it is serving.
60
- */
61
- export declare const readyFrameSchema: z.ZodObject<{
62
- type: z.ZodLiteral<"ready">;
63
- protocolVersion: z.ZodNumber;
64
- sourceId: z.ZodOptional<z.ZodString>;
65
- organizationId: z.ZodOptional<z.ZodString>;
66
- environment: z.ZodOptional<z.ZodEnum<{
67
- production: "production";
68
- sandbox: "sandbox";
69
- }>>;
70
- }, z.core.$strip>;
71
- export type ReadyFrame = z.infer<typeof readyFrameSchema>;
72
- /**
73
- * Server → connector, one drained `commit`/`load`/`list` request. `headers` and
74
- * `body` are byte-identical to what the inbound webhook path would have sent —
75
- * the connector replays them into a synthesized `Request` so the unchanged
76
- * handler verifies the signature exactly as in production.
77
- */
78
- export declare const requestFrameSchema: z.ZodObject<{
79
- type: z.ZodLiteral<"request">;
80
- id: z.ZodString;
81
- method: z.ZodLiteral<"POST">;
82
- url: z.ZodString;
83
- headers: z.ZodRecord<z.ZodString, z.ZodString>;
84
- body: z.ZodString;
85
- }, z.core.$strip>;
86
- export type RequestFrame = z.infer<typeof requestFrameSchema>;
87
- /**
88
- * Connector → server, the handler's `Response` for one `request`. The server
89
- * resolves the pending request keyed by `id` and feeds `status`/`body` back to
90
- * the `SourceClient` as if an HTTP response had returned.
91
- */
92
- export declare const responseFrameSchema: z.ZodObject<{
93
- type: z.ZodLiteral<"response">;
94
- id: z.ZodString;
95
- status: z.ZodNumber;
96
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
97
- body: z.ZodString;
98
- }, z.core.$strip>;
99
- export type ResponseFrame = z.infer<typeof responseFrameSchema>;
100
- /**
101
- * Either direction, out-of-band failure not tied to a single request body
102
- * (auth rejected, unsupported protocol version, malformed frame). When `id` is
103
- * present the error pertains to that pending request and fails it; otherwise it
104
- * is a connection-level error.
105
- */
106
- export declare const errorFrameSchema: z.ZodObject<{
107
- type: z.ZodLiteral<"error">;
108
- id: z.ZodOptional<z.ZodString>;
109
- code: z.ZodString;
110
- message: z.ZodString;
111
- }, z.core.$strip>;
112
- export type ErrorFrame = z.infer<typeof errorFrameSchema>;
113
- export declare const connectorFrameSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
114
- type: z.ZodLiteral<"register">;
115
- protocolVersion: z.ZodNumber;
116
- client: z.ZodOptional<z.ZodString>;
117
- }, z.core.$strip>, z.ZodObject<{
118
- type: z.ZodLiteral<"ready">;
119
- protocolVersion: z.ZodNumber;
120
- sourceId: z.ZodOptional<z.ZodString>;
121
- organizationId: z.ZodOptional<z.ZodString>;
122
- environment: z.ZodOptional<z.ZodEnum<{
123
- production: "production";
124
- sandbox: "sandbox";
125
- }>>;
126
- }, z.core.$strip>, z.ZodObject<{
127
- type: z.ZodLiteral<"request">;
128
- id: z.ZodString;
129
- method: z.ZodLiteral<"POST">;
130
- url: z.ZodString;
131
- headers: z.ZodRecord<z.ZodString, z.ZodString>;
132
- body: z.ZodString;
133
- }, z.core.$strip>, z.ZodObject<{
134
- type: z.ZodLiteral<"response">;
135
- id: z.ZodString;
136
- status: z.ZodNumber;
137
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
138
- body: z.ZodString;
139
- }, z.core.$strip>, z.ZodObject<{
140
- type: z.ZodLiteral<"error">;
141
- id: z.ZodOptional<z.ZodString>;
142
- code: z.ZodString;
143
- message: z.ZodString;
144
- }, z.core.$strip>], "type">;
145
- export type ConnectorFrame = z.infer<typeof connectorFrameSchema>;
146
- /** Thrown when an incoming frame fails to parse or validate. */
147
- export declare class ConnectorProtocolError extends Error {
148
- readonly code = "source_connector_protocol_error";
149
- constructor(message: string);
150
- }
151
- /** Serialize a frame for transmission. */
152
- export declare function encodeFrame(frame: ConnectorFrame): string;
153
- /**
154
- * Parse + validate an incoming frame. Accepts the string or binary payloads the
155
- * `ws` library / WebSocket `message` events deliver. Throws
156
- * `ConnectorProtocolError` on any malformed or unknown frame so callers can
157
- * reject the connection rather than act on garbage.
158
- */
159
- export declare function decodeFrame(raw: string | ArrayBuffer | Uint8Array): ConnectorFrame;