@livestore/common 0.4.0-dev.2 → 0.4.0-dev.21

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 (465) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/ClientSessionLeaderThreadProxy.d.ts +20 -12
  3. package/dist/ClientSessionLeaderThreadProxy.d.ts.map +1 -1
  4. package/dist/ClientSessionLeaderThreadProxy.js.map +1 -1
  5. package/dist/adapter-types.d.ts +14 -6
  6. package/dist/adapter-types.d.ts.map +1 -1
  7. package/dist/adapter-types.js.map +1 -1
  8. package/dist/debug-info.d.ts.map +1 -1
  9. package/dist/debug-info.js +33 -6
  10. package/dist/debug-info.js.map +1 -1
  11. package/dist/devtools/devtools-messages-client-session.d.ts +28 -23
  12. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -1
  13. package/dist/devtools/devtools-messages-client-session.js +2 -2
  14. package/dist/devtools/devtools-messages-client-session.js.map +1 -1
  15. package/dist/devtools/devtools-messages-common.d.ts +7 -14
  16. package/dist/devtools/devtools-messages-common.d.ts.map +1 -1
  17. package/dist/devtools/devtools-messages-common.js +1 -6
  18. package/dist/devtools/devtools-messages-common.js.map +1 -1
  19. package/dist/devtools/devtools-messages-leader.d.ts +38 -29
  20. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -1
  21. package/dist/devtools/devtools-messages-leader.js +9 -8
  22. package/dist/devtools/devtools-messages-leader.js.map +1 -1
  23. package/dist/devtools/devtools-sessioninfo.d.ts +14 -2
  24. package/dist/devtools/devtools-sessioninfo.d.ts.map +1 -1
  25. package/dist/devtools/devtools-sessioninfo.js +7 -4
  26. package/dist/devtools/devtools-sessioninfo.js.map +1 -1
  27. package/dist/devtools/mod.d.ts +13 -2
  28. package/dist/devtools/mod.d.ts.map +1 -1
  29. package/dist/devtools/mod.js +10 -3
  30. package/dist/devtools/mod.js.map +1 -1
  31. package/dist/errors.d.ts +52 -10
  32. package/dist/errors.d.ts.map +1 -1
  33. package/dist/errors.js +25 -6
  34. package/dist/errors.js.map +1 -1
  35. package/dist/index.d.ts +2 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/leader-thread/LeaderSyncProcessor.d.ts +41 -4
  40. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  41. package/dist/leader-thread/LeaderSyncProcessor.js +158 -75
  42. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  43. package/dist/leader-thread/eventlog.d.ts +21 -22
  44. package/dist/leader-thread/eventlog.d.ts.map +1 -1
  45. package/dist/leader-thread/eventlog.js +77 -20
  46. package/dist/leader-thread/eventlog.js.map +1 -1
  47. package/dist/leader-thread/leader-worker-devtools.d.ts +2 -2
  48. package/dist/leader-thread/leader-worker-devtools.d.ts.map +1 -1
  49. package/dist/leader-thread/leader-worker-devtools.js +56 -45
  50. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  51. package/dist/leader-thread/make-leader-thread-layer.d.ts +6 -6
  52. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  53. package/dist/leader-thread/make-leader-thread-layer.js +79 -27
  54. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  55. package/dist/leader-thread/make-leader-thread-layer.test.d.ts +2 -0
  56. package/dist/leader-thread/make-leader-thread-layer.test.d.ts.map +1 -0
  57. package/dist/leader-thread/make-leader-thread-layer.test.js +32 -0
  58. package/dist/leader-thread/make-leader-thread-layer.test.js.map +1 -0
  59. package/dist/leader-thread/materialize-event.d.ts +3 -3
  60. package/dist/leader-thread/materialize-event.d.ts.map +1 -1
  61. package/dist/leader-thread/materialize-event.js +25 -11
  62. package/dist/leader-thread/materialize-event.js.map +1 -1
  63. package/dist/leader-thread/mod.d.ts +1 -0
  64. package/dist/leader-thread/mod.d.ts.map +1 -1
  65. package/dist/leader-thread/mod.js +1 -0
  66. package/dist/leader-thread/mod.js.map +1 -1
  67. package/dist/leader-thread/recreate-db.d.ts +2 -3
  68. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  69. package/dist/leader-thread/recreate-db.js +5 -5
  70. package/dist/leader-thread/recreate-db.js.map +1 -1
  71. package/dist/leader-thread/shutdown-channel.d.ts +2 -2
  72. package/dist/leader-thread/shutdown-channel.d.ts.map +1 -1
  73. package/dist/leader-thread/shutdown-channel.js +2 -2
  74. package/dist/leader-thread/shutdown-channel.js.map +1 -1
  75. package/dist/leader-thread/stream-events.d.ts +56 -0
  76. package/dist/leader-thread/stream-events.d.ts.map +1 -0
  77. package/dist/leader-thread/stream-events.js +166 -0
  78. package/dist/leader-thread/stream-events.js.map +1 -0
  79. package/dist/leader-thread/types.d.ts +98 -20
  80. package/dist/leader-thread/types.d.ts.map +1 -1
  81. package/dist/leader-thread/types.js +13 -0
  82. package/dist/leader-thread/types.js.map +1 -1
  83. package/dist/logging.d.ts +40 -0
  84. package/dist/logging.d.ts.map +1 -0
  85. package/dist/logging.js +33 -0
  86. package/dist/logging.js.map +1 -0
  87. package/dist/make-client-session.d.ts +5 -3
  88. package/dist/make-client-session.d.ts.map +1 -1
  89. package/dist/make-client-session.js +5 -2
  90. package/dist/make-client-session.js.map +1 -1
  91. package/dist/materializer-helper.d.ts +6 -6
  92. package/dist/materializer-helper.d.ts.map +1 -1
  93. package/dist/materializer-helper.js +20 -4
  94. package/dist/materializer-helper.js.map +1 -1
  95. package/dist/otel.d.ts +2 -1
  96. package/dist/otel.d.ts.map +1 -1
  97. package/dist/otel.js +5 -0
  98. package/dist/otel.js.map +1 -1
  99. package/dist/rematerialize-from-eventlog.d.ts +2 -2
  100. package/dist/rematerialize-from-eventlog.d.ts.map +1 -1
  101. package/dist/rematerialize-from-eventlog.js +29 -20
  102. package/dist/rematerialize-from-eventlog.js.map +1 -1
  103. package/dist/schema/EventDef/define.d.ts +147 -0
  104. package/dist/schema/EventDef/define.d.ts.map +1 -0
  105. package/dist/schema/EventDef/define.js +139 -0
  106. package/dist/schema/EventDef/define.js.map +1 -0
  107. package/dist/schema/EventDef/event-def.d.ts +106 -0
  108. package/dist/schema/EventDef/event-def.d.ts.map +1 -0
  109. package/dist/schema/EventDef/event-def.js +2 -0
  110. package/dist/schema/EventDef/event-def.js.map +1 -0
  111. package/dist/schema/EventDef/facts.d.ts +118 -0
  112. package/dist/schema/EventDef/facts.d.ts.map +1 -0
  113. package/dist/schema/EventDef/facts.js +53 -0
  114. package/dist/schema/EventDef/facts.js.map +1 -0
  115. package/dist/schema/EventDef/materializer.d.ts +155 -0
  116. package/dist/schema/EventDef/materializer.d.ts.map +1 -0
  117. package/dist/schema/EventDef/materializer.js +83 -0
  118. package/dist/schema/EventDef/materializer.js.map +1 -0
  119. package/dist/schema/EventDef/mod.d.ts +5 -0
  120. package/dist/schema/EventDef/mod.d.ts.map +1 -0
  121. package/dist/schema/EventDef/mod.js +5 -0
  122. package/dist/schema/EventDef/mod.js.map +1 -0
  123. package/dist/schema/EventSequenceNumber/client.d.ts +136 -0
  124. package/dist/schema/EventSequenceNumber/client.d.ts.map +1 -0
  125. package/dist/schema/EventSequenceNumber/client.js +193 -0
  126. package/dist/schema/EventSequenceNumber/client.js.map +1 -0
  127. package/dist/schema/EventSequenceNumber/global.d.ts +15 -0
  128. package/dist/schema/EventSequenceNumber/global.d.ts.map +1 -0
  129. package/dist/schema/EventSequenceNumber/global.js +14 -0
  130. package/dist/schema/EventSequenceNumber/global.js.map +1 -0
  131. package/dist/schema/EventSequenceNumber/mod.d.ts +37 -0
  132. package/dist/schema/EventSequenceNumber/mod.d.ts.map +1 -0
  133. package/dist/schema/EventSequenceNumber/mod.js +37 -0
  134. package/dist/schema/EventSequenceNumber/mod.js.map +1 -0
  135. package/dist/schema/EventSequenceNumber.test.js +43 -43
  136. package/dist/schema/EventSequenceNumber.test.js.map +1 -1
  137. package/dist/schema/{LiveStoreEvent.d.ts → LiveStoreEvent/client.d.ts} +89 -106
  138. package/dist/schema/LiveStoreEvent/client.d.ts.map +1 -0
  139. package/dist/schema/{LiveStoreEvent.js → LiveStoreEvent/client.js} +74 -58
  140. package/dist/schema/LiveStoreEvent/client.js.map +1 -0
  141. package/dist/schema/LiveStoreEvent/for-event-def.d.ts +52 -0
  142. package/dist/schema/LiveStoreEvent/for-event-def.d.ts.map +1 -0
  143. package/dist/schema/LiveStoreEvent/for-event-def.js +2 -0
  144. package/dist/schema/LiveStoreEvent/for-event-def.js.map +1 -0
  145. package/dist/schema/LiveStoreEvent/global.d.ts +36 -0
  146. package/dist/schema/LiveStoreEvent/global.d.ts.map +1 -0
  147. package/dist/schema/LiveStoreEvent/global.js +31 -0
  148. package/dist/schema/LiveStoreEvent/global.js.map +1 -0
  149. package/dist/schema/LiveStoreEvent/input.d.ts +46 -0
  150. package/dist/schema/LiveStoreEvent/input.d.ts.map +1 -0
  151. package/dist/schema/LiveStoreEvent/input.js +26 -0
  152. package/dist/schema/LiveStoreEvent/input.js.map +1 -0
  153. package/dist/schema/LiveStoreEvent/mod.d.ts +5 -0
  154. package/dist/schema/LiveStoreEvent/mod.d.ts.map +1 -0
  155. package/dist/schema/LiveStoreEvent/mod.js +5 -0
  156. package/dist/schema/LiveStoreEvent/mod.js.map +1 -0
  157. package/dist/schema/events.d.ts +1 -1
  158. package/dist/schema/events.d.ts.map +1 -1
  159. package/dist/schema/events.js +1 -1
  160. package/dist/schema/events.js.map +1 -1
  161. package/dist/schema/mod.d.ts +6 -4
  162. package/dist/schema/mod.d.ts.map +1 -1
  163. package/dist/schema/mod.js +5 -4
  164. package/dist/schema/mod.js.map +1 -1
  165. package/dist/schema/schema.d.ts +16 -1
  166. package/dist/schema/schema.d.ts.map +1 -1
  167. package/dist/schema/schema.js +27 -2
  168. package/dist/schema/schema.js.map +1 -1
  169. package/dist/schema/state/sqlite/client-document-def.d.ts +36 -6
  170. package/dist/schema/state/sqlite/client-document-def.d.ts.map +1 -1
  171. package/dist/schema/state/sqlite/client-document-def.js +97 -6
  172. package/dist/schema/state/sqlite/client-document-def.js.map +1 -1
  173. package/dist/schema/state/sqlite/client-document-def.test.js +16 -0
  174. package/dist/schema/state/sqlite/client-document-def.test.js.map +1 -1
  175. package/dist/schema/state/sqlite/column-annotations.d.ts.map +1 -1
  176. package/dist/schema/state/sqlite/column-annotations.js +14 -6
  177. package/dist/schema/state/sqlite/column-annotations.js.map +1 -1
  178. package/dist/schema/state/sqlite/column-annotations.test.js +1 -1
  179. package/dist/schema/state/sqlite/column-annotations.test.js.map +1 -1
  180. package/dist/schema/state/sqlite/column-def.js +69 -22
  181. package/dist/schema/state/sqlite/column-def.js.map +1 -1
  182. package/dist/schema/state/sqlite/column-def.test.js +48 -10
  183. package/dist/schema/state/sqlite/column-def.test.js.map +1 -1
  184. package/dist/schema/state/sqlite/column-spec.d.ts.map +1 -1
  185. package/dist/schema/state/sqlite/column-spec.js +30 -12
  186. package/dist/schema/state/sqlite/column-spec.js.map +1 -1
  187. package/dist/schema/state/sqlite/column-spec.test.js +23 -14
  188. package/dist/schema/state/sqlite/column-spec.test.js.map +1 -1
  189. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts +2 -1
  190. package/dist/schema/state/sqlite/db-schema/ast/sqlite.d.ts.map +1 -1
  191. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js +23 -6
  192. package/dist/schema/state/sqlite/db-schema/ast/sqlite.js.map +1 -1
  193. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts +14 -8
  194. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.d.ts.map +1 -1
  195. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js +5 -3
  196. package/dist/schema/state/sqlite/db-schema/dsl/field-defs.js.map +1 -1
  197. package/dist/schema/state/sqlite/db-schema/dsl/mod.d.ts.map +1 -1
  198. package/dist/schema/state/sqlite/db-schema/dsl/mod.js +2 -1
  199. package/dist/schema/state/sqlite/db-schema/dsl/mod.js.map +1 -1
  200. package/dist/schema/state/sqlite/mod.d.ts +3 -3
  201. package/dist/schema/state/sqlite/mod.d.ts.map +1 -1
  202. package/dist/schema/state/sqlite/mod.js +3 -3
  203. package/dist/schema/state/sqlite/mod.js.map +1 -1
  204. package/dist/schema/state/sqlite/query-builder/api.d.ts +19 -11
  205. package/dist/schema/state/sqlite/query-builder/api.d.ts.map +1 -1
  206. package/dist/schema/state/sqlite/query-builder/astToSql.d.ts.map +1 -1
  207. package/dist/schema/state/sqlite/query-builder/astToSql.js +22 -15
  208. package/dist/schema/state/sqlite/query-builder/astToSql.js.map +1 -1
  209. package/dist/schema/state/sqlite/query-builder/impl.d.ts.map +1 -1
  210. package/dist/schema/state/sqlite/query-builder/impl.js +6 -3
  211. package/dist/schema/state/sqlite/query-builder/impl.js.map +1 -1
  212. package/dist/schema/state/sqlite/query-builder/impl.test.js +252 -88
  213. package/dist/schema/state/sqlite/query-builder/impl.test.js.map +1 -1
  214. package/dist/schema/state/sqlite/schema-helpers.d.ts +2 -2
  215. package/dist/schema/state/sqlite/schema-helpers.d.ts.map +1 -1
  216. package/dist/schema/state/sqlite/schema-helpers.js +22 -12
  217. package/dist/schema/state/sqlite/schema-helpers.js.map +1 -1
  218. package/dist/schema/state/sqlite/schema-helpers.test.d.ts +2 -0
  219. package/dist/schema/state/sqlite/schema-helpers.test.d.ts.map +1 -0
  220. package/dist/schema/state/sqlite/schema-helpers.test.js +36 -0
  221. package/dist/schema/state/sqlite/schema-helpers.test.js.map +1 -0
  222. package/dist/schema/state/sqlite/{system-tables.d.ts → system-tables/eventlog-tables.d.ts} +63 -456
  223. package/dist/schema/state/sqlite/system-tables/eventlog-tables.d.ts.map +1 -0
  224. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js +54 -0
  225. package/dist/schema/state/sqlite/system-tables/eventlog-tables.js.map +1 -0
  226. package/dist/schema/state/sqlite/system-tables/mod.d.ts +3 -0
  227. package/dist/schema/state/sqlite/system-tables/mod.d.ts.map +1 -0
  228. package/dist/schema/state/sqlite/system-tables/mod.js +3 -0
  229. package/dist/schema/state/sqlite/system-tables/mod.js.map +1 -0
  230. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts +456 -0
  231. package/dist/schema/state/sqlite/system-tables/state-tables.d.ts.map +1 -0
  232. package/dist/schema/state/sqlite/system-tables/state-tables.js +55 -0
  233. package/dist/schema/state/sqlite/system-tables/state-tables.js.map +1 -0
  234. package/dist/schema/state/sqlite/table-def.d.ts +4 -4
  235. package/dist/schema/state/sqlite/table-def.d.ts.map +1 -1
  236. package/dist/schema/state/sqlite/table-def.js +2 -2
  237. package/dist/schema/state/sqlite/table-def.js.map +1 -1
  238. package/dist/schema/state/sqlite/table-def.test.js +80 -0
  239. package/dist/schema/state/sqlite/table-def.test.js.map +1 -1
  240. package/dist/schema/unknown-events.d.ts +47 -0
  241. package/dist/schema/unknown-events.d.ts.map +1 -0
  242. package/dist/schema/unknown-events.js +69 -0
  243. package/dist/schema/unknown-events.js.map +1 -0
  244. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts +2 -0
  245. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.d.ts.map +1 -0
  246. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js +73 -0
  247. package/dist/schema-management/__tests__/migrations-autoincrement-quoting.test.js.map +1 -0
  248. package/dist/schema-management/migrations.d.ts +32 -2
  249. package/dist/schema-management/migrations.d.ts.map +1 -1
  250. package/dist/schema-management/migrations.js +37 -5
  251. package/dist/schema-management/migrations.js.map +1 -1
  252. package/dist/schema-management/validate-schema.d.ts +3 -3
  253. package/dist/schema-management/validate-schema.d.ts.map +1 -1
  254. package/dist/schema-management/validate-schema.js +2 -2
  255. package/dist/schema-management/validate-schema.js.map +1 -1
  256. package/dist/sql-queries/sql-queries.d.ts.map +1 -1
  257. package/dist/sql-queries/sql-queries.js +11 -1
  258. package/dist/sql-queries/sql-queries.js.map +1 -1
  259. package/dist/sql-queries/sql-query-builder.d.ts.map +1 -1
  260. package/dist/sql-queries/sql-query-builder.js +2 -1
  261. package/dist/sql-queries/sql-query-builder.js.map +1 -1
  262. package/dist/sqlite-types.d.ts +3 -3
  263. package/dist/sqlite-types.d.ts.map +1 -1
  264. package/dist/sync/ClientSessionSyncProcessor.d.ts +11 -13
  265. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  266. package/dist/sync/ClientSessionSyncProcessor.js +45 -42
  267. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  268. package/dist/sync/errors.d.ts +66 -0
  269. package/dist/sync/errors.d.ts.map +1 -0
  270. package/dist/sync/errors.js +36 -0
  271. package/dist/sync/errors.js.map +1 -0
  272. package/dist/sync/index.d.ts +3 -0
  273. package/dist/sync/index.d.ts.map +1 -1
  274. package/dist/sync/index.js +3 -0
  275. package/dist/sync/index.js.map +1 -1
  276. package/dist/sync/mock-sync-backend.d.ts +23 -0
  277. package/dist/sync/mock-sync-backend.d.ts.map +1 -0
  278. package/dist/sync/mock-sync-backend.js +114 -0
  279. package/dist/sync/mock-sync-backend.js.map +1 -0
  280. package/dist/sync/next/compact-events.d.ts.map +1 -1
  281. package/dist/sync/next/compact-events.js +6 -7
  282. package/dist/sync/next/compact-events.js.map +1 -1
  283. package/dist/sync/next/facts.d.ts +5 -5
  284. package/dist/sync/next/facts.d.ts.map +1 -1
  285. package/dist/sync/next/facts.js +1 -2
  286. package/dist/sync/next/facts.js.map +1 -1
  287. package/dist/sync/next/history-dag-common.d.ts +54 -15
  288. package/dist/sync/next/history-dag-common.d.ts.map +1 -1
  289. package/dist/sync/next/history-dag-common.js +198 -9
  290. package/dist/sync/next/history-dag-common.js.map +1 -1
  291. package/dist/sync/next/history-dag.d.ts.map +1 -1
  292. package/dist/sync/next/history-dag.js +10 -8
  293. package/dist/sync/next/history-dag.js.map +1 -1
  294. package/dist/sync/next/rebase-events.d.ts +5 -5
  295. package/dist/sync/next/rebase-events.d.ts.map +1 -1
  296. package/dist/sync/next/rebase-events.js +5 -5
  297. package/dist/sync/next/rebase-events.js.map +1 -1
  298. package/dist/sync/next/test/event-fixtures.d.ts +2 -2
  299. package/dist/sync/next/test/event-fixtures.d.ts.map +1 -1
  300. package/dist/sync/next/test/event-fixtures.js +9 -9
  301. package/dist/sync/next/test/event-fixtures.js.map +1 -1
  302. package/dist/sync/sync-backend-kv.d.ts +7 -0
  303. package/dist/sync/sync-backend-kv.d.ts.map +1 -0
  304. package/dist/sync/sync-backend-kv.js +18 -0
  305. package/dist/sync/sync-backend-kv.js.map +1 -0
  306. package/dist/sync/sync-backend.d.ts +105 -0
  307. package/dist/sync/sync-backend.d.ts.map +1 -0
  308. package/dist/sync/sync-backend.js +61 -0
  309. package/dist/sync/sync-backend.js.map +1 -0
  310. package/dist/sync/sync.d.ts +9 -86
  311. package/dist/sync/sync.d.ts.map +1 -1
  312. package/dist/sync/sync.js +2 -27
  313. package/dist/sync/sync.js.map +1 -1
  314. package/dist/sync/syncstate.d.ts +57 -44
  315. package/dist/sync/syncstate.d.ts.map +1 -1
  316. package/dist/sync/syncstate.js +50 -45
  317. package/dist/sync/syncstate.js.map +1 -1
  318. package/dist/sync/syncstate.test.js +83 -46
  319. package/dist/sync/syncstate.test.js.map +1 -1
  320. package/dist/sync/transport-chunking.d.ts +36 -0
  321. package/dist/sync/transport-chunking.d.ts.map +1 -0
  322. package/dist/sync/transport-chunking.js +56 -0
  323. package/dist/sync/transport-chunking.js.map +1 -0
  324. package/dist/sync/validate-push-payload.d.ts +2 -2
  325. package/dist/sync/validate-push-payload.d.ts.map +1 -1
  326. package/dist/sync/validate-push-payload.js +6 -6
  327. package/dist/sync/validate-push-payload.js.map +1 -1
  328. package/dist/testing/event-factory.d.ts +68 -0
  329. package/dist/testing/event-factory.d.ts.map +1 -0
  330. package/dist/testing/event-factory.js +78 -0
  331. package/dist/testing/event-factory.js.map +1 -0
  332. package/dist/testing/mod.d.ts +2 -0
  333. package/dist/testing/mod.d.ts.map +1 -0
  334. package/dist/testing/mod.js +2 -0
  335. package/dist/testing/mod.js.map +1 -0
  336. package/dist/version.d.ts +16 -6
  337. package/dist/version.d.ts.map +1 -1
  338. package/dist/version.js +16 -6
  339. package/dist/version.js.map +1 -1
  340. package/package.json +7 -8
  341. package/src/ClientSessionLeaderThreadProxy.ts +20 -12
  342. package/src/adapter-types.ts +18 -6
  343. package/src/debug-info.ts +37 -6
  344. package/src/devtools/devtools-messages-client-session.ts +2 -2
  345. package/src/devtools/devtools-messages-common.ts +1 -8
  346. package/src/devtools/devtools-messages-leader.ts +9 -8
  347. package/src/devtools/devtools-sessioninfo.ts +8 -5
  348. package/src/devtools/mod.ts +11 -2
  349. package/src/errors.ts +38 -11
  350. package/src/index.ts +2 -1
  351. package/src/leader-thread/LeaderSyncProcessor.ts +277 -105
  352. package/src/leader-thread/eventlog.ts +113 -38
  353. package/src/leader-thread/leader-worker-devtools.ts +86 -55
  354. package/src/leader-thread/make-leader-thread-layer.test.ts +44 -0
  355. package/src/leader-thread/make-leader-thread-layer.ts +156 -37
  356. package/src/leader-thread/materialize-event.ts +37 -12
  357. package/src/leader-thread/mod.ts +1 -0
  358. package/src/leader-thread/recreate-db.ts +15 -7
  359. package/src/leader-thread/shutdown-channel.ts +16 -2
  360. package/src/leader-thread/stream-events.ts +201 -0
  361. package/src/leader-thread/types.ts +70 -20
  362. package/src/logging.ts +62 -0
  363. package/src/make-client-session.ts +9 -3
  364. package/src/materializer-helper.ts +27 -10
  365. package/src/otel.ts +10 -0
  366. package/src/rematerialize-from-eventlog.ts +37 -27
  367. package/src/schema/EventDef/define.ts +201 -0
  368. package/src/schema/EventDef/event-def.ts +120 -0
  369. package/src/schema/EventDef/facts.ts +135 -0
  370. package/src/schema/EventDef/materializer.ts +172 -0
  371. package/src/schema/EventDef/mod.ts +4 -0
  372. package/src/schema/EventSequenceNumber/client.ts +257 -0
  373. package/src/schema/EventSequenceNumber/global.ts +19 -0
  374. package/src/schema/EventSequenceNumber/mod.ts +37 -0
  375. package/src/schema/EventSequenceNumber.test.ts +70 -52
  376. package/src/schema/LiveStoreEvent/client.ts +221 -0
  377. package/src/schema/LiveStoreEvent/for-event-def.ts +60 -0
  378. package/src/schema/LiveStoreEvent/global.ts +45 -0
  379. package/src/schema/LiveStoreEvent/input.ts +63 -0
  380. package/src/schema/LiveStoreEvent/mod.ts +4 -0
  381. package/src/schema/events.ts +1 -1
  382. package/src/schema/mod.ts +6 -4
  383. package/src/schema/schema.ts +39 -3
  384. package/src/schema/state/sqlite/client-document-def.test.ts +19 -2
  385. package/src/schema/state/sqlite/client-document-def.ts +127 -25
  386. package/src/schema/state/sqlite/column-annotations.test.ts +1 -1
  387. package/src/schema/state/sqlite/column-annotations.ts +16 -6
  388. package/src/schema/state/sqlite/column-def.test.ts +62 -10
  389. package/src/schema/state/sqlite/column-def.ts +88 -21
  390. package/src/schema/state/sqlite/column-spec.test.ts +29 -16
  391. package/src/schema/state/sqlite/column-spec.ts +36 -11
  392. package/src/schema/state/sqlite/db-schema/ast/sqlite.ts +26 -6
  393. package/src/schema/state/sqlite/db-schema/dsl/field-defs.ts +29 -12
  394. package/src/schema/state/sqlite/db-schema/dsl/mod.ts +12 -17
  395. package/src/schema/state/sqlite/mod.ts +4 -3
  396. package/src/schema/state/sqlite/query-builder/api.ts +25 -11
  397. package/src/schema/state/sqlite/query-builder/astToSql.ts +23 -14
  398. package/src/schema/state/sqlite/query-builder/impl.test.ts +305 -92
  399. package/src/schema/state/sqlite/query-builder/impl.ts +8 -3
  400. package/src/schema/state/sqlite/schema-helpers.test.ts +44 -0
  401. package/src/schema/state/sqlite/schema-helpers.ts +28 -20
  402. package/src/schema/state/sqlite/system-tables/eventlog-tables.ts +64 -0
  403. package/src/schema/state/sqlite/system-tables/mod.ts +2 -0
  404. package/src/schema/state/sqlite/system-tables/state-tables.ts +69 -0
  405. package/src/schema/state/sqlite/table-def.test.ts +101 -0
  406. package/src/schema/state/sqlite/table-def.ts +8 -6
  407. package/src/schema/unknown-events.ts +131 -0
  408. package/src/schema-management/__tests__/migrations-autoincrement-quoting.test.ts +86 -0
  409. package/src/schema-management/migrations.ts +41 -8
  410. package/src/schema-management/validate-schema.ts +3 -3
  411. package/src/sql-queries/sql-queries.ts +9 -1
  412. package/src/sql-queries/sql-query-builder.ts +2 -1
  413. package/src/sqlite-types.ts +3 -3
  414. package/src/sync/ClientSessionSyncProcessor.ts +69 -62
  415. package/src/sync/errors.ts +38 -0
  416. package/src/sync/index.ts +3 -0
  417. package/src/sync/mock-sync-backend.ts +184 -0
  418. package/src/sync/next/compact-events.ts +6 -7
  419. package/src/sync/next/facts.ts +7 -9
  420. package/src/sync/next/history-dag-common.ts +277 -26
  421. package/src/sync/next/history-dag.ts +16 -10
  422. package/src/sync/next/rebase-events.ts +11 -11
  423. package/src/sync/next/test/event-fixtures.ts +11 -11
  424. package/src/sync/sync-backend-kv.ts +22 -0
  425. package/src/sync/sync-backend.ts +185 -0
  426. package/src/sync/sync.ts +9 -91
  427. package/src/sync/syncstate.test.ts +96 -52
  428. package/src/sync/syncstate.ts +69 -58
  429. package/src/sync/transport-chunking.ts +90 -0
  430. package/src/sync/validate-push-payload.ts +8 -9
  431. package/src/testing/event-factory.ts +131 -0
  432. package/src/testing/mod.ts +1 -0
  433. package/src/version.ts +16 -6
  434. package/dist/schema/EventDef.d.ts +0 -123
  435. package/dist/schema/EventDef.d.ts.map +0 -1
  436. package/dist/schema/EventDef.js +0 -46
  437. package/dist/schema/EventDef.js.map +0 -1
  438. package/dist/schema/EventSequenceNumber.d.ts +0 -80
  439. package/dist/schema/EventSequenceNumber.d.ts.map +0 -1
  440. package/dist/schema/EventSequenceNumber.js +0 -139
  441. package/dist/schema/EventSequenceNumber.js.map +0 -1
  442. package/dist/schema/LiveStoreEvent.d.ts.map +0 -1
  443. package/dist/schema/LiveStoreEvent.js.map +0 -1
  444. package/dist/schema/state/sqlite/system-tables.d.ts.map +0 -1
  445. package/dist/schema/state/sqlite/system-tables.js +0 -79
  446. package/dist/schema/state/sqlite/system-tables.js.map +0 -1
  447. package/dist/schema-management/migrations.test.d.ts +0 -2
  448. package/dist/schema-management/migrations.test.d.ts.map +0 -1
  449. package/dist/schema-management/migrations.test.js +0 -52
  450. package/dist/schema-management/migrations.test.js.map +0 -1
  451. package/dist/sync/next/graphology.d.ts +0 -8
  452. package/dist/sync/next/graphology.d.ts.map +0 -1
  453. package/dist/sync/next/graphology.js +0 -30
  454. package/dist/sync/next/graphology.js.map +0 -1
  455. package/dist/sync/next/graphology_.d.ts +0 -3
  456. package/dist/sync/next/graphology_.d.ts.map +0 -1
  457. package/dist/sync/next/graphology_.js +0 -3
  458. package/dist/sync/next/graphology_.js.map +0 -1
  459. package/src/schema/EventDef.ts +0 -219
  460. package/src/schema/EventSequenceNumber.ts +0 -199
  461. package/src/schema/LiveStoreEvent.ts +0 -287
  462. package/src/schema/state/sqlite/system-tables.ts +0 -104
  463. package/src/sync/next/ambient.d.ts +0 -3
  464. package/src/sync/next/graphology.ts +0 -41
  465. package/src/sync/next/graphology_.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"validate-push-payload.js","sourceRoot":"","sources":["../../src/sync/validate-push-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE5C,+BAA+B;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAqD,EACrD,0BAAyE,EACzE,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAClC,MAAM,EAAE;gBACN,IAAI,EAAE,aAAa;gBACnB,kBAAkB,EAAE,0BAA0B,GAAG,CAAC;gBAClD,WAAW,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM;aAC9B;SACF,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"validate-push-payload.js","sourceRoot":"","sources":["../../src/sync/validate-push-payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAAuB,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE9D,+BAA+B;AAC/B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAmD,EACnD,0BAA2D,EAC3D,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,0BAA0B,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAClC,KAAK,EAAE,IAAI,gBAAgB,CAAC;gBAC1B,kBAAkB,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC;gBACnF,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;aAC/D,CAAC;SACH,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAC,CAAA"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Helpers for synthesizing LiveStore events in tests while keeping track of
3
+ * sequence numbers, parent pointers, and authoring client identity. Inspired
4
+ * by the effect-based schema utilities, the factory exposes a namespaced API
5
+ * where each event definition maps to a helper with `next`, `advanceTo`, and
6
+ * `setParent` functions that share a single sequence stream.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { EventFactory } from '@livestore/common/testing'
11
+ * import { events } from './schema'
12
+ *
13
+ * const eventFactory = EventFactory.makeFactory(events)({
14
+ * client: EventFactory.clientIdentity('test-client'),
15
+ * startSeq: 1,
16
+ * initialParent: 'root',
17
+ * })
18
+ *
19
+ * const bootstrap = eventFactory.todoCreated.next({
20
+ * id: 'todo-1',
21
+ * text: 'write tests',
22
+ * completed: false,
23
+ * })
24
+ *
25
+ * eventFactory.todoCreated.advanceTo(42)
26
+ * const branched = eventFactory.todoUpdated.next({
27
+ * id: 'todo-1',
28
+ * text: 'ship feature',
29
+ * completed: true,
30
+ * })
31
+ * ```
32
+ */
33
+ import type { EventDef } from '../schema/EventDef/mod.ts';
34
+ import * as LiveStoreEvent from '../schema/LiveStoreEvent/mod.ts';
35
+ export interface ClientIdentity {
36
+ clientId: string;
37
+ sessionId: string;
38
+ }
39
+ export declare const clientIdentity: (label: string, session?: string) => ClientIdentity;
40
+ export type SequenceValue = 'root' | number;
41
+ type EventFactoriesArgs<TDefs extends Record<string, EventDef.Any>> = {
42
+ [K in keyof TDefs]: Parameters<TDefs[K]>[0];
43
+ };
44
+ type EventFactories<TDefs extends Record<string, EventDef.Any>, TResult> = {
45
+ [K in keyof TDefs]: {
46
+ next: (args: EventFactoriesArgs<TDefs>[K]) => TResult;
47
+ advanceTo: (seq: number, parent?: SequenceValue) => void;
48
+ setParent: (parent: SequenceValue) => void;
49
+ current: () => {
50
+ seq: number;
51
+ parent: SequenceValue;
52
+ };
53
+ };
54
+ };
55
+ export interface EventFactoriesConfig {
56
+ client: ClientIdentity;
57
+ /**
58
+ * @default 1
59
+ */
60
+ startSeq?: number;
61
+ /**
62
+ * @default 0 (root)
63
+ */
64
+ initialParent?: SequenceValue;
65
+ }
66
+ export declare const makeFactory: <TDefs extends Record<string, EventDef.Any>>(eventDefs: TDefs) => ({ client, startSeq, initialParent, }: EventFactoriesConfig) => EventFactories<TDefs, LiveStoreEvent.Global.Encoded>;
67
+ export {};
68
+ //# sourceMappingURL=event-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-factory.d.ts","sourceRoot":"","sources":["../../src/testing/event-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAIH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAEzD,OAAO,KAAK,cAAc,MAAM,iCAAiC,CAAA;AAEjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,EAAE,gBAA4B,KAAG,cAG3E,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAA;AAE3C,KAAK,kBAAkB,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI;KACnE,CAAC,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5C,CAAA;AAED,KAAK,cAAc,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI;KACxE,CAAC,IAAI,MAAM,KAAK,GAAG;QAClB,IAAI,EAAE,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAA;QACrD,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,KAAK,IAAI,CAAA;QACxD,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;QAC1C,OAAO,EAAE,MAAM;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,aAAa,CAAA;SAAE,CAAA;KACtD;CACF,CAAA;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,eAAO,MAAM,WAAW,GACrB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,WAAW,KAAK,MAC5D,sCAIE,oBAAoB,KAAG,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAgD5E,CAAA"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Helpers for synthesizing LiveStore events in tests while keeping track of
3
+ * sequence numbers, parent pointers, and authoring client identity. Inspired
4
+ * by the effect-based schema utilities, the factory exposes a namespaced API
5
+ * where each event definition maps to a helper with `next`, `advanceTo`, and
6
+ * `setParent` functions that share a single sequence stream.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { EventFactory } from '@livestore/common/testing'
11
+ * import { events } from './schema'
12
+ *
13
+ * const eventFactory = EventFactory.makeFactory(events)({
14
+ * client: EventFactory.clientIdentity('test-client'),
15
+ * startSeq: 1,
16
+ * initialParent: 'root',
17
+ * })
18
+ *
19
+ * const bootstrap = eventFactory.todoCreated.next({
20
+ * id: 'todo-1',
21
+ * text: 'write tests',
22
+ * completed: false,
23
+ * })
24
+ *
25
+ * eventFactory.todoCreated.advanceTo(42)
26
+ * const branched = eventFactory.todoUpdated.next({
27
+ * id: 'todo-1',
28
+ * text: 'ship feature',
29
+ * completed: true,
30
+ * })
31
+ * ```
32
+ */
33
+ import { Schema } from '@livestore/utils/effect';
34
+ import * as EventSequenceNumber from "../schema/EventSequenceNumber/mod.js";
35
+ import * as LiveStoreEvent from "../schema/LiveStoreEvent/mod.js";
36
+ export const clientIdentity = (label, session = `${label}-session`) => ({
37
+ clientId: label,
38
+ sessionId: session,
39
+ });
40
+ export const makeFactory = (eventDefs) => ({ client, startSeq = 1, initialParent = 'root', }) => {
41
+ let nextSeq = startSeq;
42
+ let parentRef = initialParent;
43
+ const advanceTo = (seq, parent = 'root') => {
44
+ nextSeq = seq;
45
+ parentRef = parent;
46
+ };
47
+ const setParent = (parent) => {
48
+ parentRef = parent;
49
+ };
50
+ const current = () => ({ seq: nextSeq, parent: parentRef });
51
+ const factories = {};
52
+ for (const [name, eventDef] of Object.entries(eventDefs)) {
53
+ const next = (args) => {
54
+ const decoded = eventDef(args);
55
+ const encodedArgs = Schema.encodeSync(eventDef.schema)(decoded.args);
56
+ const encoded = eventDef.encoded(encodedArgs);
57
+ const event = LiveStoreEvent.Global.Encoded.make({
58
+ name: encoded.name,
59
+ args: encoded.args,
60
+ seqNum: EventSequenceNumber.Global.make(nextSeq),
61
+ parentSeqNum: parentRef === 'root' ? EventSequenceNumber.Client.ROOT.global : EventSequenceNumber.Global.make(parentRef),
62
+ clientId: client.clientId,
63
+ sessionId: client.sessionId,
64
+ });
65
+ parentRef = nextSeq;
66
+ nextSeq = nextSeq + 1;
67
+ return event;
68
+ };
69
+ factories[name] = {
70
+ next,
71
+ advanceTo,
72
+ setParent,
73
+ current,
74
+ };
75
+ }
76
+ return factories;
77
+ };
78
+ //# sourceMappingURL=event-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-factory.js","sourceRoot":"","sources":["../../src/testing/event-factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,KAAK,mBAAmB,MAAM,sCAAsC,CAAA;AAC3E,OAAO,KAAK,cAAc,MAAM,iCAAiC,CAAA;AAOjE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,OAAO,GAAG,GAAG,KAAK,UAAU,EAAkB,EAAE,CAAC,CAAC;IAC9F,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,OAAO;CACnB,CAAC,CAAA;AA6BF,MAAM,CAAC,MAAM,WAAW,GACtB,CAA6C,SAAgB,EAAE,EAAE,CACjE,CAAC,EACC,MAAM,EACN,QAAQ,GAAG,CAAC,EACZ,aAAa,GAAG,MAAM,GACD,EAAwD,EAAE;IAC/E,IAAI,OAAO,GAAG,QAAQ,CAAA;IACtB,IAAI,SAAS,GAAkB,aAAa,CAAA;IAE5C,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,SAAwB,MAAM,EAAE,EAAE;QAChE,OAAO,GAAG,GAAG,CAAA;QACb,SAAS,GAAG,MAAM,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAC,MAAqB,EAAE,EAAE;QAC1C,SAAS,GAAG,MAAM,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;IAE3D,MAAM,SAAS,GAAkE,EAAE,CAAA;IAEnF,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAwC,EAAE,CAAC;QAChG,MAAM,IAAI,GAAG,CAAC,IAA4C,EAAE,EAAE;YAC5D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC9B,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAE7C,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC/C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChD,YAAY,EACV,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC5G,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAA;YAEF,SAAS,GAAG,OAAO,CAAA;YACnB,OAAO,GAAG,OAAO,GAAG,CAAC,CAAA;YAErB,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QAED,SAAS,CAAC,IAAI,CAAC,GAAG;YAChB,IAAI;YACJ,SAAS;YACT,SAAS;YACT,OAAO;SAC6D,CAAA;IACxE,CAAC;IAED,OAAO,SAAiE,CAAA;AAC1E,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * as EventFactory from './event-factory.ts';
2
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../src/testing/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * as EventFactory from "./event-factory.js";
2
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/testing/mod.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oBAAoB,CAAA"}
package/dist/version.d.ts CHANGED
@@ -1,10 +1,20 @@
1
- export declare const liveStoreVersion: "0.4.0-dev.2";
1
+ export declare const liveStoreVersion: "0.4.0-dev.21";
2
2
  /**
3
- * This version number is incremented whenever the internal storage format changes in a breaking way.
4
- * Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
3
+ * CRITICAL: Increment this version whenever you modify client-side EVENTLOG table schemas.
5
4
  *
6
- * While LiveStore is in beta, this might happen more frequently.
7
- * In the future, LiveStore will provide a migration path for older database files to avoid the impression of data loss.
5
+ * Used to generate database file names (e.g., `eventlog@6.db`, `state@6.db`) across all client adapters.
6
+ *
7
+ * Bump required when:
8
+ * - Modifying eventlog system tables (eventlogMetaTable, syncStatusTable) in schema/state/sqlite/system-tables/eventlog-tables.ts
9
+ * - Changing columns, types, constraints, or indexes in eventlog tables
10
+ *
11
+ * Bump NOT required when:
12
+ * - Modifying STATE table schemas (auto-migrated via hash-based detection and rebuilt from eventlog)
13
+ * - Changing query patterns or client-side implementation details
14
+ *
15
+ * ⚠️ CRITICAL: Eventlog changes without bumping this version cause permanent data loss!
16
+ *
17
+ * Impact: Version changes trigger a "soft reset" - old data becomes inaccessible but remains on disk.
8
18
  */
9
- export declare const liveStoreStorageFormatVersion = 5;
19
+ export declare const liveStoreStorageFormatVersion = 6;
10
20
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,EAAG,aAAsB,CAAA;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAA"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,EAAG,cAAuB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAA"}
package/dist/version.js CHANGED
@@ -1,13 +1,23 @@
1
1
  // TODO bring back when Expo and Playwright supports `with` imports
