@abloatai/ablo 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (622) hide show
  1. package/AGENTS.md +2 -2
  2. package/CHANGELOG.md +71 -1929
  3. package/NOTICE +2 -2
  4. package/README.md +23 -532
  5. package/assets/banner.png +0 -0
  6. package/dist/auth.d.ts +2 -0
  7. package/dist/auth.d.ts.map +1 -0
  8. package/dist/auth.js +2 -0
  9. package/dist/auth.js.map +1 -0
  10. package/dist/client.d.ts +3 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +3 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/coordination.d.ts +2 -0
  15. package/dist/coordination.d.ts.map +1 -0
  16. package/dist/coordination.js +2 -0
  17. package/dist/coordination.js.map +1 -0
  18. package/dist/index.d.ts +3 -112
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +3 -161
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +4 -0
  23. package/dist/react.d.ts.map +1 -0
  24. package/dist/react.js +3 -0
  25. package/dist/react.js.map +1 -0
  26. package/dist/schema.d.ts +2 -0
  27. package/dist/schema.d.ts.map +1 -0
  28. package/dist/schema.js +2 -0
  29. package/dist/schema.js.map +1 -0
  30. package/dist/server.d.ts +2 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +2 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/source-conformance.d.ts +2 -0
  35. package/dist/source-conformance.d.ts.map +1 -0
  36. package/dist/source-conformance.js +2 -0
  37. package/dist/source-conformance.js.map +1 -0
  38. package/dist/source-drizzle.d.ts +2 -0
  39. package/dist/source-drizzle.d.ts.map +1 -0
  40. package/dist/source-drizzle.js +2 -0
  41. package/dist/source-drizzle.js.map +1 -0
  42. package/dist/source-kysely.d.ts +2 -0
  43. package/dist/source-kysely.d.ts.map +1 -0
  44. package/dist/source-kysely.js +2 -0
  45. package/dist/source-kysely.js.map +1 -0
  46. package/dist/source-next.d.ts +2 -0
  47. package/dist/source-next.d.ts.map +1 -0
  48. package/dist/source-next.js +2 -0
  49. package/dist/source-next.js.map +1 -0
  50. package/dist/source.d.ts +2 -0
  51. package/dist/source.d.ts.map +1 -0
  52. package/dist/source.js +2 -0
  53. package/dist/source.js.map +1 -0
  54. package/dist/wire.d.ts +2 -0
  55. package/dist/wire.d.ts.map +1 -0
  56. package/dist/wire.js +2 -0
  57. package/dist/wire.js.map +1 -0
  58. package/docs/agents.md +2 -2
  59. package/docs/api-keys.md +13 -12
  60. package/docs/api.md +15 -53
  61. package/docs/audit.md +4 -3
  62. package/docs/cli.md +11 -11
  63. package/docs/client-behavior.md +9 -9
  64. package/docs/concurrency-convention.md +28 -42
  65. package/docs/coordination.md +228 -86
  66. package/docs/data-sources.md +5 -5
  67. package/docs/debugging.md +34 -12
  68. package/docs/deployment.md +8 -8
  69. package/docs/examples/agent-human.md +4 -4
  70. package/docs/examples/ai-sdk-tool.md +1 -1
  71. package/docs/examples/existing-python-backend.md +15 -4
  72. package/docs/examples/nextjs.md +27 -6
  73. package/docs/examples/scoped-agent.md +3 -3
  74. package/docs/examples/server-agent.md +2 -2
  75. package/docs/groups.md +57 -3
  76. package/docs/guarantees.md +37 -10
  77. package/docs/how-it-works.md +32 -8
  78. package/docs/idempotency.md +6 -6
  79. package/docs/identity.md +24 -24
  80. package/docs/index.md +8 -8
  81. package/docs/integration-guide.md +38 -16
  82. package/docs/internal/README.md +18 -0
  83. package/docs/internal/agent-fleet-coordination-design.md +171 -0
  84. package/docs/internal/agent-orchestration.md +58 -0
  85. package/docs/internal/commit-identifiers.md +91 -0
  86. package/docs/internal/concurrency-open-decisions.md +37 -0
  87. package/docs/internal/data-source-reverse-channel.md +150 -0
  88. package/docs/internal/per-field-conflict-detection.md +165 -0
  89. package/docs/internal/postgres-replication.md +64 -0
  90. package/docs/internal/serializable-schema.md +119 -0
  91. package/docs/internal/structure.md +32 -0
  92. package/docs/mcp.md +9 -9
  93. package/docs/migration.md +37 -18
  94. package/docs/projects.md +1 -1
  95. package/docs/quickstart.md +2 -2
  96. package/docs/react.md +24 -13
  97. package/docs/schema-contract.md +3 -3
  98. package/docs/sessions.md +91 -37
  99. package/docs/webhooks.md +9 -9
  100. package/examples/README.md +2 -2
  101. package/examples/data-source/README.md +1 -1
  102. package/examples/data-source/ablo-driver.ts +1 -1
  103. package/examples/data-source/customer-server.ts +1 -1
  104. package/examples/data-source/run.ts +1 -1
  105. package/examples/data-source/schema.ts +1 -1
  106. package/examples/quickstart.ts +2 -2
  107. package/llms.txt +12 -12
  108. package/package.json +64 -174
  109. package/dist/BaseSyncedStore.d.ts +0 -823
  110. package/dist/BaseSyncedStore.js +0 -1955
  111. package/dist/Database.d.ts +0 -335
  112. package/dist/Database.js +0 -1500
  113. package/dist/InstanceCache.d.ts +0 -233
  114. package/dist/InstanceCache.js +0 -1164
  115. package/dist/LazyReferenceCollection.d.ts +0 -177
  116. package/dist/LazyReferenceCollection.js +0 -461
  117. package/dist/Model.d.ts +0 -444
  118. package/dist/Model.js +0 -909
  119. package/dist/ModelRegistry.d.ts +0 -221
  120. package/dist/ModelRegistry.js +0 -537
  121. package/dist/NetworkMonitor.d.ts +0 -26
  122. package/dist/NetworkMonitor.js +0 -77
  123. package/dist/RuntimeContext.d.ts +0 -52
  124. package/dist/RuntimeContext.js +0 -80
  125. package/dist/SyncClient.d.ts +0 -551
  126. package/dist/SyncClient.js +0 -2199
  127. package/dist/adapters/alwaysOnline.d.ts +0 -14
  128. package/dist/adapters/alwaysOnline.js +0 -17
  129. package/dist/adapters/inMemoryStorage.d.ts +0 -31
  130. package/dist/adapters/inMemoryStorage.js +0 -110
  131. package/dist/ai-sdk/coordinatedTool.d.ts +0 -120
  132. package/dist/ai-sdk/coordinatedTool.js +0 -134
  133. package/dist/ai-sdk/coordinationContext.d.ts +0 -46
  134. package/dist/ai-sdk/coordinationContext.js +0 -106
  135. package/dist/ai-sdk/index.d.ts +0 -121
  136. package/dist/ai-sdk/index.js +0 -121
  137. package/dist/ai-sdk/wrap.d.ts +0 -65
  138. package/dist/ai-sdk/wrap.js +0 -39
  139. package/dist/auth/index.d.ts +0 -1
  140. package/dist/auth/index.js +0 -8
  141. package/dist/batching/index.d.ts +0 -55
  142. package/dist/batching/index.js +0 -147
  143. package/dist/cli.cjs +0 -288600
  144. package/dist/client/Ablo.d.ts +0 -231
  145. package/dist/client/Ablo.js +0 -149
  146. package/dist/client/abloClient.d.ts +0 -309
  147. package/dist/client/abloClient.js +0 -13
  148. package/dist/client/clientPrelude.d.ts +0 -52
  149. package/dist/client/clientPrelude.js +0 -60
  150. package/dist/client/consoleLogger.d.ts +0 -35
  151. package/dist/client/consoleLogger.js +0 -44
  152. package/dist/client/coreClient.d.ts +0 -60
  153. package/dist/client/coreClient.js +0 -118
  154. package/dist/client/createInternalComponents.d.ts +0 -46
  155. package/dist/client/createInternalComponents.js +0 -92
  156. package/dist/client/createModelProxy.d.ts +0 -228
  157. package/dist/client/createModelProxy.js +0 -818
  158. package/dist/client/humans.d.ts +0 -48
  159. package/dist/client/humans.js +0 -52
  160. package/dist/client/modelRegistration.d.ts +0 -10
  161. package/dist/client/modelRegistration.js +0 -312
  162. package/dist/client/options.d.ts +0 -461
  163. package/dist/client/options.js +0 -7
  164. package/dist/client/reactiveEngine.d.ts +0 -48
  165. package/dist/client/reactiveEngine.js +0 -910
  166. package/dist/client/resourceTypes.d.ts +0 -12
  167. package/dist/client/resourceTypes.js +0 -10
  168. package/dist/client/schemaConfig.d.ts +0 -44
  169. package/dist/client/schemaConfig.js +0 -185
  170. package/dist/client/validateAbloOptions.d.ts +0 -42
  171. package/dist/client/validateAbloOptions.js +0 -43
  172. package/dist/client/wsMutationExecutor.d.ts +0 -27
  173. package/dist/client/wsMutationExecutor.js +0 -72
  174. package/dist/context.d.ts +0 -29
  175. package/dist/context.js +0 -58
  176. package/dist/coordination/ClaimLog.d.ts +0 -26
  177. package/dist/coordination/ClaimLog.js +0 -32
  178. package/dist/coordination/index.d.ts +0 -1
  179. package/dist/coordination/index.js +0 -8
  180. package/dist/core/DatabaseManager.d.ts +0 -105
  181. package/dist/core/DatabaseManager.js +0 -387
  182. package/dist/core/QueryProcessor.d.ts +0 -75
  183. package/dist/core/QueryProcessor.js +0 -255
  184. package/dist/core/QueryView.d.ts +0 -79
  185. package/dist/core/QueryView.js +0 -218
  186. package/dist/core/StoreManager.d.ts +0 -112
  187. package/dist/core/StoreManager.js +0 -302
  188. package/dist/core/ViewRegistry.d.ts +0 -20
  189. package/dist/core/ViewRegistry.js +0 -55
  190. package/dist/core/index.d.ts +0 -33
  191. package/dist/core/index.js +0 -48
  192. package/dist/core/openIDBWithTimeout.d.ts +0 -65
  193. package/dist/core/openIDBWithTimeout.js +0 -153
  194. package/dist/core/queryUtils.d.ts +0 -45
  195. package/dist/core/queryUtils.js +0 -69
  196. package/dist/core/storeContract.d.ts +0 -145
  197. package/dist/core/storeContract.js +0 -12
  198. package/dist/docs/catalog.d.ts +0 -72
  199. package/dist/docs/catalog.js +0 -227
  200. package/dist/docs/index.d.ts +0 -10
  201. package/dist/docs/index.js +0 -10
  202. package/dist/environment.d.ts +0 -1
  203. package/dist/environment.js +0 -8
  204. package/dist/interfaces/index.d.ts +0 -311
  205. package/dist/interfaces/index.js +0 -9
  206. package/dist/keys/index.d.ts +0 -1
  207. package/dist/keys/index.js +0 -8
  208. package/dist/mutators/RecordingMutation.d.ts +0 -36
  209. package/dist/mutators/RecordingMutation.js +0 -182
  210. package/dist/mutators/Transaction.d.ts +0 -40
  211. package/dist/mutators/Transaction.js +0 -58
  212. package/dist/mutators/UndoManager.d.ts +0 -258
  213. package/dist/mutators/UndoManager.js +0 -658
  214. package/dist/mutators/defineMutators.d.ts +0 -60
  215. package/dist/mutators/defineMutators.js +0 -18
  216. package/dist/mutators/inverseOp.d.ts +0 -126
  217. package/dist/mutators/inverseOp.js +0 -71
  218. package/dist/mutators/mutateActions.d.ts +0 -45
  219. package/dist/mutators/mutateActions.js +0 -105
  220. package/dist/mutators/readerActions.d.ts +0 -33
  221. package/dist/mutators/readerActions.js +0 -57
  222. package/dist/mutators/undoApply.d.ts +0 -51
  223. package/dist/mutators/undoApply.js +0 -117
  224. package/dist/policy/index.d.ts +0 -21
  225. package/dist/policy/index.js +0 -20
  226. package/dist/query/client.d.ts +0 -61
  227. package/dist/query/client.js +0 -137
  228. package/dist/query/types.d.ts +0 -85
  229. package/dist/query/types.js +0 -16
  230. package/dist/react/AbloProvider.d.ts +0 -230
  231. package/dist/react/AbloProvider.js +0 -455
  232. package/dist/react/ClientSideSuspense.d.ts +0 -36
  233. package/dist/react/ClientSideSuspense.js +0 -17
  234. package/dist/react/DefaultFallback.d.ts +0 -24
  235. package/dist/react/DefaultFallback.js +0 -43
  236. package/dist/react/context.d.ts +0 -55
  237. package/dist/react/context.js +0 -29
  238. package/dist/react/index.d.ts +0 -61
  239. package/dist/react/index.js +0 -66
  240. package/dist/react/internalContext.d.ts +0 -33
  241. package/dist/react/internalContext.js +0 -3
  242. package/dist/react/useAblo.d.ts +0 -75
  243. package/dist/react/useAblo.js +0 -102
  244. package/dist/react/useCurrentUserId.d.ts +0 -22
  245. package/dist/react/useCurrentUserId.js +0 -34
  246. package/dist/react/useErrorListener.d.ts +0 -20
  247. package/dist/react/useErrorListener.js +0 -38
  248. package/dist/react/useMutationFailureListener.d.ts +0 -26
  249. package/dist/react/useMutationFailureListener.js +0 -38
  250. package/dist/react/useMutators.d.ts +0 -56
  251. package/dist/react/useMutators.js +0 -84
  252. package/dist/react/useReactive.d.ts +0 -35
  253. package/dist/react/useReactive.js +0 -123
  254. package/dist/react/useSyncStatus.d.ts +0 -59
  255. package/dist/react/useSyncStatus.js +0 -76
  256. package/dist/react/useUndoScope.d.ts +0 -34
  257. package/dist/react/useUndoScope.js +0 -81
  258. package/dist/schema/coordination.d.ts +0 -112
  259. package/dist/schema/coordination.js +0 -129
  260. package/dist/schema/ddl.d.ts +0 -97
  261. package/dist/schema/ddl.js +0 -491
  262. package/dist/schema/ddlLock.d.ts +0 -35
  263. package/dist/schema/ddlLock.js +0 -46
  264. package/dist/schema/diff.d.ts +0 -225
  265. package/dist/schema/diff.js +0 -289
  266. package/dist/schema/generate.d.ts +0 -19
  267. package/dist/schema/generate.js +0 -86
  268. package/dist/schema/index.d.ts +0 -41
  269. package/dist/schema/index.js +0 -76
  270. package/dist/schema/queries.d.ts +0 -201
  271. package/dist/schema/queries.js +0 -144
  272. package/dist/schema/select.d.ts +0 -40
  273. package/dist/schema/select.js +0 -87
  274. package/dist/schema/serialize.d.ts +0 -115
  275. package/dist/schema/serialize.js +0 -262
  276. package/dist/schema/sugar.d.ts +0 -109
  277. package/dist/schema/sugar.js +0 -83
  278. package/dist/schema/syncDeltaRow.d.ts +0 -6
  279. package/dist/schema/syncDeltaRow.js +0 -6
  280. package/dist/server/adapter.d.ts +0 -173
  281. package/dist/server/adapter.js +0 -18
  282. package/dist/server/commit.d.ts +0 -107
  283. package/dist/server/commit.js +0 -1
  284. package/dist/server/index.d.ts +0 -14
  285. package/dist/server/index.js +0 -2
  286. package/dist/server/readConfig.d.ts +0 -80
  287. package/dist/server/readConfig.js +0 -8
  288. package/dist/server/storageMode.d.ts +0 -23
  289. package/dist/server/storageMode.js +0 -17
  290. package/dist/source/adapter.d.ts +0 -81
  291. package/dist/source/adapter.js +0 -22
  292. package/dist/source/adapters/drizzle.d.ts +0 -48
  293. package/dist/source/adapters/drizzle.js +0 -219
  294. package/dist/source/adapters/kysely.d.ts +0 -42
  295. package/dist/source/adapters/kysely.js +0 -205
  296. package/dist/source/adapters/kyselyMutationCore.d.ts +0 -76
  297. package/dist/source/adapters/kyselyMutationCore.js +0 -125
  298. package/dist/source/adapters/memory.d.ts +0 -13
  299. package/dist/source/adapters/memory.js +0 -130
  300. package/dist/source/adapters/prisma.d.ts +0 -63
  301. package/dist/source/adapters/prisma.js +0 -202
  302. package/dist/source/conformance.d.ts +0 -37
  303. package/dist/source/conformance.js +0 -215
  304. package/dist/source/connector.d.ts +0 -95
  305. package/dist/source/connector.js +0 -266
  306. package/dist/source/connectorProtocol.d.ts +0 -154
  307. package/dist/source/connectorProtocol.js +0 -163
  308. package/dist/source/contract.d.ts +0 -195
  309. package/dist/source/contract.js +0 -164
  310. package/dist/source/factory.d.ts +0 -92
  311. package/dist/source/factory.js +0 -286
  312. package/dist/source/footprint.d.ts +0 -111
  313. package/dist/source/footprint.js +0 -0
  314. package/dist/source/idempotency.d.ts +0 -61
  315. package/dist/source/idempotency.js +0 -144
  316. package/dist/source/index.d.ts +0 -23
  317. package/dist/source/index.js +0 -30
  318. package/dist/source/migrations.d.ts +0 -21
  319. package/dist/source/migrations.js +0 -103
  320. package/dist/source/next.d.ts +0 -32
  321. package/dist/source/next.js +0 -25
  322. package/dist/source/pushQueue.d.ts +0 -134
  323. package/dist/source/pushQueue.js +0 -256
  324. package/dist/source/signing.d.ts +0 -92
  325. package/dist/source/signing.js +0 -162
  326. package/dist/source/types.d.ts +0 -401
  327. package/dist/source/types.js +0 -59
  328. package/dist/stores/ObjectStore.d.ts +0 -115
  329. package/dist/stores/ObjectStore.js +0 -393
  330. package/dist/stores/ObjectStoreContract.d.ts +0 -38
  331. package/dist/stores/ObjectStoreContract.js +0 -1
  332. package/dist/stores/SyncActionStore.d.ts +0 -97
  333. package/dist/stores/SyncActionStore.js +0 -504
  334. package/dist/stores/syncAction.d.ts +0 -26
  335. package/dist/stores/syncAction.js +0 -16
  336. package/dist/surface.d.ts +0 -36
  337. package/dist/surface.js +0 -75
  338. package/dist/sync/BootstrapFetcher.d.ts +0 -280
  339. package/dist/sync/BootstrapFetcher.js +0 -962
  340. package/dist/sync/ConnectionManager.d.ts +0 -8
  341. package/dist/sync/ConnectionManager.js +0 -8
  342. package/dist/sync/OnDemandLoader.d.ts +0 -228
  343. package/dist/sync/OnDemandLoader.js +0 -742
  344. package/dist/sync/SubscriptionManager.d.ts +0 -159
  345. package/dist/sync/SubscriptionManager.js +0 -243
  346. package/dist/sync/SyncWebSocket.d.ts +0 -173
  347. package/dist/sync/SyncWebSocket.js +0 -438
  348. package/dist/sync/awaitClaimGrant.d.ts +0 -6
  349. package/dist/sync/awaitClaimGrant.js +0 -6
  350. package/dist/sync/bootstrapApply.d.ts +0 -70
  351. package/dist/sync/bootstrapApply.js +0 -73
  352. package/dist/sync/commitFrames.d.ts +0 -8
  353. package/dist/sync/commitFrames.js +0 -8
  354. package/dist/sync/contextPorts.d.ts +0 -18
  355. package/dist/sync/contextPorts.js +0 -31
  356. package/dist/sync/createClaimStream.d.ts +0 -7
  357. package/dist/sync/createClaimStream.js +0 -7
  358. package/dist/sync/createPresenceStream.d.ts +0 -69
  359. package/dist/sync/createPresenceStream.js +0 -200
  360. package/dist/sync/createSnapshot.d.ts +0 -29
  361. package/dist/sync/createSnapshot.js +0 -118
  362. package/dist/sync/credentialLifecycle.d.ts +0 -7
  363. package/dist/sync/credentialLifecycle.js +0 -7
  364. package/dist/sync/deltaPipeline.d.ts +0 -113
  365. package/dist/sync/deltaPipeline.js +0 -261
  366. package/dist/sync/groupChange.d.ts +0 -113
  367. package/dist/sync/groupChange.js +0 -242
  368. package/dist/sync/participants.d.ts +0 -115
  369. package/dist/sync/participants.js +0 -344
  370. package/dist/sync/persistedPrefix.d.ts +0 -12
  371. package/dist/sync/persistedPrefix.js +0 -22
  372. package/dist/sync/schemaDrift.d.ts +0 -55
  373. package/dist/sync/schemaDrift.js +0 -53
  374. package/dist/sync/schemas.d.ts +0 -70
  375. package/dist/sync/schemas.js +0 -94
  376. package/dist/sync/syncCursor.d.ts +0 -40
  377. package/dist/sync/syncCursor.js +0 -55
  378. package/dist/sync/syncPlan.d.ts +0 -54
  379. package/dist/sync/syncPlan.js +0 -50
  380. package/dist/sync/wsFrameHandlers.d.ts +0 -8
  381. package/dist/sync/wsFrameHandlers.js +0 -8
  382. package/dist/testing/fixtures/bootstrap.d.ts +0 -49
  383. package/dist/testing/fixtures/bootstrap.js +0 -59
  384. package/dist/testing/fixtures/deltas.d.ts +0 -83
  385. package/dist/testing/fixtures/deltas.js +0 -136
  386. package/dist/testing/fixtures/httpResponses.d.ts +0 -70
  387. package/dist/testing/fixtures/httpResponses.js +0 -90
  388. package/dist/testing/fixtures/models.d.ts +0 -83
  389. package/dist/testing/fixtures/models.js +0 -272
  390. package/dist/testing/helpers/reactWrapper.d.ts +0 -69
  391. package/dist/testing/helpers/reactWrapper.js +0 -67
  392. package/dist/testing/helpers/syncEngineHarness.d.ts +0 -54
  393. package/dist/testing/helpers/syncEngineHarness.js +0 -73
  394. package/dist/testing/helpers/wait.d.ts +0 -30
  395. package/dist/testing/helpers/wait.js +0 -49
  396. package/dist/testing/index.d.ts +0 -23
  397. package/dist/testing/index.js +0 -33
  398. package/dist/testing/mocks/FakeDatabase.d.ts +0 -18
  399. package/dist/testing/mocks/FakeDatabase.js +0 -10
  400. package/dist/testing/mocks/MockMutationExecutor.d.ts +0 -87
  401. package/dist/testing/mocks/MockMutationExecutor.js +0 -186
  402. package/dist/testing/mocks/MockNetworkMonitor.d.ts +0 -20
  403. package/dist/testing/mocks/MockNetworkMonitor.js +0 -46
  404. package/dist/testing/mocks/MockSyncContext.d.ts +0 -51
  405. package/dist/testing/mocks/MockSyncContext.js +0 -72
  406. package/dist/testing/mocks/MockSyncStore.d.ts +0 -88
  407. package/dist/testing/mocks/MockSyncStore.js +0 -171
  408. package/dist/testing/mocks/MockWebSocket.d.ts +0 -71
  409. package/dist/testing/mocks/MockWebSocket.js +0 -118
  410. package/dist/transaction/ablo.d.ts +0 -88
  411. package/dist/transaction/ablo.js +0 -33
  412. package/dist/transaction/auth/apiKey.d.ts +0 -152
  413. package/dist/transaction/auth/apiKey.js +0 -419
  414. package/dist/transaction/auth/bootstrapScope.d.ts +0 -15
  415. package/dist/transaction/auth/bootstrapScope.js +0 -1
  416. package/dist/transaction/auth/capability.d.ts +0 -177
  417. package/dist/transaction/auth/capability.js +0 -199
  418. package/dist/transaction/auth/credentialEndpoint.d.ts +0 -61
  419. package/dist/transaction/auth/credentialEndpoint.js +0 -86
  420. package/dist/transaction/auth/credentialPolicy.d.ts +0 -148
  421. package/dist/transaction/auth/credentialPolicy.js +0 -125
  422. package/dist/transaction/auth/credentialSource.d.ts +0 -30
  423. package/dist/transaction/auth/credentialSource.js +0 -55
  424. package/dist/transaction/auth/hostedEndpoints.d.ts +0 -21
  425. package/dist/transaction/auth/hostedEndpoints.js +0 -21
  426. package/dist/transaction/auth/identity.d.ts +0 -55
  427. package/dist/transaction/auth/identity.js +0 -210
  428. package/dist/transaction/auth/index.d.ts +0 -162
  429. package/dist/transaction/auth/index.js +0 -304
  430. package/dist/transaction/auth/schemas.d.ts +0 -59
  431. package/dist/transaction/auth/schemas.js +0 -85
  432. package/dist/transaction/auth/sessionMint.d.ts +0 -28
  433. package/dist/transaction/auth/sessionMint.js +0 -85
  434. package/dist/transaction/coordination/awaitClaimGrant.d.ts +0 -49
  435. package/dist/transaction/coordination/awaitClaimGrant.js +0 -112
  436. package/dist/transaction/coordination/claimHeartbeatLoop.d.ts +0 -50
  437. package/dist/transaction/coordination/claimHeartbeatLoop.js +0 -88
  438. package/dist/transaction/coordination/claimMeta.d.ts +0 -49
  439. package/dist/transaction/coordination/claimMeta.js +0 -52
  440. package/dist/transaction/coordination/createClaimStream.d.ts +0 -64
  441. package/dist/transaction/coordination/createClaimStream.js +0 -475
  442. package/dist/transaction/coordination/events.d.ts +0 -74
  443. package/dist/transaction/coordination/events.js +0 -7
  444. package/dist/transaction/coordination/index.d.ts +0 -19
  445. package/dist/transaction/coordination/index.js +0 -44
  446. package/dist/transaction/coordination/locator.d.ts +0 -83
  447. package/dist/transaction/coordination/locator.js +0 -82
  448. package/dist/transaction/coordination/schema.d.ts +0 -1473
  449. package/dist/transaction/coordination/schema.js +0 -1013
  450. package/dist/transaction/coordination/targetConflict.d.ts +0 -2
  451. package/dist/transaction/coordination/targetConflict.js +0 -103
  452. package/dist/transaction/coordination/trace.d.ts +0 -78
  453. package/dist/transaction/coordination/trace.js +0 -138
  454. package/dist/transaction/durableWrites.d.ts +0 -62
  455. package/dist/transaction/durableWrites.js +0 -71
  456. package/dist/transaction/environment.d.ts +0 -105
  457. package/dist/transaction/environment.js +0 -108
  458. package/dist/transaction/errorCodes.d.ts +0 -403
  459. package/dist/transaction/errorCodes.js +0 -480
  460. package/dist/transaction/errors.d.ts +0 -428
  461. package/dist/transaction/errors.js +0 -686
  462. package/dist/transaction/index.d.ts +0 -20
  463. package/dist/transaction/index.js +0 -20
  464. package/dist/transaction/keys/index.d.ts +0 -87
  465. package/dist/transaction/keys/index.js +0 -207
  466. package/dist/transaction/log/syncDeltaRow.d.ts +0 -158
  467. package/dist/transaction/log/syncDeltaRow.js +0 -95
  468. package/dist/transaction/logPosition.d.ts +0 -97
  469. package/dist/transaction/logPosition.js +0 -125
  470. package/dist/transaction/logger.d.ts +0 -16
  471. package/dist/transaction/logger.js +0 -7
  472. package/dist/transaction/observability.d.ts +0 -53
  473. package/dist/transaction/observability.js +0 -19
  474. package/dist/transaction/persistence.d.ts +0 -12
  475. package/dist/transaction/persistence.js +0 -11
  476. package/dist/transaction/plugin.d.ts +0 -192
  477. package/dist/transaction/plugin.js +0 -87
  478. package/dist/transaction/policy/types.d.ts +0 -217
  479. package/dist/transaction/policy/types.js +0 -126
  480. package/dist/transaction/resources/functionalUpdate.d.ts +0 -79
  481. package/dist/transaction/resources/functionalUpdate.js +0 -87
  482. package/dist/transaction/resources/httpResources.d.ts +0 -266
  483. package/dist/transaction/resources/httpResources.js +0 -7
  484. package/dist/transaction/resources/modelOperations.d.ts +0 -319
  485. package/dist/transaction/resources/modelOperations.js +0 -12
  486. package/dist/transaction/resources/mutationOptions.d.ts +0 -66
  487. package/dist/transaction/resources/mutationOptions.js +0 -9
  488. package/dist/transaction/resources/where.d.ts +0 -85
  489. package/dist/transaction/resources/where.js +0 -70
  490. package/dist/transaction/resources/writeOptionsSchema.d.ts +0 -47
  491. package/dist/transaction/resources/writeOptionsSchema.js +0 -73
  492. package/dist/transaction/schema/field.d.ts +0 -126
  493. package/dist/transaction/schema/field.js +0 -265
  494. package/dist/transaction/schema/loadStrategy.d.ts +0 -45
  495. package/dist/transaction/schema/loadStrategy.js +0 -46
  496. package/dist/transaction/schema/model.d.ts +0 -379
  497. package/dist/transaction/schema/model.js +0 -123
  498. package/dist/transaction/schema/openapi.d.ts +0 -57
  499. package/dist/transaction/schema/openapi.js +0 -340
  500. package/dist/transaction/schema/relation.d.ts +0 -199
  501. package/dist/transaction/schema/relation.js +0 -104
  502. package/dist/transaction/schema/residency.d.ts +0 -29
  503. package/dist/transaction/schema/residency.js +0 -25
  504. package/dist/transaction/schema/roles.d.ts +0 -249
  505. package/dist/transaction/schema/roles.js +0 -230
  506. package/dist/transaction/schema/schema.d.ts +0 -324
  507. package/dist/transaction/schema/schema.js +0 -305
  508. package/dist/transaction/schema/tenancy.d.ts +0 -139
  509. package/dist/transaction/schema/tenancy.js +0 -190
  510. package/dist/transaction/transactionLayer.d.ts +0 -82
  511. package/dist/transaction/transactionLayer.js +0 -24
  512. package/dist/transaction/transactions/settlement/commitEnvelope.d.ts +0 -143
  513. package/dist/transaction/transactions/settlement/commitEnvelope.js +0 -161
  514. package/dist/transaction/transactions/settlement/httpCommitEnvelope.d.ts +0 -53
  515. package/dist/transaction/transactions/settlement/httpCommitEnvelope.js +0 -207
  516. package/dist/transaction/transactions/settlement/idempotencyKey.d.ts +0 -10
  517. package/dist/transaction/transactions/settlement/idempotencyKey.js +0 -9
  518. package/dist/transaction/transactions/settlement/pendingWrite.d.ts +0 -112
  519. package/dist/transaction/transactions/settlement/pendingWrite.js +0 -20
  520. package/dist/transaction/transport/commitFrames.d.ts +0 -90
  521. package/dist/transaction/transport/commitFrames.js +0 -134
  522. package/dist/transaction/transport/connectionManager.d.ts +0 -215
  523. package/dist/transaction/transport/connectionManager.js +0 -673
  524. package/dist/transaction/transport/credentialLifecycle.d.ts +0 -177
  525. package/dist/transaction/transport/credentialLifecycle.js +0 -324
  526. package/dist/transaction/transport/heartbeat.d.ts +0 -65
  527. package/dist/transaction/transport/heartbeat.js +0 -93
  528. package/dist/transaction/transport/httpClient.d.ts +0 -123
  529. package/dist/transaction/transport/httpClient.js +0 -145
  530. package/dist/transaction/transport/httpOptions.d.ts +0 -33
  531. package/dist/transaction/transport/httpOptions.js +0 -12
  532. package/dist/transaction/transport/httpTransport.d.ts +0 -8
  533. package/dist/transaction/transport/httpTransport.js +0 -1276
  534. package/dist/transaction/transport/networkProbe.d.ts +0 -84
  535. package/dist/transaction/transport/networkProbe.js +0 -207
  536. package/dist/transaction/transport/wsFrameHandlers.d.ts +0 -128
  537. package/dist/transaction/transport/wsFrameHandlers.js +0 -429
  538. package/dist/transaction/transport/wsTransport.d.ts +0 -576
  539. package/dist/transaction/transport/wsTransport.js +0 -1017
  540. package/dist/transaction/types/assertExact.d.ts +0 -17
  541. package/dist/transaction/types/assertExact.js +0 -1
  542. package/dist/transaction/types/global.d.ts +0 -107
  543. package/dist/transaction/types/global.js +0 -40
  544. package/dist/transaction/types/index.d.ts +0 -205
  545. package/dist/transaction/types/index.js +0 -56
  546. package/dist/transaction/types/modelData.d.ts +0 -10
  547. package/dist/transaction/types/modelData.js +0 -9
  548. package/dist/transaction/types/participant.d.ts +0 -20
  549. package/dist/transaction/types/participant.js +0 -10
  550. package/dist/transaction/types/streams.d.ts +0 -540
  551. package/dist/transaction/types/streams.js +0 -11
  552. package/dist/transaction/utils/asyncIterator.d.ts +0 -34
  553. package/dist/transaction/utils/asyncIterator.js +0 -135
  554. package/dist/transaction/utils/duration.d.ts +0 -25
  555. package/dist/transaction/utils/duration.js +0 -45
  556. package/dist/transaction/utils/json.d.ts +0 -57
  557. package/dist/transaction/utils/json.js +0 -276
  558. package/dist/transaction/wire/accountResponses.d.ts +0 -351
  559. package/dist/transaction/wire/accountResponses.js +0 -255
  560. package/dist/transaction/wire/auth.d.ts +0 -49
  561. package/dist/transaction/wire/auth.js +0 -57
  562. package/dist/transaction/wire/bootstrapReason.d.ts +0 -9
  563. package/dist/transaction/wire/bootstrapReason.js +0 -8
  564. package/dist/transaction/wire/claimEvent.d.ts +0 -76
  565. package/dist/transaction/wire/claimEvent.js +0 -73
  566. package/dist/transaction/wire/claims.d.ts +0 -463
  567. package/dist/transaction/wire/claims.js +0 -229
  568. package/dist/transaction/wire/commit.d.ts +0 -603
  569. package/dist/transaction/wire/commit.js +0 -321
  570. package/dist/transaction/wire/delta.d.ts +0 -250
  571. package/dist/transaction/wire/delta.js +0 -147
  572. package/dist/transaction/wire/errorEnvelope.d.ts +0 -72
  573. package/dist/transaction/wire/errorEnvelope.js +0 -123
  574. package/dist/transaction/wire/feedCursor.d.ts +0 -60
  575. package/dist/transaction/wire/feedCursor.js +0 -82
  576. package/dist/transaction/wire/feedEvent.d.ts +0 -177
  577. package/dist/transaction/wire/feedEvent.js +0 -39
  578. package/dist/transaction/wire/frames.d.ts +0 -194
  579. package/dist/transaction/wire/frames.js +0 -50
  580. package/dist/transaction/wire/inboundFrames.d.ts +0 -552
  581. package/dist/transaction/wire/inboundFrames.js +0 -116
  582. package/dist/transaction/wire/index.d.ts +0 -50
  583. package/dist/transaction/wire/index.js +0 -74
  584. package/dist/transaction/wire/listEnvelope.d.ts +0 -37
  585. package/dist/transaction/wire/listEnvelope.js +0 -42
  586. package/dist/transaction/wire/modelResponses.d.ts +0 -85
  587. package/dist/transaction/wire/modelResponses.js +0 -43
  588. package/dist/transaction/wire/protocol.d.ts +0 -38
  589. package/dist/transaction/wire/protocol.js +0 -38
  590. package/dist/transaction/wire/protocolVersion.d.ts +0 -73
  591. package/dist/transaction/wire/protocolVersion.js +0 -83
  592. package/dist/transactions/mutations/MutationQueue.d.ts +0 -655
  593. package/dist/transactions/mutations/MutationQueue.js +0 -2797
  594. package/dist/transactions/mutations/MutationStore.d.ts +0 -20
  595. package/dist/transactions/mutations/MutationStore.js +0 -53
  596. package/dist/transactions/mutations/UnconfirmedWrites.d.ts +0 -82
  597. package/dist/transactions/mutations/UnconfirmedWrites.js +0 -104
  598. package/dist/transactions/mutations/coalesceRules.d.ts +0 -58
  599. package/dist/transactions/mutations/coalesceRules.js +0 -140
  600. package/dist/transactions/mutations/commitLatency.d.ts +0 -52
  601. package/dist/transactions/mutations/commitLatency.js +0 -130
  602. package/dist/transactions/mutations/commitOutboxStore.d.ts +0 -28
  603. package/dist/transactions/mutations/commitOutboxStore.js +0 -26
  604. package/dist/transactions/mutations/commitPayload.d.ts +0 -164
  605. package/dist/transactions/mutations/commitPayload.js +0 -152
  606. package/dist/transactions/mutations/deltaConfirmation.d.ts +0 -59
  607. package/dist/transactions/mutations/deltaConfirmation.js +0 -233
  608. package/dist/transactions/mutations/durableWriteStore.d.ts +0 -14
  609. package/dist/transactions/mutations/durableWriteStore.js +0 -12
  610. package/dist/transactions/mutations/optimisticApply.d.ts +0 -49
  611. package/dist/transactions/mutations/optimisticApply.js +0 -65
  612. package/dist/transactions/mutations/replayValidation.d.ts +0 -186
  613. package/dist/transactions/mutations/replayValidation.js +0 -163
  614. package/dist/utils/mobxSetup.d.ts +0 -53
  615. package/dist/utils/mobxSetup.js +0 -330
  616. package/dist/webhooks/events.d.ts +0 -43
  617. package/dist/webhooks/events.js +0 -42
  618. package/dist/webhooks/index.d.ts +0 -8
  619. package/dist/webhooks/index.js +0 -8
  620. package/dist/wire/index.d.ts +0 -1
  621. package/dist/wire/index.js +0 -8
  622. package/docs/interaction-model.md +0 -99
