@abloatai/ablo 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (425) hide show
  1. package/AGENTS.md +5 -3
  2. package/CHANGELOG.md +34 -0
  3. package/README.md +104 -88
  4. package/dist/BaseSyncedStore.d.ts +140 -266
  5. package/dist/BaseSyncedStore.js +338 -739
  6. package/dist/Database.d.ts +62 -77
  7. package/dist/Database.js +106 -127
  8. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  9. package/dist/{ObjectPool.js → InstanceCache.js} +91 -83
  10. package/dist/LazyReferenceCollection.d.ts +11 -15
  11. package/dist/LazyReferenceCollection.js +16 -15
  12. package/dist/Model.d.ts +37 -52
  13. package/dist/Model.js +52 -69
  14. package/dist/ModelRegistry.d.ts +46 -25
  15. package/dist/ModelRegistry.js +32 -30
  16. package/dist/NetworkMonitor.d.ts +5 -6
  17. package/dist/NetworkMonitor.js +6 -7
  18. package/dist/SyncClient.d.ts +119 -109
  19. package/dist/SyncClient.js +303 -224
  20. package/dist/SyncEngineContext.d.ts +1 -3
  21. package/dist/SyncEngineContext.js +1 -2
  22. package/dist/adapters/alwaysOnline.d.ts +6 -8
  23. package/dist/adapters/alwaysOnline.js +6 -8
  24. package/dist/adapters/inMemoryStorage.d.ts +9 -9
  25. package/dist/adapters/inMemoryStorage.js +9 -9
  26. package/dist/agent/Agent.d.ts +39 -31
  27. package/dist/agent/Agent.js +35 -23
  28. package/dist/agent/index.d.ts +4 -4
  29. package/dist/agent/index.js +5 -5
  30. package/dist/agent/session.d.ts +47 -44
  31. package/dist/agent/session.js +37 -48
  32. package/dist/agent/types.d.ts +26 -31
  33. package/dist/agent/types.js +6 -7
  34. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  35. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  36. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  37. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +30 -31
  38. package/dist/ai-sdk/index.d.ts +25 -22
  39. package/dist/ai-sdk/index.js +25 -22
  40. package/dist/ai-sdk/wrap.d.ts +7 -8
  41. package/dist/ai-sdk/wrap.js +2 -2
  42. package/dist/auth/credentialPolicy.d.ts +74 -71
  43. package/dist/auth/credentialPolicy.js +51 -56
  44. package/dist/auth/credentialSource.d.ts +7 -18
  45. package/dist/auth/credentialSource.js +10 -18
  46. package/dist/auth/index.d.ts +59 -58
  47. package/dist/auth/index.js +34 -40
  48. package/dist/auth/schemas.d.ts +5 -4
  49. package/dist/auth/schemas.js +5 -4
  50. package/dist/batching/index.d.ts +19 -21
  51. package/dist/batching/index.js +14 -17
  52. package/dist/cli.cjs +483 -369
  53. package/dist/client/Ablo.d.ts +107 -836
  54. package/dist/client/Ablo.js +174 -833
  55. package/dist/client/ApiClient.d.ts +44 -20
  56. package/dist/client/ApiClient.js +193 -44
  57. package/dist/client/auth.d.ts +51 -60
  58. package/dist/client/auth.js +137 -110
  59. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  60. package/dist/client/claimHeartbeatLoop.js +88 -0
  61. package/dist/client/consoleLogger.d.ts +35 -0
  62. package/dist/client/consoleLogger.js +44 -0
  63. package/dist/client/createInternalComponents.d.ts +14 -17
  64. package/dist/client/createInternalComponents.js +26 -31
  65. package/dist/client/createModelProxy.d.ts +130 -120
  66. package/dist/client/createModelProxy.js +158 -124
  67. package/dist/client/credentialEndpoint.d.ts +61 -0
  68. package/dist/client/credentialEndpoint.js +86 -0
  69. package/dist/client/functionalUpdate.d.ts +29 -27
  70. package/dist/client/functionalUpdate.js +21 -21
  71. package/dist/client/hostedEndpoints.d.ts +21 -0
  72. package/dist/client/hostedEndpoints.js +21 -0
  73. package/dist/client/httpClient.d.ts +58 -54
  74. package/dist/client/httpClient.js +29 -31
  75. package/dist/client/identity.d.ts +15 -20
  76. package/dist/client/identity.js +49 -59
  77. package/dist/client/modelRegistration.d.ts +10 -0
  78. package/dist/client/modelRegistration.js +301 -0
  79. package/dist/client/options.d.ts +373 -0
  80. package/dist/client/options.js +6 -0
  81. package/dist/client/registerDataSource.d.ts +9 -9
  82. package/dist/client/registerDataSource.js +15 -16
  83. package/dist/client/resourceTypes.d.ts +333 -0
  84. package/dist/client/resourceTypes.js +7 -0
  85. package/dist/client/schemaConfig.d.ts +44 -0
  86. package/dist/client/schemaConfig.js +176 -0
  87. package/dist/client/sessionMint.d.ts +17 -13
  88. package/dist/client/sessionMint.js +26 -31
  89. package/dist/client/validateAbloOptions.d.ts +12 -14
  90. package/dist/client/validateAbloOptions.js +9 -10
  91. package/dist/client/writeOptionsSchema.d.ts +18 -16
  92. package/dist/client/writeOptionsSchema.js +23 -20
  93. package/dist/client/wsMutationExecutor.d.ts +28 -0
  94. package/dist/client/wsMutationExecutor.js +71 -0
  95. package/dist/context.d.ts +6 -4
  96. package/dist/context.js +6 -7
  97. package/dist/coordination/index.d.ts +13 -4
  98. package/dist/coordination/index.js +29 -4
  99. package/dist/coordination/schema.d.ts +176 -128
  100. package/dist/coordination/schema.js +197 -133
  101. package/dist/coordination/trace.d.ts +9 -11
  102. package/dist/coordination/trace.js +13 -15
  103. package/dist/core/DatabaseManager.d.ts +5 -8
  104. package/dist/core/DatabaseManager.js +38 -40
  105. package/dist/core/QueryProcessor.d.ts +7 -9
  106. package/dist/core/QueryProcessor.js +27 -34
  107. package/dist/core/QueryView.d.ts +17 -5
  108. package/dist/core/QueryView.js +6 -7
  109. package/dist/core/StoreManager.d.ts +14 -16
  110. package/dist/core/StoreManager.js +26 -25
  111. package/dist/core/ViewRegistry.d.ts +5 -5
  112. package/dist/core/ViewRegistry.js +4 -4
  113. package/dist/core/index.d.ts +18 -13
  114. package/dist/core/index.js +32 -26
  115. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  116. package/dist/core/openIDBWithTimeout.js +57 -54
  117. package/dist/core/queryUtils.d.ts +45 -0
  118. package/dist/core/queryUtils.js +69 -0
  119. package/dist/core/storeContract.d.ts +145 -0
  120. package/dist/core/storeContract.js +12 -0
  121. package/dist/environment.d.ts +28 -0
  122. package/dist/environment.js +21 -0
  123. package/dist/errorCodes.d.ts +118 -101
  124. package/dist/errorCodes.js +277 -260
  125. package/dist/errors.d.ts +170 -165
  126. package/dist/errors.js +161 -151
  127. package/dist/index.d.ts +30 -27
  128. package/dist/index.js +90 -82
  129. package/dist/interfaces/index.d.ts +108 -133
  130. package/dist/interfaces/index.js +5 -4
  131. package/dist/keys/index.d.ts +27 -29
  132. package/dist/keys/index.js +59 -49
  133. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  134. package/dist/mutators/RecordingTransaction.js +31 -37
  135. package/dist/mutators/Transaction.d.ts +18 -26
  136. package/dist/mutators/Transaction.js +14 -20
  137. package/dist/mutators/UndoManager.d.ts +122 -131
  138. package/dist/mutators/UndoManager.js +149 -155
  139. package/dist/mutators/defineMutators.d.ts +24 -37
  140. package/dist/mutators/defineMutators.js +14 -20
  141. package/dist/mutators/inverseOp.d.ts +12 -15
  142. package/dist/mutators/inverseOp.js +12 -15
  143. package/dist/mutators/mutateActions.d.ts +10 -9
  144. package/dist/mutators/mutateActions.js +1 -1
  145. package/dist/mutators/readerActions.d.ts +9 -8
  146. package/dist/mutators/readerActions.js +2 -2
  147. package/dist/mutators/undoApply.d.ts +31 -27
  148. package/dist/mutators/undoApply.js +26 -24
  149. package/dist/policy/index.d.ts +5 -3
  150. package/dist/policy/index.js +5 -3
  151. package/dist/policy/types.d.ts +105 -101
  152. package/dist/policy/types.js +67 -66
  153. package/dist/query/client.d.ts +32 -16
  154. package/dist/query/client.js +103 -72
  155. package/dist/query/types.d.ts +37 -60
  156. package/dist/query/types.js +13 -33
  157. package/dist/react/AbloProvider.d.ts +7 -11
  158. package/dist/react/AbloProvider.js +24 -17
  159. package/dist/react/context.d.ts +27 -146
  160. package/dist/react/context.js +9 -10
  161. package/dist/react/index.d.ts +41 -42
  162. package/dist/react/index.js +37 -38
  163. package/dist/react/internalContext.d.ts +17 -19
  164. package/dist/react/useAblo.d.ts +23 -22
  165. package/dist/react/useAblo.js +17 -15
  166. package/dist/react/useCurrentUserId.d.ts +8 -7
  167. package/dist/react/useCurrentUserId.js +8 -7
  168. package/dist/react/useErrorListener.d.ts +7 -7
  169. package/dist/react/useErrorListener.js +11 -12
  170. package/dist/react/useMutationFailureListener.d.ts +8 -8
  171. package/dist/react/useMutationFailureListener.js +9 -9
  172. package/dist/react/useMutators.d.ts +11 -11
  173. package/dist/react/useMutators.js +10 -4
  174. package/dist/react/useReactive.js +2 -3
  175. package/dist/react/useSyncStatus.d.ts +4 -6
  176. package/dist/react/useUndoScope.d.ts +7 -9
  177. package/dist/react/useUndoScope.js +3 -3
  178. package/dist/schema/coordination.d.ts +21 -25
  179. package/dist/schema/coordination.js +21 -25
  180. package/dist/schema/ddl.d.ts +43 -39
  181. package/dist/schema/ddl.js +75 -68
  182. package/dist/schema/ddlLock.d.ts +35 -0
  183. package/dist/schema/ddlLock.js +46 -0
  184. package/dist/schema/diff.d.ts +99 -61
  185. package/dist/schema/diff.js +43 -34
  186. package/dist/schema/field.d.ts +37 -42
  187. package/dist/schema/field.js +36 -49
  188. package/dist/schema/generate.d.ts +12 -12
  189. package/dist/schema/generate.js +12 -12
  190. package/dist/schema/index.d.ts +5 -4
  191. package/dist/schema/index.js +29 -21
  192. package/dist/schema/model.d.ts +121 -146
  193. package/dist/schema/model.js +24 -35
  194. package/dist/schema/openapi.d.ts +10 -9
  195. package/dist/schema/openapi.js +7 -1
  196. package/dist/schema/queries.d.ts +30 -32
  197. package/dist/schema/queries.js +24 -25
  198. package/dist/schema/relation.d.ts +89 -99
  199. package/dist/schema/relation.js +13 -13
  200. package/dist/schema/residency.d.ts +38 -0
  201. package/dist/schema/residency.js +30 -0
  202. package/dist/schema/roles.d.ts +45 -27
  203. package/dist/schema/roles.js +52 -21
  204. package/dist/schema/schema.d.ts +36 -45
  205. package/dist/schema/schema.js +42 -39
  206. package/dist/schema/select.d.ts +13 -13
  207. package/dist/schema/select.js +13 -13
  208. package/dist/schema/serialize.d.ts +36 -39
  209. package/dist/schema/serialize.js +27 -31
  210. package/dist/schema/sugar.d.ts +17 -32
  211. package/dist/schema/sugar.js +14 -29
  212. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +27 -50
  213. package/dist/schema/syncDeltaRow.js +89 -0
  214. package/dist/schema/tenancy.d.ts +44 -46
  215. package/dist/schema/tenancy.js +46 -48
  216. package/dist/server/adapter.d.ts +58 -58
  217. package/dist/server/adapter.js +13 -14
  218. package/dist/server/commit.d.ts +60 -64
  219. package/dist/server/index.d.ts +9 -10
  220. package/dist/server/index.js +1 -1
  221. package/dist/server/readConfig.d.ts +70 -0
  222. package/dist/server/readConfig.js +8 -0
  223. package/dist/server/storageMode.d.ts +23 -0
  224. package/dist/server/storageMode.js +17 -0
  225. package/dist/source/adapter.d.ts +31 -26
  226. package/dist/source/adapter.js +10 -10
  227. package/dist/source/adapters/drizzle.d.ts +28 -23
  228. package/dist/source/adapters/drizzle.js +34 -28
  229. package/dist/source/adapters/kysely.d.ts +27 -25
  230. package/dist/source/adapters/kysely.js +28 -26
  231. package/dist/source/adapters/memory.d.ts +8 -7
  232. package/dist/source/adapters/memory.js +10 -9
  233. package/dist/source/adapters/prisma.d.ts +13 -12
  234. package/dist/source/adapters/prisma.js +27 -29
  235. package/dist/source/conformance.d.ts +18 -11
  236. package/dist/source/conformance.js +27 -19
  237. package/dist/source/connector.d.ts +31 -32
  238. package/dist/source/connector.js +30 -28
  239. package/dist/source/connectorProtocol.d.ts +160 -0
  240. package/dist/source/connectorProtocol.js +162 -0
  241. package/dist/source/contract.d.ts +26 -27
  242. package/dist/source/contract.js +28 -29
  243. package/dist/source/factory.d.ts +94 -0
  244. package/dist/source/factory.js +268 -0
  245. package/dist/source/index.d.ts +10 -462
  246. package/dist/source/index.js +17 -421
  247. package/dist/source/migrations.d.ts +9 -9
  248. package/dist/source/migrations.js +9 -9
  249. package/dist/source/next.d.ts +10 -11
  250. package/dist/source/next.js +7 -8
  251. package/dist/source/pushQueue.d.ts +70 -48
  252. package/dist/source/pushQueue.js +36 -29
  253. package/dist/source/signing.d.ts +88 -0
  254. package/dist/source/signing.js +159 -0
  255. package/dist/source/types.d.ts +351 -0
  256. package/dist/source/types.js +43 -0
  257. package/dist/stores/ObjectStore.d.ts +11 -12
  258. package/dist/stores/ObjectStore.js +34 -35
  259. package/dist/stores/ObjectStoreContract.d.ts +12 -15
  260. package/dist/stores/SyncActionStore.d.ts +8 -12
  261. package/dist/stores/SyncActionStore.js +77 -46
  262. package/dist/surface.d.ts +28 -21
  263. package/dist/surface.js +28 -20
  264. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +37 -45
  265. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +101 -80
  266. package/dist/sync/ConnectionManager.d.ts +47 -50
  267. package/dist/sync/ConnectionManager.js +74 -70
  268. package/dist/sync/NetworkProbe.d.ts +27 -31
  269. package/dist/sync/NetworkProbe.js +67 -72
  270. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +49 -36
  271. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +79 -54
  272. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +45 -59
  273. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +44 -52
  274. package/dist/sync/SyncWebSocket.d.ts +175 -250
  275. package/dist/sync/SyncWebSocket.js +431 -769
  276. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  277. package/dist/sync/awaitClaimGrant.js +38 -30
  278. package/dist/sync/bootstrapApply.d.ts +70 -0
  279. package/dist/sync/bootstrapApply.js +73 -0
  280. package/dist/sync/commitFrames.d.ts +44 -0
  281. package/dist/sync/commitFrames.js +94 -0
  282. package/dist/sync/createClaimStream.d.ts +23 -22
  283. package/dist/sync/createClaimStream.js +108 -25
  284. package/dist/sync/createPresenceStream.d.ts +19 -18
  285. package/dist/sync/createPresenceStream.js +25 -26
  286. package/dist/sync/createSnapshot.d.ts +13 -17
  287. package/dist/sync/createSnapshot.js +20 -26
  288. package/dist/sync/credentialLifecycle.d.ts +175 -0
  289. package/dist/sync/credentialLifecycle.js +322 -0
  290. package/dist/sync/deltaPipeline.d.ts +113 -0
  291. package/dist/sync/deltaPipeline.js +261 -0
  292. package/dist/sync/groupChange.d.ts +113 -0
  293. package/dist/sync/groupChange.js +242 -0
  294. package/dist/sync/heartbeat.d.ts +63 -0
  295. package/dist/sync/heartbeat.js +91 -0
  296. package/dist/sync/participants.d.ts +27 -27
  297. package/dist/sync/schemas.d.ts +3 -2
  298. package/dist/sync/schemas.js +14 -10
  299. package/dist/sync/syncCursor.d.ts +40 -0
  300. package/dist/sync/syncCursor.js +55 -0
  301. package/dist/sync/syncPlan.d.ts +54 -0
  302. package/dist/sync/syncPlan.js +50 -0
  303. package/dist/sync/syncPosition.d.ts +54 -49
  304. package/dist/sync/syncPosition.js +57 -52
  305. package/dist/sync/wsFrameHandlers.d.ts +116 -0
  306. package/dist/sync/wsFrameHandlers.js +374 -0
  307. package/dist/testing/fixtures/bootstrap.d.ts +21 -17
  308. package/dist/testing/fixtures/bootstrap.js +12 -6
  309. package/dist/testing/fixtures/deltas.d.ts +31 -34
  310. package/dist/testing/fixtures/deltas.js +30 -33
  311. package/dist/testing/fixtures/models.d.ts +11 -10
  312. package/dist/testing/fixtures/models.js +12 -10
  313. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  314. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  315. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -18
  316. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +14 -11
  317. package/dist/testing/helpers/wait.d.ts +13 -8
  318. package/dist/testing/helpers/wait.js +13 -8
  319. package/dist/testing/index.d.ts +4 -4
  320. package/dist/testing/index.js +3 -3
  321. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  322. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  323. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  324. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  325. package/dist/testing/mocks/MockSyncContext.d.ts +21 -34
  326. package/dist/testing/mocks/MockSyncContext.js +16 -45
  327. package/dist/testing/mocks/MockSyncStore.d.ts +14 -14
  328. package/dist/testing/mocks/MockSyncStore.js +11 -11
  329. package/dist/testing/mocks/MockWebSocket.d.ts +28 -24
  330. package/dist/testing/mocks/MockWebSocket.js +22 -21
  331. package/dist/transactions/TransactionQueue.d.ts +190 -221
  332. package/dist/transactions/TransactionQueue.js +424 -822
  333. package/dist/transactions/TransactionStore.d.ts +20 -0
  334. package/dist/transactions/TransactionStore.js +53 -0
  335. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  336. package/dist/transactions/UnconfirmedWrites.js +104 -0
  337. package/dist/transactions/coalesceRules.d.ts +58 -0
  338. package/dist/transactions/coalesceRules.js +140 -0
  339. package/dist/transactions/commitPayload.d.ts +130 -0
  340. package/dist/transactions/commitPayload.js +143 -0
  341. package/dist/transactions/deltaConfirmation.d.ts +58 -0
  342. package/dist/transactions/deltaConfirmation.js +215 -0
  343. package/dist/transactions/optimisticApply.d.ts +49 -0
  344. package/dist/transactions/optimisticApply.js +65 -0
  345. package/dist/transactions/replayValidation.d.ts +99 -0
  346. package/dist/transactions/replayValidation.js +111 -0
  347. package/dist/types/global.d.ts +46 -41
  348. package/dist/types/global.js +20 -19
  349. package/dist/types/index.d.ts +74 -80
  350. package/dist/types/index.js +22 -27
  351. package/dist/types/modelData.d.ts +10 -0
  352. package/dist/types/modelData.js +9 -0
  353. package/dist/types/participant.d.ts +20 -0
  354. package/dist/types/participant.js +10 -0
  355. package/dist/types/streams.d.ts +216 -209
  356. package/dist/types/streams.js +7 -7
  357. package/dist/utils/asyncIterator.d.ts +25 -32
  358. package/dist/utils/asyncIterator.js +25 -32
  359. package/dist/utils/duration.d.ts +12 -15
  360. package/dist/utils/duration.js +12 -15
  361. package/dist/utils/mobxSetup.d.ts +53 -0
  362. package/dist/utils/{mobx-setup.js → mobxSetup.js} +44 -100
  363. package/dist/webhooks/events.d.ts +21 -16
  364. package/dist/webhooks/events.js +10 -8
  365. package/dist/webhooks/index.d.ts +5 -7
  366. package/dist/webhooks/index.js +5 -7
  367. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  368. package/dist/wire/delta.js +114 -0
  369. package/dist/wire/errorEnvelope.d.ts +35 -27
  370. package/dist/wire/errorEnvelope.js +38 -32
  371. package/dist/wire/frames.d.ts +150 -67
  372. package/dist/wire/frames.js +48 -1
  373. package/dist/wire/index.d.ts +18 -13
  374. package/dist/wire/index.js +36 -13
  375. package/dist/wire/listEnvelope.d.ts +16 -23
  376. package/dist/wire/listEnvelope.js +7 -6
  377. package/dist/wire/protocol.d.ts +38 -0
  378. package/dist/wire/protocol.js +38 -0
  379. package/dist/wire/protocolVersion.d.ts +60 -0
  380. package/dist/wire/protocolVersion.js +67 -0
  381. package/docs/api-keys.md +4 -3
  382. package/docs/coordination.md +59 -0
  383. package/docs/examples/existing-python-backend.md +3 -3
  384. package/docs/identity.md +4 -4
  385. package/docs/integration-guide.md +1 -1
  386. package/docs/react.md +1 -1
  387. package/docs/sessions.md +5 -7
  388. package/package.json +24 -21
  389. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  390. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  391. package/dist/client/index.d.ts +0 -36
  392. package/dist/client/index.js +0 -33
  393. package/dist/config/index.d.ts +0 -10
  394. package/dist/config/index.js +0 -12
  395. package/dist/core/query-utils.d.ts +0 -34
  396. package/dist/core/query-utils.js +0 -59
  397. package/dist/interfaces/headless.d.ts +0 -95
  398. package/dist/interfaces/headless.js +0 -41
  399. package/dist/query/index.d.ts +0 -6
  400. package/dist/query/index.js +0 -5
  401. package/dist/realtime/index.d.ts +0 -10
  402. package/dist/realtime/index.js +0 -9
  403. package/dist/schema/plane.d.ts +0 -23
  404. package/dist/schema/plane.js +0 -19
  405. package/dist/schema/sync-delta-row.js +0 -103
  406. package/dist/schema/sync-delta-wire.js +0 -102
  407. package/dist/server/next.d.ts +0 -51
  408. package/dist/server/next.js +0 -47
  409. package/dist/server/read-config.d.ts +0 -67
  410. package/dist/server/read-config.js +0 -8
  411. package/dist/server/storage-mode.d.ts +0 -1
  412. package/dist/server/storage-mode.js +0 -18
  413. package/dist/source/connector-protocol.d.ts +0 -159
  414. package/dist/source/connector-protocol.js +0 -161
  415. package/dist/sync/OfflineFlush.d.ts +0 -9
  416. package/dist/sync/OfflineFlush.js +0 -22
  417. package/dist/sync/OfflineTransactionStore.d.ts +0 -37
  418. package/dist/sync/OfflineTransactionStore.js +0 -263
  419. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  420. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  421. package/dist/transactions/index.d.ts +0 -16
  422. package/dist/transactions/index.js +0 -7
  423. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  424. package/dist/transactions/mutation-error-handler.js +0 -39
  425. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -1,9 +1,10 @@