2
2
  // import packageJson from '../package.json' with { type: 'json' }
3
3
  // export const liveStoreVersion = packageJson.version
4
- export const liveStoreVersion = '0.4.0-dev.2';
4
+ export const liveStoreVersion = '0.4.0-dev.21';
5
5
  /**
6
- * This version number is incremented whenever the internal storage format changes in a breaking way.
7
- * Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
6
+ * CRITICAL: Increment this version whenever you modify client-side EVENTLOG table schemas.
8
7
  *
9
- * While LiveStore is in beta, this might happen more frequently.
10
- * In the future, LiveStore will provide a migration path for older database files to avoid the impression of data loss.
8
+ * Used to generate database file names (e.g., `eventlog@6.db`, `state@6.db`) across all client adapters.
9
+ *
10
+ * Bump required when:
11
+ * - Modifying eventlog system tables (eventlogMetaTable, syncStatusTable) in schema/state/sqlite/system-tables/eventlog-tables.ts
12
+ * - Changing columns, types, constraints, or indexes in eventlog tables
13
+ *
14
+ * Bump NOT required when:
15
+ * - Modifying STATE table schemas (auto-migrated via hash-based detection and rebuilt from eventlog)
16
+ * - Changing query patterns or client-side implementation details
17
+ *
18
+ * ⚠️ CRITICAL: Eventlog changes without bumping this version cause permanent data loss!
19
+ *
20
+ * Impact: Version changes trigger a "soft reset" - old data becomes inaccessible but remains on disk.
11
21
  */
