@abloatai/ablo 0.35.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 (622) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -1929
  3. package/NOTICE +2 -2
  4. package/README.md +23 -532
  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 -112
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -161
  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 +2 -2
  59. package/docs/api-keys.md +13 -12
  60. package/docs/api.md +15 -53
  61. package/docs/audit.md +4 -3
  62. package/docs/cli.md +11 -11
  63. package/docs/client-behavior.md +9 -9
  64. package/docs/concurrency-convention.md +28 -42
  65. package/docs/coordination.md +228 -86
  66. package/docs/data-sources.md +5 -5
  67. package/docs/debugging.md +34 -12
  68. package/docs/deployment.md +8 -8
  69. package/docs/examples/agent-human.md +4 -4
  70. package/docs/examples/ai-sdk-tool.md +1 -1
  71. package/docs/examples/existing-python-backend.md +15 -4
  72. package/docs/examples/nextjs.md +27 -6
  73. package/docs/examples/scoped-agent.md +3 -3
  74. package/docs/examples/server-agent.md +2 -2
  75. package/docs/groups.md +57 -3
  76. package/docs/guarantees.md +37 -10
  77. package/docs/how-it-works.md +32 -8
  78. package/docs/idempotency.md +6 -6
  79. package/docs/identity.md +24 -24
  80. package/docs/index.md +8 -8
  81. package/docs/integration-guide.md +38 -16
  82. package/docs/internal/README.md +18 -0
  83. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  84. package/docs/internal/agent-orchestration.md +58 -0
  85. package/docs/internal/commit-identifiers.md +91 -0
  86. package/docs/internal/concurrency-open-decisions.md +37 -0
  87. package/docs/internal/data-source-reverse-channel.md +150 -0
  88. package/docs/internal/per-field-conflict-detection.md +165 -0
  89. package/docs/internal/postgres-replication.md +64 -0
  90. package/docs/internal/serializable-schema.md +119 -0
  91. package/docs/internal/structure.md +32 -0
  92. package/docs/mcp.md +9 -9
  93. package/docs/migration.md +37 -18
  94. package/docs/projects.md +1 -1
  95. package/docs/quickstart.md +2 -2
  96. package/docs/react.md +24 -13
  97. package/docs/schema-contract.md +3 -3
  98. package/docs/sessions.md +91 -37
  99. package/docs/webhooks.md +9 -9
  100. package/examples/README.md +2 -2
  101. package/examples/data-source/README.md +1 -1
  102. package/examples/data-source/ablo-driver.ts +1 -1
  103. package/examples/data-source/customer-server.ts +1 -1
  104. package/examples/data-source/run.ts +1 -1
  105. package/examples/data-source/schema.ts +1 -1
  106. package/examples/quickstart.ts +2 -2
  107. package/llms.txt +12 -12
  108. package/package.json +64 -174
  109. package/dist/BaseSyncedStore.d.ts +0 -823
  110. package/dist/BaseSyncedStore.js +0 -1955
  111. package/dist/Database.d.ts +0 -335
  112. package/dist/Database.js +0 -1500
  113. package/dist/InstanceCache.d.ts +0 -233
  114. package/dist/InstanceCache.js +0 -1164
  115. package/dist/LazyReferenceCollection.d.ts +0 -177
  116. package/dist/LazyReferenceCollection.js +0 -461
  117. package/dist/Model.d.ts +0 -444
  118. package/dist/Model.js +0 -909
  119. package/dist/ModelRegistry.d.ts +0 -221
  120. package/dist/ModelRegistry.js +0 -537
  121. package/dist/NetworkMonitor.d.ts +0 -26
  122. package/dist/NetworkMonitor.js +0 -77
  123. package/dist/RuntimeContext.d.ts +0 -52
  124. package/dist/RuntimeContext.js +0 -80
  125. package/dist/SyncClient.d.ts +0 -551
  126. package/dist/SyncClient.js +0 -2199
  127. package/dist/adapters/alwaysOnline.d.ts +0 -14
  128. package/dist/adapters/alwaysOnline.js +0 -17
  129. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  130. package/dist/adapters/inMemoryStorage.js +0 -110
  131. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  132. package/dist/ai-sdk/coordinatedTool.js +0 -134
  133. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  134. package/dist/ai-sdk/coordinationContext.js +0 -106
  135. package/dist/ai-sdk/index.d.ts +0 -121
  136. package/dist/ai-sdk/index.js +0 -121
  137. package/dist/ai-sdk/wrap.d.ts +0 -65
  138. package/dist/ai-sdk/wrap.js +0 -39
  139. package/dist/auth/index.d.ts +0 -1
  140. package/dist/auth/index.js +0 -8
  141. package/dist/batching/index.d.ts +0 -55
  142. package/dist/batching/index.js +0 -147
  143. package/dist/cli.cjs +0 -288600
  144. package/dist/client/Ablo.d.ts +0 -231
  145. package/dist/client/Ablo.js +0 -149
  146. package/dist/client/abloClient.d.ts +0 -309
  147. package/dist/client/abloClient.js +0 -13
  148. package/dist/client/clientPrelude.d.ts +0 -52
  149. package/dist/client/clientPrelude.js +0 -60
  150. package/dist/client/consoleLogger.d.ts +0 -35
  151. package/dist/client/consoleLogger.js +0 -44
  152. package/dist/client/coreClient.d.ts +0 -60
  153. package/dist/client/coreClient.js +0 -118
  154. package/dist/client/createInternalComponents.d.ts +0 -46
  155. package/dist/client/createInternalComponents.js +0 -92
  156. package/dist/client/createModelProxy.d.ts +0 -228
  157. package/dist/client/createModelProxy.js +0 -818
  158. package/dist/client/humans.d.ts +0 -48
  159. package/dist/client/humans.js +0 -52
  160. package/dist/client/modelRegistration.d.ts +0 -10
  161. package/dist/client/modelRegistration.js +0 -312
  162. package/dist/client/options.d.ts +0 -461
  163. package/dist/client/options.js +0 -7
  164. package/dist/client/reactiveEngine.d.ts +0 -48
  165. package/dist/client/reactiveEngine.js +0 -910
  166. package/dist/client/resourceTypes.d.ts +0 -12
  167. package/dist/client/resourceTypes.js +0 -10
  168. package/dist/client/schemaConfig.d.ts +0 -44
  169. package/dist/client/schemaConfig.js +0 -185
  170. package/dist/client/validateAbloOptions.d.ts +0 -42
  171. package/dist/client/validateAbloOptions.js +0 -43
  172. package/dist/client/wsMutationExecutor.d.ts +0 -27
  173. package/dist/client/wsMutationExecutor.js +0 -72
  174. package/dist/context.d.ts +0 -29
  175. package/dist/context.js +0 -58
  176. package/dist/coordination/ClaimLog.d.ts +0 -26
  177. package/dist/coordination/ClaimLog.js +0 -32
  178. package/dist/coordination/index.d.ts +0 -1
  179. package/dist/coordination/index.js +0 -8
  180. package/dist/core/DatabaseManager.d.ts +0 -105
  181. package/dist/core/DatabaseManager.js +0 -387
  182. package/dist/core/QueryProcessor.d.ts +0 -75
  183. package/dist/core/QueryProcessor.js +0 -255
  184. package/dist/core/QueryView.d.ts +0 -79
  185. package/dist/core/QueryView.js +0 -218
  186. package/dist/core/StoreManager.d.ts +0 -112
  187. package/dist/core/StoreManager.js +0 -302
  188. package/dist/core/ViewRegistry.d.ts +0 -20
  189. package/dist/core/ViewRegistry.js +0 -55
  190. package/dist/core/index.d.ts +0 -33
  191. package/dist/core/index.js +0 -48
  192. package/dist/core/openIDBWithTimeout.d.ts +0 -65
  193. package/dist/core/openIDBWithTimeout.js +0 -153
  194. package/dist/core/queryUtils.d.ts +0 -45
  195. package/dist/core/queryUtils.js +0 -69
  196. package/dist/core/storeContract.d.ts +0 -145
  197. package/dist/core/storeContract.js +0 -12
  198. package/dist/docs/catalog.d.ts +0 -72
  199. package/dist/docs/catalog.js +0 -227
  200. package/dist/docs/index.d.ts +0 -10
  201. package/dist/docs/index.js +0 -10
  202. package/dist/environment.d.ts +0 -1
  203. package/dist/environment.js +0 -8
  204. package/dist/interfaces/index.d.ts +0 -311
  205. package/dist/interfaces/index.js +0 -9
  206. package/dist/keys/index.d.ts +0 -1
  207. package/dist/keys/index.js +0 -8
  208. package/dist/mutators/RecordingMutation.d.ts +0 -36
  209. package/dist/mutators/RecordingMutation.js +0 -182
  210. package/dist/mutators/Transaction.d.ts +0 -40
  211. package/dist/mutators/Transaction.js +0 -58
  212. package/dist/mutators/UndoManager.d.ts +0 -258
  213. package/dist/mutators/UndoManager.js +0 -658
  214. package/dist/mutators/defineMutators.d.ts +0 -60
  215. package/dist/mutators/defineMutators.js +0 -18
  216. package/dist/mutators/inverseOp.d.ts +0 -126
  217. package/dist/mutators/inverseOp.js +0 -71
  218. package/dist/mutators/mutateActions.d.ts +0 -45
  219. package/dist/mutators/mutateActions.js +0 -105
  220. package/dist/mutators/readerActions.d.ts +0 -33
  221. package/dist/mutators/readerActions.js +0 -57
  222. package/dist/mutators/undoApply.d.ts +0 -51
  223. package/dist/mutators/undoApply.js +0 -117
  224. package/dist/policy/index.d.ts +0 -21
  225. package/dist/policy/index.js +0 -20
  226. package/dist/query/client.d.ts +0 -61
  227. package/dist/query/client.js +0 -137
  228. package/dist/query/types.d.ts +0 -85
  229. package/dist/query/types.js +0 -16
  230. package/dist/react/AbloProvider.d.ts +0 -230
  231. package/dist/react/AbloProvider.js +0 -455
  232. package/dist/react/ClientSideSuspense.d.ts +0 -36
  233. package/dist/react/ClientSideSuspense.js +0 -17
  234. package/dist/react/DefaultFallback.d.ts +0 -24
  235. package/dist/react/DefaultFallback.js +0 -43
  236. package/dist/react/context.d.ts +0 -55
  237. package/dist/react/context.js +0 -29
  238. package/dist/react/index.d.ts +0 -61
  239. package/dist/react/index.js +0 -66
  240. package/dist/react/internalContext.d.ts +0 -33
  241. package/dist/react/internalContext.js +0 -3
  242. package/dist/react/useAblo.d.ts +0 -75
  243. package/dist/react/useAblo.js +0 -102
  244. package/dist/react/useCurrentUserId.d.ts +0 -22
  245. package/dist/react/useCurrentUserId.js +0 -34
  246. package/dist/react/useErrorListener.d.ts +0 -20
  247. package/dist/react/useErrorListener.js +0 -38
  248. package/dist/react/useMutationFailureListener.d.ts +0 -26
  249. package/dist/react/useMutationFailureListener.js +0 -38
  250. package/dist/react/useMutators.d.ts +0 -56
  251. package/dist/react/useMutators.js +0 -84
  252. package/dist/react/useReactive.d.ts +0 -35
  253. package/dist/react/useReactive.js +0 -123
  254. package/dist/react/useSyncStatus.d.ts +0 -59
  255. package/dist/react/useSyncStatus.js +0 -76
  256. package/dist/react/useUndoScope.d.ts +0 -34
  257. package/dist/react/useUndoScope.js +0 -81
  258. package/dist/schema/coordination.d.ts +0 -112
  259. package/dist/schema/coordination.js +0 -129
  260. package/dist/schema/ddl.d.ts +0 -97
  261. package/dist/schema/ddl.js +0 -491
  262. package/dist/schema/ddlLock.d.ts +0 -35
  263. package/dist/schema/ddlLock.js +0 -46
  264. package/dist/schema/diff.d.ts +0 -225
  265. package/dist/schema/diff.js +0 -289
  266. package/dist/schema/generate.d.ts +0 -19
  267. package/dist/schema/generate.js +0 -86
  268. package/dist/schema/index.d.ts +0 -41
  269. package/dist/schema/index.js +0 -76
  270. package/dist/schema/queries.d.ts +0 -201
  271. package/dist/schema/queries.js +0 -144
  272. package/dist/schema/select.d.ts +0 -40
  273. package/dist/schema/select.js +0 -87
  274. package/dist/schema/serialize.d.ts +0 -115
  275. package/dist/schema/serialize.js +0 -262
  276. package/dist/schema/sugar.d.ts +0 -109
  277. package/dist/schema/sugar.js +0 -83
  278. package/dist/schema/syncDeltaRow.d.ts +0 -6
  279. package/dist/schema/syncDeltaRow.js +0 -6
  280. package/dist/server/adapter.d.ts +0 -173
  281. package/dist/server/adapter.js +0 -18
  282. package/dist/server/commit.d.ts +0 -107
  283. package/dist/server/commit.js +0 -1
  284. package/dist/server/index.d.ts +0 -14
  285. package/dist/server/index.js +0 -2
  286. package/dist/server/readConfig.d.ts +0 -80
  287. package/dist/server/readConfig.js +0 -8
  288. package/dist/server/storageMode.d.ts +0 -23
  289. package/dist/server/storageMode.js +0 -17
  290. package/dist/source/adapter.d.ts +0 -81
  291. package/dist/source/adapter.js +0 -22
  292. package/dist/source/adapters/drizzle.d.ts +0 -48
  293. package/dist/source/adapters/drizzle.js +0 -219
  294. package/dist/source/adapters/kysely.d.ts +0 -42
  295. package/dist/source/adapters/kysely.js +0 -205
  296. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  297. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  298. package/dist/source/adapters/memory.d.ts +0 -13
  299. package/dist/source/adapters/memory.js +0 -130
  300. package/dist/source/adapters/prisma.d.ts +0 -63
  301. package/dist/source/adapters/prisma.js +0 -202
  302. package/dist/source/conformance.d.ts +0 -37
  303. package/dist/source/conformance.js +0 -215
  304. package/dist/source/connector.d.ts +0 -95
  305. package/dist/source/connector.js +0 -266
  306. package/dist/source/connectorProtocol.d.ts +0 -154
  307. package/dist/source/connectorProtocol.js +0 -163
  308. package/dist/source/contract.d.ts +0 -195
  309. package/dist/source/contract.js +0 -164
  310. package/dist/source/factory.d.ts +0 -92
  311. package/dist/source/factory.js +0 -286
  312. package/dist/source/footprint.d.ts +0 -111
  313. package/dist/source/footprint.js +0 -0
  314. package/dist/source/idempotency.d.ts +0 -61
  315. package/dist/source/idempotency.js +0 -144
  316. package/dist/source/index.d.ts +0 -23
  317. package/dist/source/index.js +0 -30
  318. package/dist/source/migrations.d.ts +0 -21
  319. package/dist/source/migrations.js +0 -103
  320. package/dist/source/next.d.ts +0 -32
  321. package/dist/source/next.js +0 -25
  322. package/dist/source/pushQueue.d.ts +0 -134
  323. package/dist/source/pushQueue.js +0 -256
  324. package/dist/source/signing.d.ts +0 -92
  325. package/dist/source/signing.js +0 -162
  326. package/dist/source/types.d.ts +0 -401
  327. package/dist/source/types.js +0 -59
  328. package/dist/stores/ObjectStore.d.ts +0 -115
  329. package/dist/stores/ObjectStore.js +0 -393
  330. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  331. package/dist/stores/ObjectStoreContract.js +0 -1
  332. package/dist/stores/SyncActionStore.d.ts +0 -97
  333. package/dist/stores/SyncActionStore.js +0 -504
  334. package/dist/stores/syncAction.d.ts +0 -26
  335. package/dist/stores/syncAction.js +0 -16
  336. package/dist/surface.d.ts +0 -36
  337. package/dist/surface.js +0 -75
  338. package/dist/sync/BootstrapFetcher.d.ts +0 -280
  339. package/dist/sync/BootstrapFetcher.js +0 -962
  340. package/dist/sync/ConnectionManager.d.ts +0 -8
  341. package/dist/sync/ConnectionManager.js +0 -8
  342. package/dist/sync/OnDemandLoader.d.ts +0 -228
  343. package/dist/sync/OnDemandLoader.js +0 -742
  344. package/dist/sync/SubscriptionManager.d.ts +0 -159
  345. package/dist/sync/SubscriptionManager.js +0 -243
  346. package/dist/sync/SyncWebSocket.d.ts +0 -173
  347. package/dist/sync/SyncWebSocket.js +0 -438
  348. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  349. package/dist/sync/awaitClaimGrant.js +0 -6
  350. package/dist/sync/bootstrapApply.d.ts +0 -70
  351. package/dist/sync/bootstrapApply.js +0 -73
  352. package/dist/sync/commitFrames.d.ts +0 -8
  353. package/dist/sync/commitFrames.js +0 -8
  354. package/dist/sync/contextPorts.d.ts +0 -18
  355. package/dist/sync/contextPorts.js +0 -31
  356. package/dist/sync/createClaimStream.d.ts +0 -7
  357. package/dist/sync/createClaimStream.js +0 -7
  358. package/dist/sync/createPresenceStream.d.ts +0 -69
  359. package/dist/sync/createPresenceStream.js +0 -200
  360. package/dist/sync/createSnapshot.d.ts +0 -29
  361. package/dist/sync/createSnapshot.js +0 -118
  362. package/dist/sync/credentialLifecycle.d.ts +0 -7
  363. package/dist/sync/credentialLifecycle.js +0 -7
  364. package/dist/sync/deltaPipeline.d.ts +0 -113
  365. package/dist/sync/deltaPipeline.js +0 -261
  366. package/dist/sync/groupChange.d.ts +0 -113
  367. package/dist/sync/groupChange.js +0 -242
  368. package/dist/sync/participants.d.ts +0 -115
  369. package/dist/sync/participants.js +0 -344
  370. package/dist/sync/persistedPrefix.d.ts +0 -12
  371. package/dist/sync/persistedPrefix.js +0 -22
  372. package/dist/sync/schemaDrift.d.ts +0 -55
  373. package/dist/sync/schemaDrift.js +0 -53
  374. package/dist/sync/schemas.d.ts +0 -70
  375. package/dist/sync/schemas.js +0 -94
  376. package/dist/sync/syncCursor.d.ts +0 -40
  377. package/dist/sync/syncCursor.js +0 -55
  378. package/dist/sync/syncPlan.d.ts +0 -54
  379. package/dist/sync/syncPlan.js +0 -50
  380. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  381. package/dist/sync/wsFrameHandlers.js +0 -8
  382. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  383. package/dist/testing/fixtures/bootstrap.js +0 -59
  384. package/dist/testing/fixtures/deltas.d.ts +0 -83
  385. package/dist/testing/fixtures/deltas.js +0 -136
  386. package/dist/testing/fixtures/httpResponses.d.ts +0 -70
  387. package/dist/testing/fixtures/httpResponses.js +0 -90
  388. package/dist/testing/fixtures/models.d.ts +0 -83
  389. package/dist/testing/fixtures/models.js +0 -272
  390. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  391. package/dist/testing/helpers/reactWrapper.js +0 -67
  392. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  393. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  394. package/dist/testing/helpers/wait.d.ts +0 -30
  395. package/dist/testing/helpers/wait.js +0 -49
  396. package/dist/testing/index.d.ts +0 -23
  397. package/dist/testing/index.js +0 -33
  398. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  399. package/dist/testing/mocks/FakeDatabase.js +0 -10
  400. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  401. package/dist/testing/mocks/MockMutationExecutor.js +0 -186
  402. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  403. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  404. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  405. package/dist/testing/mocks/MockSyncContext.js +0 -72
  406. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  407. package/dist/testing/mocks/MockSyncStore.js +0 -171
  408. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  409. package/dist/testing/mocks/MockWebSocket.js +0 -118
  410. package/dist/transaction/ablo.d.ts +0 -88
  411. package/dist/transaction/ablo.js +0 -33
  412. package/dist/transaction/auth/apiKey.d.ts +0 -152
  413. package/dist/transaction/auth/apiKey.js +0 -419
  414. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  415. package/dist/transaction/auth/bootstrapScope.js +0 -1
  416. package/dist/transaction/auth/capability.d.ts +0 -177
  417. package/dist/transaction/auth/capability.js +0 -199
  418. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  419. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  420. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  421. package/dist/transaction/auth/credentialPolicy.js +0 -125
  422. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  423. package/dist/transaction/auth/credentialSource.js +0 -55
  424. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  425. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  426. package/dist/transaction/auth/identity.d.ts +0 -55
  427. package/dist/transaction/auth/identity.js +0 -210
  428. package/dist/transaction/auth/index.d.ts +0 -162
  429. package/dist/transaction/auth/index.js +0 -304
  430. package/dist/transaction/auth/schemas.d.ts +0 -59
  431. package/dist/transaction/auth/schemas.js +0 -85
  432. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  433. package/dist/transaction/auth/sessionMint.js +0 -85
  434. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
  435. package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
  436. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
  437. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
  438. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  439. package/dist/transaction/coordination/claimMeta.js +0 -52
  440. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  441. package/dist/transaction/coordination/createClaimStream.js +0 -475
  442. package/dist/transaction/coordination/events.d.ts +0 -74
  443. package/dist/transaction/coordination/events.js +0 -7
  444. package/dist/transaction/coordination/index.d.ts +0 -19
  445. package/dist/transaction/coordination/index.js +0 -44
  446. package/dist/transaction/coordination/locator.d.ts +0 -83
  447. package/dist/transaction/coordination/locator.js +0 -82
  448. package/dist/transaction/coordination/schema.d.ts +0 -1473
  449. package/dist/transaction/coordination/schema.js +0 -1013
  450. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  451. package/dist/transaction/coordination/targetConflict.js +0 -103
  452. package/dist/transaction/coordination/trace.d.ts +0 -78
  453. package/dist/transaction/coordination/trace.js +0 -138
  454. package/dist/transaction/durableWrites.d.ts +0 -62
  455. package/dist/transaction/durableWrites.js +0 -71
  456. package/dist/transaction/environment.d.ts +0 -105
  457. package/dist/transaction/environment.js +0 -108
  458. package/dist/transaction/errorCodes.d.ts +0 -403
  459. package/dist/transaction/errorCodes.js +0 -480
  460. package/dist/transaction/errors.d.ts +0 -428
  461. package/dist/transaction/errors.js +0 -686
  462. package/dist/transaction/index.d.ts +0 -20
  463. package/dist/transaction/index.js +0 -20
  464. package/dist/transaction/keys/index.d.ts +0 -87
  465. package/dist/transaction/keys/index.js +0 -207
  466. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  467. package/dist/transaction/log/syncDeltaRow.js +0 -95
  468. package/dist/transaction/logPosition.d.ts +0 -97
  469. package/dist/transaction/logPosition.js +0 -125
  470. package/dist/transaction/logger.d.ts +0 -16
  471. package/dist/transaction/logger.js +0 -7
  472. package/dist/transaction/observability.d.ts +0 -53
  473. package/dist/transaction/observability.js +0 -19
  474. package/dist/transaction/persistence.d.ts +0 -12
  475. package/dist/transaction/persistence.js +0 -11
  476. package/dist/transaction/plugin.d.ts +0 -192
  477. package/dist/transaction/plugin.js +0 -87
  478. package/dist/transaction/policy/types.d.ts +0 -217
  479. package/dist/transaction/policy/types.js +0 -126
  480. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  481. package/dist/transaction/resources/functionalUpdate.js +0 -87
  482. package/dist/transaction/resources/httpResources.d.ts +0 -266
  483. package/dist/transaction/resources/httpResources.js +0 -7
  484. package/dist/transaction/resources/modelOperations.d.ts +0 -319
  485. package/dist/transaction/resources/modelOperations.js +0 -12
  486. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  487. package/dist/transaction/resources/mutationOptions.js +0 -9
  488. package/dist/transaction/resources/where.d.ts +0 -85
  489. package/dist/transaction/resources/where.js +0 -70
  490. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  491. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  492. package/dist/transaction/schema/field.d.ts +0 -126
  493. package/dist/transaction/schema/field.js +0 -265
  494. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  495. package/dist/transaction/schema/loadStrategy.js +0 -46
  496. package/dist/transaction/schema/model.d.ts +0 -379
  497. package/dist/transaction/schema/model.js +0 -123
  498. package/dist/transaction/schema/openapi.d.ts +0 -57
  499. package/dist/transaction/schema/openapi.js +0 -340
  500. package/dist/transaction/schema/relation.d.ts +0 -199
  501. package/dist/transaction/schema/relation.js +0 -104
  502. package/dist/transaction/schema/residency.d.ts +0 -29
  503. package/dist/transaction/schema/residency.js +0 -25
  504. package/dist/transaction/schema/roles.d.ts +0 -249
  505. package/dist/transaction/schema/roles.js +0 -230
  506. package/dist/transaction/schema/schema.d.ts +0 -324
  507. package/dist/transaction/schema/schema.js +0 -305
  508. package/dist/transaction/schema/tenancy.d.ts +0 -139
  509. package/dist/transaction/schema/tenancy.js +0 -190
  510. package/dist/transaction/transactionLayer.d.ts +0 -82
  511. package/dist/transaction/transactionLayer.js +0 -24
  512. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  513. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  514. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  515. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  516. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  517. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  518. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  519. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  520. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  521. package/dist/transaction/transport/commitFrames.js +0 -134
  522. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  523. package/dist/transaction/transport/connectionManager.js +0 -673
  524. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  525. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  526. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  527. package/dist/transaction/transport/heartbeat.js +0 -93
  528. package/dist/transaction/transport/httpClient.d.ts +0 -123
  529. package/dist/transaction/transport/httpClient.js +0 -145
  530. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  531. package/dist/transaction/transport/httpOptions.js +0 -12
  532. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  533. package/dist/transaction/transport/httpTransport.js +0 -1276
  534. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  535. package/dist/transaction/transport/networkProbe.js +0 -207
  536. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  537. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  538. package/dist/transaction/transport/wsTransport.d.ts +0 -576
  539. package/dist/transaction/transport/wsTransport.js +0 -1017
  540. package/dist/transaction/types/assertExact.d.ts +0 -17
  541. package/dist/transaction/types/assertExact.js +0 -1
  542. package/dist/transaction/types/global.d.ts +0 -107
  543. package/dist/transaction/types/global.js +0 -40
  544. package/dist/transaction/types/index.d.ts +0 -205
  545. package/dist/transaction/types/index.js +0 -56
  546. package/dist/transaction/types/modelData.d.ts +0 -10
  547. package/dist/transaction/types/modelData.js +0 -9
  548. package/dist/transaction/types/participant.d.ts +0 -20
  549. package/dist/transaction/types/participant.js +0 -10
  550. package/dist/transaction/types/streams.d.ts +0 -540
  551. package/dist/transaction/types/streams.js +0 -11
  552. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  553. package/dist/transaction/utils/asyncIterator.js +0 -135
  554. package/dist/transaction/utils/duration.d.ts +0 -25
  555. package/dist/transaction/utils/duration.js +0 -45
  556. package/dist/transaction/utils/json.d.ts +0 -57
  557. package/dist/transaction/utils/json.js +0 -276
  558. package/dist/transaction/wire/accountResponses.d.ts +0 -351
  559. package/dist/transaction/wire/accountResponses.js +0 -255
  560. package/dist/transaction/wire/auth.d.ts +0 -49
  561. package/dist/transaction/wire/auth.js +0 -57
  562. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  563. package/dist/transaction/wire/bootstrapReason.js +0 -8
  564. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  565. package/dist/transaction/wire/claimEvent.js +0 -73
  566. package/dist/transaction/wire/claims.d.ts +0 -463
  567. package/dist/transaction/wire/claims.js +0 -229
  568. package/dist/transaction/wire/commit.d.ts +0 -603
  569. package/dist/transaction/wire/commit.js +0 -321
  570. package/dist/transaction/wire/delta.d.ts +0 -250
  571. package/dist/transaction/wire/delta.js +0 -147
  572. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  573. package/dist/transaction/wire/errorEnvelope.js +0 -123
  574. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  575. package/dist/transaction/wire/feedCursor.js +0 -82
  576. package/dist/transaction/wire/feedEvent.d.ts +0 -177
  577. package/dist/transaction/wire/feedEvent.js +0 -39
  578. package/dist/transaction/wire/frames.d.ts +0 -194
  579. package/dist/transaction/wire/frames.js +0 -50
  580. package/dist/transaction/wire/inboundFrames.d.ts +0 -552
  581. package/dist/transaction/wire/inboundFrames.js +0 -116
  582. package/dist/transaction/wire/index.d.ts +0 -50
  583. package/dist/transaction/wire/index.js +0 -74
  584. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  585. package/dist/transaction/wire/listEnvelope.js +0 -42
  586. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  587. package/dist/transaction/wire/modelResponses.js +0 -43
  588. package/dist/transaction/wire/protocol.d.ts +0 -38
  589. package/dist/transaction/wire/protocol.js +0 -38
  590. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  591. package/dist/transaction/wire/protocolVersion.js +0 -83
  592. package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
  593. package/dist/transactions/mutations/MutationQueue.js +0 -2797
  594. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  595. package/dist/transactions/mutations/MutationStore.js +0 -53
  596. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  597. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  598. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  599. package/dist/transactions/mutations/coalesceRules.js +0 -140
  600. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  601. package/dist/transactions/mutations/commitLatency.js +0 -130
  602. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  603. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  604. package/dist/transactions/mutations/commitPayload.d.ts +0 -164
  605. package/dist/transactions/mutations/commitPayload.js +0 -152
  606. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
  607. package/dist/transactions/mutations/deltaConfirmation.js +0 -233
  608. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  609. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  610. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  611. package/dist/transactions/mutations/optimisticApply.js +0 -65
  612. package/dist/transactions/mutations/replayValidation.d.ts +0 -186
  613. package/dist/transactions/mutations/replayValidation.js +0 -163
  614. package/dist/utils/mobxSetup.d.ts +0 -53
  615. package/dist/utils/mobxSetup.js +0 -330
  616. package/dist/webhooks/events.d.ts +0 -43
  617. package/dist/webhooks/events.js +0 -42
  618. package/dist/webhooks/index.d.ts +0 -8
  619. package/dist/webhooks/index.js +0 -8
  620. package/dist/wire/index.d.ts +0 -1
  621. package/dist/wire/index.js +0 -8
  622. package/docs/interaction-model.md +0 -99
