@abloatai/ablo 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/README.md +102 -86
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +134 -151
  5. package/dist/Database.d.ts +68 -69
  6. package/dist/Database.js +316 -135
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +54 -52
  12. package/dist/Model.js +78 -62
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +122 -118
  18. package/dist/SyncClient.js +541 -245
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +10 -9
  22. package/dist/adapters/inMemoryStorage.js +21 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +173 -121
  50. package/dist/client/Ablo.d.ts +97 -74
  51. package/dist/client/Ablo.js +129 -163
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +442 -81
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +16 -17
  61. package/dist/client/createInternalComponents.js +26 -31
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +59 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +78 -87
  76. package/dist/client/options.d.ts +157 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +16 -20
  91. package/dist/client/wsMutationExecutor.js +18 -23
  92. package/dist/commit/contract.d.ts +493 -0
  93. package/dist/commit/contract.js +187 -0
  94. package/dist/commit/index.d.ts +6 -0
  95. package/dist/commit/index.js +5 -0
  96. package/dist/context.d.ts +6 -4
  97. package/dist/context.js +6 -4
  98. package/dist/coordination/index.d.ts +10 -8
  99. package/dist/coordination/index.js +14 -12
  100. package/dist/coordination/schema.d.ts +176 -128
  101. package/dist/coordination/schema.js +197 -133
  102. package/dist/coordination/trace.d.ts +9 -10
  103. package/dist/coordination/trace.js +13 -14
  104. package/dist/core/DatabaseManager.d.ts +5 -7
  105. package/dist/core/DatabaseManager.js +15 -19
  106. package/dist/core/QueryProcessor.d.ts +7 -9
  107. package/dist/core/QueryProcessor.js +22 -28
  108. package/dist/core/QueryView.d.ts +8 -8
  109. package/dist/core/QueryView.js +2 -2
  110. package/dist/core/StoreManager.d.ts +14 -14
  111. package/dist/core/StoreManager.js +33 -24
  112. package/dist/core/ViewRegistry.d.ts +5 -5
  113. package/dist/core/ViewRegistry.js +4 -4
  114. package/dist/core/index.d.ts +17 -12
  115. package/dist/core/index.js +32 -26
  116. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  117. package/dist/core/openIDBWithTimeout.js +42 -43
  118. package/dist/core/queryUtils.d.ts +45 -0
  119. package/dist/core/queryUtils.js +69 -0
  120. package/dist/core/storeContract.d.ts +63 -61
  121. package/dist/core/storeContract.js +8 -12
  122. package/dist/environment.d.ts +28 -0
  123. package/dist/environment.js +21 -0
  124. package/dist/errorCodes.d.ts +107 -99
  125. package/dist/errorCodes.js +137 -134
  126. package/dist/errors.d.ts +160 -166
  127. package/dist/errors.js +155 -158
  128. package/dist/index.d.ts +36 -27
  129. package/dist/index.js +91 -86
  130. package/dist/interfaces/index.d.ts +102 -113
  131. package/dist/interfaces/index.js +5 -4
  132. package/dist/keys/index.d.ts +27 -29
  133. package/dist/keys/index.js +41 -40
  134. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  135. package/dist/mutators/RecordingTransaction.js +31 -37
  136. package/dist/mutators/Transaction.d.ts +18 -26
  137. package/dist/mutators/Transaction.js +14 -20
  138. package/dist/mutators/UndoManager.d.ts +124 -131
  139. package/dist/mutators/UndoManager.js +177 -156
  140. package/dist/mutators/defineMutators.d.ts +23 -34
  141. package/dist/mutators/defineMutators.js +14 -20
  142. package/dist/mutators/inverseOp.d.ts +12 -15
  143. package/dist/mutators/inverseOp.js +12 -15
  144. package/dist/mutators/mutateActions.d.ts +10 -9
  145. package/dist/mutators/mutateActions.js +1 -1
  146. package/dist/mutators/readerActions.d.ts +9 -8
  147. package/dist/mutators/readerActions.js +2 -2
  148. package/dist/mutators/undoApply.d.ts +31 -27
  149. package/dist/mutators/undoApply.js +26 -24
  150. package/dist/policy/index.d.ts +5 -3
  151. package/dist/policy/index.js +5 -3
  152. package/dist/policy/types.d.ts +104 -100
  153. package/dist/policy/types.js +67 -66
  154. package/dist/query/client.d.ts +28 -23
  155. package/dist/query/client.js +45 -43
  156. package/dist/query/types.d.ts +37 -60
  157. package/dist/query/types.js +13 -33
  158. package/dist/react/AbloProvider.d.ts +1 -1
  159. package/dist/react/AbloProvider.js +2 -2
  160. package/dist/react/context.d.ts +25 -28
  161. package/dist/react/context.js +9 -10
  162. package/dist/react/index.d.ts +41 -42
  163. package/dist/react/index.js +37 -38
  164. package/dist/react/internalContext.d.ts +17 -19
  165. package/dist/react/useAblo.d.ts +28 -25
  166. package/dist/react/useAblo.js +41 -17
  167. package/dist/react/useCurrentUserId.d.ts +8 -7
  168. package/dist/react/useCurrentUserId.js +8 -7
  169. package/dist/react/useErrorListener.d.ts +7 -7
  170. package/dist/react/useErrorListener.js +10 -11
  171. package/dist/react/useMutationFailureListener.d.ts +8 -8
  172. package/dist/react/useMutationFailureListener.js +8 -8
  173. package/dist/react/useMutators.d.ts +11 -11
  174. package/dist/react/useMutators.js +3 -3
  175. package/dist/react/useReactive.js +2 -2
  176. package/dist/react/useSyncStatus.d.ts +4 -6
  177. package/dist/react/useUndoScope.d.ts +7 -9
  178. package/dist/react/useUndoScope.js +1 -1
  179. package/dist/schema/coordination.d.ts +21 -25
  180. package/dist/schema/coordination.js +21 -25
  181. package/dist/schema/ddl.d.ts +43 -39
  182. package/dist/schema/ddl.js +75 -68
  183. package/dist/schema/ddlLock.d.ts +20 -24
  184. package/dist/schema/ddlLock.js +18 -23
  185. package/dist/schema/diff.d.ts +99 -61
  186. package/dist/schema/diff.js +43 -34
  187. package/dist/schema/field.d.ts +37 -42
  188. package/dist/schema/field.js +35 -48
  189. package/dist/schema/generate.d.ts +12 -12
  190. package/dist/schema/generate.js +12 -12
  191. package/dist/schema/index.d.ts +3 -3
  192. package/dist/schema/index.js +21 -23
  193. package/dist/schema/model.d.ts +118 -143
  194. package/dist/schema/model.js +22 -33
  195. package/dist/schema/openapi.d.ts +10 -9
  196. package/dist/schema/openapi.js +5 -3
  197. package/dist/schema/queries.d.ts +29 -31
  198. package/dist/schema/queries.js +23 -25
  199. package/dist/schema/relation.d.ts +89 -99
  200. package/dist/schema/relation.js +13 -13
  201. package/dist/schema/residency.d.ts +16 -13
  202. package/dist/schema/residency.js +16 -13
  203. package/dist/schema/roles.d.ts +36 -43
  204. package/dist/schema/roles.js +31 -37
  205. package/dist/schema/schema.d.ts +64 -43
  206. package/dist/schema/schema.js +31 -32
  207. package/dist/schema/select.d.ts +13 -13
  208. package/dist/schema/select.js +13 -13
  209. package/dist/schema/serialize.d.ts +28 -31
  210. package/dist/schema/serialize.js +27 -31
  211. package/dist/schema/sugar.d.ts +17 -32
  212. package/dist/schema/sugar.js +14 -29
  213. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  214. package/dist/schema/syncDeltaRow.js +89 -0
  215. package/dist/schema/tenancy.d.ts +44 -46
  216. package/dist/schema/tenancy.js +46 -48
  217. package/dist/server/adapter.d.ts +58 -58
  218. package/dist/server/adapter.js +13 -14
  219. package/dist/server/commit.d.ts +60 -64
  220. package/dist/server/index.d.ts +9 -10
  221. package/dist/server/index.js +1 -1
  222. package/dist/server/readConfig.d.ts +70 -0
  223. package/dist/server/readConfig.js +8 -0
  224. package/dist/server/storageMode.d.ts +23 -0
  225. package/dist/server/storageMode.js +17 -0
  226. package/dist/source/adapter.d.ts +30 -25
  227. package/dist/source/adapter.js +10 -10
  228. package/dist/source/adapters/drizzle.d.ts +28 -23
  229. package/dist/source/adapters/drizzle.js +30 -25
  230. package/dist/source/adapters/kysely.d.ts +27 -25
  231. package/dist/source/adapters/kysely.js +24 -23
  232. package/dist/source/adapters/memory.d.ts +8 -7
  233. package/dist/source/adapters/memory.js +9 -8
  234. package/dist/source/adapters/prisma.d.ts +13 -12
  235. package/dist/source/adapters/prisma.js +22 -25
  236. package/dist/source/conformance.d.ts +18 -11
  237. package/dist/source/conformance.js +17 -11
  238. package/dist/source/connector.d.ts +31 -32
  239. package/dist/source/connector.js +28 -28
  240. package/dist/source/connectorProtocol.d.ts +160 -0
  241. package/dist/source/connectorProtocol.js +162 -0
  242. package/dist/source/contract.d.ts +26 -27
  243. package/dist/source/contract.js +28 -29
  244. package/dist/source/factory.d.ts +46 -58
  245. package/dist/source/factory.js +22 -27
  246. package/dist/source/index.d.ts +7 -9
  247. package/dist/source/index.js +12 -14
  248. package/dist/source/migrations.d.ts +9 -9
  249. package/dist/source/migrations.js +9 -9
  250. package/dist/source/next.d.ts +9 -10
  251. package/dist/source/next.js +6 -7
  252. package/dist/source/pushQueue.d.ts +69 -47
  253. package/dist/source/pushQueue.js +32 -28
  254. package/dist/source/signing.d.ts +46 -17
  255. package/dist/source/signing.js +28 -11
  256. package/dist/source/types.d.ts +121 -104
  257. package/dist/source/types.js +13 -14
  258. package/dist/stores/ObjectStore.d.ts +24 -12
  259. package/dist/stores/ObjectStore.js +38 -16
  260. package/dist/stores/ObjectStoreContract.d.ts +14 -15
  261. package/dist/stores/SyncActionStore.d.ts +7 -11
  262. package/dist/stores/SyncActionStore.js +13 -17
  263. package/dist/surface.d.ts +28 -21
  264. package/dist/surface.js +29 -20
  265. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  266. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  267. package/dist/sync/ConnectionManager.d.ts +39 -50
  268. package/dist/sync/ConnectionManager.js +55 -66
  269. package/dist/sync/NetworkProbe.d.ts +24 -29
  270. package/dist/sync/NetworkProbe.js +63 -69
  271. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  272. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  273. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  274. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  275. package/dist/sync/SyncWebSocket.d.ts +141 -166
  276. package/dist/sync/SyncWebSocket.js +191 -223
  277. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  278. package/dist/sync/awaitClaimGrant.js +11 -11
  279. package/dist/sync/bootstrapApply.d.ts +34 -24
  280. package/dist/sync/bootstrapApply.js +27 -19
  281. package/dist/sync/commitFrames.d.ts +21 -20
  282. package/dist/sync/commitFrames.js +18 -18
  283. package/dist/sync/createClaimStream.d.ts +23 -22
  284. package/dist/sync/createClaimStream.js +105 -23
  285. package/dist/sync/createPresenceStream.d.ts +19 -18
  286. package/dist/sync/createPresenceStream.js +25 -26
  287. package/dist/sync/createSnapshot.d.ts +12 -14
  288. package/dist/sync/createSnapshot.js +20 -26
  289. package/dist/sync/credentialLifecycle.d.ts +104 -104
  290. package/dist/sync/credentialLifecycle.js +140 -147
  291. package/dist/sync/deltaPipeline.d.ts +36 -34
  292. package/dist/sync/deltaPipeline.js +64 -65
  293. package/dist/sync/groupChange.d.ts +63 -61
  294. package/dist/sync/groupChange.js +74 -78
  295. package/dist/sync/heartbeat.d.ts +34 -33
  296. package/dist/sync/heartbeat.js +31 -31
  297. package/dist/sync/participants.d.ts +19 -19
  298. package/dist/sync/persistedPrefix.d.ts +12 -0
  299. package/dist/sync/persistedPrefix.js +22 -0
  300. package/dist/sync/schemas.d.ts +3 -2
  301. package/dist/sync/schemas.js +14 -10
  302. package/dist/sync/syncCursor.d.ts +17 -21
  303. package/dist/sync/syncCursor.js +17 -21
  304. package/dist/sync/syncPlan.d.ts +28 -36
  305. package/dist/sync/syncPlan.js +18 -19
  306. package/dist/sync/syncPosition.d.ts +54 -49
  307. package/dist/sync/syncPosition.js +57 -52
  308. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  309. package/dist/sync/wsFrameHandlers.js +63 -67
  310. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  311. package/dist/testing/fixtures/bootstrap.js +12 -6
  312. package/dist/testing/fixtures/deltas.d.ts +30 -33
  313. package/dist/testing/fixtures/deltas.js +30 -33
  314. package/dist/testing/fixtures/models.d.ts +11 -10
  315. package/dist/testing/fixtures/models.js +11 -10
  316. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  317. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  318. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  319. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  320. package/dist/testing/helpers/wait.d.ts +13 -8
  321. package/dist/testing/helpers/wait.js +13 -8
  322. package/dist/testing/index.d.ts +5 -3
  323. package/dist/testing/index.js +3 -2
  324. package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
  325. package/dist/testing/mocks/FakeDatabase.js +10 -0
  326. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  327. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  328. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  329. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  330. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  331. package/dist/testing/mocks/MockSyncContext.js +15 -13
  332. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  333. package/dist/testing/mocks/MockSyncStore.js +11 -11
  334. package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
  335. package/dist/testing/mocks/MockWebSocket.js +22 -21
  336. package/dist/transactions/TransactionQueue.d.ts +244 -181
  337. package/dist/transactions/TransactionQueue.js +929 -423
  338. package/dist/transactions/TransactionStore.d.ts +6 -4
  339. package/dist/transactions/TransactionStore.js +6 -4
  340. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  341. package/dist/transactions/UnconfirmedWrites.js +104 -0
  342. package/dist/transactions/coalesceRules.d.ts +41 -17
  343. package/dist/transactions/coalesceRules.js +40 -17
  344. package/dist/transactions/commitEnvelope.d.ts +132 -0
  345. package/dist/transactions/commitEnvelope.js +139 -0
  346. package/dist/transactions/commitOutboxStore.d.ts +32 -0
  347. package/dist/transactions/commitOutboxStore.js +26 -0
  348. package/dist/transactions/commitPayload.d.ts +63 -52
  349. package/dist/transactions/commitPayload.js +54 -57
  350. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  351. package/dist/transactions/deltaConfirmation.js +37 -45
  352. package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
  353. package/dist/transactions/httpCommitEnvelope.js +179 -0
  354. package/dist/transactions/optimisticApply.d.ts +49 -0
  355. package/dist/transactions/optimisticApply.js +65 -0
  356. package/dist/transactions/replayValidation.d.ts +182 -0
  357. package/dist/transactions/replayValidation.js +156 -0
  358. package/dist/types/global.d.ts +46 -41
  359. package/dist/types/global.js +20 -19
  360. package/dist/types/index.d.ts +71 -77
  361. package/dist/types/index.js +22 -22
  362. package/dist/types/modelData.d.ts +6 -8
  363. package/dist/types/modelData.js +5 -7
  364. package/dist/types/participant.d.ts +10 -11
  365. package/dist/types/participant.js +6 -8
  366. package/dist/types/streams.d.ts +208 -195
  367. package/dist/types/streams.js +7 -7
  368. package/dist/utils/asyncIterator.d.ts +25 -32
  369. package/dist/utils/asyncIterator.js +25 -32
  370. package/dist/utils/duration.d.ts +12 -15
  371. package/dist/utils/duration.js +12 -15
  372. package/dist/utils/mobxSetup.d.ts +53 -0
  373. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  374. package/dist/webhooks/events.d.ts +21 -16
  375. package/dist/webhooks/events.js +10 -8
  376. package/dist/webhooks/index.d.ts +5 -7
  377. package/dist/webhooks/index.js +5 -7
  378. package/dist/wire/bootstrapReason.d.ts +9 -0
  379. package/dist/wire/bootstrapReason.js +8 -0
  380. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  381. package/dist/wire/delta.js +114 -0
  382. package/dist/wire/errorEnvelope.d.ts +30 -31
  383. package/dist/wire/errorEnvelope.js +34 -40
  384. package/dist/wire/frames.d.ts +315 -86
  385. package/dist/wire/frames.js +47 -33
  386. package/dist/wire/index.d.ts +18 -14
  387. package/dist/wire/index.js +32 -27
  388. package/dist/wire/listEnvelope.d.ts +16 -23
  389. package/dist/wire/listEnvelope.js +7 -6
  390. package/dist/wire/protocol.d.ts +25 -32
  391. package/dist/wire/protocol.js +25 -32
  392. package/dist/wire/protocolVersion.d.ts +44 -40
  393. package/dist/wire/protocolVersion.js +44 -40
  394. package/docs/api.md +10 -10
  395. package/docs/coordination.md +59 -0
  396. package/docs/mcp.md +1 -1
  397. package/package.json +17 -11
  398. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  399. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  400. package/dist/core/query-utils.d.ts +0 -34
  401. package/dist/core/query-utils.js +0 -59
  402. package/dist/schema/sync-delta-row.js +0 -103
  403. package/dist/schema/sync-delta-wire.js +0 -102
  404. package/dist/server/read-config.d.ts +0 -67
  405. package/dist/server/read-config.js +0 -8
  406. package/dist/server/storage-mode.d.ts +0 -8
  407. package/dist/server/storage-mode.js +0 -28
  408. package/dist/source/connector-protocol.d.ts +0 -159
  409. package/dist/source/connector-protocol.js +0 -161
  410. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  411. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  412. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  413. package/dist/transactions/mutation-error-handler.js +0 -39
  414. package/dist/transactions/optimistic.d.ts +0 -24
  415. package/dist/transactions/optimistic.js +0 -45
  416. package/dist/transactions/persistedReplay.d.ts +0 -93
  417. package/dist/transactions/persistedReplay.js +0 -105
  418. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,10 +1,8 @@