12
- export const liveStoreStorageFormatVersion = 5;
22
+ export const liveStoreStorageFormatVersion = 6;
13
23
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kEAAkE;AAClE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAsB,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,kEAAkE;AAClE,sDAAsD;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAuB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/common",
3
- "version": "0.4.0-dev.2",
3
+ "version": "0.4.0-dev.21",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -8,20 +8,19 @@
8
8
  "./sql-queries": "./dist/sql-queries/index.js",
9
9
  "./leader-thread": "./dist/leader-thread/mod.js",
10
10
  "./schema": "./dist/schema/mod.js",
11
+ "./sync": "./dist/sync/index.js",
11
12
  "./sync/next": "./dist/sync/next/mod.js",
12
- "./sync/next/test": "./dist/sync/next/test/mod.js"
13
+ "./sync/next/test": "./dist/sync/next/test/mod.js",
14
+ "./testing": "./dist/testing/mod.js"
13
15
  },
14
16
  "dependencies": {
15
17
  "@opentelemetry/api": "1.9.0",
16
- "graphology": "0.26.0-alpha1",
17
- "graphology-dag": "0.4.1",
18
- "graphology-types": "0.24.8",
19
- "@livestore/utils": "0.4.0-dev.2",
20
- "@livestore/webmesh": "0.4.0-dev.2"
18
+ "@livestore/utils": "0.4.0-dev.21",
19
+ "@livestore/webmesh": "0.4.0-dev.21"
21
20
  },
