@swal/edge-mesh 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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 +154 -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 +176 -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 +50 -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 +45 -0
  313. package/dist/transport/peerjs.d.ts.map +1 -0
  314. package/dist/transport/peerjs.js +301 -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 +230 -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 +138 -4
@@ -0,0 +1,447 @@
1
+ import { canonicalSerialize } from "../protocol/canonical.js";
2
+ import { bytesAHex, hexABytes } from "../protocol/utils.js";
3
+ /** Serializacion canonica de bytes del cuerpo firmado (mensaje ML-DSA). */
4
+ export function canonicalEvidentiaBytes(cuerpo) {
5
+ return canonicalSerialize({
6
+ version: cuerpo.version,
7
+ tipo: cuerpo.tipo,
8
+ contenidoHash: cuerpo.contenidoHash,
9
+ emisor: cuerpo.emisor,
10
+ timestamp: cuerpo.timestamp,
11
+ procedencia: {
12
+ fechaEmision: cuerpo.procedencia.fechaEmision,
13
+ emisor: cuerpo.procedencia.emisor,
14
+ queRespalda: cuerpo.procedencia.queRespalda,
15
+ descripcionEmisor: cuerpo.procedencia.descripcionEmisor ?? null,
16
+ referencia: cuerpo.procedencia.referencia ?? null,
17
+ },
18
+ });
19
+ }
20
+ /** Construye el cuerpo firmado a partir de una Evidentia completa. */
21
+ export function cuerpoFirmado(ev) {
22
+ return {
23
+ version: 1,
24
+ tipo: ev.tipo,
25
+ contenidoHash: ev.contenidoHash,
26
+ emisor: ev.emisor,
27
+ timestamp: ev.timestamp,
28
+ procedencia: ev.procedencia,
29
+ };
30
+ }
31
+ // ─── EVIDENTIA MANAGER ─────────────────────────────────────────────────────
32
+ /** Desfase de reloj tolerado en `fechaEmision` / `timestamp` antes de rechazar. */
33
+ const TOLERANCIA_RELOJ_MS = 5 * 60 * 1000;
34
+ export class EvidentiaManager extends EventTarget {
35
+ identity;
36
+ mesh;
37
+ evidentias;
38
+ NAMESPACE = "_maloca:evidentia";
39
+ bridge;
40
+ /** Claves publicas de emisores conocidas fuera de banda. Nunca se leen de una evidencia. */
41
+ clavesPublicas;
42
+ constructor(identity, mesh, bridge) {
43
+ super();
44
+ this.identity = identity;
45
+ this.mesh = mesh;
46
+ this.evidentias = new Map();
47
+ this.bridge = bridge;
48
+ this.clavesPublicas = new Map();
49
+ // El par de claves local es de fiar por construccion: tenemos la mitad privada.
50
+ this.registrarEmisor(identity.nodoId, identity.exportarPublico());
51
+ }
52
+ /**
53
+ * Registra una clave publica de emisor. Solo pueden registrarse aqui claves
54
+ * obtenidas por un canal de confianza (handshake de identidad, roster de
55
+ * administracion) — `verify()` se niega a confiar en una pubkey que viaje
56
+ * dentro de la misma evidencia que se le pide validar.
57
+ */
58
+ registrarEmisor(emisor, parPublico) {
59
+ if (!parPublico || parPublico.length === 0)
60
+ return;
61
+ this.clavesPublicas.set(String(emisor), new Uint8Array(parPublico));
62
+ }
63
+ clavePublicaDe(emisor) {
64
+ return this.clavesPublicas.get(String(emisor));
65
+ }
66
+ async notarize(contenido, tipo, procedencia) {
67
+ const encoder = new TextEncoder();
68
+ const contenidoStr = JSON.stringify(contenido);
69
+ const contenidoBytes = encoder.encode(contenidoStr);
70
+ // Hashear contenido (SHA-256)
71
+ const digest = await crypto.subtle.digest("SHA-256", contenidoBytes);
72
+ const contenidoHash = bytesAHex(new Uint8Array(digest));
73
+ const emisor = this.identity.nodoId;
74
+ const timestamp = Date.now();
75
+ // La procedencia forma parte del cuerpo firmado, asi que debe resolverse
76
+ // ANTES de firmar.
77
+ const proc = {
78
+ fechaEmision: procedencia?.fechaEmision ?? timestamp,
79
+ emisor: procedencia?.emisor ?? emisor,
80
+ queRespalda: (procedencia?.queRespalda ?? tipo).trim(),
81
+ ...(procedencia?.descripcionEmisor !== undefined
82
+ ? { descripcionEmisor: procedencia.descripcionEmisor }
83
+ : {}),
84
+ ...(procedencia?.referencia !== undefined
85
+ ? { referencia: procedencia.referencia }
86
+ : {}),
87
+ };
88
+ const cuerpo = {
89
+ version: 1,
90
+ tipo,
91
+ contenidoHash,
92
+ emisor,
93
+ timestamp,
94
+ procedencia: proc,
95
+ };
96
+ // Firmar con PQC el cuerpo canonico completo (contenido + procedencia)
97
+ const firmaBytes = await this.identity.firmar(canonicalEvidentiaBytes(cuerpo));
98
+ const firmaPQC = bytesAHex(firmaBytes);
99
+ // Crear hash de la notarización completa
100
+ const notarizacionId = await this.calcularHashNotarizacion(contenidoHash, firmaPQC, emisor);
101
+ const evidentia = {
102
+ hash: notarizacionId,
103
+ tipo,
104
+ contenidoHash,
105
+ emisor,
106
+ firmaPQC,
107
+ red: this.bridge ? "polygon-testnet" : "maloca-mesh",
108
+ confirmaciones: 1,
109
+ timestamp,
110
+ procedencia: proc,
111
+ };
112
+ this.evidentias.set(evidentia.hash, evidentia);
113
+ // Difundir en la red mesh / Polygon
114
+ await this.broadcastToBlockchain(evidentia);
115
+ this.dispatchEvent(new CustomEvent("notarizacionCreada", { detail: evidentia }));
116
+ return evidentia;
117
+ }
118
+ /**
119
+ * Verificacion completa de una evidencia conocida localmente.
120
+ *
121
+ * Devuelve false (y emite `evidenciaRechazada`) salvo que pase TODAS las
122
+ * comprobaciones: integridad del id, coherencia de la procedencia, clave de
123
+ * emisor registrada, y una firma ML-DSA-65 valida sobre el cuerpo canonico.
124
+ *
125
+ * La verificacion on-chain del bridge, cuando existe, sigue siendo una fuente
126
+ * valida: un anchor confirmado en cadena prueba que el hash quedo anclado. Pero
127
+ * ya no es la UNICA via — antes, si el bridge fallaba, caia a `return true`, es
128
+ * decir: verificacion que en realidad no verificaba nada.
129
+ */
130
+ async verify(hash) {
131
+ const evidentia = this.evidentias.get(hash);
132
+ if (!evidentia)
133
+ return false;
134
+ const res = await this.verificarEvidentia(evidentia);
135
+ if (res.valido)
136
+ return true;
137
+ // Si la evidencia esta anclada on-chain, el anclaje es prueba suficiente.
138
+ if (this.bridge) {
139
+ const root = evidentia.hash.startsWith("0x")
140
+ ? evidentia.hash
141
+ : `0x${evidentia.hash}`;
142
+ if (await this.bridge.verifyOnChain(root, []))
143
+ return true;
144
+ }
145
+ this.dispatchEvent(new CustomEvent("evidenciaRechazada", {
146
+ detail: { hash, motivo: res.motivo, emisor: evidentia.emisor },
147
+ }));
148
+ return false;
149
+ }
150
+ /**
151
+ * Verifica una evidencia recibida de la red (aun no confiable localmente).
152
+ * Mismas comprobaciones que `verify()`; la usan quienes ingieren pruebas
153
+ * gosseadas y deben rechazar todo lo que no puedan atribuir criptograficamente.
154
+ */
155
+ async verificarEvidentia(ev) {
156
+ if (!ev || typeof ev !== "object") {
157
+ return { valido: false, motivo: "evidencia invalida" };
158
+ }
159
+ if (typeof ev.firmaPQC !== "string" || ev.firmaPQC.length === 0) {
160
+ return { valido: false, motivo: "firma ausente" };
161
+ }
162
+ if (!ev.procedencia)
163
+ return { valido: false, motivo: "procedencia ausente" };
164
+ // 1. Identidad del propio registro: el hash debe coincidir con sus
165
+ // componentes, si no un par podria mutar tipo/contenidoHash/emisor en
166
+ // transito.
167
+ const esperado = await this.calcularHashNotarizacion(ev.contenidoHash, ev.firmaPQC, ev.emisor);
168
+ if (esperado !== ev.hash)
169
+ return { valido: false, motivo: "hash inconsistente" };
170
+ // 2. Coherencia de la procedencia: quien, cuando, que.
171
+ const proc = ev.procedencia;
172
+ if (proc.emisor !== ev.emisor) {
173
+ return { valido: false, motivo: "procedencia con emisor distinto" };
174
+ }
175
+ if (typeof proc.queRespalda !== "string" ||
176
+ proc.queRespalda.trim().length === 0) {
177
+ return { valido: false, motivo: "procedencia sin queRespalda" };
178
+ }
179
+ if (!Number.isFinite(proc.fechaEmision) || proc.fechaEmision <= 0) {
180
+ return { valido: false, motivo: "procedencia con fecha invalida" };
181
+ }
182
+ const ahora = Date.now();
183
+ if (proc.fechaEmision - ahora > TOLERANCIA_RELOJ_MS ||
184
+ ahora - proc.fechaEmision > TOLERANCIA_RELOJ_MS) {
185
+ return {
186
+ valido: false,
187
+ motivo: "procedencia fuera de la ventana temporal",
188
+ };
189
+ }
190
+ if (!Number.isFinite(ev.timestamp) || ev.timestamp <= 0) {
191
+ return { valido: false, motivo: "timestamp invalido" };
192
+ }
193
+ // 3. La clave del emisor debe estar REGISTRADA. Una pubkey que viaje dentro
194
+ // de la propia evidencia haria que la firma se autocertificara: no valdria
195
+ // nada.
196
+ const parPublico = this.clavesPublicas.get(String(ev.emisor));
197
+ if (!parPublico) {
198
+ return { valido: false, motivo: "pubkey del emisor no registrada" };
199
+ }
200
+ // 4. Firma ML-DSA-65 sobre el cuerpo canonico (contenido + procedencia).
201
+ let firmaBytes;
202
+ try {
203
+ firmaBytes = hexABytes(ev.firmaPQC);
204
+ }
205
+ catch {
206
+ return { valido: false, motivo: "firma malformada" };
207
+ }
208
+ if (firmaBytes.length === 0) {
209
+ return { valido: false, motivo: "firma malformada" };
210
+ }
211
+ const ok = await this.identity.verificar(canonicalEvidentiaBytes(cuerpoFirmado(ev)), firmaBytes, parPublico);
212
+ if (!ok)
213
+ return { valido: false, motivo: "firma PQC invalida" };
214
+ return { valido: true, motivo: "ok" };
215
+ }
216
+ getProof(hash) {
217
+ return this.evidentias.get(hash) ?? null;
218
+ }
219
+ getBridge() {
220
+ return this.bridge;
221
+ }
222
+ async calcularHashNotarizacion(contenidoHash, firmaPQC, emisor) {
223
+ const encoder = new TextEncoder();
224
+ const digest = await crypto.subtle.digest("SHA-256", encoder.encode(`${contenidoHash}${firmaPQC}${emisor}`));
225
+ return bytesAHex(new Uint8Array(digest));
226
+ }
227
+ async broadcastToBlockchain(evidentia) {
228
+ // Si hay bridge de Polygon, enviamos el anchor correspondientemente
229
+ if (this.bridge) {
230
+ const anchor = {
231
+ merkleRoot: evidentia.hash.startsWith("0x")
232
+ ? evidentia.hash
233
+ : `0x${evidentia.hash}`,
234
+ cid: evidentia.contenidoHash,
235
+ timestamp: evidentia.timestamp,
236
+ };
237
+ try {
238
+ await this.bridge.submitAnchor(anchor);
239
+ }
240
+ catch (_err) {
241
+ // El bridge maneja el encolado interno en caso de error
242
+ }
243
+ }
244
+ // Difundir vía gossip en el mesh como "blockchain adapter"
245
+ await this.mesh.transmitirConGossip(this.NAMESPACE, {
246
+ tipo: "DOC_NOTARIZED",
247
+ evidentia,
248
+ });
249
+ }
250
+ }
251
+ // ─── SHA-256 UNIVERSAL (Web Crypto API) ────────────────────────────────────
252
+ // Reemplaza `node:crypto.createHash` para que edge-mesh sea universal
253
+ // (browser + node). Determinista: mismo SHA-256 sobre los mismos bytes.
254
+ const sha256Encoder = new TextEncoder();
255
+ async function sha256Hex(data) {
256
+ const bytes = typeof data === "string" ? sha256Encoder.encode(data) : data;
257
+ const digest = await crypto.subtle.digest("SHA-256", bytes);
258
+ return bytesAHex(new Uint8Array(digest));
259
+ }
260
+ export class MerkleTree {
261
+ leaves;
262
+ root;
263
+ buildPromise;
264
+ buildGeneration = 0;
265
+ signature;
266
+ constructor(leaves = []) {
267
+ this.leaves = [...leaves];
268
+ this.root = "";
269
+ // rebuild() es async (Web Crypto); se dispara y se espera vía buildPromise.
270
+ this.buildPromise = this.rebuild();
271
+ }
272
+ getLeaves() {
273
+ return [...this.leaves];
274
+ }
275
+ toJSON() {
276
+ return {
277
+ leaves: this.leaves,
278
+ signature: this.signature,
279
+ };
280
+ }
281
+ async add(leaf) {
282
+ this.leaves.push(leaf);
283
+ this.buildPromise = this.rebuild();
284
+ await this.buildPromise;
285
+ }
286
+ async getRoot() {
287
+ await this.buildPromise;
288
+ return this.root;
289
+ }
290
+ async rebuild() {
291
+ // Generación anti-race: si un rebuild previo termina después que uno nuevo,
292
+ // su resultado se descarta (snapshot + guard de generación).
293
+ const generation = ++this.buildGeneration;
294
+ const snapshot = [...this.leaves];
295
+ if (snapshot.length === 0) {
296
+ this.root = "";
297
+ return;
298
+ }
299
+ let level = [];
300
+ for (const leaf of snapshot) {
301
+ level.push(await hashLeaf(leaf));
302
+ }
303
+ while (level.length > 1) {
304
+ const nextLevel = [];
305
+ for (let i = 0; i < level.length; i += 2) {
306
+ if (i + 1 < level.length) {
307
+ const left = level[i];
308
+ const right = level[i + 1];
309
+ const combined = left < right ? left + right : right + left;
310
+ nextLevel.push(await sha256Hex(combined));
311
+ }
312
+ else {
313
+ const left = level[i];
314
+ const combined = left + left;
315
+ nextLevel.push(await sha256Hex(combined));
316
+ }
317
+ }
318
+ level = nextLevel;
319
+ }
320
+ if (generation === this.buildGeneration) {
321
+ this.root = level[0] || "";
322
+ }
323
+ }
324
+ async verify(leaf, proof) {
325
+ let currentHash = await hashLeaf(leaf);
326
+ for (const sibling of proof) {
327
+ const combined = currentHash < sibling ? currentHash + sibling : sibling + currentHash;
328
+ currentHash = await sha256Hex(combined);
329
+ }
330
+ return currentHash === (await this.getRoot());
331
+ }
332
+ async getProof(leaf) {
333
+ let index = this.leaves.findIndex((l) => l.id === leaf.id);
334
+ if (index === -1)
335
+ return [];
336
+ const proof = [];
337
+ let level = [];
338
+ for (const l of this.leaves) {
339
+ level.push(await hashLeaf(l));
340
+ }
341
+ while (level.length > 1) {
342
+ const nextLevel = [];
343
+ for (let i = 0; i < level.length; i += 2) {
344
+ if (i + 1 < level.length) {
345
+ const left = level[i];
346
+ const right = level[i + 1];
347
+ const combined = left < right ? left + right : right + left;
348
+ nextLevel.push(await sha256Hex(combined));
349
+ if (i === index) {
350
+ proof.push(right);
351
+ }
352
+ else if (i + 1 === index) {
353
+ proof.push(left);
354
+ }
355
+ }
356
+ else {
357
+ const left = level[i];
358
+ const combined = left + left;
359
+ nextLevel.push(await sha256Hex(combined));
360
+ if (i === index) {
361
+ proof.push(left);
362
+ }
363
+ }
364
+ }
365
+ index = Math.floor(index / 2);
366
+ level = nextLevel;
367
+ }
368
+ return proof;
369
+ }
370
+ }
371
+ export async function hashLeaf(leaf) {
372
+ const dataToHash = `${leaf.id}:${leaf.hash}:${leaf.timestamp}`;
373
+ return sha256Hex(dataToHash);
374
+ }
375
+ export async function mergeMerkleTrees(treeA, treeB, identity) {
376
+ // Atomic rollback check: take snapshots of leaves to prevent mutating treeA or treeB
377
+ const originalLeavesA = treeA.getLeaves();
378
+ const originalLeavesB = treeB.getLeaves();
379
+ // Atomicidad: se trabaja sobre snapshots de leaves (originalLeavesA/B),
380
+ // nunca se mutan treeA ni treeB. Cualquier error aborta sin efectos.
381
+ const leavesMap = new Map();
382
+ for (const leaf of originalLeavesA) {
383
+ leavesMap.set(leaf.id, { a: leaf });
384
+ }
385
+ for (const leaf of originalLeavesB) {
386
+ const entry = leavesMap.get(leaf.id) || {};
387
+ entry.b = leaf;
388
+ leavesMap.set(leaf.id, entry);
389
+ }
390
+ const mergedLeaves = [];
391
+ const resolvedLeaves = [];
392
+ const pendingLeaves = [];
393
+ let conflictCount = 0;
394
+ for (const [_, entry] of leavesMap.entries()) {
395
+ if (entry.a && !entry.b) {
396
+ mergedLeaves.push(entry.a);
397
+ }
398
+ else if (!entry.a && entry.b) {
399
+ mergedLeaves.push(entry.b);
400
+ }
401
+ else if (entry.a && entry.b) {
402
+ const leafA = entry.a;
403
+ const leafB = entry.b;
404
+ if (leafA.hash === leafB.hash) {
405
+ // No conflict, they are identical
406
+ mergedLeaves.push(leafA);
407
+ }
408
+ else {
409
+ // Conflict!
410
+ conflictCount++;
411
+ const diff = Math.abs(leafA.timestamp - leafB.timestamp);
412
+ const fiveMinutesMs = 5 * 60 * 1000;
413
+ if (diff > fiveMinutesMs) {
414
+ // Resolve by LWW (Last-Writer-Wins)
415
+ const winner = leafA.timestamp > leafB.timestamp ? leafA : leafB;
416
+ resolvedLeaves.push(winner);
417
+ mergedLeaves.push(winner);
418
+ }
419
+ else {
420
+ // Irresoluble conflict, requires governance vote
421
+ pendingLeaves.push(leafA);
422
+ pendingLeaves.push(leafB);
423
+ }
424
+ }
425
+ }
426
+ }
427
+ // Create merged tree
428
+ const mergedTree = new MerkleTree(mergedLeaves);
429
+ // El nuevo root se firma con ML-DSA-65
430
+ if (identity) {
431
+ const root = await mergedTree.getRoot();
432
+ if (root) {
433
+ const encoder = new TextEncoder();
434
+ const rootBytes = encoder.encode(root);
435
+ const digest = await crypto.subtle.digest("SHA-256", rootBytes);
436
+ const signatureBytes = await identity.firmar(new Uint8Array(digest));
437
+ mergedTree.signature = bytesAHex(signatureBytes);
438
+ }
439
+ }
440
+ return {
441
+ mergedTree,
442
+ conflictCount,
443
+ resolvedLeaves,
444
+ pendingLeaves,
445
+ };
446
+ }
447
+ //# sourceMappingURL=evidentia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidentia.js","sourceRoot":"","sources":["../../src/maloca/evidentia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import type { EdgeMesh } from "../../edge-mesh.js";
2
+ import type { NodoId } from "../../types/index.js";
3
+ /**
4
+ * Banda de reputacion devuelta junto al score de karma.
5
+ *
6
+ * IMPORTANTE (mesh medico): son BANDAS DE PRESENTACION derivadas del score real
7
+ * del motor. No son una señal de autorización. Una insignia de reputación NO
8
+ * debe leerse como "este nodo puede ver pacientes" — el acceso lo concede la
9
+ * verificacion de credencial, nunca la reputación.
10
+ */
11
+ export type ReputationBand = "unrated" | "newcomer" | "member" | "trusted" | "legendary";
12
+ /**
13
+ * REST API Gateway para el mesh Maloca.
14
+ *
15
+ * ── ALCANCE: SOLO LECTURA RESPECTO A LA REPUTACIÓN ─────────────────────────
16
+ * Todo valor de reputación que se expone aqui (perfiles, karma) se LEE del unico
17
+ * motor real (`KarmaManager`, conectado como `mesh.karma` por `MalocaKernel`). El
18
+ * gateway nunca recalcula un score con sus propias reglas ni inventa una base.
19
+ *
20
+ * Un nodo sin historial de karma firmado reporta `0` / `unrated`. NO se le
21
+ * regala una puntuacion inicial gratuita: la reputación se gana con transacciones
22
+ * validadas.
23
+ *
24
+ * NOTA DE SEGURIDAD (redes medicas): la reputación es una señal sobre el
25
+ * historial, no sobre el derecho de acceso. La verificacion de credenciales
26
+ * (`identidad` / atestacion de registro) es lo que da acceso a datos de pacientes.
27
+ * Esta API es de solo lectura y no concede nada.
28
+ */
29
+ export declare class MalocaGatewayAPI {
30
+ private readonly mesh;
31
+ private readonly rateLimiter;
32
+ constructor(mesh: EdgeMesh);
33
+ private checkRateLimit;
34
+ /**
35
+ * GET /mesh/status
36
+ */
37
+ getMeshStatus(clientIp?: string): Promise<{
38
+ status: string;
39
+ totalNodes: number;
40
+ activeNodes: readonly NodoId[];
41
+ config: {
42
+ nodoId: NodoId;
43
+ };
44
+ }>;
45
+ /**
46
+ * GET /profiles/:id
47
+ */
48
+ getProfile(id: string, clientIp?: string): Promise<any>;
49
+ /**
50
+ * POST /profiles
51
+ */
52
+ registerProfile(profile: any, clientIp?: string): Promise<{
53
+ success: boolean;
54
+ profile: any;
55
+ }>;
56
+ /**
57
+ * GET /karma/:id
58
+ *
59
+ * Vista de SOLO LECTURA de la reputación. El score y la banda vienen ambos del
60
+ * motor real. Nada de aqui concede acceso a datos clínicos — eso lo concede la
61
+ * verificacion de credenciales.
62
+ */
63
+ getKarma(id: string, clientIp?: string): Promise<{
64
+ nodoId: string;
65
+ karma: number;
66
+ reputacion: ReputationBand;
67
+ autorizaAcceso: false;
68
+ }>;
69
+ /**
70
+ * POST /karma/emit
71
+ *
72
+ * Escribe un evento de karma SIN FIRMAR en el log Yjs compartido, para
73
+ * mostrarlo en el panel/clasificacion. NO toca el motor de reputación: el
74
+ * score que devuelven `getKarma`/`getProfile` no le afecta.
75
+ *
76
+ * Justificacion: ese log sin firma lo sigue leyendo
77
+ * `MalocaDashboard.getKarmaValue` para su clasificacion, asi que quitar aqui
78
+ * el escritor romperia ese archivo (fuera del alcance de este cambio). El
79
+ * camino autoritativo es `MalocaKernel.emitKarma` -> `KarmaManager.emit`, que
80
+ * firma con la identidad PQC del nodo.
81
+ *
82
+ * TODO(owner): unificar ambos caminos cuando el dashboard migre fuera del
83
+ * array Yjs crudo.
84
+ */
85
+ emitKarma(transaction: {
86
+ to: string;
87
+ amount: number;
88
+ reason: string;
89
+ }, clientIp?: string): Promise<{
90
+ to: string;
91
+ amount: number;
92
+ reason: string;
93
+ from: NodoId;
94
+ timestamp: number;
95
+ txId: string;
96
+ afectaReputacion: false;
97
+ }>;
98
+ /**
99
+ * GET /plugins
100
+ */
101
+ getPlugins(clientIp?: string): Promise<{
102
+ id: string;
103
+ status: string;
104
+ }[]>;
105
+ /**
106
+ * POST /evidentia/notarize
107
+ */
108
+ notarizeDocument(doc: {
109
+ hash: string;
110
+ metadata: any;
111
+ }, clientIp?: string): Promise<{
112
+ hash: string;
113
+ metadata: any;
114
+ timestamp: number;
115
+ author: NodoId;
116
+ notarized: boolean;
117
+ }>;
118
+ /**
119
+ * Resuelve el motor REAL de karma (`KarmaManager`) conectado a la malla.
120
+ *
121
+ * `MalocaKernel` expone `readonly karma: KarmaManager`. El gateway esta
122
+ * tipado contra el `EdgeMesh` base, asi que buscamos el accessor
123
+ * estructuralmente en vez de castear a ciegas. Cuando la malla es un
124
+ * `EdgeMesh` simple (sin kernel conectado) no hay motor que leer y reportamos
125
+ * "sin datos de reputacion" en vez de fabricar un score.
126
+ */
127
+ private getKarmaEngine;
128
+ /**
129
+ * Lee el score de karma del motor real.
130
+ *
131
+ * Un nodo sin historial devuelve 0 — nunca un valor base sintetico. Un motor
132
+ * ausente (EdgeMesh simple, kernel no conectado) tambien se reporta como 0,
133
+ * para que la API nunca pueda implicar standing no ganado.
134
+ */
135
+ private getKarmaValue;
136
+ /**
137
+ * Deriva una banda de PRESENTACION del score del motor real.
138
+ *
139
+ * El score es la fuente de verdad; esto solo lo agrupa para presentarlo.
140
+ * `unrated` se devuelve para un score cero, de modo que un nodo sin historial
141
+ * validado sea visiblemente no rated en vez de heredar el suelo "newcomer" de
142
+ * la antigua base-100.
143
+ */
144
+ private calculateReputation;
145
+ }
146
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/maloca/gateway/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAMnD;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACvB,SAAS,GACT,UAAU,GACV,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEf;;;;;;;;;;;;;;;;GAgBG;AAEH,qBAAa,gBAAgB;IAOhB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAIzB;IAEH,YAA6B,IAAI,EAAE,QAAQ,EAAI;IAE/C,OAAO,CAAC,cAAc;IAStB;;OAEG;IACG,aAAa,CAAC,QAAQ,SAAc;;;;;YAQvC,MAAM;;OAGR;IAED;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,SAAc,gBAkBlD;IAED;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,SAAc;;;OAYzD;IAED;;;;;;OAMG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,SAAc;;;;;OAYhD;IAED;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CACd,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC3D,QAAQ,SAAc;YADH,MAAM;gBAAU,MAAM;gBAAU,MAAM;;;;;OAkBzD;IAED;;OAEG;IACG,UAAU,CAAC,QAAQ,SAAc;;;SAStC;IAED;;OAEG;IACG,gBAAgB,CACrB,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,EACpC,QAAQ,SAAc;cADT,MAAM;kBAAY,GAAG;;;;OAgBlC;IAID;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAUtB;;;;;;OAMG;YACW,aAAa;IAa3B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;CAO3B"}