@swal/edge-mesh 0.0.0-stage → 0.1.1

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 (464) hide show
  1. package/LICENSE +128 -0
  2. package/NOTICE +37 -0
  3. package/README.md +470 -2
  4. package/dist/adapters/gpu-agent/index.d.ts +61 -0
  5. package/dist/adapters/gpu-agent/index.d.ts.map +1 -0
  6. package/dist/adapters/gpu-agent/index.js +364 -0
  7. package/dist/adapters/gpu-agent/index.js.map +1 -0
  8. package/dist/adapters/maloca-salud/citas-distribuidas.d.ts +19 -0
  9. package/dist/adapters/maloca-salud/citas-distribuidas.d.ts.map +1 -0
  10. package/dist/adapters/maloca-salud/citas-distribuidas.js +51 -0
  11. package/dist/adapters/maloca-salud/citas-distribuidas.js.map +1 -0
  12. package/dist/adapters/maloca-salud/eps-bridge.d.ts +15 -0
  13. package/dist/adapters/maloca-salud/eps-bridge.d.ts.map +1 -0
  14. package/dist/adapters/maloca-salud/eps-bridge.js +27 -0
  15. package/dist/adapters/maloca-salud/eps-bridge.js.map +1 -0
  16. package/dist/adapters/maloca-salud/patient-profile.d.ts +20 -0
  17. package/dist/adapters/maloca-salud/patient-profile.d.ts.map +1 -0
  18. package/dist/adapters/maloca-salud/patient-profile.js +36 -0
  19. package/dist/adapters/maloca-salud/patient-profile.js.map +1 -0
  20. package/dist/adapters/maloca-salud/types.d.ts +40 -0
  21. package/dist/adapters/maloca-salud/types.d.ts.map +1 -0
  22. package/dist/adapters/maloca-salud/types.js +2 -0
  23. package/dist/adapters/maloca-salud/types.js.map +1 -0
  24. package/dist/adapters/maloca-veeduria/contract-bridge.d.ts +31 -0
  25. package/dist/adapters/maloca-veeduria/contract-bridge.d.ts.map +1 -0
  26. package/dist/adapters/maloca-veeduria/contract-bridge.js +103 -0
  27. package/dist/adapters/maloca-veeduria/contract-bridge.js.map +1 -0
  28. package/dist/adapters/maloca-veeduria/evidentia-veeduria.d.ts +14 -0
  29. package/dist/adapters/maloca-veeduria/evidentia-veeduria.d.ts.map +1 -0
  30. package/dist/adapters/maloca-veeduria/evidentia-veeduria.js +40 -0
  31. package/dist/adapters/maloca-veeduria/evidentia-veeduria.js.map +1 -0
  32. package/dist/adapters/maloca-veeduria/licitante-profile.d.ts +21 -0
  33. package/dist/adapters/maloca-veeduria/licitante-profile.d.ts.map +1 -0
  34. package/dist/adapters/maloca-veeduria/licitante-profile.js +58 -0
  35. package/dist/adapters/maloca-veeduria/licitante-profile.js.map +1 -0
  36. package/dist/adapters/maloca-veeduria/types.d.ts +30 -0
  37. package/dist/adapters/maloca-veeduria/types.d.ts.map +1 -0
  38. package/dist/adapters/maloca-veeduria/types.js +2 -0
  39. package/dist/adapters/maloca-veeduria/types.js.map +1 -0
  40. package/dist/adapters/maloca-xavier/agent-profile.d.ts +32 -0
  41. package/dist/adapters/maloca-xavier/agent-profile.d.ts.map +1 -0
  42. package/dist/adapters/maloca-xavier/agent-profile.js +56 -0
  43. package/dist/adapters/maloca-xavier/agent-profile.js.map +1 -0
  44. package/dist/adapters/maloca-xavier/codegraph-bridge.d.ts +27 -0
  45. package/dist/adapters/maloca-xavier/codegraph-bridge.d.ts.map +1 -0
  46. package/dist/adapters/maloca-xavier/codegraph-bridge.js +58 -0
  47. package/dist/adapters/maloca-xavier/codegraph-bridge.js.map +1 -0
  48. package/dist/adapters/maloca-xavier/llm-router.d.ts +25 -0
  49. package/dist/adapters/maloca-xavier/llm-router.d.ts.map +1 -0
  50. package/dist/adapters/maloca-xavier/llm-router.js +58 -0
  51. package/dist/adapters/maloca-xavier/llm-router.js.map +1 -0
  52. package/dist/authz/index.d.ts +81 -0
  53. package/dist/authz/index.d.ts.map +1 -0
  54. package/dist/authz/index.js +271 -0
  55. package/dist/authz/index.js.map +1 -0
  56. package/dist/chat/index.d.ts +138 -0
  57. package/dist/chat/index.d.ts.map +1 -0
  58. package/dist/chat/index.js +394 -0
  59. package/dist/chat/index.js.map +1 -0
  60. package/dist/chat/offline-queue.d.ts +32 -0
  61. package/dist/chat/offline-queue.d.ts.map +1 -0
  62. package/dist/chat/offline-queue.js +93 -0
  63. package/dist/chat/offline-queue.js.map +1 -0
  64. package/dist/core/DefaultEdgeMeshNode.d.ts +17 -0
  65. package/dist/core/DefaultEdgeMeshNode.d.ts.map +1 -0
  66. package/dist/core/DefaultEdgeMeshNode.js +57 -0
  67. package/dist/core/DefaultEdgeMeshNode.js.map +1 -0
  68. package/dist/core/node.d.ts +26 -0
  69. package/dist/core/node.d.ts.map +1 -0
  70. package/dist/core/node.js +16 -0
  71. package/dist/core/node.js.map +1 -0
  72. package/dist/edge-mesh.d.ts +139 -0
  73. package/dist/edge-mesh.d.ts.map +1 -0
  74. package/dist/edge-mesh.js +1146 -0
  75. package/dist/edge-mesh.js.map +1 -0
  76. package/dist/gos/GosBridge.d.ts +49 -0
  77. package/dist/gos/GosBridge.d.ts.map +1 -0
  78. package/dist/gos/GosBridge.js +133 -0
  79. package/dist/gos/GosBridge.js.map +1 -0
  80. package/dist/governance/authority.d.ts +44 -0
  81. package/dist/governance/authority.d.ts.map +1 -0
  82. package/dist/governance/authority.js +123 -0
  83. package/dist/governance/authority.js.map +1 -0
  84. package/dist/governance/index.d.ts +66 -0
  85. package/dist/governance/index.d.ts.map +1 -0
  86. package/dist/governance/index.js +210 -0
  87. package/dist/governance/index.js.map +1 -0
  88. package/dist/governance/merge.d.ts +31 -0
  89. package/dist/governance/merge.d.ts.map +1 -0
  90. package/dist/governance/merge.js +167 -0
  91. package/dist/governance/merge.js.map +1 -0
  92. package/dist/identity/index.d.ts +199 -0
  93. package/dist/identity/index.d.ts.map +1 -0
  94. package/dist/identity/index.js +415 -0
  95. package/dist/identity/index.js.map +1 -0
  96. package/dist/index.d.ts +71 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +56 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/maloca/backoffice.d.ts +31 -0
  101. package/dist/maloca/backoffice.d.ts.map +1 -0
  102. package/dist/maloca/backoffice.js +40 -0
  103. package/dist/maloca/backoffice.js.map +1 -0
  104. package/dist/maloca/event-bus.d.ts +60 -0
  105. package/dist/maloca/event-bus.d.ts.map +1 -0
  106. package/dist/maloca/event-bus.js +175 -0
  107. package/dist/maloca/event-bus.js.map +1 -0
  108. package/dist/maloca/evidentia.d.ts +136 -0
  109. package/dist/maloca/evidentia.d.ts.map +1 -0
  110. package/dist/maloca/evidentia.js +447 -0
  111. package/dist/maloca/evidentia.js.map +1 -0
  112. package/dist/maloca/gateway/api.d.ts +146 -0
  113. package/dist/maloca/gateway/api.d.ts.map +1 -0
  114. package/dist/maloca/gateway/api.js +228 -0
  115. package/dist/maloca/gateway/api.js.map +1 -0
  116. package/dist/maloca/gateway/auth.d.ts +20 -0
  117. package/dist/maloca/gateway/auth.d.ts.map +1 -0
  118. package/dist/maloca/gateway/auth.js +115 -0
  119. package/dist/maloca/gateway/auth.js.map +1 -0
  120. package/dist/maloca/gateway/dashboard.d.ts +42 -0
  121. package/dist/maloca/gateway/dashboard.d.ts.map +1 -0
  122. package/dist/maloca/gateway/dashboard.js +67 -0
  123. package/dist/maloca/gateway/dashboard.js.map +1 -0
  124. package/dist/maloca/gateway/websocket.d.ts +34 -0
  125. package/dist/maloca/gateway/websocket.d.ts.map +1 -0
  126. package/dist/maloca/gateway/websocket.js +71 -0
  127. package/dist/maloca/gateway/websocket.js.map +1 -0
  128. package/dist/maloca/karma.d.ts +165 -0
  129. package/dist/maloca/karma.d.ts.map +1 -0
  130. package/dist/maloca/karma.js +307 -0
  131. package/dist/maloca/karma.js.map +1 -0
  132. package/dist/maloca/kernel.d.ts +20 -0
  133. package/dist/maloca/kernel.d.ts.map +1 -0
  134. package/dist/maloca/kernel.js +76 -0
  135. package/dist/maloca/kernel.js.map +1 -0
  136. package/dist/maloca/metadata.d.ts +30 -0
  137. package/dist/maloca/metadata.d.ts.map +1 -0
  138. package/dist/maloca/metadata.js +80 -0
  139. package/dist/maloca/metadata.js.map +1 -0
  140. package/dist/maloca/perfil.d.ts +57 -0
  141. package/dist/maloca/perfil.d.ts.map +1 -0
  142. package/dist/maloca/perfil.js +113 -0
  143. package/dist/maloca/perfil.js.map +1 -0
  144. package/dist/maloca/plugin-registry.d.ts +27 -0
  145. package/dist/maloca/plugin-registry.d.ts.map +1 -0
  146. package/dist/maloca/plugin-registry.js +76 -0
  147. package/dist/maloca/plugin-registry.js.map +1 -0
  148. package/dist/maloca/polygon-bridge.d.ts +63 -0
  149. package/dist/maloca/polygon-bridge.d.ts.map +1 -0
  150. package/dist/maloca/polygon-bridge.js +198 -0
  151. package/dist/maloca/polygon-bridge.js.map +1 -0
  152. package/dist/maloca/types.d.ts +44 -0
  153. package/dist/maloca/types.d.ts.map +1 -0
  154. package/dist/maloca/types.js +2 -0
  155. package/dist/maloca/types.js.map +1 -0
  156. package/dist/medico/aval.d.ts +149 -0
  157. package/dist/medico/aval.d.ts.map +1 -0
  158. package/dist/medico/aval.js +281 -0
  159. package/dist/medico/aval.js.map +1 -0
  160. package/dist/medico/canonica.d.ts +96 -0
  161. package/dist/medico/canonica.d.ts.map +1 -0
  162. package/dist/medico/canonica.js +148 -0
  163. package/dist/medico/canonica.js.map +1 -0
  164. package/dist/medico/credencial.d.ts +160 -0
  165. package/dist/medico/credencial.d.ts.map +1 -0
  166. package/dist/medico/credencial.js +240 -0
  167. package/dist/medico/credencial.js.map +1 -0
  168. package/dist/medico/index.d.ts +36 -0
  169. package/dist/medico/index.d.ts.map +1 -0
  170. package/dist/medico/index.js +39 -0
  171. package/dist/medico/index.js.map +1 -0
  172. package/dist/medico/malla.d.ts +218 -0
  173. package/dist/medico/malla.d.ts.map +1 -0
  174. package/dist/medico/malla.js +347 -0
  175. package/dist/medico/malla.js.map +1 -0
  176. package/dist/medico/registro-profesional.d.ts +84 -0
  177. package/dist/medico/registro-profesional.d.ts.map +1 -0
  178. package/dist/medico/registro-profesional.js +135 -0
  179. package/dist/medico/registro-profesional.js.map +1 -0
  180. package/dist/medico/registro.d.ts +149 -0
  181. package/dist/medico/registro.d.ts.map +1 -0
  182. package/dist/medico/registro.js +173 -0
  183. package/dist/medico/registro.js.map +1 -0
  184. package/dist/medico/types.d.ts +287 -0
  185. package/dist/medico/types.d.ts.map +1 -0
  186. package/dist/medico/types.js +135 -0
  187. package/dist/medico/types.js.map +1 -0
  188. package/dist/medico/verificacion-registro.d.ts +300 -0
  189. package/dist/medico/verificacion-registro.d.ts.map +1 -0
  190. package/dist/medico/verificacion-registro.js +319 -0
  191. package/dist/medico/verificacion-registro.js.map +1 -0
  192. package/dist/mesh/index.d.ts +457 -0
  193. package/dist/mesh/index.d.ts.map +1 -0
  194. package/dist/mesh/index.js +929 -0
  195. package/dist/mesh/index.js.map +1 -0
  196. package/dist/namespaces/encrypted-plugin.d.ts +56 -0
  197. package/dist/namespaces/encrypted-plugin.d.ts.map +1 -0
  198. package/dist/namespaces/encrypted-plugin.js +173 -0
  199. package/dist/namespaces/encrypted-plugin.js.map +1 -0
  200. package/dist/namespaces/index.d.ts +52 -0
  201. package/dist/namespaces/index.d.ts.map +1 -0
  202. package/dist/namespaces/index.js +134 -0
  203. package/dist/namespaces/index.js.map +1 -0
  204. package/dist/namespaces/ivn-proofs.d.ts +54 -0
  205. package/dist/namespaces/ivn-proofs.d.ts.map +1 -0
  206. package/dist/namespaces/ivn-proofs.js +162 -0
  207. package/dist/namespaces/ivn-proofs.js.map +1 -0
  208. package/dist/namespaces/offers-gossip.d.ts +95 -0
  209. package/dist/namespaces/offers-gossip.d.ts.map +1 -0
  210. package/dist/namespaces/offers-gossip.js +213 -0
  211. package/dist/namespaces/offers-gossip.js.map +1 -0
  212. package/dist/node-memory/idb-store.d.ts +22 -0
  213. package/dist/node-memory/idb-store.d.ts.map +1 -0
  214. package/dist/node-memory/idb-store.js +157 -0
  215. package/dist/node-memory/idb-store.js.map +1 -0
  216. package/dist/node-memory/index.d.ts +14 -0
  217. package/dist/node-memory/index.d.ts.map +1 -0
  218. package/dist/node-memory/index.js +159 -0
  219. package/dist/node-memory/index.js.map +1 -0
  220. package/dist/node-memory/sync-flush.d.ts +11 -0
  221. package/dist/node-memory/sync-flush.d.ts.map +1 -0
  222. package/dist/node-memory/sync-flush.js +37 -0
  223. package/dist/node-memory/sync-flush.js.map +1 -0
  224. package/dist/node-memory/types.d.ts +34 -0
  225. package/dist/node-memory/types.d.ts.map +1 -0
  226. package/dist/node-memory/types.js +2 -0
  227. package/dist/node-memory/types.js.map +1 -0
  228. package/dist/node-memory/xavier-store.d.ts +12 -0
  229. package/dist/node-memory/xavier-store.d.ts.map +1 -0
  230. package/dist/node-memory/xavier-store.js +75 -0
  231. package/dist/node-memory/xavier-store.js.map +1 -0
  232. package/dist/op-log/index.d.ts +49 -0
  233. package/dist/op-log/index.d.ts.map +1 -0
  234. package/dist/op-log/index.js +190 -0
  235. package/dist/op-log/index.js.map +1 -0
  236. package/dist/presence/health.d.ts +54 -0
  237. package/dist/presence/health.d.ts.map +1 -0
  238. package/dist/presence/health.js +139 -0
  239. package/dist/presence/health.js.map +1 -0
  240. package/dist/presence/index.d.ts +85 -0
  241. package/dist/presence/index.d.ts.map +1 -0
  242. package/dist/presence/index.js +255 -0
  243. package/dist/presence/index.js.map +1 -0
  244. package/dist/presence/peer-health.d.ts +40 -0
  245. package/dist/presence/peer-health.d.ts.map +1 -0
  246. package/dist/presence/peer-health.js +118 -0
  247. package/dist/presence/peer-health.js.map +1 -0
  248. package/dist/protocol/canonical.d.ts +10 -0
  249. package/dist/protocol/canonical.d.ts.map +1 -0
  250. package/dist/protocol/canonical.js +32 -0
  251. package/dist/protocol/canonical.js.map +1 -0
  252. package/dist/protocol/crypto.d.ts +299 -0
  253. package/dist/protocol/crypto.d.ts.map +1 -0
  254. package/dist/protocol/crypto.js +739 -0
  255. package/dist/protocol/crypto.js.map +1 -0
  256. package/dist/protocol/index.d.ts +30 -0
  257. package/dist/protocol/index.d.ts.map +1 -0
  258. package/dist/protocol/index.js +116 -0
  259. package/dist/protocol/index.js.map +1 -0
  260. package/dist/protocol/utils.d.ts +5 -0
  261. package/dist/protocol/utils.d.ts.map +1 -0
  262. package/dist/protocol/utils.js +27 -0
  263. package/dist/protocol/utils.js.map +1 -0
  264. package/dist/salones/manager.d.ts +100 -0
  265. package/dist/salones/manager.d.ts.map +1 -0
  266. package/dist/salones/manager.js +240 -0
  267. package/dist/salones/manager.js.map +1 -0
  268. package/dist/security/rate-limiter.d.ts +13 -0
  269. package/dist/security/rate-limiter.d.ts.map +1 -0
  270. package/dist/security/rate-limiter.js +32 -0
  271. package/dist/security/rate-limiter.js.map +1 -0
  272. package/dist/snapshot/index.d.ts +90 -0
  273. package/dist/snapshot/index.d.ts.map +1 -0
  274. package/dist/snapshot/index.js +189 -0
  275. package/dist/snapshot/index.js.map +1 -0
  276. package/dist/storage/index.d.ts +49 -0
  277. package/dist/storage/index.d.ts.map +1 -0
  278. package/dist/storage/index.js +192 -0
  279. package/dist/storage/index.js.map +1 -0
  280. package/dist/storage/optimizer.d.ts +28 -0
  281. package/dist/storage/optimizer.d.ts.map +1 -0
  282. package/dist/storage/optimizer.js +71 -0
  283. package/dist/storage/optimizer.js.map +1 -0
  284. package/dist/storage/ydoc-persistence.d.ts +27 -0
  285. package/dist/storage/ydoc-persistence.d.ts.map +1 -0
  286. package/dist/storage/ydoc-persistence.js +128 -0
  287. package/dist/storage/ydoc-persistence.js.map +1 -0
  288. package/dist/sync/ChunkSyncManager.d.ts +41 -0
  289. package/dist/sync/ChunkSyncManager.d.ts.map +1 -0
  290. package/dist/sync/ChunkSyncManager.js +115 -0
  291. package/dist/sync/ChunkSyncManager.js.map +1 -0
  292. package/dist/sync/conflict-resolver.d.ts +33 -0
  293. package/dist/sync/conflict-resolver.d.ts.map +1 -0
  294. package/dist/sync/conflict-resolver.js +54 -0
  295. package/dist/sync/conflict-resolver.js.map +1 -0
  296. package/dist/sync/engine.d.ts +168 -0
  297. package/dist/sync/engine.d.ts.map +1 -0
  298. package/dist/sync/engine.js +315 -0
  299. package/dist/sync/engine.js.map +1 -0
  300. package/dist/sync/index.d.ts +3 -0
  301. package/dist/sync/index.d.ts.map +1 -0
  302. package/dist/sync/index.js +3 -0
  303. package/dist/sync/index.js.map +1 -0
  304. package/dist/transport/TorTransportAdapter.d.ts +70 -0
  305. package/dist/transport/TorTransportAdapter.d.ts.map +1 -0
  306. package/dist/transport/TorTransportAdapter.js +192 -0
  307. package/dist/transport/TorTransportAdapter.js.map +1 -0
  308. package/dist/transport/memory.d.ts +31 -0
  309. package/dist/transport/memory.d.ts.map +1 -0
  310. package/dist/transport/memory.js +114 -0
  311. package/dist/transport/memory.js.map +1 -0
  312. package/dist/transport/peerjs.d.ts +52 -0
  313. package/dist/transport/peerjs.d.ts.map +1 -0
  314. package/dist/transport/peerjs.js +336 -0
  315. package/dist/transport/peerjs.js.map +1 -0
  316. package/dist/transport/pqc-handshake.d.ts +72 -0
  317. package/dist/transport/pqc-handshake.d.ts.map +1 -0
  318. package/dist/transport/pqc-handshake.js +129 -0
  319. package/dist/transport/pqc-handshake.js.map +1 -0
  320. package/dist/transport/relay-config.d.ts +11 -0
  321. package/dist/transport/relay-config.d.ts.map +1 -0
  322. package/dist/transport/relay-config.js +48 -0
  323. package/dist/transport/relay-config.js.map +1 -0
  324. package/dist/transport/relay-server.d.ts +37 -0
  325. package/dist/transport/relay-server.d.ts.map +1 -0
  326. package/dist/transport/relay-server.js +246 -0
  327. package/dist/transport/relay-server.js.map +1 -0
  328. package/dist/transport/tor.d.ts +47 -0
  329. package/dist/transport/tor.d.ts.map +1 -0
  330. package/dist/transport/tor.js +158 -0
  331. package/dist/transport/tor.js.map +1 -0
  332. package/dist/transport/types.d.ts +34 -0
  333. package/dist/transport/types.d.ts.map +1 -0
  334. package/dist/transport/types.js +2 -0
  335. package/dist/transport/types.js.map +1 -0
  336. package/dist/types/index.d.ts +293 -0
  337. package/dist/types/index.d.ts.map +1 -0
  338. package/dist/types/index.js +73 -0
  339. package/dist/types/index.js.map +1 -0
  340. package/dist/web/admission.d.ts +24 -0
  341. package/dist/web/admission.d.ts.map +1 -0
  342. package/dist/web/admission.js +41 -0
  343. package/dist/web/admission.js.map +1 -0
  344. package/dist/web/crypto.d.ts +18 -0
  345. package/dist/web/crypto.d.ts.map +1 -0
  346. package/dist/web/crypto.js +78 -0
  347. package/dist/web/crypto.js.map +1 -0
  348. package/dist/web/exchange.d.ts +23 -0
  349. package/dist/web/exchange.d.ts.map +1 -0
  350. package/dist/web/exchange.js +54 -0
  351. package/dist/web/exchange.js.map +1 -0
  352. package/dist/web/fragment.d.ts +58 -0
  353. package/dist/web/fragment.d.ts.map +1 -0
  354. package/dist/web/fragment.js +198 -0
  355. package/dist/web/fragment.js.map +1 -0
  356. package/dist/web/index.d.ts +25 -0
  357. package/dist/web/index.d.ts.map +1 -0
  358. package/dist/web/index.js +14 -0
  359. package/dist/web/index.js.map +1 -0
  360. package/dist/web/merge/index.d.ts +104 -0
  361. package/dist/web/merge/index.d.ts.map +1 -0
  362. package/dist/web/merge/index.js +236 -0
  363. package/dist/web/merge/index.js.map +1 -0
  364. package/dist/web/oplog/hlc.d.ts +19 -0
  365. package/dist/web/oplog/hlc.d.ts.map +1 -0
  366. package/dist/web/oplog/hlc.js +39 -0
  367. package/dist/web/oplog/hlc.js.map +1 -0
  368. package/dist/web/oplog/index.d.ts +10 -0
  369. package/dist/web/oplog/index.d.ts.map +1 -0
  370. package/dist/web/oplog/index.js +6 -0
  371. package/dist/web/oplog/index.js.map +1 -0
  372. package/dist/web/oplog/log.d.ts +182 -0
  373. package/dist/web/oplog/log.d.ts.map +1 -0
  374. package/dist/web/oplog/log.js +693 -0
  375. package/dist/web/oplog/log.js.map +1 -0
  376. package/dist/web/oplog/store.d.ts +40 -0
  377. package/dist/web/oplog/store.d.ts.map +1 -0
  378. package/dist/web/oplog/store.js +85 -0
  379. package/dist/web/oplog/store.js.map +1 -0
  380. package/dist/web/oplog/sync.d.ts +54 -0
  381. package/dist/web/oplog/sync.d.ts.map +1 -0
  382. package/dist/web/oplog/sync.js +162 -0
  383. package/dist/web/oplog/sync.js.map +1 -0
  384. package/dist/web/oplog/types.d.ts +119 -0
  385. package/dist/web/oplog/types.d.ts.map +1 -0
  386. package/dist/web/oplog/types.js +2 -0
  387. package/dist/web/oplog/types.js.map +1 -0
  388. package/dist/web/pairing.d.ts +186 -0
  389. package/dist/web/pairing.d.ts.map +1 -0
  390. package/dist/web/pairing.js +395 -0
  391. package/dist/web/pairing.js.map +1 -0
  392. package/dist/web/pq.d.ts +36 -0
  393. package/dist/web/pq.d.ts.map +1 -0
  394. package/dist/web/pq.js +59 -0
  395. package/dist/web/pq.js.map +1 -0
  396. package/dist/web/provider.d.ts +188 -0
  397. package/dist/web/provider.d.ts.map +1 -0
  398. package/dist/web/provider.js +2042 -0
  399. package/dist/web/provider.js.map +1 -0
  400. package/dist/web/rooms.d.ts +20 -0
  401. package/dist/web/rooms.d.ts.map +1 -0
  402. package/dist/web/rooms.js +51 -0
  403. package/dist/web/rooms.js.map +1 -0
  404. package/dist/web/rotation.d.ts +73 -0
  405. package/dist/web/rotation.d.ts.map +1 -0
  406. package/dist/web/rotation.js +130 -0
  407. package/dist/web/rotation.js.map +1 -0
  408. package/dist/web/secstate.d.ts +213 -0
  409. package/dist/web/secstate.d.ts.map +1 -0
  410. package/dist/web/secstate.js +789 -0
  411. package/dist/web/secstate.js.map +1 -0
  412. package/dist/web/store.d.ts +9 -0
  413. package/dist/web/store.d.ts.map +1 -0
  414. package/dist/web/store.js +32 -0
  415. package/dist/web/store.js.map +1 -0
  416. package/dist/web/transports/loopback.d.ts +11 -0
  417. package/dist/web/transports/loopback.d.ts.map +1 -0
  418. package/dist/web/transports/loopback.js +97 -0
  419. package/dist/web/transports/loopback.js.map +1 -0
  420. package/dist/web/transports/qr-sdp.d.ts +27 -0
  421. package/dist/web/transports/qr-sdp.d.ts.map +1 -0
  422. package/dist/web/transports/qr-sdp.js +131 -0
  423. package/dist/web/transports/qr-sdp.js.map +1 -0
  424. package/dist/web/transports/ws.d.ts +12 -0
  425. package/dist/web/transports/ws.d.ts.map +1 -0
  426. package/dist/web/transports/ws.js +139 -0
  427. package/dist/web/transports/ws.js.map +1 -0
  428. package/dist/web/trust/canonical.d.ts +8 -0
  429. package/dist/web/trust/canonical.d.ts.map +1 -0
  430. package/dist/web/trust/canonical.js +27 -0
  431. package/dist/web/trust/canonical.js.map +1 -0
  432. package/dist/web/trust/docs.d.ts +51 -0
  433. package/dist/web/trust/docs.d.ts.map +1 -0
  434. package/dist/web/trust/docs.js +170 -0
  435. package/dist/web/trust/docs.js.map +1 -0
  436. package/dist/web/trust/index.d.ts +10 -0
  437. package/dist/web/trust/index.d.ts.map +1 -0
  438. package/dist/web/trust/index.js +7 -0
  439. package/dist/web/trust/index.js.map +1 -0
  440. package/dist/web/trust/keys.d.ts +37 -0
  441. package/dist/web/trust/keys.d.ts.map +1 -0
  442. package/dist/web/trust/keys.js +75 -0
  443. package/dist/web/trust/keys.js.map +1 -0
  444. package/dist/web/trust/store.d.ts +150 -0
  445. package/dist/web/trust/store.d.ts.map +1 -0
  446. package/dist/web/trust/store.js +587 -0
  447. package/dist/web/trust/store.js.map +1 -0
  448. package/dist/web/trust/types.d.ts +134 -0
  449. package/dist/web/trust/types.d.ts.map +1 -0
  450. package/dist/web/trust/types.js +4 -0
  451. package/dist/web/trust/types.js.map +1 -0
  452. package/dist/web/types.d.ts +115 -0
  453. package/dist/web/types.d.ts.map +1 -0
  454. package/dist/web/types.js +2 -0
  455. package/dist/web/types.js.map +1 -0
  456. package/dist/web/util.d.ts +12 -0
  457. package/dist/web/util.d.ts.map +1 -0
  458. package/dist/web/util.js +54 -0
  459. package/dist/web/util.js.map +1 -0
  460. package/dist/web/webrtc.d.ts +35 -0
  461. package/dist/web/webrtc.d.ts.map +1 -0
  462. package/dist/web/webrtc.js +304 -0
  463. package/dist/web/webrtc.js.map +1 -0
  464. package/package.json +139 -4