22
21
  "devDependencies": {
23
22
  "vitest": "3.2.4",
24
- "@livestore/utils-dev": "0.4.0-dev.2"
23
+ "@livestore/utils-dev": "0.4.0-dev.21"
25
24
  },
26
25
  "files": [
27
26
  "package.json",
@@ -1,33 +1,41 @@
1
- import type { Effect, Stream } from '@livestore/utils/effect'
1
+ import type { Effect, Stream, Subscribable } from '@livestore/utils/effect'
2
2
 
3
3
  import type { MigrationsReport } from './defs.ts'
4
4
  import type * as Devtools from './devtools/mod.ts'
5
- import type { UnexpectedError } from './errors.ts'
6
- import type * as EventSequenceNumber from './schema/EventSequenceNumber.ts'
5
+ import type { UnknownError } from './errors.ts'
6
+ import type { StreamEventsOptions } from './leader-thread/types.ts'
7
+ import type * as EventSequenceNumber from './schema/EventSequenceNumber/mod.ts'
7
8
  import type { LiveStoreEvent } from './schema/mod.ts'
8
- import type { LeaderAheadError } from './sync/sync.ts'
9
+ import type { LeaderAheadError, SyncBackend } from './sync/sync.ts'
9
10
  import type { PayloadUpstream, SyncState } from './sync/syncstate.ts'
10
11
 
11
12
  export interface ClientSessionLeaderThreadProxy {
12
13
  events: {
13
14
  pull: (args: {
14
- cursor: EventSequenceNumber.EventSequenceNumber
15
- }) => Stream.Stream<{ payload: typeof PayloadUpstream.Type }, UnexpectedError>
15
+ cursor: EventSequenceNumber.Client.Composite
16
+ }) => Stream.Stream<{ payload: typeof PayloadUpstream.Type }, UnknownError>
16
17
  /** It's important that a client session doesn't call `push` concurrently. */
17
- push(batch: ReadonlyArray<LiveStoreEvent.AnyEncoded>): Effect.Effect<void, UnexpectedError | LeaderAheadError>
18
+ push(batch: ReadonlyArray<LiveStoreEvent.Client.Encoded>): Effect.Effect<void, UnknownError | LeaderAheadError>
19
+ /** Stream events with filtering */
20
+ stream(options: StreamEventsOptions): Stream.Stream<LiveStoreEvent.Client.Encoded, UnknownError>
18
21
  }