1
1
  /**
2
- * Sync Engine SDK Dependency Injection Interfaces
2
+ * The interfaces you implement to plug the SDK into your own environment.
3
3
  *
4
- * These interfaces decouple the SDK from any specific app framework.
5
- * Consumers implement them to wire in their own logging, observability,
6
- * GraphQL client, session handling, and analytics.
4
+ * The SDK depends on these contracts rather than any specific framework, so you
5
+ * provide the concrete implementations logging, observability, analytics,
6
+ * session-error detection, online-status checks, and the transport that carries
7
+ * mutations to your backend. The SDK ships sensible no-op defaults where it can.
7
8
  */
8
9
  import type { StaleNotification, ReadDependency, ParticipantKind } from '../coordination/schema.js';
9
10
  export interface SyncLogger {
@@ -68,14 +69,12 @@ export interface CommitZeroSyncIdDetails {
68
69
  operationCount: number;
69
70
  operations: string[];
70
71
  }
71
- export interface OfflineFlushFailureDetails {
72
- error: string;
73
- }
74
72
  /**
75
- * One thing that happened to a claim. `phase` is the past-tense state it just
76
- * entered the trail you follow to see WHY two participants collided on a row:
77
- * who asked, who waited behind whom, who was turned away, whose lease lapsed.
78
- * Each phase mirrors a `claim_*` wire frame.
73
+ * A single event in the life of a claim. `phase` is the state the claim has just
74
+ * entered, and the sequence of phases is the trail you follow to see how two
75
+ * participants collided on a row — who asked for it, who waited behind whom, who
76
+ * was turned away, and whose lease lapsed. Each phase corresponds to a `claim_*`
77
+ * frame on the wire.
79
78
  */
80
79
  export interface ClaimEvent {
81
80
  phase: 'acquired' | 'queued' | 'granted' | 'lost' | 'rejected' | 'expired';
@@ -94,29 +93,28 @@ export interface ClaimEvent {
94
93
  reason?: string;
95
94
  }
96
95
  /**
97
- * A committed `onStale: 'notify'` write whose premise moved the in-flight twin
98
- * of a claim collision. The commit SUCCEEDED, but the guarded ops weren't written
99
- * because the row changed since the caller's `readAt`; the engine handed back the
100
- * live value so the actor can self-heal. Records WHICH rows and fields collided.
96
+ * A committed `onStale: 'notify'` write whose premise had moved. The commit
97
+ * succeeded, but the guarded operations were not written because the row had
98
+ * changed since the caller's `readAt`, and the engine returned the current value
99
+ * so the caller can reconcile. Records which rows and fields collided.
101
100
  */
102
101
  export interface ConflictEvent {
103
102
  /** The client idempotency key whose write was notified. */
104
103
  clientTxId: string;
105
104
  /** The conflicted rows + the fields that collided. */
106
- rows: ReadonlyArray<{
105
+ rows: readonly {
107
106
  model: string;
108
107
  id: string;
109
108
  fields: readonly string[];
110
109
  writtenBy?: ParticipantKind;
111
- }>;
110
+ }[];
112
111
  }
113
112
  /** Span attributes for performance monitoring */
114
- export interface SpanAttributes {
115
- [key: string]: string | number | boolean | undefined;
116
- }
113
+ export type SpanAttributes = Record<string, string | number | boolean | undefined>;
117
114
  /**
118
- * Observability provider replaces direct Sentry dependency.
119
- * SDK ships a no-op default; consumers provide their own (e.g., Sentry, Datadog, OpenTelemetry).
115
+ * The observability hooks the SDK calls to report its own lifecycle. The SDK
116
+ * ships a no-op default; provide your own to forward these events to a monitoring
117
+ * tool such as Sentry, Datadog, or OpenTelemetry.
120
118
  */
121
119
  export interface SyncObservabilityProvider {
122
120
  /** Set user/org context for error grouping */
@@ -137,8 +135,6 @@ export interface SyncObservabilityProvider {
137
135
  captureDeltaRetryExhausted(details: DeltaRetryExhaustedDetails): void;
138
136
  /** Capture WebSocket error */
139
137
  captureWebSocketError(details: WebSocketErrorDetails): void;
140
- /** Capture offline flush failure */
141
- captureOfflineFlushFailure(details: OfflineFlushFailureDetails): void;
142
138
  /** Capture self-healing event */
143
139
  captureSelfHealing(details: SelfHealingDetails): void;
144
140
  /** Capture a claim state change (acquired / queued / granted / lost / rejected / expired) */
@@ -185,30 +181,29 @@ export interface ModelDebugLoggerContract {
185
181
  export interface CommitResult {
186
182
  lastSyncId: number;
187
183
  /**
188
- * Stale-context notifications (CoAgent/MTPO notify-instead-of-abort). Present
189
- * only when a write guarded with `onStale: 'notify' collided with a
190
- * concurrent change; the committer self-heals from these rather than
191
- * receiving an `AbloStaleContextError`. See `StaleNotification`.
184
+ * Stale-context notifications. Present only when a write guarded with
185
+ * `onStale: 'notify'` collided with a concurrent change: rather than throwing
186
+ * an `AbloStaleContextError`, the commit succeeds and reports the collision
187
+ * here so the caller can reconcile. See {@link StaleNotification}.
192
188
  */
193
189
  notifications?: StaleNotification[];
194
190
  /**
195
- * Ids of UPDATE/DELETE targets that matched ZERO rows (loud 0-row writes).
196
- * Present (non-empty) only when a write missed.
191
+ * Ids of update or delete targets that matched no rows. Present, and non-empty,
192
+ * only when a write missed the row it addressed.
197
193
  */
198
194
  missingIds?: string[];
199
195
  }
200
196
  /**
201
- * Per-call knobs attached to any mutation. Mirrors Stripe's options
202
- * object the last argument of every `stripe.X.Y(...)` call. Optional
203
- * everywhere; omitted fields fall back to sensible defaults.
197
+ * Per-call options accepted by any mutation, passed as the last argument.
198
+ * Every field is optional; omitted fields fall back to sensible defaults.
204
199
  *
205
- * - `idempotencyKey` — when set, the server caches the response for 24h
206
- * and returns the cached value on retries with the same key.
207
- * When omitted, the SDK auto-generates a UUIDv4 per mutation so every
208
- * call is retry-safe by default. Opt out with `{ idempotencyKey: null }`
209
- * if you genuinely want retry-unsafe writes (rare).
210
- * - `label` — human-readable audit tag. Flows to `mutation_log.label`
211
- * server-side for operator debugging ("nightly cleanup", "user click").
200
+ * - `idempotencyKey` — when set, the server caches the response for 24 hours and
201
+ * returns the cached result on any retry using the same key. When omitted, the
202
+ * SDK generates a fresh UUID per mutation, so every call is retry-safe by
203
+ * default. Pass `{ idempotencyKey: null }` for the rare case where you want a
204
+ * write that is not retry-safe.
205
+ * - `label` — a human-readable tag recorded with the mutation for debugging, such
206
+ * as "nightly cleanup" or "user click".
212
207
  */
213
208
  export interface MutationOptions {
214
209
  idempotencyKey?: string | null;
@@ -216,86 +211,76 @@ export interface MutationOptions {
216
211
  wait?: 'queued' | 'confirmed';
217
212
  readAt?: number | null;
218
213
  onStale?: 'reject' | 'overwrite' | 'notify' | null;
219
- /** Claim-pin attribution: the id (or `{ id }`) of the claim this write
220
- * belongs to. Distinct from the `claim` HANDLE on the model write params
221
- * this is the low-level reference the commit carries to bypass the holder's
222
- * own pin. (Was `intent` before the claim-vocabulary unification.) */
214
+ /** The id (or `{ id }`) of the claim this write belongs to. This is the
215
+ * low-level reference the commit carries so the write is attributed to a claim
216
+ * and can pass the holder's own lock. It is distinct from the `claim` handle on
217
+ * the model write parameters, which is the higher-level object you usually pass. */
223
218
  claimRef?: string | {
224
219
  readonly id: string;
225
220
  } | null;
226
221
  /**
227
- * Dormant agent-task lineage field, forwarded as the wire-level
228
- * `causedByTaskId`. Turns/tasks were removed from the SDK; nothing
229
- * populates this anymore (write attribution rides on the claim
230
- * id). Kept optional for wire-compat; always `null` from the client.
222
+ * Reserved lineage field, forwarded on the wire as `causedByTaskId`. The client
223
+ * always sends `null`; write attribution now travels on the claim id instead.
231
224
  */
232
225
  causedByTaskId?: string | null;
233
226
  /**
234
- * Batch-level read dependencies (the STORM "did anything I looked at change?"
235
- * layer). Each entry is a row (`{model,id,readAt,fields?}`) or a sync group
236
- * (`{group,readAt}`) this write was premised on; the server validates none
237
- * moved since `readAt` and fires the entry's `onStale` over the batch.
238
- * Distinct from per-op `readAt` (which guards only the row being written).
227
+ * Batch-level read dependencies the answer to "did anything I looked at
228
+ * change?" Each entry is a row (`{ model, id, readAt, fields? }`) or a sync
229
+ * group (`{ group, readAt }`) that this write was premised on. The server
230
+ * checks that none of them moved since their `readAt` and applies the entry's
231
+ * `onStale` behavior to the whole batch. This is distinct from the per-operation
232
+ * `readAt`, which guards only the row being written.
239
233
  */
240
234
  reads?: ReadDependency[] | null;
241
235
  }
242
236
  /**
243
- * The `MutationOptions` subset carried per-write through the offline
244
- * transaction lane (SyncClient TransactionQueue wire operation).
245
- * ONE shared type so the proxy's public params, the queue, and the wire
246
- * can never narrow each other silently again `wait` and `claim` are
247
- * deliberately absent because they resolve client-side before staging
248
- * (`wait` at the proxy's confirmation await, `claim` server-side via
249
- * the active lease on the entity).
237
+ * The subset of {@link MutationOptions} that travels with each write as it is
238
+ * queued offline and sent on the wire. A single shared type keeps the public
239
+ * parameters, the offline queue, and the wire format from diverging. `wait` and
240
+ * `claim` are deliberately absent: both are resolved on the client before a write
241
+ * is staged, so neither reaches this layer.
250
242
  */
251
243
  export type WriteOptions = Pick<MutationOptions, 'readAt' | 'onStale' | 'idempotencyKey' | 'label'>;
252
- /** A single mutation operation in a batch. `options` rides along so the
253
- * server can cache+replay via `mutation_log`. */
244
+ /** A single mutation within a batch. Its `options` travel with it so the server
245
+ * can cache and replay the operation for idempotent retries. */
254
246
  export interface MutationOperation {
255
247
  type: string;
256
248
  model: string;
257
249
  id: string;
258
250
  input?: Record<string, unknown>;
259
251
  /**
260
- * Client-side transaction id for THIS operation. The server stamps
261
- * it onto the resulting `sync_deltas.transaction_id` so the
262
- * confirming delta can be recognized as an echo of the local
263
- * optimistic mutation (echo detection at the receive layer drains
264
- * the matching id via `OptimisticEchoTracker` and skips the pool
265
- * mutation — see `SyncClient.applyDeltaBatchToPool`).
252
+ * A client-side id for this single operation. The server stamps it onto the
253
+ * resulting `sync_deltas.transaction_id`, so when the confirming delta arrives
254
+ * back over the sync stream the client can recognize it as an echo of its own
255
+ * optimistic write and skip re-applying it locally.
266
256
  *
267
- * Distinct from the batch-level `client_tx_id` used by
268
- * `mutation_log` for idempotency. The mutation_log key dedupes a
269
- * RETRIED batch (request-level cache); this transactionId
270
- * identifies a specific MUTATION within a batch (per-row identity
271
- * for echo matching). Both can coexist on the wire.
257
+ * This is distinct from the batch-level `client_tx_id` that idempotency uses:
258
+ * that key de-duplicates a retried batch (a request-level cache), whereas this
259
+ * id identifies one row within a batch (for echo matching). Both can appear on
260
+ * the wire at once.
272
261
  */
273
262
  transactionId?: string;
274
263
  readAt?: number | null;
275
264
  onStale?: 'reject' | 'overwrite' | 'notify' | null;
276
265
  /**
277
- * Per-op idempotency + audit metadata. `idempotencyKey` doubles as
278
- * the `mutation_log.client_tx_id` cache key; `label` is persisted to
279
- * `mutation_log.label` for debugging. These are the only `MutationOptions`
280
- * fields carried over the wire.
266
+ * Per-operation idempotency and audit metadata. `idempotencyKey` is also the
267
+ * cache key the server uses to de-duplicate retries; `label` is stored for
268
+ * debugging. These are the only {@link MutationOptions} fields sent on the wire.
281
269
  */
282
270
  options?: Pick<MutationOptions, 'idempotencyKey' | 'label'>;
283
271
  }
284
272
  /**
285
- * Executes mutations against the backend.
286
- * The SDK calls this interface; consumers implement it with their
287
- * specific GraphQL client, REST API, or other transport.
273
+ * The transport that carries mutations to your backend. The SDK calls the
274
+ * methods on this interface; you implement them over whatever transport you use —
275
+ * an HTTP API, a WebSocket, or something else.
288
276
  */
289
277
  export interface MutationExecutor {
290
278
  /**
291
- * Commit a batch of mutations atomically, returning the sync ack.
292
- * `options` apply to the whole batch (timeout, retries) — per-op
293
- * idempotencyKey/label live on each `MutationOperation`.
294
- *
295
- * Name matches the wire frame (`{ type: 'commit' }`) and the
296
- * universal mental model for atomic writes (DB transactions, git,
297
- * Firestore). Replaces the older `batchAck` name from the retired
298
- * GraphQL path.
279
+ * Commits a batch of mutations atomically and returns the sync
280
+ * acknowledgement. The `options` argument applies to the whole batch, while
281
+ * per-operation `idempotencyKey` and `label` live on each
282
+ * {@link MutationOperation}. The method name matches the `{ type: 'commit' }`
283
+ * frame on the wire.
299
284
  */
300
285
  commit(operations: MutationOperation[], options?: MutationOptions): Promise<CommitResult>;
301
286
  /** Execute a create mutation for a specific model */
@@ -313,13 +298,13 @@ export interface MutationExecutor {
313
298
  url: string;
314
299
  }>;
315
300
  /** Batch upload attachments (optional) */
316
- batchUploadAttachments?(items: Array<{
301
+ batchUploadAttachments?(items: {
317
302
  id: string;
318
303
  input: Record<string, unknown>;
319
- }>): Promise<Array<{
304
+ }[]): Promise<{
320
305
  id: string;
321
306
  url: string;
322
- }>>;
307
+ }[]>;
323
308
  /** Delete a subscription entity */
324
309
  deleteSubscription?(entityType: string, entityId: string, txId: string): Promise<void>;
325
310
  /** Delete a favorite entity */
@@ -328,70 +313,60 @@ export interface MutationExecutor {
328
313
  onSessionExpired?(callback: () => void): void;
329
314
  }
330
315
  /**
331
- * Dispatches queued offline mutations on reconnect.
332
- * Replaces the massive switch statement in OfflineFlush.ts.
333
- */
334
- export interface MutationDispatcher {
335
- dispatch(operationName: string, variables: Record<string, unknown>): Promise<void>;
336
- }
337
- /**
338
- * Application-specific configuration for the sync engine.
339
- * Replaces the 6 hardcoded config maps that were previously
340
- * embedded in TransactionQueue, Database, and Model.
316
+ * Application-specific configuration for the sync engine, describing how your
317
+ * models relate so the engine can order and merge writes correctly.
341
318
  */
342
319
  export interface SyncEngineConfig {
343
320
  /**
344
- * FK-ordered create priority, keyed by the typename each model reports
345
- * via {@link Model.getModelName}. `TransactionQueue` consults this at
346
- * enqueue time and when sorting groups inside a batch lower numbers
347
- * execute first, so parents precede children.
348
- *
349
- * `createSyncEngine` populates this automatically by topologically
350
- * walking `belongsTo` relations: a model with no FK parents gets 10, a
351
- * child gets 20, a grandchild 30, and so on (step = 10 to leave room
352
- * for consumer overrides). Apps rarely need to touch this — override
353
- * through `configOverrides.modelCreatePriority` only when the schema's
354
- * declared relations don't reflect an operational constraint (e.g. a
355
- * polymorphic FK the SDK can't see).
321
+ * The order in which to create models, so a row is never inserted before the
322
+ * parent row its foreign key points at. Keyed by each model's type name, with
323
+ * lower numbers created first, so parents precede children. The engine fills
324
+ * this in automatically by walking the schema's `belongsTo` relations — a model
325
+ * with no parents gets 10, its children 20, their children 30, and so on,
326
+ * stepping by 10 to leave room for overrides. You rarely set this by hand;
327
+ * override it only when a relation the schema can't see (such as a polymorphic
328
+ * foreign key) imposes an ordering the engine wouldn't otherwise know about.
356
329
  */
357
330
  modelCreatePriority: ReadonlyMap<string, number>;
358
331
  /**
359
- * Priority assigned to CREATE ops for models missing from
360
- * {@link modelCreatePriority}. Falls between the typical top and bottom
361
- * of the FK chain, so an unregistered model ends up later than declared
362
- * parents but earlier than declared grandchildren — a safe middle.
332
+ * The create priority for a model not listed in {@link modelCreatePriority}.
333
+ * It sits in the middle of the range, so an unlisted model is created after
334
+ * declared parents but before declared grandchildren a safe default.
363
335
  */
364
336
  defaultCreatePriority: number;
365
337
  /**
366
- * Priority for UPDATE/DELETE/ARCHIVE/UNARCHIVE ops, which don't need FK
367
- * ordering (the row already exists by the time they run). Must be higher
368
- * than any realistic CREATE priority so creates drain first.
338
+ * The priority for update, delete, archive, and unarchive operations. These
339
+ * need no ordering among themselves — the row already exists when they run
340
+ * so this is set higher than any create priority to ensure creates go first.
369
341
  */
370
342
  defaultNonCreatePriority: number;
371
343
  /**
372
- * Essential fields preserved during partial UPDATE merges in IndexedDB.
373
- * Prevents losing critical fields when a delta only contains changed fields.
374
- * e.g., { Task: ['title', 'projectId'], Slide: ['deckId', 'order'] }
344
+ * Fields to preserve when merging a partial update into the local store. A
345
+ * change usually carries only the fields that changed; listing a model's
346
+ * essential fields here keeps them from being dropped during that merge.
347
+ * For example: `{ Task: ['title', 'projectId'], Slide: ['deckId', 'order'] }`.
375
348
  */
376
349
  essentialFields: Readonly<Record<string, readonly string[]>>;
377
350
  /**
378
- * Fallback class name model name mapping for Model.getModelName().
379
- * Used when the ModelRegistry lookup fails (e.g., minified class names).
380
- * e.g., { TaskModel: 'Task', ProjectModel: 'Project' }
351
+ * A fallback map from class name to model name, used to resolve a model's name
352
+ * when the usual lookup fails for instance, when a bundler has minified the
353
+ * class names. For example: `{ TaskModel: 'Task', ProjectModel: 'Project' }`.
381
354
  */
382
355
  classNameFallbackMap: Readonly<Record<string, string>>;
383
356
  /**
384
- * Content hash of the schema THIS client was built against (the same
385
- * `schemaHash()` the CLI push + server compute). Used purely to detect
386
- * schema drift: when the server reports a different active hash on bootstrap,
387
- * the SDK warns the developer to run `ablo push` otherwise drift only
388
- * surfaces later as an opaque DB constraint error. Advisory, not enforced.
357
+ * The content hash of the schema this client was built against the same hash
358
+ * the `ablo push` command and the server compute. It exists only to detect
359
+ * schema drift: if the server reports a different active hash when the client
360
+ * connects, the SDK warns you to run `ablo push`, so drift surfaces as a clear
361
+ * message rather than a confusing database error later. It is advisory, not
362
+ * enforced.
389
363
  */
390
364
  expectedSchemaHash?: string;
391
365
  }
392
366
  /**
393
- * Allows consumers to extend the WebSocket event map with
394
- * application-specific collaboration events (cursors, selections, etc.).
367
+ * Extends the WebSocket event map with your own collaboration events, such as
368
+ * cursor positions or selections, beyond the core delta, presence, and
369
+ * bootstrap events.
395
370
  */
396
371
  export interface WebSocketEventConfig {
397
372
  /** Additional event type names beyond the core delta/presence/bootstrap events */
@@ -1,8 +1,9 @@
1
1
  /**
2
- * Sync Engine SDK Dependency Injection Interfaces
2
+ * The interfaces you implement to plug the SDK into your own environment.
3
3
  *
4
- * These interfaces decouple the SDK from any specific app framework.
5
- * Consumers implement them to wire in their own logging, observability,
6
- * GraphQL client, session handling, and analytics.
4
+ * The SDK depends on these contracts rather than any specific framework, so you
5
+ * provide the concrete implementations logging, observability, analytics,
6
+ * session-error detection, online-status checks, and the transport that carries
7
+ * mutations to your backend. The SDK ships sensible no-op defaults where it can.
7
8
  */
8
9
  export {};
@@ -1,21 +1,18 @@
1
1
  /**
2
- * Canonical Ablo API-key format the single source of truth for how keys
3
- * are minted, hashed, and validated. Both the sync-server (`apiKeyStore`)
4
- * and the web control-plane (`generate-key.ts`) consume THIS module, so the
5
- * format can no longer drift between the two mint sites (it used to live as
6
- * a hand-copied twin kept in sync by a comment).
2
+ * The Ablo API-key format: how keys are minted, hashed, and validated, in one
3
+ * place so every component that issues or checks a key agrees on the format.
7
4
  *
8
- * Node-only uses `node:crypto`. Exposed via the `@abloatai/ablo/keys`
9
- * subpath and NEVER re-exported from the browser-facing `.` entry, so the
10
- * client bundle never pulls in `node:crypto`.
5
+ * This module uses `node:crypto` and is therefore Node-only. It is published on
6
+ * the `@abloatai/ablo/keys` subpath and kept off the main browser-facing entry
7
+ * so a browser bundle never pulls in `node:crypto`.
11
8
  *
12
- * Format (GitHub-style): `<sk|rk|ek>_<live|test>_<30 base62 body><6-char
13
- * base62 CRC32 checksum>`. The environment segment is the stable key-prefix
14
- * contract; parsed values are immediately mapped to `production` / `sandbox`.
15
- * The identifiable prefix + CRC32 checksum let
16
- * secret scanners detect leaks and let us reject typo'd/forged keys OFFLINE
17
- * (no DB round-trip). Legacy keys (a ~43-char base64url body, no checksum)
18
- * still validate by hash — they parse here as `checksummed: false`.
9
+ * A key looks like `<sk|rk|ek|pk>_<live|test>_<30 base62 chars><6-char base62
10
+ * CRC32 checksum>`. The middle segment is the stable environment prefix, mapped
11
+ * on parse to `production` or `sandbox`. The recognizable prefix lets secret
12
+ * scanners spot a leaked key, and the trailing checksum lets the format reject a
13
+ * mistyped or forged key locally, without a database round-trip. Older keys
14
+ * (roughly a 43-character base64url body with no checksum) still validate by hash
15
+ * and parse here with `checksummed: false`.
19
16
  */
20
17
  import { z } from 'zod';
21
18
  import { type Environment } from '../environment.js';
@@ -35,10 +32,10 @@ export interface ParsedApiKey {
35
32
  checksummed: boolean;
36
33
  }
37
34
  /**
38
- * Canonical schema for an Ablo API key. `parse`/`safeParse` returns a typed
39
- * {@link ParsedApiKey}; a new checksummed-format key with a BAD checksum is
40
- * rejected (the offline-reject), while a legacy key parses as
41
- * `checksummed: false` and passes (the server still hash-validates it).
35
+ * The Zod schema for an Ablo API key. `parse` and `safeParse` return a typed
36
+ * {@link ParsedApiKey}. A checksummed-format key whose checksum does not match is
37
+ * rejected without any network call; an older key with no checksum parses with
38
+ * `checksummed: false` and is left for the server to validate by hash.
42
39
  */
43
40
  export declare const apiKeySchema: z.ZodPipe<z.ZodString, z.ZodTransform<ParsedApiKey, string>>;
44
41
  /** Parse + fully validate (incl. checksum). Returns null when invalid. */
@@ -57,21 +54,22 @@ export declare function generateApiKey(env?: ApiKeyEnv, kind?: ApiKeyKind): {
57
54
  prefix: string;
58
55
  };
59
56
  /**
60
- * Stable SHA-256 hex of a plaintext key. A fast hash is CORRECT here (not
61
- * bcrypt) API keys are high-entropy random, so there's no dictionary to
62
- * defend against. Used at both write (mint) and lookup.
57
+ * The stable SHA-256 hex digest of a plaintext key, computed both when a key is
58
+ * minted and when one is looked up. A fast hash is the right choice here rather
59
+ * than a password hash like bcrypt: API keys are long random strings, so there is
60
+ * no dictionary of guesses to slow down.
63
61
  */
64
62
  export declare function hashApiKey(plaintext: string): string;
65
63
  /** `whsec_` label prefix per the Standard Webhooks spec (not part of the key material). */
66
64
  export declare const WEBHOOK_SECRET_PREFIX = "whsec_";
67
65
  /**
68
- * Mint a webhook signing secret per the Standard Webhooks spec
69
- * (https://www.standardwebhooks.com): a base64-encoded random key, 24–64 bytes,
70
- * labelled with the `whsec_` prefix. We use 32 bytes (256 bits) comfortably
71
- * inside the range and matching Stripe/Svix. Unlike an API key this is NOT
72
- * hashed at rest: signing (`signAbloSourceRequest`) needs the live key, so it is
73
- * stored by reference via the secret store, returned to the customer once at
74
- * creation, and never echoed again (Stripe's policy).
66
+ * Mints a webhook signing secret following the Standard Webhooks specification
67
+ * (https://www.standardwebhooks.com): a base64-encoded random key of 24–64 bytes,
68
+ * labelled with the `whsec_` prefix. This uses 32 bytes (256 bits), comfortably
69
+ * inside that range. Unlike an API key, a signing secret is not hashed at rest,
70
+ * because signing a request with {@link signAbloSourceRequest} needs the live
71
+ * value. It is therefore kept in a secret store, returned to the customer once at
72
+ * creation, and never shown again.
75
73
  */
76
74
  export declare function generateWebhookSecret(): {
77
75
  plaintext: string;