@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,228 @@
1
+ import { TokenBucketRateLimiter } from "../../security/rate-limiter.js";
2
+ /**
3
+ * REST API Gateway para el mesh Maloca.
4
+ *
5
+ * ── ALCANCE: SOLO LECTURA RESPECTO A LA REPUTACIÓN ─────────────────────────
6
+ * Todo valor de reputación que se expone aqui (perfiles, karma) se LEE del unico
7
+ * motor real (`KarmaManager`, conectado como `mesh.karma` por `MalocaKernel`). El
8
+ * gateway nunca recalcula un score con sus propias reglas ni inventa una base.
9
+ *
10
+ * Un nodo sin historial de karma firmado reporta `0` / `unrated`. NO se le
11
+ * regala una puntuacion inicial gratuita: la reputación se gana con transacciones
12
+ * validadas.
13
+ *
14
+ * NOTA DE SEGURIDAD (redes medicas): la reputación es una señal sobre el
15
+ * historial, no sobre el derecho de acceso. La verificacion de credenciales
16
+ * (`identidad` / atestacion de registro) es lo que da acceso a datos de pacientes.
17
+ * Esta API es de solo lectura y no concede nada.
18
+ */
19
+ export class MalocaGatewayAPI {
20
+ mesh;
21
+ rateLimiter = new TokenBucketRateLimiter({
22
+ tokensPerInterval: 60,
23
+ intervalMs: 1000,
24
+ maxTokens: 100,
25
+ });
26
+ constructor(mesh) {
27
+ this.mesh = mesh;
28
+ }
29
+ checkRateLimit(clientIp) {
30
+ if (!this.rateLimiter.consume(clientIp)) {
31
+ console.warn(`Rate limit exceeded for IP/peer: ${clientIp} on Gateway API`);
32
+ throw new Error("Rate limit exceeded: 429");
33
+ }
34
+ }
35
+ /**
36
+ * GET /mesh/status
37
+ */
38
+ async getMeshStatus(clientIp = "127.0.0.1") {
39
+ this.checkRateLimit(clientIp);
40
+ const nodes = this.mesh.presence.obtenerNodosActivos();
41
+ return {
42
+ status: "online",
43
+ totalNodes: nodes.length,
44
+ activeNodes: nodes,
45
+ config: {
46
+ nodoId: this.mesh.config.nodoId,
47
+ },
48
+ };
49
+ }
50
+ /**
51
+ * GET /profiles/:id
52
+ */
53
+ async getProfile(id, clientIp = "127.0.0.1") {
54
+ this.checkRateLimit(clientIp);
55
+ const profiles = this.mesh.yjsAdapter.getMap("maloca:profiles");
56
+ const profileData = profiles.get(id);
57
+ if (!profileData) {
58
+ return {
59
+ id,
60
+ alias: `Nodo ${id.slice(0, 4)}`,
61
+ karma: await this.getKarmaValue(id),
62
+ };
63
+ }
64
+ return {
65
+ ...profileData,
66
+ id,
67
+ karma: await this.getKarmaValue(id),
68
+ };
69
+ }
70
+ /**
71
+ * POST /profiles
72
+ */
73
+ async registerProfile(profile, clientIp = "127.0.0.1") {
74
+ this.checkRateLimit(clientIp);
75
+ const profiles = this.mesh.yjsAdapter.getMap("maloca:profiles");
76
+ profiles.set(this.mesh.config.nodoId, {
77
+ ...profile,
78
+ updatedAt: Date.now(),
79
+ });
80
+ return {
81
+ success: true,
82
+ profile,
83
+ };
84
+ }
85
+ /**
86
+ * GET /karma/:id
87
+ *
88
+ * Vista de SOLO LECTURA de la reputación. El score y la banda vienen ambos del
89
+ * motor real. Nada de aqui concede acceso a datos clínicos — eso lo concede la
90
+ * verificacion de credenciales.
91
+ */
92
+ async getKarma(id, clientIp = "127.0.0.1") {
93
+ this.checkRateLimit(clientIp);
94
+ const karmaValue = await this.getKarmaValue(id);
95
+ return {
96
+ nodoId: id,
97
+ karma: karmaValue,
98
+ reputacion: this.calculateReputation(karmaValue),
99
+ // Invariante explicito para el mesh medico: la reputación es
100
+ // informativa. Quien consuma esto NO debe tratar `reputacion` como un
101
+ // derecho a tratar pacientes.
102
+ autorizaAcceso: false,
103
+ };
104
+ }
105
+ /**
106
+ * POST /karma/emit
107
+ *
108
+ * Escribe un evento de karma SIN FIRMAR en el log Yjs compartido, para
109
+ * mostrarlo en el panel/clasificacion. NO toca el motor de reputación: el
110
+ * score que devuelven `getKarma`/`getProfile` no le afecta.
111
+ *
112
+ * Justificacion: ese log sin firma lo sigue leyendo
113
+ * `MalocaDashboard.getKarmaValue` para su clasificacion, asi que quitar aqui
114
+ * el escritor romperia ese archivo (fuera del alcance de este cambio). El
115
+ * camino autoritativo es `MalocaKernel.emitKarma` -> `KarmaManager.emit`, que
116
+ * firma con la identidad PQC del nodo.
117
+ *
118
+ * TODO(owner): unificar ambos caminos cuando el dashboard migre fuera del
119
+ * array Yjs crudo.
120
+ */
121
+ async emitKarma(transaction, clientIp = "127.0.0.1") {
122
+ this.checkRateLimit(clientIp);
123
+ const karmaLogs = this.mesh.yjsAdapter.getArray("maloca:karma:txs");
124
+ const tx = {
125
+ from: this.mesh.config.nodoId,
126
+ ...transaction,
127
+ timestamp: Date.now(),
128
+ };
129
+ karmaLogs.push([tx]);
130
+ return {
131
+ txId: Math.random().toString(36).substring(7),
132
+ ...tx,
133
+ // Quien llame no debe suponer que esto afetó al score.
134
+ afectaReputacion: false,
135
+ };
136
+ }
137
+ /**
138
+ * GET /plugins
139
+ */
140
+ async getPlugins(clientIp = "127.0.0.1") {
141
+ this.checkRateLimit(clientIp);
142
+ // Lista de plugins activos basada en configuración o estado dinámico
143
+ return [
144
+ { id: "core", status: "active" },
145
+ { id: "chat", status: "active" },
146
+ { id: "governance", status: "active" },
147
+ { id: "gateway", status: "active" },
148
+ ];
149
+ }
150
+ /**
151
+ * POST /evidentia/notarize
152
+ */
153
+ async notarizeDocument(doc, clientIp = "127.0.0.1") {
154
+ this.checkRateLimit(clientIp);
155
+ const notarizations = this.mesh.yjsAdapter.getMap("maloca:evidentia");
156
+ const entry = {
157
+ ...doc,
158
+ timestamp: Date.now(),
159
+ author: this.mesh.config.nodoId,
160
+ };
161
+ notarizations.set(doc.hash, entry);
162
+ return {
163
+ notarized: true,
164
+ ...entry,
165
+ };
166
+ }
167
+ // --- Helpers ---
168
+ /**
169
+ * Resuelve el motor REAL de karma (`KarmaManager`) conectado a la malla.
170
+ *
171
+ * `MalocaKernel` expone `readonly karma: KarmaManager`. El gateway esta
172
+ * tipado contra el `EdgeMesh` base, asi que buscamos el accessor
173
+ * estructuralmente en vez de castear a ciegas. Cuando la malla es un
174
+ * `EdgeMesh` simple (sin kernel conectado) no hay motor que leer y reportamos
175
+ * "sin datos de reputacion" en vez de fabricar un score.
176
+ */
177
+ getKarmaEngine() {
178
+ const mesh = this.mesh;
179
+ const engine = mesh.karma;
180
+ if (!engine || typeof engine !== "object")
181
+ return null;
182
+ const candidate = engine;
183
+ return typeof candidate.getScore === "function"
184
+ ? engine
185
+ : null;
186
+ }
187
+ /**
188
+ * Lee el score de karma del motor real.
189
+ *
190
+ * Un nodo sin historial devuelve 0 — nunca un valor base sintetico. Un motor
191
+ * ausente (EdgeMesh simple, kernel no conectado) tambien se reporta como 0,
192
+ * para que la API nunca pueda implicar standing no ganado.
193
+ */
194
+ async getKarmaValue(id) {
195
+ const engine = this.getKarmaEngine();
196
+ if (engine === null)
197
+ return 0;
198
+ try {
199
+ const score = engine.getScore(id);
200
+ return Number.isFinite(score) ? score : 0;
201
+ }
202
+ catch {
203
+ // Motor presente pero ilegible: fallo cerrado a 0 en vez de inventar
204
+ // standing.
205
+ return 0;
206
+ }
207
+ }
208
+ /**
209
+ * Deriva una banda de PRESENTACION del score del motor real.
210
+ *
211
+ * El score es la fuente de verdad; esto solo lo agrupa para presentarlo.
212
+ * `unrated` se devuelve para un score cero, de modo que un nodo sin historial
213
+ * validado sea visiblemente no rated en vez de heredar el suelo "newcomer" de
214
+ * la antigua base-100.
215
+ */
216
+ calculateReputation(karma) {
217
+ if (karma > 1000)
218
+ return "legendary";
219
+ if (karma > 500)
220
+ return "trusted";
221
+ if (karma > 100)
222
+ return "member";
223
+ if (karma > 0)
224
+ return "newcomer";
225
+ return "unrated";
226
+ }
227
+ }
228
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/maloca/gateway/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { TokenBucketRateLimiter } from "../../security/rate-limiter.js";
2
+ import type { ParPublico } from "../../types/index.js";
3
+ export declare const authRateLimiter: TokenBucketRateLimiter;
4
+ /**
5
+ * Autenticación vía firma PQC.
6
+ */
7
+ export declare function loginWithPQC(firma: Uint8Array, publicKey: ParPublico, challenge?: Uint8Array, clientIp?: string): Promise<string | null>;
8
+ /**
9
+ * Genera un JWT para sesión externa usando HMAC-SHA256.
10
+ */
11
+ export declare function generateJWT(profileId: string): Promise<string>;
12
+ /**
13
+ * Verifica un JWT usando HMAC-SHA256.
14
+ */
15
+ export declare function verifyToken(token: string): Promise<boolean>;
16
+ /**
17
+ * Obtiene el perfil desde el token.
18
+ */
19
+ export declare function getProfileFromToken(token: string): Promise<string | null>;
20
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/maloca/gateway/auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAiDvD,eAAO,MAAM,eAAe,wBAI1B,CAAC;AAOH;;GAEG;AACH,wBAAsB,YAAY,CACjC,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,UAAU,EACrB,SAAS,GAAE,UAA+D,EAC1E,QAAQ,SAAc,GACpB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBpE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6BjE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB"}
@@ -0,0 +1,115 @@
1
+ import { ml_dsa65 } from "@noble/post-quantum/ml-dsa.js";
2
+ import { TokenBucketRateLimiter } from "../../security/rate-limiter.js";
3
+ /**
4
+ * SSO Centralizado con identidad PQC + JWT
5
+ */
6
+ // Helpers cross-platform (no Buffer/Node.js)
7
+ function bytesToHex(bytes) {
8
+ return Array.from(bytes)
9
+ .map((b) => b.toString(16).padStart(2, "0"))
10
+ .join("");
11
+ }
12
+ function base64url(bytes) {
13
+ return btoa(String.fromCharCode(...bytes))
14
+ .replace(/\+/g, "-")
15
+ .replace(/\//g, "_")
16
+ .replace(/=+$/, "");
17
+ }
18
+ function base64urlDecode(str) {
19
+ const base64 = str.replace(/-/g, "+").replace(/_/g, "/") +
20
+ "=".repeat((4 - (str.length % 4)) % 4);
21
+ return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
22
+ }
23
+ // HMAC-SHA256 via Web Crypto API
24
+ async function hmacSha256(secret, data) {
25
+ const subtle = crypto.subtle;
26
+ const key = await subtle.importKey("raw", secret, { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
27
+ const sig = await subtle.sign("HMAC", key, data);
28
+ return new Uint8Array(sig);
29
+ }
30
+ // Secreto para JWT
31
+ const JWT_SECRET = new TextEncoder().encode("maloca-gateway-default-secret-change-me");
32
+ export const authRateLimiter = new TokenBucketRateLimiter({
33
+ tokensPerInterval: 3,
34
+ intervalMs: 1000,
35
+ maxTokens: 5,
36
+ });
37
+ /** Deriva un profileId corto desde una clave pública PQC */
38
+ function deriveProfileId(publicKey) {
39
+ return bytesToHex(publicKey).slice(0, 16);
40
+ }
41
+ /**
42
+ * Autenticación vía firma PQC.
43
+ */
44
+ export async function loginWithPQC(firma, publicKey, challenge = new TextEncoder().encode("maloca-login-challenge"), clientIp = "127.0.0.1") {
45
+ if (!authRateLimiter.consume(clientIp)) {
46
+ console.warn(`Rate limit exceeded for IP: ${clientIp} on Auth login`);
47
+ throw new Error("Rate limit exceeded: 429");
48
+ }
49
+ try {
50
+ const isValid = ml_dsa65.verify(firma, challenge, publicKey);
51
+ if (isValid) {
52
+ const profileId = deriveProfileId(publicKey);
53
+ return generateJWT(profileId);
54
+ }
55
+ }
56
+ catch (error) {
57
+ console.error("PQC Auth Error:", error);
58
+ }
59
+ return null;
60
+ }
61
+ /**
62
+ * Genera un JWT para sesión externa usando HMAC-SHA256.
63
+ */
64
+ export async function generateJWT(profileId) {
65
+ const headerEncoded = base64url(new TextEncoder().encode(JSON.stringify({ alg: "HS256", typ: "JWT" })));
66
+ const payloadEncoded = base64url(new TextEncoder().encode(JSON.stringify({
67
+ sub: profileId,
68
+ iat: Math.floor(Date.now() / 1000),
69
+ exp: Math.floor(Date.now() / 1000) + 3600,
70
+ })));
71
+ const hmacResult = await hmacSha256(JWT_SECRET, new TextEncoder().encode(`${headerEncoded}.${payloadEncoded}`));
72
+ const signatureEncoded = base64url(hmacResult);
73
+ return `${headerEncoded}.${payloadEncoded}.${signatureEncoded}`;
74
+ }
75
+ /**
76
+ * Verifica un JWT usando HMAC-SHA256.
77
+ */
78
+ export async function verifyToken(token) {
79
+ try {
80
+ const parts = token.split(".");
81
+ if (parts.length !== 3)
82
+ return false;
83
+ const [header, payload, signature] = parts;
84
+ const hmacResult = await hmacSha256(JWT_SECRET, new TextEncoder().encode(`${header}.${payload}`));
85
+ const expectedSignature = base64url(hmacResult);
86
+ if (signature !== expectedSignature)
87
+ return false;
88
+ // Verificar expiración
89
+ const decodedPayload = JSON.parse(new TextDecoder().decode(base64urlDecode(payload)));
90
+ if (decodedPayload.exp &&
91
+ decodedPayload.exp < Math.floor(Date.now() / 1000)) {
92
+ return false;
93
+ }
94
+ return true;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Obtiene el perfil desde el token.
102
+ */
103
+ export async function getProfileFromToken(token) {
104
+ try {
105
+ if (!(await verifyToken(token)))
106
+ return null;
107
+ const parts = token.split(".");
108
+ const decodedPayload = JSON.parse(new TextDecoder().decode(base64urlDecode(parts[1])));
109
+ return decodedPayload.sub;
110
+ }
111
+ catch {
112
+ return null;
113
+ }
114
+ }
115
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/maloca/gateway/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { EdgeMesh } from "../../edge-mesh.js";
2
+ /**
3
+ * Dashboard en tiempo real del estado de la red mesh.
4
+ */
5
+ export declare class MalocaDashboard {
6
+ private readonly mesh;
7
+ constructor(mesh: EdgeMesh);
8
+ /**
9
+ * Retorna la topología actual de la red para visualización.
10
+ */
11
+ getNetworkGraph(): Promise<{
12
+ nodes: {
13
+ id: import("../../index.js").NodoId;
14
+ status: string;
15
+ latency: number;
16
+ }[];
17
+ links: never[];
18
+ }>;
19
+ /**
20
+ * Retorna el ranking de karma de la red.
21
+ */
22
+ getKarmaLeaderboard(): Promise<{
23
+ id: import("../../index.js").NodoId;
24
+ karma: number;
25
+ }[]>;
26
+ /**
27
+ * Retorna el estado de salud de todos los plugins/módulos.
28
+ */
29
+ getPluginHealth(): Promise<{
30
+ core: string;
31
+ chat: string;
32
+ storage: string;
33
+ identity: string;
34
+ governance: string;
35
+ }>;
36
+ /**
37
+ * Retorna los nodos activos en este momento.
38
+ */
39
+ getActiveNodes(): readonly import("../../index.js").NodoId[];
40
+ private getKarmaValue;
41
+ }
42
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/maloca/gateway/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;GAEG;AAEH,qBAAa,eAAe;IACf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,QAAQ,EAAI;IAE/C;;OAEG;IACG,eAAe;;;;;;;OAepB;IAED;;OAEG;IACG,mBAAmB;;;SAUxB;IAED;;OAEG;IACG,eAAe;;;;;;OAQpB;IAED;;OAEG;IACH,cAAc,+CAEb;YAEa,aAAa;CAQ3B"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Dashboard en tiempo real del estado de la red mesh.
3
+ */
4
+ export class MalocaDashboard {
5
+ mesh;
6
+ constructor(mesh) {
7
+ this.mesh = mesh;
8
+ }
9
+ /**
10
+ * Retorna la topología actual de la red para visualización.
11
+ */
12
+ async getNetworkGraph() {
13
+ const activeNodes = this.mesh.presence.obtenerNodosActivos();
14
+ const nodes = activeNodes.map((id) => {
15
+ const salud = this.mesh.presence.obtenerSalud(id);
16
+ return {
17
+ id,
18
+ status: salud?.estado ?? "online",
19
+ latency: salud?.latenciaMs ?? 0,
20
+ };
21
+ });
22
+ return {
23
+ nodes,
24
+ links: [], // En una implementación real, se deducen de los peers en MeshManager
25
+ };
26
+ }
27
+ /**
28
+ * Retorna el ranking de karma de la red.
29
+ */
30
+ async getKarmaLeaderboard() {
31
+ const activeNodes = this.mesh.presence.obtenerNodosActivos();
32
+ const leaderboard = [];
33
+ for (const id of activeNodes) {
34
+ const karma = await this.getKarmaValue(id);
35
+ leaderboard.push({ id, karma });
36
+ }
37
+ return leaderboard.sort((a, b) => b.karma - a.karma);
38
+ }
39
+ /**
40
+ * Retorna el estado de salud de todos los plugins/módulos.
41
+ */
42
+ async getPluginHealth() {
43
+ return {
44
+ core: "healthy",
45
+ chat: "healthy",
46
+ storage: "healthy",
47
+ identity: "healthy",
48
+ governance: "healthy",
49
+ };
50
+ }
51
+ /**
52
+ * Retorna los nodos activos en este momento.
53
+ */
54
+ getActiveNodes() {
55
+ return this.mesh.presence.obtenerNodosActivos();
56
+ }
57
+ async getKarmaValue(id) {
58
+ const karmaLogs = this.mesh.yjsAdapter.getArray("maloca:karma:txs");
59
+ let total = 100;
60
+ for (const tx of karmaLogs.toArray()) {
61
+ if (tx.to === id)
62
+ total += tx.amount;
63
+ }
64
+ return total;
65
+ }
66
+ }
67
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/maloca/gateway/dashboard.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH,MAAM,OAAO,eAAe;IACE,IAAI;IAAjC,YAA6B,IAAc;oBAAd,IAAI;IAAa,CAAC;IAE/C;;OAEG;IACH,KAAK,CAAC,eAAe;QACpB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAClD,OAAO;gBACN,EAAE;gBACF,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,QAAQ;gBACjC,OAAO,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC;aAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACN,KAAK;YACL,KAAK,EAAE,EAAE,EAAE,qEAAqE;SAChF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC7D,MAAM,WAAW,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC3C,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACpB,OAAO;YACN,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,SAAS;SACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,EAAU;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;QACpE,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,OAAO,EAAW,EAAE,CAAC;YAC/C,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE;gBAAE,KAAK,IAAI,EAAE,CAAC,MAAM,CAAC;QACtC,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
@@ -0,0 +1,34 @@
1
+ import type { EdgeMesh } from "../../edge-mesh.js";
2
+ /**
3
+ * WebSocket Gateway para tiempo real en el mesh Maloca.
4
+ * Simulación de manejador de WS.
5
+ */
6
+ export declare class MalocaWSGateway extends EventTarget {
7
+ private readonly mesh;
8
+ private activeSubscriptions;
9
+ private readonly rateLimiter;
10
+ constructor(mesh: EdgeMesh);
11
+ /**
12
+ * Conecta un cliente WS al mesh.
13
+ */
14
+ connectWS(profileId: string, clientIp?: string): Promise<{
15
+ connectionId: string;
16
+ profileId: string;
17
+ }>;
18
+ /**
19
+ * Suscribe al cliente a tipos específicos de eventos.
20
+ */
21
+ subscribeToEvents(profileId: string, tipos: string[]): void;
22
+ /**
23
+ * Envía un evento desde el cliente externo al mesh.
24
+ */
25
+ emitMessage(evento: {
26
+ type: string;
27
+ payload: any;
28
+ }): Promise<void>;
29
+ /**
30
+ * Maneja mensajes recibidos del mesh y los filtra para el cliente.
31
+ */
32
+ private handleMeshMessage;
33
+ }
34
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../../src/maloca/gateway/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAInD;;;GAGG;AAEH,qBAAa,eAAgB,SAAQ,WAAW;IAQnC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPjC,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAIzB;IAEH,YAA6B,IAAI,EAAE,QAAQ,EAE1C;IAED;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAc;;;OAuBxD;IAED;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAMnD;IAED;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,iBAMvD;IAED;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAQzB"}
@@ -0,0 +1,71 @@
1
+ import { TokenBucketRateLimiter } from "../../security/rate-limiter.js";
2
+ /**
3
+ * WebSocket Gateway para tiempo real en el mesh Maloca.
4
+ * Simulación de manejador de WS.
5
+ */
6
+ export class MalocaWSGateway extends EventTarget {
7
+ mesh;
8
+ activeSubscriptions = new Map();
9
+ rateLimiter = new TokenBucketRateLimiter({
10
+ tokensPerInterval: 5,
11
+ intervalMs: 1000,
12
+ maxTokens: 10,
13
+ });
14
+ constructor(mesh) {
15
+ super();
16
+ this.mesh = mesh;
17
+ }
18
+ /**
19
+ * Conecta un cliente WS al mesh.
20
+ */
21
+ async connectWS(profileId, clientIp = "127.0.0.1") {
22
+ if (!this.rateLimiter.consume(clientIp)) {
23
+ console.warn(`Rate limit exceeded for IP: ${clientIp} on Gateway WS connect`);
24
+ this.dispatchEvent(new CustomEvent("rate_limited", {
25
+ detail: { peerId: clientIp, resource: "websocket" },
26
+ }));
27
+ throw new Error("Rate limit exceeded: 429");
28
+ }
29
+ console.log(`WS Client connected: ${profileId}`);
30
+ // Iniciar escucha de eventos del mesh para reenviar al WS
31
+ this.mesh.on("mensajeRecibido", (ev) => {
32
+ this.handleMeshMessage(profileId, ev.detail.envolvente);
33
+ });
34
+ return {
35
+ connectionId: Math.random().toString(36).substring(7),
36
+ profileId,
37
+ };
38
+ }
39
+ /**
40
+ * Suscribe al cliente a tipos específicos de eventos.
41
+ */
42
+ subscribeToEvents(profileId, tipos) {
43
+ const subs = this.activeSubscriptions.get(profileId) ?? new Set();
44
+ for (const t of tipos) {
45
+ subs.add(t);
46
+ }
47
+ this.activeSubscriptions.set(profileId, subs);
48
+ }
49
+ /**
50
+ * Envía un evento desde el cliente externo al mesh.
51
+ */
52
+ async emitMessage(evento) {
53
+ await this.mesh.transmitir({
54
+ type: evento.type,
55
+ payload: evento.payload,
56
+ timestamp: Date.now(),
57
+ });
58
+ }
59
+ /**
60
+ * Maneja mensajes recibidos del mesh y los filtra para el cliente.
61
+ */
62
+ handleMeshMessage(profileId, envolvente) {
63
+ const subs = this.activeSubscriptions.get(profileId);
64
+ if (subs && (subs.has("*") || subs.has(envolvente.tipo))) {
65
+ // En un entorno real, aquí se enviaría por el socket:
66
+ // socket.send(JSON.stringify(envolvente));
67
+ console.log(`WS [${profileId}] forwarding event: ${envolvente.tipo}`);
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../../src/maloca/gateway/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGxE;;;GAGG;AAEH,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAQlB,IAAI;IAPzB,mBAAmB,GAA6B,IAAI,GAAG,EAAE,CAAC;IACjD,WAAW,GAAG,IAAI,sBAAsB,CAAC;QACzD,iBAAiB,EAAE,CAAC;QACpB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,EAAE;KACb,CAAC,CAAC;IAEH,YAA6B,IAAc;QAC1C,KAAK,EAAE,CAAC;oBADoB,IAAI;IAEjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,SAAiB,EAAE,QAAQ,GAAG,WAAW;QACxD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,IAAI,CACX,+BAA+B,QAAQ,wBAAwB,CAC/D,CAAC;YACF,IAAI,CAAC,aAAa,CACjB,IAAI,WAAW,CAAC,cAAc,EAAE;gBAC/B,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE;aACnD,CAAC,CACF,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;QAEjD,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE;YACtC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,OAAO;YACN,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YACrD,SAAS;SACT,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,SAAiB,EAAE,KAAe;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAClE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;QACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAsC;QACvD,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACrB,CAAC,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAiB,EAAE,UAAsB;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC1D,sDAAsD;YACtD,2CAA2C;YAC3C,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,uBAAuB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;IACF,CAAC;CACD"}