19
22
  /** The initial state after the leader thread has booted */
20
23
  readonly initialState: {
21
24
  /** The latest event sequence number during boot. Used for the client session to resume syncing. */
22
- readonly leaderHead: EventSequenceNumber.EventSequenceNumber
25
+ readonly leaderHead: EventSequenceNumber.Client.Composite
23
26
  /** The migrations report from the leader thread */
24
27
  readonly migrationsReport: MigrationsReport
25
28
  }
26
- export: Effect.Effect<Uint8Array<ArrayBuffer>, UnexpectedError>
27
- getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer>, UnexpectedError>
28
- getSyncState: Effect.Effect<SyncState, UnexpectedError>
29
+ export: Effect.Effect<Uint8Array<ArrayBuffer>, UnknownError>
30
+ getEventlogData: Effect.Effect<Uint8Array<ArrayBuffer>, UnknownError>
31
+ syncState: Subscribable.Subscribable<SyncState, UnknownError>
29
32
  /** For debugging purposes it can be useful to manually trigger devtools messages (e.g. to reset the database) */
30
- sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void, UnexpectedError>
33
+ sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void, UnknownError>
34
+ /**
35
+ * Reactive stream describing the connectivity between the leader and its upstream sync backend.
36
+ * Includes raw connection state, last transition timestamp, and devtools overrides (latch state).
37
+ */
38
+ networkStatus: Subscribable.Subscribable<SyncBackend.NetworkStatus>
31
39
  }
