@abloatai/ablo 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +104 -88
  4. package/dist/BaseSyncedStore.d.ts +140 -266
  5. package/dist/BaseSyncedStore.js +338 -739
  6. package/dist/Database.d.ts +62 -77
  7. package/dist/Database.js +106 -127
  8. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  9. package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
  10. package/dist/LazyReferenceCollection.d.ts +11 -15
  11. package/dist/LazyReferenceCollection.js +16 -15
  12. package/dist/Model.d.ts +37 -52
  13. package/dist/Model.js +52 -69
  14. package/dist/ModelRegistry.d.ts +46 -25
  15. package/dist/ModelRegistry.js +32 -30
  16. package/dist/NetworkMonitor.d.ts +5 -6
  17. package/dist/NetworkMonitor.js +6 -7
  18. package/dist/SyncClient.d.ts +119 -109
  19. package/dist/SyncClient.js +303 -224
  20. package/dist/SyncEngineContext.d.ts +1 -3
  21. package/dist/SyncEngineContext.js +1 -2
  22. package/dist/adapters/alwaysOnline.d.ts +6 -8
  23. package/dist/adapters/alwaysOnline.js +6 -8
  24. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  25. package/dist/adapters/inMemoryStorage.js +9 -9
  26. package/dist/agent/Agent.d.ts +39 -31
  27. package/dist/agent/Agent.js +35 -23
  28. package/dist/agent/index.d.ts +4 -4
  29. package/dist/agent/index.js +5 -5
  30. package/dist/agent/session.d.ts +47 -44
  31. package/dist/agent/session.js +37 -48
  32. package/dist/agent/types.d.ts +26 -31
  33. package/dist/agent/types.js +6 -7
  34. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  35. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  36. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  37. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
  38. package/dist/ai-sdk/index.d.ts +25 -22
  39. package/dist/ai-sdk/index.js +25 -22
  40. package/dist/ai-sdk/wrap.d.ts +7 -8
  41. package/dist/ai-sdk/wrap.js +2 -2
  42. package/dist/auth/credentialPolicy.d.ts +74 -71
  43. package/dist/auth/credentialPolicy.js +51 -56
  44. package/dist/auth/credentialSource.d.ts +7 -18
  45. package/dist/auth/credentialSource.js +10 -18
  46. package/dist/auth/index.d.ts +59 -58
  47. package/dist/auth/index.js +34 -40
  48. package/dist/auth/schemas.d.ts +5 -4
  49. package/dist/auth/schemas.js +5 -4
  50. package/dist/batching/index.d.ts +19 -21
  51. package/dist/batching/index.js +14 -17
  52. package/dist/cli.cjs +483 -369
  53. package/dist/client/Ablo.d.ts +107 -836
  54. package/dist/client/Ablo.js +174 -833
  55. package/dist/client/ApiClient.d.ts +44 -20
  56. package/dist/client/ApiClient.js +193 -44
  57. package/dist/client/auth.d.ts +51 -60
  58. package/dist/client/auth.js +137 -110
  59. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  60. package/dist/client/claimHeartbeatLoop.js +88 -0
  61. package/dist/client/consoleLogger.d.ts +35 -0
  62. package/dist/client/consoleLogger.js +44 -0
  63. package/dist/client/createInternalComponents.d.ts +14 -17
  64. package/dist/client/createInternalComponents.js +26 -31
  65. package/dist/client/createModelProxy.d.ts +130 -120
  66. package/dist/client/createModelProxy.js +158 -124
  67. package/dist/client/credentialEndpoint.d.ts +61 -0
  68. package/dist/client/credentialEndpoint.js +86 -0
  69. package/dist/client/functionalUpdate.d.ts +29 -27
  70. package/dist/client/functionalUpdate.js +21 -21
  71. package/dist/client/hostedEndpoints.d.ts +21 -0
  72. package/dist/client/hostedEndpoints.js +21 -0
  73. package/dist/client/httpClient.d.ts +58 -54
  74. package/dist/client/httpClient.js +29 -31
  75. package/dist/client/identity.d.ts +15 -20
  76. package/dist/client/identity.js +49 -59
  77. package/dist/client/modelRegistration.d.ts +10 -0
  78. package/dist/client/modelRegistration.js +301 -0
  79. package/dist/client/options.d.ts +373 -0
  80. package/dist/client/options.js +6 -0
  81. package/dist/client/registerDataSource.d.ts +9 -9
  82. package/dist/client/registerDataSource.js +15 -16
  83. package/dist/client/resourceTypes.d.ts +333 -0
  84. package/dist/client/resourceTypes.js +7 -0
  85. package/dist/client/schemaConfig.d.ts +44 -0
  86. package/dist/client/schemaConfig.js +176 -0
  87. package/dist/client/sessionMint.d.ts +17 -13
  88. package/dist/client/sessionMint.js +26 -31
  89. package/dist/client/validateAbloOptions.d.ts +12 -14
  90. package/dist/client/validateAbloOptions.js +9 -10
  91. package/dist/client/writeOptionsSchema.d.ts +18 -16
  92. package/dist/client/writeOptionsSchema.js +23 -20
  93. package/dist/client/wsMutationExecutor.d.ts +28 -0
  94. package/dist/client/wsMutationExecutor.js +71 -0
  95. package/dist/context.d.ts +6 -4
  96. package/dist/context.js +6 -7
  97. package/dist/coordination/index.d.ts +13 -4
  98. package/dist/coordination/index.js +29 -4
  99. package/dist/coordination/schema.d.ts +176 -128
  100. package/dist/coordination/schema.js +197 -133
  101. package/dist/coordination/trace.d.ts +9 -11
  102. package/dist/coordination/trace.js +13 -15
  103. package/dist/core/DatabaseManager.d.ts +5 -8
  104. package/dist/core/DatabaseManager.js +38 -40
  105. package/dist/core/QueryProcessor.d.ts +7 -9
  106. package/dist/core/QueryProcessor.js +27 -34
  107. package/dist/core/QueryView.d.ts +17 -5
  108. package/dist/core/QueryView.js +6 -7
  109. package/dist/core/StoreManager.d.ts +14 -16
  110. package/dist/core/StoreManager.js +26 -25
  111. package/dist/core/ViewRegistry.d.ts +5 -5
  112. package/dist/core/ViewRegistry.js +4 -4
  113. package/dist/core/index.d.ts +18 -13
  114. package/dist/core/index.js +32 -26
  115. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  116. package/dist/core/openIDBWithTimeout.js +57 -54
  117. package/dist/core/queryUtils.d.ts +45 -0
  118. package/dist/core/queryUtils.js +69 -0
  119. package/dist/core/storeContract.d.ts +145 -0
  120. package/dist/core/storeContract.js +12 -0
  121. package/dist/environment.d.ts +28 -0
  122. package/dist/environment.js +21 -0
  123. package/dist/errorCodes.d.ts +118 -101
  124. package/dist/errorCodes.js +277 -260
  125. package/dist/errors.d.ts +170 -165
  126. package/dist/errors.js +161 -151
  127. package/dist/index.d.ts +30 -27
  128. package/dist/index.js +90 -82
  129. package/dist/interfaces/index.d.ts +108 -133
  130. package/dist/interfaces/index.js +5 -4
  131. package/dist/keys/index.d.ts +27 -29
  132. package/dist/keys/index.js +59 -49
  133. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  134. package/dist/mutators/RecordingTransaction.js +31 -37
  135. package/dist/mutators/Transaction.d.ts +18 -26
  136. package/dist/mutators/Transaction.js +14 -20
  137. package/dist/mutators/UndoManager.d.ts +122 -131
  138. package/dist/mutators/UndoManager.js +149 -155
  139. package/dist/mutators/defineMutators.d.ts +24 -37
  140. package/dist/mutators/defineMutators.js +14 -20
  141. package/dist/mutators/inverseOp.d.ts +12 -15
  142. package/dist/mutators/inverseOp.js +12 -15
  143. package/dist/mutators/mutateActions.d.ts +10 -9
  144. package/dist/mutators/mutateActions.js +1 -1
  145. package/dist/mutators/readerActions.d.ts +9 -8
  146. package/dist/mutators/readerActions.js +2 -2
  147. package/dist/mutators/undoApply.d.ts +31 -27
  148. package/dist/mutators/undoApply.js +26 -24
  149. package/dist/policy/index.d.ts +5 -3
  150. package/dist/policy/index.js +5 -3
  151. package/dist/policy/types.d.ts +105 -101
  152. package/dist/policy/types.js +67 -66
  153. package/dist/query/client.d.ts +32 -16
  154. package/dist/query/client.js +103 -72
  155. package/dist/query/types.d.ts +37 -60
  156. package/dist/query/types.js +13 -33
  157. package/dist/react/AbloProvider.d.ts +7 -11
  158. package/dist/react/AbloProvider.js +24 -17
  159. package/dist/react/context.d.ts +27 -146
  160. package/dist/react/context.js +9 -10
  161. package/dist/react/index.d.ts +41 -42
  162. package/dist/react/index.js +37 -38
  163. package/dist/react/internalContext.d.ts +17 -19
  164. package/dist/react/useAblo.d.ts +23 -22
  165. package/dist/react/useAblo.js +17 -15
  166. package/dist/react/useCurrentUserId.d.ts +8 -7
  167. package/dist/react/useCurrentUserId.js +8 -7
  168. package/dist/react/useErrorListener.d.ts +7 -7
  169. package/dist/react/useErrorListener.js +11 -12
  170. package/dist/react/useMutationFailureListener.d.ts +8 -8
  171. package/dist/react/useMutationFailureListener.js +9 -9
  172. package/dist/react/useMutators.d.ts +11 -11
  173. package/dist/react/useMutators.js +10 -4
  174. package/dist/react/useReactive.js +2 -3
  175. package/dist/react/useSyncStatus.d.ts +4 -6
  176. package/dist/react/useUndoScope.d.ts +7 -9
  177. package/dist/react/useUndoScope.js +3 -3
  178. package/dist/schema/coordination.d.ts +21 -25
  179. package/dist/schema/coordination.js +21 -25
  180. package/dist/schema/ddl.d.ts +43 -39
  181. package/dist/schema/ddl.js +75 -68
  182. package/dist/schema/ddlLock.d.ts +35 -0
  183. package/dist/schema/ddlLock.js +46 -0
  184. package/dist/schema/diff.d.ts +99 -61
  185. package/dist/schema/diff.js +43 -34
  186. package/dist/schema/field.d.ts +37 -42
  187. package/dist/schema/field.js +36 -49
  188. package/dist/schema/generate.d.ts +12 -12
  189. package/dist/schema/generate.js +12 -12
  190. package/dist/schema/index.d.ts +5 -4
  191. package/dist/schema/index.js +29 -21
  192. package/dist/schema/model.d.ts +121 -146
  193. package/dist/schema/model.js +24 -35
  194. package/dist/schema/openapi.d.ts +10 -9
  195. package/dist/schema/openapi.js +7 -1
  196. package/dist/schema/queries.d.ts +30 -32
  197. package/dist/schema/queries.js +24 -25
  198. package/dist/schema/relation.d.ts +89 -99
  199. package/dist/schema/relation.js +13 -13
  200. package/dist/schema/residency.d.ts +38 -0
  201. package/dist/schema/residency.js +30 -0
  202. package/dist/schema/roles.d.ts +45 -27
  203. package/dist/schema/roles.js +52 -21
  204. package/dist/schema/schema.d.ts +36 -45
  205. package/dist/schema/schema.js +42 -39
  206. package/dist/schema/select.d.ts +13 -13
  207. package/dist/schema/select.js +13 -13
  208. package/dist/schema/serialize.d.ts +36 -39
  209. package/dist/schema/serialize.js +27 -31
  210. package/dist/schema/sugar.d.ts +17 -32
  211. package/dist/schema/sugar.js +14 -29
  212. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
  213. package/dist/schema/syncDeltaRow.js +89 -0
  214. package/dist/schema/tenancy.d.ts +44 -46
  215. package/dist/schema/tenancy.js +46 -48
  216. package/dist/server/adapter.d.ts +58 -58
  217. package/dist/server/adapter.js +13 -14
  218. package/dist/server/commit.d.ts +60 -64
  219. package/dist/server/index.d.ts +9 -10
  220. package/dist/server/index.js +1 -1
  221. package/dist/server/readConfig.d.ts +70 -0
  222. package/dist/server/readConfig.js +8 -0
  223. package/dist/server/storageMode.d.ts +23 -0
  224. package/dist/server/storageMode.js +17 -0
  225. package/dist/source/adapter.d.ts +31 -26
  226. package/dist/source/adapter.js +10 -10
  227. package/dist/source/adapters/drizzle.d.ts +28 -23
  228. package/dist/source/adapters/drizzle.js +34 -28
  229. package/dist/source/adapters/kysely.d.ts +27 -25
  230. package/dist/source/adapters/kysely.js +28 -26
  231. package/dist/source/adapters/memory.d.ts +8 -7
  232. package/dist/source/adapters/memory.js +10 -9
  233. package/dist/source/adapters/prisma.d.ts +13 -12
  234. package/dist/source/adapters/prisma.js +27 -29
  235. package/dist/source/conformance.d.ts +18 -11
  236. package/dist/source/conformance.js +27 -19
  237. package/dist/source/connector.d.ts +31 -32
  238. package/dist/source/connector.js +30 -28
  239. package/dist/source/connectorProtocol.d.ts +160 -0
  240. package/dist/source/connectorProtocol.js +162 -0
  241. package/dist/source/contract.d.ts +26 -27
  242. package/dist/source/contract.js +28 -29
  243. package/dist/source/factory.d.ts +94 -0
  244. package/dist/source/factory.js +268 -0
  245. package/dist/source/index.d.ts +10 -462
  246. package/dist/source/index.js +17 -421
  247. package/dist/source/migrations.d.ts +9 -9
  248. package/dist/source/migrations.js +9 -9
  249. package/dist/source/next.d.ts +10 -11
  250. package/dist/source/next.js +7 -8
  251. package/dist/source/pushQueue.d.ts +70 -48
  252. package/dist/source/pushQueue.js +36 -29
  253. package/dist/source/signing.d.ts +88 -0
  254. package/dist/source/signing.js +159 -0
  255. package/dist/source/types.d.ts +351 -0
  256. package/dist/source/types.js +43 -0
  257. package/dist/stores/ObjectStore.d.ts +11 -12
  258. package/dist/stores/ObjectStore.js +34 -35
  259. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  260. package/dist/stores/SyncActionStore.d.ts +8 -12
  261. package/dist/stores/SyncActionStore.js +77 -46
  262. package/dist/surface.d.ts +28 -21
  263. package/dist/surface.js +28 -20
  264. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
  265. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
  266. package/dist/sync/ConnectionManager.d.ts +47 -50
  267. package/dist/sync/ConnectionManager.js +74 -70
  268. package/dist/sync/NetworkProbe.d.ts +27 -31
  269. package/dist/sync/NetworkProbe.js +67 -72
  270. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
  271. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
  272. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
  273. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
  274. package/dist/sync/SyncWebSocket.d.ts +175 -250
  275. package/dist/sync/SyncWebSocket.js +431 -769
  276. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  277. package/dist/sync/awaitClaimGrant.js +38 -30
  278. package/dist/sync/bootstrapApply.d.ts +70 -0
  279. package/dist/sync/bootstrapApply.js +73 -0
  280. package/dist/sync/commitFrames.d.ts +44 -0
  281. package/dist/sync/commitFrames.js +94 -0
  282. package/dist/sync/createClaimStream.d.ts +23 -22
  283. package/dist/sync/createClaimStream.js +108 -25
  284. package/dist/sync/createPresenceStream.d.ts +19 -18
  285. package/dist/sync/createPresenceStream.js +25 -26
  286. package/dist/sync/createSnapshot.d.ts +13 -17
  287. package/dist/sync/createSnapshot.js +20 -26
  288. package/dist/sync/credentialLifecycle.d.ts +175 -0
  289. package/dist/sync/credentialLifecycle.js +322 -0
  290. package/dist/sync/deltaPipeline.d.ts +113 -0
  291. package/dist/sync/deltaPipeline.js +261 -0
  292. package/dist/sync/groupChange.d.ts +113 -0
  293. package/dist/sync/groupChange.js +242 -0
  294. package/dist/sync/heartbeat.d.ts +63 -0
  295. package/dist/sync/heartbeat.js +91 -0
  296. package/dist/sync/participants.d.ts +27 -27
  297. package/dist/sync/schemas.d.ts +3 -2
  298. package/dist/sync/schemas.js +14 -10
  299. package/dist/sync/syncCursor.d.ts +40 -0
  300. package/dist/sync/syncCursor.js +55 -0
  301. package/dist/sync/syncPlan.d.ts +54 -0
  302. package/dist/sync/syncPlan.js +50 -0
  303. package/dist/sync/syncPosition.d.ts +54 -49
  304. package/dist/sync/syncPosition.js +57 -52
  305. package/dist/sync/wsFrameHandlers.d.ts +116 -0
  306. package/dist/sync/wsFrameHandlers.js +374 -0
  307. package/dist/testing/fixtures/bootstrap.d.ts +21 -17
  308. package/dist/testing/fixtures/bootstrap.js +12 -6
  309. package/dist/testing/fixtures/deltas.d.ts +31 -34
  310. package/dist/testing/fixtures/deltas.js +30 -33
  311. package/dist/testing/fixtures/models.d.ts +11 -10
  312. package/dist/testing/fixtures/models.js +12 -10
  313. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  314. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  315. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
  316. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
  317. package/dist/testing/helpers/wait.d.ts +13 -8
  318. package/dist/testing/helpers/wait.js +13 -8
  319. package/dist/testing/index.d.ts +4 -4
  320. package/dist/testing/index.js +3 -3
  321. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  322. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  323. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  324. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  325. package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
  326. package/dist/testing/mocks/MockSyncContext.js +16 -45
  327. package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
  328. package/dist/testing/mocks/MockSyncStore.js +11 -11
  329. package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
  330. package/dist/testing/mocks/MockWebSocket.js +22 -21
  331. package/dist/transactions/TransactionQueue.d.ts +190 -221
  332. package/dist/transactions/TransactionQueue.js +424 -822
  333. package/dist/transactions/TransactionStore.d.ts +20 -0
  334. package/dist/transactions/TransactionStore.js +53 -0
  335. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  336. package/dist/transactions/UnconfirmedWrites.js +104 -0
  337. package/dist/transactions/coalesceRules.d.ts +58 -0
  338. package/dist/transactions/coalesceRules.js +140 -0
  339. package/dist/transactions/commitPayload.d.ts +130 -0
  340. package/dist/transactions/commitPayload.js +143 -0
  341. package/dist/transactions/deltaConfirmation.d.ts +58 -0
  342. package/dist/transactions/deltaConfirmation.js +215 -0
  343. package/dist/transactions/optimisticApply.d.ts +49 -0
  344. package/dist/transactions/optimisticApply.js +65 -0
  345. package/dist/transactions/replayValidation.d.ts +99 -0
  346. package/dist/transactions/replayValidation.js +111 -0
  347. package/dist/types/global.d.ts +46 -41
  348. package/dist/types/global.js +20 -19
  349. package/dist/types/index.d.ts +74 -80
  350. package/dist/types/index.js +22 -27
  351. package/dist/types/modelData.d.ts +10 -0
  352. package/dist/types/modelData.js +9 -0
  353. package/dist/types/participant.d.ts +20 -0
  354. package/dist/types/participant.js +10 -0
  355. package/dist/types/streams.d.ts +216 -209
  356. package/dist/types/streams.js +7 -7
  357. package/dist/utils/asyncIterator.d.ts +25 -32
  358. package/dist/utils/asyncIterator.js +25 -32
  359. package/dist/utils/duration.d.ts +12 -15
  360. package/dist/utils/duration.js +12 -15
  361. package/dist/utils/mobxSetup.d.ts +53 -0
  362. package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
  363. package/dist/webhooks/events.d.ts +21 -16
  364. package/dist/webhooks/events.js +10 -8
  365. package/dist/webhooks/index.d.ts +5 -7
  366. package/dist/webhooks/index.js +5 -7
  367. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  368. package/dist/wire/delta.js +114 -0
  369. package/dist/wire/errorEnvelope.d.ts +35 -27
  370. package/dist/wire/errorEnvelope.js +38 -32
  371. package/dist/wire/frames.d.ts +150 -67
  372. package/dist/wire/frames.js +48 -1
  373. package/dist/wire/index.d.ts +18 -13
  374. package/dist/wire/index.js +36 -13
  375. package/dist/wire/listEnvelope.d.ts +16 -23
  376. package/dist/wire/listEnvelope.js +7 -6
  377. package/dist/wire/protocol.d.ts +38 -0
  378. package/dist/wire/protocol.js +38 -0
  379. package/dist/wire/protocolVersion.d.ts +60 -0
  380. package/dist/wire/protocolVersion.js +67 -0
  381. package/docs/api-keys.md +4 -3
  382. package/docs/coordination.md +59 -0
  383. package/docs/examples/existing-python-backend.md +3 -3
  384. package/docs/identity.md +4 -4
  385. package/docs/integration-guide.md +1 -1
  386. package/docs/react.md +1 -1
  387. package/docs/sessions.md +5 -7
  388. package/package.json +24 -21
  389. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  390. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  391. package/dist/client/index.d.ts +0 -36
  392. package/dist/client/index.js +0 -33
  393. package/dist/config/index.d.ts +0 -10
  394. package/dist/config/index.js +0 -12
  395. package/dist/core/query-utils.d.ts +0 -34
  396. package/dist/core/query-utils.js +0 -59
  397. package/dist/interfaces/headless.d.ts +0 -95
  398. package/dist/interfaces/headless.js +0 -41
  399. package/dist/query/index.d.ts +0 -6
  400. package/dist/query/index.js +0 -5
  401. package/dist/realtime/index.d.ts +0 -10
  402. package/dist/realtime/index.js +0 -9
  403. package/dist/schema/plane.d.ts +0 -23
  404. package/dist/schema/plane.js +0 -19
  405. package/dist/schema/sync-delta-row.js +0 -103
  406. package/dist/schema/sync-delta-wire.js +0 -102
  407. package/dist/server/next.d.ts +0 -51
  408. package/dist/server/next.js +0 -47
  409. package/dist/server/read-config.d.ts +0 -67
  410. package/dist/server/read-config.js +0 -8
  411. package/dist/server/storage-mode.d.ts +0 -1
  412. package/dist/server/storage-mode.js +0 -18
  413. package/dist/source/connector-protocol.d.ts +0 -159
  414. package/dist/source/connector-protocol.js +0 -161
  415. package/dist/sync/OfflineFlush.d.ts +0 -9
  416. package/dist/sync/OfflineFlush.js +0 -22
  417. package/dist/sync/OfflineTransactionStore.d.ts +0 -37
  418. package/dist/sync/OfflineTransactionStore.js +0 -263
  419. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  420. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  421. package/dist/transactions/index.d.ts +0 -16
  422. package/dist/transactions/index.js +0 -7
  423. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  424. package/dist/transactions/mutation-error-handler.js +0 -39
  425. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -0,0 +1,145 @@
