@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,84 +0,0 @@
1
- /**
2
- * Detects real network and session connectivity for the sync engine. It exists
3
- * because `navigator.onLine` is unreliable: it reports true whenever the device
4
- * has a local network connection, even with no route to the internet, and after
5
- * sleep/wake it can report true before Wi-Fi or DNS are working again.
6
- *
7
- * The probe makes one authenticated request to the sync server's
8
- * `/api/auth/check` endpoint — which runs the same auth middleware as the
9
- * WebSocket upgrade — and classifies the response into a single
10
- * {@link ProbeOutcome} through the recovery taxonomy ({@link classifyRecovery}):
11
- * 204 No Content → `reachable` (credential valid)
12
- * 401 `apikey_expired` (ephemeral key) → `credential_stale` (re-mint and retry, no sign-out)
13
- * 401 `session_expired` / bare 401 → `session_expired` (sign out)
14
- * 401/403 credential-type/config/perm → `auth_blocked` (stop; no loop, no sign-out)
15
- * network failure / offline → `unreachable`
16
- *
17
- * This closes a real gap. The browser's WebSocket API hides the HTTP status of
18
- * a failed handshake, so a 401 on the upgrade surfaces only as close code 1006.
19
- * Without this HTTP probe, the client cannot tell an auth failure from a network
20
- * blip, and loops reconnecting forever instead of sending the user to sign in.
21
- *
22
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine
23
- */
24
- import { z } from 'zod';
25
- import { type AuthTokenGetter } from '../auth/credentialSource.js';
26
- import { type Logger } from '../logger.js';
27
- /**
28
- * The complete set of probe outcomes. Each value carries both reachability and
29
- * credential state, so the connection state machine can branch on one exhaustive
30
- * discriminant instead of piecing the situation together from several booleans.
31
- * It mirrors the `RecoveryClass` taxonomy at the connectivity layer.
32
- */
33
- export declare const PROBE_OUTCOMES: readonly ["reachable", "unreachable", "session_expired", "credential_stale", "auth_blocked"];
34
- /** Zod enum derived from {@link PROBE_OUTCOMES}. */
35
- export declare const probeOutcomeSchema: z.ZodEnum<{
36
- auth_blocked: "auth_blocked";
37
- session_expired: "session_expired";
38
- reachable: "reachable";
39
- unreachable: "unreachable";
40
- credential_stale: "credential_stale";
41
- }>;
42
- /** A single probe outcome. See {@link PROBE_OUTCOMES}. */
43
- export type ProbeOutcome = z.infer<typeof probeOutcomeSchema>;
44
- /** Result of a network probe: a single {@link ProbeOutcome} plus round-trip
45
- * latency (null when the probe never completed). */
46
- export declare const probeResultSchema: z.ZodObject<{
47
- outcome: z.ZodEnum<{
48
- auth_blocked: "auth_blocked";
49
- session_expired: "session_expired";
50
- reachable: "reachable";
51
- unreachable: "unreachable";
52
- credential_stale: "credential_stale";
53
- }>;
54
- latencyMs: z.ZodNullable<z.ZodNumber>;
55
- }, z.core.$strip>;
56
- /** @see {@link probeResultSchema} */
57
- export type ProbeResult = z.infer<typeof probeResultSchema>;
58
- export interface NetworkProbeOptions {
59
- /**
60
- * Sync-server base URL (HTTP or WS scheme accepted). If omitted, the probe
61
- * targets the canonical hosted endpoint ({@link ABLO_DEFAULT_BASE_URL}) —
62
- * the same default `Ablo()` resolves.
63
- */
64
- baseUrl?: string;
65
- /**
66
- * Optional bearer credential. Browser cookie deployments can omit this;
67
- * bearer-first deployments must pass the same `ek_`/`rk_` token used by
68
- * bootstrap and the WebSocket upgrade.
69
- */
70
- getAuthToken?: AuthTokenGetter;
71
- /** Compatibility fallback for callers with a copied token string. */
72
- authToken?: string | null;
73
- /** Where probe outcomes are logged. Defaults to silent. */
74
- logger?: Logger;
75
- }
76
- /**
77
- * Probes the sync server with a lightweight HEAD request, returning both
78
- * reachability and session status in a single call so the connection state
79
- * machine can pick the right transition without guessing.
80
- *
81
- * @param input The sync-server base URL (an HTTP or WS scheme is accepted), or
82
- * an options bag. A bare string is also accepted.
83
- */
84
- export declare function probeNetwork(input?: string | NetworkProbeOptions): Promise<ProbeResult>;
@@ -1,207 +0,0 @@
1
- /**
2
- * Detects real network and session connectivity for the sync engine. It exists
3
- * because `navigator.onLine` is unreliable: it reports true whenever the device
4
- * has a local network connection, even with no route to the internet, and after
5
- * sleep/wake it can report true before Wi-Fi or DNS are working again.
6
- *
7
- * The probe makes one authenticated request to the sync server's
8
- * `/api/auth/check` endpoint — which runs the same auth middleware as the
9
- * WebSocket upgrade — and classifies the response into a single
10
- * {@link ProbeOutcome} through the recovery taxonomy ({@link classifyRecovery}):
11
- * 204 No Content → `reachable` (credential valid)
12
- * 401 `apikey_expired` (ephemeral key) → `credential_stale` (re-mint and retry, no sign-out)
13
- * 401 `session_expired` / bare 401 → `session_expired` (sign out)
14
- * 401/403 credential-type/config/perm → `auth_blocked` (stop; no loop, no sign-out)
15
- * network failure / offline → `unreachable`
16
- *
17
- * This closes a real gap. The browser's WebSocket API hides the HTTP status of
18
- * a failed handshake, so a 401 on the upgrade surfaces only as close code 1006.
19
- * Without this HTTP probe, the client cannot tell an auth failure from a network
20
- * blip, and loops reconnecting forever instead of sending the user to sign in.
21
- *
22
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine
23
- */
24
- import { z } from 'zod';
25
- import { classifyRecovery } from '../errors.js';
26
- import { withAuthHeaders } from '../auth/credentialSource.js';
27
- import { ABLO_DEFAULT_BASE_URL } from '../auth/hostedEndpoints.js';
28
- import { noopLogger } from '../logger.js';
29
- /**
30
- * The complete set of probe outcomes. Each value carries both reachability and
31
- * credential state, so the connection state machine can branch on one exhaustive
32
- * discriminant instead of piecing the situation together from several booleans.
33
- * It mirrors the `RecoveryClass` taxonomy at the connectivity layer.
34
- */
35
- export const PROBE_OUTCOMES = [
36
- /** Server reachable and the access credential is currently valid. */
37
- 'reachable',
38
- /** Could not reach the server (offline, DNS, TLS, or timeout). */
39
- 'unreachable',
40
- /** Reachable, but the long-lived login is gone. Terminal: sign out. */
41
- 'session_expired',
42
- /** Reachable, but the ephemeral access key (`ek_`/`rk_`) expired. Silently
43
- * re-mint a fresh key from the still-valid login and retry; not a sign-out. */
44
- 'credential_stale',
45
- /** Reachable, but the credential's type or configuration was rejected (wrong
46
- * key kind, untrusted issuer, no organization, or a 403). Stop: neither
47
- * reconnecting nor re-authenticating helps. Distinct from a sign-out. */
48
- 'auth_blocked',
49
- ];
50
- /** Zod enum derived from {@link PROBE_OUTCOMES}. */
51
- export const probeOutcomeSchema = z.enum(PROBE_OUTCOMES);
52
- /** Result of a network probe: a single {@link ProbeOutcome} plus round-trip
53
- * latency (null when the probe never completed). */
54
- export const probeResultSchema = z.object({
55
- outcome: probeOutcomeSchema,
56
- latencyMs: z.number().nullable(),
57
- });
58
- const PROBE_TIMEOUT_MS = 4000;
59
- /**
60
- * Derive the probe URL from a sync-server base URL. Accepts `ws://`,
61
- * `wss://`, `http://`, `https://`, or a bare host — mirrors the
62
- * normalisation in `BootstrapFetcher` / `createSyncEngine`.
63
- */
64
- function resolveProbeUrl(baseUrl) {
65
- // No explicit baseUrl → probe the canonical hosted endpoint, matching the
66
- // `Ablo()` default.
67
- const resolved = baseUrl ?? ABLO_DEFAULT_BASE_URL;
68
- // Normalize ws → http so fetch() accepts the URL. Strip any trailing slash
69
- // so we don't produce `//api/auth/check`.
70
- const httpBase = resolved.replace(/^ws/, 'http').replace(/\/+$/, '');
71
- return `${httpBase}/api/auth/check`;
72
- }
73
- /**
74
- * Probes the sync server with a lightweight HEAD request, returning both
75
- * reachability and session status in a single call so the connection state
76
- * machine can pick the right transition without guessing.
77
- *
78
- * @param input The sync-server base URL (an HTTP or WS scheme is accepted), or
79
- * an options bag. A bare string is also accepted.
80
- */
81
- export async function probeNetwork(input) {
82
- const baseUrl = typeof input === 'string' ? input : input?.baseUrl;
83
- const getAuthToken = typeof input === 'string' ? undefined : input?.getAuthToken;
84
- const authToken = typeof input === 'string' ? undefined : input?.authToken;
85
- const logger = (typeof input === 'string' ? undefined : input?.logger) ?? noopLogger;
86
- const url = resolveProbeUrl(baseUrl);
87
- // Fast-fail: if navigator.onLine is false, skip the probe entirely. This is
88
- // the one case where navigator.onLine is reliable (MDN: "false means
89
- // definitely offline"). Use `=== false` rather than `!onLine` because Node
90
- // 22+ exposes `navigator` with `onLine === undefined`, and `!undefined` is
91
- // true, which would short-circuit the probe server-side.
92
- if (typeof navigator !== 'undefined' && navigator.onLine === false) {
93
- return { outcome: 'unreachable', latencyMs: null };
94
- }
95
- const controller = new AbortController();
96
- const timeout = setTimeout(() => { controller.abort(); }, PROBE_TIMEOUT_MS);
97
- const start = performance.now();
98
- try {
99
- const headers = withAuthHeaders(getAuthToken, { 'Cache-Control': 'no-cache' }, authToken);
100
- const response = await fetch(url, {
101
- method: 'HEAD',
102
- signal: controller.signal,
103
- // Cache-bust to avoid stale responses
104
- headers,
105
- });
106
- const latencyMs = Math.round(performance.now() - start);
107
- // The probe is a HEAD request (no body), but the server sets
108
- // `X-Auth-Failure: <code>` on every auth rejection. Route the code through
109
- // the recovery taxonomy so each failure mode gets its correct outcome. That
110
- // distinction is the whole point: an expired ephemeral key
111
- // (`access_credential_expiry`) must re-mint, not sign the user out the way a
112
- // genuine login expiry (`session_expiry`) does, and not wedge the way a
113
- // credential type or configuration rejection (`auth_blocked`) does.
114
- const authFailure = response.headers.get('x-auth-failure');
115
- if (authFailure) {
116
- const recovery = classifyRecovery(authFailure);
117
- switch (recovery) {
118
- case 'session_expiry':
119
- logger.info('[NetworkProbe] Server reachable, login expired', {
120
- status: response.status,
121
- code: authFailure,
122
- latencyMs,
123
- });
124
- return { outcome: 'session_expired', latencyMs };
125
- case 'access_credential_expiry':
126
- logger.info('[NetworkProbe] Server reachable, access key stale — will re-mint', {
127
- status: response.status,
128
- code: authFailure,
129
- latencyMs,
130
- });
131
- return { outcome: 'credential_stale', latencyMs };
132
- case 'auth_blocked':
133
- case 'permission':
134
- case 'none':
135
- // A non-expiry auth rejection — wrong credential type or config, a
136
- // 403, or an auth-tagged code this SDK does not recognise.
137
- // Re-authenticating re-mints the same rejected credential and
138
- // retrying will not help, so stop rather than reconnect-loop or sign
139
- // the user out.
140
- logger.debug('[NetworkProbe] Reachable but auth-blocked (non-retryable, non-expiry)', {
141
- status: response.status,
142
- code: authFailure,
143
- recovery,
144
- latencyMs,
145
- });
146
- return { outcome: 'auth_blocked', latencyMs };
147
- case 'transient':
148
- // Retryable auth-tagged response — connectivity is proven; fall
149
- // through to `reachable` and let the normal retry path handle it.
150
- break;
151
- default: {
152
- const _exhaustive = recovery;
153
- void _exhaustive;
154
- }
155
- }
156
- }
157
- else if (response.status === 401) {
158
- // Bare 401 with no readable structured code. This is ambiguous and must
159
- // not sign the user out on its own — two common causes are both
160
- // recoverable, and only one is a real logout:
161
- // 1. The server did send `X-Auth-Failure: apikey_expired`, but it is a
162
- // custom header on a cross-origin response the server did not list in
163
- // `Access-Control-Expose-Headers`, so the browser stripped it to
164
- // null. The access key just needs a re-mint.
165
- // 2. A genuinely expired access key on a non-Ablo proxy or cookie path.
166
- // So route to `credential_stale`: the state machine attempts a re-mint,
167
- // and the only way to actually sign out is that re-mint resolving `null`
168
- // (the login is truly gone). If no refresher is wired, the bounded attempt
169
- // counter falls through to `auth_blocked` (stop) — still never a spurious
170
- // logout. The invariant holds: null is the only terminal path, never a
171
- // bare 401.
172
- logger.info('[NetworkProbe] Server reachable, bare 401 — re-mint (not sign-out)', {
173
- latencyMs,
174
- });
175
- return { outcome: 'credential_stale', latencyMs };
176
- }
177
- // 2xx (including 204) means reachable + credential valid.
178
- // 3xx/4xx (non-auth) still prove connectivity even though the probe
179
- // expected 204; log a warning so misconfigurations surface instead of
180
- // silently passing.
181
- if (response.status < 200 || response.status >= 300) {
182
- logger.debug('[NetworkProbe] Unexpected probe response', {
183
- status: response.status,
184
- url,
185
- latencyMs,
186
- });
187
- }
188
- else {
189
- logger.debug('[NetworkProbe] Server reachable, credential valid', {
190
- status: response.status,
191
- latencyMs,
192
- });
193
- }
194
- return { outcome: 'reachable', latencyMs };
195
- }
196
- catch (error) {
197
- clearTimeout(timeout);
198
- const isAbort = error instanceof DOMException && error.name === 'AbortError';
199
- logger.info('[NetworkProbe] Probe failed', {
200
- reason: isAbort ? 'timeout' : error.message,
201
- });
202
- return { outcome: 'unreachable', latencyMs: null };
203
- }
204
- finally {
205
- clearTimeout(timeout);
206
- }
207
- }
@@ -1,128 +0,0 @@
1
- /**
2
- * Routes each inbound frame from the sync WebSocket to the handler for its
3
- * type. Handlers work against a minimal {@link WsSession} interface — only
4
- * the members they actually touch, rather than the transport object itself,
5
- * which keeps this module free of an import cycle. Reading a message off the
6
- * socket, parsing its JSON, and tracking heartbeats all happen before this
7
- * point; every parsed frame then passes through {@link dispatchWsFrame}.
8
- */
9
- import { type WsInboundEnvelope } from '../wire/inboundFrames.js';
10
- import { type CommitAck } from './commitFrames.js';
11
- import type { Logger } from '../logger.js';
12
- import type { SocketObservability } from '../observability.js';
13
- /**
14
- * In-flight `commit` request record, keyed by clientTxId in the session.
15
- * Resolved when a matching `mutation_result` frame arrives from the
16
- * server, or rejected on timeout / disconnect.
17
- */
18
- export interface PendingCommit {
19
- resolve: (value: CommitAck) => void;
20
- reject: (err: Error) => void;
21
- timeout: ReturnType<typeof setTimeout>;
22
- }
23
- /**
24
- * In-flight `claim` request record, keyed by claimId. Resolved when the
25
- * matching `claim_ack` arrives, or rejected on timeout/disconnect.
26
- */
27
- export interface PendingClaim {
28
- resolve: (value: {
29
- syncGroups: string[];
30
- ttlSeconds?: number;
31
- }) => void;
32
- reject: (err: Error) => void;
33
- timeout: ReturnType<typeof setTimeout>;
34
- }
35
- /**
36
- * An in-flight `update_subscription` request awaiting its
37
- * `subscription_ack`. The wire carries no correlation id, so requests are
38
- * matched to their acknowledgements in first-in, first-out order, the same
39
- * order the server applies them.
40
- */
41
- export interface PendingSubscription {
42
- resolve: (value: {
43
- syncGroups: string[];
44
- }) => void;
45
- reject: (err: Error) => void;
46
- timeout: ReturnType<typeof setTimeout>;
47
- }
48
- /**
49
- * A parsed inbound wire frame — the envelope only, with its payload still
50
- * untrusted. Inferred from {@link wsInboundEnvelopeSchema} rather than written
51
- * out, so the type a handler sees and the check the socket runs are the same
52
- * statement. The open key set is what carries the oldest delta form, which puts
53
- * a delta's own fields (`actionType`, `modelName`) at the top level instead of
54
- * under `payload`.
55
- */
56
- export type WsInboundFrame = WsInboundEnvelope;
57
- /** Narrow arbitrary wire data to a plain string-keyed record. */
58
- export declare function isRecord(value: unknown): value is Record<string, unknown>;
59
- /**
60
- * Read the envelope off an inbound message, or `null` when it is not one —
61
- * anything that is not an object, or whose `type` is not a string. The payload
62
- * is not checked here; that belongs to the frame's own schema, applied at
63
- * dispatch.
64
- */
65
- export declare function readWsInboundFrame(value: unknown): WsInboundFrame | null;
66
- /**
67
- * The subset of the sync WebSocket that the frame handlers need. The
68
- * transport builds a single object exposing these members over its own
69
- * private state. Handlers read the fields live rather than capturing them,
70
- * so resetting a field elsewhere — such as clearing pending subscriptions
71
- * on close — never leaves a handler holding a stale value.
72
- */
73
- export interface WsSession {
74
- /** EventEmitter surface — handlers emit the typed transport events. */
75
- emit(event: string, ...args: unknown[]): boolean;
76
- /** Where the handlers log. The transport passes its own port. */
77
- logger: Logger;
78
- /** Where coordination outcomes and lifecycle breadcrumbs are reported. */
79
- observability: SocketObservability;
80
- /** In-flight commit acks keyed by clientTxId. */
81
- pendingMutations: Map<string, PendingCommit>;
82
- /** In-flight claim acks keyed by claimId. */
83
- pendingClaims: Map<string, PendingClaim>;
84
- /** Removes and returns the oldest in-flight `update_subscription` request. */
85
- shiftPendingSubscription(): PendingSubscription | undefined;
86
- /** Connection options subset the handlers write back (acked sync groups). */
87
- options: {
88
- syncGroups: string[];
89
- };
90
- /** Registered collaboration event keys (colon format). */
91
- collaborationEventTypes: ReadonlySet<string>;
92
- /**
93
- * Processes one inbound delta. The argument is untrusted wire data; the
94
- * transport validates it against the canonical delta schema and drops
95
- * anything malformed, so handlers here never cast.
96
- */
97
- handleDelta(delta: unknown): void;
98
- handleSyncResponse(payload: unknown): void;
99
- handleBootstrapResponse(payload: unknown): void;
100
- handlePresenceUpdate(message: {
101
- payload?: unknown;
102
- [k: string]: unknown;
103
- }): void;
104
- }
105
- export type WsFrameHandler = (session: WsSession, message: WsInboundFrame) => void;
106
- /**
107
- * Maps each frame type to its handler. Every named server frame this
108
- * package understands is dispatched from this table; anything else falls
109
- * through to the collaboration-event and unknown-type path in
110
- * {@link dispatchWsFrame}.
111
- */
112
- export declare const wsFrameHandlers: Record<string, WsFrameHandler>;
113
- /**
114
- * Routes one inbound frame to its handler, validating the payload first.
115
- *
116
- * A frame the protocol declares with a payload schema is parsed here, so its
117
- * handler works on a proven shape. A frame the protocol does not declare is
118
- * rejected: the server and this package ship together, so an unrecognised type
119
- * means the two have drifted, and a change nobody validated should not reach a
120
- * local store. The one exception is an application's own collaboration events,
121
- * which the consumer registers at construction and the protocol knows nothing
122
- * about.
123
- *
124
- * Throwing is the reporting channel. The transport's message loop catches and
125
- * reports through `captureWebSocketError`, so a bad frame surfaces as a
126
- * captured error and the connection survives.
127
- */
128
- export declare function dispatchWsFrame(session: WsSession, message: WsInboundFrame): void;