@abloatai/ablo 0.36.0 → 0.37.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 (597) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -2013
  3. package/NOTICE +2 -2
  4. package/README.md +25 -71
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -114
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -163
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +1 -1
  59. package/docs/api-keys.md +7 -6
  60. package/docs/api.md +10 -10
  61. package/docs/client-behavior.md +5 -5
  62. package/docs/coordination.md +52 -62
  63. package/docs/data-sources.md +1 -1
  64. package/docs/examples/agent-human.md +4 -4
  65. package/docs/examples/ai-sdk-tool.md +1 -1
  66. package/docs/examples/existing-python-backend.md +15 -4
  67. package/docs/examples/nextjs.md +27 -6
  68. package/docs/examples/server-agent.md +2 -2
  69. package/docs/how-it-works.md +4 -4
  70. package/docs/identity.md +2 -1
  71. package/docs/integration-guide.md +24 -13
  72. package/docs/internal/README.md +18 -0
  73. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  74. package/docs/internal/agent-orchestration.md +58 -0
  75. package/docs/internal/commit-identifiers.md +91 -0
  76. package/docs/internal/concurrency-open-decisions.md +37 -0
  77. package/docs/internal/data-source-reverse-channel.md +150 -0
  78. package/docs/internal/per-field-conflict-detection.md +165 -0
  79. package/docs/internal/postgres-replication.md +64 -0
  80. package/docs/internal/serializable-schema.md +119 -0
  81. package/docs/internal/structure.md +32 -0
  82. package/docs/mcp.md +2 -2
  83. package/docs/migration.md +3 -3
  84. package/docs/quickstart.md +2 -2
  85. package/docs/react.md +5 -5
  86. package/docs/schema-contract.md +3 -3
  87. package/docs/sessions.md +91 -37
  88. package/examples/README.md +2 -2
  89. package/examples/data-source/README.md +1 -1
  90. package/examples/data-source/ablo-driver.ts +1 -1
  91. package/examples/data-source/customer-server.ts +1 -1
  92. package/examples/data-source/run.ts +1 -1
  93. package/examples/data-source/schema.ts +1 -1
  94. package/examples/quickstart.ts +2 -2
  95. package/llms.txt +8 -8
  96. package/package.json +63 -166
  97. package/bin/ablo.cjs +0 -39
  98. package/dist/BaseSyncedStore.d.ts +0 -843
  99. package/dist/BaseSyncedStore.js +0 -1971
  100. package/dist/Database.d.ts +0 -323
  101. package/dist/Database.js +0 -1502
  102. package/dist/InstanceCache.d.ts +0 -237
  103. package/dist/InstanceCache.js +0 -1166
  104. package/dist/LazyReferenceCollection.d.ts +0 -177
  105. package/dist/LazyReferenceCollection.js +0 -461
  106. package/dist/Model.d.ts +0 -454
  107. package/dist/Model.js +0 -919
  108. package/dist/ModelRegistry.d.ts +0 -225
  109. package/dist/ModelRegistry.js +0 -539
  110. package/dist/NetworkMonitor.d.ts +0 -28
  111. package/dist/NetworkMonitor.js +0 -79
  112. package/dist/RuntimeContext.d.ts +0 -52
  113. package/dist/RuntimeContext.js +0 -80
  114. package/dist/SyncClient.d.ts +0 -541
  115. package/dist/SyncClient.js +0 -2202
  116. package/dist/adapters/alwaysOnline.d.ts +0 -14
  117. package/dist/adapters/alwaysOnline.js +0 -17
  118. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  119. package/dist/adapters/inMemoryStorage.js +0 -110
  120. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  121. package/dist/ai-sdk/coordinatedTool.js +0 -134
  122. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  123. package/dist/ai-sdk/coordinationContext.js +0 -106
  124. package/dist/ai-sdk/index.d.ts +0 -121
  125. package/dist/ai-sdk/index.js +0 -121
  126. package/dist/ai-sdk/wrap.d.ts +0 -65
  127. package/dist/ai-sdk/wrap.js +0 -39
  128. package/dist/auth/index.d.ts +0 -1
  129. package/dist/auth/index.js +0 -8
  130. package/dist/batching/index.d.ts +0 -55
  131. package/dist/batching/index.js +0 -147
  132. package/dist/client/Ablo.d.ts +0 -231
  133. package/dist/client/Ablo.js +0 -160
  134. package/dist/client/abloClient.d.ts +0 -309
  135. package/dist/client/abloClient.js +0 -13
  136. package/dist/client/clientPrelude.d.ts +0 -52
  137. package/dist/client/clientPrelude.js +0 -60
  138. package/dist/client/consoleLogger.d.ts +0 -35
  139. package/dist/client/consoleLogger.js +0 -44
  140. package/dist/client/coreClient.d.ts +0 -60
  141. package/dist/client/coreClient.js +0 -118
  142. package/dist/client/createInternalComponents.d.ts +0 -50
  143. package/dist/client/createInternalComponents.js +0 -98
  144. package/dist/client/createModelProxy.d.ts +0 -248
  145. package/dist/client/createModelProxy.js +0 -884
  146. package/dist/client/humans.d.ts +0 -69
  147. package/dist/client/humans.js +0 -78
  148. package/dist/client/modelRegistration.d.ts +0 -10
  149. package/dist/client/modelRegistration.js +0 -312
  150. package/dist/client/options.d.ts +0 -461
  151. package/dist/client/options.js +0 -7
  152. package/dist/client/reactiveEngine.d.ts +0 -53
  153. package/dist/client/reactiveEngine.js +0 -688
  154. package/dist/client/resourceTypes.d.ts +0 -12
  155. package/dist/client/resourceTypes.js +0 -10
  156. package/dist/client/schemaConfig.d.ts +0 -44
  157. package/dist/client/schemaConfig.js +0 -185
  158. package/dist/client/storeCluster.d.ts +0 -47
  159. package/dist/client/storeCluster.js +0 -118
  160. package/dist/client/storeLifecycle.d.ts +0 -61
  161. package/dist/client/storeLifecycle.js +0 -231
  162. package/dist/client/validateAbloOptions.d.ts +0 -42
  163. package/dist/client/validateAbloOptions.js +0 -43
  164. package/dist/client/wsMutationExecutor.d.ts +0 -27
  165. package/dist/client/wsMutationExecutor.js +0 -72
  166. package/dist/context.d.ts +0 -42
  167. package/dist/context.js +0 -81
  168. package/dist/coordination/ClaimLog.d.ts +0 -26
  169. package/dist/coordination/ClaimLog.js +0 -32
  170. package/dist/coordination/index.d.ts +0 -1
  171. package/dist/coordination/index.js +0 -8
  172. package/dist/core/index.d.ts +0 -33
  173. package/dist/core/index.js +0 -48
  174. package/dist/docs/catalog.d.ts +0 -72
  175. package/dist/docs/catalog.js +0 -230
  176. package/dist/docs/index.d.ts +0 -10
  177. package/dist/docs/index.js +0 -10
  178. package/dist/environment.d.ts +0 -1
  179. package/dist/environment.js +0 -8
  180. package/dist/interfaces/index.d.ts +0 -311
  181. package/dist/interfaces/index.js +0 -9
  182. package/dist/keys/index.d.ts +0 -1
  183. package/dist/keys/index.js +0 -8
  184. package/dist/mutators/RecordingMutation.d.ts +0 -36
  185. package/dist/mutators/RecordingMutation.js +0 -182
  186. package/dist/mutators/Transaction.d.ts +0 -40
  187. package/dist/mutators/Transaction.js +0 -58
  188. package/dist/mutators/UndoManager.d.ts +0 -258
  189. package/dist/mutators/UndoManager.js +0 -658
  190. package/dist/mutators/defineMutators.d.ts +0 -60
  191. package/dist/mutators/defineMutators.js +0 -18
  192. package/dist/mutators/inverseOp.d.ts +0 -126
  193. package/dist/mutators/inverseOp.js +0 -71
  194. package/dist/mutators/mutateActions.d.ts +0 -45
  195. package/dist/mutators/mutateActions.js +0 -105
  196. package/dist/mutators/readerActions.d.ts +0 -33
  197. package/dist/mutators/readerActions.js +0 -57
  198. package/dist/mutators/undoApply.d.ts +0 -51
  199. package/dist/mutators/undoApply.js +0 -117
  200. package/dist/policy/index.d.ts +0 -21
  201. package/dist/policy/index.js +0 -20
  202. package/dist/query/QueryProcessor.d.ts +0 -75
  203. package/dist/query/QueryProcessor.js +0 -255
  204. package/dist/query/client.d.ts +0 -64
  205. package/dist/query/client.js +0 -138
  206. package/dist/query/types.d.ts +0 -85
  207. package/dist/query/types.js +0 -16
  208. package/dist/react/AbloProvider.d.ts +0 -242
  209. package/dist/react/AbloProvider.js +0 -458
  210. package/dist/react/ClientSideSuspense.d.ts +0 -36
  211. package/dist/react/ClientSideSuspense.js +0 -17
  212. package/dist/react/DefaultFallback.d.ts +0 -24
  213. package/dist/react/DefaultFallback.js +0 -43
  214. package/dist/react/context.d.ts +0 -55
  215. package/dist/react/context.js +0 -29
  216. package/dist/react/createAbloReact.d.ts +0 -56
  217. package/dist/react/createAbloReact.js +0 -51
  218. package/dist/react/index.d.ts +0 -62
  219. package/dist/react/index.js +0 -69
  220. package/dist/react/internalContext.d.ts +0 -33
  221. package/dist/react/internalContext.js +0 -3
  222. package/dist/react/useAblo.d.ts +0 -82
  223. package/dist/react/useAblo.js +0 -120
  224. package/dist/react/useCurrentUserId.d.ts +0 -22
  225. package/dist/react/useCurrentUserId.js +0 -34
  226. package/dist/react/useErrorListener.d.ts +0 -20
  227. package/dist/react/useErrorListener.js +0 -38
  228. package/dist/react/useMutationFailureListener.d.ts +0 -26
  229. package/dist/react/useMutationFailureListener.js +0 -38
  230. package/dist/react/useMutators.d.ts +0 -56
  231. package/dist/react/useMutators.js +0 -84
  232. package/dist/react/useReactive.d.ts +0 -35
  233. package/dist/react/useReactive.js +0 -123
  234. package/dist/react/useSyncStatus.d.ts +0 -59
  235. package/dist/react/useSyncStatus.js +0 -76
  236. package/dist/react/useUndoScope.d.ts +0 -34
  237. package/dist/react/useUndoScope.js +0 -81
  238. package/dist/schema/coordination.d.ts +0 -112
  239. package/dist/schema/coordination.js +0 -133
  240. package/dist/schema/ddl.d.ts +0 -97
  241. package/dist/schema/ddl.js +0 -491
  242. package/dist/schema/ddlLock.d.ts +0 -35
  243. package/dist/schema/ddlLock.js +0 -46
  244. package/dist/schema/diff.d.ts +0 -225
  245. package/dist/schema/diff.js +0 -289
  246. package/dist/schema/generate.d.ts +0 -19
  247. package/dist/schema/generate.js +0 -86
  248. package/dist/schema/index.d.ts +0 -42
  249. package/dist/schema/index.js +0 -80
  250. package/dist/schema/queries.d.ts +0 -201
  251. package/dist/schema/queries.js +0 -144
  252. package/dist/schema/select.d.ts +0 -40
  253. package/dist/schema/select.js +0 -90
  254. package/dist/schema/serialize.d.ts +0 -115
  255. package/dist/schema/serialize.js +0 -265
  256. package/dist/schema/sugar.d.ts +0 -109
  257. package/dist/schema/sugar.js +0 -83
  258. package/dist/schema/syncDeltaRow.d.ts +0 -6
  259. package/dist/schema/syncDeltaRow.js +0 -6
  260. package/dist/server/adapter.d.ts +0 -173
  261. package/dist/server/adapter.js +0 -18
  262. package/dist/server/commit.d.ts +0 -107
  263. package/dist/server/commit.js +0 -1
  264. package/dist/server/index.d.ts +0 -14
  265. package/dist/server/index.js +0 -2
  266. package/dist/server/readConfig.d.ts +0 -80
  267. package/dist/server/readConfig.js +0 -8
  268. package/dist/server/storageMode.d.ts +0 -23
  269. package/dist/server/storageMode.js +0 -17
  270. package/dist/source/adapter.d.ts +0 -83
  271. package/dist/source/adapter.js +0 -24
  272. package/dist/source/adapters/drizzle.d.ts +0 -48
  273. package/dist/source/adapters/drizzle.js +0 -219
  274. package/dist/source/adapters/kysely.d.ts +0 -42
  275. package/dist/source/adapters/kysely.js +0 -205
  276. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  277. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  278. package/dist/source/adapters/memory.d.ts +0 -13
  279. package/dist/source/adapters/memory.js +0 -130
  280. package/dist/source/adapters/prisma.d.ts +0 -63
  281. package/dist/source/adapters/prisma.js +0 -202
  282. package/dist/source/conformance.d.ts +0 -37
  283. package/dist/source/conformance.js +0 -215
  284. package/dist/source/connector.d.ts +0 -95
  285. package/dist/source/connector.js +0 -266
  286. package/dist/source/connectorProtocol.d.ts +0 -154
  287. package/dist/source/connectorProtocol.js +0 -163
  288. package/dist/source/contract.d.ts +0 -195
  289. package/dist/source/contract.js +0 -164
  290. package/dist/source/factory.d.ts +0 -92
  291. package/dist/source/factory.js +0 -286
  292. package/dist/source/idempotency.d.ts +0 -61
  293. package/dist/source/idempotency.js +0 -144
  294. package/dist/source/index.d.ts +0 -23
  295. package/dist/source/index.js +0 -30
  296. package/dist/source/migrations.d.ts +0 -21
  297. package/dist/source/migrations.js +0 -103
  298. package/dist/source/next.d.ts +0 -32
  299. package/dist/source/next.js +0 -25
  300. package/dist/source/pushQueue.d.ts +0 -134
  301. package/dist/source/pushQueue.js +0 -256
  302. package/dist/source/signing.d.ts +0 -92
  303. package/dist/source/signing.js +0 -162
  304. package/dist/source/types.d.ts +0 -401
  305. package/dist/source/types.js +0 -59
  306. package/dist/storeContract.d.ts +0 -145
  307. package/dist/storeContract.js +0 -12
  308. package/dist/stores/DatabaseManager.d.ts +0 -107
  309. package/dist/stores/DatabaseManager.js +0 -388
  310. package/dist/stores/ObjectStore.d.ts +0 -115
  311. package/dist/stores/ObjectStore.js +0 -393
  312. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  313. package/dist/stores/ObjectStoreContract.js +0 -1
  314. package/dist/stores/StoreManager.d.ts +0 -114
  315. package/dist/stores/StoreManager.js +0 -304
  316. package/dist/stores/SyncActionStore.d.ts +0 -99
  317. package/dist/stores/SyncActionStore.js +0 -506
  318. package/dist/stores/openIDBWithTimeout.d.ts +0 -65
  319. package/dist/stores/openIDBWithTimeout.js +0 -153
  320. package/dist/stores/syncAction.d.ts +0 -26
  321. package/dist/stores/syncAction.js +0 -16
  322. package/dist/surface.d.ts +0 -36
  323. package/dist/surface.js +0 -75
  324. package/dist/sync/BootstrapFetcher.d.ts +0 -284
  325. package/dist/sync/BootstrapFetcher.js +0 -964
  326. package/dist/sync/ConnectionManager.d.ts +0 -8
  327. package/dist/sync/ConnectionManager.js +0 -8
  328. package/dist/sync/OnDemandLoader.d.ts +0 -231
  329. package/dist/sync/OnDemandLoader.js +0 -743
  330. package/dist/sync/SubscriptionManager.d.ts +0 -159
  331. package/dist/sync/SubscriptionManager.js +0 -243
  332. package/dist/sync/SyncWebSocket.d.ts +0 -173
  333. package/dist/sync/SyncWebSocket.js +0 -438
  334. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  335. package/dist/sync/awaitClaimGrant.js +0 -6
  336. package/dist/sync/bootstrapApply.d.ts +0 -73
  337. package/dist/sync/bootstrapApply.js +0 -73
  338. package/dist/sync/commitFrames.d.ts +0 -8
  339. package/dist/sync/commitFrames.js +0 -8
  340. package/dist/sync/contextPorts.d.ts +0 -18
  341. package/dist/sync/contextPorts.js +0 -31
  342. package/dist/sync/createClaimStream.d.ts +0 -7
  343. package/dist/sync/createClaimStream.js +0 -7
  344. package/dist/sync/createPresenceStream.d.ts +0 -69
  345. package/dist/sync/createPresenceStream.js +0 -200
  346. package/dist/sync/createSnapshot.d.ts +0 -29
  347. package/dist/sync/createSnapshot.js +0 -118
  348. package/dist/sync/credentialLifecycle.d.ts +0 -7
  349. package/dist/sync/credentialLifecycle.js +0 -7
  350. package/dist/sync/deltaPipeline.d.ts +0 -114
  351. package/dist/sync/deltaPipeline.js +0 -278
  352. package/dist/sync/groupChange.d.ts +0 -116
  353. package/dist/sync/groupChange.js +0 -244
  354. package/dist/sync/participants.d.ts +0 -132
  355. package/dist/sync/participants.js +0 -346
  356. package/dist/sync/persistedPrefix.d.ts +0 -12
  357. package/dist/sync/persistedPrefix.js +0 -22
  358. package/dist/sync/schemaDrift.d.ts +0 -55
  359. package/dist/sync/schemaDrift.js +0 -53
  360. package/dist/sync/schemas.d.ts +0 -71
  361. package/dist/sync/schemas.js +0 -94
  362. package/dist/sync/syncCursor.d.ts +0 -40
  363. package/dist/sync/syncCursor.js +0 -55
  364. package/dist/sync/syncPlan.d.ts +0 -54
  365. package/dist/sync/syncPlan.js +0 -50
  366. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  367. package/dist/sync/wsFrameHandlers.js +0 -8
  368. package/dist/syncLog/contract.d.ts +0 -20
  369. package/dist/syncLog/contract.js +0 -19
  370. package/dist/syncLog/index.d.ts +0 -1
  371. package/dist/syncLog/index.js +0 -1
  372. package/dist/transaction/ablo.d.ts +0 -88
  373. package/dist/transaction/ablo.js +0 -33
  374. package/dist/transaction/auth/apiKey.d.ts +0 -152
  375. package/dist/transaction/auth/apiKey.js +0 -419
  376. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  377. package/dist/transaction/auth/bootstrapScope.js +0 -1
  378. package/dist/transaction/auth/capability.d.ts +0 -212
  379. package/dist/transaction/auth/capability.js +0 -224
  380. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  381. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  382. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  383. package/dist/transaction/auth/credentialPolicy.js +0 -125
  384. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  385. package/dist/transaction/auth/credentialSource.js +0 -55
  386. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  387. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  388. package/dist/transaction/auth/identity.d.ts +0 -55
  389. package/dist/transaction/auth/identity.js +0 -210
  390. package/dist/transaction/auth/index.d.ts +0 -162
  391. package/dist/transaction/auth/index.js +0 -304
  392. package/dist/transaction/auth/schemas.d.ts +0 -59
  393. package/dist/transaction/auth/schemas.js +0 -85
  394. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  395. package/dist/transaction/auth/sessionMint.js +0 -85
  396. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -56
  397. package/dist/transaction/coordination/awaitClaimGrant.js +0 -124
  398. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -84
  399. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -108
  400. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  401. package/dist/transaction/coordination/claimMeta.js +0 -52
  402. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  403. package/dist/transaction/coordination/createClaimStream.js +0 -475
  404. package/dist/transaction/coordination/events.d.ts +0 -74
  405. package/dist/transaction/coordination/events.js +0 -7
  406. package/dist/transaction/coordination/index.d.ts +0 -19
  407. package/dist/transaction/coordination/index.js +0 -45
  408. package/dist/transaction/coordination/locator.d.ts +0 -104
  409. package/dist/transaction/coordination/locator.js +0 -102
  410. package/dist/transaction/coordination/schema.d.ts +0 -1536
  411. package/dist/transaction/coordination/schema.js +0 -1177
  412. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  413. package/dist/transaction/coordination/targetConflict.js +0 -107
  414. package/dist/transaction/coordination/trace.d.ts +0 -78
  415. package/dist/transaction/coordination/trace.js +0 -138
  416. package/dist/transaction/durableWrites.d.ts +0 -62
  417. package/dist/transaction/durableWrites.js +0 -71
  418. package/dist/transaction/environment.d.ts +0 -105
  419. package/dist/transaction/environment.js +0 -108
  420. package/dist/transaction/errorCodes.d.ts +0 -403
  421. package/dist/transaction/errorCodes.js +0 -484
  422. package/dist/transaction/errors.d.ts +0 -428
  423. package/dist/transaction/errors.js +0 -686
  424. package/dist/transaction/footprint.d.ts +0 -111
  425. package/dist/transaction/footprint.js +0 -0
  426. package/dist/transaction/index.d.ts +0 -20
  427. package/dist/transaction/index.js +0 -20
  428. package/dist/transaction/keys/index.d.ts +0 -87
  429. package/dist/transaction/keys/index.js +0 -207
  430. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  431. package/dist/transaction/log/syncDeltaRow.js +0 -95
  432. package/dist/transaction/logPosition.d.ts +0 -97
  433. package/dist/transaction/logPosition.js +0 -125
  434. package/dist/transaction/logger.d.ts +0 -16
  435. package/dist/transaction/logger.js +0 -7
  436. package/dist/transaction/observability.d.ts +0 -53
  437. package/dist/transaction/observability.js +0 -19
  438. package/dist/transaction/persistence.d.ts +0 -12
  439. package/dist/transaction/persistence.js +0 -11
  440. package/dist/transaction/plugin.d.ts +0 -285
  441. package/dist/transaction/plugin.js +0 -106
  442. package/dist/transaction/policy/types.d.ts +0 -217
  443. package/dist/transaction/policy/types.js +0 -126
  444. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  445. package/dist/transaction/resources/functionalUpdate.js +0 -87
  446. package/dist/transaction/resources/httpResources.d.ts +0 -321
  447. package/dist/transaction/resources/httpResources.js +0 -7
  448. package/dist/transaction/resources/modelOperations.d.ts +0 -427
  449. package/dist/transaction/resources/modelOperations.js +0 -12
  450. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  451. package/dist/transaction/resources/mutationOptions.js +0 -9
  452. package/dist/transaction/resources/where.d.ts +0 -101
  453. package/dist/transaction/resources/where.js +0 -115
  454. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  455. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  456. package/dist/transaction/schema/field.d.ts +0 -120
  457. package/dist/transaction/schema/field.js +0 -265
  458. package/dist/transaction/schema/fieldRef.d.ts +0 -38
  459. package/dist/transaction/schema/fieldRef.js +0 -11
  460. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  461. package/dist/transaction/schema/loadStrategy.js +0 -46
  462. package/dist/transaction/schema/model.d.ts +0 -379
  463. package/dist/transaction/schema/model.js +0 -123
  464. package/dist/transaction/schema/openapi.d.ts +0 -58
  465. package/dist/transaction/schema/openapi.js +0 -501
  466. package/dist/transaction/schema/relation.d.ts +0 -204
  467. package/dist/transaction/schema/relation.js +0 -104
  468. package/dist/transaction/schema/residency.d.ts +0 -29
  469. package/dist/transaction/schema/residency.js +0 -25
  470. package/dist/transaction/schema/roles.d.ts +0 -249
  471. package/dist/transaction/schema/roles.js +0 -230
  472. package/dist/transaction/schema/schema.d.ts +0 -351
  473. package/dist/transaction/schema/schema.js +0 -325
  474. package/dist/transaction/schema/tenancy.d.ts +0 -139
  475. package/dist/transaction/schema/tenancy.js +0 -190
  476. package/dist/transaction/transactionLayer.d.ts +0 -82
  477. package/dist/transaction/transactionLayer.js +0 -24
  478. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  479. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  480. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  481. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  482. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  483. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  484. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  485. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  486. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  487. package/dist/transaction/transport/commitFrames.js +0 -134
  488. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  489. package/dist/transaction/transport/connectionManager.js +0 -673
  490. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  491. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  492. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  493. package/dist/transaction/transport/heartbeat.js +0 -93
  494. package/dist/transaction/transport/httpClient.d.ts +0 -131
  495. package/dist/transaction/transport/httpClient.js +0 -146
  496. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  497. package/dist/transaction/transport/httpOptions.js +0 -12
  498. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  499. package/dist/transaction/transport/httpTransport.js +0 -1388
  500. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  501. package/dist/transaction/transport/networkProbe.js +0 -207
  502. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  503. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  504. package/dist/transaction/transport/wsTransport.d.ts +0 -574
  505. package/dist/transaction/transport/wsTransport.js +0 -1023
  506. package/dist/transaction/types/assertExact.d.ts +0 -17
  507. package/dist/transaction/types/assertExact.js +0 -1
  508. package/dist/transaction/types/global.d.ts +0 -107
  509. package/dist/transaction/types/global.js +0 -40
  510. package/dist/transaction/types/index.d.ts +0 -205
  511. package/dist/transaction/types/index.js +0 -56
  512. package/dist/transaction/types/modelData.d.ts +0 -10
  513. package/dist/transaction/types/modelData.js +0 -9
  514. package/dist/transaction/types/participant.d.ts +0 -20
  515. package/dist/transaction/types/participant.js +0 -10
  516. package/dist/transaction/types/streams.d.ts +0 -550
  517. package/dist/transaction/types/streams.js +0 -11
  518. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  519. package/dist/transaction/utils/asyncIterator.js +0 -135
  520. package/dist/transaction/utils/duration.d.ts +0 -50
  521. package/dist/transaction/utils/duration.js +0 -77
  522. package/dist/transaction/utils/json.d.ts +0 -57
  523. package/dist/transaction/utils/json.js +0 -276
  524. package/dist/transaction/wire/accountResponses.d.ts +0 -420
  525. package/dist/transaction/wire/accountResponses.js +0 -290
  526. package/dist/transaction/wire/auth.d.ts +0 -56
  527. package/dist/transaction/wire/auth.js +0 -63
  528. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  529. package/dist/transaction/wire/bootstrapReason.js +0 -8
  530. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  531. package/dist/transaction/wire/claimEvent.js +0 -73
  532. package/dist/transaction/wire/claims.d.ts +0 -530
  533. package/dist/transaction/wire/claims.js +0 -327
  534. package/dist/transaction/wire/commit.d.ts +0 -603
  535. package/dist/transaction/wire/commit.js +0 -321
  536. package/dist/transaction/wire/delta.d.ts +0 -250
  537. package/dist/transaction/wire/delta.js +0 -147
  538. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  539. package/dist/transaction/wire/errorEnvelope.js +0 -123
  540. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  541. package/dist/transaction/wire/feedCursor.js +0 -82
  542. package/dist/transaction/wire/feedEvent.d.ts +0 -204
  543. package/dist/transaction/wire/feedEvent.js +0 -65
  544. package/dist/transaction/wire/frames.d.ts +0 -194
  545. package/dist/transaction/wire/frames.js +0 -50
  546. package/dist/transaction/wire/inboundFrames.d.ts +0 -562
  547. package/dist/transaction/wire/inboundFrames.js +0 -116
  548. package/dist/transaction/wire/index.d.ts +0 -54
  549. package/dist/transaction/wire/index.js +0 -83
  550. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  551. package/dist/transaction/wire/listEnvelope.js +0 -42
  552. package/dist/transaction/wire/modelMutations.d.ts +0 -31
  553. package/dist/transaction/wire/modelMutations.js +0 -52
  554. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  555. package/dist/transaction/wire/modelResponses.js +0 -43
  556. package/dist/transaction/wire/modelShape.d.ts +0 -78
  557. package/dist/transaction/wire/modelShape.js +0 -74
  558. package/dist/transaction/wire/protocol.d.ts +0 -38
  559. package/dist/transaction/wire/protocol.js +0 -38
  560. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  561. package/dist/transaction/wire/protocolVersion.js +0 -83
  562. package/dist/transactions/mutations/MutationQueue.d.ts +0 -661
  563. package/dist/transactions/mutations/MutationQueue.js +0 -2807
  564. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  565. package/dist/transactions/mutations/MutationStore.js +0 -53
  566. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  567. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  568. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  569. package/dist/transactions/mutations/coalesceRules.js +0 -140
  570. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  571. package/dist/transactions/mutations/commitLatency.js +0 -130
  572. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  573. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  574. package/dist/transactions/mutations/commitPayload.d.ts +0 -165
  575. package/dist/transactions/mutations/commitPayload.js +0 -152
  576. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -63
  577. package/dist/transactions/mutations/deltaConfirmation.js +0 -235
  578. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  579. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  580. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  581. package/dist/transactions/mutations/optimisticApply.js +0 -65
  582. package/dist/transactions/mutations/replayValidation.d.ts +0 -187
  583. package/dist/transactions/mutations/replayValidation.js +0 -164
  584. package/dist/utils/mobxSetup.d.ts +0 -53
  585. package/dist/utils/mobxSetup.js +0 -330
  586. package/dist/views/QueryView.d.ts +0 -79
  587. package/dist/views/QueryView.js +0 -218
  588. package/dist/views/ViewRegistry.d.ts +0 -20
  589. package/dist/views/ViewRegistry.js +0 -55
  590. package/dist/views/incrementalView.d.ts +0 -45
  591. package/dist/views/incrementalView.js +0 -69
  592. package/dist/webhooks/events.d.ts +0 -43
  593. package/dist/webhooks/events.js +0 -42
  594. package/dist/webhooks/index.d.ts +0 -8
  595. package/dist/webhooks/index.js +0 -8
  596. package/dist/wire/index.d.ts +0 -1
  597. package/dist/wire/index.js +0 -8
