@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.
- package/LICENSE +128 -0
- package/NOTICE +37 -0
- package/README.md +470 -2
- package/dist/adapters/gpu-agent/index.d.ts +61 -0
- package/dist/adapters/gpu-agent/index.d.ts.map +1 -0
- package/dist/adapters/gpu-agent/index.js +364 -0
- package/dist/adapters/gpu-agent/index.js.map +1 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.d.ts +19 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.js +51 -0
- package/dist/adapters/maloca-salud/citas-distribuidas.js.map +1 -0
- package/dist/adapters/maloca-salud/eps-bridge.d.ts +15 -0
- package/dist/adapters/maloca-salud/eps-bridge.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/eps-bridge.js +27 -0
- package/dist/adapters/maloca-salud/eps-bridge.js.map +1 -0
- package/dist/adapters/maloca-salud/patient-profile.d.ts +20 -0
- package/dist/adapters/maloca-salud/patient-profile.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/patient-profile.js +36 -0
- package/dist/adapters/maloca-salud/patient-profile.js.map +1 -0
- package/dist/adapters/maloca-salud/types.d.ts +40 -0
- package/dist/adapters/maloca-salud/types.d.ts.map +1 -0
- package/dist/adapters/maloca-salud/types.js +2 -0
- package/dist/adapters/maloca-salud/types.js.map +1 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.d.ts +31 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.js +103 -0
- package/dist/adapters/maloca-veeduria/contract-bridge.js.map +1 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.d.ts +14 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.js +40 -0
- package/dist/adapters/maloca-veeduria/evidentia-veeduria.js.map +1 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.d.ts +21 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.js +58 -0
- package/dist/adapters/maloca-veeduria/licitante-profile.js.map +1 -0
- package/dist/adapters/maloca-veeduria/types.d.ts +30 -0
- package/dist/adapters/maloca-veeduria/types.d.ts.map +1 -0
- package/dist/adapters/maloca-veeduria/types.js +2 -0
- package/dist/adapters/maloca-veeduria/types.js.map +1 -0
- package/dist/adapters/maloca-xavier/agent-profile.d.ts +32 -0
- package/dist/adapters/maloca-xavier/agent-profile.d.ts.map +1 -0
- package/dist/adapters/maloca-xavier/agent-profile.js +56 -0
- package/dist/adapters/maloca-xavier/agent-profile.js.map +1 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.d.ts +27 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.d.ts.map +1 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.js +58 -0
- package/dist/adapters/maloca-xavier/codegraph-bridge.js.map +1 -0
- package/dist/adapters/maloca-xavier/llm-router.d.ts +25 -0
- package/dist/adapters/maloca-xavier/llm-router.d.ts.map +1 -0
- package/dist/adapters/maloca-xavier/llm-router.js +58 -0
- package/dist/adapters/maloca-xavier/llm-router.js.map +1 -0
- package/dist/authz/index.d.ts +81 -0
- package/dist/authz/index.d.ts.map +1 -0
- package/dist/authz/index.js +271 -0
- package/dist/authz/index.js.map +1 -0
- package/dist/chat/index.d.ts +138 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +394 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/offline-queue.d.ts +32 -0
- package/dist/chat/offline-queue.d.ts.map +1 -0
- package/dist/chat/offline-queue.js +93 -0
- package/dist/chat/offline-queue.js.map +1 -0
- package/dist/core/DefaultEdgeMeshNode.d.ts +17 -0
- package/dist/core/DefaultEdgeMeshNode.d.ts.map +1 -0
- package/dist/core/DefaultEdgeMeshNode.js +57 -0
- package/dist/core/DefaultEdgeMeshNode.js.map +1 -0
- package/dist/core/node.d.ts +26 -0
- package/dist/core/node.d.ts.map +1 -0
- package/dist/core/node.js +16 -0
- package/dist/core/node.js.map +1 -0
- package/dist/edge-mesh.d.ts +139 -0
- package/dist/edge-mesh.d.ts.map +1 -0
- package/dist/edge-mesh.js +1146 -0
- package/dist/edge-mesh.js.map +1 -0
- package/dist/gos/GosBridge.d.ts +49 -0
- package/dist/gos/GosBridge.d.ts.map +1 -0
- package/dist/gos/GosBridge.js +133 -0
- package/dist/gos/GosBridge.js.map +1 -0
- package/dist/governance/authority.d.ts +44 -0
- package/dist/governance/authority.d.ts.map +1 -0
- package/dist/governance/authority.js +123 -0
- package/dist/governance/authority.js.map +1 -0
- package/dist/governance/index.d.ts +66 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +210 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/merge.d.ts +31 -0
- package/dist/governance/merge.d.ts.map +1 -0
- package/dist/governance/merge.js +167 -0
- package/dist/governance/merge.js.map +1 -0
- package/dist/identity/index.d.ts +199 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +415 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/maloca/backoffice.d.ts +31 -0
- package/dist/maloca/backoffice.d.ts.map +1 -0
- package/dist/maloca/backoffice.js +40 -0
- package/dist/maloca/backoffice.js.map +1 -0
- package/dist/maloca/event-bus.d.ts +60 -0
- package/dist/maloca/event-bus.d.ts.map +1 -0
- package/dist/maloca/event-bus.js +175 -0
- package/dist/maloca/event-bus.js.map +1 -0
- package/dist/maloca/evidentia.d.ts +136 -0
- package/dist/maloca/evidentia.d.ts.map +1 -0
- package/dist/maloca/evidentia.js +447 -0
- package/dist/maloca/evidentia.js.map +1 -0
- package/dist/maloca/gateway/api.d.ts +146 -0
- package/dist/maloca/gateway/api.d.ts.map +1 -0
- package/dist/maloca/gateway/api.js +228 -0
- package/dist/maloca/gateway/api.js.map +1 -0
- package/dist/maloca/gateway/auth.d.ts +20 -0
- package/dist/maloca/gateway/auth.d.ts.map +1 -0
- package/dist/maloca/gateway/auth.js +115 -0
- package/dist/maloca/gateway/auth.js.map +1 -0
- package/dist/maloca/gateway/dashboard.d.ts +42 -0
- package/dist/maloca/gateway/dashboard.d.ts.map +1 -0
- package/dist/maloca/gateway/dashboard.js +67 -0
- package/dist/maloca/gateway/dashboard.js.map +1 -0
- package/dist/maloca/gateway/websocket.d.ts +34 -0
- package/dist/maloca/gateway/websocket.d.ts.map +1 -0
- package/dist/maloca/gateway/websocket.js +71 -0
- package/dist/maloca/gateway/websocket.js.map +1 -0
- package/dist/maloca/karma.d.ts +165 -0
- package/dist/maloca/karma.d.ts.map +1 -0
- package/dist/maloca/karma.js +307 -0
- package/dist/maloca/karma.js.map +1 -0
- package/dist/maloca/kernel.d.ts +20 -0
- package/dist/maloca/kernel.d.ts.map +1 -0
- package/dist/maloca/kernel.js +76 -0
- package/dist/maloca/kernel.js.map +1 -0
- package/dist/maloca/metadata.d.ts +30 -0
- package/dist/maloca/metadata.d.ts.map +1 -0
- package/dist/maloca/metadata.js +80 -0
- package/dist/maloca/metadata.js.map +1 -0
- package/dist/maloca/perfil.d.ts +57 -0
- package/dist/maloca/perfil.d.ts.map +1 -0
- package/dist/maloca/perfil.js +113 -0
- package/dist/maloca/perfil.js.map +1 -0
- package/dist/maloca/plugin-registry.d.ts +27 -0
- package/dist/maloca/plugin-registry.d.ts.map +1 -0
- package/dist/maloca/plugin-registry.js +76 -0
- package/dist/maloca/plugin-registry.js.map +1 -0
- package/dist/maloca/polygon-bridge.d.ts +63 -0
- package/dist/maloca/polygon-bridge.d.ts.map +1 -0
- package/dist/maloca/polygon-bridge.js +198 -0
- package/dist/maloca/polygon-bridge.js.map +1 -0
- package/dist/maloca/types.d.ts +44 -0
- package/dist/maloca/types.d.ts.map +1 -0
- package/dist/maloca/types.js +2 -0
- package/dist/maloca/types.js.map +1 -0
- package/dist/medico/aval.d.ts +149 -0
- package/dist/medico/aval.d.ts.map +1 -0
- package/dist/medico/aval.js +281 -0
- package/dist/medico/aval.js.map +1 -0
- package/dist/medico/canonica.d.ts +96 -0
- package/dist/medico/canonica.d.ts.map +1 -0
- package/dist/medico/canonica.js +148 -0
- package/dist/medico/canonica.js.map +1 -0
- package/dist/medico/credencial.d.ts +160 -0
- package/dist/medico/credencial.d.ts.map +1 -0
- package/dist/medico/credencial.js +240 -0
- package/dist/medico/credencial.js.map +1 -0
- package/dist/medico/index.d.ts +36 -0
- package/dist/medico/index.d.ts.map +1 -0
- package/dist/medico/index.js +39 -0
- package/dist/medico/index.js.map +1 -0
- package/dist/medico/malla.d.ts +218 -0
- package/dist/medico/malla.d.ts.map +1 -0
- package/dist/medico/malla.js +347 -0
- package/dist/medico/malla.js.map +1 -0
- package/dist/medico/registro-profesional.d.ts +84 -0
- package/dist/medico/registro-profesional.d.ts.map +1 -0
- package/dist/medico/registro-profesional.js +135 -0
- package/dist/medico/registro-profesional.js.map +1 -0
- package/dist/medico/registro.d.ts +149 -0
- package/dist/medico/registro.d.ts.map +1 -0
- package/dist/medico/registro.js +173 -0
- package/dist/medico/registro.js.map +1 -0
- package/dist/medico/types.d.ts +287 -0
- package/dist/medico/types.d.ts.map +1 -0
- package/dist/medico/types.js +135 -0
- package/dist/medico/types.js.map +1 -0
- package/dist/medico/verificacion-registro.d.ts +300 -0
- package/dist/medico/verificacion-registro.d.ts.map +1 -0
- package/dist/medico/verificacion-registro.js +319 -0
- package/dist/medico/verificacion-registro.js.map +1 -0
- package/dist/mesh/index.d.ts +457 -0
- package/dist/mesh/index.d.ts.map +1 -0
- package/dist/mesh/index.js +929 -0
- package/dist/mesh/index.js.map +1 -0
- package/dist/namespaces/encrypted-plugin.d.ts +56 -0
- package/dist/namespaces/encrypted-plugin.d.ts.map +1 -0
- package/dist/namespaces/encrypted-plugin.js +173 -0
- package/dist/namespaces/encrypted-plugin.js.map +1 -0
- package/dist/namespaces/index.d.ts +52 -0
- package/dist/namespaces/index.d.ts.map +1 -0
- package/dist/namespaces/index.js +134 -0
- package/dist/namespaces/index.js.map +1 -0
- package/dist/namespaces/ivn-proofs.d.ts +54 -0
- package/dist/namespaces/ivn-proofs.d.ts.map +1 -0
- package/dist/namespaces/ivn-proofs.js +162 -0
- package/dist/namespaces/ivn-proofs.js.map +1 -0
- package/dist/namespaces/offers-gossip.d.ts +95 -0
- package/dist/namespaces/offers-gossip.d.ts.map +1 -0
- package/dist/namespaces/offers-gossip.js +213 -0
- package/dist/namespaces/offers-gossip.js.map +1 -0
- package/dist/node-memory/idb-store.d.ts +22 -0
- package/dist/node-memory/idb-store.d.ts.map +1 -0
- package/dist/node-memory/idb-store.js +154 -0
- package/dist/node-memory/idb-store.js.map +1 -0
- package/dist/node-memory/index.d.ts +14 -0
- package/dist/node-memory/index.d.ts.map +1 -0
- package/dist/node-memory/index.js +159 -0
- package/dist/node-memory/index.js.map +1 -0
- package/dist/node-memory/sync-flush.d.ts +11 -0
- package/dist/node-memory/sync-flush.d.ts.map +1 -0
- package/dist/node-memory/sync-flush.js +37 -0
- package/dist/node-memory/sync-flush.js.map +1 -0
- package/dist/node-memory/types.d.ts +34 -0
- package/dist/node-memory/types.d.ts.map +1 -0
- package/dist/node-memory/types.js +2 -0
- package/dist/node-memory/types.js.map +1 -0
- package/dist/node-memory/xavier-store.d.ts +12 -0
- package/dist/node-memory/xavier-store.d.ts.map +1 -0
- package/dist/node-memory/xavier-store.js +75 -0
- package/dist/node-memory/xavier-store.js.map +1 -0
- package/dist/op-log/index.d.ts +49 -0
- package/dist/op-log/index.d.ts.map +1 -0
- package/dist/op-log/index.js +190 -0
- package/dist/op-log/index.js.map +1 -0
- package/dist/presence/health.d.ts +54 -0
- package/dist/presence/health.d.ts.map +1 -0
- package/dist/presence/health.js +139 -0
- package/dist/presence/health.js.map +1 -0
- package/dist/presence/index.d.ts +85 -0
- package/dist/presence/index.d.ts.map +1 -0
- package/dist/presence/index.js +255 -0
- package/dist/presence/index.js.map +1 -0
- package/dist/presence/peer-health.d.ts +40 -0
- package/dist/presence/peer-health.d.ts.map +1 -0
- package/dist/presence/peer-health.js +118 -0
- package/dist/presence/peer-health.js.map +1 -0
- package/dist/protocol/canonical.d.ts +10 -0
- package/dist/protocol/canonical.d.ts.map +1 -0
- package/dist/protocol/canonical.js +32 -0
- package/dist/protocol/canonical.js.map +1 -0
- package/dist/protocol/crypto.d.ts +299 -0
- package/dist/protocol/crypto.d.ts.map +1 -0
- package/dist/protocol/crypto.js +739 -0
- package/dist/protocol/crypto.js.map +1 -0
- package/dist/protocol/index.d.ts +30 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +116 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/utils.d.ts +5 -0
- package/dist/protocol/utils.d.ts.map +1 -0
- package/dist/protocol/utils.js +27 -0
- package/dist/protocol/utils.js.map +1 -0
- package/dist/salones/manager.d.ts +100 -0
- package/dist/salones/manager.d.ts.map +1 -0
- package/dist/salones/manager.js +240 -0
- package/dist/salones/manager.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +13 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +32 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/snapshot/index.d.ts +90 -0
- package/dist/snapshot/index.d.ts.map +1 -0
- package/dist/snapshot/index.js +189 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/storage/index.d.ts +49 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +176 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/optimizer.d.ts +28 -0
- package/dist/storage/optimizer.d.ts.map +1 -0
- package/dist/storage/optimizer.js +50 -0
- package/dist/storage/optimizer.js.map +1 -0
- package/dist/storage/ydoc-persistence.d.ts +27 -0
- package/dist/storage/ydoc-persistence.d.ts.map +1 -0
- package/dist/storage/ydoc-persistence.js +128 -0
- package/dist/storage/ydoc-persistence.js.map +1 -0
- package/dist/sync/ChunkSyncManager.d.ts +41 -0
- package/dist/sync/ChunkSyncManager.d.ts.map +1 -0
- package/dist/sync/ChunkSyncManager.js +115 -0
- package/dist/sync/ChunkSyncManager.js.map +1 -0
- package/dist/sync/conflict-resolver.d.ts +33 -0
- package/dist/sync/conflict-resolver.d.ts.map +1 -0
- package/dist/sync/conflict-resolver.js +54 -0
- package/dist/sync/conflict-resolver.js.map +1 -0
- package/dist/sync/engine.d.ts +168 -0
- package/dist/sync/engine.d.ts.map +1 -0
- package/dist/sync/engine.js +315 -0
- package/dist/sync/engine.js.map +1 -0
- package/dist/sync/index.d.ts +3 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +3 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/transport/TorTransportAdapter.d.ts +70 -0
- package/dist/transport/TorTransportAdapter.d.ts.map +1 -0
- package/dist/transport/TorTransportAdapter.js +192 -0
- package/dist/transport/TorTransportAdapter.js.map +1 -0
- package/dist/transport/memory.d.ts +31 -0
- package/dist/transport/memory.d.ts.map +1 -0
- package/dist/transport/memory.js +114 -0
- package/dist/transport/memory.js.map +1 -0
- package/dist/transport/peerjs.d.ts +45 -0
- package/dist/transport/peerjs.d.ts.map +1 -0
- package/dist/transport/peerjs.js +301 -0
- package/dist/transport/peerjs.js.map +1 -0
- package/dist/transport/pqc-handshake.d.ts +72 -0
- package/dist/transport/pqc-handshake.d.ts.map +1 -0
- package/dist/transport/pqc-handshake.js +129 -0
- package/dist/transport/pqc-handshake.js.map +1 -0
- package/dist/transport/relay-config.d.ts +11 -0
- package/dist/transport/relay-config.d.ts.map +1 -0
- package/dist/transport/relay-config.js +48 -0
- package/dist/transport/relay-config.js.map +1 -0
- package/dist/transport/relay-server.d.ts +37 -0
- package/dist/transport/relay-server.d.ts.map +1 -0
- package/dist/transport/relay-server.js +230 -0
- package/dist/transport/relay-server.js.map +1 -0
- package/dist/transport/tor.d.ts +47 -0
- package/dist/transport/tor.d.ts.map +1 -0
- package/dist/transport/tor.js +158 -0
- package/dist/transport/tor.js.map +1 -0
- package/dist/transport/types.d.ts +34 -0
- package/dist/transport/types.d.ts.map +1 -0
- package/dist/transport/types.js +2 -0
- package/dist/transport/types.js.map +1 -0
- package/dist/types/index.d.ts +293 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +73 -0
- package/dist/types/index.js.map +1 -0
- package/dist/web/admission.d.ts +24 -0
- package/dist/web/admission.d.ts.map +1 -0
- package/dist/web/admission.js +41 -0
- package/dist/web/admission.js.map +1 -0
- package/dist/web/crypto.d.ts +18 -0
- package/dist/web/crypto.d.ts.map +1 -0
- package/dist/web/crypto.js +78 -0
- package/dist/web/crypto.js.map +1 -0
- package/dist/web/exchange.d.ts +23 -0
- package/dist/web/exchange.d.ts.map +1 -0
- package/dist/web/exchange.js +54 -0
- package/dist/web/exchange.js.map +1 -0
- package/dist/web/fragment.d.ts +58 -0
- package/dist/web/fragment.d.ts.map +1 -0
- package/dist/web/fragment.js +198 -0
- package/dist/web/fragment.js.map +1 -0
- package/dist/web/index.d.ts +25 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +14 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/merge/index.d.ts +104 -0
- package/dist/web/merge/index.d.ts.map +1 -0
- package/dist/web/merge/index.js +236 -0
- package/dist/web/merge/index.js.map +1 -0
- package/dist/web/oplog/hlc.d.ts +19 -0
- package/dist/web/oplog/hlc.d.ts.map +1 -0
- package/dist/web/oplog/hlc.js +39 -0
- package/dist/web/oplog/hlc.js.map +1 -0
- package/dist/web/oplog/index.d.ts +10 -0
- package/dist/web/oplog/index.d.ts.map +1 -0
- package/dist/web/oplog/index.js +6 -0
- package/dist/web/oplog/index.js.map +1 -0
- package/dist/web/oplog/log.d.ts +182 -0
- package/dist/web/oplog/log.d.ts.map +1 -0
- package/dist/web/oplog/log.js +693 -0
- package/dist/web/oplog/log.js.map +1 -0
- package/dist/web/oplog/store.d.ts +40 -0
- package/dist/web/oplog/store.d.ts.map +1 -0
- package/dist/web/oplog/store.js +85 -0
- package/dist/web/oplog/store.js.map +1 -0
- package/dist/web/oplog/sync.d.ts +54 -0
- package/dist/web/oplog/sync.d.ts.map +1 -0
- package/dist/web/oplog/sync.js +162 -0
- package/dist/web/oplog/sync.js.map +1 -0
- package/dist/web/oplog/types.d.ts +119 -0
- package/dist/web/oplog/types.d.ts.map +1 -0
- package/dist/web/oplog/types.js +2 -0
- package/dist/web/oplog/types.js.map +1 -0
- package/dist/web/pairing.d.ts +186 -0
- package/dist/web/pairing.d.ts.map +1 -0
- package/dist/web/pairing.js +395 -0
- package/dist/web/pairing.js.map +1 -0
- package/dist/web/pq.d.ts +36 -0
- package/dist/web/pq.d.ts.map +1 -0
- package/dist/web/pq.js +59 -0
- package/dist/web/pq.js.map +1 -0
- package/dist/web/provider.d.ts +188 -0
- package/dist/web/provider.d.ts.map +1 -0
- package/dist/web/provider.js +2042 -0
- package/dist/web/provider.js.map +1 -0
- package/dist/web/rooms.d.ts +20 -0
- package/dist/web/rooms.d.ts.map +1 -0
- package/dist/web/rooms.js +51 -0
- package/dist/web/rooms.js.map +1 -0
- package/dist/web/rotation.d.ts +73 -0
- package/dist/web/rotation.d.ts.map +1 -0
- package/dist/web/rotation.js +130 -0
- package/dist/web/rotation.js.map +1 -0
- package/dist/web/secstate.d.ts +213 -0
- package/dist/web/secstate.d.ts.map +1 -0
- package/dist/web/secstate.js +789 -0
- package/dist/web/secstate.js.map +1 -0
- package/dist/web/store.d.ts +9 -0
- package/dist/web/store.d.ts.map +1 -0
- package/dist/web/store.js +32 -0
- package/dist/web/store.js.map +1 -0
- package/dist/web/transports/loopback.d.ts +11 -0
- package/dist/web/transports/loopback.d.ts.map +1 -0
- package/dist/web/transports/loopback.js +97 -0
- package/dist/web/transports/loopback.js.map +1 -0
- package/dist/web/transports/qr-sdp.d.ts +27 -0
- package/dist/web/transports/qr-sdp.d.ts.map +1 -0
- package/dist/web/transports/qr-sdp.js +131 -0
- package/dist/web/transports/qr-sdp.js.map +1 -0
- package/dist/web/transports/ws.d.ts +12 -0
- package/dist/web/transports/ws.d.ts.map +1 -0
- package/dist/web/transports/ws.js +139 -0
- package/dist/web/transports/ws.js.map +1 -0
- package/dist/web/trust/canonical.d.ts +8 -0
- package/dist/web/trust/canonical.d.ts.map +1 -0
- package/dist/web/trust/canonical.js +27 -0
- package/dist/web/trust/canonical.js.map +1 -0
- package/dist/web/trust/docs.d.ts +51 -0
- package/dist/web/trust/docs.d.ts.map +1 -0
- package/dist/web/trust/docs.js +170 -0
- package/dist/web/trust/docs.js.map +1 -0
- package/dist/web/trust/index.d.ts +10 -0
- package/dist/web/trust/index.d.ts.map +1 -0
- package/dist/web/trust/index.js +7 -0
- package/dist/web/trust/index.js.map +1 -0
- package/dist/web/trust/keys.d.ts +37 -0
- package/dist/web/trust/keys.d.ts.map +1 -0
- package/dist/web/trust/keys.js +75 -0
- package/dist/web/trust/keys.js.map +1 -0
- package/dist/web/trust/store.d.ts +150 -0
- package/dist/web/trust/store.d.ts.map +1 -0
- package/dist/web/trust/store.js +587 -0
- package/dist/web/trust/store.js.map +1 -0
- package/dist/web/trust/types.d.ts +134 -0
- package/dist/web/trust/types.d.ts.map +1 -0
- package/dist/web/trust/types.js +4 -0
- package/dist/web/trust/types.js.map +1 -0
- package/dist/web/types.d.ts +115 -0
- package/dist/web/types.d.ts.map +1 -0
- package/dist/web/types.js +2 -0
- package/dist/web/types.js.map +1 -0
- package/dist/web/util.d.ts +12 -0
- package/dist/web/util.d.ts.map +1 -0
- package/dist/web/util.js +54 -0
- package/dist/web/util.js.map +1 -0
- package/dist/web/webrtc.d.ts +35 -0
- package/dist/web/webrtc.d.ts.map +1 -0
- package/dist/web/webrtc.js +304 -0
- package/dist/web/webrtc.js.map +1 -0
- package/package.json +138 -4
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { hexABytes } from "../protocol/utils.js";
|
|
2
|
+
import { POLITICA_GOBERNANZA } from "../types/index.js";
|
|
3
|
+
// ─── CONSTANTS ─────────────────────────────────────────────────────────────
|
|
4
|
+
const POLITICA_POR_DEFECTO = {
|
|
5
|
+
politica: POLITICA_GOBERNANZA.DEMOCRATICA,
|
|
6
|
+
umbral: 0.51,
|
|
7
|
+
ventanaMs: 30_000,
|
|
8
|
+
pesoNodo: {},
|
|
9
|
+
reglas: [],
|
|
10
|
+
};
|
|
11
|
+
export const ESTADO_PROPUESTA = {
|
|
12
|
+
ABIERTA: "abierta",
|
|
13
|
+
APROBADA: "aprobada",
|
|
14
|
+
RECHAZADA: "rechazada",
|
|
15
|
+
EXPIRADA: "expirada",
|
|
16
|
+
};
|
|
17
|
+
export class GovernanceManager {
|
|
18
|
+
eventTarget;
|
|
19
|
+
politica;
|
|
20
|
+
propuestas;
|
|
21
|
+
timers;
|
|
22
|
+
verificador;
|
|
23
|
+
requireSignedVotes;
|
|
24
|
+
constructor(politica, verificador, options) {
|
|
25
|
+
this.eventTarget = new EventTarget();
|
|
26
|
+
this.politica = { ...POLITICA_POR_DEFECTO, ...politica };
|
|
27
|
+
this.propuestas = new Map();
|
|
28
|
+
this.timers = new Map();
|
|
29
|
+
this.verificador = verificador;
|
|
30
|
+
this.requireSignedVotes = options?.requireSignedVotes ?? false;
|
|
31
|
+
}
|
|
32
|
+
// ─── PROPUESTAS ───────────────────────────────────────────────────────
|
|
33
|
+
crearPropuesta(id, tipo, proponente, datos, expiracionMs) {
|
|
34
|
+
const expiracion = expiracionMs ?? this.politica.ventanaMs;
|
|
35
|
+
const propuesta = {
|
|
36
|
+
id,
|
|
37
|
+
tipo,
|
|
38
|
+
proponente,
|
|
39
|
+
datos,
|
|
40
|
+
timestamp: Date.now(),
|
|
41
|
+
expiracion: Date.now() + expiracion,
|
|
42
|
+
votos: [],
|
|
43
|
+
estado: ESTADO_PROPUESTA.ABIERTA,
|
|
44
|
+
};
|
|
45
|
+
this.propuestas.set(id, propuesta);
|
|
46
|
+
const timer = setTimeout(() => {
|
|
47
|
+
this.cerrarPropuesta(id);
|
|
48
|
+
}, expiracion);
|
|
49
|
+
this.timers.set(id, timer);
|
|
50
|
+
this.emit("propuestaCreada", { propuesta });
|
|
51
|
+
return propuesta;
|
|
52
|
+
}
|
|
53
|
+
votar(id, voto) {
|
|
54
|
+
const propuesta = this.propuestas.get(id);
|
|
55
|
+
if (propuesta === undefined)
|
|
56
|
+
return false;
|
|
57
|
+
if (propuesta.estado !== ESTADO_PROPUESTA.ABIERTA)
|
|
58
|
+
return false;
|
|
59
|
+
if (Date.now() > propuesta.expiracion)
|
|
60
|
+
return false;
|
|
61
|
+
// Requerir firma estricta si configurado
|
|
62
|
+
if (this.requireSignedVotes && !voto.firma) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
// Verificación criptográfica si hay verificador y firma
|
|
66
|
+
if (this.verificador && voto.firma) {
|
|
67
|
+
const clavePublica = this.verificador.obtenerClavePublica(voto.nodoId);
|
|
68
|
+
if (!clavePublica)
|
|
69
|
+
return false;
|
|
70
|
+
const mensajeBytes = new TextEncoder().encode(JSON.stringify({
|
|
71
|
+
propuestaId: id,
|
|
72
|
+
nodoId: voto.nodoId,
|
|
73
|
+
voto: voto.voto,
|
|
74
|
+
timestamp: voto.timestamp,
|
|
75
|
+
}));
|
|
76
|
+
const firmaBytes = typeof voto.firma === "string"
|
|
77
|
+
? hexABytes(voto.firma)
|
|
78
|
+
: voto.firma instanceof Uint8Array
|
|
79
|
+
? voto.firma
|
|
80
|
+
: new Uint8Array(voto.firma);
|
|
81
|
+
const valido = this.verificador.verificarFirma(mensajeBytes, firmaBytes, clavePublica);
|
|
82
|
+
if (!valido)
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
// Evitar voto duplicado del mismo nodo
|
|
86
|
+
const yaVoto = propuesta.votos.some((v) => v.nodoId === voto.nodoId);
|
|
87
|
+
if (yaVoto)
|
|
88
|
+
return false;
|
|
89
|
+
const nuevosVotos = [...propuesta.votos, voto];
|
|
90
|
+
propuesta.votos = nuevosVotos;
|
|
91
|
+
this.propuestas.set(id, propuesta);
|
|
92
|
+
this.emit("votoRecibido", { propuesta: id, voto });
|
|
93
|
+
// Verificar si ya se alcanzó el umbral
|
|
94
|
+
if (this.verificarUmbral(propuesta)) {
|
|
95
|
+
this.cerrarPropuesta(id, ESTADO_PROPUESTA.APROBADA);
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
cerrarPropuesta(id, forzar) {
|
|
100
|
+
const propuesta = this.propuestas.get(id);
|
|
101
|
+
if (propuesta === undefined)
|
|
102
|
+
return;
|
|
103
|
+
const timer = this.timers.get(id);
|
|
104
|
+
if (timer !== undefined) {
|
|
105
|
+
clearTimeout(timer);
|
|
106
|
+
this.timers.delete(id);
|
|
107
|
+
}
|
|
108
|
+
let resultado;
|
|
109
|
+
if (forzar !== undefined) {
|
|
110
|
+
resultado = forzar;
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
resultado = this.verificarUmbral(propuesta)
|
|
114
|
+
? ESTADO_PROPUESTA.APROBADA
|
|
115
|
+
: ESTADO_PROPUESTA.RECHAZADA;
|
|
116
|
+
}
|
|
117
|
+
propuesta.estado = resultado;
|
|
118
|
+
this.propuestas.set(id, propuesta);
|
|
119
|
+
this.emit("propuestaResultado", { propuesta: id, resultado });
|
|
120
|
+
}
|
|
121
|
+
verificarUmbral(propuesta) {
|
|
122
|
+
const pesoTotal = this.calcularPesoTotal(propuesta);
|
|
123
|
+
return pesoTotal >= this.politica.umbral;
|
|
124
|
+
}
|
|
125
|
+
calcularPesoTotal(propuesta) {
|
|
126
|
+
return propuesta.votos.reduce((total, voto) => {
|
|
127
|
+
const peso = this.politica.pesoNodo[voto.nodoId] ?? 1;
|
|
128
|
+
return voto.voto === "a_favor" ? total + peso : total;
|
|
129
|
+
}, 0);
|
|
130
|
+
}
|
|
131
|
+
// ─── POLITICA ─────────────────────────────────────────────────────────
|
|
132
|
+
actualizarPolitica(politica) {
|
|
133
|
+
this.politica = { ...this.politica, ...politica };
|
|
134
|
+
this.emit("politicaCambiada", { politica: this.politica });
|
|
135
|
+
}
|
|
136
|
+
obtenerPolitica() {
|
|
137
|
+
return { ...this.politica };
|
|
138
|
+
}
|
|
139
|
+
obtenerPropuestas(estado) {
|
|
140
|
+
const todas = Array.from(this.propuestas.values());
|
|
141
|
+
if (estado === undefined)
|
|
142
|
+
return todas;
|
|
143
|
+
return todas.filter((p) => p.estado === estado);
|
|
144
|
+
}
|
|
145
|
+
obtenerPropuesta(id) {
|
|
146
|
+
return this.propuestas.get(id) ?? null;
|
|
147
|
+
}
|
|
148
|
+
importarPropuestas(propuestas) {
|
|
149
|
+
for (const prop of propuestas) {
|
|
150
|
+
this.propuestas.set(prop.id, { ...prop });
|
|
151
|
+
if (prop.estado === ESTADO_PROPUESTA.ABIERTA) {
|
|
152
|
+
const expiracionRestante = prop.expiracion - Date.now();
|
|
153
|
+
const timerExistente = this.timers.get(prop.id);
|
|
154
|
+
if (timerExistente) {
|
|
155
|
+
clearTimeout(timerExistente);
|
|
156
|
+
}
|
|
157
|
+
if (expiracionRestante > 0) {
|
|
158
|
+
const timer = setTimeout(() => {
|
|
159
|
+
this.cerrarPropuesta(prop.id);
|
|
160
|
+
}, expiracionRestante);
|
|
161
|
+
this.timers.set(prop.id, timer);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
this.cerrarPropuesta(prop.id);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
const timerExistente = this.timers.get(prop.id);
|
|
169
|
+
if (timerExistente) {
|
|
170
|
+
clearTimeout(timerExistente);
|
|
171
|
+
this.timers.delete(prop.id);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
// ─── EVENTOS ──────────────────────────────────────────────────────────
|
|
177
|
+
on(tipo, handler) {
|
|
178
|
+
this.eventTarget.addEventListener(tipo, handler);
|
|
179
|
+
}
|
|
180
|
+
off(tipo, handler) {
|
|
181
|
+
this.eventTarget.removeEventListener(tipo, handler);
|
|
182
|
+
}
|
|
183
|
+
emit(tipo, detalle) {
|
|
184
|
+
const evento = new CustomEvent(tipo, { detail: detalle });
|
|
185
|
+
this.eventTarget.dispatchEvent(evento);
|
|
186
|
+
}
|
|
187
|
+
// ─── LIMPIEZA ─────────────────────────────────────────────────────────
|
|
188
|
+
limpiarPropuestasExpiradas() {
|
|
189
|
+
const ahora = Date.now();
|
|
190
|
+
for (const [id, propuesta] of this.propuestas) {
|
|
191
|
+
if (propuesta.expiracion < ahora) {
|
|
192
|
+
this.cerrarPropuesta(id);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
destruir() {
|
|
197
|
+
for (const timer of this.timers.values()) {
|
|
198
|
+
clearTimeout(timer);
|
|
199
|
+
}
|
|
200
|
+
this.timers.clear();
|
|
201
|
+
this.propuestas.clear();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// ─── FACTORY ───────────────────────────────────────────────────────────────
|
|
205
|
+
export function createGovernanceManager(politica, verificador, options) {
|
|
206
|
+
return new GovernanceManager(politica, verificador, options);
|
|
207
|
+
}
|
|
208
|
+
export * from "./authority.js";
|
|
209
|
+
export * from "./merge.js";
|
|
210
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/governance/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ParPublico, PostQuantumIdentity } from "../identity/index.js";
|
|
2
|
+
import type { NodoId, PayloadVotacion } from "../types/index.js";
|
|
3
|
+
import { type Propuesta } from "./index.js";
|
|
4
|
+
export type Proposal = Propuesta;
|
|
5
|
+
export type Vote = PayloadVotacion;
|
|
6
|
+
export interface GovernanceEvent {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly tipo: string;
|
|
9
|
+
readonly timestamp: number;
|
|
10
|
+
readonly payload: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface GovernanceSnapshot {
|
|
13
|
+
readonly propuestas: Proposal[];
|
|
14
|
+
readonly timestamp: number;
|
|
15
|
+
readonly firma?: Uint8Array;
|
|
16
|
+
readonly publicNodeId?: NodoId;
|
|
17
|
+
}
|
|
18
|
+
export interface GovernanceMerge {
|
|
19
|
+
resolveProposalConflicts(local: Proposal[], remote: Proposal[]): Promise<Proposal[]>;
|
|
20
|
+
resolveVoteConflicts(local: Vote[], remote: Vote[]): Promise<Vote[]>;
|
|
21
|
+
detectGovernanceFork(localEvents: GovernanceEvent[], remoteEvents: GovernanceEvent[]): Promise<boolean>;
|
|
22
|
+
}
|
|
23
|
+
export declare function stableStringify(val: unknown): string;
|
|
24
|
+
export declare function signGovernanceSnapshot(snapshot: Omit<GovernanceSnapshot, "firma" | "publicNodeId">, identity: PostQuantumIdentity): Promise<GovernanceSnapshot>;
|
|
25
|
+
export declare function verifyGovernanceSnapshot(snapshot: GovernanceSnapshot, parPublico: ParPublico, identity: PostQuantumIdentity): Promise<boolean>;
|
|
26
|
+
export declare class GovernanceMerger implements GovernanceMerge {
|
|
27
|
+
resolveProposalConflicts(local: Proposal[], remote: Proposal[]): Promise<Proposal[]>;
|
|
28
|
+
resolveVoteConflicts(local: Vote[], remote: Vote[]): Promise<Vote[]>;
|
|
29
|
+
detectGovernanceFork(localEvents: GovernanceEvent[], remoteEvents: GovernanceEvent[]): Promise<boolean>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/governance/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI9D,MAAM,MAAM,QAAQ,GAAG,SAAS,CAAC;AACjC,MAAM,MAAM,IAAI,GAAG,eAAe,CAAC;AAInC,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAID,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B;AAID,MAAM,WAAW,eAAe;IAC/B,wBAAwB,CACvB,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,QAAQ,EAAE,GAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvB,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,oBAAoB,CACnB,WAAW,EAAE,eAAe,EAAE,EAC9B,YAAY,EAAE,eAAe,EAAE,GAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;CACpB;AAID,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAapD;AAID,wBAAsB,sBAAsB,CAC3C,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,cAAc,CAAC,EAC5D,QAAQ,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAS7B;AAED,wBAAsB,wBAAwB,CAC7C,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,mBAAmB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAID,qBAAa,gBAAiB,YAAW,eAAe;IACjD,wBAAwB,CAC7B,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,QAAQ,EAAE,GAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAoDrB;IAEK,oBAAoB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAezE;IAEK,oBAAoB,CACzB,WAAW,EAAE,eAAe,EAAE,EAC9B,YAAY,EAAE,eAAe,EAAE,GAC7B,OAAO,CAAC,OAAO,CAAC,CAyElB;CACD"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { ESTADO_PROPUESTA } from "./index.js";
|
|
2
|
+
// ─── STABLE STRINGIFY ──────────────────────────────────────────────────────
|
|
3
|
+
export function stableStringify(val) {
|
|
4
|
+
if (typeof val !== "object" || val === null) {
|
|
5
|
+
return JSON.stringify(val);
|
|
6
|
+
}
|
|
7
|
+
if (Array.isArray(val)) {
|
|
8
|
+
return `[${val.map(stableStringify).join(",")}]`;
|
|
9
|
+
}
|
|
10
|
+
const keys = Object.keys(val).sort();
|
|
11
|
+
const parts = keys.map((k) => `${JSON.stringify(k)}:${stableStringify(val[k])}`);
|
|
12
|
+
return `{${parts.join(",")}}`;
|
|
13
|
+
}
|
|
14
|
+
// ─── SIGN & VERIFY SNAPSHOT ───────────────────────────────────────────────
|
|
15
|
+
export async function signGovernanceSnapshot(snapshot, identity) {
|
|
16
|
+
const encoder = new TextEncoder();
|
|
17
|
+
const serialized = encoder.encode(stableStringify(snapshot));
|
|
18
|
+
const firma = await identity.firmar(serialized);
|
|
19
|
+
return {
|
|
20
|
+
...snapshot,
|
|
21
|
+
firma,
|
|
22
|
+
publicNodeId: identity.nodoId,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export async function verifyGovernanceSnapshot(snapshot, parPublico, identity) {
|
|
26
|
+
if (!snapshot.firma)
|
|
27
|
+
return false;
|
|
28
|
+
const { firma, publicNodeId, ...rest } = snapshot;
|
|
29
|
+
const encoder = new TextEncoder();
|
|
30
|
+
const serialized = encoder.encode(stableStringify(rest));
|
|
31
|
+
return identity.verificar(serialized, firma, parPublico);
|
|
32
|
+
}
|
|
33
|
+
// ─── GOVERNANCE MERGER IMPLEMENTATION ─────────────────────────────────────
|
|
34
|
+
export class GovernanceMerger {
|
|
35
|
+
async resolveProposalConflicts(local, remote) {
|
|
36
|
+
const merged = [];
|
|
37
|
+
const remoteMap = new Map();
|
|
38
|
+
for (const p of remote) {
|
|
39
|
+
remoteMap.set(p.id, p);
|
|
40
|
+
}
|
|
41
|
+
for (const localProp of local) {
|
|
42
|
+
const remoteProp = remoteMap.get(localProp.id);
|
|
43
|
+
if (!remoteProp) {
|
|
44
|
+
// Propuestas con id único: ambas sobreviven
|
|
45
|
+
merged.push({ ...localProp });
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Propuestas con mismo id
|
|
49
|
+
if (localProp.tipo === "expulsion" || remoteProp.tipo === "expulsion") {
|
|
50
|
+
// Expulsiones: la expulsión más reciente gana (por timestamp)
|
|
51
|
+
if (localProp.timestamp >= remoteProp.timestamp) {
|
|
52
|
+
merged.push({ ...localProp });
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
merged.push({ ...remoteProp });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
else if (localProp.estado !== remoteProp.estado) {
|
|
59
|
+
// Propuestas con mismo id pero diferente resultado: se re-votan con todos los peers
|
|
60
|
+
merged.push({
|
|
61
|
+
...localProp,
|
|
62
|
+
estado: ESTADO_PROPUESTA.ABIERTA,
|
|
63
|
+
votos: [], // Reset votos to re-vote
|
|
64
|
+
expiracion: Date.now() + 30_000, // Extend expiration
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Same result: no conflict, merge votes cleanly
|
|
69
|
+
const allVotes = [...localProp.votos];
|
|
70
|
+
for (const rv of remoteProp.votos) {
|
|
71
|
+
if (!allVotes.some((lv) => lv.nodoId === rv.nodoId)) {
|
|
72
|
+
allVotes.push(rv);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
merged.push({
|
|
76
|
+
...localProp,
|
|
77
|
+
votos: allVotes,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
remoteMap.delete(localProp.id);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Add remaining remote proposals (id único)
|
|
84
|
+
for (const remoteProp of remoteMap.values()) {
|
|
85
|
+
merged.push({ ...remoteProp });
|
|
86
|
+
}
|
|
87
|
+
return merged;
|
|
88
|
+
}
|
|
89
|
+
async resolveVoteConflicts(local, remote) {
|
|
90
|
+
const merged = [...local];
|
|
91
|
+
for (const rVote of remote) {
|
|
92
|
+
const exists = merged.find((lVote) => lVote.propuesta === rVote.propuesta && lVote.nodoId === rVote.nodoId);
|
|
93
|
+
if (!exists) {
|
|
94
|
+
merged.push(rVote);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// If they exist but differ, we can deterministically keep the local one.
|
|
98
|
+
// (No changes needed since it's already in merged)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return merged;
|
|
102
|
+
}
|
|
103
|
+
async detectGovernanceFork(localEvents, remoteEvents) {
|
|
104
|
+
const localProps = new Map();
|
|
105
|
+
const remoteProps = new Map();
|
|
106
|
+
const localExpulsions = new Map();
|
|
107
|
+
const remoteExpulsions = new Map();
|
|
108
|
+
// Helper to extract proposal
|
|
109
|
+
const extractProp = (ev) => {
|
|
110
|
+
const payload = ev.payload;
|
|
111
|
+
if (payload && typeof payload === "object") {
|
|
112
|
+
if (payload.propuesta && typeof payload.propuesta === "object") {
|
|
113
|
+
return payload.propuesta;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
};
|
|
118
|
+
for (const ev of localEvents) {
|
|
119
|
+
const prop = extractProp(ev);
|
|
120
|
+
if (prop?.id) {
|
|
121
|
+
localProps.set(prop.id, prop);
|
|
122
|
+
}
|
|
123
|
+
if (ev.tipo === "expulsion") {
|
|
124
|
+
const pp = ev.payload;
|
|
125
|
+
const target = (pp?.target ?? pp?.nodoId ?? ev.id);
|
|
126
|
+
localExpulsions.set(target, ev);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
for (const ev of remoteEvents) {
|
|
130
|
+
const prop = extractProp(ev);
|
|
131
|
+
if (prop?.id) {
|
|
132
|
+
remoteProps.set(prop.id, prop);
|
|
133
|
+
}
|
|
134
|
+
if (ev.tipo === "expulsion") {
|
|
135
|
+
const pp = ev.payload;
|
|
136
|
+
const target = (pp?.target ?? pp?.nodoId ?? ev.id);
|
|
137
|
+
remoteExpulsions.set(target, ev);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// Check proposal conflicts
|
|
141
|
+
for (const [id, localProp] of localProps) {
|
|
142
|
+
const remoteProp = remoteProps.get(id);
|
|
143
|
+
if (remoteProp) {
|
|
144
|
+
if (localProp.estado !== remoteProp.estado) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
// Check if vote sets are different
|
|
148
|
+
if (stableStringify(localProp.votos) !== stableStringify(remoteProp.votos)) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Check expulsion conflicts
|
|
154
|
+
for (const [target, localExp] of localExpulsions) {
|
|
155
|
+
const remoteExp = remoteExpulsions.get(target);
|
|
156
|
+
if (remoteExp) {
|
|
157
|
+
if (localExp.timestamp !== remoteExp.timestamp ||
|
|
158
|
+
localExp.payload?.resultado !==
|
|
159
|
+
remoteExp.payload?.resultado) {
|
|
160
|
+
return true;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/governance/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import type { NodoId, ParPublico } from "../types/index.js";
|
|
2
|
+
export type { ParPublico };
|
|
3
|
+
/** Prefijo de un identificador de nodo derivado criptograficamente. */
|
|
4
|
+
export declare const PREFIJO_NODO_DERIVADO = "mlkem";
|
|
5
|
+
export declare const TIPO_IDENTIDAD: {
|
|
6
|
+
readonly MAESTRA: "maestra";
|
|
7
|
+
readonly EPHEMERA: "ephemera";
|
|
8
|
+
readonly SERVICIO: "servicio";
|
|
9
|
+
};
|
|
10
|
+
export type TipoIdentidad = (typeof TIPO_IDENTIDAD)[keyof typeof TIPO_IDENTIDAD];
|
|
11
|
+
/**
|
|
12
|
+
* QUE PRUEBA ML-DSA-65 Y QUE PROTEGE ML-KEM-768: son garantias distintas y
|
|
13
|
+
* ninguna sustituye a la otra.
|
|
14
|
+
*
|
|
15
|
+
* - ML-DSA-65 (firma, `firmar` / `verificar`): **autenticidad + integridad**.
|
|
16
|
+
* Prueba que el tenedor de la clave privada escribio esos bytes exactos y que
|
|
17
|
+
* no fueron alterados en transito. No revela nada: cualquiera puede verificar.
|
|
18
|
+
*
|
|
19
|
+
* - ML-KEM-768 (encapsulacion, `encapsular` / `decapsular`): **confidencialidad
|
|
20
|
+
* del secreto compartido**. Solo el dueno de la clave privada correspondiente
|
|
21
|
+
* puede recuperarlo; el ciphertext que viaja es inservible para cualquier otro.
|
|
22
|
+
* No dice NADA sobre quien envio el mensaje.
|
|
23
|
+
*
|
|
24
|
+
* Un envolvente correcto necesita ambos: ML-KEM para que solo el destinatario
|
|
25
|
+
* lea el payload, ML-DSA para que el destinatario pruebe quien lo envio.
|
|
26
|
+
*/
|
|
27
|
+
export declare const ALGORITMOS: {
|
|
28
|
+
readonly FIRMA: "ML-DSA-65";
|
|
29
|
+
readonly KEM: "ML-KEM-768";
|
|
30
|
+
};
|
|
31
|
+
export interface PostQuantumKeypair {
|
|
32
|
+
readonly parPrivado: Uint8Array;
|
|
33
|
+
readonly parPublico: ParPublico;
|
|
34
|
+
/**
|
|
35
|
+
* Clave de desencapsulacion ML-KEM-768. Ausente solo para keypairs restaurados
|
|
36
|
+
* de la serializacion legacy (pre-KEM); en ese caso se genera una nueva.
|
|
37
|
+
*/
|
|
38
|
+
readonly kemPrivado?: Uint8Array;
|
|
39
|
+
/** Clave de encapsulacion ML-KEM-768. Esto es lo que viaja por el cable. */
|
|
40
|
+
readonly kemPublico?: Uint8Array;
|
|
41
|
+
readonly algoritmo: string;
|
|
42
|
+
readonly tipo: TipoIdentidad;
|
|
43
|
+
readonly fechaCreacion: number;
|
|
44
|
+
}
|
|
45
|
+
export interface IdentityProvider {
|
|
46
|
+
sign(data: string): Promise<string>;
|
|
47
|
+
verify(data: string, signature: string, publicKey: Uint8Array): Promise<boolean>;
|
|
48
|
+
}
|
|
49
|
+
/** Resultado de `encapsular`: el ciphertext a enviar mas el secreto local. */
|
|
50
|
+
export interface SobreKem {
|
|
51
|
+
readonly cipherText: Uint8Array;
|
|
52
|
+
readonly claveCompartida: Uint8Array;
|
|
53
|
+
}
|
|
54
|
+
export interface PostQuantumIdentity extends IdentityProvider {
|
|
55
|
+
readonly nodoId: NodoId;
|
|
56
|
+
readonly keypair: PostQuantumKeypair;
|
|
57
|
+
firmar(datos: Uint8Array): Promise<Uint8Array>;
|
|
58
|
+
verificar(datos: Uint8Array, firma: Uint8Array, parPublico: ParPublico): Promise<boolean>;
|
|
59
|
+
exportarPublico(): ParPublico;
|
|
60
|
+
obtenerAlgoritmo(): string;
|
|
61
|
+
/** Clave publica ML-KEM-768 de este nodo. Segura para poner en el cable. */
|
|
62
|
+
exportarKemPublico(): ParPublico;
|
|
63
|
+
/**
|
|
64
|
+
* Clave publica ML-KEM del destinatario, recuperada de nuestra clave de
|
|
65
|
+
* desencapsulacion. Esto contrasta el par almacenado, de modo que una
|
|
66
|
+
* serializacion manipulada o incoherente se detecta antes de que alguien
|
|
67
|
+
* intente cifrar hacia nosotros.
|
|
68
|
+
*/
|
|
69
|
+
obtenerKemPublico(): ParPublico;
|
|
70
|
+
/** Sella un secreto compartido para el dueno de `kemPublicoReceptor`. */
|
|
71
|
+
encapsular(kemPublicoReceptor: ParPublico): SobreKem;
|
|
72
|
+
/** Recupera el secreto compartido de un ciphertext dirigido a nosotros. */
|
|
73
|
+
decapsular(cipherText: Uint8Array): Uint8Array;
|
|
74
|
+
/** Deriva la clave simetrica de 32 bytes de un ciphertext dirigido a nosotros. */
|
|
75
|
+
derivarClaveSimetricaDesde(cipherText: Uint8Array): Promise<Uint8Array>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Genera un keypair de nodo: un par de firma ML-DSA-65 **y** un par de
|
|
79
|
+
* encapsulacion ML-KEM-768. Ambos hacen falta para una identidad de malla
|
|
80
|
+
* utilizable: el par de firma prueba quien eres, el par KEM permite que otros
|
|
81
|
+
* te hablen en privado.
|
|
82
|
+
*/
|
|
83
|
+
export declare function generateKeypair(tipo?: TipoIdentidad): PostQuantumKeypair;
|
|
84
|
+
/**
|
|
85
|
+
* Deriva un identificador de nodo de forma determinista desde una clave publica
|
|
86
|
+
* ML-KEM-768.
|
|
87
|
+
*
|
|
88
|
+
* Esta es la correccion anti-suplantacion: un nodo no puede elegir, heredar ni
|
|
89
|
+
* adivinar el id de otro, porque el id *es* el hash de la clave que ese nodo debe
|
|
90
|
+
* presentar para probar posesion. Dos claves distintas nunca producen el mismo id
|
|
91
|
+
* con probabilidad significativa, y ninguna clave produce el id de otro.
|
|
92
|
+
*
|
|
93
|
+
* Formato: `mlkem<32 hex>` (primeros 16 bytes de SHA-256, con separacion de
|
|
94
|
+
* dominio).
|
|
95
|
+
*/
|
|
96
|
+
export declare function derivarNodoId(kemPublico: ParPublico): Promise<NodoId>;
|
|
97
|
+
/** True cuando `nodoId` tiene la forma de un id derivado. Filtro barato. */
|
|
98
|
+
export declare function esNodoIdDerivado(nodoId: string): boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Verifica que `nodoId` sea realmente el id derivado de la clave ML-KEM de este
|
|
101
|
+
* nodo.
|
|
102
|
+
*
|
|
103
|
+
* Nodos legacy (ids asignados antes de esta correccion, p. ej. `'doctor-01'`)
|
|
104
|
+
* devuelven `false` aqui y los maneja la ruta de migracion de abajo, no un
|
|
105
|
+
* rechazo.
|
|
106
|
+
*/
|
|
107
|
+
export declare function verificarNodoIdVinculado(nodoId: NodoId, kemPublico: ParPublico): Promise<boolean>;
|
|
108
|
+
export type EstadoVinculoNodoId =
|
|
109
|
+
/** el id es el hash de la clave ML-KEM: ligado criptograficamente, nada que hacer. */
|
|
110
|
+
{
|
|
111
|
+
readonly estado: "vinculado";
|
|
112
|
+
}
|
|
113
|
+
/** id libre legacy de antes de existir los ids derivados; se acepta y se fija. */
|
|
114
|
+
| {
|
|
115
|
+
readonly estado: "heredado";
|
|
116
|
+
readonly idEsperado: NodoId;
|
|
117
|
+
}
|
|
118
|
+
/** id legacy que no es el derivado, y el llamador no dio opt-in. */
|
|
119
|
+
| {
|
|
120
|
+
readonly estado: "conflicto";
|
|
121
|
+
idEsperado: NodoId;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Decide que hacer con un nodo id configurado antes de que existieran los ids
|
|
125
|
+
* derivados. **Nunca se sobrescribe nada en silencio.**
|
|
126
|
+
*
|
|
127
|
+
* - Id derivado que coincide con la clave → `vinculado`.
|
|
128
|
+
* - Id no derivado (libre) → `heredado`: el nodo sigue funcionando con su id
|
|
129
|
+
* configurado, y fijamos ese id en el almacen de confianza para que una
|
|
130
|
+
* rotacion posterior de identidad no pueda moverlo. `idEsperado` es el id
|
|
131
|
+
* derivado a adoptar cuando el nodo rote su clave.
|
|
132
|
+
* - Id con forma derivada que NO coincide con la clave → `conflicto`: eso es un
|
|
133
|
+
* intento de suplantacion (reclamar el id derivado de otro nodo), y el
|
|
134
|
+
* llamador debe negarse.
|
|
135
|
+
*
|
|
136
|
+
* @param permitirHeredado opt-in para nodos legacy. Los llamadores legacy que
|
|
137
|
+
* pasan un id configurado (la forma previa `createPostQuantumIdentity(nodoId)`)
|
|
138
|
+
* deben ponerlo en `true`; el default es `false`, es decir, fallar cerrado.
|
|
139
|
+
*/
|
|
140
|
+
export declare function evaluarVinculoNodoId(nodoId: NodoId, kemPublico: ParPublico, permitirHeredado?: boolean): Promise<EstadoVinculoNodoId>;
|
|
141
|
+
/**
|
|
142
|
+
* Convierte un secreto compartido ML-KEM-768 en una clave simetrica de 32 bytes
|
|
143
|
+
* apta para AEAD (AES-GCM / ChaCha20-Poly1305).
|
|
144
|
+
*
|
|
145
|
+
* El secreto compartido crudo de ML-KEM son 32 bytes de material de clave;
|
|
146
|
+
* hashearlo con un separador de dominio evita que se use directamente como clave
|
|
147
|
+
* de AEAD sin este paso, y lo mantiene distinto de cualquier otro valor derivado.
|
|
148
|
+
*
|
|
149
|
+
* Exportado para la capa de cifrado: este es el unico lugar donde el secreto
|
|
150
|
+
* ML-KEM de un nodo se vuelve material de cifrado.
|
|
151
|
+
*/
|
|
152
|
+
export declare function derivarClaveSimetrica(sharedSecret: Uint8Array): Promise<Uint8Array>;
|
|
153
|
+
/**
|
|
154
|
+
* Crea una identidad para un nodo.
|
|
155
|
+
*
|
|
156
|
+
* El argumento `nodoId` se conserva por compatibilidad de cable y almacen. Para
|
|
157
|
+
* nodos NUEVOS prefiere `crearIdentidadVinculada(keypair)`, que deriva el id de
|
|
158
|
+
* la clave ML-KEM para que no pueda suplantarse. Un `nodoId` pasado aqui es
|
|
159
|
+
* siempre un id legacy; llama a `evaluarVinculoNodoId` para comprobarlo y fija el
|
|
160
|
+
* resultado en el almacen de confianza.
|
|
161
|
+
*/
|
|
162
|
+
export declare function createPostQuantumIdentity(nodoId: NodoId, keypair?: PostQuantumKeypair): PostQuantumIdentity;
|
|
163
|
+
/**
|
|
164
|
+
* Crea una identidad cuyo `nodoId` ES el hash de su propia clave publica
|
|
165
|
+
* ML-KEM-768. Este es el constructor recomendado: el nodo puede probar que posee
|
|
166
|
+
* el id y nadie mas puede acuñarlo.
|
|
167
|
+
*
|
|
168
|
+
* @throws si el `nodoId` del keypair (si lo hay) conflicto con el derivado — un
|
|
169
|
+
* id derivado reclamado que no coincide con la clave es un intento de
|
|
170
|
+
* suplantacion y no debe emparentarse.
|
|
171
|
+
*/
|
|
172
|
+
export declare function crearIdentidadVinculada(keypair?: PostQuantumKeypair): Promise<PostQuantumIdentity>;
|
|
173
|
+
/**
|
|
174
|
+
* Restaura una identidad desde un **keypair serializado** producido por
|
|
175
|
+
* `serializeKeypair`. Pasar solo una clave privada cruda e incoherente es
|
|
176
|
+
* inseguro y ya no se soporta.
|
|
177
|
+
*
|
|
178
|
+
* Para una identidad aleatoria nueva usa `createPostQuantumIdentity(nodoId)`, o
|
|
179
|
+
* `crearIdentidadVinculada()` para obtener un id que no se pueda suplantar.
|
|
180
|
+
*/
|
|
181
|
+
export declare function identityFromSecret(nodoId: NodoId, semilla: Uint8Array, tipo?: TipoIdentidad): PostQuantumIdentity;
|
|
182
|
+
declare function bytesToBase64(bytes: Uint8Array): string;
|
|
183
|
+
declare function base64ToBytes(b64: string): Uint8Array;
|
|
184
|
+
export { base64ToBytes, bytesToBase64 };
|
|
185
|
+
/**
|
|
186
|
+
* Serializa un keypair a un unico string. Layout v2:
|
|
187
|
+
*
|
|
188
|
+
* u32 privLen | u32 pubLen | u32 kemPrivLen | priv | pub | kemPriv
|
|
189
|
+
*
|
|
190
|
+
* La clave publica ML-KEM NO se almacena: se recupera de `kemPriv` via
|
|
191
|
+
* `ml_kem768.getPublicKey`, de modo que las dos nunca pueden discrepar en disco.
|
|
192
|
+
*
|
|
193
|
+
* El layout v1 (solo claves de firma, 8 bytes de cabecera) sigue siendo legible:
|
|
194
|
+
* `deserializeKeypair` lo detecta y genera un par KEM nuevo, igual que
|
|
195
|
+
* `conKem`. Un despliegue existente no pierde su identidad de firma al migrar.
|
|
196
|
+
*/
|
|
197
|
+
export declare function serializeKeypair(keypair: PostQuantumKeypair): string;
|
|
198
|
+
export declare function deserializeKeypair(serializada: string): PostQuantumKeypair;
|
|
199
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"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"}
|