@@ -1,94 +0,0 @@
1
- /**
2
- * Zod validation schemas for sync engine server responses.
3
- *
4
- * Validates data at the fetch boundary before it enters the sync engine.
5
- * Unknown keys are kept, so a server that adds a field does not break a client
6
- * that predates it.
7
- */
8
- import { z } from 'zod';
9
- import { getContext } from "../context.js";
10
- import { AbloValidationError } from "../transaction/errors.js";
11
- import { syncDeltaWireCoreSchema } from '../transaction/wire/delta.js';
12
- // ─── Server Delta Schema ─────────────────────────────────────────────────────
13
- /**
14
- * A delta as it arrives in a bootstrap payload.
15
- *
16
- * The bootstrap routes return the same rows the broadcast path does, so the
17
- * fields are taken from {@link syncDeltaWireCoreSchema} rather than restated
18
- * here — a delta is one shape, and this is the reader for it, not a second
19
- * definition of it. Unknown keys are kept, because the server sends its own
20
- * wider projection (attribution, `projectId`) that later stages may read.
21
- */
22
- export const ServerDeltaSchema = syncDeltaWireCoreSchema
23
- .pick({
24
- id: true,
25
- actionType: true,
26
- modelName: true,
27
- modelId: true,
28
- data: true,
29
- })
30
- .loose();
31
- // ─── Model Value Schema ─────────────────────────────────────────────────────
32
- // A model's values can arrive in more than one shape depending on how the
33
- // server serialized them:
34
- // - Array: an already-parsed JSON array (the common case)
35
- // - String: a JSON array still encoded as a string, which must be parsed
36
- // - null: no matching rows
37
- // This schema normalizes every variant into an array before downstream use.
38
- const ModelValueSchema = z
39
- .union([z.array(z.unknown()), z.string(), z.null()])
40
- .transform((val) => {
41
- if (val === null)
42
- return [];
43
- if (typeof val === 'string') {
44
- try {
45
- const parsed = JSON.parse(val);
46
- return Array.isArray(parsed) ? parsed : [];
47
- }
48
- catch {
49
- return [];
50
- }
51
- }
52
- return val;
53
- });
54
- // ─── Bootstrap Response Schema ───────────────────────────────────────────────
55
- export const BootstrapResponseSchema = z
56
- .object({
57
- type: z.enum(['full', 'partial']),
58
- lastSyncId: z.number(),
59
- models: z.record(z.string(), ModelValueSchema).optional(),
60
- deltas: z.array(ServerDeltaSchema).optional(),
61
- deltaCount: z.number().optional(),
62
- failedModels: z.array(z.string()).optional(),
63
- timestamp: z.number().default(() => Date.now()),
64
- // The server's active schema hash, used to detect schema drift. Optional:
65
- // absent when the server predates this field or the tenant has never
66
- // pushed a schema.
67
- schemaHash: z.string().optional(),
68
- // Present when a paged single-model request stopped at its row limit
69
- // with rows remaining: pass it back as the next page's cursor. Absent
70
- // on the final page, on unpaged responses, and from older servers.
71
- nextCursor: z.string().optional(),
72
- })
73
- .loose();
74
- // ─── Parse Helpers ───────────────────────────────────────────────────────────
75
- /**
76
- * Validates a raw bootstrap response from the server and returns the typed
77
- * result. On failure it records a diagnostic breadcrumb and throws an
78
- * {@link AbloValidationError} describing which fields were invalid.
79
- */
80
- export function parseBootstrapResponse(raw) {
81
- const result = BootstrapResponseSchema.safeParse(raw);
82
- if (!result.success) {
83
- const issues = result.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`).join('; ');
84
- getContext().observability.breadcrumb('Bootstrap response validation failed', 'sync.bootstrap', 'error', {
85
- issues,
86
- rawType: typeof raw,
87
- rawKeys: raw && typeof raw === 'object' ? Object.keys(raw).join(',') : 'n/a',
88
- });
89
- throw new AbloValidationError(`Invalid bootstrap response: ${issues}`, {
90
- code: 'bootstrap_response_schema_invalid',
91
- });
92
- }
93
- return result.data;
94
- }
@@ -1,40 +0,0 @@
1
- /**
2
- * Holds the resume state of one WebSocket sync session: the `lastSyncId`
3
- * watermark, which marks the highest delta the client has seen, and an opaque
4
- * server cursor used for incremental sync. The transport carries both across
5
- * reconnects so the session can resume where it left off.
6
- *
7
- * The watermark advances under a strict rule — it moves forward only on an
8
- * acknowledgement that is gated on durable persistence — which the transport
9
- * enforces at its acknowledgement and delta-handling call sites.
10
- */
11
- export declare class SyncCursor {
12
- lastSyncId: number;
13
- syncCursor: string | null;
14
- constructor(lastSyncId: number);
15
- /**
16
- * Advances the watermark in response to an acknowledgement. This becomes the
17
- * value the next incremental-sync request and the connect handshake send, and
18
- * the value {@link SyncCursor.getLastSyncId} reports when persisting on a
19
- * clean shutdown. The move is monotonic: a stale, lower acknowledgement never
20
- * pulls the watermark backward.
21
- */
22
- ackAdvance(syncId: number): void;
23
- /**
24
- * Sets the watermark outright, used when restoring persisted state.
25
- */
26
- setLastSyncId(syncId: number): void;
27
- /**
28
- * Sets the opaque server cursor used for incremental sync.
29
- */
30
- setSyncCursor(cursor: string | null): void;
31
- /**
32
- * Returns the current opaque server cursor, or null if none is set.
33
- */
34
- getSyncCursor(): string | null;
35
- /**
36
- * Returns the highest delta id seen this session, for persistence on a clean
37
- * shutdown.
38
- */
39
- getLastSyncId(): number;
40
- }
@@ -1,55 +0,0 @@
1
- /**
2
- * Holds the resume state of one WebSocket sync session: the `lastSyncId`
3
- * watermark, which marks the highest delta the client has seen, and an opaque
4
- * server cursor used for incremental sync. The transport carries both across
5
- * reconnects so the session can resume where it left off.
6
- *
7
- * The watermark advances under a strict rule — it moves forward only on an
8
- * acknowledgement that is gated on durable persistence — which the transport
9
- * enforces at its acknowledgement and delta-handling call sites.
10
- */
11
- export class SyncCursor {
12
- lastSyncId;
13
- syncCursor;
14
- constructor(lastSyncId) {
15
- this.lastSyncId = lastSyncId;
16
- this.syncCursor = null;
17
- }
18
- /**
19
- * Advances the watermark in response to an acknowledgement. This becomes the
20
- * value the next incremental-sync request and the connect handshake send, and
21
- * the value {@link SyncCursor.getLastSyncId} reports when persisting on a
22
- * clean shutdown. The move is monotonic: a stale, lower acknowledgement never
23
- * pulls the watermark backward.
24
- */
25
- ackAdvance(syncId) {
26
- if (syncId > this.lastSyncId) {
27
- this.lastSyncId = syncId;
28
- }
29
- }
30
- /**
31
- * Sets the watermark outright, used when restoring persisted state.
32
- */
33
- setLastSyncId(syncId) {
34
- this.lastSyncId = syncId;
35
- }
36
- /**
37
- * Sets the opaque server cursor used for incremental sync.
38
- */
39
- setSyncCursor(cursor) {
40
- this.syncCursor = cursor;
41
- }
42
- /**
43
- * Returns the current opaque server cursor, or null if none is set.
44
- */
45
- getSyncCursor() {
46
- return this.syncCursor;
47
- }
48
- /**
49
- * Returns the highest delta id seen this session, for persistence on a clean
50
- * shutdown.
51
- */
52
- getLastSyncId() {
53
- return this.lastSyncId || 0;
54
- }
55
- }
@@ -1,54 +0,0 @@
1
- /**
2
- * Derives a client's sync plan from its {@link Schema}. Walking the schema's
3
- * models and relations, it produces two declarative arrays consumed when the
4
- * store is constructed: the foreign-key indexes to register on the in-memory
5
- * object pool, and the enrichment rules that attach related parents to
6
- * incoming rows. See {@link deriveSyncPlanFromSchema}.
7
- */
8
- import type { Schema } from '../transaction/schema/schema.js';
9
- /** A foreign-key index to register on the in-memory object pool when the store is constructed. */
10
- export interface ForeignKeyIndexSpec {
11
- /**
12
- * The name of the child model, where the foreign-key field lives, and the
13
- * name the object pool indexes by. Use the wire type-name casing (for
14
- * example `'Block'`, not `'block'`), since that is the value
15
- * stamped onto reconstructed models and the key the pool looks up.
16
- */
17
- readonly modelName: string;
18
- /** The foreign-key field name on the child model, for example `'sectionId'`. */
19
- readonly fieldName: string;
20
- }
21
- /**
22
- * A declarative rule for enriching an incoming row with its related parent.
23
- *
24
- * When a delta for `modelName` arrives and its row has been constructed, the
25
- * store reads the row's `foreignKey` value, looks up the matching parent in
26
- * the object pool, and attaches it under `relationKey`. Enrichment is
27
- * best-effort: if the parent is not in the pool yet — for example, it arrives
28
- * later in the same bootstrap batch — the step is skipped without error.
29
- */
30
- export interface EnrichmentPlanEntry {
31
- /** The child model whose incoming deltas should be enriched. */
32
- readonly modelName: string;
33
- /** The foreign-key field on the child that points at the parent's id. */
34
- readonly foreignKey: string;
35
- /** The property name under which to attach the parent model. */
36
- readonly relationKey: string;
37
- }
38
- /**
39
- * Walks a schema and derives the two sync-plan arrays used when the store is
40
- * constructed: the foreign-key indexes to register on the object pool and the
41
- * enrichment plan. See {@link ForeignKeyIndexSpec} and
42
- * {@link EnrichmentPlanEntry}.
43
- *
44
- * Both are drawn from each `belongsTo` relation that sets `options.index` or
45
- * `options.enrich`; relations without those options are skipped. Enabling them
46
- * is opt-in, so adding a `belongsTo` relation never silently changes how deltas
47
- * apply or how lookups resolve. A `hasMany` or `hasOne` relation registers its
48
- * index on the target model, since that is where the foreign key lives. The
49
- * function has no side effects and is called once at construction.
50
- */
51
- export declare function deriveSyncPlanFromSchema(schema: Schema): {
52
- enrichmentPlan: EnrichmentPlanEntry[];
53
- foreignKeyIndexes: ForeignKeyIndexSpec[];
54
- };
@@ -1,50 +0,0 @@
1
- /**
2
- * Derives a client's sync plan from its {@link Schema}. Walking the schema's
3
- * models and relations, it produces two declarative arrays consumed when the
4
- * store is constructed: the foreign-key indexes to register on the in-memory
5
- * object pool, and the enrichment rules that attach related parents to
6
- * incoming rows. See {@link deriveSyncPlanFromSchema}.
7
- */
8
- /**
9
- * Walks a schema and derives the two sync-plan arrays used when the store is
10
- * constructed: the foreign-key indexes to register on the object pool and the
11
- * enrichment plan. See {@link ForeignKeyIndexSpec} and
12
- * {@link EnrichmentPlanEntry}.
13
- *
14
- * Both are drawn from each `belongsTo` relation that sets `options.index` or
15
- * `options.enrich`; relations without those options are skipped. Enabling them
16
- * is opt-in, so adding a `belongsTo` relation never silently changes how deltas
17
- * apply or how lookups resolve. A `hasMany` or `hasOne` relation registers its
18
- * index on the target model, since that is where the foreign key lives. The
19
- * function has no side effects and is called once at construction.
20
- */
21
- export function deriveSyncPlanFromSchema(schema) {
22
- const enrichmentPlan = [];
23
- const foreignKeyIndexes = [];
24
- for (const [modelName, def] of Object.entries(schema.models)) {
25
- const typename = def.typename ?? modelName;
26
- for (const [relationKey, rel] of Object.entries(def.relations)) {
27
- if (rel.type === 'belongsTo') {
28
- if (rel.options?.index) {
29
- foreignKeyIndexes.push({ modelName: typename, fieldName: rel.foreignKey });
30
- }
31
- if (rel.options?.enrich) {
32
- enrichmentPlan.push({
33
- modelName: typename,
34
- foreignKey: rel.foreignKey,
35
- relationKey,
36
- });
37
- }
38
- }
39
- else if (rel.type === 'hasMany' || rel.type === 'hasOne') {
40
- // For hasMany and hasOne, the foreign key lives on the target model,
41
- // not the current one, so register the index on the target. Its wire
42
- // type name is resolved from the schema here.
43
- const targetDef = schema.models[rel.target];
44
- const targetTypename = targetDef?.typename ?? rel.target;
45
- foreignKeyIndexes.push({ modelName: targetTypename, fieldName: rel.foreignKey });
46
- }
47
- }
48
- }
49
- return { enrichmentPlan, foreignKeyIndexes };
50
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Moved to the settlement core with the duplex transport (ADR 0016): the
3
- * inbound frame dispatch is the receiving half of the wire protocol, and the
4
- * handlers already worked against the minimal `WsSession` port rather than
5
- * the transport object. This path re-exports it so existing importers stay
6
- * unchanged.
7
- */
8
- export { isRecord, readWsInboundFrame, wsFrameHandlers, dispatchWsFrame, type PendingCommit, type PendingClaim, type PendingSubscription, type WsInboundFrame, type WsSession, type WsFrameHandler, } from '../transaction/transport/wsFrameHandlers.js';
@@ -1,8 +0,0 @@
1
- /**
2
- * Moved to the settlement core with the duplex transport (ADR 0016): the
3
- * inbound frame dispatch is the receiving half of the wire protocol, and the
4
- * handlers already worked against the minimal `WsSession` port rather than
5
- * the transport object. This path re-exports it so existing importers stay
6
- * unchanged.
7
- */
8
- export { isRecord, readWsInboundFrame, wsFrameHandlers, dispatchWsFrame, } from '../transaction/transport/wsFrameHandlers.js';
@@ -1,49 +0,0 @@
1
- /**
2
- * Factories that build well-formed bootstrap responses for tests. A
3
- * bootstrap response is what the server returns when a client first syncs:
4
- * either a full snapshot of the models or a partial batch of deltas since a
5
- * known point. These helpers produce the same shapes, so tests can exercise
6
- * client sync logic without a live server.
7
- */
8
- import type { BootstrapType } from '../../transaction/types/index.js';
9
- export type BootstrapModelData = Record<string, Record<string, unknown>[]>;
10
- export interface BootstrapResponse {
11
- type: BootstrapType;
12
- lastSyncId: number;
13
- models?: BootstrapModelData;
14
- deltas?: {
15
- id: number;
16
- modelName: string;
17
- modelId: string;
18
- action: string;
19
- data: Record<string, unknown>;
20
- }[];
21
- deltaCount?: number;
22
- failedModels?: string[];
23
- timestamp: number;
24
- }
25
- /**
26
- * Builds a full bootstrap response — a fresh snapshot of the given models,
27
- * as the server sends on a client's first sync.
28
- */
29
- export declare function createFullBootstrapResponse(models: BootstrapModelData, lastSyncId?: number): BootstrapResponse;
30
- /**
31
- * Builds a partial bootstrap response — a batch of deltas applied on top of
32
- * the client's last known sync point, given by `lastSyncId`.
33
- */
34
- export declare function createPartialBootstrapResponse(deltas: BootstrapResponse['deltas'], lastSyncId: number): BootstrapResponse;
35
- /**
36
- * Builds a full bootstrap response with the common test models
37
- * pre-populated. Pass any of the named model arrays to include them in the
38
- * snapshot.
39
- */
40
- export declare function createTestBootstrapResponse(options?: {
41
- tasks?: Record<string, unknown>[];
42
- projects?: Record<string, unknown>[];
43
- slideDecks?: Record<string, unknown>[];
44
- slides?: Record<string, unknown>[];
45
- slideLayers?: Record<string, unknown>[];
46
- comments?: Record<string, unknown>[];
47
- lastSyncId?: number;
48
- failedModels?: string[];
49
- }): BootstrapResponse;
@@ -1,59 +0,0 @@
1
- /**
2
- * Factories that build well-formed bootstrap responses for tests. A
3
- * bootstrap response is what the server returns when a client first syncs:
4
- * either a full snapshot of the models or a partial batch of deltas since a
5
- * known point. These helpers produce the same shapes, so tests can exercise
6
- * client sync logic without a live server.
7
- */
8
- /**
9
- * Builds a full bootstrap response — a fresh snapshot of the given models,
10
- * as the server sends on a client's first sync.
11
- */
12
- export function createFullBootstrapResponse(models, lastSyncId = 100) {
13
- return {
14
- type: 'full',
15
- lastSyncId,
16
- models,
17
- timestamp: Date.now(),
18
- };
19
- }
20
- /**
21
- * Builds a partial bootstrap response — a batch of deltas applied on top of
22
- * the client's last known sync point, given by `lastSyncId`.
23
- */
24
- export function createPartialBootstrapResponse(deltas, lastSyncId) {
25
- return {
26
- type: 'partial',
27
- lastSyncId,
28
- deltas,
29
- deltaCount: deltas?.length ?? 0,
30
- timestamp: Date.now(),
31
- };
32
- }
33
- /**
34
- * Builds a full bootstrap response with the common test models
35
- * pre-populated. Pass any of the named model arrays to include them in the
36
- * snapshot.
37
- */
38
- export function createTestBootstrapResponse(options = {}) {
39
- const models = {};
40
- if (options.tasks)
41
- models.Task = options.tasks;
42
- if (options.projects)
43
- models.Project = options.projects;
44
- if (options.slideDecks)
45
- models.SlideDeck = options.slideDecks;
46
- if (options.slides)
47
- models.Slide = options.slides;
48
- if (options.slideLayers)
49
- models.SlideLayer = options.slideLayers;
50
- if (options.comments)
51
- models.Comment = options.comments;
52
- return {
53
- type: 'full',
54
- lastSyncId: options.lastSyncId ?? 100,
55
- models,
56
- failedModels: options.failedModels,
57
- timestamp: Date.now(),
58
- };
59
- }
@@ -1,83 +0,0 @@
1
- /**
2
- * Factories that build well-formed delta objects for tests. A delta, a
3
- * {@link SyncAction}, is a single change to one model instance in the wire
4
- * format the server sends: an insert, update, delete, archive, and so on.
5
- * These helpers let tests construct deltas without a live server.
6
- */
7
- import type { SyncActionType, SyncAction } from '../../stores/syncAction.js';
8
- /** Reset the delta counter (call in beforeEach for deterministic IDs) */
9
- export declare function resetDeltaCounter(): void;
10
- export interface CreateDeltaOptions {
11
- /** Sync ID (auto-increments if not provided) */
12
- id?: number;
13
- /** Model name (e.g., 'Task', 'Slide') */
14
- modelName: string;
15
- /** Model ID */
16
- modelId: string;
17
- /** Action type: I=Insert, U=Update, D=Delete, A=Archive, V=Unarchive */
18
- action: SyncActionType;
19
- /** Delta payload data */
20
- data?: Record<string, unknown>;
21
- }
22
- /**
23
- * Builds a single delta ({@link SyncAction}) in the server's wire format.
24
- */
25
- export declare function createDelta(options: CreateDeltaOptions): SyncAction;
26
- /**
27
- * Builds an insert delta for a new entity.
28
- */
29
- export declare function createInsertDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
30
- /**
31
- * Builds an update delta for an existing entity.
32
- */
33
- export declare function createUpdateDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
34
- /**
35
- * Builds a delete delta.
36
- */
37
- export declare function createDeleteDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
38
- /**
39
- * Builds an archive delta, stamping `archivedAt` with the current time.
40
- */
41
- export declare function createArchiveDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
42
- /**
43
- * Builds an unarchive delta, clearing `archivedAt`.
44
- */
45
- export declare function createUnarchiveDelta(modelName: string, modelId: string, syncId?: number): SyncAction;
46
- /**
47
- * Builds a covering ('C') delta. It signals that the client has gained
48
- * permission to see an entity that already exists. The client treats it
49
- * like an insert, adding the entity to its local store as if newly created.
50
- * A covering delta typically follows a group-added delta.
51
- */
52
- export declare function createCoveringDelta(modelName: string, modelId: string, data: Record<string, unknown>, syncId?: number): SyncAction;
53
- /**
54
- * Builds a group-added ('G') delta in the incremental payload shape. It
55
- * signals that the recipient was added to a single sync group. The client
56
- * updates its subscription state and waits for covering deltas to deliver
57
- * the newly visible entities. Unlike the older payload that carries both
58
- * added and removed groups, this shape does not trigger a re-bootstrap.
59
- */
60
- export declare function createGroupAddedDelta(userId: string, group: string, syncId?: number): SyncAction;
61
- /**
62
- * Builds a group-change ('G') delta in the older payload shape, which
63
- * carries both added and removed groups in one delta and forces a full
64
- * re-bootstrap on the client. Useful for testing backward compatibility
65
- * with that older shape.
66
- */
67
- export declare function createLegacyGroupChangeDelta(userId: string, added: string[], removed: string[], syncId?: number): SyncAction;
68
- /**
69
- * Builds a group-removed ('S') delta. It signals that the recipient lost
70
- * access to a sync group. The client purges the affected local state and
71
- * re-bootstraps with the updated group list.
72
- */
73
- export declare function createGroupRemovedDelta(userId: string, group: string, syncId?: number): SyncAction;
74
- /**
75
- * Builds a batch of deltas with sequential sync IDs.
76
- */
77
- export declare function createDeltaBatch(deltas: Omit<CreateDeltaOptions, 'id'>[], startingSyncId?: number): SyncAction[];
78
- /**
79
- * Builds a confirmation delta, which signals that a mutation was persisted
80
- * by the server. The client's transaction queue watches for these to
81
- * confirm its in-flight writes.
82
- */
83
- export declare function createConfirmationDelta(modelName: string, modelId: string, syncId: number, action?: SyncActionType, data?: Record<string, unknown>): SyncAction;
@@ -1,136 +0,0 @@
1
- /**
2
- * Factories that build well-formed delta objects for tests. A delta, a
3
- * {@link SyncAction}, is a single change to one model instance in the wire
4
- * format the server sends: an insert, update, delete, archive, and so on.
5
- * These helpers let tests construct deltas without a live server.
6
- */
7
- let deltaCounter = 0;
8
- /** Reset the delta counter (call in beforeEach for deterministic IDs) */
9
- export function resetDeltaCounter() {
10
- deltaCounter = 0;
11
- }
12
- /**
13
- * Builds a single delta ({@link SyncAction}) in the server's wire format.
14
- */
15
- export function createDelta(options) {
16
- deltaCounter++;
17
- return {
18
- id: options.id ?? deltaCounter,
19
- modelName: options.modelName,
20
- modelId: options.modelId,
21
- action: options.action,
22
- data: options.data ?? {},
23
- __class: 'SyncAction',
24
- };
25
- }
26
- /**
27
- * Builds an insert delta for a new entity.
28
- */
29
- export function createInsertDelta(modelName, modelId, data, syncId) {
30
- return createDelta({ modelName, modelId, action: 'I', data, id: syncId });
31
- }
32
- /**
33
- * Builds an update delta for an existing entity.
34
- */
35
- export function createUpdateDelta(modelName, modelId, data, syncId) {
36
- return createDelta({ modelName, modelId, action: 'U', data, id: syncId });
37
- }
38
- /**
39
- * Builds a delete delta.
40
- */
41
- export function createDeleteDelta(modelName, modelId, syncId) {
42
- return createDelta({ modelName, modelId, action: 'D', data: {}, id: syncId });
43
- }
44
- /**
45
- * Builds an archive delta, stamping `archivedAt` with the current time.
46
- */
47
- export function createArchiveDelta(modelName, modelId, syncId) {
48
- return createDelta({
49
- modelName,
50
- modelId,
51
- action: 'A',
52
- data: { archivedAt: new Date().toISOString() },
53
- id: syncId,
54
- });
55
- }
56
- /**
57
- * Builds an unarchive delta, clearing `archivedAt`.
58
- */
59
- export function createUnarchiveDelta(modelName, modelId, syncId) {
60
- return createDelta({
61
- modelName,
62
- modelId,
63
- action: 'V',
64
- data: { archivedAt: null },
65
- id: syncId,
66
- });
67
- }
68
- /**
69
- * Builds a covering ('C') delta. It signals that the client has gained
70
- * permission to see an entity that already exists. The client treats it
71
- * like an insert, adding the entity to its local store as if newly created.
72
- * A covering delta typically follows a group-added delta.
73
- */
74
- export function createCoveringDelta(modelName, modelId, data, syncId) {
75
- return createDelta({ modelName, modelId, action: 'C', data, id: syncId });
76
- }
77
- /**
78
- * Builds a group-added ('G') delta in the incremental payload shape. It
79
- * signals that the recipient was added to a single sync group. The client
80
- * updates its subscription state and waits for covering deltas to deliver
81
- * the newly visible entities. Unlike the older payload that carries both
82
- * added and removed groups, this shape does not trigger a re-bootstrap.
83
- */
84
- export function createGroupAddedDelta(userId, group, syncId) {
85
- return createDelta({
86
- modelName: 'SyncGroupChange',
87
- modelId: `sga_${userId}`,
88
- action: 'G',
89
- data: { group, userId },
90
- id: syncId,
91
- });
92
- }
93
- /**
94
- * Builds a group-change ('G') delta in the older payload shape, which
95
- * carries both added and removed groups in one delta and forces a full
96
- * re-bootstrap on the client. Useful for testing backward compatibility
97
- * with that older shape.
98
- */
99
- export function createLegacyGroupChangeDelta(userId, added, removed, syncId) {
100
- return createDelta({
101
- modelName: 'SyncGroupChange',
102
- modelId: `sgc_${userId}`,
103
- action: 'G',
104
- data: { addedGroups: added, removedGroups: removed },
105
- id: syncId,
106
- });
107
- }
108
- /**
109
- * Builds a group-removed ('S') delta. It signals that the recipient lost
110
- * access to a sync group. The client purges the affected local state and
111
- * re-bootstraps with the updated group list.
112
- */
113
- export function createGroupRemovedDelta(userId, group, syncId) {
114
- return createDelta({
115
- modelName: 'SyncGroupChange',
116
- modelId: `sgr_${userId}`,
117
- action: 'S',
118
- data: { group, userId },
119
- id: syncId,
120
- });
121
- }
122
- /**
123
- * Builds a batch of deltas with sequential sync IDs.
124
- */
125
- export function createDeltaBatch(deltas, startingSyncId) {
126
- const start = startingSyncId ?? deltaCounter + 1;
127
- return deltas.map((d, i) => createDelta({ ...d, id: start + i }));
128
- }
129
- /**
130
- * Builds a confirmation delta, which signals that a mutation was persisted
131
- * by the server. The client's transaction queue watches for these to
132
- * confirm its in-flight writes.
133
- */
134
- export function createConfirmationDelta(modelName, modelId, syncId, action = 'U', data = {}) {
135
- return createDelta({ modelName, modelId, action, data, id: syncId });
136
- }