@@ -0,0 +1,54 @@
1
+ import { topic } from "./rooms.js";
2
+ export const HEALTH_SCHEMA_PREFIX = "swal.health/v1";
3
+ export function isHealthRecord(r) {
4
+ return (typeof r === "object" &&
5
+ r !== null &&
6
+ typeof r.schema === "string" &&
7
+ r.schema.startsWith(HEALTH_SCHEMA_PREFIX));
8
+ }
9
+ /** Topic carrying cross-app health records for one subject (`subj_<ULID>`). */
10
+ export const exchangeTopic = (subject) => topic("health", "exchange", subject);
11
+ /**
12
+ * Cross-app exchange over a dedicated mesh (created with topic = exchangeTopic(subject)).
13
+ * Records live in an append-only Y.Array 'records'; receivers see only entries added remotely
14
+ * (or by any writer after subscription), de-duplicated by record id.
15
+ */
16
+ export function exchange(mesh, doc, subject) {
17
+ const arr = doc.getArray("records");
18
+ const cbs = new Set();
19
+ const seen = new Set();
20
+ const obs = (ev) => {
21
+ if (ev.transaction.local)
22
+ return;
23
+ for (const item of ev.changes.added) {
24
+ for (const e of item.content.getContent()) {
25
+ if (seen.has(e.id) || !isHealthRecord(e.record))
26
+ continue;
27
+ seen.add(e.id);
28
+ for (const cb of cbs)
29
+ cb(e.record);
30
+ }
31
+ }
32
+ };
33
+ arr.observe(obs);
34
+ return {
35
+ topic: exchangeTopic(subject),
36
+ send(record) {
37
+ if (!isHealthRecord(record))
38
+ throw new Error(`record.schema must start with "${HEALTH_SCHEMA_PREFIX}"`);
39
+ const id = crypto.randomUUID();
40
+ seen.add(id);
41
+ arr.push([{ id, record }]);
42
+ return id;
43
+ },
44
+ onReceive(cb) {
45
+ cbs.add(cb);
46
+ return () => void cbs.delete(cb);
47
+ },
48
+ destroy() {
49
+ arr.unobserve(obs);
50
+ cbs.clear();
51
+ },
52
+ };
53
+ }
54
+ //# sourceMappingURL=exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../src/web/exchange.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAQrD,MAAM,UAAU,cAAc,CAAC,CAAU;IACxC,OAAO,CACN,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACV,OAAQ,CAAkB,CAAC,MAAM,KAAK,QAAQ;QAC7C,CAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAC3D,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAChD,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAStC;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACvB,IAAU,EACV,GAAsB,EACtB,OAAe;IAEf,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAuC,SAAS,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6B,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CACX,EAAmE,EAClE,EAAE;QACH,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK;YAAE,OAAO;QACjC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAGrC,EAAE,CAAC;gBACJ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;oBAAE,SAAS;gBAC1D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,MAAM,EAAE,IAAI,GAAG;oBAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IACF,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO;QACN,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,MAAM;YACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC1B,MAAM,IAAI,KAAK,CACd,kCAAkC,oBAAoB,GAAG,CACzD,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,SAAS,CAAC,EAAE;YACX,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO;YACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,58 @@
1
+ export declare const F_FRAG = 4;
2
+ export declare const FRAG_HEADER: number;
3
+ export declare const DEFAULT_MAX_FRAME: number;
4
+ export declare const DEFAULT_MAX_MESSAGE: number;
5
+ /** Split `msg` into frames of at most `maxFrame` bytes; a message that already fits is returned as is. */
6
+ export declare function fragment(msg: Uint8Array, maxFrame?: number): Promise<Uint8Array[]>;
7
+ /** A byte budget shared by several reassemblers (e.g. every not-yet-authenticated link of a mesh). */
8
+ export interface ByteBudget {
9
+ used: number;
10
+ readonly max: number;
11
+ }
12
+ export interface ReassemblerOptions {
13
+ /** Largest message accepted (declared length). Default 64 MiB. */
14
+ maxMessageBytes?: number;
15
+ /** Sum of declared lengths of all partial messages; the oldest partials are evicted beyond it. Default = maxMessageBytes. */
16
+ maxPendingBytes?: number;
17
+ /** A partial message older than this is dropped. Default 30 s. */
18
+ timeoutMs?: number;
19
+ now?: () => number;
20
+ onDrop?: (reason: string) => void;
21
+ /** Also charge every partial message to this shared budget (dropped when it would overflow). */
22
+ shared?: ByteBudget;
23
+ }
24
+ /** Reassembles fragments arriving on ONE link. Not shared between links (a peer cannot complete another's message). */
25
+ export declare class Reassembler {
26
+ private o;
27
+ private partials;
28
+ private declared;
29
+ private timer;
30
+ private maxMessage;
31
+ private maxPendingBytes;
32
+ private shared?;
33
+ private readonly timeoutMs;
34
+ private readonly now;
35
+ constructor(o?: ReassemblerOptions);
36
+ /**
37
+ * Change the limits (e.g. once the link is authenticated). `shared: null` stops charging NEW partials to the
38
+ * shared budget; partials already charged release it when they complete or are dropped.
39
+ */
40
+ setLimits(o: {
41
+ maxMessageBytes?: number;
42
+ maxPendingBytes?: number;
43
+ shared?: ByteBudget | null;
44
+ }): void;
45
+ get pending(): number;
46
+ get pendingBytes(): number;
47
+ /** Returns the whole message once its last fragment arrives and the hash matches; null otherwise. */
48
+ push(frame: Uint8Array): Promise<Uint8Array | null>;
49
+ /** Drop partial messages older than the timeout. */
50
+ sweep(): void;
51
+ clear(): void;
52
+ private evictOldest;
53
+ private remove;
54
+ private drop;
55
+ /** Free memory of stalled partials even if no further fragment ever arrives. */
56
+ private arm;
57
+ }
58
+ //# sourceMappingURL=fragment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment.d.ts","sourceRoot":"","sources":["../../src/web/fragment.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,WAAW,QAAyB,CAAC;AAClD,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAC3C,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAMpD,0GAA0G;AAC1G,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,UAAU,EACf,QAAQ,SAAoB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBvB;AAED,sGAAsG;AACtG,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAClC,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6HAA6H;IAC7H,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gGAAgG;IAChG,MAAM,CAAC,EAAE,UAAU,CAAC;CACpB;AAaD,uHAAuH;AACvH,qBAAa,WAAW;IAUX,OAAO,CAAC,CAAC;IATrB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC,YAAoB,CAAC,GAAE,kBAAuB,EAM7C;IAED;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE;QACZ,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;KAC3B,GAAG,IAAI,CAKP;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,qGAAqG;IAC/F,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA8DxD;IAED,oDAAoD;IACpD,KAAK,IAAI,IAAI,CAIZ;IAED,KAAK,IAAI,IAAI,CAOZ;IAED,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,IAAI;IAMZ,gFAAgF;IAChF,OAAO,CAAC,GAAG;CASX"}
@@ -0,0 +1,198 @@
1
+ // Transport-independent fragmentation of mesh messages (H5). Browsers cap a DataChannel message
2
+ // (RTCSctpTransport.maxMessageSize, ~256 KiB in Chrome) and other link transports may cap lower, while an
3
+ // initial sync or a pairing grant can be megabytes. Messages above `maxFrame` are split into self-describing
4
+ // fragments and reassembled with integrity (sequence + total + length + SHA-256), bounded memory and a timeout.
5
+ //
6
+ // Fragment: F_FRAG | msgId(8) | seq(u32) | total(u32) | len(u32) | sha256(32) | chunk
7
+ import { bs, concat, equalBytes, randomBytes } from "./util.js";
8
+ export const F_FRAG = 4;
9
+ export const FRAG_HEADER = 1 + 8 + 4 + 4 + 4 + 32;
10
+ export const DEFAULT_MAX_FRAME = 64 * 1024;
11
+ export const DEFAULT_MAX_MESSAGE = 64 * 1024 * 1024;
12
+ const MAX_FRAGMENTS = 1 << 20;
13
+ const sha256 = async (b) => new Uint8Array(await crypto.subtle.digest("SHA-256", bs(b)));
14
+ /** Split `msg` into frames of at most `maxFrame` bytes; a message that already fits is returned as is. */
15
+ export async function fragment(msg, maxFrame = DEFAULT_MAX_FRAME) {
16
+ if (msg.length <= maxFrame)
17
+ return [msg];
18
+ const chunk = maxFrame - FRAG_HEADER;
19
+ if (chunk < 1)
20
+ throw new Error("maxFrame too small");
21
+ const total = Math.ceil(msg.length / chunk);
22
+ const id = randomBytes(8);
23
+ const hash = await sha256(msg);
24
+ const out = [];
25
+ for (let seq = 0; seq < total; seq++) {
26
+ const body = msg.subarray(seq * chunk, (seq + 1) * chunk);
27
+ const f = new Uint8Array(FRAG_HEADER + body.length);
28
+ const dv = new DataView(f.buffer);
29
+ f[0] = F_FRAG;
30
+ f.set(id, 1);
31
+ dv.setUint32(9, seq);
32
+ dv.setUint32(13, total);
33
+ dv.setUint32(17, msg.length);
34
+ f.set(hash, 21);
35
+ f.set(body, FRAG_HEADER);
36
+ out.push(f);
37
+ }
38
+ return out;
39
+ }
40
+ /** Reassembles fragments arriving on ONE link. Not shared between links (a peer cannot complete another's message). */
41
+ export class Reassembler {
42
+ o;
43
+ partials = new Map();
44
+ declared = 0;
45
+ timer = null;
46
+ maxMessage;
47
+ maxPendingBytes;
48
+ shared;
49
+ timeoutMs;
50
+ now;
51
+ constructor(o = {}) {
52
+ this.o = o;
53
+ this.maxMessage = o.maxMessageBytes ?? DEFAULT_MAX_MESSAGE;
54
+ this.maxPendingBytes = o.maxPendingBytes ?? this.maxMessage;
55
+ this.shared = o.shared;
56
+ this.timeoutMs = o.timeoutMs ?? 30_000;
57
+ this.now = o.now ?? (() => Date.now());
58
+ }
59
+ /**
60
+ * Change the limits (e.g. once the link is authenticated). `shared: null` stops charging NEW partials to the
61
+ * shared budget; partials already charged release it when they complete or are dropped.
62
+ */
63
+ setLimits(o) {
64
+ if (o.maxMessageBytes !== undefined)
65
+ this.maxMessage = o.maxMessageBytes;
66
+ if (o.maxPendingBytes !== undefined)
67
+ this.maxPendingBytes = o.maxPendingBytes;
68
+ if (o.shared !== undefined)
69
+ this.shared = o.shared ?? undefined;
70
+ }
71
+ get pending() {
72
+ return this.partials.size;
73
+ }
74
+ get pendingBytes() {
75
+ return this.declared;
76
+ }
77
+ /** Returns the whole message once its last fragment arrives and the hash matches; null otherwise. */
78
+ async push(frame) {
79
+ this.sweep();
80
+ if (frame.length <= FRAG_HEADER || frame[0] !== F_FRAG)
81
+ return this.drop(null, "malformed fragment");
82
+ const dv = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
83
+ const key = Array.from(frame.subarray(1, 9)).join(",");
84
+ const seq = dv.getUint32(9);
85
+ const total = dv.getUint32(13);
86
+ const len = dv.getUint32(17);
87
+ const hash = frame.subarray(21, FRAG_HEADER);
88
+ const body = frame.subarray(FRAG_HEADER);
89
+ let p = this.partials.get(key);
90
+ if (!p) {
91
+ if (len > this.maxMessage)
92
+ return this.drop(null, "message too large");
93
+ if (total < 2 || total > MAX_FRAGMENTS || total > len || seq >= total)
94
+ return this.drop(null, "malformed fragment");
95
+ while (this.partials.size > 0 &&
96
+ this.declared + len > this.maxPendingBytes)
97
+ this.evictOldest();
98
+ const shared = this.shared;
99
+ if (shared) {
100
+ while (this.partials.size > 0 && shared.used + len > shared.max)
101
+ this.evictOldest();
102
+ if (shared.used + len > shared.max)
103
+ return this.drop(null, "shared budget exhausted");
104
+ shared.used += len;
105
+ }
106
+ p = {
107
+ total,
108
+ len,
109
+ hash: hash.slice(),
110
+ parts: new Map(),
111
+ got: 0,
112
+ started: this.now(),
113
+ shared,
114
+ };
115
+ this.partials.set(key, p);
116
+ this.declared += len;
117
+ this.arm();
118
+ }
119
+ else if (p.total !== total ||
120
+ p.len !== len ||
121
+ !equalBytes(p.hash, hash) ||
122
+ seq >= total) {
123
+ return this.drop(key, "inconsistent fragment");
124
+ }
125
+ if (p.parts.has(seq))
126
+ return null; // duplicate
127
+ if (p.got + body.length > p.len)
128
+ return this.drop(key, "fragment overflow");
129
+ p.parts.set(seq, body.slice());
130
+ p.got += body.length;
131
+ if (p.parts.size < p.total)
132
+ return null;
133
+ this.remove(key);
134
+ if (p.got !== p.len)
135
+ return this.drop(null, "length mismatch");
136
+ const parts = [];
137
+ for (let i = 0; i < p.total; i++)
138
+ parts.push(p.parts.get(i));
139
+ const msg = concat(...parts);
140
+ if (!equalBytes(await sha256(msg), p.hash))
141
+ return this.drop(null, "hash mismatch");
142
+ return msg;
143
+ }
144
+ /** Drop partial messages older than the timeout. */
145
+ sweep() {
146
+ const limit = this.now() - this.timeoutMs;
147
+ for (const [k, p] of this.partials)
148
+ if (p.started <= limit)
149
+ this.drop(k, "timeout");
150
+ }
151
+ clear() {
152
+ for (const p of this.partials.values())
153
+ if (p.shared)
154
+ p.shared.used -= p.len;
155
+ this.partials.clear();
156
+ this.declared = 0;
157
+ if (this.timer)
158
+ clearTimeout(this.timer);
159
+ this.timer = null;
160
+ }
161
+ evictOldest() {
162
+ const first = this.partials.keys().next();
163
+ if (!first.done)
164
+ this.drop(first.value, "evicted");
165
+ }
166
+ remove(key) {
167
+ const p = this.partials.get(key);
168
+ if (!p)
169
+ return;
170
+ this.partials.delete(key);
171
+ this.declared -= p.len;
172
+ if (p.shared)
173
+ p.shared.used -= p.len;
174
+ if (this.partials.size === 0 && this.timer) {
175
+ clearTimeout(this.timer);
176
+ this.timer = null;
177
+ }
178
+ }
179
+ drop(key, reason) {
180
+ if (key !== null)
181
+ this.remove(key);
182
+ this.o.onDrop?.(reason);
183
+ return null;
184
+ }
185
+ /** Free memory of stalled partials even if no further fragment ever arrives. */
186
+ arm() {
187
+ if (this.timer || this.o.now)
188
+ return; // an injected clock means the caller sweeps
189
+ this.timer = setTimeout(() => {
190
+ this.timer = null;
191
+ this.sweep();
192
+ if (this.partials.size > 0)
193
+ this.arm();
194
+ }, this.timeoutMs);
195
+ this.timer.unref?.();
196
+ }
197
+ }
198
+ //# sourceMappingURL=fragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../src/web/fragment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type { Role, TrustRoot } from "./admission.js";
2
+ export { canIssue, idMatchesPub, isDeviceId } from "./admission.js";
3
+ export { deriveDocKey, openUpdate, sealUpdate } from "./crypto.js";
4
+ export type { Exchange, HealthRecord } from "./exchange.js";
5
+ export { exchange, exchangeTopic, HEALTH_SCHEMA_PREFIX, isHealthRecord, } from "./exchange.js";
6
+ export type { PairPayload } from "./pairing.js";
7
+ export { decodePairPayload } from "./pairing.js";
8
+ export { deviceIdOf, IDENTITY_ALG, identityKeygen, identitySign, identityVerify, KEM_ALG, kemKeygen, ML_DSA_PUBLIC_KEY_BYTES, ML_DSA_SIGNATURE_BYTES, ML_KEM_CIPHERTEXT_BYTES, ML_KEM_PUBLIC_KEY_BYTES, } from "./pq.js";
9
+ export type { Mesh, MeshChannel, MeshEvent, MeshOptions, MeshSecurity, MeshStatus, PairHostOptions, PairJoinResult, PairOffer, } from "./provider.js";
10
+ export { createMesh } from "./provider.js";
11
+ export type { TopicScope } from "./rooms.js";
12
+ export { derivePairRoomId, deriveRoomId, fingerprint, legacyNamespace, meshNamespace, topic, } from "./rooms.js";
13
+ export type { RotDoc } from "./rotation.js";
14
+ export { isRotDoc, MAX_ROT_MEMBERS } from "./rotation.js";
15
+ export type { KexDoc, SecDoc } from "./secstate.js";
16
+ export { MAX_MEMBERS_PER_ADMIN, MESH_MODULE, MESH_SCHEMA, SecurityState, } from "./secstate.js";
17
+ export type { MeshStore } from "./store.js";
18
+ export { idbStore, memoryStore } from "./store.js";
19
+ export type { LoopbackHub } from "./transports/loopback.js";
20
+ export { createLoopbackHub } from "./transports/loopback.js";
21
+ export type { QrSdpTransport } from "./transports/qr-sdp.js";
22
+ export { qrSdpTransport } from "./transports/qr-sdp.js";
23
+ export { wsTransport } from "./transports/ws.js";
24
+ export type { Device, LinkTransport, PeerLink, RtcOptions, SigMessage, SignalingChannel, SigTransport, VaultClient, } from "./types.js";
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACN,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,cAAc,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,OAAO,EACP,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,SAAS,CAAC;AACjB,YAAY,EACX,IAAI,EACJ,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,cAAc,EACd,SAAS,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,aAAa,EACb,KAAK,GACL,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACN,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,aAAa,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACX,MAAM,EACN,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACX,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ export { canIssue, idMatchesPub, isDeviceId } from "./admission.js";
2
+ export { deriveDocKey, openUpdate, sealUpdate } from "./crypto.js";
3
+ export { exchange, exchangeTopic, HEALTH_SCHEMA_PREFIX, isHealthRecord, } from "./exchange.js";
4
+ export { decodePairPayload } from "./pairing.js";
5
+ export { deviceIdOf, IDENTITY_ALG, identityKeygen, identitySign, identityVerify, KEM_ALG, kemKeygen, ML_DSA_PUBLIC_KEY_BYTES, ML_DSA_SIGNATURE_BYTES, ML_KEM_CIPHERTEXT_BYTES, ML_KEM_PUBLIC_KEY_BYTES, } from "./pq.js";
6
+ export { createMesh } from "./provider.js";
7
+ export { derivePairRoomId, deriveRoomId, fingerprint, legacyNamespace, meshNamespace, topic, } from "./rooms.js";
8
+ export { isRotDoc, MAX_ROT_MEMBERS } from "./rotation.js";
9
+ export { MAX_MEMBERS_PER_ADMIN, MESH_MODULE, MESH_SCHEMA, SecurityState, } from "./secstate.js";
10
+ export { idbStore, memoryStore } from "./store.js";
11
+ export { createLoopbackHub } from "./transports/loopback.js";
12
+ export { qrSdpTransport } from "./transports/qr-sdp.js";
13
+ export { wsTransport } from "./transports/ws.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EACN,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,cAAc,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,OAAO,EACP,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,SAAS,CAAC;AAYjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,aAAa,EACb,KAAK,GACL,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EACN,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,aAAa,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,104 @@
1
+ import type { StoredOp } from "../oplog/types.js";
2
+ /** Minimal op shape the strategies need (an accepted web/oplog op maps 1:1 via `toMergeOp`). */
3
+ export interface MergeOp {
4
+ id: string;
5
+ author: string;
6
+ seq: number;
7
+ hlc: string;
8
+ entityId: string;
9
+ action: string;
10
+ payload?: unknown;
11
+ base?: string;
12
+ }
13
+ export declare const toMergeOp: (s: StoredOp) => MergeOp;
14
+ export interface MergeStrategy<S> {
15
+ readonly kind: string;
16
+ project(ops: readonly MergeOp[]): S;
17
+ }
18
+ export declare const compareMergeOps: (a: MergeOp, b: MergeOp) => number;
19
+ /** Payload of an lww-field op. */
20
+ export interface LwwPayload {
21
+ set?: Record<string, unknown>;
22
+ unset?: string[];
23
+ /** tombstone the entity */
24
+ delete?: true;
25
+ /** undo every delete this op causally saw (gate who may restore with TrustSchema.actionLevel) */
26
+ restore?: true;
27
+ }
28
+ export interface LwwEntity {
29
+ id: string;
30
+ fields: Record<string, unknown>;
31
+ deleted: boolean;
32
+ /** field -> id of the winning op */
33
+ winners: Record<string, string>;
34
+ /** id of the last op in total order: use it as `base` for the next edit of this entity */
35
+ latest: string;
36
+ }
37
+ export interface LwwOptions {
38
+ /**
39
+ * Precedence for CONCURRENT edits of a field (neither saw the other via `base`/own history): higher rank wins,
40
+ * then HLC. Typical: owner 3 > admin 2 > staff 1 (derive it from web/trust grants). Without it: plain LWW by HLC.
41
+ */
42
+ rank?: (author: string) => number;
43
+ }
44
+ /**
45
+ * Per-field last-writer-wins. Causality comes from `base` (id of the latest op on the entity the author had seen)
46
+ * plus the author's own earlier ops: a causally later write always beats an earlier one; concurrent writes are
47
+ * resolved by `rank` then (hlc, author, seq). Delete = tombstone that wins over concurrent edits; only a `restore`
48
+ * that saw the delete brings the entity back.
49
+ */
50
+ export declare function lwwField(opts?: LwwOptions): MergeStrategy<Map<string, LwwEntity>>;
51
+ export type EventResult<S> = {
52
+ state: S;
53
+ } | {
54
+ reject: string;
55
+ };
56
+ export interface EventReducer<S> {
57
+ init(entityId: string): S;
58
+ /** pure transition (e.g. an order state machine); `{ reject }` = invalid transition, state unchanged */
59
+ apply(state: S, op: MergeOp): EventResult<S>;
60
+ }
61
+ export interface EventEntity<S> {
62
+ id: string;
63
+ state: S;
64
+ /** ids of ops that changed the state, in fold order */
65
+ applied: string[];
66
+ /** rejected transitions (shown as "conflict" in the UI) */
67
+ conflicts: {
68
+ opId: string;
69
+ author: string;
70
+ reason: string;
71
+ }[];
72
+ }
73
+ /** Append-only events folded per entity by an app reducer, in (hlc, author, seq) order. */
74
+ export declare function eventLog<S>(reducer: EventReducer<S>): MergeStrategy<Map<string, EventEntity<S>>>;
75
+ export interface LedgerAccount {
76
+ id: string;
77
+ balance: number;
78
+ /** accepted movement ids, in fold order */
79
+ movements: string[];
80
+ rejected: {
81
+ opId: string;
82
+ author: string;
83
+ reason: string;
84
+ }[];
85
+ /** "flag" mode: the balance went below zero at some point (alert) */
86
+ wentNegative: boolean;
87
+ }
88
+ export interface LedgerOptions {
89
+ /**
90
+ * reject (default): a movement that would leave the account below zero is rejected (deterministic: in total order).
91
+ * flag: applied, account marked `wentNegative` (alert). allow: no check. A function decides per account.
92
+ */
93
+ negative?: "reject" | "flag" | "allow" | ((account: string) => "reject" | "flag" | "allow");
94
+ /** amount of a movement; default `payload.amount`. Use integers (minor units / grams) for exact sums. */
95
+ amount?: (op: MergeOp) => number | null | undefined;
96
+ }
97
+ /** Signed movements summed per account (entityId). No conflicts: stock/balance = sum. */
98
+ export declare function ledger(opts?: LedgerOptions): MergeStrategy<Map<string, LedgerAccount>>;
99
+ /** module -> strategy. `project(module, ops)` folds accepted ops of that module. */
100
+ export declare function createProjector<M extends Record<string, MergeStrategy<unknown>>>(modules: M): {
101
+ modules: M;
102
+ project<K extends keyof M & string>(module: K, ops: readonly (MergeOp | StoredOp)[]): ReturnType<M[K]["project"]>;
103
+ };
104
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web/merge/index.ts"],"names":[],"mappings":"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"}