1
1
  /**
2
- * `@abloatai/ablo/webhooks` the webhook event catalog + delta mapping.
3
- *
4
- * Customers import {@link AbloWebhookEvent} to type their handler; the server
5
- * uses {@link deltaToWebhookEvent} to turn transaction-log deltas into events
6
- * for Svix to deliver. Signature verification is NOT here — the customer uses
7
- * the open Standard Webhooks library (`svix` / `standardwebhooks`), so Ablo
8
- * ships no crypto.
2
+ * The public entry point for webhooks. Import {@link AbloWebhookEvent} to type
3
+ * your event handler, and use {@link deltaToWebhookEvent} to turn a committed
4
+ * change from the transaction log into an event to deliver. This module does not
5
+ * verify signatures and ships no cryptography; recipients verify deliveries with
6
+ * a standard webhooks library.
9
7
  */
10
8
  export { deltaToWebhookEvent, } from './events.js';
@@ -0,0 +1,9 @@
1
+ import { z } from 'zod';
2
+ /** Machine-readable reasons a live delta stream must resume via catch-up. */
3
+ export declare const bootstrapReasonSchema: z.ZodEnum<{
4
+ too_far_behind: "too_far_behind";
5
+ too_many_deltas: "too_many_deltas";
6
+ missing_entities: "missing_entities";
7
+ stream_gap: "stream_gap";
8
+ }>;
9
+ export type BootstrapReason = z.infer<typeof bootstrapReasonSchema>;
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ /** Machine-readable reasons a live delta stream must resume via catch-up. */
3
+ export const bootstrapReasonSchema = z.enum([
4
+ 'too_far_behind',
5
+ 'too_many_deltas',
6
+ 'missing_entities',
7
+ 'stream_gap',
8
+ ]);
@@ -1,35 +1,51 @@
1
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).
2
+ * The delta wire contract: the object the server broadcasts to a client as the
3
+ * payload of a `delta` or `sync_response` frame. Both the client SDK and the
4
+ * server derive their delta types from the schemas here, so the two ends share
5
+ * one definition and cannot drift apart. This is the delta's home in the wire
6
+ * layer, alongside the other protocol shapes in `wire/`.
10
7
  *
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.
8
+ * The wire delta is a projection of the stored `sync_deltas` row (see
9
+ * {@link import('../schema/syncDeltaRow.js').syncDeltaRowSchema}) and differs from
10
+ * it in three ways: it omits `organizationId` (the tenant-isolation predicate is
11
+ * never broadcast), it uses the full action vocabulary (see
12
+ * {@link syncDeltaActionSchema}) rather than plain create, update, and delete, and
13
+ * it carries attribution as nested {@link ParticipantRef}s instead of flat columns.
17
14
  *
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).
15
+ * The schemas layer a shared core plus per-side extensions:
16
+ * - {@link syncDeltaWireCoreSchema} — the fields both sides agree on.
17
+ * - {@link clientSyncDeltaSchema} the core plus the fields only the client reads.
18
+ * - {@link serverSyncDeltaSchema} the core plus the audit attribution the server
19
+ * adds to each broadcast, which the client ignores.
24
20
  *
