@abloatai/ablo 0.26.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (418) hide show
  1. package/CHANGELOG.md +42 -2
  2. package/README.md +102 -86
  3. package/dist/BaseSyncedStore.d.ts +85 -88
  4. package/dist/BaseSyncedStore.js +134 -151
  5. package/dist/Database.d.ts +68 -69
  6. package/dist/Database.js +316 -135
  7. package/dist/{ObjectPool.d.ts → InstanceCache.d.ts} +10 -13
  8. package/dist/{ObjectPool.js → InstanceCache.js} +85 -83
  9. package/dist/LazyReferenceCollection.d.ts +11 -15
  10. package/dist/LazyReferenceCollection.js +12 -16
  11. package/dist/Model.d.ts +54 -52
  12. package/dist/Model.js +78 -62
  13. package/dist/ModelRegistry.d.ts +21 -19
  14. package/dist/ModelRegistry.js +23 -27
  15. package/dist/NetworkMonitor.d.ts +5 -6
  16. package/dist/NetworkMonitor.js +5 -6
  17. package/dist/SyncClient.d.ts +122 -118
  18. package/dist/SyncClient.js +541 -245
  19. package/dist/adapters/alwaysOnline.d.ts +6 -8
  20. package/dist/adapters/alwaysOnline.js +6 -8
  21. package/dist/adapters/inMemoryStorage.d.ts +10 -9
  22. package/dist/adapters/inMemoryStorage.js +21 -9
  23. package/dist/agent/Agent.d.ts +27 -32
  24. package/dist/agent/Agent.js +18 -19
  25. package/dist/agent/index.d.ts +4 -4
  26. package/dist/agent/index.js +5 -5
  27. package/dist/agent/session.d.ts +47 -44
  28. package/dist/agent/session.js +37 -48
  29. package/dist/agent/types.d.ts +26 -31
  30. package/dist/agent/types.js +6 -7
  31. package/dist/ai-sdk/coordinatedTool.d.ts +108 -0
  32. package/dist/ai-sdk/{coordinated-tool.js → coordinatedTool.js} +44 -38
  33. package/dist/ai-sdk/coordinationContext.d.ts +46 -0
  34. package/dist/ai-sdk/{coordination-context.js → coordinationContext.js} +26 -33
  35. package/dist/ai-sdk/index.d.ts +25 -22
  36. package/dist/ai-sdk/index.js +25 -22
  37. package/dist/ai-sdk/wrap.d.ts +6 -7
  38. package/dist/ai-sdk/wrap.js +1 -1
  39. package/dist/auth/credentialPolicy.d.ts +69 -74
  40. package/dist/auth/credentialPolicy.js +51 -56
  41. package/dist/auth/credentialSource.d.ts +6 -5
  42. package/dist/auth/credentialSource.js +9 -10
  43. package/dist/auth/index.d.ts +59 -58
  44. package/dist/auth/index.js +31 -37
  45. package/dist/auth/schemas.d.ts +5 -4
  46. package/dist/auth/schemas.js +5 -4
  47. package/dist/batching/index.d.ts +19 -21
  48. package/dist/batching/index.js +14 -17
  49. package/dist/cli.cjs +173 -121
  50. package/dist/client/Ablo.d.ts +97 -74
  51. package/dist/client/Ablo.js +129 -163
  52. package/dist/client/ApiClient.d.ts +30 -19
  53. package/dist/client/ApiClient.js +442 -81
  54. package/dist/client/auth.d.ts +47 -47
  55. package/dist/client/auth.js +108 -117
  56. package/dist/client/claimHeartbeatLoop.d.ts +50 -0
  57. package/dist/client/claimHeartbeatLoop.js +88 -0
  58. package/dist/client/consoleLogger.d.ts +5 -6
  59. package/dist/client/consoleLogger.js +5 -6
  60. package/dist/client/createInternalComponents.d.ts +16 -17
  61. package/dist/client/createInternalComponents.js +26 -31
  62. package/dist/client/createModelProxy.d.ts +130 -120
  63. package/dist/client/createModelProxy.js +152 -122
  64. package/dist/client/credentialEndpoint.d.ts +40 -42
  65. package/dist/client/credentialEndpoint.js +35 -36
  66. package/dist/client/functionalUpdate.d.ts +29 -27
  67. package/dist/client/functionalUpdate.js +21 -21
  68. package/dist/client/hostedEndpoints.d.ts +9 -12
  69. package/dist/client/hostedEndpoints.js +9 -12
  70. package/dist/client/httpClient.d.ts +59 -53
  71. package/dist/client/httpClient.js +29 -31
  72. package/dist/client/identity.d.ts +15 -20
  73. package/dist/client/identity.js +47 -58
  74. package/dist/client/modelRegistration.d.ts +5 -9
  75. package/dist/client/modelRegistration.js +78 -87
  76. package/dist/client/options.d.ts +157 -157
  77. package/dist/client/options.js +3 -7
  78. package/dist/client/registerDataSource.d.ts +9 -9
  79. package/dist/client/registerDataSource.js +15 -16
  80. package/dist/client/resourceTypes.d.ts +64 -75
  81. package/dist/client/resourceTypes.js +4 -10
  82. package/dist/client/schemaConfig.d.ts +31 -43
  83. package/dist/client/schemaConfig.js +38 -50
  84. package/dist/client/sessionMint.d.ts +16 -12
  85. package/dist/client/sessionMint.js +26 -31
  86. package/dist/client/validateAbloOptions.d.ts +12 -14
  87. package/dist/client/validateAbloOptions.js +8 -9
  88. package/dist/client/writeOptionsSchema.d.ts +18 -16
  89. package/dist/client/writeOptionsSchema.js +23 -20
  90. package/dist/client/wsMutationExecutor.d.ts +16 -20
  91. package/dist/client/wsMutationExecutor.js +18 -23
  92. package/dist/commit/contract.d.ts +493 -0
  93. package/dist/commit/contract.js +187 -0
  94. package/dist/commit/index.d.ts +6 -0
  95. package/dist/commit/index.js +5 -0
  96. package/dist/context.d.ts +6 -4
  97. package/dist/context.js +6 -4
  98. package/dist/coordination/index.d.ts +10 -8
  99. package/dist/coordination/index.js +14 -12
  100. package/dist/coordination/schema.d.ts +176 -128
  101. package/dist/coordination/schema.js +197 -133
  102. package/dist/coordination/trace.d.ts +9 -10
  103. package/dist/coordination/trace.js +13 -14
  104. package/dist/core/DatabaseManager.d.ts +5 -7
  105. package/dist/core/DatabaseManager.js +15 -19
  106. package/dist/core/QueryProcessor.d.ts +7 -9
  107. package/dist/core/QueryProcessor.js +22 -28
  108. package/dist/core/QueryView.d.ts +8 -8
  109. package/dist/core/QueryView.js +2 -2
  110. package/dist/core/StoreManager.d.ts +14 -14
  111. package/dist/core/StoreManager.js +33 -24
  112. package/dist/core/ViewRegistry.d.ts +5 -5
  113. package/dist/core/ViewRegistry.js +4 -4
  114. package/dist/core/index.d.ts +17 -12
  115. package/dist/core/index.js +32 -26
  116. package/dist/core/openIDBWithTimeout.d.ts +38 -36
  117. package/dist/core/openIDBWithTimeout.js +42 -43
  118. package/dist/core/queryUtils.d.ts +45 -0
  119. package/dist/core/queryUtils.js +69 -0
  120. package/dist/core/storeContract.d.ts +63 -61
  121. package/dist/core/storeContract.js +8 -12
  122. package/dist/environment.d.ts +28 -0
  123. package/dist/environment.js +21 -0
  124. package/dist/errorCodes.d.ts +107 -99
  125. package/dist/errorCodes.js +137 -134
  126. package/dist/errors.d.ts +160 -166
  127. package/dist/errors.js +155 -158
  128. package/dist/index.d.ts +36 -27
  129. package/dist/index.js +91 -86
  130. package/dist/interfaces/index.d.ts +102 -113
  131. package/dist/interfaces/index.js +5 -4
  132. package/dist/keys/index.d.ts +27 -29
  133. package/dist/keys/index.js +41 -40
  134. package/dist/mutators/RecordingTransaction.d.ts +16 -16
  135. package/dist/mutators/RecordingTransaction.js +31 -37
  136. package/dist/mutators/Transaction.d.ts +18 -26
  137. package/dist/mutators/Transaction.js +14 -20
  138. package/dist/mutators/UndoManager.d.ts +124 -131
  139. package/dist/mutators/UndoManager.js +177 -156
  140. package/dist/mutators/defineMutators.d.ts +23 -34
  141. package/dist/mutators/defineMutators.js +14 -20
  142. package/dist/mutators/inverseOp.d.ts +12 -15
  143. package/dist/mutators/inverseOp.js +12 -15
  144. package/dist/mutators/mutateActions.d.ts +10 -9
  145. package/dist/mutators/mutateActions.js +1 -1
  146. package/dist/mutators/readerActions.d.ts +9 -8
  147. package/dist/mutators/readerActions.js +2 -2
  148. package/dist/mutators/undoApply.d.ts +31 -27
  149. package/dist/mutators/undoApply.js +26 -24
  150. package/dist/policy/index.d.ts +5 -3
  151. package/dist/policy/index.js +5 -3
  152. package/dist/policy/types.d.ts +104 -100
  153. package/dist/policy/types.js +67 -66
  154. package/dist/query/client.d.ts +28 -23
  155. package/dist/query/client.js +45 -43
  156. package/dist/query/types.d.ts +37 -60
  157. package/dist/query/types.js +13 -33
  158. package/dist/react/AbloProvider.d.ts +1 -1
  159. package/dist/react/AbloProvider.js +2 -2
  160. package/dist/react/context.d.ts +25 -28
  161. package/dist/react/context.js +9 -10
  162. package/dist/react/index.d.ts +41 -42
  163. package/dist/react/index.js +37 -38
  164. package/dist/react/internalContext.d.ts +17 -19
  165. package/dist/react/useAblo.d.ts +28 -25
  166. package/dist/react/useAblo.js +41 -17
  167. package/dist/react/useCurrentUserId.d.ts +8 -7
  168. package/dist/react/useCurrentUserId.js +8 -7
  169. package/dist/react/useErrorListener.d.ts +7 -7
  170. package/dist/react/useErrorListener.js +10 -11
  171. package/dist/react/useMutationFailureListener.d.ts +8 -8
  172. package/dist/react/useMutationFailureListener.js +8 -8
  173. package/dist/react/useMutators.d.ts +11 -11
  174. package/dist/react/useMutators.js +3 -3
  175. package/dist/react/useReactive.js +2 -2
  176. package/dist/react/useSyncStatus.d.ts +4 -6
  177. package/dist/react/useUndoScope.d.ts +7 -9
  178. package/dist/react/useUndoScope.js +1 -1
  179. package/dist/schema/coordination.d.ts +21 -25
  180. package/dist/schema/coordination.js +21 -25
  181. package/dist/schema/ddl.d.ts +43 -39
  182. package/dist/schema/ddl.js +75 -68
  183. package/dist/schema/ddlLock.d.ts +20 -24
  184. package/dist/schema/ddlLock.js +18 -23
  185. package/dist/schema/diff.d.ts +99 -61
  186. package/dist/schema/diff.js +43 -34
  187. package/dist/schema/field.d.ts +37 -42
  188. package/dist/schema/field.js +35 -48
  189. package/dist/schema/generate.d.ts +12 -12
  190. package/dist/schema/generate.js +12 -12
  191. package/dist/schema/index.d.ts +3 -3
  192. package/dist/schema/index.js +21 -23
  193. package/dist/schema/model.d.ts +118 -143
  194. package/dist/schema/model.js +22 -33
  195. package/dist/schema/openapi.d.ts +10 -9
  196. package/dist/schema/openapi.js +5 -3
  197. package/dist/schema/queries.d.ts +29 -31
  198. package/dist/schema/queries.js +23 -25
  199. package/dist/schema/relation.d.ts +89 -99
  200. package/dist/schema/relation.js +13 -13
  201. package/dist/schema/residency.d.ts +16 -13
  202. package/dist/schema/residency.js +16 -13
  203. package/dist/schema/roles.d.ts +36 -43
  204. package/dist/schema/roles.js +31 -37
  205. package/dist/schema/schema.d.ts +64 -43
  206. package/dist/schema/schema.js +31 -32
  207. package/dist/schema/select.d.ts +13 -13
  208. package/dist/schema/select.js +13 -13
  209. package/dist/schema/serialize.d.ts +28 -31
  210. package/dist/schema/serialize.js +27 -31
  211. package/dist/schema/sugar.d.ts +17 -32
  212. package/dist/schema/sugar.js +14 -29
  213. package/dist/schema/{sync-delta-row.d.ts → syncDeltaRow.d.ts} +26 -49
  214. package/dist/schema/syncDeltaRow.js +89 -0
  215. package/dist/schema/tenancy.d.ts +44 -46
  216. package/dist/schema/tenancy.js +46 -48
  217. package/dist/server/adapter.d.ts +58 -58
  218. package/dist/server/adapter.js +13 -14
  219. package/dist/server/commit.d.ts +60 -64
  220. package/dist/server/index.d.ts +9 -10
  221. package/dist/server/index.js +1 -1
  222. package/dist/server/readConfig.d.ts +70 -0
  223. package/dist/server/readConfig.js +8 -0
  224. package/dist/server/storageMode.d.ts +23 -0
  225. package/dist/server/storageMode.js +17 -0
  226. package/dist/source/adapter.d.ts +30 -25
  227. package/dist/source/adapter.js +10 -10
  228. package/dist/source/adapters/drizzle.d.ts +28 -23
  229. package/dist/source/adapters/drizzle.js +30 -25
  230. package/dist/source/adapters/kysely.d.ts +27 -25
  231. package/dist/source/adapters/kysely.js +24 -23
  232. package/dist/source/adapters/memory.d.ts +8 -7
  233. package/dist/source/adapters/memory.js +9 -8
  234. package/dist/source/adapters/prisma.d.ts +13 -12
  235. package/dist/source/adapters/prisma.js +22 -25
  236. package/dist/source/conformance.d.ts +18 -11
  237. package/dist/source/conformance.js +17 -11
  238. package/dist/source/connector.d.ts +31 -32
  239. package/dist/source/connector.js +28 -28
  240. package/dist/source/connectorProtocol.d.ts +160 -0
  241. package/dist/source/connectorProtocol.js +162 -0
  242. package/dist/source/contract.d.ts +26 -27
  243. package/dist/source/contract.js +28 -29
  244. package/dist/source/factory.d.ts +46 -58
  245. package/dist/source/factory.js +22 -27
  246. package/dist/source/index.d.ts +7 -9
  247. package/dist/source/index.js +12 -14
  248. package/dist/source/migrations.d.ts +9 -9
  249. package/dist/source/migrations.js +9 -9
  250. package/dist/source/next.d.ts +9 -10
  251. package/dist/source/next.js +6 -7
  252. package/dist/source/pushQueue.d.ts +69 -47
  253. package/dist/source/pushQueue.js +32 -28
  254. package/dist/source/signing.d.ts +46 -17
  255. package/dist/source/signing.js +28 -11
  256. package/dist/source/types.d.ts +121 -104
  257. package/dist/source/types.js +13 -14
  258. package/dist/stores/ObjectStore.d.ts +24 -12
  259. package/dist/stores/ObjectStore.js +38 -16
  260. package/dist/stores/ObjectStoreContract.d.ts +14 -15
  261. package/dist/stores/SyncActionStore.d.ts +7 -11
  262. package/dist/stores/SyncActionStore.js +13 -17
  263. package/dist/surface.d.ts +28 -21
  264. package/dist/surface.js +29 -20
  265. package/dist/sync/{BootstrapHelper.d.ts → BootstrapFetcher.d.ts} +36 -42
  266. package/dist/sync/{BootstrapHelper.js → BootstrapFetcher.js} +76 -76
  267. package/dist/sync/ConnectionManager.d.ts +39 -50
  268. package/dist/sync/ConnectionManager.js +55 -66
  269. package/dist/sync/NetworkProbe.d.ts +24 -29
  270. package/dist/sync/NetworkProbe.js +63 -69
  271. package/dist/sync/{HydrationCoordinator.d.ts → OnDemandLoader.d.ts} +42 -41
  272. package/dist/sync/{HydrationCoordinator.js → OnDemandLoader.js} +59 -54
  273. package/dist/sync/{AreaOfInterestManager.d.ts → SubscriptionManager.d.ts} +43 -57
  274. package/dist/sync/{AreaOfInterestManager.js → SubscriptionManager.js} +43 -51
  275. package/dist/sync/SyncWebSocket.d.ts +141 -166
  276. package/dist/sync/SyncWebSocket.js +191 -223
  277. package/dist/sync/awaitClaimGrant.d.ts +18 -18
  278. package/dist/sync/awaitClaimGrant.js +11 -11
  279. package/dist/sync/bootstrapApply.d.ts +34 -24
  280. package/dist/sync/bootstrapApply.js +27 -19
  281. package/dist/sync/commitFrames.d.ts +21 -20
  282. package/dist/sync/commitFrames.js +18 -18
  283. package/dist/sync/createClaimStream.d.ts +23 -22
  284. package/dist/sync/createClaimStream.js +105 -23
  285. package/dist/sync/createPresenceStream.d.ts +19 -18
  286. package/dist/sync/createPresenceStream.js +25 -26
  287. package/dist/sync/createSnapshot.d.ts +12 -14
  288. package/dist/sync/createSnapshot.js +20 -26
  289. package/dist/sync/credentialLifecycle.d.ts +104 -104
  290. package/dist/sync/credentialLifecycle.js +140 -147
  291. package/dist/sync/deltaPipeline.d.ts +36 -34
  292. package/dist/sync/deltaPipeline.js +64 -65
  293. package/dist/sync/groupChange.d.ts +63 -61
  294. package/dist/sync/groupChange.js +74 -78
  295. package/dist/sync/heartbeat.d.ts +34 -33
  296. package/dist/sync/heartbeat.js +31 -31
  297. package/dist/sync/participants.d.ts +19 -19
  298. package/dist/sync/persistedPrefix.d.ts +12 -0
  299. package/dist/sync/persistedPrefix.js +22 -0
  300. package/dist/sync/schemas.d.ts +3 -2
  301. package/dist/sync/schemas.js +14 -10
  302. package/dist/sync/syncCursor.d.ts +17 -21
  303. package/dist/sync/syncCursor.js +17 -21
  304. package/dist/sync/syncPlan.d.ts +28 -36
  305. package/dist/sync/syncPlan.js +18 -19
  306. package/dist/sync/syncPosition.d.ts +54 -49
  307. package/dist/sync/syncPosition.js +57 -52
  308. package/dist/sync/wsFrameHandlers.d.ts +35 -36
  309. package/dist/sync/wsFrameHandlers.js +63 -67
  310. package/dist/testing/fixtures/bootstrap.d.ts +12 -6
  311. package/dist/testing/fixtures/bootstrap.js +12 -6
  312. package/dist/testing/fixtures/deltas.d.ts +30 -33
  313. package/dist/testing/fixtures/deltas.js +30 -33
  314. package/dist/testing/fixtures/models.d.ts +11 -10
  315. package/dist/testing/fixtures/models.js +11 -10
  316. package/dist/testing/helpers/{react-wrapper.d.ts → reactWrapper.d.ts} +13 -10
  317. package/dist/testing/helpers/{react-wrapper.js → reactWrapper.js} +15 -12
  318. package/dist/testing/helpers/{sync-engine-harness.d.ts → syncEngineHarness.d.ts} +17 -15
  319. package/dist/testing/helpers/{sync-engine-harness.js → syncEngineHarness.js} +12 -10
  320. package/dist/testing/helpers/wait.d.ts +13 -8
  321. package/dist/testing/helpers/wait.js +13 -8
  322. package/dist/testing/index.d.ts +5 -3
  323. package/dist/testing/index.js +3 -2
  324. package/dist/testing/mocks/FakeDatabase.d.ts +18 -0
  325. package/dist/testing/mocks/FakeDatabase.js +10 -0
  326. package/dist/testing/mocks/MockMutationExecutor.d.ts +18 -17
  327. package/dist/testing/mocks/MockMutationExecutor.js +15 -14
  328. package/dist/testing/mocks/MockNetworkMonitor.d.ts +8 -8
  329. package/dist/testing/mocks/MockNetworkMonitor.js +8 -8
  330. package/dist/testing/mocks/MockSyncContext.d.ts +20 -17
  331. package/dist/testing/mocks/MockSyncContext.js +15 -13
  332. package/dist/testing/mocks/MockSyncStore.d.ts +10 -10
  333. package/dist/testing/mocks/MockSyncStore.js +11 -11
  334. package/dist/testing/mocks/MockWebSocket.d.ts +28 -23
  335. package/dist/testing/mocks/MockWebSocket.js +22 -21
  336. package/dist/transactions/TransactionQueue.d.ts +244 -181
  337. package/dist/transactions/TransactionQueue.js +929 -423
  338. package/dist/transactions/TransactionStore.d.ts +6 -4
  339. package/dist/transactions/TransactionStore.js +6 -4
  340. package/dist/transactions/UnconfirmedWrites.d.ts +82 -0
  341. package/dist/transactions/UnconfirmedWrites.js +104 -0
  342. package/dist/transactions/coalesceRules.d.ts +41 -17
  343. package/dist/transactions/coalesceRules.js +40 -17
  344. package/dist/transactions/commitEnvelope.d.ts +132 -0
  345. package/dist/transactions/commitEnvelope.js +139 -0
  346. package/dist/transactions/commitOutboxStore.d.ts +32 -0
  347. package/dist/transactions/commitOutboxStore.js +26 -0
  348. package/dist/transactions/commitPayload.d.ts +63 -52
  349. package/dist/transactions/commitPayload.js +54 -57
  350. package/dist/transactions/deltaConfirmation.d.ts +20 -22
  351. package/dist/transactions/deltaConfirmation.js +37 -45
  352. package/dist/transactions/httpCommitEnvelope.d.ts +43 -0
  353. package/dist/transactions/httpCommitEnvelope.js +179 -0
  354. package/dist/transactions/optimisticApply.d.ts +49 -0
  355. package/dist/transactions/optimisticApply.js +65 -0
  356. package/dist/transactions/replayValidation.d.ts +182 -0
  357. package/dist/transactions/replayValidation.js +156 -0
  358. package/dist/types/global.d.ts +46 -41
  359. package/dist/types/global.js +20 -19
  360. package/dist/types/index.d.ts +71 -77
  361. package/dist/types/index.js +22 -22
  362. package/dist/types/modelData.d.ts +6 -8
  363. package/dist/types/modelData.js +5 -7
  364. package/dist/types/participant.d.ts +10 -11
  365. package/dist/types/participant.js +6 -8
  366. package/dist/types/streams.d.ts +208 -195
  367. package/dist/types/streams.js +7 -7
  368. package/dist/utils/asyncIterator.d.ts +25 -32
  369. package/dist/utils/asyncIterator.js +25 -32
  370. package/dist/utils/duration.d.ts +12 -15
  371. package/dist/utils/duration.js +12 -15
  372. package/dist/utils/mobxSetup.d.ts +53 -0
  373. package/dist/utils/{mobx-setup.js → mobxSetup.js} +42 -98
  374. package/dist/webhooks/events.d.ts +21 -16
  375. package/dist/webhooks/events.js +10 -8
  376. package/dist/webhooks/index.d.ts +5 -7
  377. package/dist/webhooks/index.js +5 -7
  378. package/dist/wire/bootstrapReason.d.ts +9 -0
  379. package/dist/wire/bootstrapReason.js +8 -0
  380. package/dist/{schema/sync-delta-wire.d.ts → wire/delta.d.ts} +58 -41
  381. package/dist/wire/delta.js +114 -0
  382. package/dist/wire/errorEnvelope.d.ts +30 -31
  383. package/dist/wire/errorEnvelope.js +34 -40
  384. package/dist/wire/frames.d.ts +315 -86
  385. package/dist/wire/frames.js +47 -33
  386. package/dist/wire/index.d.ts +18 -14
  387. package/dist/wire/index.js +32 -27
  388. package/dist/wire/listEnvelope.d.ts +16 -23
  389. package/dist/wire/listEnvelope.js +7 -6
  390. package/dist/wire/protocol.d.ts +25 -32
  391. package/dist/wire/protocol.js +25 -32
  392. package/dist/wire/protocolVersion.d.ts +44 -40
  393. package/dist/wire/protocolVersion.js +44 -40
  394. package/docs/api.md +10 -10
  395. package/docs/coordination.md +59 -0
  396. package/docs/mcp.md +1 -1
  397. package/package.json +17 -11
  398. package/dist/ai-sdk/coordinated-tool.d.ts +0 -101
  399. package/dist/ai-sdk/coordination-context.d.ts +0 -52
  400. package/dist/core/query-utils.d.ts +0 -34
  401. package/dist/core/query-utils.js +0 -59
  402. package/dist/schema/sync-delta-row.js +0 -103
  403. package/dist/schema/sync-delta-wire.js +0 -102
  404. package/dist/server/read-config.d.ts +0 -67
  405. package/dist/server/read-config.js +0 -8
  406. package/dist/server/storage-mode.d.ts +0 -8
  407. package/dist/server/storage-mode.js +0 -28
  408. package/dist/source/connector-protocol.d.ts +0 -159
  409. package/dist/source/connector-protocol.js +0 -161
  410. package/dist/transactions/OptimisticEchoTracker.d.ts +0 -82
  411. package/dist/transactions/OptimisticEchoTracker.js +0 -104
  412. package/dist/transactions/mutation-error-handler.d.ts +0 -5
  413. package/dist/transactions/mutation-error-handler.js +0 -39
  414. package/dist/transactions/optimistic.d.ts +0 -24
  415. package/dist/transactions/optimistic.js +0 -45
  416. package/dist/transactions/persistedReplay.d.ts +0 -93
  417. package/dist/transactions/persistedReplay.js +0 -105
  418. package/dist/utils/mobx-setup.d.ts +0 -42
