@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,574 +0,0 @@
1
- /**
2
- * The duplex transport: a WebSocket connection to the sync server, extracted
3
- * out of the reactive engine's `SyncWebSocket` (ADR 0016). It owns the socket
4
- * lifecycle (connect, reconnect with exponential backoff, disconnect, the
5
- * application-level heartbeat), sends commits, claims, releases, and
6
- * subscription updates over the one connection, correlates their
7
- * acknowledgement frames back to awaiting callers, and dispatches every other
8
- * inbound frame through {@link dispatchWsFrame}.
9
- *
10
- * What it deliberately does not do is materialise: deltas, sync responses,
11
- * and bootstrap payloads are surfaced through protected frame hooks
12
- * ({@link handleDelta} and its siblings) whose defaults just emit, so a
13
- * server-side caller gets the push feed — claim grants, losses, deltas —
14
- * with no store, no cursor, and no renderer. The reactive engine subclasses
15
- * this and overrides the hooks with validation, cursor advancement, and
16
- * bootstrap handling. The membership test (ADR 0016): a caller with no socket
17
- * loses only push — it polls instead; a caller with no reactive layer loses
18
- * the local copy it never wanted.
19
- */
20
- import { EventEmitter } from 'events';
21
- import type { ParticipantKind } from '../types/participant.js';
22
- import type { BootstrapReason } from '../wire/bootstrapReason.js';
23
- import type { ClientSyncDelta } from '../wire/delta.js';
24
- import type { ClaimAcquired, PresenceUpdate, ClaimExpired, ClaimGranted, ClaimHeartbeatAckPayload, ClaimLost, ClaimQueue, ClaimQueued, ClaimRejection, ParticipantClaimPayload, StaleNotification, ReadDependency, TrackDependency } from '../coordination/schema.js';
25
- import { type AuthTokenGetter } from '../auth/credentialSource.js';
26
- import { type CommitAck, type CommitFrameOperation } from './commitFrames.js';
27
- import { type Logger } from '../logger.js';
28
- import { type SocketObservability } from '../observability.js';
29
- export interface SyncCapabilities {
30
- partialBootstrap?: boolean;
31
- compressedDeltas?: boolean;
32
- streamingBootstrap?: boolean;
33
- batchedDeltas?: boolean;
34
- }
35
- export interface WsTransportOptions {
36
- /** Base HTTP URL of the sync server */
37
- baseUrl?: string;
38
- url?: string;
39
- /**
40
- * Engine bookkeeping only. The server is bearer-only — it resolves identity
41
- * from the verified credential and never reads these — and the transport
42
- * itself never reads them either. A bare connection omits them.
43
- */
44
- userId?: string;
45
- organizationId?: string;
46
- lastSyncId?: number;
47
- syncGroups?: string[];
48
- capabilities?: SyncCapabilities;
49
- reconnectDelay?: number;
50
- maxReconnectDelay?: number;
51
- /**
52
- * Collaboration event type keys to listen for (e.g., ['document:selection',
53
- * 'document:cursor']). Wire messages with matching types (underscore format)
54
- * are emitted as events.
55
- *
56
- * Defaults to none. The vocabulary is the application's, not the SDK's, so
57
- * an application names the events it broadcasts rather than inheriting a
58
- * built-in list that would only ever fit one consumer.
59
- */
60
- collaborationEvents?: string[];
61
- /**
62
- * The participant kind declared on the WebSocket upgrade. Defaults to
63
- * `'user'` (session auth, the web app). Agent runtimes pass `'agent'` so the
64
- * server verifies them by capability token instead of session auth. The
65
- * server reads this as the `kind` query parameter.
66
- */
67
- kind?: ParticipantKind;
68
- /**
69
- * The agent's bearer credential — a restricted (`rk_`) API key. When set, it
70
- * is sent in the `ablo.bearer.<token>` WebSocket subprotocol so the credential
71
- * stays out of URLs and proxy logs. Required for `kind: 'agent'` and ignored
72
- * for `kind: 'user'`.
73
- */
74
- capabilityToken?: string;
75
- /**
76
- * Getter for the current credential. When provided, the WebSocket upgrade
77
- * reads it instead of a copied `capabilityToken`, so reconnects always use
78
- * the freshest token from the SDK's single credential source. Preferred over
79
- * `getCapabilityToken`.
80
- */
81
- getAuthToken?: AuthTokenGetter;
82
- /** @deprecated Use `getAuthToken`. Kept for direct low-level callers. */
83
- getCapabilityToken?: AuthTokenGetter;
84
- /**
85
- * Hold the first connection until the owner releases it. While held,
86
- * `connect()` is ignored (debug-logged). A host that builds the socket
87
- * before identity is resolved sets this, seeds the late values (`setKind`,
88
- * `setSyncGroups`, the resume cursor), and calls {@link WsTransport.allowConnect}
89
- * followed by `connect()` — so no caller can open an unscoped connection in
90
- * the window between construction and identity resolution.
91
- */
92
- deferConnect?: boolean;
93
- /** Where the transport logs. Defaults to silent. */
94
- logger?: Logger;
95
- /** Where lifecycle breadcrumbs, socket errors, and coordination outcomes
96
- * are reported. Defaults to silent. */
97
- observability?: SocketObservability;
98
- /** The connectivity signal consulted before connecting, sending, and
99
- * scheduling reconnects. Defaults to always-online, which is correct for a
100
- * server-side host; the browser engine passes its `navigator.onLine`-backed
101
- * provider. */
102
- onlineStatus?: {
103
- isOnline(): boolean;
104
- };
105
- }
106
- /**
107
- * Bootstrap hint from server indicating full or partial bootstrap is needed.
108
- * Properties are optional since server payload structure may vary.
109
- */
110
- export interface BootstrapHint {
111
- tables?: string[];
112
- reason?: BootstrapReason;
113
- staleTables?: string[];
114
- totalDeltaCount?: number;
115
- }
116
- /** Bootstrap data event payload */
117
- export interface BootstrapDataEvent {
118
- entityType: string;
119
- data: unknown;
120
- isComplete: boolean;
121
- cursor?: string;
122
- }
123
- /**
124
- * The presence frame, re-exported at the path consumers already reach it
125
- * through. The declaration lives with the rest of the coordination vocabulary;
126
- * this keeps `import { PresenceUpdate } from '…/wsTransport'` working for
127
- * everything that used to import the hand-written type from here. The local
128
- * `import type` above is what makes this a re-export of a bound name rather
129
- * than a pass-through that leaves the name unusable in this file.
130
- */
131
- export type { PresenceUpdate };
132
- /**
133
- * Core event map — transport-level events that every connection emits.
134
- * SDK consumers extend this with app-specific collaboration events.
135
- */
136
- export interface CoreSyncEventMap {
137
- connected: [];
138
- disconnected: [CloseEvent];
139
- reconnecting: [{
140
- attempt: number;
141
- delay: number;
142
- }];
143
- delta: [ClientSyncDelta];
144
- delta_batch: [ClientSyncDelta[]];
145
- bootstrap_required: [BootstrapHint];
146
- bootstrap_data: [BootstrapDataEvent];
147
- presence_update: [PresenceUpdate];
148
- error: [Error];
149
- session_error: [Error];
150
- /**
151
- * The WebSocket `onclose` fired before `onopen` — the handshake itself
152
- * failed. The browser cannot expose the HTTP status (it shows as code
153
- * 1006 with no reason), so the consumer should run an authenticated
154
- * HTTP probe to distinguish auth failure (session expired) from a
155
- * generic network issue.
156
- */
157
- handshake_failed: [CloseEvent];
158
- reconnect_failed: [{
159
- attempts: number;
160
- }];
161
- /**
162
- * Server-initiated notification that a previously-active claim's
163
- * TTL has expired. Consumers (e.g., the participant SDK) re-mint
164
- * a fresh capability and re-claim, OR accept the drop. The claim
165
- * is already inactive on the server side by the time this fires —
166
- * no client-side action needed unless re-claiming.
167
- */
168
- claim_expired: [ClaimExpired];
169
- /**
170
- * Server rejected an `claim_begin` because another participant
171
- * already holds an open claim on the same target (cooperative
172
- * mutex enforced server-side). Surfaces to the participant-level
173
- * ClaimStream so the caller knows their announce was denied.
174
- * Payload mirrors the wire frame's `payload`.
175
- */
176
- claim_rejected: [ClaimRejection];
177
- /**
178
- * Fair-queue frames (opt-in `queue: true` on `claim_begin`). `claim_acquired`
179
- * means the target was free and the lease is ours immediately; `claim_queued`
180
- * means the claim is waiting in line (carries `position`); `claim_granted`
181
- * means it reached the head and the lease is now ours; `claim_lost` means a
182
- * held/granted claim was taken away (TTL lapse on disconnect, revoke).
183
- */
184
- /**
185
- * Per-entity wait-queue snapshot: `{ target, queue: Claim[] }` with each
186
- * entry `status: 'queued'` + `position`. Broadcast to entity peers on every
187
- * queue mutation — powers the reactive `ablo.<model>.claim.queue({ id })` read.
188
- */
189
- claim_queue: [ClaimQueue];
190
- claim_acquired: [ClaimAcquired];
191
- claim_queued: [ClaimQueued];
192
- claim_granted: [ClaimGranted];
193
- claim_lost: [ClaimLost];
194
- /**
195
- * Reply to an outbound `claim_heartbeat` — the lease's fate: `held` with
196
- * the extended `expiresAt`, `queued` with the current `position`, or
197
- * `lost`. Correlated back to the awaiting caller by `claimId` in the
198
- * claim stream.
199
- */
200
- claim_heartbeat_ack: [ClaimHeartbeatAckPayload];
201
- /**
202
- * A committed write guarded with `onStale: 'notify'` collided with a
203
- * concurrent change. Rather than forcing an outcome, the engine returns the
204
- * conflicting field's current value so the actor — an agent reasoning over the
205
- * change, or a person watching the row — can reconcile it. The commit itself
206
- * succeeded; the held operations were not written, and the actor re-issues
207
- * them once it has reconciled.
208
- */
209
- 'conflict:notified': [{
210
- clientTxId: string;
211
- notifications: StaleNotification[];
212
- }];
213
- }
214
- /**
215
- * Collaboration event — app-specific real-time events (selection, cursors, etc.)
216
- * Each event is a [payload] tuple matching the EventEmitter convention.
217
- */
218
- export type DefaultCollaborationEvents = Record<string, never>;
219
- /**
220
- * Constraint for event maps: every value must be a tuple of handler args.
221
- *
222
- * Why a mapped type and not `Record<string, unknown[]>`?
223
- * `Record<string, ...>` requires an implicit string index signature, which
224
- * TypeScript interfaces don't have. So a closed interface like Ablo's
225
- * `AbloCollaborationEvents` would fail to satisfy `Record<string, unknown[]>`,
226
- * even though every one of its values is a tuple. This mapped form iterates
227
- * over `keyof T` instead of demanding a string index, so it accepts both
228
- * closed interfaces and open Record types — while still enforcing
229
- * "every value is an array."
230
- */
231
- export type EventMap<T> = {
232
- [K in keyof T]: unknown[];
233
- };
234
- /**
235
- * Full event map = core + collaboration events.
236
- * Pass your own TCollaboration to add app-specific events.
237
- */
238
- export type SyncWebSocketEventMap<TCollaboration extends EventMap<TCollaboration> = DefaultCollaborationEvents> = CoreSyncEventMap & TCollaboration;
239
- export declare class WsTransport<TCollaboration extends EventMap<TCollaboration> = DefaultCollaborationEvents> extends EventEmitter {
240
- /**
241
- * Subscribe to events with automatic cleanup.
242
- * Returns unsubscribe function for clean disposal.
243
- */
244
- subscribe<K extends keyof SyncWebSocketEventMap<TCollaboration>>(event: K, handler: (...args: SyncWebSocketEventMap<TCollaboration>[K]) => void): () => void;
245
- /**
246
- * Send a collaboration event (app-specific real-time message).
247
- * The wire format is `{ type: messageType, payload: { ...payload, timestamp } }`.
248
- */
249
- sendCollaborationEvent<K extends string & keyof TCollaboration>(messageType: K, payload: TCollaboration[K] extends [infer P] ? Omit<P & Record<string, unknown>, 'timestamp'> : never): void;
250
- private ws;
251
- protected options: Required<Omit<WsTransportOptions, 'baseUrl' | 'kind' | 'capabilityToken' | 'getAuthToken' | 'getCapabilityToken' | 'deferConnect' | 'logger' | 'observability' | 'onlineStatus'>> & {
252
- baseUrl?: string;
253
- kind?: WsTransportOptions['kind'];
254
- capabilityToken?: WsTransportOptions['capabilityToken'];
255
- getAuthToken?: WsTransportOptions['getAuthToken'];
256
- getCapabilityToken?: WsTransportOptions['getCapabilityToken'];
257
- };
258
- /** The transport's reporting ports, shared with the subclassing engine. */
259
- protected readonly logger: Logger;
260
- protected readonly observability: SocketObservability;
261
- protected readonly onlineStatus: {
262
- isOnline(): boolean;
263
- };
264
- private reconnectAttempts;
265
- /** Stop retrying after this many consecutive failures (backoff caps at 30s, so ~7.5 min total) */
266
- private static readonly MAX_RECONNECT_ATTEMPTS;
267
- private reconnectTimer;
268
- /**
269
- * Application-level heartbeat: ping every 30 seconds and force-close after a
270
- * 10-second silence. The {@link HeartbeatController} holds the timing and the
271
- * zombie-socket rationale; the closures below are the only socket access it
272
- * gets.
273
- */
274
- private readonly heartbeat;
275
- private isConnecting;
276
- private isManualClose;
277
- /** True while the owner still holds the first connection (`deferConnect`).
278
- * `connect()` is ignored until {@link allowConnect} lifts the hold. */
279
- private connectHeld;
280
- /** When true, a session error has been detected (from any path — WS close or HTTP bootstrap).
281
- * Suppresses reconnection and Sentry error capture to avoid cascading noise. */
282
- private _sessionErrorDetected;
283
- /** True once `onopen` has fired at least once on the current socket. Reset each
284
- * time a new socket is created in `connect()`. Used by `onclose` to detect
285
- * handshake failures (close before open) — the one signal we have for "the
286
- * server rejected the upgrade" since browsers hide the HTTP status (e.g.
287
- * 401) behind the opaque 1006 close code. */
288
- private _everOpened;
289
- /**
290
- * Diagnostic snapshot of the last connection lifecycle. Persisted across
291
- * the lifetime of the transport so that any subsequent "not connected"
292
- * rejection can quote the actual root cause (close code + reason + when)
293
- * instead of bottoming out at a generic error string. Browser WS code 1006
294
- * hides the real reason, so we layer on our own signals: `forceCloseReason`
295
- * captures heartbeat trips / send failures, `everOpened` distinguishes
296
- * handshake reject from mid-session drop, and `sessionErrorAt` tells us
297
- * whether reconnect is suppressed.
298
- */
299
- private lastOpenAt;
300
- private lastCloseAt;
301
- private lastCloseCode;
302
- private lastCloseReason;
303
- private lastForceCloseReason;
304
- private sessionErrorAt;
305
- /** Registered collaboration event keys (colon format) for dispatch in onmessage */
306
- private collaborationEventTypes;
307
- /**
308
- * A minimal session adapter handed to the inbound frame dispatch table
309
- * ({@link dispatchWsFrame}). It exposes only the members the handlers touch;
310
- * the closure members read live state so a reassignment here (for example the
311
- * `pendingSubscriptions` reset on close) cannot strand a handler on a stale
312
- * reference. Built in the constructor, after the state it captures exists.
313
- */
314
- private readonly frameSession;
315
- /**
316
- * In-flight `commit` mutation requests keyed by clientTxId. Resolved when
317
- * a matching `mutation_result` frame arrives from the server, or rejected on
318
- * timeout / disconnect. Lets consumers await a server ack for mutations
319
- * sent over the same socket that streams deltas.
320
- */
321
- private pendingMutations;
322
- /**
323
- * In-flight `claim` requests keyed by claimId. Resolved when the matching
324
- * `claim_ack` arrives, or rejected on timeout or disconnect — the same
325
- * request/response pattern as `pendingMutations`, multiplexed over the one
326
- * connection.
327
- */
328
- private pendingClaims;
329
- /**
330
- * In-flight `update_subscription` frames awaiting `subscription_ack`.
331
- * A FIFO queue rather than a keyed Map because the wire ack carries no
332
- * correlation id — the server applies subscription updates in receive
333
- * order and acks in the same order, so `shift()` on ack matches the
334
- * oldest pending request. (Read-interest changes are infrequent and
335
- * usually settle before the next one, so depth is ~1 in practice.)
336
- */
337
- private pendingSubscriptions;
338
- constructor(options: WsTransportOptions);
339
- /**
340
- * One inbound delta, straight off the wire and unvalidated. The default
341
- * emits it as-is; the reactive engine's override validates against the
342
- * canonical delta schema and drops anything malformed before emitting.
343
- */
344
- protected handleDelta(rawDelta: unknown): void;
345
- /** A `sync_response` frame. Meaningless without a resume cursor to advance,
346
- * so the transport default does nothing. */
347
- protected handleSyncResponse(_payload: unknown): void;
348
- /** A `bootstrap_response` frame. Bootstrap is materialisation, so the
349
- * transport default does nothing. */
350
- protected handleBootstrapResponse(_payload: unknown): void;
351
- /**
352
- * Handles a presence update from the server. The wire frame's payload is
353
- * forwarded as-is, so every consumer reads the same shape; stripping fields
354
- * here would drop `kind`, `activity`, `syncGroups`, and `isAgent` for
355
- * consumers that need them.
356
- *
357
- * The wire frame is:
358
- * { type: 'presence_update', payload: { kind, userId, status,
359
- * syncGroups, activity, isAgent, timestamp, activeClaims } }
360
- */
361
- protected handlePresenceUpdate(message: Partial<PresenceUpdate> & {
362
- payload?: PresenceUpdate;
363
- [k: string]: unknown;
364
- }): void;
365
- /**
366
- * Runs after the socket opens and `connected` is emitted, before the
367
- * heartbeat starts. The default does nothing; the reactive engine's
368
- * override runs its open ritual — presence, ack, incremental sync, and the
369
- * catch-up poll.
370
- */
371
- protected onOpened(): void;
372
- /**
373
- * Runs inside the close handler, after the socket reference is cleared and
374
- * before in-flight requests are rejected. The default does nothing; the
375
- * reactive engine's override stops its catch-up poll.
376
- */
377
- protected onClosed(): void;
378
- /**
379
- * The resume position sent as the `cursor` query parameter on the upgrade.
380
- * The transport itself holds no cursor — a bare connection resumes from
381
- * nothing — so the default is empty; the reactive engine's override supplies
382
- * its persisted sync cursor.
383
- */
384
- protected resumeCursor(): string;
385
- /**
386
- * Mark that a session error has been detected (e.g. 401 from HTTP bootstrap).
387
- * Suppresses further reconnection attempts and Sentry error capture.
388
- */
389
- setSessionErrorDetected(): void;
390
- /**
391
- * Clear the session-error latch so `connect()` / `scheduleReconnect()`
392
- * work again. Called by the store's access-credential recovery path when
393
- * the close was a re-mintable `ek_`/`rk_` expiry (`4001 credential_expired`),
394
- * not a login loss — see `isAccessCredentialExpiryCloseReason`. Genuine
395
- * session losses never clear the latch; re-auth builds a fresh client.
396
- */
397
- clearSessionError(): void;
398
- /**
399
- * Lift the `deferConnect` hold. The owner calls this once the connection's
400
- * identity and read scope are seeded; from then on `connect()` works
401
- * normally, including every reconnect path.
402
- */
403
- allowConnect(): void;
404
- /**
405
- * Connect to the sync engine WebSocket
406
- */
407
- connect(): void;
408
- /**
409
- * Setup WebSocket event handlers
410
- */
411
- private setupEventHandlers;
412
- /**
413
- * Send message to server
414
- */
415
- send(message: any): void;
416
- /**
417
- * Sends a `commit` mutation request over the existing WebSocket and resolves
418
- * when the server's `mutation_result` frame comes back with the same
419
- * `clientTxId`. The wire frame is `{ type: 'commit', payload: { operations,
420
- * clientTxId } }`.
421
- *
422
- * Times out after 15 seconds of silence from the server. The socket may close
423
- * during an in-flight mutation (a network flap, a server restart); this does
424
- * not auto-retry — the caller's transaction queue owns retry and offline
425
- * replay, and the SDK does not duplicate that logic.
426
- */
427
- sendCommit(operations: readonly CommitFrameOperation[], clientTxId: string, timeoutMs?: number, reads?: readonly ReadDependency[] | null, track?: readonly TrackDependency[] | null): Promise<CommitAck>;
428
- /**
429
- * Send a commit frame without waiting for `mutation_result`.
430
- *
431
- * This backs the public `wait: 'queued'` API: the socket accepted the
432
- * frame for delivery, but the server has not confirmed it yet. The
433
- * eventual `mutation_result` frame is intentionally ignored by this
434
- * instance because no pending resolver is registered.
435
- */
436
- sendCommitQueued(operations: readonly CommitFrameOperation[], clientTxId: string, reads?: readonly ReadDependency[] | null, track?: readonly TrackDependency[] | null): void;
437
- /**
438
- * Activates a participant claim on this connection. One connection can hold
439
- * several concurrent claims at once, each scoped to a different set of sync
440
- * groups, so the SDK reuses the existing connection instead of opening a
441
- * separate socket per scope.
442
- *
443
- * Returns a promise that resolves with the server-canonicalized `syncGroups`
444
- * and effective `ttlSeconds` once `claim_ack` arrives, or rejects with a typed
445
- * error on a failed ack, a timeout, or a disconnect.
446
- */
447
- sendClaim(claimId: string, syncGroups: readonly string[], options?: Pick<ParticipantClaimPayload, 'capabilityToken' | 'ttlSeconds'> & {
448
- timeoutMs?: number;
449
- }): Promise<{
450
- syncGroups: string[];
451
- ttlSeconds?: number;
452
- }>;
453
- /**
454
- * Drop a previously-active claim. Idempotent — `release` is
455
- * fire-and-forget per the wire contract; the server accepts
456
- * unknown claimIds silently so disconnect-time release storms
457
- * never error. No ack is expected.
458
- *
459
- * If a claim's send promise is still pending (no claim_ack yet),
460
- * we reject it locally — the user explicitly chose to release.
461
- */
462
- sendRelease(claimId: string): void;
463
- /**
464
- * Moves this connection's read interest — replaces the connection-level sync
465
- * groups mid-session as the user opens and closes entities. This is the
466
- * area-of-interest navigation primitive: the server fans out deltas only for
467
- * the groups currently in view, rather than the fixed set chosen at connect.
468
- *
469
- * This is a full-set replace: pass the complete new group list, not a delta.
470
- * Resolves with the server's effective set once `subscription_ack` arrives;
471
- * rejects (with a typed error) on a scope denial (a restricted `rk_` key
472
- * requesting a group outside its allowlist), a timeout, or a disconnect. On
473
- * success the new set is recorded as `options.syncGroups`, so a later reconnect
474
- * re-subscribes to the current interest rather than the connect-time set.
475
- *
476
- * Distinct from {@link sendClaim} (a write claim, per operation, with a TTL):
477
- * this is the read side, carries no capability token of its own, and is
478
- * bounded by the connection credential's grant.
479
- */
480
- updateSubscription(syncGroups: readonly string[], options?: {
481
- timeoutMs?: number;
482
- }): Promise<{
483
- syncGroups: string[];
484
- }>;
485
- /**
486
- * Sets a fixed credential for callers that construct the socket directly. The
487
- * SDK instead supplies `getAuthToken`, so reconnects read the shared
488
- * credential source rather than this copied value.
489
- */
490
- setCapabilityToken(token: string): void;
491
- /**
492
- * Seeds the participant kind after identity resolution. The kind rides the
493
- * upgrade URL and selects the server's auth path, and on the hosted path it
494
- * is derived from the credential's scope — known only once identity
495
- * resolves, after the socket is built. Call before `connect()`.
496
- */
497
- setKind(kind: ParticipantKind): void;
498
- getAuthToken(): string | undefined;
499
- /**
500
- * Return the credential that will be used by the next WebSocket upgrade.
501
- * ConnectionManager reads this for HTTP auth probes so visibility/network
502
- * checks authenticate the same way reconnects do.
503
- */
504
- getCapabilityToken(): string | undefined;
505
- private resolveAuthToken;
506
- /**
507
- * Schedule reconnection with exponential backoff
508
- */
509
- private scheduleReconnect;
510
- /**
511
- * Reset reconnect attempt counter. Called when network comes back online
512
- * to allow a fresh reconnect cycle after the max was previously reached.
513
- */
514
- resetReconnectAttempts(): void;
515
- /**
516
- * Disconnect from WebSocket
517
- */
518
- disconnect(): void;
519
- /**
520
- * Force-close the socket from the client side using a private 4xxx
521
- * code. Callers expect `onclose` to fire; that handler runs the
522
- * existing reconnect / handshake-failed dispatch. Wrapped in
523
- * try/catch because `close()` on a CLOSING/CLOSED socket throws on
524
- * some browsers.
525
- */
526
- protected forceClose(reason: string): void;
527
- /**
528
- * Get connection state
529
- */
530
- isConnected(): boolean;
531
- /**
532
- * Snapshot of recent connection lifecycle state, for diagnostic logs
533
- * and error messages. Cheap to call (no I/O); safe to log every time
534
- * a send is rejected so we can attribute "not connected" rejections
535
- * to the actual root cause (handshake reject vs heartbeat zombie vs
536
- * session expiry vs explicit close).
537
- */
538
- getConnectionDiagnostics(): {
539
- readyState: number | null;
540
- isConnecting: boolean;
541
- isManualClose: boolean;
542
- sessionErrorDetected: boolean;
543
- everOpened: boolean;
544
- reconnectAttempts: number;
545
- maxReconnectAttempts: number;
546
- lastOpenAt: number | null;
547
- lastCloseAt: number | null;
548
- lastCloseCode: number | null;
549
- lastCloseReason: string | null;
550
- lastForceCloseReason: string | null;
551
- sessionErrorAt: number | null;
552
- msSinceLastOpen: number | null;
553
- msSinceLastClose: number | null;
554
- };
555
- /**
556
- * Build a richly-diagnosed "not connected" error so callers (and the
557
- * logs they emit) can attribute the rejection. The message embeds the
558
- * dominant signal in human-readable form; the structured detail is
559
- * also attached as `error.diagnostics` for log scrapers.
560
- */
561
- protected notConnectedError(action: string): Error & {
562
- diagnostics: ReturnType<WsTransport['getConnectionDiagnostics']>;
563
- };
564
- /** Returns the sync groups this connection is subscribed to. */
565
- getSyncGroups(): string[];
566
- /**
567
- * Seeds the connection's read interest — the sync groups the next upgrade
568
- * URL carries. The set is already mutable state (`subscription_ack` writes
569
- * the acked set back so a reconnect resubscribes to current interest);
570
- * this setter is the host's way to seed it once identity resolves, before
571
- * the first `connect()`.
572
- */
573
- setSyncGroups(syncGroups: readonly string[]): void;
574
- }