@@ -1,56 +0,0 @@
1
- /**
2
- * The typed react binding — the schema generic is captured ONCE, at a factory
3
- * call in app code, and every hook the factory returns is born typed. This is
4
- * the shape the reference libraries converged on independently (tRPC's
5
- * `createTRPCReact`, XState's `createActorContext`, react-redux's
6
- * `withTypes`): no module augmentation, no generic parameters at call sites,
7
- * and — once the legacy generic erasure retires — no casts anywhere on the
8
- * path from context to component.
9
- *
10
- * The app's one binding file, by convention:
11
- *
12
- * ```ts
13
- * // lib/ablo.ts
14
- * import { createAbloReact } from '@abloatai/ablo/react';
15
- * import { schema } from './schema';
16
- *
17
- * export const { AbloProvider, useAblo } = createAbloReact(schema);
18
- * ```
19
- *
20
- * Components then import `useAblo` from `lib/ablo` and never spell a type
21
- * argument; `useAblo()` is `Ablo<S> | null`, and a selector's `ablo`
22
- * parameter is the reactive-read view of the same `S`.
23
- */
24
- import { type ReactElement } from 'react';
25
- import { type AbloProviderProps } from './AbloProvider.js';
26
- import { type AbloSelector, type ModelClientSelector, type UseAbloHydratedModelResult, type UseAbloModelOptions, type UseAbloModelResult } from './useAblo.js';
27
- import type { Ablo } from '../client/Ablo.js';
28
- import type { ModelOperations } from '../client/createModelProxy.js';
29
- import type { Schema, SchemaRecord } from '../transaction/schema/schema.js';
30
- /** What a binding returns: the provider and the hook, with `S` fixed. */
31
- export interface AbloReactBinding<S extends SchemaRecord> {
32
- /** `AbloProvider` with its `client` prop typed `Ablo<S>` — same component,
33
- * no per-app generics. */
34
- AbloProvider: (props: AbloProviderProps<S>) => ReactElement;
35
- /** `useAblo` with the schema bound — the same overloads as the global
36
- * hook, minus the type arguments. */
37
- useAblo: {
38
- (): Ablo<S> | null;
39
- <T>(select: AbloSelector<S, T>): T | undefined;
40
- <T, C>(modelClient: ModelOperations<T, C>, id: string, options: UseAbloModelOptions<T> & {
41
- readonly initial: T;
42
- }): UseAbloHydratedModelResult<T>;
43
- <T, C>(select: ModelClientSelector<S, T, C>, id: string, options: UseAbloModelOptions<T> & {
44
- readonly initial: T;
45
- }): UseAbloHydratedModelResult<T>;
46
- <T, C>(modelClient: ModelOperations<T, C>, id: string, options?: UseAbloModelOptions<T>): UseAbloModelResult<T>;
47
- <T, C>(select: ModelClientSelector<S, T, C>, id: string, options?: UseAbloModelOptions<T>): UseAbloModelResult<T>;
48
- };
49
- }
50
- /**
51
- * Bind the react surface to one schema. The schema value is taken for
52
- * inference — write `createAbloReact(schema)`, never a hand-spelled type
53
- * argument — and it is the seam where the binding's own typed context arrives
54
- * when the legacy erasure retires (docs/plans/typed-react-binding.md, step 3).
55
- */
56
- export declare function createAbloReact<S extends SchemaRecord>(schema: Schema<S>): AbloReactBinding<S>;
@@ -1,51 +0,0 @@
1
- 'use client';
2
- /**
3
- * The typed react binding — the schema generic is captured ONCE, at a factory
4
- * call in app code, and every hook the factory returns is born typed. This is
5
- * the shape the reference libraries converged on independently (tRPC's
6
- * `createTRPCReact`, XState's `createActorContext`, react-redux's
7
- * `withTypes`): no module augmentation, no generic parameters at call sites,
8
- * and — once the legacy generic erasure retires — no casts anywhere on the
9
- * path from context to component.
10
- *
11
- * The app's one binding file, by convention:
12
- *
13
- * ```ts
14
- * // lib/ablo.ts
15
- * import { createAbloReact } from '@abloatai/ablo/react';
16
- * import { schema } from './schema';
17
- *
18
- * export const { AbloProvider, useAblo } = createAbloReact(schema);
19
- * ```
20
- *
21
- * Components then import `useAblo` from `lib/ablo` and never spell a type
22
- * argument; `useAblo()` is `Ablo<S> | null`, and a selector's `ablo`
23
- * parameter is the reactive-read view of the same `S`.
24
- */
25
- import { createContext, createElement, useContext } from 'react';
26
- import { AbloProvider } from './AbloProvider.js';
27
- import { useAbloImpl, } from './useAblo.js';
28
- /**
29
- * Bind the react surface to one schema. The schema value is taken for
30
- * inference — write `createAbloReact(schema)`, never a hand-spelled type
31
- * argument — and it is the seam where the binding's own typed context arrives
32
- * when the legacy erasure retires (docs/plans/typed-react-binding.md, step 3).
33
- */
34
- export function createAbloReact(schema) {
35
- void schema;
36
- // The binding's own context — created here, AFTER the schema generic is
37
- // known, so it is typed `Ablo<S>` from birth (the XState
38
- // `createActorContext` shape). A hook that reads it never rebinds and
39
- // never casts; a binding hook mounted under a legacy provider (no bound
40
- // provider in the tree) reads `null` here and falls through to the shared
41
- // implementation's internal-context fallback.
42
- const BoundClientContext = createContext(null);
43
- function BoundAbloProvider(props) {
44
- return createElement(BoundClientContext.Provider, { value: props.client }, createElement((AbloProvider), props));
45
- }
46
- function useBoundAblo(modelOrSelect, id, options) {
47
- const bound = useContext(BoundClientContext);
48
- return useAbloImpl(bound, modelOrSelect, id, options);
49
- }
50
- return { AbloProvider: BoundAbloProvider, useAblo: useBoundAblo };
51
- }
@@ -1,62 +0,0 @@
1
- /**
2
- * React bindings for `@abloatai/ablo`.
3
- *
4
- * # Provider
5
- *
6
- * Build a client once — at module scope or with `useMemo` — and wrap your tree:
7
- *
8
- * const ablo = Ablo({ schema, apiKey })
9
- * <AbloProvider client={ablo} fallback={<Skeleton/>}>
10
- *
11
- * `client` is the only required prop; you construct it, and the provider is the
12
- * thin reactive binding around it. The provider owns the sync-engine and
13
- * multiplayer lifecycle. Its `fallback` gates children until the first sync
14
- * bootstrap completes — pass `fallback="passthrough"` to render children
15
- * immediately. `userId` is optional and informational.
16
- *
17
- * {@link ClientSideSuspense} adds a nested gate inside an already-ready
18
- * provider. Reach for it only when a heavy subtree, such as a canvas, needs its
19
- * own gate while the rest of the app renders right away; the provider-level
20
- * `fallback` is the usual path.
21
- *
22
- * # Data hooks
23
- *
24
- * useAblo((ablo) => ablo.tasks.local.retrieve(id)) — subscribe to a local snapshot (the main read API)
25
- * useAblo() — the typed client, for callbacks and effects:
26
- * synchronous local reads (`ablo.<model>.local.retrieve`/`local.list`),
27
- * async server reads (`retrieve`/`list`),
28
- * and writes (`create`/`update`/`delete`)
29
- * useMutators(defs, opts?) — define custom mutators
30
- * useUndoScope(name) — per-surface undo and redo
31
- *
32
- * # Status and errors
33
- *
34
- * useSyncStatus() — a discriminated-union snapshot of the sync lifecycle
35
- * useErrorListener(cb) — an imperative error callback, for telemetry or toasts
36
- * useCurrentUserId() — the provider's `userId` prop
37
- *
38
- * # Multiplayer
39
- *
40
- * Multiplayer is always available, because `<AbloProvider>` always constructs a
41
- * client:
42
- *
43
- * useAblo((ablo) => ablo.<model>.claim.state(...)) — reactive coordination reads
44
- * useJoin({ scope }) — join a scope to get its peers and claims
45
- */
46
- export type { DefaultSyncShape, ResolveSchema, ResolveUserMeta, ResolveClaimMeta, ResolveModelKey, } from '../transaction/types/global.js';
47
- export { AbloProvider, useJoin, usePeers, useSync, useSyncStore, type AbloProviderProps, type ParticipantScope, type ParticipantStatus, type UseJoinOptions, type UseJoinReturn, } from './AbloProvider.js';
48
- export { ClientSideSuspense, type ClientSideSuspenseProps, } from './ClientSideSuspense.js';
49
- export { DefaultFallback } from './DefaultFallback.js';
50
- export type { SyncStoreContract } from './context.js';
51
- export { useSyncStatus, type SyncStatusSnapshot, } from './useSyncStatus.js';
52
- export { useErrorListener } from './useErrorListener.js';
53
- export { useMutationFailureListener, type MutationFailurePayload, } from './useMutationFailureListener.js';
54
- export { useCurrentUserId } from './useCurrentUserId.js';
55
- export { createAbloReact, type AbloReactBinding } from './createAbloReact.js';
56
- export { useReactive } from './useReactive.js';
57
- export type { MutateActions } from '../mutators/mutateActions.js';
58
- export type { ReaderActions, ReaderFindOptions } from '../mutators/readerActions.js';
59
- export { useMutators, type MutatorInvokers, type InvokerFor, type UseMutatorsOptions, } from './useMutators.js';
60
- export { useUndoScope, type UseUndoScopeResult } from './useUndoScope.js';
61
- export { useAblo, type UseAbloHydratedModelResult, type UseAbloModelOptions, type UseAbloModelResult, } from './useAblo.js';
62
- export { ModelScope } from '../transaction/types/index.js';
@@ -1,69 +0,0 @@
1
- /**
2
- * React bindings for `@abloatai/ablo`.
3
- *
4
- * # Provider
5
- *
6
- * Build a client once — at module scope or with `useMemo` — and wrap your tree:
7
- *
8
- * const ablo = Ablo({ schema, apiKey })
9
- * <AbloProvider client={ablo} fallback={<Skeleton/>}>
10
- *
11
- * `client` is the only required prop; you construct it, and the provider is the
12
- * thin reactive binding around it. The provider owns the sync-engine and
13
- * multiplayer lifecycle. Its `fallback` gates children until the first sync
14
- * bootstrap completes — pass `fallback="passthrough"` to render children
15
- * immediately. `userId` is optional and informational.
16
- *
17
- * {@link ClientSideSuspense} adds a nested gate inside an already-ready
18
- * provider. Reach for it only when a heavy subtree, such as a canvas, needs its
19
- * own gate while the rest of the app renders right away; the provider-level
20
- * `fallback` is the usual path.
21
- *
22
- * # Data hooks
23
- *
24
- * useAblo((ablo) => ablo.tasks.local.retrieve(id)) — subscribe to a local snapshot (the main read API)
25
- * useAblo() — the typed client, for callbacks and effects:
26
- * synchronous local reads (`ablo.<model>.local.retrieve`/`local.list`),
27
- * async server reads (`retrieve`/`list`),
28
- * and writes (`create`/`update`/`delete`)
29
- * useMutators(defs, opts?) — define custom mutators
30
- * useUndoScope(name) — per-surface undo and redo
31
- *
32
- * # Status and errors
33
- *
34
- * useSyncStatus() — a discriminated-union snapshot of the sync lifecycle
35
- * useErrorListener(cb) — an imperative error callback, for telemetry or toasts
36
- * useCurrentUserId() — the provider's `userId` prop
37
- *
38
- * # Multiplayer
39
- *
40
- * Multiplayer is always available, because `<AbloProvider>` always constructs a
41
- * client:
42
- *
43
- * useAblo((ablo) => ablo.<model>.claim.state(...)) — reactive coordination reads
44
- * useJoin({ scope }) — join a scope to get its peers and claims
45
- */
46
- // ── Umbrella provider + lifecycle hooks ────────────────────────────
47
- export { AbloProvider, useJoin, usePeers, useSync, useSyncStore, } from './AbloProvider.js';
48
- export { ClientSideSuspense, } from './ClientSideSuspense.js';
49
- export { DefaultFallback } from './DefaultFallback.js';
50
- // ── Status + errors + identity ─────────────────────────────────────
51
- export { useSyncStatus, } from './useSyncStatus.js';
52
- export { useErrorListener } from './useErrorListener.js';
53
- export { useMutationFailureListener, } from './useMutationFailureListener.js';
54
- export { useCurrentUserId } from './useCurrentUserId.js';
55
- // The typed binding — capture the schema generic once, in the app's one
56
- // binding file, and import born-typed hooks everywhere (the tRPC shape).
57
- export { createAbloReact } from './createAbloReact.js';
58
- // ── Primitive for building custom reactive hooks ──────────────────
59
- //
60
- // Consumers building bespoke hooks on top of the SDK should call
61
- // `useReactive(() => compute())` instead of reaching for React's
62
- // lower-level `useSyncExternalStore`. Hides the cached-snapshot
63
- // contract and handles default structural equality for arrays.
64
- export { useReactive } from './useReactive.js';
65
- export { useMutators, } from './useMutators.js';
66
- export { useUndoScope } from './useUndoScope.js';
67
- export { useAblo, } from './useAblo.js';
68
- // ── ModelScope re-export ───────────────────────────────────────────
69
- export { ModelScope } from '../transaction/types/index.js';
@@ -1,33 +0,0 @@
1
- import type { Ablo } from '../client/Ablo.js';
2
- import type { SchemaRecord } from '../transaction/schema/schema.js';
3
- /**
4
- * The context that `<AbloProvider>` populates for its own hooks. It is kept
5
- * separate from the data-hook context, which carries the store and schema,
6
- * because these fields belong to the provider rather than to the store. Read
7
- * them through the typed hooks such as `useCurrentUserId` and
8
- * `useErrorListener` rather than reaching into this context directly.
9
- */
10
- export interface AbloInternalContextValue {
11
- /**
12
- * The application user id, when your app passed one to `<AbloProvider>`. Sync
13
- * identity is derived on the server from the API key, so this is `null`
14
- * unless you set it, and it is not required for sync to work.
15
- */
16
- currentUserId: string | null;
17
- /** Subscribe to provider-level errors: engine errors, bootstrap failures, and session issues. */
18
- subscribeError: (listener: (error: Error) => void) => () => void;
19
- /** Emit an error to every subscribed listener. The provider calls this for you. */
20
- emitError: (error: Error) => void;
21
- /**
22
- * The typed `Ablo` client for this provider, or `null` until the first sync
23
- * bootstrap resolves. It is held here so `useSync()` can return it without
24
- * reaching into the store; the client and the store are sibling objects, and
25
- * neither is derived from the other.
26
- *
27
- * It is typed loosely as `Ablo<SchemaRecord>` because generics do not flow
28
- * through React context. `useSync<R>()` restores the precise type through its
29
- * own generic; the runtime value is the fully typed client.
30
- */
31
- engine: Ablo<SchemaRecord> | null;
32
- }
33
- export declare const AbloInternalContext: import("react").Context<AbloInternalContextValue | null>;
@@ -1,3 +0,0 @@
1
- 'use client';
2
- import { createContext } from 'react';
3
- export const AbloInternalContext = createContext(null);
@@ -1,82 +0,0 @@
1
- import type { Ablo, AbloReads, ModelClaim } from '../client/Ablo.js';
2
- import type { ModelOperations } from '../client/createModelProxy.js';
3
- import type { SchemaRecord } from '../transaction/schema/schema.js';
4
- import type { ResolveSchema } from '../transaction/types/global.js';
5
- /**
6
- * The app's resolved schema-record type. It reads your `Register` module
7
- * augmentation when you declare one and falls back to the loose
8
- * {@link SchemaRecord} otherwise, so `useAblo()` returns a fully typed client
9
- * without you passing `<(typeof schema)['models']>` at every call site.
10
- */
11
- type DefaultModels = ResolveSchema extends {
12
- models: infer M;
13
- } ? M extends SchemaRecord ? M : SchemaRecord : SchemaRecord;
14
- export type ModelClientSelector<R extends SchemaRecord, T, C> = (ablo: AbloReads<R>) => ModelOperations<T, C>;
15
- export type AbloSelector<R extends SchemaRecord, T> = (ablo: AbloReads<R>) => T;
16
- export interface UseAbloModelOptions<T> {
17
- /**
18
- * An initial row, usually from a server component or a route loader. The hook
19
- * returns it until sync delivers a newer row for the same id.
20
- */
21
- readonly initial?: T;
22
- }
23
- export interface UseAbloModelResult<T> {
24
- /** The current row for the id, or `initial` until the row has synced. */
25
- readonly data: T | undefined;
26
- /** The work claims currently held on this row by any participant. */
27
- readonly claims: readonly ModelClaim[];
28
- /** True while another participant holds a claim — handy for disabling UI. */
29
- readonly claimed: boolean;
30
- }
31
- export type UseAbloHydratedModelResult<T> = Omit<UseAbloModelResult<T>, 'data'> & {
32
- readonly data: T;
33
- };
34
- /**
35
- * Reads Ablo from inside an `<AbloProvider>` subtree. Called with no arguments
36
- * it returns the typed client for use in callbacks and effects; called with a
37
- * selector it subscribes the component to a reactive read — such as one
38
- * `ablo.<model>` row — and re-renders when that read changes.
39
- *
40
- * You can call it with no type arguments once you declare the `Register` module
41
- * augmentation (`declare module '@abloatai/ablo' { interface Register {
42
- * Schema: typeof schema } }`); the default type then resolves through your
43
- * schema's models, so call sites stay clean:
44
- *
45
- * **Prefer the binding.** `createAbloReact(schema)` captures the schema once
46
- * in your app's binding file and returns a `useAblo` that needs none of the
47
- * typing arrangements below — no type argument, no `Register` declaration
48
- * (see `react.md`). Passing an explicit schema type argument to THIS hook is
49
- * deprecated in favor of that binding; it keeps working for shared packages
50
- * that cannot bind a concrete schema.
51
- *
52
- * ```ts
53
- * // With the Register augmentation (recommended):
54
- * const ablo = useAblo();
55
- * if (!ablo) return <Loading />;
56
- * const doc = await ablo.documents.retrieve({ id }); // async server read
57
- *
58
- * // Reactive selector (a synchronous local snapshot). The selector's reads
59
- * // are typed as snapshot rows — data fields + computeds, no relation
60
- * // accessors — matching what the hook actually returns:
61
- * const doc = useAblo((ablo) => ablo.documents.local.retrieve(id)) ?? serverDoc;
62
- * const active = useAblo((ablo) => ablo.documents.claim.state({ id }));
63
- *
64
- * // Without the augmentation, pass the schema as a type argument:
65
- * const ablo = useAblo<(typeof schema)['models']>();
66
- * ```
67
- *
68
- * The no-argument form returns `null` while the engine is still bootstrapping.
69
- * Branch on `null` and render a loading state — or gate on `useSyncStatus()`
70
- * reaching `'connected'` — before calling model methods.
71
- */
72
- export declare function useAblo<R extends SchemaRecord = DefaultModels>(): Ablo<R> | null;
73
- export declare function useAblo<R extends SchemaRecord = DefaultModels, T = unknown>(select: AbloSelector<R, T>): T | undefined;
74
- export declare function useAblo<T, C>(modelClient: ModelOperations<T, C>, id: string, options: UseAbloModelOptions<T> & {
75
- readonly initial: T;
76
- }): UseAbloHydratedModelResult<T>;
77
- export declare function useAblo<R extends SchemaRecord = DefaultModels, T = Record<string, unknown>, C = unknown>(select: ModelClientSelector<R, T, C>, id: string, options: UseAbloModelOptions<T> & {
78
- readonly initial: T;
79
- }): UseAbloHydratedModelResult<T>;
80
- export declare function useAblo<T, C>(modelClient: ModelOperations<T, C>, id: string, options?: UseAbloModelOptions<T>): UseAbloModelResult<T>;
81
- export declare function useAblo<R extends SchemaRecord = DefaultModels, T = Record<string, unknown>, C = unknown>(select: ModelClientSelector<R, T, C>, id: string, options?: UseAbloModelOptions<T>): UseAbloModelResult<T>;
82
- export {};
@@ -1,120 +0,0 @@
1
- 'use client';
2
- import { useContext, useEffect, useState } from 'react';
3
- import { AbloInternalContext } from './internalContext.js';
4
- import { getModelClientMeta } from '../client/createModelProxy.js';
5
- import { Model } from '../Model.js';
6
- import { useReactive } from './useReactive.js';
7
- const EMPTY_CLAIMS = Object.freeze([]);
8
- /**
9
- * Restore the caller's schema generics on the context-held engine. React
10
- * context erases generics (see `AbloInternalContextValue.engine`), so this is
11
- * the one deliberate rebind point: the runtime value is the fully typed
12
- * client, and `R` is the compile-time view the calling hook declared.
13
- */
14
- function rebindEngine(engine) {
15
- return engine;
16
- }
17
- /**
18
- * The reactive-read view of a client — the identical runtime object, with
19
- * model reads typed as snapshot rows, because everything a selector returns
20
- * is converted through `snapshotValue` before the hook hands it back. Same
21
- * generic in and out, so this compiles with no schema rebinding.
22
- */
23
- function reactiveReads(engine) {
24
- return engine;
25
- }
26
- function readModelResult(engine, modelClient, id, initial) {
27
- if (!modelClient || id === undefined) {
28
- return { data: initial, claims: EMPTY_CLAIMS, claimed: false };
29
- }
30
- const data = snapshotValue(modelClient.local.retrieve(id) ?? initial);
31
- const meta = getModelClientMeta(modelClient);
32
- const claims = meta && engine
33
- ? engine.claims.list({ model: meta.key, id })
34
- : EMPTY_CLAIMS;
35
- return { data, claims, claimed: claims.length > 0 };
36
- }
37
- /**
38
- * Projects a reactive read into the value that `useReactive` caches and
39
- * returns.
40
- *
41
- * For a `Model`, this reads the row's fields through `toReactiveSnapshot`
42
- * rather than returning the instance itself. Property access is what subscribes
43
- * the reaction to those fields, so the read has to happen inside this tracked
44
- * function; returning the live instance without reading its fields would leave
45
- * the component blind to later edits. The fresh object it produces also lets
46
- * `useReactive`'s equality check detect an in-place update.
47
- */
48
- function snapshotValue(value) {
49
- if (value instanceof Model) {
50
- return value.toReactiveSnapshot();
51
- }
52
- if (Array.isArray(value)) {
53
- return value.map((item) => snapshotValue(item));
54
- }
55
- return value;
56
- }
57
- export function useAblo(modelOrSelect, id, options) {
58
- return useAbloImpl(null, modelOrSelect, id, options);
59
- }
60
- /**
61
- * @internal The one implementation behind `useAblo` and the bound hooks a
62
- * `createAbloReact` binding returns — written once so the reactive read path
63
- * cannot fork between the global hook and a factory's.
64
- *
65
- * `boundClient` is a binding's own context value — typed `Ablo<S>` at the
66
- * factory, so that path never rebinds and never casts. `null` means "no
67
- * binding provider in this tree": the global hook always passes it, and a
68
- * binding hook mounted under a legacy provider falls through to the erased
69
- * internal context, which is what keeps both mounts working while the last
70
- * legacy mount migrates.
71
- */
72
- export function useAbloImpl(boundClient, modelOrSelect, id, options) {
73
- const ctx = useContext(AbloInternalContext);
74
- // The bound client wins — it is already `Ablo<R>`, no rebinding. The
75
- // fallback is the ONE remaining schema rebind in the SDK; it retires with
76
- // the last legacy provider mount (docs/plans/typed-react-binding.md).
77
- const engine = boundClient ?? (ctx?.engine ? rebindEngine(ctx.engine) : null);
78
- const initial = options?.initial;
79
- const isSelectorOnly = typeof modelOrSelect === 'function' && id === undefined;
80
- const modelClient = typeof modelOrSelect === 'function' && id !== undefined
81
- ? engine
82
- ? modelOrSelect(reactiveReads(engine))
83
- : undefined
84
- : typeof modelOrSelect === 'function'
85
- ? undefined
86
- : modelOrSelect;
87
- // Claims arrive through an event emitter (engine.claims), not through MobX, so
88
- // the useReactive reactions below cannot track them; we bridge changes with a
89
- // setState bump instead. Only the model-row form (`id !== undefined`) reads
90
- // claims, so we subscribe only when `id` is set. The selector-only form never
91
- // reads claims, and subscribing it to the workspace-wide claim stream would
92
- // re-render and recompute it on every claim or presence change anywhere — a
93
- // real storm during AI editing or live collaboration — for a value that cannot
94
- // change.
95
- const [claimVersion, setClaimVersion] = useState(0);
96
- useEffect(() => {
97
- if (!engine || id === undefined)
98
- return;
99
- return engine.claims.onChange(() => { setClaimVersion((version) => version + 1); });
100
- }, [engine, id]);
101
- const selected = useReactive(() => {
102
- if (!engine || !isSelectorOnly || typeof modelOrSelect !== 'function') {
103
- return undefined;
104
- }
105
- // The selector runs against the real engine — reads inside it return the
106
- // pool's model instances. `snapshotValue` then converts the RESULT to
107
- // plain snapshot rows, which is what the selector's `AbloReads`
108
- // parameter type already promised.
109
- return snapshotValue(modelOrSelect(reactiveReads(engine)));
110
- });
111
- const modelResult = useReactive(() => {
112
- void claimVersion;
113
- return readModelResult(engine, modelClient, id, initial);
114
- });
115
- if (isSelectorOnly)
116
- return selected;
117
- if (modelOrSelect)
118
- return modelResult;
119
- return engine;
120
- }
@@ -1,22 +0,0 @@
1
- /**
2
- * Returns the application user id passed to the nearest `<AbloProvider>`, or
3
- * `null` when your app did not provide one.
4
- *
5
- * Sync identity is resolved on the server from the API key or session, so this
6
- * value is not required for sync to connect. It is here for your app's own
7
- * fields — an assignee id, a presence label, a permission check — where the
8
- * current user matters to your data rather than to the sync layer. Reach for it
9
- * in leaf components that need the id, for example to fill in a mutation
10
- * payload.
11
- *
12
- * @example
13
- * function TaskRow({ id }) {
14
- * const userId = useCurrentUserId();
15
- * const ablo = useAblo();
16
- * if (!userId) return null;
17
- * return <button onClick={() => ablo?.tasks.update({ id, data: { assigneeId: userId } })}>
18
- * Assign to me
19
- * </button>;
20
- * }
21
- */
22
- export declare function useCurrentUserId(): string | null;
@@ -1,34 +0,0 @@
1
- 'use client';
2
- import { useContext } from 'react';
3
- import { AbloInternalContext } from './internalContext.js';
4
- import { AbloValidationError } from '../transaction/errors.js';
5
- /**
6
- * Returns the application user id passed to the nearest `<AbloProvider>`, or
7
- * `null` when your app did not provide one.
8
- *
9
- * Sync identity is resolved on the server from the API key or session, so this
10
- * value is not required for sync to connect. It is here for your app's own
11
- * fields — an assignee id, a presence label, a permission check — where the
12
- * current user matters to your data rather than to the sync layer. Reach for it
13
- * in leaf components that need the id, for example to fill in a mutation
14
- * payload.
15
- *
16
- * @example
17
- * function TaskRow({ id }) {
18
- * const userId = useCurrentUserId();
19
- * const ablo = useAblo();
20
- * if (!userId) return null;
21
- * return <button onClick={() => ablo?.tasks.update({ id, data: { assigneeId: userId } })}>
22
- * Assign to me
23
- * </button>;
24
- * }
25
- */
26
- export function useCurrentUserId() {
27
- const ctx = useContext(AbloInternalContext);
28
- if (!ctx) {
29
- throw new AbloValidationError('useCurrentUserId: no <AbloProvider> mounted above this component. ' +
30
- 'Wrap your tree with <AbloProvider ...> from ' +
31
- '@abloatai/ablo/react.', { code: 'no_ablo_provider' });
32
- }
33
- return ctx.currentUserId;
34
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * Registers a callback that runs whenever the provider surfaces an error. This
3
- * covers engine errors such as bootstrap failures and mutation rejections,
4
- * WebSocket errors, and uncaught exceptions thrown inside `postBootstrap`
5
- * hooks.
6
- *
7
- * Use it for side effects that should not cause a re-render — telemetry,
8
- * logging, or a toast. The callback is held in a ref, so a re-render does not
9
- * resubscribe.
10
- *
11
- * @example
12
- * function ErrorToaster() {
13
- * useErrorListener((err) => {
14
- * toast.error(err.message);
15
- * Sentry.captureException(err);
16
- * });
17
- * return null;
18
- * }
19
- */
20
- export declare function useErrorListener(listener: (error: Error) => void): void;
@@ -1,38 +0,0 @@
1
- 'use client';
2
- import { useContext, useEffect, useRef } from 'react';
3
- import { AbloInternalContext } from './internalContext.js';
4
- import { AbloValidationError } from '../transaction/errors.js';
5
- /**
6
- * Registers a callback that runs whenever the provider surfaces an error. This
7
- * covers engine errors such as bootstrap failures and mutation rejections,
8
- * WebSocket errors, and uncaught exceptions thrown inside `postBootstrap`
9
- * hooks.
10
- *
11
- * Use it for side effects that should not cause a re-render — telemetry,
12
- * logging, or a toast. The callback is held in a ref, so a re-render does not
13
- * resubscribe.
14
- *
15
- * @example
16
- * function ErrorToaster() {
17
- * useErrorListener((err) => {
18
- * toast.error(err.message);
19
- * Sentry.captureException(err);
20
- * });
21
- * return null;
22
- * }
23
- */
24
- export function useErrorListener(listener) {
25
- const ctx = useContext(AbloInternalContext);
26
- if (!ctx) {
27
- throw new AbloValidationError('useErrorListener: no <AbloProvider> mounted above this component. ' +
28
- 'Wrap your tree with <AbloProvider ...> from @abloatai/ablo/react.', { code: 'no_ablo_provider' });
29
- }
30
- // Hold the latest callback in a ref so the subscription stays stable across
31
- // renders. Late-binding the listener this way lets callers pass an inline
32
- // arrow without resubscribing on every render.
33
- const ref = useRef(listener);
34
- ref.current = listener;
35
- useEffect(() => {
36
- return ctx.subscribeError((err) => { ref.current(err); });
37
- }, [ctx]);
38
- }
@@ -1,26 +0,0 @@
1
- import type { QueuedMutation } from '../transactions/mutations/MutationQueue.js';
2
- export interface MutationFailurePayload {
3
- transaction: QueuedMutation;
4
- error: Error;
5
- permanent?: boolean;
6
- }
7
- /**
8
- * Subscribes a listener to mutation failures. The callback fires whenever the
9
- * transaction queue rolls back an optimistic write — both permanent rejections
10
- * (a validation, foreign-key, or authorization error) and rollbacks after the
11
- * retries are exhausted (for example, the connection drops mid-write).
12
- *
13
- * A single listener mounted near the top of your component tree can turn these
14
- * otherwise-silent rollbacks into toasts or banners. The callback is held in a
15
- * ref, so re-renders do not tear down and re-create the underlying
16
- * subscription.
17
- *
18
- * @example
19
- * function MutationFailureBoundary() {
20
- * useMutationFailureListener(({ transaction, error }) => {
21
- * toast.error(`Couldn't save ${transaction.modelName}: ${error.message}`);
22
- * });
23
- * return null;
24
- * }
25
- */
26
- export declare function useMutationFailureListener(listener: (payload: MutationFailurePayload) => void): void;