@@ -0,0 +1,182 @@
1
+ /**
2
+ * The validation boundary for replaying persisted transactions after a restart.
3
+ *
4
+ * Rows read back from the on-disk transaction store may have been written by an
5
+ * earlier run — possibly by an older version of this package, possibly
6
+ * corrupted. Rather than trust them, the schemas here validate exactly the
7
+ * fields the transaction queue and the offline-mutation restore read during
8
+ * replay. A row that fails to parse is dropped and reported, never replayed as
9
+ * a malformed commit.
10
+ *
11
+ * The same store also holds two kinds of rows that are not replayable
12
+ * transactions — the offline mutation queue (`type: 'queue'`) and delta-await
13
+ * markers (`type: 'awaiting_delta'`), each owned by another part of the client.
14
+ * {@link isNonReplayablePersistedRow} recognizes them so they are skipped
15
+ * quietly rather than flagged as corruption.
16
+ */
17
+ import { z } from 'zod';
18
+ import type { Transaction } from './commitPayload.js';
19
+ /**
20
+ * The shape of a persisted transaction that can be replayed: the fields the
21
+ * transaction queue reads when it re-enqueues the row — its id, operation type,
22
+ * model addressing, payload, and identity context. Any remaining bookkeeping is
23
+ * filled in with defaults when the row is rehydrated by
24
+ * {@link deserializePersistedTransaction}.
25
+ */
26
+ export declare const persistedTransactionSchema: z.ZodObject<{
27
+ id: z.ZodString;
28
+ type: z.ZodEnum<{
29
+ update: "update";
30
+ create: "create";
31
+ delete: "delete";
32
+ archive: "archive";
33
+ unarchive: "unarchive";
34
+ }>;
35
+ modelName: z.ZodString;
36
+ modelId: z.ZodString;
37
+ modelKey: z.ZodOptional<z.ZodString>;
38
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
39
+ previousData: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
40
+ context: z.ZodObject<{
41
+ userId: z.ZodString;
42
+ organizationId: z.ZodString;
43
+ role: z.ZodOptional<z.ZodString>;
44
+ teamIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
+ }, z.core.$strip>;
46
+ createdAt: z.ZodOptional<z.ZodNumber>;
47
+ batchId: z.ZodOptional<z.ZodString>;
48
+ commitEnvelope: z.ZodOptional<z.ZodObject<{
49
+ idempotencyKey: z.core.$ZodBranded<z.ZodString, "IdempotencyKey", "out">;
50
+ operationIndex: z.ZodNumber;
51
+ operationCount: z.ZodNumber;
52
+ sealedAt: z.ZodOptional<z.ZodNumber>;
53
+ sequence: z.ZodOptional<z.ZodNumber>;
54
+ }, z.core.$strict>>;
55
+ sourceMutationIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
56
+ writeOptions: z.ZodOptional<z.ZodObject<{
57
+ readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
58
+ onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
59
+ reject: "reject";
60
+ overwrite: "overwrite";
61
+ notify: "notify";
62
+ }>>>;
63
+ idempotencyKey: z.ZodOptional<z.ZodString>;
64
+ label: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$loose>>;
66
+ localOnly: z.ZodOptional<z.ZodBoolean>;
67
+ }, z.core.$loose>;
68
+ export type PersistedReplayableTransaction = z.infer<typeof persistedTransactionSchema>;
69
+ /**
70
+ * Reports whether a stored row is one of the non-transaction kinds, so callers
71
+ * skip it instead of treating it as a corrupt transaction.
72
+ */
73
+ export declare function isNonReplayablePersistedRow(row: unknown): boolean;
74
+ /**
75
+ * Validates one stored row and rehydrates it into a {@link Transaction} ready
76
+ * to replay, or returns `null` when the row fails validation. Bookkeeping
77
+ * fields the stored row lacks — status, attempts, priority, timestamp — are
78
+ * re-derived the same way a freshly staged transaction derives them.
79
+ */
80
+ export declare function deserializePersistedTransaction(row: unknown): Transaction | null;
81
+ /**
82
+ * The shape of one entry in the persisted offline mutation queue — an item of
83
+ * the `'queue'` row's `mutations` array, carrying the fields read when the
84
+ * queue is restored on reconnect.
85
+ */
86
+ export declare const persistedMutationSchema: z.ZodObject<{
87
+ mutationId: z.ZodOptional<z.ZodString>;
88
+ type: z.ZodEnum<{
89
+ update: "update";
90
+ create: "create";
91
+ delete: "delete";
92
+ archive: "archive";
93
+ }>;
94
+ modelData: z.ZodRecord<z.ZodString, z.ZodUnknown>;
95
+ modelName: z.ZodString;
96
+ timestamp: z.ZodString;
97
+ capturedChanges: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
98
+ writeOptions: z.ZodOptional<z.ZodObject<{
99
+ readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
100
+ onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
101
+ reject: "reject";
102
+ overwrite: "overwrite";
103
+ notify: "notify";
104
+ }>>>;
105
+ idempotencyKey: z.ZodOptional<z.ZodString>;
106
+ label: z.ZodOptional<z.ZodString>;
107
+ }, z.core.$loose>>;
108
+ }, z.core.$loose>;
109
+ export type PersistedQueuedMutation = z.infer<typeof persistedMutationSchema>;
110
+ export declare const PENDING_MUTATION_RECORD_PREFIX = "pending-mutation:";
111
+ /**
112
+ * Stay one hour inside the server's 24-hour idempotency retention window.
113
+ * A journaled write older than this can no longer be deduplicated by the
114
+ * server, so restore holds it for review instead of replaying it.
115
+ */
116
+ export declare const PENDING_MUTATION_REPLAY_WINDOW_MS: number;
117
+ /** Scope-less records written by the first aggregate-journal release. */
118
+ export declare const legacyPendingMutationRecordSchema: z.ZodObject<{
119
+ storageVersion: z.ZodLiteral<1>;
120
+ id: z.ZodString;
121
+ type: z.ZodLiteral<"pending_mutation">;
122
+ mutation: z.ZodObject<{
123
+ type: z.ZodEnum<{
124
+ update: "update";
125
+ create: "create";
126
+ delete: "delete";
127
+ archive: "archive";
128
+ }>;
129
+ modelData: z.ZodRecord<z.ZodString, z.ZodUnknown>;
130
+ modelName: z.ZodString;
131
+ timestamp: z.ZodString;
132
+ capturedChanges: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
133
+ writeOptions: z.ZodOptional<z.ZodObject<{
134
+ readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
135
+ onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
136
+ reject: "reject";
137
+ overwrite: "overwrite";
138
+ notify: "notify";
139
+ }>>>;
140
+ idempotencyKey: z.ZodOptional<z.ZodString>;
141
+ label: z.ZodOptional<z.ZodString>;
142
+ }, z.core.$loose>>;
143
+ mutationId: z.ZodString;
144
+ }, z.core.$loose>;
145
+ timestamp: z.ZodNumber;
146
+ }, z.core.$strict>;
147
+ export declare const pendingMutationRecordSchema: z.ZodObject<{
148
+ storageVersion: z.ZodLiteral<2>;
149
+ scope: z.ZodObject<{
150
+ organizationId: z.ZodString;
151
+ participantId: z.ZodString;
152
+ namespace: z.ZodString;
153
+ }, z.core.$strict>;
154
+ id: z.ZodString;
155
+ type: z.ZodLiteral<"pending_mutation">;
156
+ mutation: z.ZodObject<{
157
+ type: z.ZodEnum<{
158
+ update: "update";
159
+ create: "create";
160
+ delete: "delete";
161
+ archive: "archive";
162
+ }>;
163
+ modelData: z.ZodRecord<z.ZodString, z.ZodUnknown>;
164
+ modelName: z.ZodString;
165
+ timestamp: z.ZodString;
166
+ capturedChanges: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
167
+ writeOptions: z.ZodOptional<z.ZodObject<{
168
+ readAt: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
169
+ onStale: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
170
+ reject: "reject";
171
+ overwrite: "overwrite";
172
+ notify: "notify";
173
+ }>>>;
174
+ idempotencyKey: z.ZodOptional<z.ZodString>;
175
+ label: z.ZodOptional<z.ZodString>;
176
+ }, z.core.$loose>>;
177
+ mutationId: z.ZodString;
178
+ }, z.core.$loose>;
179
+ timestamp: z.ZodNumber;
180
+ }, z.core.$strict>;
181
+ export type PendingMutationRecord = z.infer<typeof pendingMutationRecordSchema>;
182
+ export declare function pendingMutationRecordId(mutationId: string): string;
@@ -0,0 +1,156 @@
1
+ /**
2
+ * The validation boundary for replaying persisted transactions after a restart.
3
+ *
4
+ * Rows read back from the on-disk transaction store may have been written by an
5
+ * earlier run — possibly by an older version of this package, possibly
6
+ * corrupted. Rather than trust them, the schemas here validate exactly the
7
+ * fields the transaction queue and the offline-mutation restore read during
8
+ * replay. A row that fails to parse is dropped and reported, never replayed as
9
+ * a malformed commit.
10
+ *
11
+ * The same store also holds two kinds of rows that are not replayable
12
+ * transactions — the offline mutation queue (`type: 'queue'`) and delta-await
13
+ * markers (`type: 'awaiting_delta'`), each owned by another part of the client.
14
+ * {@link isNonReplayablePersistedRow} recognizes them so they are skipped
15
+ * quietly rather than flagged as corruption.
16
+ */
17
+ import { z } from 'zod';
18
+ import { computePriorityScore, normalizeModelKey } from './commitPayload.js';
19
+ import { commitEnvelopeMemberSchema, commitOutboxScopeSchema, } from './commitEnvelope.js';
20
+ /** The subset of a write's options that is stored with each transaction or queued mutation. */
21
+ const persistedWriteOptionsSchema = z
22
+ .object({
23
+ readAt: z.number().nullable().optional(),
24
+ onStale: z.enum(['reject', 'overwrite', 'notify']).nullable().optional(),
25
+ idempotencyKey: z.string().optional(),
26
+ label: z.string().optional(),
27
+ })
28
+ .loose();
29
+ /**
30
+ * The shape of a persisted transaction that can be replayed: the fields the
31
+ * transaction queue reads when it re-enqueues the row — its id, operation type,
32
+ * model addressing, payload, and identity context. Any remaining bookkeeping is
33
+ * filled in with defaults when the row is rehydrated by
34
+ * {@link deserializePersistedTransaction}.
35
+ */
36
+ export const persistedTransactionSchema = z
37
+ .object({
38
+ id: z.string().min(1),
39
+ type: z.enum(['create', 'update', 'delete', 'archive', 'unarchive']),
40
+ modelName: z.string().min(1),
41
+ modelId: z.string().min(1),
42
+ modelKey: z.string().min(1).optional(),
43
+ data: z.record(z.string(), z.unknown()).optional(),
44
+ previousData: z.record(z.string(), z.unknown()).nullable().optional(),
45
+ context: z.object({
46
+ userId: z.string().min(1),
47
+ organizationId: z.string().min(1),
48
+ role: z.string().optional(),
49
+ teamIds: z.array(z.string()).optional(),
50
+ }),
51
+ createdAt: z.number().optional(),
52
+ batchId: z.string().optional(),
53
+ commitEnvelope: commitEnvelopeMemberSchema.optional(),
54
+ sourceMutationIds: z.array(z.string().min(1)).optional(),
55
+ writeOptions: persistedWriteOptionsSchema.optional(),
56
+ localOnly: z.boolean().optional(),
57
+ })
58
+ .loose();
59
+ /** The `type` values of stored rows that belong to other parts of the client and are not replayable transactions. */
60
+ const NON_REPLAYABLE_TYPES = new Set([
61
+ 'queue',
62
+ 'awaiting_delta',
63
+ 'pending_mutation',
64
+ 'commit_envelope',
65
+ 'http_commit_envelope',
66
+ ]);
67
+ /**
68
+ * Reports whether a stored row is one of the non-transaction kinds, so callers
69
+ * skip it instead of treating it as a corrupt transaction.
70
+ */
71
+ export function isNonReplayablePersistedRow(row) {
72
+ return (typeof row === 'object' &&
73
+ row !== null &&
74
+ typeof row.type === 'string' &&
75
+ NON_REPLAYABLE_TYPES.has(row.type));
76
+ }
77
+ /**
78
+ * Validates one stored row and rehydrates it into a {@link Transaction} ready
79
+ * to replay, or returns `null` when the row fails validation. Bookkeeping
80
+ * fields the stored row lacks — status, attempts, priority, timestamp — are
81
+ * re-derived the same way a freshly staged transaction derives them.
82
+ */
83
+ export function deserializePersistedTransaction(row) {
84
+ const parsed = persistedTransactionSchema.safeParse(row);
85
+ if (!parsed.success)
86
+ return null;
87
+ const tx = parsed.data;
88
+ return {
89
+ id: tx.id,
90
+ type: tx.type,
91
+ modelName: tx.modelName,
92
+ modelId: tx.modelId,
93
+ modelKey: tx.modelKey ?? normalizeModelKey(tx.modelName),
94
+ ...(tx.data !== undefined ? { data: tx.data } : {}),
95
+ ...(tx.previousData !== undefined ? { previousData: tx.previousData } : {}),
96
+ context: tx.context,
97
+ status: 'pending',
98
+ createdAt: tx.createdAt ?? Date.now(),
99
+ attempts: 0,
100
+ priority: 'normal',
101
+ priorityScore: computePriorityScore(tx.type, tx.modelName),
102
+ ...(tx.batchId !== undefined ? { batchId: tx.batchId } : {}),
103
+ ...(tx.commitEnvelope !== undefined
104
+ ? { commitEnvelope: tx.commitEnvelope }
105
+ : {}),
106
+ ...(tx.sourceMutationIds !== undefined
107
+ ? { sourceMutationIds: tx.sourceMutationIds }
108
+ : {}),
109
+ ...(tx.writeOptions !== undefined ? { writeOptions: tx.writeOptions } : {}),
110
+ ...(tx.localOnly !== undefined ? { localOnly: tx.localOnly } : {}),
111
+ };
112
+ }
113
+ /**
114
+ * The shape of one entry in the persisted offline mutation queue — an item of
115
+ * the `'queue'` row's `mutations` array, carrying the fields read when the
116
+ * queue is restored on reconnect.
117
+ */
118
+ export const persistedMutationSchema = z
119
+ .object({
120
+ mutationId: z.string().min(1).optional(),
121
+ type: z.enum(['create', 'update', 'delete', 'archive']),
122
+ modelData: z.record(z.string(), z.unknown()),
123
+ modelName: z.string().min(1),
124
+ timestamp: z.string(),
125
+ capturedChanges: z.record(z.string(), z.unknown()).optional(),
126
+ writeOptions: persistedWriteOptionsSchema.optional(),
127
+ })
128
+ .loose();
129
+ export const PENDING_MUTATION_RECORD_PREFIX = 'pending-mutation:';
130
+ /**
131
+ * Stay one hour inside the server's 24-hour idempotency retention window.
132
+ * A journaled write older than this can no longer be deduplicated by the
133
+ * server, so restore holds it for review instead of replaying it.
134
+ */
135
+ export const PENDING_MUTATION_REPLAY_WINDOW_MS = 23 * 60 * 60 * 1000;
136
+ const pendingMutationRecordBaseShape = {
137
+ id: z.string().startsWith(PENDING_MUTATION_RECORD_PREFIX),
138
+ type: z.literal('pending_mutation'),
139
+ mutation: persistedMutationSchema.extend({
140
+ mutationId: z.string().min(1),
141
+ }),
142
+ timestamp: z.number().int().nonnegative(),
143
+ };
144
+ /** Scope-less records written by the first aggregate-journal release. */
145
+ export const legacyPendingMutationRecordSchema = z.strictObject({
146
+ ...pendingMutationRecordBaseShape,
147
+ storageVersion: z.literal(1),
148
+ });
149
+ export const pendingMutationRecordSchema = z.strictObject({
150
+ ...pendingMutationRecordBaseShape,
151
+ storageVersion: z.literal(2),
152
+ scope: commitOutboxScopeSchema,
153
+ });
154
+ export function pendingMutationRecordId(mutationId) {
155
+ return `${PENDING_MUTATION_RECORD_PREFIX}${mutationId}`;
156
+ }
@@ -1,23 +1,24 @@
1
1
  /**
2
- * Type registration point for SDK consumers.
2
+ * The single place where you tell the SDK about your application's types.
3
3
  *
4
- * A consumer registers their Schema, Presence, Claims, and UserMeta ONCE by
5
- * augmenting the {@link Register} interface, and every SDK hook — `useAblo`,
6
- * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from the
7
- * resolved registration. No generics at call sites, no `schema` arg per call.
4
+ * You register your Schema, Presence, Claims, and UserMeta once by augmenting
5
+ * the {@link Register} interface. From then on every SDK hook — `useAblo`,
6
+ * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from that
7
+ * registration, so you never pass a generic or a `schema` argument at a call
8
+ * site.
8
9
  *
9
- * Registration is done via **module augmentation** of `@abloatai/ablo`
10
- * the same pattern TanStack Router uses for its `Register` interface. The brand
11
- * lives in the module specifier, so the interface is just `Register` (not a
12
- * global, not prefixed). It's a language feature, not a library trick: any file
13
- * in the compilation can augment it and every resolver below picks it up.
10
+ * Registration uses TypeScript module augmentation: any file in your project
11
+ * can add an `interface Register` to a `declare module '@abloatai/ablo'`
12
+ * block, and every resolver below picks it up. Because the name is scoped to
13
+ * this module, the interface is simply `Register` not a global and not
14
+ * prefixed.
14
15
  *
15
- * Consumer example (`npx ablo init` scaffolds this as `ablo/register.ts`, a
16
- * sibling of `ablo/schema.ts`). It's a regular `.ts` module, NOT a hand-authored
17
- * `.d.ts`: the top-level `import type { schema }` makes the `declare module`
18
- * block MERGE (augment) this interface rather than collide with it — the same
19
- * shape TanStack Router uses in `src/router.tsx`. Any `.ts` file in the
20
- * `tsconfig` `include` works; it never needs to be imported.
16
+ * The `npx ablo init` command scaffolds this file as `ablo/register.ts`, next
17
+ * to `ablo/schema.ts`. Write it as a normal `.ts` module, not a hand-authored
18
+ * `.d.ts`: the top-level `import type { schema }` is what makes the
19
+ * `declare module` block merge into this interface rather than collide with it.
20
+ * Any `.ts` file covered by your `tsconfig` works, and it never needs to be
21
+ * imported anywhere.
21
22
  *
22
23
  * ```ts
23
24
  * // ablo/register.ts
@@ -34,15 +35,15 @@
34
35
  * export {};
35
36
  * ```
36
37
  *
37
- * If `Register` is never augmented, every resolver falls back to
38
- * {@link DefaultSyncShape} — a loose shape that keeps consumers compiling
39
- * without typed benefits until they opt in.
38
+ * When `Register` is never augmented, every resolver falls back to
39
+ * {@link DefaultSyncShape} — a loose shape that keeps your code compiling
40
+ * without typed results until you opt in.
40
41
  */