@@ -1,118 +0,0 @@
1
- /**
2
- * The core client over the socket: the stateless surface plus the live feed
3
- * (ADR 0016). `Ablo({ ..., plugins: [] })` returns this — the empty list says
4
- * it plainly: nothing beyond the core. Reads and writes travel over
5
- * request-response, exactly as they do for the `transport: 'http'` client;
6
- * the socket adds push — deltas, presence frames, and the claim lifecycle
7
- * (granted, queued, lost) — without a local copy of anything.
8
- *
9
- * This is the membership test made constructible: a caller with no socket
10
- * loses only push, and polls instead; a caller with this client gets the
11
- * push back and still never holds a store it did not ask for. It also
12
- * satisfies the core coordination ports structurally — `awaitClaimGrant`
13
- * needs only `subscribe`, which this client has.
14
- */
15
- import { createAbloHttpClient, } from '../transaction/transport/httpClient.js';
16
- import { WsTransport } from '../transaction/transport/wsTransport.js';
17
- import { createClaimStream } from '../sync/createClaimStream.js';
18
- import { AbloConnectionError } from '../transaction/errors.js';
19
- /** How long `connect()` waits before reporting the feed did not come up. */
20
- const CONNECT_TIMEOUT_MS = 10_000;
21
- export function createCoreClient(args) {
22
- const { options } = args;
23
- // The stateless surface — the same construction `transport: 'http'` uses,
24
- // fed the same option slice. The endpoint-form `apiKey` (or the legacy
25
- // `authEndpoint`) mints and renews exactly as it does there.
26
- const http = createAbloHttpClient({
27
- schema: options.schema,
28
- apiKey: options.apiKey ?? options.authEndpoint,
29
- baseURL: args.baseUrl,
30
- fetch: options.fetch,
31
- defaultHeaders: options.defaultHeaders,
32
- defaultQuery: options.defaultQuery,
33
- dangerouslyAllowBrowser: options.dangerouslyAllowBrowser,
34
- observability: args.observability,
35
- durableWrites: options.durableWrites,
36
- // Forwarding the compatibility aliases IS the compatibility: a caller still
37
- // on the old pair reaches the HTTP client only through here, so this hand-off
38
- // has to outlive the deprecation notice. It goes when the aliases do.
39
- // eslint-disable-next-line @typescript-eslint/no-deprecated -- see above
40
- commitOutbox: options.commitOutbox,
41
- // eslint-disable-next-line @typescript-eslint/no-deprecated -- see above
42
- commitOutboxScope: options.commitOutboxScope,
43
- });
44
- // The live feed. Constructed eagerly (a socket object holds no connection
45
- // until `connect()`), with identity riding the bearer — the server never
46
- // reads identity fields from the client.
47
- const socket = new WsTransport({
48
- baseUrl: args.baseUrl,
49
- kind: args.kind,
50
- getAuthToken: args.getAuthToken,
51
- syncGroups: [...args.syncGroups],
52
- collaborationEvents: [...(options.collaborationEvents ?? [])],
53
- logger: args.logger,
54
- observability: args.observability,
55
- });
56
- // Claim push is core coordination: the stream attaches to the socket now
57
- // and starts reporting the moment the feed opens.
58
- const claims = createClaimStream({ participantId: args.participantId, logger: args.logger }, socket);
59
- function connect(opts) {
60
- if (socket.isConnected())
61
- return Promise.resolve();
62
- const timeoutMs = opts?.timeoutMs ?? CONNECT_TIMEOUT_MS;
63
- return new Promise((resolve, reject) => {
64
- const offs = [];
65
- let done = false;
66
- const settle = (fn) => {
67
- if (done)
68
- return;
69
- done = true;
70
- clearTimeout(timer);
71
- for (const off of offs)
72
- off();
73
- fn();
74
- };
75
- offs.push(socket.subscribe('connected', () => { settle(resolve); }));
76
- offs.push(socket.subscribe('handshake_failed', (event) => {
77
- settle(() => {
78
- reject(new AbloConnectionError(`The live feed's connection was refused (close code ${event.code}). ` +
79
- 'Check the credential and the server URL; reads and writes still work without the feed.', { code: 'ws_not_ready' }));
80
- });
81
- }));
82
- offs.push(socket.subscribe('reconnect_failed', ({ attempts }) => {
83
- settle(() => {
84
- reject(new AbloConnectionError(`The live feed did not come up after ${attempts} attempts. ` +
85
- 'Reads and writes still work without it; call connect() again to retry.', { code: 'ws_not_ready' }));
86
- });
87
- }));
88
- const timer = setTimeout(() => {
89
- settle(() => {
90
- reject(new AbloConnectionError(`The live feed did not connect within ${timeoutMs}ms. ` +
91
- 'Reads and writes still work without it; call connect() again to retry.', { code: 'ws_not_ready' }));
92
- });
93
- }, timeoutMs);
94
- socket.connect();
95
- });
96
- }
97
- // The feed members layered over the stateless surface. `dispose` is
98
- // deliberately shadowed: closing the client closes the feed too.
99
- const feed = {
100
- connect,
101
- disconnect: () => { socket.disconnect(); },
102
- isConnected: () => socket.isConnected(),
103
- subscribe: socket.subscribe.bind(socket),
104
- claims,
105
- dispose: async () => {
106
- claims.dispose();
107
- socket.disconnect();
108
- await http.dispose();
109
- },
110
- };
111
- return new Proxy(http, {
112
- get(target, prop, receiver) {
113
- if (typeof prop === 'string' && prop in feed)
114
- return feed[prop];
115
- return Reflect.get(target, prop, receiver);
116
- },
117
- });
118
- }
@@ -1,46 +0,0 @@
1
- /**
2
- * Builds the internal component graph the client runs on.
3
- *
4
- * From the caller's options and schema this wires together the model registry,
5
- * object pool, bootstrap helper, database, sync client, and hydration
6
- * coordinator. Each component depends on the one before it, so construction
7
- * order matters; keeping it here means the client constructor does not have to
8
- * know that order.
9
- */
10
- import { Database } from '../Database.js';
11
- import { ModelRegistry } from '../ModelRegistry.js';
12
- import { InstanceCache } from '../InstanceCache.js';
13
- import { SyncClient } from '../SyncClient.js';
14
- import { OnDemandLoader } from '../sync/OnDemandLoader.js';
15
- import { BootstrapFetcher } from '../sync/BootstrapFetcher.js';
16
- import type { AuthCredentialSource } from '../transaction/auth/credentialSource.js';
17
- import type { Schema, SchemaRecord } from '../transaction/schema/schema.js';
18
- import { type AbloPersistence } from '../transaction/persistence.js';
19
- import type { DurableWriteStore, DurableWritesConfig } from '../transactions/mutations/durableWriteStore.js';
20
- export interface InternalComponentsInput<S extends SchemaRecord> {
21
- readonly schema: Schema<S>;
22
- /** The WebSocket URL. Used to derive the bootstrap HTTP base URL when the
23
- * caller has not overridden `bootstrapBaseUrl`. */
24
- readonly url: string;
25
- readonly options: {
26
- readonly maxPoolSize?: number;
27
- readonly bootstrapBaseUrl?: string;
28
- readonly syncGroups?: string[];
29
- readonly persistence?: AbloPersistence;
30
- readonly offline?: boolean;
31
- readonly inMemory?: boolean;
32
- readonly durableWrites?: DurableWritesConfig;
33
- /** @deprecated Use `durableWrites`. */
34
- readonly commitOutbox?: DurableWriteStore;
35
- };
36
- readonly auth?: AuthCredentialSource;
37
- }
38
- export interface InternalComponents {
39
- readonly modelRegistry: ModelRegistry;
40
- readonly objectPool: InstanceCache;
41
- readonly bootstrapHelper: BootstrapFetcher;
42
- readonly database: Database;
43
- readonly syncClient: SyncClient;
44
- readonly hydration: OnDemandLoader;
45
- }
46
- export declare function createInternalComponents<S extends SchemaRecord>(input: InternalComponentsInput<S>): InternalComponents;
@@ -1,92 +0,0 @@
1
- /**
2
- * Builds the internal component graph the client runs on.
3
- *
4
- * From the caller's options and schema this wires together the model registry,
5
- * object pool, bootstrap helper, database, sync client, and hydration
6
- * coordinator. Each component depends on the one before it, so construction
7
- * order matters; keeping it here means the client constructor does not have to
8
- * know that order.
9
- */
10
- import { Database } from '../Database.js';
11
- import { ModelRegistry, setActiveRegistry } from '../ModelRegistry.js';
12
- import { InstanceCache } from '../InstanceCache.js';
13
- import { SyncClient } from '../SyncClient.js';
14
- import { OnDemandLoader } from '../sync/OnDemandLoader.js';
15
- import { BootstrapFetcher } from '../sync/BootstrapFetcher.js';
16
- import { loadsAtBootstrap } from '../transaction/schema/loadStrategy.js';
17
- import { resolveBootstrapBaseUrl } from '../transaction/auth/apiKey.js';
18
- import { shouldUseInMemoryPersistence } from '../transaction/persistence.js';
19
- import { resolveDurableWrites } from '../transaction/durableWrites.js';
20
- export function createInternalComponents(input) {
21
- const { schema, url, options, auth } = input;
22
- // The registry is created here, but model registration happens in the caller,
23
- // which owns the schema-to-class translation.
24
- const modelRegistry = new ModelRegistry({
25
- validateOnRegister: false,
26
- allowLateReferences: true,
27
- });
28
- setActiveRegistry(modelRegistry);
29
- const objectPool = new InstanceCache({ maxSize: options.maxPoolSize ?? 10000 }, modelRegistry);
30
- const bootstrapBaseUrl = resolveBootstrapBaseUrl({
31
- url,
32
- bootstrapBaseUrl: options.bootstrapBaseUrl,
33
- });
34
- const bootstrapHelper = new BootstrapFetcher({
35
- baseUrl: bootstrapBaseUrl,
36
- syncGroups: options.syncGroups,
37
- instantModels: deriveInstantModels(schema),
38
- getAuthToken: auth?.getAuthToken,
39
- });
40
- const database = new Database(modelRegistry, bootstrapHelper, {
41
- // By default there is no browser-local durable store unless the caller asks
42
- // for one. Node and edge runtimes always use the in-memory store because
43
- // IndexedDB is unavailable there.
44
- inMemory: shouldUseInMemoryPersistence(options),
45
- });
46
- const durableWrites = resolveDurableWrites(options);
47
- const syncClient = new SyncClient(objectPool, database, durableWrites.store, durableWrites.namespace ?? url);
48
- // Lazy-load lane: hydrates the object pool and IndexedDB on demand for
49
- // entities not in scope at bootstrap (`load: 'lazy'` models, or an entity
50
- // reached by deep link before the pool warmed up). Single-flight, with
51
- // write-through to IndexedDB.
52
- const hydration = new OnDemandLoader({
53
- objectPool,
54
- database,
55
- registry: modelRegistry,
56
- schema,
57
- baseUrl: bootstrapBaseUrl,
58
- getAuthToken: auth?.getAuthToken,
59
- });
60
- // Drop the lazy-lane hydration ledger on reconnect. While connected, the
61
- // WebSocket delta stream keeps hydrated rows fresh so repeat reads serve
62
- // pure-local with no network; after a drop, deltas may have been missed, so
63
- // the next read of each query must re-confirm with the server once.
64
- syncClient.on('sync:reconnecting', () => { hydration.invalidate(); });
65
- return {
66
- modelRegistry,
67
- objectPool,
68
- bootstrapHelper,
69
- database,
70
- syncClient,
71
- hydration,
72
- };
73
- }
74
- /**
75
- * Derives the set of models to fetch in the initial bootstrap request from each
76
- * model's load strategy. Models declared `load: 'lazy'` are left out of the
77
- * bootstrap and fetched on demand instead. The default strategy is
78
- * `'instant'`, which includes the model.
79
- */
80
- function deriveInstantModels(schema) {
81
- const schemaModels = schema.models ?? schema;
82
- return Object.entries(schemaModels).flatMap(([key, def]) => {
83
- if (!def || typeof def !== 'object' || !('load' in def)) {
84
- return [key]; // no load → the default strategy
85
- }
86
- const load = def.load;
87
- if (loadsAtBootstrap(load)) {
88
- return [def.typename ?? key];
89
- }
90
- return [];
91
- });
92
- }
@@ -1,228 +0,0 @@
1
- /**
2
- * Builds the typed client for a single schema model — the object reached as
3
- * `ablo.<model>`.
4
- *
5
- * Each schema model gets one {@link ModelOperations}: the async server reads
6
- * `retrieve` and `list`, the same verbs restricted to the local graph under
7
- * `local`, the writes `create`, `update`, and `delete`, the coordination
8
- * namespace `claim` (callable as `claim({ id })`, plus `claim.state`,
9
- * `claim.queue`, `claim.release`, and `claim.reorder`), `join`, and `onChange`.
10
- * The factory returns a plain object; the client assembles the `ablo.<model>`
11
- * lookup table from one of these per model.
12
- */
13
- import type { ModelTarget } from '../transaction/coordination/schema.js';
14
- import type { ModelRegistry } from '../ModelRegistry.js';
15
- import type { InstanceCache } from '../InstanceCache.js';
16
- import type { SyncClient } from '../SyncClient.js';
17
- import type { OnDemandLoader } from '../sync/OnDemandLoader.js';
18
- import type { JoinedParticipant } from '../sync/participants.js';
19
- import type { Duration, Claim, ClaimHeartbeat, ClaimHeartbeatOptions, HeldClaim, HeldLease, ClaimWaitOptions, Snapshot } from '../transaction/types/streams.js';
20
- export type { ModelListScope, ModelTrackParams, ModelTrackResult, LocalReadOptions, LocalCountOptions, ServerReadOptions, ServerRetrieveOptions, ClaimTargetOptions, ClaimParams, ClaimLookupParams, ClaimReorderParams, ClaimOptions, ClaimReadApi, AwaitedClaimMethod, ClaimApi, ModelRetrieveParams, ModelCreateParams, ModelUpdateParams, ModelDeleteParams, JoinOptions, } from '../transaction/resources/modelOperations.js';
21
- export type { Claim, ClaimHeartbeat, ClaimHeartbeatOptions, HeldClaim, HeldLease };
22
- import type { ClaimApi, JoinOptions, LocalCountOptions, LocalReadOptions } from '../transaction/resources/modelOperations.js';
23
- import type { HttpModelClient } from '../transaction/transport/httpClient.js';
24
- import type { ParticipantKind } from '../transaction/types/participant.js';
25
- export interface ModelClientMeta {
26
- readonly key: string;
27
- readonly typename: string;
28
- }
29
- export declare function getModelClientMeta(modelClient: unknown): ModelClientMeta | undefined;
30
- /**
31
- * The entity a coordination read names, without the sub-entity narrowing —
32
- * projected from {@link ModelTarget} so the two members are spelled once.
33
- */
34
- type EntityHalf = Pick<ModelTarget, 'model' | 'id'>;
35
- export interface ModelCollaboration {
36
- createClaim(options: {
37
- /**
38
- * The locator, in the spelling the SDK surface and the HTTP routes use.
39
- * The canonical {@link ModelTarget} rather than a shape spelled here: this
40
- * boundary is what a claim's narrowing has to cross, and a member missing
41
- * from it dies before the socket sees it.
42
- */
43
- target: ModelTarget;
44
- /** Peer-visible description of the work (`'rewriting the risk section'`). */
45
- description?: string;
46
- ttl?: Duration;
47
- /**
48
- * Block on the server's fair FIFO queue when the target is held, rather
49
- * than failing. Resolves only once the lease is genuinely ours (the head
50
- * of the line). `takeClaim` sets this so writers serialize on contention.
51
- */
52
- queue?: boolean;
53
- /** Reject (don't wait) if the queue is already this deep when we join. */
54
- maxQueueDepth?: number;
55
- }): Promise<Claim>;
56
- createSnapshot(modelKey: string, id: string): Snapshot;
57
- /**
58
- * Current coordination state on a target — who (if anyone) holds it.
59
- * Synchronous reactive snapshot read off the presence/claim stream;
60
- * `null` when the target is free. The wiring site computes it because
61
- * only it knows the local participant id (needed to distinguish "I
62
- * hold it" from "someone else holds it").
63
- *
64
- * Named `state` to match the public `ablo.<model>.claim.state({ id })` read —
65
- * one verb for "who holds this" across every claim surface; the only
66
- * difference is this internal contract takes an explicit `{ model, id }`
67
- * target because it isn't bound to a single model.
68
- */
69
- state(target: EntityHalf): Claim | null;
70
- /**
71
- * The reactive wait queue on a target — the FIFO line of queued claims
72
- * behind the holder. Synchronous snapshot off the synced claim stream.
73
- */
74
- queue(target: EntityHalf): readonly Claim[];
75
- /**
76
- * Re-rank the wait queue on a target (privileged — server-gated). `order` is
77
- * the desired front-of-line ordering, taken from `queue(target)`.
78
- */
79
- reorder(target: EntityHalf, order: readonly Claim[]): void;
80
- /**
81
- * Resolve once no participant holds an active claim on the target.
82
- * The contender's "wait until it's free" — delegates to the claim
83
- * stream's `waitFor`.
84
- */
85
- waitFor(target: EntityHalf, options?: ClaimWaitOptions): Promise<void>;
86
- /**
87
- * The local participant's id. Used to distinguish "I already hold this"
88
- * from "someone else holds it" in `claimOrWait`.
89
- */
90
- readonly selfParticipantId: string;
91
- /**
92
- * The local participant's kind (`'user' | 'agent' | 'system'`). Used to stamp
93
- * the synthesized self-claim returned from `claim.state` when this client
94
- * holds the lease: server presence frames exclude a holder's own claims, so
95
- * the holder builds its own view.
96
- */
97
- readonly selfParticipantKind?: ParticipantKind;
98
- /**
99
- * Subscribes the connection to a scope's sync group(s) — read interest. The
100
- * typed surface calls this on single-entity reads and claim observation so a
101
- * client lands in the same entity-scoped group the holder's claim presence
102
- * fans out on; a peer subscribed only to broader `org:` or `user:` groups
103
- * would otherwise never see claim broadcasts. Fire-and-forget and best-effort:
104
- * read interest must never make a read reject or stall. Optional so minimal
105
- * test doubles can omit it.
106
- */
107
- enterScope?(scope: Record<string, string>): void | Promise<void>;
108
- /**
109
- * Pins a scope's sync group(s) — write intent: a row this client holds an
110
- * active claim on stays subscribed regardless of navigation. Same
111
- * fire-and-forget, best-effort semantics as `enterScope`.
112
- */
113
- pinScope?(scope: Record<string, string>): void | Promise<void>;
114
- /**
115
- * Opens a presence and claim subscription on this model's sync group(s) and
116
- * returns the live participant handle. Backs `ablo.<model>.join(ids)`.
117
- * WebSocket only, since presence needs a live socket; it is absent on other
118
- * client constructions, where the proxy throws a clear error.
119
- */
120
- createJoin?(modelKey: string, ids: string | readonly string[], options?: JoinOptions): Promise<JoinedParticipant>;
121
- }
122
- /**
123
- * The synchronous, local-only reads — reached as `ablo.<model>.local.*`.
124
- *
125
- * Every verb mirrors its asynchronous sibling on the base surface, and the one
126
- * word in front is the whole difference. It is a narrowing, not a claim about
127
- * the other side: `retrieve` consults the local graph and then the network,
128
- * while `local.retrieve` is restricted to what is already resident — which is
129
- * also why it can return a value instead of a promise. There is nothing to
130
- * await.
131
- *
132
- * These reads exist only here. Exposing them at the top level too would undo
133
- * the distinction the namespace draws.
134
- */
135
- export interface LocalReads<T> {
136
- /**
137
- * Snapshot of a single row from the local graph. `undefined` when the row is
138
- * not resident — a graph that is still empty, or a `lazy` model not yet
139
- * loaded. Pairs with reactive selectors:
140
- * `useAblo((ablo) => ablo.<model>.local.retrieve(id))`.
141
- */
142
- retrieve(id: string): T | undefined;
143
- /**
144
- * Snapshot of a filtered collection from the local graph. Empty until
145
- * `retrieve`, `list`, or bootstrap has warmed the graph.
146
- */
147
- list(options?: LocalReadOptions<T>): T[];
148
- /** Count rows in the local graph. */
149
- count(options?: LocalCountOptions<T>): number;
150
- }
151
- /**
152
- * What a reactive client adds on top of the base per-model surface: a live
153
- * graph to read (`local`), the synchronous projection of the claim reads, and
154
- * the two subscriptions a persistent socket makes possible.
155
- *
156
- * `claim` is here rather than inherited because the two transports carry
157
- * deliberately different claim types, and the difference is load-bearing: a
158
- * stateless client has no local copy, so `state`/`queue`/`reorder` must be
159
- * awaited, while a reactive client resolves them synchronously — which is
160
- * precisely what lets a React render read claim state inline. The stateless
161
- * form is *derived* from this one through {@link AwaitedClaimMethod}, so the
162
- * only permitted difference between them is that promise wrapper.
163
- */
164
- interface ReactiveModelSurface<T> {
165
- /** The synchronous local-graph reads. */
166
- local: LocalReads<T>;
167
- /**
168
- * Claim a row so other writers wait or are rejected until you're done, and
169
- * inspect or manage that coordination through the same namespace. Call it to
170
- * take a claim handle; reach for its members to observe and steer the wait line:
171
- *
172
- * - `claim.state({ id })` — who holds the row now, or `null` when free
173
- * - `claim.queue({ id })` — who's lined up behind the holder
174
- * - `claim.release({ id })` — drop a claim early (usually implicit on scope exit)
175
- * - `claim.reorder({ id, order })` — re-rank the wait line
176
- *
177
- * ```ts
178
- * const claim = await ablo.weatherReports.claim({
179
- * id: 'report_stockholm',
180
- * description: 'Fetching fresh weather before updating the report.',
181
- * });
182
- * const weather = await getWeather(claim.data.location);
183
- * await ablo.weatherReports.update({
184
- * id: claim.target.id,
185
- * data: { forecast: weather },
186
- * claim,
187
- * });
188
- * await claim.release();
189
- *
190
- * const holder = ablo.weatherReports.claim.state({ id: 'report_stockholm' });
191
- * ```
192
- */
193
- claim: ClaimApi<T>;
194
- /**
195
- * Joins the sync group(s) for one or more rows of this model and returns a
196
- * live participant handle — presence (`.peers`), the scoped claim stream
197
- * (`.claims`), and `.leave()` / `await using` disposal. This is a presence
198
- * subscription: it reports who else is here and what they hold, not row
199
- * values changing — for the latter, use `onChange`.
200
- *
201
- * WebSocket only: presence needs a live socket, so this is absent on HTTP
202
- * clients and throws on any non-WebSocket construction.
203
- *
204
- * ```ts
205
- * await using participant = await ablo.sections.join(sectionIds, { ttl: '5m' });
206
- * participant.peers; // who else is here
207
- * ```
208
- */
209
- join(ids: string | readonly string[], options?: JoinOptions): Promise<JoinedParticipant>;
210
- /** Subscribe to changes; the callback runs on every change. */
211
- onChange(callback: (entities: T[]) => void, options?: LocalReadOptions<T>): () => void;
212
- }
213
- /**
214
- * Everything reachable as `ablo.<model>` on a reactive client.
215
- *
216
- * The base is not written here — it is the transport-independent per-model
217
- * surface, taken whole. A reactive client is that surface plus what a live
218
- * graph makes possible, so this type states the relationship instead of
219
- * restating the members, and a verb added to the base arrives here on its own.
220
- *
221
- * `claim` is the one member the base cannot supply directly: the two forms
222
- * differ by an awaitedness transform, so it is replaced rather than inherited.
223
- * See {@link ReactiveModelSurface}.
224
- */
225
- export type ModelOperations<T, CreateInput> = Omit<HttpModelClient<T, CreateInput>, 'claim'> & ReactiveModelSurface<T>;
226
- export declare function createModelProxy<T, C>(schemaKey: string, registeredModelName: string, objectPool: InstanceCache, syncClient: SyncClient, registry: ModelRegistry, hydration: OnDemandLoader, collaboration?: ModelCollaboration,
227
- /** The client-wide `wait` default; a per-call `wait` still wins over it. */
228
- defaultWait?: 'queued' | 'confirmed'): ModelOperations<T, C>;