25
- * Monorepo is on Zod v4.
21
+ * The two participant enums below (`participantKind`, `confirmationState`) are the
22
+ * shared vocabulary of the protocol. They live here, at the wire layer, so the
23
+ * stored-row schema can import them downward rather than the wire delta reaching
24
+ * up into the schema DSL for them.
26
25
  */
27
26
  import { z } from 'zod';
27
+ /** `participant_kind` — who a delta is attributed to. */
28
+ export declare const participantKindSchema: z.ZodEnum<{
29
+ user: "user";
30
+ agent: "agent";
31
+ system: "system";
32
+ }>;
33
+ export type ParticipantKind = z.infer<typeof participantKindSchema>;
34
+ /** `confirmation_state` — the approval stage a committed change was in. */
35
+ export declare const confirmationStateSchema: z.ZodEnum<{
36
+ auto: "auto";
37
+ previewed: "previewed";
38
+ approved: "approved";
39
+ required_human_approval: "required_human_approval";
40
+ auto_historical: "auto_historical";
41
+ }>;
42
+ export type ConfirmationState = z.infer<typeof confirmationStateSchema>;
28
43
  /**
29
- * `action_type` on the WIRE the full Linear-compatible vocabulary a broadcast
30
- * carries (vs the stored row's core CRUD). `I`nsert, `U`pdate, `D`elete,
31
- * `A`rchive, `V` reVive/unarchive, `C`overing (gained visibility), `G`roupAdded,
32
- * `S` groupRemoved.
44
+ * The full set of action codes a wire delta can carry — a broader vocabulary than
45
+ * the stored row's create, update, and delete. Each is a single character: `I`
46
+ * insert, `U` update, `D` delete, `A` archive, `V` revive (unarchive), `C` covering
47
+ * (the row just became visible to this subscriber), `G` group added, and `S` group
48
+ * removed.
33
49
  */