41
42
  /**
42
- * Default fallback shapes used when the consumer hasn't augmented
43
- * {@link Register}. `DefaultSyncShape.Schema` is intentionally structural — it
44
- * carries `{ models: Record<string, unknown> }` so hooks can still validate the
45
- * model key argument against *something*, just without a typed entity shape.
43
+ * The fallback shapes the resolvers use when {@link Register} has not been
44
+ * augmented. `DefaultSyncShape.Schema` is deliberately structural — it carries
45
+ * `{ models: Record<string, unknown> }` so hooks can still check a model-key
46
+ * argument against something, just without a typed entity shape behind it.
46
47
  */
47
48
  export interface DefaultSyncShape {
48
49
  readonly Schema: {
@@ -55,20 +56,21 @@ export interface DefaultSyncShape {
55
56
  };
56
57
  }
57
58
  /**
58
- * The registration interface. Consumers augment it via
59
- * `declare module '@abloatai/ablo' { interface Register { Schema: ...; … } }`.
60
- * Empty by default every SDK resolver falls back to {@link DefaultSyncShape}
61
- * when an expected key is absent. Exported from the package root so the module
62
- * augmentation merges into this declaration.
59
+ * The registration interface you augment to declare your application's types.
60
+ * Add keys inside a `declare module '@abloatai/ablo'` block for example
61
+ * `interface Register { Schema: ...; Presence: ...; }`. It is empty by default,
62
+ * so any key you omit falls back to {@link DefaultSyncShape}. It is exported
63
+ * from the package root so your augmentation merges into this declaration.
63
64
  *
64
- * The `Schema` augmentation key holds the type produced by `defineSchema`, so
65
- * the same noun reads consistently here and in {@link ResolveSchema}.
65
+ * The `Schema` key holds the type returned by `defineSchema`, and
66
+ * {@link ResolveSchema} reads it back out.
66
67
  */
67
68
  export interface Register {
68
69
  }
69
70
  /**
70
- * The consumer's schema, or the default shape if unregistered. Hooks use this
71
- * to type their model-key argument and infer the entity type returned.
71
+ * Your registered schema, or the default shape when none is registered. Hooks
72
+ * read this to type their model-key argument and to infer the entity type they
73
+ * return.
72
74
  */
73
75
  export type ResolveSchema = Register extends {
74
76
  Schema: infer S;
@@ -76,30 +78,33 @@ export type ResolveSchema = Register extends {
76
78
  models: Record<string, unknown>;
77
79
  } ? S : DefaultSyncShape['Schema'] : DefaultSyncShape['Schema'];
78
80
  /**
79
- * The consumer's presence shape, or the default if unregistered. Used by
80
- * `usePresence`. Free-form — any serializable JSON broadcast per session.
81
+ * Your registered presence shape, or the default when none is registered.
82
+ * `usePresence` reads it. The shape is free-form — any JSON-serializable value
83
+ * you broadcast per session.
81
84
  */
82
85
  export type ResolvePresence = Register extends {
83
86
  Presence: infer P;
84
87
  } ? P : DefaultSyncShape['Presence'];
85
88
  /**
86
- * The consumer's claim vocabulary, or the default if unregistered. Keys are
87
- * claim names; values are the claim payload for each claim. Used by
88
- * `useClaim(claimName)`.
89
+ * Your registered claim vocabulary, or the default when none is registered.
90
+ * Each key is a claim name and its value is that claim's payload.
91
+ * `useClaim(claimName)` reads it.
89
92
  */
90
93
  export type ResolveClaims = Register extends {
91
94
  Claims: infer I;
92
95
  } ? I : DefaultSyncShape['Claims'];
93
96
  /**
94
- * The consumer's user-metadata shape, or the default if unregistered. Carries
95
- * identity info the consumer trusts from their auth layer not SDK-validated.
97
+ * Your registered user-metadata shape, or the default when none is registered.
98
+ * It carries identity information you trust from your own auth layer; the SDK
99
+ * does not validate it.
96
100
  */
97
101
  export type ResolveUserMeta = Register extends {
98
102
  UserMeta: infer U;
99
103
  } ? U : DefaultSyncShape['UserMeta'];
100
104
  /**
101
- * The keys of the consumer's schema models. `useQuery(modelKey)` narrows its
102
- * first argument to this union, so unknown key literals fail at compile time.
105
+ * The union of your schema's model names. `useQuery(modelKey)` narrows its
106
+ * first argument to this union, so a misspelled or unknown model name fails at
107
+ * compile time.
103
108
  */
104
109
  export type ResolveModelKey = ResolveSchema extends {
105
110
  models: infer M;
@@ -1,23 +1,24 @@
1
1
  /**
2
- * Type registration point for SDK consumers.
2
+ * The single place where you tell the SDK about your application's types.
3
3
  *
4
- * A consumer registers their Schema, Presence, Claims, and UserMeta ONCE by
5
- * augmenting the {@link Register} interface, and every SDK hook — `useAblo`,
6
- * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from the
7
- * resolved registration. No generics at call sites, no `schema` arg per call.
4
+ * You register your Schema, Presence, Claims, and UserMeta once by augmenting
5
+ * the {@link Register} interface. From then on every SDK hook — `useAblo`,
6
+ * `useQuery`, `useOne`, `usePresence`, `useClaim` — reads its types from that
7
+ * registration, so you never pass a generic or a `schema` argument at a call
8
+ * site.
8
9
  *
9
- * Registration is done via **module augmentation** of `@abloatai/ablo`
10
- * the same pattern TanStack Router uses for its `Register` interface. The brand
11
- * lives in the module specifier, so the interface is just `Register` (not a
12
- * global, not prefixed). It's a language feature, not a library trick: any file
13
- * in the compilation can augment it and every resolver below picks it up.
10
+ * Registration uses TypeScript module augmentation: any file in your project
11
+ * can add an `interface Register` to a `declare module '@abloatai/ablo'`
12
+ * block, and every resolver below picks it up. Because the name is scoped to
13
+ * this module, the interface is simply `Register` not a global and not
14
+ * prefixed.
14
15
  *
15
- * Consumer example (`npx ablo init` scaffolds this as `ablo/register.ts`, a
16
- * sibling of `ablo/schema.ts`). It's a regular `.ts` module, NOT a hand-authored
17
- * `.d.ts`: the top-level `import type { schema }` makes the `declare module`
18
- * block MERGE (augment) this interface rather than collide with it — the same
19
- * shape TanStack Router uses in `src/router.tsx`. Any `.ts` file in the
20
- * `tsconfig` `include` works; it never needs to be imported.
16
+ * The `npx ablo init` command scaffolds this file as `ablo/register.ts`, next
17
+ * to `ablo/schema.ts`. Write it as a normal `.ts` module, not a hand-authored
18
+ * `.d.ts`: the top-level `import type { schema }` is what makes the
19
+ * `declare module` block merge into this interface rather than collide with it.
20
+ * Any `.ts` file covered by your `tsconfig` works, and it never needs to be
21
+ * imported anywhere.
21
22
  *
22
23
  * ```ts
23
24
  * // ablo/register.ts
@@ -34,8 +35,8 @@
34
35
  * export {};
35
36
  * ```
36
37
  *
37
- * If `Register` is never augmented, every resolver falls back to
38
- * {@link DefaultSyncShape} — a loose shape that keeps consumers compiling
39
- * without typed benefits until they opt in.
38
+ * When `Register` is never augmented, every resolver falls back to
39
+ * {@link DefaultSyncShape} — a loose shape that keeps your code compiling
40
+ * without typed results until you opt in.
40
41
  */
41
42
  export {};