32
40
 
33
41
  export const of = (
@@ -10,15 +10,21 @@ import {
10
10
 
11
11
  import type { ClientSessionLeaderThreadProxy } from './ClientSessionLeaderThreadProxy.ts'
12
12
  import type * as Devtools from './devtools/mod.ts'
13
- import type { IntentionalShutdownCause, SyncError, UnexpectedError } from './errors.ts'
13
+ import type { IntentionalShutdownCause, MaterializeError, UnknownError } from './errors.ts'
14
14
  import type { LiveStoreSchema } from './schema/mod.ts'
15
15
  import type { SqliteDb } from './sqlite-types.ts'
16
+ import type { IsOfflineError, SyncError } from './sync/index.ts'
16
17
 
17
18
  export * as ClientSessionLeaderThreadProxy from './ClientSessionLeaderThreadProxy.ts'
18
19
  export * from './defs.ts'
19
20
  export * from './errors.ts'
20
21
  export * from './sqlite-types.ts'
21
22
 
23
+ /**
24
+ * Runtime handle to an active LiveStore client session within the current process.
25
+ * Provides direct access to the embedded SQLite database, leader thread bridge,
26
+ * and lifecycle controls useful for application-level coordination.
27
+ */
22
28
  export interface ClientSession {
23
29
  /** SQLite database with synchronous API running in the same thread (usually in-memory) */
24
30
  sqliteDb: SqliteDb
@@ -27,7 +33,9 @@ export interface ClientSession {
27
33
  sessionId: string
28
34
  /** Status info whether current session is leader or not */
29
35
  lockStatus: SubscriptionRef.SubscriptionRef<LockStatus>
30
- shutdown: (cause: Exit.Exit<IntentionalShutdownCause, UnexpectedError | SyncError>) => Effect.Effect<void>
36
+ shutdown: (
37
+ cause: Exit.Exit<IntentionalShutdownCause, UnknownError | SyncError | MaterializeError>,
38
+ ) => Effect.Effect<void>
31
39
  /** A proxy API to communicate with the leader thread */
32
40
  leaderThread: ClientSessionLeaderThreadProxy
33
41
  /** A unique identifier for the current instance of the client session. Used for debugging purposes. */
@@ -111,9 +119,9 @@ export interface ClientSessionDevtoolsChannel
111
119
 
112
120
  export type ConnectDevtoolsToStore = (
113
121
  storeDevtoolsChannel: ClientSessionDevtoolsChannel,
114
- ) => Effect.Effect<void, UnexpectedError, Scope.Scope>
122
+ ) => Effect.Effect<void, UnknownError, Scope.Scope>
115
123
 
116
- export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession, UnexpectedError, Scope.Scope>
124
+ export type Adapter = (args: AdapterArgs) => Effect.Effect<ClientSession, UnknownError, Scope.Scope>
117
125
 
118
126
  export interface AdapterArgs {
119
127
  schema: LiveStoreSchema
@@ -121,12 +129,16 @@ export interface AdapterArgs {
121
129
  devtoolsEnabled: boolean
122
130
  debugInstanceId: string
123
131
  bootStatusQueue: Queue.Queue<BootStatus>
124
- shutdown: (exit: Exit.Exit<IntentionalShutdownCause, UnexpectedError | SyncError>) => Effect.Effect<void>
132
+ shutdown: (
133
+ exit: Exit.Exit<IntentionalShutdownCause, UnknownError | SyncError | MaterializeError | IsOfflineError>,
134
+ ) => Effect.Effect<void>
125
135
  connectDevtoolsToStore: ConnectDevtoolsToStore
126
136
  /**
127
137
  * Payload that will be passed to the sync backend when connecting
128
138
  *
129
139
  * @default undefined
130
140
  */
131
- syncPayload: Schema.JsonValue | undefined
141
+ syncPayloadSchema: Schema.Schema<any> | undefined
142
+ /** Encoded representation of the sync payload matching `syncPayloadSchema`. */
143
+ syncPayloadEncoded: Schema.JsonValue | undefined
132
144
  }
package/src/debug-info.ts CHANGED
@@ -22,6 +22,15 @@ export const SlowQueryInfo = Schema.Struct({
22
22
  startTimePerfNow: Schema.Number,
23
23
  })
24
24
 
25
+ const getSizeLimit = (value: unknown): number =>
26
+ typeof (value as { sizeLimit?: number }).sizeLimit === 'number'
27
+ ? (value as { sizeLimit: number }).sizeLimit
28
+ : Number.POSITIVE_INFINITY
29
+
30
+ const isBoundArrayLike = (value: unknown): value is BoundArray<unknown> =>
31
+ value instanceof BoundArray ||
32
+ (value !== null && typeof value === 'object' && typeof (value as { sizeLimit?: number }).sizeLimit === 'number')
33
+
25
34
  const BoundArraySchemaFromSelf = <A, I, R>(
26
35
  item: Schema.Schema<A, I, R>,
27
36
  ): Schema.Schema<BoundArray<A>, BoundArray<I>, R> =>
@@ -29,16 +38,17 @@ const BoundArraySchemaFromSelf = <A, I, R>(
29
38
  [item],
30
39
  {
31
40
  decode: (item) => (input, parseOptions, ast) => {
32
- if (input instanceof BoundArray) {
41
+ if (isBoundArrayLike(input)) {
33
42
  const elements = ParseResult.decodeUnknown(Schema.Array(item))([...input], parseOptions)
34
- return ParseResult.map(elements, (as): BoundArray<A> => BoundArray.make(input.sizeLimit, as))
43
+ return ParseResult.map(elements, (as): BoundArray<A> => BoundArray.make(getSizeLimit(input), as))
35
44
  }
36
45
  return ParseResult.fail(new ParseResult.Type(ast, input))
37
46
  },
38
47
  encode: (item) => (input, parseOptions, ast) => {
39
- if (input instanceof BoundArray) {
40
- const elements = ParseResult.encodeUnknown(Schema.Array(item))([...input], parseOptions)
41
- return ParseResult.map(elements, (is): BoundArray<I> => BoundArray.make(input.sizeLimit, is))
48
+ if (isBoundArrayLike(input)) {
49
+ const items = [...input]
50
+ const elements = ParseResult.encodeUnknown(Schema.Array(item))(items, parseOptions)
51
+ return ParseResult.map(elements, (is): BoundArray<I> => BoundArray.make(getSizeLimit(input), is))
42
52
  }
43
53
  return ParseResult.fail(new ParseResult.Type(ast, input))
44
54
  },
@@ -47,7 +57,28 @@ const BoundArraySchemaFromSelf = <A, I, R>(
47
57
  description: `BoundArray<${Schema.format(item)}>`,
48
58
  pretty: () => (_) => `BoundArray(${_.length})`,
49
59
  arbitrary: () => (fc) => fc.anything() as any,
50
- equivalence: () => (a, b) => a === b,
60
+ equivalence: () => {
61
+ const elementEquivalence = Schema.equivalence(item)
62
+ return (a: unknown, b: unknown) => {
63
+ if (a === b) {
64
+ return true
65
+ }
66
+ if (!isBoundArrayLike(a) || !isBoundArrayLike(b)) {
67
+ return false
68
+ }
69
+ if (getSizeLimit(a) !== getSizeLimit(b) || a.length !== b.length) {
70
+ return false
71
+ }
72
+ const itemsA = [...a]
73
+ const itemsB = [...b]
74
+ for (let i = 0; i < itemsA.length; i++) {
75
+ if (!elementEquivalence(itemsA[i] as any, itemsB[i] as any)) {
76
+ return false
77
+ }
78
+ }
79
+ return true
80
+ }
81
+ },
51
82
  },
52
83
  )
53
84
 
@@ -52,8 +52,8 @@ export class SyncHeadUnsubscribe extends LSDClientSessionReqResMessage('LSD.Clie
52
52
  subscriptionId: Schema.String,
53
53
  }) {}
54
54
  export class SyncHeadRes extends LSDClientSessionReqResMessage('LSD.ClientSession.SyncHeadRes', {
55
- local: EventSequenceNumber.EventSequenceNumber,
56
- upstream: EventSequenceNumber.EventSequenceNumber,
55
+ local: EventSequenceNumber.Client.Composite,
56
+ upstream: EventSequenceNumber.Client.Composite,
57
57
  subscriptionId: Schema.String,
58
58
  }) {}
59
59
 
@@ -2,14 +2,7 @@ import { Schema } from '@livestore/utils/effect'
2
2
 
3
3
  import { liveStoreVersion as pkgVersion } from '../version.ts'
4
4
 
5
- export const NetworkStatus = Schema.Struct({
6
- isConnected: Schema.Boolean,
7
- timestampMs: Schema.Number,
8
- /** Whether the network status devtools latch is closed. Used to simulate network disconnection. */
9
- latchClosed: Schema.Boolean,
10
- })
11
-
12
- export type NetworkStatus = typeof NetworkStatus.Type
5
+ export { NetworkStatus } from '../sync/sync-backend.ts'
13
6
 
14
7
  export const requestId = Schema.String
15
8
  export const clientId = Schema.String
@@ -1,6 +1,6 @@
1
1
  import { Schema, Transferable } from '@livestore/utils/effect'
2
2
 
3
- import * as LiveStoreEvent from '../schema/LiveStoreEvent.ts'
3
+ import * as LiveStoreEvent from '../schema/LiveStoreEvent/mod.ts'
4
4
  import { EventSequenceNumber } from '../schema/mod.ts'
5
5
  import * as SyncState from '../sync/syncstate.ts'
6
6
  import { LeaderReqResMessage, LSDMessage, LSDReqResMessage, NetworkStatus } from './devtools-messages-common.ts'
@@ -51,7 +51,7 @@ export class SyncHistoryUnsubscribe extends LSDReqResMessage('LSD.Leader.SyncHis
51
51
  subscriptionId: Schema.String,
52
52
  }) {}
53
53
  export class SyncHistoryRes extends LSDReqResMessage('LSD.Leader.SyncHistoryRes', {
54
- eventEncoded: LiveStoreEvent.AnyEncodedGlobal,
54
+ eventEncoded: LiveStoreEvent.Global.Encoded,
55
55
  metadata: Schema.Option(Schema.JsonValue),
56
56
  subscriptionId: Schema.String,
57
57
  }) {}
@@ -63,8 +63,8 @@ export class SyncHeadUnsubscribe extends LSDReqResMessage('LSD.Leader.SyncHeadUn
63
63
  subscriptionId: Schema.String,
64
64
  }) {}
65
65
  export class SyncHeadRes extends LSDReqResMessage('LSD.Leader.SyncHeadRes', {
66
- local: EventSequenceNumber.EventSequenceNumber,
67
- upstream: EventSequenceNumber.EventSequenceNumber,
66
+ local: EventSequenceNumber.Client.Composite,
67
+ upstream: EventSequenceNumber.Client.Composite,
68
68
  subscriptionId: Schema.String,
69
69
  }) {}
70
70
 
@@ -77,13 +77,14 @@ export class SnapshotRes extends LSDReqResMessage('LSD.Leader.SnapshotRes', {
77
77
  export const LoadDatabaseFile = LeaderReqResMessage('LSD.Leader.LoadDatabaseFile', {
78
78
  payload: {
79
79
  data: Transferable.Uint8Array as Schema.Schema<Uint8Array<ArrayBuffer>>,
80
+ batchId: Schema.optional(Schema.String),
80
81
  },
81
82
  success: {},
82
83
  error: {
83
84
  cause: Schema.Union(
84
85
  Schema.TaggedStruct('unsupported-file', {}),
85
86
  Schema.TaggedStruct('unsupported-database', {}),
86
- Schema.TaggedStruct('unexpected-error', { cause: Schema.Defect }),
87
+ Schema.TaggedStruct('unknown-error', { cause: Schema.Defect }),
87
88
  ),
88
89
  },
89
90
  })
@@ -95,7 +96,7 @@ export class SyncPull extends LSDMessage('LSD.Leader.SyncPull', {
95
96
 
96
97
  // TODO refactor this to use push/pull semantics
97
98
  export class CommitEventReq extends LSDReqResMessage('LSD.Leader.CommitEventReq', {
98
- eventEncoded: LiveStoreEvent.PartialAnyEncoded,
99
+ eventEncoded: LiveStoreEvent.Input.Encoded,
99
100
  }) {}
100
101
 
101
102
  export class CommitEventRes extends LSDReqResMessage('LSD.Leader.CommitEventRes', {}) {}
@@ -133,7 +134,7 @@ export const ResetAllData = LeaderReqResMessage('LSD.Leader.ResetAllData', {
133
134
  // liveStoreVersion,
134
135
  // },
135
136
  // success: DatabaseFileInfo,
136
- // failure: UnexpectedError,
137
+ // failure: UnknownError,
137
138
  // }) {}
138
139
 
139
140
  // export class NetworkStatus_ extends Schema.TaggedRequest<NetworkStatus_>()('LSD.Leader.NetworkStatus', {
@@ -142,7 +143,7 @@ export const ResetAllData = LeaderReqResMessage('LSD.Leader.ResetAllData', {
142
143
  // liveStoreVersion,
143
144
  // },
144
145
  // success: NetworkStatus,
145
- // failure: UnexpectedError,
146
+ // failure: UnknownError,
146
147
  // }) {}
147
148
 
148
149
  // export const MessageToApp_ = Schema.Union(DatabaseFileInfo_, NetworkStatus_)
@@ -21,6 +21,12 @@ export const SessionInfo = Schema.TaggedStruct('SessionInfo', {
21
21
  sessionId: Schema.String,
22
22
  schemaAlias: Schema.String,
23
23
  isLeader: Schema.Boolean,
24
+ /**
25
+ * Browser origin that produced this SessionInfo (for example, 'http://localhost:5173').
26
+ * Set by browser-based publishers so DevTools can defensively filter by origin.
27
+ * Currently only needed by the browser extension; non‑browser publishers typically set `undefined`.
28
+ */
29
+ origin: Schema.UndefinedOr(Schema.String),
24
30
  })
25
31
  export type SessionInfo = typeof SessionInfo.Type
26
32
 
@@ -55,7 +61,7 @@ export const requestSessionInfoSubscription = ({
55
61
  webChannel: WebChannel.WebChannel<Message, Message>
56
62
  pollInterval?: Duration.DurationInput
57
63
  staleTimeout?: Duration.DurationInput
58
- }): Effect.Effect<Subscribable.Subscribable<Set<SessionInfo>>, ParseResult.ParseError, Scope.Scope> =>
64
+ }): Effect.Effect<Subscribable.Subscribable<HashSet.HashSet<SessionInfo>>, ParseResult.ParseError, Scope.Scope> =>
59
65
  Effect.gen(function* () {
60
66
  yield* webChannel
61
67
  .send(RequestSessions.make({}))
@@ -94,8 +100,5 @@ export const requestSessionInfoSubscription = ({
94
100
  Effect.forkScoped,
95
101
  )
96
102
 
97
- return Subscribable.make({
98
- get: sessionInfoSubRef.get.pipe(Effect.map((sessionInfos) => new Set(sessionInfos))),
99
- changes: sessionInfoSubRef.changes.pipe(Stream.map((sessionInfos) => new Set(sessionInfos))),
100
- })
103
+ return Subscribable.make({ get: sessionInfoSubRef.get, changes: sessionInfoSubRef.changes })
101
104
  })
@@ -34,7 +34,15 @@ export const makeNodeName = {
34
34
  }
35
35
 
36
36
  export const makeChannelName = {
37
- sessionInfo: () => `session-info`,
37
+ /**
38
+ * SessionInfo channel for DevTools discovery.
39
+ * When an `origin` is provided, it is incorporated into the channel name to scope
40
+ * broadcasts per origin (e.g. `session-info::http%3A%2F%2Flocalhost%3A5173`).
41
+ * The `origin` is currently required only for the browser extension path; non‑browser
42
+ * publishers can pass `undefined` to use the legacy global channel name.
43
+ */
44
+ sessionInfo: ({ origin }: { origin: string | undefined }) =>
45
+ origin ? `session-info::${encodeURIComponent(origin)}` : `session-info`,
38
46
  devtoolsClientSession: ({ storeId, clientId, sessionId }: { storeId: string; clientId: string; sessionId: string }) =>
39
47
  `devtools-channel(client-session-${storeId}-${clientId}-${sessionId})`,
40
48
  devtoolsClientLeader: ({ storeId, clientId, sessionId }: { storeId: string; clientId: string; sessionId: string }) =>
@@ -52,8 +60,9 @@ export const isChannelName = {
52
60
 
53
61
  export const makeSessionInfoBroadcastChannel = (
54
62
  webmeshNode: MeshNode,
63
+ options: { origin: string | undefined },
55
64
  ): Effect.Effect<WebChannel.WebChannel<SessionInfo.Message, SessionInfo.Message>, never, Scope.Scope> =>
56
65
  webmeshNode.makeBroadcastChannel({
57
- channelName: makeChannelName.sessionInfo(),
66
+ channelName: makeChannelName.sessionInfo({ origin: options?.origin }),
58
67
  schema: SessionInfo.Message,
59
68
  })