34
50
  export declare const syncDeltaActionSchema: z.ZodEnum<{
35
51
  I: "I";
@@ -43,16 +59,17 @@ export declare const syncDeltaActionSchema: z.ZodEnum<{
43
59
  }>;
44
60
  export type SyncDeltaAction = z.infer<typeof syncDeltaActionSchema>;
45
61
  /**
46
- * A wire delta payload: the post-mutation row object, a control-frame STRING
47
- * (e.g. a serialized group-change payload on `G`/`S` deltas), or `null` (on
48
- * deletes). Wider than the stored `data` (row-or-null) precisely because the
49
- * group/permission frames serialize a string.
62
+ * The payload carried on a wire delta: the post-mutation row as an object, a
63
+ * serialized string (used by the group-change frames on `G` and `S` deltas), or
64
+ * `null` on deletes. This is wider than the stored row's payload which is only a
65
+ * row or null — because the group-change frames encode their payload as a string.
50
66
  */
51
67
  export declare const wireDeltaDataSchema: z.ZodNullable<z.ZodUnion<readonly [z.ZodRecord<z.ZodString, z.ZodUnknown>, z.ZodString]>>;
52
68
  export type WireDeltaData = z.infer<typeof wireDeltaDataSchema>;
53
69
  /**
54
- * A nested participant reference as carried on a BROADCAST delta. The server
55
- * hydrates the flat `actor_id`/`actor_kind` stored columns into this.
70
+ * A participant reference as carried on a broadcast delta. The server expands the
71
+ * flat `actor_id` and `actor_kind` stored columns into this nested `{ kind, id }`
72
+ * shape.
56
73
  */
57
74
  export declare const participantRefSchema: z.ZodObject<{
58
75
  kind: z.ZodEnum<{
@@ -64,11 +81,11 @@ export declare const participantRefSchema: z.ZodObject<{
64
81
  }, z.core.$strip>;
65
82
  export type ParticipantRef = z.infer<typeof participantRefSchema>;
66
83
  /**
67
- * The fields BOTH server and client agree on for a broadcast delta — the shared
68
- * contract. `transactionId` is modelled as the client sees it (optional string);
69
- * the server projection widens it to nullable. No `organizationId` (never
70
- * broadcast). No `createdBy`/attribution here — those types differ per layer and
71
- * live in the extensions below.
84
+ * The fields the server and client agree on for a broadcast delta — the shared core
85
+ * both projections extend. `transactionId` is typed as the client sees it (an
86
+ * optional string); {@link serverSyncDeltaSchema} widens it to nullable. There is no
87
+ * `organizationId` here (it is never broadcast) and no attribution — those fields
88
+ * differ between the two sides and live in the extensions below.
72
89
  */
73
90
  export declare const syncDeltaWireCoreSchema: z.ZodObject<{
74
91
  id: z.ZodNumber;
@@ -92,8 +109,8 @@ export declare const syncDeltaWireCoreSchema: z.ZodObject<{
92
109
  }, z.core.$strip>;
93
110
  export type SyncDeltaWireCore = z.infer<typeof syncDeltaWireCoreSchema>;
94
111
  /**
95
- * Client projection core + the SDK-only fields the client reads locally.
96
- * `z.infer` of this is the SDK's `SyncDelta` (see `sync/SyncWebSocket.ts`).
112
+ * The client's view of a wire delta: the shared core plus the fields only the
113
+ * client reads. Inferring this schema gives the SDK's `SyncDelta` type.
97
114
  */
98
115
  export declare const clientSyncDeltaSchema: z.ZodObject<{
99
116
  id: z.ZodNumber;
@@ -120,9 +137,9 @@ export declare const clientSyncDeltaSchema: z.ZodObject<{
120
137
  }, z.core.$strip>;
121
138
  export type ClientSyncDelta = z.infer<typeof clientSyncDeltaSchema>;
122
139
  /**
123
- * Server projection core + the audit attribution the server enriches each
124
- * broadcast with (for the audit pane). The client ignores all of it. Overrides
125
- * `transactionId` to nullable (the server's stored-column reality).
140
+ * The server's view of a wire delta: the shared core plus the audit attribution the
141
+ * server adds to each broadcast. The client structurally ignores these fields. This
142
+ * projection also narrows `transactionId` to nullable, matching the stored column.
126
143
  */
127
144
  export declare const serverSyncDeltaSchema: z.ZodObject<{
128
145
  id: z.ZodNumber;
@@ -0,0 +1,114 @@
1
+ /**
2
+ * The delta wire contract: the object the server broadcasts to a client as the
3
+ * payload of a `delta` or `sync_response` frame. Both the client SDK and the
4
+ * server derive their delta types from the schemas here, so the two ends share
5
+ * one definition and cannot drift apart. This is the delta's home in the wire
6
+ * layer, alongside the other protocol shapes in `wire/`.
7
+ *
8
+ * The wire delta is a projection of the stored `sync_deltas` row (see
9
+ * {@link import('../schema/syncDeltaRow.js').syncDeltaRowSchema}) and differs from
10
+ * it in three ways: it omits `organizationId` (the tenant-isolation predicate is
11
+ * never broadcast), it uses the full action vocabulary (see
12
+ * {@link syncDeltaActionSchema}) rather than plain create, update, and delete, and
13
+ * it carries attribution as nested {@link ParticipantRef}s instead of flat columns.
14
+ *
15
+ * The schemas layer a shared core plus per-side extensions:
16
+ * - {@link syncDeltaWireCoreSchema} — the fields both sides agree on.
17
+ * - {@link clientSyncDeltaSchema} — the core plus the fields only the client reads.
18
+ * - {@link serverSyncDeltaSchema} — the core plus the audit attribution the server
19
+ * adds to each broadcast, which the client ignores.
20
+ *
21
+ * The two participant enums below (`participantKind`, `confirmationState`) are the
22
+ * shared vocabulary of the protocol. They live here, at the wire layer, so the
23
+ * stored-row schema can import them downward rather than the wire delta reaching
24
+ * up into the schema DSL for them.
25
+ */
26
+ import { z } from 'zod';
27
+ // ── Shared participant vocabulary (mirrors the corresponding Postgres enums) ──
28
+ /** `participant_kind` — who a delta is attributed to. */
29
+ export const participantKindSchema = z.enum(['user', 'agent', 'system']);
30
+ /** `confirmation_state` — the approval stage a committed change was in. */
31
+ export const confirmationStateSchema = z.enum([
32
+ 'auto',
33
+ 'previewed',
34
+ 'approved',
35
+ 'required_human_approval',
36
+ 'auto_historical',
37
+ ]);
38
+ // ── The delta wire shapes ─────────────────────────────────────────────────────
39
+ /**
40
+ * The full set of action codes a wire delta can carry — a broader vocabulary than
41
+ * the stored row's create, update, and delete. Each is a single character: `I`
42
+ * insert, `U` update, `D` delete, `A` archive, `V` revive (unarchive), `C` covering
43
+ * (the row just became visible to this subscriber), `G` group added, and `S` group
44
+ * removed.
45
+ */
46
+ export const syncDeltaActionSchema = z.enum(['I', 'U', 'D', 'A', 'V', 'C', 'G', 'S']);
47
+ /**
48
+ * The payload carried on a wire delta: the post-mutation row as an object, a
49
+ * serialized string (used by the group-change frames on `G` and `S` deltas), or
50
+ * `null` on deletes. This is wider than the stored row's payload — which is only a
51
+ * row or null — because the group-change frames encode their payload as a string.
52
+ */
53
+ export const wireDeltaDataSchema = z
54
+ .union([z.record(z.string(), z.unknown()), z.string()])
55
+ .nullable();
56
+ /**
57
+ * A participant reference as carried on a broadcast delta. The server expands the
58
+ * flat `actor_id` and `actor_kind` stored columns into this nested `{ kind, id }`
59
+ * shape.
60
+ */
61
+ export const participantRefSchema = z.object({
62
+ kind: participantKindSchema,
63
+ id: z.string(),
64
+ });
65
+ /**
66
+ * The fields the server and client agree on for a broadcast delta — the shared core
67
+ * both projections extend. `transactionId` is typed as the client sees it (an
68
+ * optional string); {@link serverSyncDeltaSchema} widens it to nullable. There is no
69
+ * `organizationId` here (it is never broadcast) and no attribution — those fields
70
+ * differ between the two sides and live in the extensions below.
71
+ */
72
+ export const syncDeltaWireCoreSchema = z.object({
73
+ id: z.number(),
74
+ actionType: syncDeltaActionSchema,
75
+ modelName: z.string().min(1),
76
+ modelId: z.string().min(1),
77
+ data: wireDeltaDataSchema,
78
+ previousData: wireDeltaDataSchema.optional(),
79
+ syncGroups: z.array(z.string()),
80
+ transactionId: z.string().optional(),
81
+ createdAt: z.string(),
82
+ });
83
+ /**
84
+ * The client's view of a wire delta: the shared core plus the fields only the
85
+ * client reads. Inferring this schema gives the SDK's `SyncDelta` type.
86
+ */
87
+ export const clientSyncDeltaSchema = syncDeltaWireCoreSchema.extend({
88
+ /** @deprecated The actor id as a flat string; superseded by the server's nested
89
+ * `actor`. The client does not read it — it exists only so the wire shape round-trips. */
90
+ createdBy: z.string().optional(),
91
+ /** A payload slot the client reads locally, such as group-change metadata. */
92
+ metadata: wireDeltaDataSchema.optional(),
93
+ /** Echo-matching id the client correlates against its optimistic mutation. */
94
+ clientMutationId: z.string().optional(),
95
+ });
96
+ /**
97
+ * The server's view of a wire delta: the shared core plus the audit attribution the
98
+ * server adds to each broadcast. The client structurally ignores these fields. This
99
+ * projection also narrows `transactionId` to nullable, matching the stored column.
100
+ */
101
+ export const serverSyncDeltaSchema = syncDeltaWireCoreSchema.extend({
102
+ transactionId: z.string().nullable(),
103
+ /** @deprecated Duplicates `actor`; read `actor` instead. */
104
+ createdBy: participantRefSchema.nullable(),
105
+ /** The participant who performed the action. */
106
+ actor: participantRefSchema.nullable(),
107
+ /** The participant on whose authority the actor acted; equal to `actor` for direct human commits. */
108
+ onBehalfOf: participantRefSchema.nullable(),
109
+ /** Foreign key to the authorizing capability; non-null for agent and system commits. */
110
+ capabilityId: z.string().nullable(),
111
+ confirmationState: confirmationStateSchema.nullable(),
112
+ /** Foreign key to the task for the AI turn whose prompt caused this delta. */
113
+ causedByTaskId: z.string().nullable(),
114
+ });
@@ -1,15 +1,13 @@
1
1
  /**
2
- * The constant public message for an unclassified 500. Mirrors
3
- * `apps/sync-server/src/errors.ts`'s `INTERNAL_ERROR_PUBLIC_MESSAGE`
4
- * the parity test in apps/sync-server pins the two producers together. A raw
5
- * `err.message` (driver text, connection strings, stack fragments) must never
6
- * be the wire message; callers that need the detail log the original error
7
- * server-side before/at the envelope call.
2
+ * The fixed, public-facing message returned for an unclassified 500. A raw
3
+ * `err.message` can carry driver text, connection strings, or stack fragments,
4
+ * so it is never placed on the wire; a caller that needs those details logs the
5
+ * original error server-side before formatting the response.
8
6
  */
9
7
  export declare const INTERNAL_ERROR_PUBLIC_MESSAGE = "An internal error occurred.";
10
- /** The canonical wire envelope Stripe's error-object shape. Every HTTP error
11
- * response and every structured frame error carries this exact set of keys,
12
- * regardless of which route or transport produced it. */
8
+ /** The canonical error envelope. Every HTTP error response and every structured
9
+ * frame error carries this exact set of keys, regardless of which route or
10
+ * transport produced it. */
13
11
  export interface ErrorEnvelope {
14
12
  readonly type: string;
15
13
  readonly code?: string;
@@ -17,38 +15,39 @@ export interface ErrorEnvelope {
17
15
  readonly message: string;
18
16
  readonly doc_url?: string;
19
17
  readonly request_id?: string;
20
- /** Aggregate field-level failures so one 4xx can report EVERY invalid input
21
- * at once (schema push, batch commit, CLI-arg validation) instead of failing
22
- * on the first. `param` stays the single-field convenience case. (RFC 9457
23
- * `errors[]` / JSON:API `errors[]` / Google `BadRequest.fieldViolations[]`.) */
18
+ /** Field-level failures collected together, so a single 4xx can report every
19
+ * invalid input at once — for example a schema push, a batch commit, or CLI
20
+ * argument validation — instead of failing on the first. Use `param` for the
21
+ * single-field case. */
24
22
  readonly errors?: readonly {
25
23
  readonly code?: string;
26
24
  readonly message: string;
27
25
  readonly param?: string;
28
26
  }[];
29
- /** Typed-details slot: `AbloError.toJSON()` spreads its `details` (e.g.
30
- * `missingIds`, `conflicts`, `retryAfterSeconds`) as top-level members.
31
- * Consumers MUST ignore members they don't recognize (forward-compat). */
27
+ /** Additional typed details. {@link AbloError} serialization spreads its
28
+ * `details` — such as `missingIds`, `conflicts`, or `retryAfterSeconds` as
29
+ * top-level members here. Ignore any member you do not recognize, so new ones
30
+ * can be added without breaking you. */
32
31
  readonly [key: string]: unknown;
33
32
  }
34
- /** {@link AbloError} subclass default HTTP status. The subclass is chosen to
35
- * match status semantics (a validation error is a 400, a permission error a
36
- * 403), so a throw site only picks the right class + code and the status
37
- * follows an explicit `httpStatus` is passed only when it diverges (e.g. a
38
- * 404 on the base class, a 503 on AbloServerError). Mirrors the same table in
39
- * apps/sync-server's self-contained `errors.ts`. */
33
+ /** Maps an {@link AbloError} subclass name to its default HTTP status. Each
34
+ * subclass is chosen to match the status a validation error is a 400, a
35
+ * permission error a 403 so a throw site picks the right class and code and
36
+ * the status follows. An explicit `httpStatus` is supplied only when it
37
+ * diverges, such as a 404 on the base class or a 503 on a server error. */
40
38
  export declare function statusForType(type: string): number;
41
39
  /**
42
- * Convert ANY thrown value into the canonical {@link ErrorEnvelope} plus an
43
- * HTTP status. A typed {@link AbloError} is serialized via its own `toJSON`
44
- * (so `code`/`param`/`doc_url`/structured `details` survive) and gets its
45
- * status from an explicit `httpStatus` or, failing that, {@link statusForType}.
46
- * Anything else degrades to a 500 `internal_error` envelope — never a bare
47
- * framework "Internal Server Error" text body, and never a raw error string
48
- * leaked onto the wire as an unregistered code.
40
+ * Converts any thrown value into the canonical {@link ErrorEnvelope} and an HTTP
41
+ * status. A typed {@link AbloError} is serialized through its own `toJSON`, so
42
+ * its code, param, doc_url, and structured details survive, and its status comes
43
+ * from an explicit `httpStatus` or, failing that, {@link statusForType}.
44
+ * Anything else becomes a 500 `internal_error` envelope — never a bare framework
45
+ * "Internal Server Error" body, and never a raw error string leaked onto the
46
+ * wire as an unregistered code.
49
47
  *
50
- * `requestId` is stamped into the body when the error didn't already carry one,
51
- * so the response and the `x-request-id` header agree for support correlation.
48
+ * When `requestId` is supplied and the error does not already carry one, it is
49
+ * stamped into the body so the response and the `x-request-id` header agree for
50
+ * support correlation.
52
51
  */
53
52
  export declare function errorEnvelope(err: unknown, requestId?: string): {
54
53
  body: ErrorEnvelope;
@@ -1,38 +1,31 @@
1
1
  /**
2
- * ERROR egress — turn ANY thrown value into Stripe's error-object envelope plus
3
- * an HTTP status, so every error response across the Ablo surface carries the
4
- * identical `{ type, code, param, message, doc_url, request_id }` shape
5
- * regardless of which route or service produced it.
2
+ * Turns any thrown value into the canonical error envelope and an HTTP status,
3
+ * so every error response carries the same
4
+ * `{ type, code, param, message, doc_url, request_id }` shape no matter which
5
+ * route or transport produced it. This is the counterpart to the wire-parsing
6
+ * helpers in the errors module, which turn a received envelope back into a typed
7
+ * error.
6
8
  *
7
- * This is the wire-PRODUCE counterpart to `errors.ts`'s wire-PARSE
8
- * (`translateHttpError`/`errorFromWire`). It lives in `wire/` not in the main
9
- * SDK entry so a server-side consumer (a Next.js route) can import it without
10
- * dragging in the client runtime (mobx/react/IndexedDB).
11
- *
12
- * The classifier is the UNIVERSAL baseline: a typed {@link AbloError} passes
13
- * through (subclass + code + httpStatus preserved), everything else degrades to
14
- * a 500 `internal_error`. Service-specific normalization that needs a DB driver
15
- * (apps/sync-server classifies raw Postgres SQLSTATE + MutatorError) is layered
16
- * on top in that service — it is intentionally NOT pulled into the shared,
17
- * dependency-free contract.
9
+ * It has no dependency on the client runtime, so a server-side handler can
10
+ * import it on its own to format error responses. A typed {@link AbloError}
11
+ * passes through with its code and status intact; anything else becomes a
12
+ * generic 500. A service that needs to classify database-driver failures can
13
+ * layer that on top before falling back to this baseline.
18
14
  */
19
15
  import { AbloError, docUrlForCode } from '../errors.js';
20
16
  import { errorCodeSpec } from '../errorCodes.js';
21
17
  /**
22
- * The constant public message for an unclassified 500. Mirrors
23
- * `apps/sync-server/src/errors.ts`'s `INTERNAL_ERROR_PUBLIC_MESSAGE`
24
- * the parity test in apps/sync-server pins the two producers together. A raw
25
- * `err.message` (driver text, connection strings, stack fragments) must never
26
- * be the wire message; callers that need the detail log the original error
27
- * server-side before/at the envelope call.
18
+ * The fixed, public-facing message returned for an unclassified 500. A raw
19
+ * `err.message` can carry driver text, connection strings, or stack fragments,
20
+ * so it is never placed on the wire; a caller that needs those details logs the
21
+ * original error server-side before formatting the response.
28
22
  */
29
23
  export const INTERNAL_ERROR_PUBLIC_MESSAGE = 'An internal error occurred.';
30
- /** {@link AbloError} subclass default HTTP status. The subclass is chosen to
31
- * match status semantics (a validation error is a 400, a permission error a
32
- * 403), so a throw site only picks the right class + code and the status
33
- * follows an explicit `httpStatus` is passed only when it diverges (e.g. a
34
- * 404 on the base class, a 503 on AbloServerError). Mirrors the same table in
35
- * apps/sync-server's self-contained `errors.ts`. */
24
+ /** Maps an {@link AbloError} subclass name to its default HTTP status. Each
25
+ * subclass is chosen to match the status a validation error is a 400, a
26
+ * permission error a 403 so a throw site picks the right class and code and
27
+ * the status follows. An explicit `httpStatus` is supplied only when it
28
+ * diverges, such as a 404 on the base class or a 503 on a server error. */
36
29
  export function statusForType(type) {
37
30
  switch (type) {
38
31
  case 'AbloAuthenticationError':
@@ -56,16 +49,17 @@ export function statusForType(type) {
56
49
  }
57
50
  }
58
51
  /**
59
- * Convert ANY thrown value into the canonical {@link ErrorEnvelope} plus an
60
- * HTTP status. A typed {@link AbloError} is serialized via its own `toJSON`
61
- * (so `code`/`param`/`doc_url`/structured `details` survive) and gets its
62
- * status from an explicit `httpStatus` or, failing that, {@link statusForType}.
63
- * Anything else degrades to a 500 `internal_error` envelope — never a bare
64
- * framework "Internal Server Error" text body, and never a raw error string
65
- * leaked onto the wire as an unregistered code.
52
+ * Converts any thrown value into the canonical {@link ErrorEnvelope} and an HTTP
53
+ * status. A typed {@link AbloError} is serialized through its own `toJSON`, so
54
+ * its code, param, doc_url, and structured details survive, and its status comes
55
+ * from an explicit `httpStatus` or, failing that, {@link statusForType}.
56
+ * Anything else becomes a 500 `internal_error` envelope — never a bare framework
57
+ * "Internal Server Error" body, and never a raw error string leaked onto the
58
+ * wire as an unregistered code.
66
59
  *
67
- * `requestId` is stamped into the body when the error didn't already carry one,
68
- * so the response and the `x-request-id` header agree for support correlation.
60
+ * When `requestId` is supplied and the error does not already carry one, it is
61
+ * stamped into the body so the response and the `x-request-id` header agree for
62
+ * support correlation.
69
63
  */
70
64
  export function errorEnvelope(err, requestId) {
71
65
  if (err instanceof AbloError) {
@@ -81,10 +75,10 @@ export function errorEnvelope(err, requestId) {
81
75
  status,
82
76
  };
83
77
  }
84
- // Unknown throw mask. The server copy deliberately never echoes a raw
85
- // message on an unclassified 500 (it can carry pg/driver/internal detail);
86
- // this producer must not either sync-web's dashboard routes serve THIS
87
- // envelope to browsers. The raw error stays with the caller for logging.
78
+ // Unknown throw: mask it. An unclassified 500 can carry database, driver, or
79
+ // other internal detail, so the raw message is never echoed here — this
80
+ // envelope is served directly to browsers. The original error stays with the
81
+ // caller for logging.
88
82
  return {
89
83
  body: {
90
84
  type: 'AbloServerError',