1
+ /**
2
+ * The framework-neutral store contract. {@link SyncStoreContract} is the minimal
3
+ * store interface the SDK's hooks and mutators are written against, and
4
+ * {@link BaseSyncedStore} is the concrete class that implements it. Framework
5
+ * integrations, such as the React bindings, re-export these types, so a hook can
6
+ * accept any store that satisfies the contract without depending on a particular
7
+ * UI framework.
8
+ *
9
+ * This module is type-only: it has no runtime imports and contributes nothing to
10
+ * the runtime bundle beyond the erased interface declarations.
11
+ */
12
+ import type { Model } from '../Model.js';
13
+ import type { ModelScope } from '../types/index.js';
14
+ import type { QueryView, QueryViewOptions } from './QueryView.js';
15
+ import type { ViewRegistry } from './ViewRegistry.js';
16
+ import type { ParticipantScope } from '../sync/participants.js';
17
+ /**
18
+ * A snapshot of the client's synchronization state, shaped for binding to UI.
19
+ * {@link SyncStoreContract.syncStatus} exposes a reactive instance of this, and
20
+ * the `useSyncStatus()` hook reads its fields to render connection and progress
21
+ * indicators.
22
+ */
23
+ export interface SyncStatus {
24
+ state: 'idle' | 'syncing' | 'error' | 'offline' | 'reconnecting';
25
+ progress: number;
26
+ error?: Error;
27
+ /** When true, the error is a session/auth error requiring re-authentication. */
28
+ isSessionError: boolean;
29
+ lastSyncAt?: Date;
30
+ pendingChanges: number;
31
+ offlineSince?: Date;
32
+ }
33
+ /**
34
+ * A single locally-originated mutation, observed as it flows through the commit
35
+ * stream. The undo system records these to build its inverse operations: one is
36
+ * emitted per local create, update, delete, or archive. Changes arriving from
37
+ * other participants do not appear here — they apply through a separate path
38
+ * that does not queue mutations. Because `previousData` captures the field
39
+ * values as they were before the edit, each event carries everything needed to
40
+ * derive its inverse, with no separate snapshot step. A store exposes this
41
+ * stream through {@link SyncStoreContract.subscribeLocalMutations}.
42
+ */
43
+ export interface LocalMutation {
44
+ type: 'create' | 'update' | 'delete' | 'archive' | 'unarchive';
45
+ /** The registered name of the mutated model, for example `'SlideLayer'`. */
46
+ modelName: string;
47
+ modelId: string;
48
+ /** The new field values, for a create or an update. */
49
+ data?: Record<string, unknown> | null;
50
+ /** The field values as they were before the edit. For an update these form
51
+ * the inverse patch; for a delete they hold the full row needed to recreate
52
+ * it. */
53
+ previousData?: Record<string, unknown> | null;
54
+ }
55
+ /**
56
+ * The minimal store interface the SDK's hooks and mutators depend on. Provide a
57
+ * concrete store that implements it — {@link BaseSyncedStore} is the built-in
58
+ * implementation — and the hooks work against your store without knowing its
59
+ * exact type. Optional members exist so lightweight test doubles can implement
60
+ * only the parts they exercise.
61
+ */
62
+ export interface SyncStoreContract {
63
+ /**
64
+ * Subscribes to the stream of local mutations for undo recording, delivering
65
+ * each optimistic write before it is acknowledged by the server. See
66
+ * {@link LocalMutation}. Returns a function that removes the subscription.
67
+ * This is optional: when a store does not implement it, undo scopes simply
68
+ * record nothing.
69
+ */
70
+ subscribeLocalMutations?(handler: (mutation: LocalMutation) => void): () => void;
71
+ retrieve(modelClass: abstract new (...args: never[]) => Model, id: string): Model | undefined;
72
+ queryByClass(modelClass: abstract new (...args: never[]) => Model, options?: {
73
+ predicate?: (model: Model) => boolean;
74
+ scope?: ModelScope;
75
+ orderBy?: keyof Model;
76
+ order?: 'asc' | 'desc';
77
+ limit?: number;
78
+ offset?: number;
79
+ }): {
80
+ data: Model[];
81
+ };
82
+ /**
83
+ * Saves one entity, creating it if new or updating it if it already exists.
84
+ * Calling `save` repeatedly within the same tick is efficient: the writes are
85
+ * coalesced and persisted, then sent to the server, as a single commit. There
86
+ * is deliberately no bulk method — issue one `save` per row and let the tick
87
+ * boundary batch them.
88
+ *
89
+ * Pass `skipValidation` on trusted, high-volume paths — bulk import or
90
+ * hydration, where the data has already been validated — to skip the per-row
91
+ * schema check, which is a measurable cost at that volume.
92
+ */
93
+ save(model: Model, options?: {
94
+ skipValidation?: boolean;
95
+ }): Promise<void>;
96
+ delete(model: Model): Promise<void>;
97
+ archive(model: Model): Promise<void>;
98
+ unarchive(model: Model): Promise<void>;
99
+ /** The in-memory object pool: look up individual entities or collections by
100
+ * id or model name, create views, and resolve foreign-key relationships. */
101
+ pool: {
102
+ get(id: string): Model | undefined;
103
+ getByTypeName(typename: string, scope?: ModelScope): Model[];
104
+ getByForeignKey(modelName: string, fieldName: string, fieldValue: string): Model[];
105
+ createFromData(data: Record<string, unknown>): Model | null;
106
+ hasForeignKeyIndex(typename: string, fieldName: string): boolean;
107
+ createView<T extends Record<string, unknown>>(typename: string, options?: QueryViewOptions<T>): QueryView<T>;
108
+ viewRegistry: ViewRegistry;
109
+ };
110
+ /**
111
+ * Reactive getters for the current sync state. In the built-in store these
112
+ * are backed by observable computeds, so reading them inside a reactive
113
+ * context — an observer component or a reaction — re-runs that context when
114
+ * the state changes. Code that prefers not to work with the reactivity system
115
+ * directly can read the same values through the `useSyncStatus()` hook.
116
+ */
117
+ readonly isReady: boolean;
118
+ readonly isSyncing: boolean;
119
+ readonly isOffline: boolean;
120
+ readonly isReconnecting: boolean;
121
+ readonly isError: boolean;
122
+ readonly hasUnsyncedChanges: boolean;
123
+ /**
124
+ * Manages the connection's area of interest — the dynamic set of data it
125
+ * subscribes to. Call `enterScope` and `leaveScope` to move that interest as
126
+ * the user navigates between documents, and `pinScope` and `unpinScope` to
127
+ * keep a scope subscribed while it stays important, such as while a claim is
128
+ * held. Every scope resolves through the same resolver the claim path uses, so
129
+ * read subscriptions and write claims always agree on which group they refer
130
+ * to. These are optional and do nothing until the connection is open.
131
+ */
132
+ enterScope?(scope: ParticipantScope, opts?: {
133
+ hydrate?: boolean;
134
+ }): Promise<void>;
135
+ leaveScope?(scope: ParticipantScope): Promise<void>;
136
+ pinScope?(scope: ParticipantScope): Promise<void>;
137
+ unpinScope?(scope: ParticipantScope): Promise<void>;
138
+ /**
139
+ * The full reactive {@link SyncStatus} record. The `useSyncStatus()` hook
140
+ * reads its fields — `state`, `progress`, `pendingChanges`, `isSessionError`,
141
+ * and `error` — to present the current sync state. It is part of the contract
142
+ * so hooks and test doubles can read or set it directly.
143
+ */
144
+ readonly syncStatus: SyncStatus;
145
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The framework-neutral store contract. {@link SyncStoreContract} is the minimal
3
+ * store interface the SDK's hooks and mutators are written against, and
4
+ * {@link BaseSyncedStore} is the concrete class that implements it. Framework
5
+ * integrations, such as the React bindings, re-export these types, so a hook can
6
+ * accept any store that satisfies the contract without depending on a particular
7
+ * UI framework.
8
+ *
9
+ * This module is type-only: it has no runtime imports and contributes nothing to
10
+ * the runtime bundle beyond the erased interface declarations.
11
+ */
12
+ export {};
@@ -1,12 +1,40 @@
1
1
  import { z } from 'zod';
2
+ /**
3
+ * The two environments an Ablo project runs in: `production` for live data and
4
+ * `sandbox` for isolated test data. Every credential and every stored row
5
+ * belongs to exactly one of them.
6
+ */
2
7
  export declare const ENVIRONMENTS: readonly ["production", "sandbox"];
8
+ /**
9
+ * How an environment is spelled inside an API-key prefix: a `live` key acts on
10
+ * the production environment and a `test` key acts on the sandbox. Convert
11
+ * between this spelling and {@link Environment} with
12
+ * {@link environmentFromKeyPrefix} and {@link environmentToKeyPrefix}.
13
+ */
3
14
  export type KeyPrefixEnvironment = 'live' | 'test';
15
+ /** A Zod schema that validates a value as one of the {@link ENVIRONMENTS}. */
4
16
  export declare const environmentSchema: z.ZodEnum<{
5
17
  production: "production";
6
18
  sandbox: "sandbox";
7
19
  }>;
20
+ /** One of the {@link ENVIRONMENTS} — either `'production'` or `'sandbox'`. */
8
21
  export type Environment = z.infer<typeof environmentSchema>;
22
+ /**
23
+ * Coerces an untrusted value into a valid {@link Environment}, returning
24
+ * `fallback` (which defaults to `'production'`) when the value is not a
25
+ * recognized environment. Use it when reading an environment from configuration
26
+ * or off the wire.
27
+ */
9
28
  export declare function normalizeEnvironment(value: unknown, fallback?: Environment): Environment;
29
+ /**
30
+ * Maps an API-key prefix spelling to its {@link Environment}: a `'test'` key
31
+ * operates on the sandbox, and anything else on production.
32
+ */
10
33
  export declare function environmentFromKeyPrefix(value: KeyPrefixEnvironment): Environment;
34
+ /**
35
+ * Maps an {@link Environment} to the spelling used in an API-key prefix: the
36
+ * sandbox is `'test'` and production is `'live'`.
37
+ */
11
38
  export declare function environmentToKeyPrefix(value: Environment): KeyPrefixEnvironment;
39
+ /** Returns true when the given environment is the sandbox. */
12
40
  export declare function isSandboxEnvironment(value: Environment): boolean;
@@ -1,16 +1,37 @@
1
1
  import { z } from 'zod';
2
+ /**
3
+ * The two environments an Ablo project runs in: `production` for live data and
4
+ * `sandbox` for isolated test data. Every credential and every stored row
5
+ * belongs to exactly one of them.
6
+ */
2
7
  export const ENVIRONMENTS = ['production', 'sandbox'];
8
+ /** A Zod schema that validates a value as one of the {@link ENVIRONMENTS}. */
3
9
  export const environmentSchema = z.enum(ENVIRONMENTS);
10
+ /**
11
+ * Coerces an untrusted value into a valid {@link Environment}, returning
12
+ * `fallback` (which defaults to `'production'`) when the value is not a
13
+ * recognized environment. Use it when reading an environment from configuration
14
+ * or off the wire.
15
+ */
4
16
  export function normalizeEnvironment(value, fallback = 'production') {
5
17
  const parsed = environmentSchema.safeParse(value);
6
18
  return parsed.success ? parsed.data : fallback;
7
19
  }
20
+ /**
21
+ * Maps an API-key prefix spelling to its {@link Environment}: a `'test'` key
22
+ * operates on the sandbox, and anything else on production.
23
+ */
8
24
  export function environmentFromKeyPrefix(value) {
9
25
  return value === 'test' ? 'sandbox' : 'production';
10
26
  }
27
+ /**
28
+ * Maps an {@link Environment} to the spelling used in an API-key prefix: the
29
+ * sandbox is `'test'` and production is `'live'`.
30
+ */
11
31
  export function environmentToKeyPrefix(value) {
12
32
  return value === 'sandbox' ? 'test' : 'live';
13
33
  }
34
+ /** Returns true when the given environment is the sandbox. */
14
35
  export function isSandboxEnvironment(value) {
15
36
  return value === 'sandbox';
16
37
  }
@@ -1,74 +1,76 @@
1
1
  /**
2
- * The canonical Ablo error-code registry the **`code` tier** of the
3
- * Stripe-style two-tier error model.
2
+ * The registry of every stable error code Ablo can produce. Error handling has
3
+ * two levels, and this file defines the finer one.
4
4
  *
5
- * ### The two tiers (mirrors Stripe)
5
+ * - The `type` is the coarse category, and each one corresponds to an
6
+ * {@link AbloError} subclass such as `AbloPermissionError` or
7
+ * `AbloValidationError`. Catching by `instanceof` is equivalent to switching
8
+ * on `error.type`.
9
+ * - The `code` is the fine-grained, machine-readable identifier defined here,
10
+ * written in `snake_case` (for example `entity_claimed` or `queue_too_deep`).
11
+ * This is what you switch on to handle a specific situation, and what the
12
+ * documentation link for an error is built from.
6
13
  *
7
- * - **`type`** coarse category, 1:1 with an {@link AbloError} subclass
8
- * (`AbloPermissionError`, `AbloValidationError`, …). "Catch by
9
- * `instanceof`" "switch on `e.type`". This tier lives in `errors.ts`.
10
- * - **`code`** — the fine-grained, machine-readable identifier in this
11
- * file. `snake_case`, ordered noun→state (`entity_claimed`) or
12
- * condition→constraint (`queue_too_deep`). This is what callers
13
- * `switch` on for specific handling, and what `doc_url` is derived from.
14
+ * The client, the server, and the tool-calling boundary all speak this same
15
+ * vocabulary, which makes the registry part of the API contract. Two things
16
+ * follow from that:
14
17
  *
15
- * Because sync-engine sync-server MCP all speak this code vocabulary,
16
- * the registry **is** the wire contract. Two consequences:
17
- *
18
- * 1. `ErrorCode` is a *closed* union (plus the `policy:${string}`
19
- * dynamic family). Producing an unregistered code is a compile error
20
- * that's the whole point. {@link AbloError}'s constructor param is
21
- * narrowed to `ErrorCode`; only the wire-parse boundary
22
- * (`translateHttpError`, frame deserialization) casts an incoming
23
- * string to `ErrorCode`, so an *older* SDK still tolerates a *newer*
24
- * server's code (forward compat) while internal producers stay checked.
25
- * 2. The `surface: 'wire'` subset is what an HTTP/MCP boundary maps from
26
- * and what the public error docs are generated from. `surface:
27
- * 'client'` codes are local SDK invariants (you forgot to open the DB,
28
- * a model isn't registered) — never sent over the network, so they
29
- * carry no `httpStatus`, exactly as Stripe omits client-side
30
- * programmer errors from its published code list.
18
+ * 1. {@link ErrorCode} is a closed set plus the dynamic `policy:${string}`
19
+ * family so producing a code that is not registered here is a
20
+ * compile-time error. The {@link AbloError} constructor accepts only a
21
+ * registered code. The one place an arbitrary string is accepted as a code
22
+ * is where an incoming response is parsed, which lets an older client
23
+ * tolerate a code from a newer server it does not yet recognize.
24
+ * 2. The codes marked `surface: 'wire'` are the ones that cross the network
25
+ * and are mapped at the HTTP and tool-calling boundaries; the public error
26
+ * documentation is generated from them. Codes marked `surface: 'client'`
27
+ * describe local mistakes accessing the database before opening it, or
28
+ * writing to a model that was never registered and are never sent over
29
+ * the network, so they carry no HTTP status.
31
30
  */
32
31
  import { z } from 'zod';
33
32
  /**
34
- * Version of the error contract the envelope shape + the set of codes and
35
- * their semantics. Date-based, like Stripe's API versions. Bump it (and only
36
- * it) when the contract changes in a way consumers can observe: a new/removed
37
- * code, a changed HTTP status, an envelope field. Emitted in `errors.json`
38
- * and on the `Ablo-Version` response header so a consumer can detect drift.
33
+ * The version of the error contract: the envelope shape together with the set of
34
+ * codes and their meanings. It is date-based, and changes only when the contract
35
+ * changes in a way a consumer can observe a code added or removed, an HTTP
36
+ * status changed, or an envelope field changed. It is emitted in the generated
37
+ * error documentation and returned on the `Ablo-Version` response header, so a
38
+ * consumer can detect when its expected contract has drifted from the server's.
39
39
  */
40
- export declare const ERROR_CONTRACT_VERSION = "2026-06-20";
41
- /** Coarse grouping for metrics dashboards and docs sectioning. */
42
- export type ErrorCategory = 'auth' | 'permission' | 'capability' | 'claim' | 'conflict' | 'validation' | 'not_found' | 'tenant' | 'schema' | 'claim' | 'bootstrap' | 'transport' | 'rate_limit' | 'server' | 'client';
40
+ export declare const ERROR_CONTRACT_VERSION = "2026-07-03";
41
+ /** A coarse grouping of error codes, used to organize metrics and documentation. */
42
+ export type ErrorCategory = 'auth' | 'permission' | 'capability' | 'claim' | 'conflict' | 'validation' | 'not_found' | 'tenant' | 'schema' | 'bootstrap' | 'transport' | 'rate_limit' | 'server' | 'client';
43
43
  /**
44
- * The closed taxonomy of *how a failure recovers*one rung above the raw
45
- * `code`. Where `code` says **what** went wrong, `RecoveryClass` says **what
46
- * the client should do about it**, which is exactly the discriminant the sync
47
- * FSM and the network probe need. It collapses what used to be three scattered
48
- * booleans (`retryable`, `authBlocked`, `sessionValid`) into one exhaustive,
49
- * Zod-validated enum so the connection layer branches on a single value with
50
- * compile-time completeness instead of ad-hoc `if (!isRetryableCode(...))`
51
- * chains.
44
+ * A closed classification of how a failure can be recovered from a level above
45
+ * the raw {@link ErrorCode}. Where a code says what went wrong, a recovery class
46
+ * says what a client should do about it, which is exactly the distinction the
47
+ * connection layer needs to decide between retrying, re-minting a credential, and
48
+ * signing the user out. Every code maps to one of these, and the set is
49
+ * validated at runtime.
52
50
  *
53
- * - `access_credential_expiry` — the Stripe-style ephemeral key (`ek_`/`rk_`)
54
- * the sync-engine presents as its Bearer has expired. The long-lived login
55
- * is fine; the remedy is to silently RE-MINT a fresh key from the session
56
- * and retry the same request. This MUST NOT sign the user out (the whole
57
- * point of the wake-from-sleep fix: a 15-min `ek_` dying after a laptop nap
58
- * is routine, not a logout).
59
- * - `session_expiry` — the LONG-LIVED login itself is gone. Terminal:
51
+ * - `access_credential_expiry` — the short-lived access credential the client
52
+ * presents (its ephemeral `ek_` or `rk_` key) has expired, while the
53
+ * underlying login is still valid. The remedy is to mint a fresh key from the
54
+ * session and retry the same request. This does not sign the user out; a
55
+ * short-lived key expiring for example after a laptop resumes from sleep —
56
+ * is routine.
57
+ * - `session_expiry` — the long-lived login itself is gone. This is terminal:
60
58
  * sign out and route to re-authentication.
61
- * - `auth_blocked` — reachable, but the credential TYPE/config was rejected
62
- * (wrong key kind, untrusted issuer, no org). Re-auth re-mints the same
63
- * rejected credential and loops, so STOP don't reconnect, don't sign out.
64
- * - `permission` a 403 authorization denial (scope/role/membership).
65
- * - `transient` — retry the same request unchanged (5xx, lease contention…).
66
- * - `none` — not a recoverable-auth condition (validation, not-found, local
67
- * invariants, and any forward-compat code an older SDK doesn't know).
59
+ * - `auth_blocked` — the server was reachable but rejected the kind or
60
+ * configuration of the credential (wrong key type, untrusted issuer, no
61
+ * organization). Re-authenticating would present the same rejected credential
62
+ * and loop, so the client should stop rather than reconnect or sign out.
63
+ * - `permission` — an authorization denial (403) based on scope, role, or
64
+ * membership.
65
+ * - `transient` a temporary failure, such as a server error or lease
66
+ * contention, that may succeed if the same request is retried unchanged.
67
+ * - `none` — not a recoverable authentication condition: validation errors,
68
+ * not-found, local invariants, and any code an older client does not
69
+ * recognize.
68
70
  */
69
71
  export declare const RECOVERY_CLASSES: readonly ["access_credential_expiry", "session_expiry", "auth_blocked", "permission", "transient", "none"];
70
- /** Zod enum derived from {@link RECOVERY_CLASSES} the runtime-validatable
71
- * form of the recovery taxonomy. */
72
+ /** A Zod enum over {@link RECOVERY_CLASSES}, for validating a recovery class at
73
+ * runtime. */
72
74
  export declare const recoveryClassSchema: z.ZodEnum<{
73
75
  permission: "permission";
74
76
  access_credential_expiry: "access_credential_expiry";
@@ -77,36 +79,40 @@ export declare const recoveryClassSchema: z.ZodEnum<{
77
79
  transient: "transient";
78
80
  none: "none";
79
81
  }>;
80
- /** How a failure recovers. See {@link RECOVERY_CLASSES}. */
82
+ /** The recovery classification of a failure. See {@link RECOVERY_CLASSES}. */
81
83
  export type RecoveryClass = z.infer<typeof recoveryClassSchema>;
82
- /** One registry entry. `httpStatus` is present only for `surface: 'wire'`
83
- * codes status is a property of the wire boundary, never of a
84
- * purely-local client invariant. */
84
+ /** One entry in the registry: everything known about a single error code.
85
+ * `httpStatus` is present only for codes that cross the network, since an HTTP
86
+ * status is a property of the wire boundary rather than of a purely local
87
+ * error. */
85
88
  export interface ErrorCodeSpec {
86
89
  readonly category: ErrorCategory;
87
- /** `'wire'` = crosses the network and is part of the API/MCP contract;
88
- * `'client'` = local SDK invariant, never serialized. */
90
+ /** `'wire'` for a code that crosses the network and is part of the API
91
+ * contract; `'client'` for a local error that is never serialized. */
89
92
  readonly surface: 'wire' | 'client';
90
93
  /** Canonical HTTP status for the wire boundary. Omitted for client codes. */
91
94
  readonly httpStatus?: number;
92
- /** Whether the same request can succeed on a later retry without the
93
- * caller changing anything. `false` for permission / validation /
94
- * not-found; `true` for transient transport / lease contention. */
95
+ /** Whether the same request can succeed on a later retry without the caller
96
+ * changing anything. `false` for permission, validation, and not-found;
97
+ * `true` for transient transport failures and lease contention. */
95
98
  readonly retryable: boolean;
96
- /** One-line human description the source text for the `doc_url` page. */
99
+ /** A one-line, human-readable description of the error also the source text
100
+ * for its documentation page. */
97
101
  readonly message: string;
98
102
  /**
99
- * Explicit recovery class. Set ONLY where it diverges from what `category` /
100
- * `httpStatus` / `retryable` already imply — i.e. the handful of auth codes
101
- * whose remedy (`session_expiry` vs `access_credential_expiry`) the bare
102
- * status can't distinguish. Everything else is derived by
103
- * {@link classifyRecovery}, so adding a normal code needs no `recovery`.
103
+ * An explicit {@link RecoveryClass}, set only where it differs from what the
104
+ * category, HTTP status, and `retryable` flag already imply — mainly the few
105
+ * authentication codes whose remedy the status alone cannot reveal, such as
106
+ * telling a session expiry apart from an access-credential expiry. For every
107
+ * other code the recovery class is derived by {@link classifyRecovery}, so
108
+ * this field can be left unset.
104
109
  */
105
110
  readonly recovery?: RecoveryClass;
106
111
  }
107
112
  /**
108
- * The closed set of stable error codes. Add a code here BEFORE throwing it
109
- * the narrowed {@link AbloError} constructor param enforces this.
113
+ * The complete set of stable error codes, keyed by code. A code must be added
114
+ * here before it can be thrown, since the {@link AbloError} constructor accepts
115
+ * only codes from this set.
110
116
  */
111
117
  export declare const ERROR_CODES: {
112
118
  readonly apikey_invalid: ErrorCodeSpec;
@@ -172,6 +178,7 @@ export declare const ERROR_CODES: {
172
178
  readonly cli_invalid_arguments: ErrorCodeSpec;
173
179
  readonly turn_validation_failed: ErrorCodeSpec;
174
180
  readonly commit_operation_required: ErrorCodeSpec;
181
+ readonly commit_operation_invalid: ErrorCodeSpec;
175
182
  readonly commit_operation_model_required: ErrorCodeSpec;
176
183
  readonly commit_operations_ambiguous: ErrorCodeSpec;
177
184
  readonly commit_too_many_operations: ErrorCodeSpec;
@@ -307,9 +314,16 @@ export declare const ERROR_CODES: {
307
314
  readonly events_required: ErrorCodeSpec;
308
315
  readonly ingest_failed: ErrorCodeSpec;
309
316
  readonly migration_failed: ErrorCodeSpec;
317
+ readonly schema_provisioning_forbidden: ErrorCodeSpec;
310
318
  readonly model_query_failed: ErrorCodeSpec;
311
319
  readonly queries_required: ErrorCodeSpec;
312
320
  readonly query_unsupported_operator: ErrorCodeSpec;
321
+ readonly query_invalid_like_pattern: ErrorCodeSpec;
322
+ readonly query_invalid_boolean: ErrorCodeSpec;
323
+ readonly protocol_version_unsupported: ErrorCodeSpec;
324
+ readonly database_unreachable: ErrorCodeSpec;
325
+ readonly database_not_replication_ready: ErrorCodeSpec;
326
+ readonly replication_publication_drift: ErrorCodeSpec;
313
327
  readonly query_unknown_relation: ErrorCodeSpec;
314
328
  readonly query_relation_target_unknown: ErrorCodeSpec;
315
329
  readonly query_invalid_identifier: ErrorCodeSpec;
@@ -318,6 +332,7 @@ export declare const ERROR_CODES: {
318
332
  readonly upload_fields_required: ErrorCodeSpec;
319
333
  readonly upload_items_required: ErrorCodeSpec;
320
334
  readonly presigned_url_failed: ErrorCodeSpec;
335
+ readonly upload_not_configured: ErrorCodeSpec;
321
336
  readonly task_id_required: ErrorCodeSpec;
322
337
  readonly claim_id_required: ErrorCodeSpec;
323
338
  readonly commit_operation_action_required: ErrorCodeSpec;
@@ -336,45 +351,47 @@ export declare const ERROR_CODES: {
336
351
  readonly turn_foreign_agent: ErrorCodeSpec;
337
352
  readonly invalid_intent: ErrorCodeSpec;
338
353
  readonly schema_too_large: ErrorCodeSpec;
354
+ readonly request_too_large: ErrorCodeSpec;
339
355
  readonly invalid_schema: ErrorCodeSpec;
340
356
  readonly incompatible_change: ErrorCodeSpec;
341
357
  };
342
358
  /**
343
- * The closed set of registered codes, plus the `policy:${reason}` dynamic
344
- * family (conflict-policy rejections name their reason inline, the same way
345
- * Stripe carries a `decline_code` sub-detail). The constructor of
346
- * {@link AbloError} narrows its `code` option to this type, so a typo or an
347
- * unregistered code is a compile error. The wire-parse boundary casts
348
- * incoming strings to this type to preserve forward compatibility.
359
+ * The type of a valid error code: any key registered in {@link ERROR_CODES},
360
+ * plus the dynamic `policy:${reason}` family, where a conflict-policy rejection
361
+ * names its reason inline. The {@link AbloError} constructor accepts only this
362
+ * type, so a typo or an unregistered code is a compile-time error. Only the
363
+ * boundary that parses an incoming response casts an arbitrary string to this
364
+ * type, which preserves forward compatibility with a newer server.
349
365
  */
350
366
  export type ErrorCode = keyof typeof ERROR_CODES | `policy:${string}`;
351
- /** The subset of codes that cross the network — the actual API/MCP wire
352
- * contract. HTTP/MCP boundaries map from this set; docs are generated
353
- * from it. */
367
+ /** The subset of {@link ErrorCode} values that cross the network — the codes
368
+ * that make up the API contract, from which the HTTP and tool-calling
369
+ * boundaries map and the public documentation is generated. */
354
370
  export type WireErrorCode = {
355
371
  [K in keyof typeof ERROR_CODES]: (typeof ERROR_CODES)[K]['surface'] extends 'wire' ? K : never;
356
372
  }[keyof typeof ERROR_CODES];
357
- /** Look up an error code's spec. Returns `undefined` for the dynamic
358
- * `policy:*` family and for any forward-compat code an older SDK doesn't
359
- * yet know. */
373
+ /** Looks up the {@link ErrorCodeSpec} for a code. Returns `undefined` for the
374
+ * dynamic `policy:*` family and for any newer code this client does not yet
375
+ * recognize. */
360
376
  export declare function errorCodeSpec(code: string): ErrorCodeSpec | undefined;
361
- /** Whether a code's spec marks it retryable. Unknown / dynamic codes
362
- * default to non-retryable (safe default don't auto-retry the unknown). */
377
+ /** Reports whether a code is marked retryable. Unknown and dynamic codes
378
+ * default to non-retryable, so an unrecognized failure is never retried
379
+ * automatically. */
363
380
  export declare function isRetryableCode(code: string): boolean;
364
381
  /**
365
- * Classify a `code` into its {@link RecoveryClass} — the single discriminant
366
- * the connection FSM and the network probe branch on.
382
+ * Classifies a code into its {@link RecoveryClass} — the single value the
383
+ * connection layer and the network probe branch on to decide how to recover.
367
384
  *
368
- * The registry stays the source of truth: an explicit `spec.recovery` wins
369
- * (set only on the few auth codes whose remedy the status can't reveal), and
370
- * everything else is DERIVED from the spec so the registry stays terse:
371
- * - retryable → `transient`
372
- * - 403 → `permission`
373
- * - residual `auth`-category → `auth_blocked` (the 401 credential-type codes)
374
- * - otherwise / unknown → `none`
385
+ * The registry is the source of truth. An explicit `recovery` on the code's spec
386
+ * wins; it is set only on the few authentication codes whose remedy the HTTP
387
+ * status cannot reveal. Every other code is derived from its spec:
388
+ * - retryable → `transient`
389
+ * - HTTP 403 → `permission`
390
+ * - remaining `auth` category → `auth_blocked` (the credential-type 401s)
391
+ * - anything else, or unknown → `none`
375
392
  *
376
- * Unknown / dynamic `policy:*` / forward-compat codes (`spec === undefined`)
377
- * default to `none`, mirroring {@link isRetryableCode}'s safe default — never
378
- * silently treat an unrecognised code as a credential expiry or a logout.
393
+ * An unknown code, a dynamic `policy:*` code, or a code this client predates
394
+ * (no spec) defaults to `none`, the same safe default as {@link isRetryableCode}:
395
+ * an unrecognized code is never treated as a credential expiry or a sign-out.
379
396
  */
380
397
  export declare function classifyRecovery(code: string): RecoveryClass;