@swal/edge-mesh 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +157 -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 +192 -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 +71 -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 +52 -0
- package/dist/transport/peerjs.d.ts.map +1 -0
- package/dist/transport/peerjs.js +336 -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 +246 -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 +139 -4
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
import type { EdgeMesh } from "../edge-mesh.js";
|
|
2
|
+
import type { MotivoRechazo } from "../maloca/karma.js";
|
|
3
|
+
import type { TransaccionKarma } from "../maloca/types.js";
|
|
4
|
+
import type { NodoId, ParPublico } from "../types/index.js";
|
|
5
|
+
export declare const ESTRATEGIA_FAN_OUT: {
|
|
6
|
+
readonly ALEATORIA: "aleatoria";
|
|
7
|
+
readonly POR_SALUD: "por_salud";
|
|
8
|
+
readonly POR_LATENCIA: "por_latencia";
|
|
9
|
+
};
|
|
10
|
+
export type EstrategiaFanOut = (typeof ESTRATEGIA_FAN_OUT)[keyof typeof ESTRATEGIA_FAN_OUT];
|
|
11
|
+
export interface MeshConfig {
|
|
12
|
+
readonly nodoId: NodoId;
|
|
13
|
+
readonly fanOut: number;
|
|
14
|
+
readonly maxPeers: number;
|
|
15
|
+
readonly heartbeatIntervalMs: number;
|
|
16
|
+
readonly peerTimeoutMs: number;
|
|
17
|
+
readonly gossipTTL: number;
|
|
18
|
+
readonly estrategia: EstrategiaFanOut;
|
|
19
|
+
readonly namespacePorDefecto: string;
|
|
20
|
+
}
|
|
21
|
+
export interface PeerInfo {
|
|
22
|
+
readonly nodoId: NodoId;
|
|
23
|
+
readonly timestamp: number;
|
|
24
|
+
readonly ultimoHeartbeat: number;
|
|
25
|
+
readonly latenciaMs: number;
|
|
26
|
+
readonly fanOutIndex: number;
|
|
27
|
+
readonly estado: "activo" | "lento" | "caido";
|
|
28
|
+
readonly intentosReconexion: number;
|
|
29
|
+
readonly namespace?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface GossipMessage {
|
|
32
|
+
readonly id: string;
|
|
33
|
+
readonly namespace: string;
|
|
34
|
+
readonly ttl: number;
|
|
35
|
+
readonly payload: unknown;
|
|
36
|
+
readonly origen: NodoId;
|
|
37
|
+
readonly timestamp: number;
|
|
38
|
+
readonly ruta: readonly NodoId[];
|
|
39
|
+
}
|
|
40
|
+
export interface MeshEventMap {
|
|
41
|
+
peerConectado: CustomEvent<{
|
|
42
|
+
readonly peerId: NodoId;
|
|
43
|
+
readonly namespace?: string;
|
|
44
|
+
}>;
|
|
45
|
+
peerDesconectado: CustomEvent<{
|
|
46
|
+
readonly peerId: NodoId;
|
|
47
|
+
}>;
|
|
48
|
+
peerDescubierto: CustomEvent<{
|
|
49
|
+
readonly peerId: NodoId;
|
|
50
|
+
readonly via: NodoId;
|
|
51
|
+
}>;
|
|
52
|
+
gossipRecibido: CustomEvent<{
|
|
53
|
+
readonly mensaje: GossipMessage;
|
|
54
|
+
}>;
|
|
55
|
+
/** Un aval remoto sobrevivio a la verificacion de firma y movio un score. */
|
|
56
|
+
karmaRecibido: CustomEvent<{
|
|
57
|
+
readonly tx: TransaccionKarma;
|
|
58
|
+
readonly desde: NodoId;
|
|
59
|
+
}>;
|
|
60
|
+
/** Un aval remoto fue rechazado. `motivo` es el veredicto del propio KarmaManager. */
|
|
61
|
+
karmaRechazado: CustomEvent<{
|
|
62
|
+
readonly txId: string | null;
|
|
63
|
+
readonly motivo: MotivoRechazo | "payload_malformado";
|
|
64
|
+
readonly desde: NodoId;
|
|
65
|
+
}>;
|
|
66
|
+
/**
|
|
67
|
+
* LA VISTA DE ESTE NODO SOBRE LA REPUTACIÓN DE UN MÉDICO ESTABA DESFASADA.
|
|
68
|
+
*
|
|
69
|
+
* Se emite cuando un aval remoto MOVIÓ un score local, lo cual solo es posible
|
|
70
|
+
* si este nodo nunca había visto ese `tx.id`: el score local del sujeto era por
|
|
71
|
+
* tanto distinto del del emisor, y esta transacción es la prueba. Dos nodos
|
|
72
|
+
* honestos mostraban reputaciones distintas del mismo médico y nada lo decía.
|
|
73
|
+
*
|
|
74
|
+
* Solo detección. Nada se reconcilia, nada se reescribe, el OpLog queda intacto
|
|
75
|
+
* — este evento es lo que hace que la divergencia deje de ser invisible.
|
|
76
|
+
*/
|
|
77
|
+
karmaDivergente: CustomEvent<DetalleDivergenciaKarma>;
|
|
78
|
+
meshSaludActualizada: CustomEvent<{
|
|
79
|
+
readonly peersActivos: number;
|
|
80
|
+
readonly peersTotales: number;
|
|
81
|
+
}>;
|
|
82
|
+
namespaceSincronizado: CustomEvent<{
|
|
83
|
+
readonly namespace: string;
|
|
84
|
+
readonly peers: readonly NodoId[];
|
|
85
|
+
}>;
|
|
86
|
+
error: CustomEvent<{
|
|
87
|
+
readonly mensaje: string;
|
|
88
|
+
readonly error?: Error;
|
|
89
|
+
}>;
|
|
90
|
+
rate_limited: CustomEvent<{
|
|
91
|
+
readonly peerId: string;
|
|
92
|
+
readonly resource: string;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Por qué la vista local de la reputación de un médico estaba desfasada.
|
|
97
|
+
*
|
|
98
|
+
* Union de un solo miembro a propósito. `aval_tardio` es lo UNICO que esta capa
|
|
99
|
+
* puede probar: el aval le era nuevo a este nodo y movió el score. Un duplicado
|
|
100
|
+
* redelivered que ya estaba aplicado no mueve nada y NO es divergencia — es el
|
|
101
|
+
* gossip haciendo su trabajo — así que no emite nada. Ampliar esta union queda
|
|
102
|
+
* reservado para la fase de reconciliación.
|
|
103
|
+
*/
|
|
104
|
+
export type MotivoDivergenciaKarma = "aval_tardio";
|
|
105
|
+
/**
|
|
106
|
+
* Todo lo que un operador necesita ver para saber que dos nodos honestos
|
|
107
|
+
* valoraban distinto la reputación de un médico.
|
|
108
|
+
*
|
|
109
|
+
* `scoreLocalAntes` es lo que este nodo mostraba antes de que llegara el aval —
|
|
110
|
+
* el número que un clínico habría leído y en el que se habría equivocado por
|
|
111
|
+
* `delta`. `scoreLocalDespues` es lo que muestra ahora.
|
|
112
|
+
*/
|
|
113
|
+
export interface DetalleDivergenciaKarma {
|
|
114
|
+
/** El médico cuya reputación valoraban distinto los dos nodos. */
|
|
115
|
+
readonly sujeto: NodoId;
|
|
116
|
+
/** El aval que expuso la divergencia. */
|
|
117
|
+
readonly txId: string;
|
|
118
|
+
/** Quien firmó ese aval — el nodo cuya vista ahora es la que copiamos. */
|
|
119
|
+
readonly emisor: NodoId;
|
|
120
|
+
/** El nodo que nos lo relaysó. */
|
|
121
|
+
readonly desde: NodoId;
|
|
122
|
+
/** El peso del aval. */
|
|
123
|
+
readonly delta: number;
|
|
124
|
+
/** Lo que este nodo mostraba antes. */
|
|
125
|
+
readonly scoreLocalAntes: number;
|
|
126
|
+
/** Lo que este nodo muestra tras aplicarlo. */
|
|
127
|
+
readonly scoreLocalDespues: number;
|
|
128
|
+
/**
|
|
129
|
+
* `aval_tardio`: el aval le era nuevo a este nodo, así que su score estaba
|
|
130
|
+
* desfasado. Un duplicado redelivered no aparece aquí: no movió nada, así que
|
|
131
|
+
* no hay nada que reconciliar.
|
|
132
|
+
*/
|
|
133
|
+
readonly motivo: MotivoDivergenciaKarma;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Cuántos registros de divergencia retiene {@link MeshManager.obtenerDivergencias}.
|
|
137
|
+
*
|
|
138
|
+
* Acotado por la misma razón que `gossipsVistos`: esto es una cola de
|
|
139
|
+
* diagnóstico, no un libro mayor, y un mapa sin límite alimentado por pares
|
|
140
|
+
* remotos es un bug de crecimiento de memoria. La reconciliación, cuando llegue,
|
|
141
|
+
* será dueña del estado durable — no esta cola.
|
|
142
|
+
*/
|
|
143
|
+
export declare const MAX_DIVERGENCIAS_REGISTRADAS: 256;
|
|
144
|
+
/**
|
|
145
|
+
* El motor de karma al que MeshManager replica, expressed como la porción
|
|
146
|
+
* estrecha de KarmaManager que esta capa tiene permiso a usar.
|
|
147
|
+
*
|
|
148
|
+
* Estructural a propósito: `mesh/index.ts` no debe depender del grafo de runtime
|
|
149
|
+
* de karma, y un doble escrito a mano no debe poder satisfacerlo y saltarse la
|
|
150
|
+
* validación en silencio. `aplicarTransaccion` es el ÚNICO método que puede mover
|
|
151
|
+
* un score, y eso es lo que hace exigible que "el gossip es un portador, no una
|
|
152
|
+
* autoridad".
|
|
153
|
+
*/
|
|
154
|
+
export interface ConsumidorKarma {
|
|
155
|
+
/**
|
|
156
|
+
* La única entrada que puede mover un score. Devuelve null cuando se aplicó
|
|
157
|
+
* (y cuando la transacción es un `tx.id` duplicado, por diseño), o el motivo
|
|
158
|
+
* del rechazo.
|
|
159
|
+
*/
|
|
160
|
+
readonly aplicarTransaccion: (tx: TransaccionKarma) => Promise<MotivoRechazo | null>;
|
|
161
|
+
/**
|
|
162
|
+
* Lee el score actual de un nodo. Es el `getScore` del propio KarmaManager,
|
|
163
|
+
* referenciado por su nombre real y no por un alias en español, precisamente
|
|
164
|
+
* para que la comprobación estructural del constructor demuestre que el motor
|
|
165
|
+
* puede observarse de verdad.
|
|
166
|
+
*
|
|
167
|
+
* OBLIGATORIO, no opcional, y ese es el punto de este cambio. La detección de
|
|
168
|
+
* divergencia solo es posible si el portador puede leer el número que está
|
|
169
|
+
* corrigiendo; un lector opcional dejaría que un consumidor volviera
|
|
170
|
+
* opcionalmente a una reputación silenciosamente desfasada, que es el defecto
|
|
171
|
+
* que se cierra. Que falle en tiempo de compilación y no en silencio.
|
|
172
|
+
*
|
|
173
|
+
* Solo lectura: esta capa nunca escribe un score, solo observa uno.
|
|
174
|
+
*/
|
|
175
|
+
readonly getScore: (nodoId: NodoId) => number;
|
|
176
|
+
/**
|
|
177
|
+
* Registra una clave que el nodo ya confía en (p. ej. del registro de pares de
|
|
178
|
+
* EdgeMesh). Opcional: un consumidor que resuelva claves por su cuenta no
|
|
179
|
+
* necesita exponerlo.
|
|
180
|
+
*/
|
|
181
|
+
readonly registrarClavePublica?: (nodoId: NodoId, parPublico: ParPublico) => void;
|
|
182
|
+
}
|
|
183
|
+
/** Opciones con nombre para el constructor de MeshManager. */
|
|
184
|
+
export interface MeshManagerOpciones {
|
|
185
|
+
/**
|
|
186
|
+
* Motor de karma al que replicar los avales remotos. Omitirlo deja una malla
|
|
187
|
+
* que solo transporta gossip con otros fines.
|
|
188
|
+
*/
|
|
189
|
+
readonly consumidorKarma?: ConsumidorKarma;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Payload que MeshManager gossipea para llevar un aval. Versionado en el cable
|
|
193
|
+
* para que un cambio futuro en el formato de transacción sea distinguible.
|
|
194
|
+
*/
|
|
195
|
+
export declare const PAYLOAD_KARMA_TIPO: "karma:tx";
|
|
196
|
+
export declare class MeshManager extends EventTarget {
|
|
197
|
+
readonly config: MeshConfig;
|
|
198
|
+
private readonly edgeMesh;
|
|
199
|
+
private readonly peers;
|
|
200
|
+
private readonly gossipsVistos;
|
|
201
|
+
private readonly gossipRateLimiter;
|
|
202
|
+
private readonly namespacePeers;
|
|
203
|
+
/**
|
|
204
|
+
* Motor de karma al que replicar. Ausente significa que este MeshManager es un
|
|
205
|
+
* portador puro (solo chat/sync) y que los avales remotos se ignoran en vez de
|
|
206
|
+
* validarse con un doble.
|
|
207
|
+
*/
|
|
208
|
+
private consumidorKarma?;
|
|
209
|
+
/** Aplicaciones de karma en vuelo, para poder esperar la propagacion sin dormir. */
|
|
210
|
+
private readonly karmaEnCurso;
|
|
211
|
+
/**
|
|
212
|
+
* Cola de diagnostico de divergencias de reputacion observadas, de la mas
|
|
213
|
+
* antigua a la mas reciente, acotada por {@link MAX_DIVERGENCIAS_REGISTRADAS}.
|
|
214
|
+
*
|
|
215
|
+
* Acotada y SOLO EN MEMORIA, a proposito. Esto no es un libro mayor y no debe
|
|
216
|
+
* convertirse en uno: escribir registros de divergencia en el OpLog seria el
|
|
217
|
+
* primer paso de la reconciliación, que es explicitamente una fase posterior.
|
|
218
|
+
* Perder esta cola al reiniciar es el coste aceptado de "hacerlo visible ahora,
|
|
219
|
+
* reconciliar despues".
|
|
220
|
+
*/
|
|
221
|
+
private readonly divergencias;
|
|
222
|
+
/**
|
|
223
|
+
* Serializa las aplicaciones de karma para que la lectura de score antes/despues
|
|
224
|
+
* de cada una abarque exactamente su propia aplicacion. Ver
|
|
225
|
+
* {@link MeshManager.encolarAplicacionKarma} para por qué importa.
|
|
226
|
+
*
|
|
227
|
+
* Cadena resuelta, nunca rechazada: cada eslabon captura su propio fallo, asi
|
|
228
|
+
* que un aval que lance no puede bloquear a todos los que tiene detrás.
|
|
229
|
+
*/
|
|
230
|
+
private colaKarma;
|
|
231
|
+
private activo;
|
|
232
|
+
private intervalos;
|
|
233
|
+
constructor(config: Partial<MeshConfig> & {
|
|
234
|
+
nodoId: NodoId;
|
|
235
|
+
}, edgeMesh: EdgeMesh, consumidorKarma?: ConsumidorKarma);
|
|
236
|
+
constructor(config: Partial<MeshConfig> & {
|
|
237
|
+
nodoId: NodoId;
|
|
238
|
+
}, edgeMesh: EdgeMesh, opciones?: MeshManagerOpciones);
|
|
239
|
+
iniciar(): Promise<void>;
|
|
240
|
+
detener(): Promise<void>;
|
|
241
|
+
conectarPeer(peerId: NodoId, namespace?: string): Promise<void>;
|
|
242
|
+
desconectarPeer(peerId: NodoId): Promise<void>;
|
|
243
|
+
private encontrarPeorPeer;
|
|
244
|
+
private agregarPeerANamespace;
|
|
245
|
+
unirANamespace(namespace: string, peerId?: NodoId): Promise<void>;
|
|
246
|
+
abandonarNamespace(namespace: string, peerId?: NodoId): Promise<void>;
|
|
247
|
+
obtenerPeersEnNamespace(namespace: string): readonly NodoId[];
|
|
248
|
+
transmitirConGossip(namespace: string, payload: unknown, fanOut?: number): Promise<void>;
|
|
249
|
+
private seleccionarPeersParaFanOut;
|
|
250
|
+
private seleccionAleatoria;
|
|
251
|
+
private seleccionPorSalud;
|
|
252
|
+
private seleccionPorLatencia;
|
|
253
|
+
/**
|
|
254
|
+
* EL CAMINO DE REPLICACIÓN DE LA REPUTACIÓN.
|
|
255
|
+
*
|
|
256
|
+
* ─── POR QUÉ EXISTE ESTE GANCHO ────────────────────────────────────────
|
|
257
|
+
*
|
|
258
|
+
* Hasta ahora `KarmaManager` escribía los avales en el OpLog LOCAL
|
|
259
|
+
* (`karma:emit`) y ahí terminaba, mientras que `procesarGossip` — lo único en
|
|
260
|
+
* el repo que podía haberlos llevado a un par — nunca lo invocaba nadie. Dos
|
|
261
|
+
* observadores honestos del mismo aval sostenían por tanto scores distintos.
|
|
262
|
+
*
|
|
263
|
+
* ─── MODELO DE CONFIANZA: EL GOSSIP ES UN PORTADOR, NO UNA AUTORIDAD ────
|
|
264
|
+
*
|
|
265
|
+
* Un payload de gossip es datos controlados por un atacante. Puede ser
|
|
266
|
+
* reenviado, falsificado, re-firmado por un par coludido, o enviado por un nodo
|
|
267
|
+
* que nunca ha sido avalado por nadie. Por eso este método NUNCA escribe en un
|
|
268
|
+
* OpLog y NUNCA toca un score. Hace exactamente una cosa con el payload:
|
|
269
|
+
* entregarlo a `ConsumidorKarma.aplicarTransaccion`, que es la entrada publica
|
|
270
|
+
* del propio KarmaManager. Ese método es el único lugar donde se verifica la
|
|
271
|
+
* firma ML-DSA-65 contra la clave REGISTRADA del emisor, se rechaza la
|
|
272
|
+
* auto-emisión, se aplica el techo de delta y el reenvío del mismo `tx.id` es
|
|
273
|
+
* idempotente. Reimplementar aquí cualquiera de esas reglas crearía un segundo
|
|
274
|
+
* validador más débil, que es exactamente el bug que este camino cierra.
|
|
275
|
+
*
|
|
276
|
+
* En consecuencia, un par NUNCA puede inyectar karma en un nodo que no ha
|
|
277
|
+
* firmado un aval: sin una firma válida de una clave en la que el nodo confía, la
|
|
278
|
+
* transacción se rechaza y ningún score se mueve.
|
|
279
|
+
*
|
|
280
|
+
* La confianza en claves públicas deliberadamente NO se toma del payload de
|
|
281
|
+
* gossip (eso dejaría que cualquier par respaldara a cualquier otro). Las únicas
|
|
282
|
+
* claves que se registran desde aquí son las que EdgeMesh ya autenticó en el
|
|
283
|
+
* handshake, leídas vía `obtenerClavePublica`.
|
|
284
|
+
*
|
|
285
|
+
* ─── LIMITACIÓN CONOCIDA — MEJOR ESFUERZO, NO CONSENSO (SIN RESOLVER) ───
|
|
286
|
+
*
|
|
287
|
+
* El gossip es mejor-esfuerzo. TTL, el rate limiter de tokens, pares offline y
|
|
288
|
+
* la seleccion de fan-out significan que un aval PUEDE PERDERSE: un médico que
|
|
289
|
+
* está offline cuando se gossipea su aval nunca se entera. Esta capa convierte
|
|
290
|
+
* por tanto la reputación en una SEÑAL que se propaga oportunísticamente, NO en
|
|
291
|
+
* un libro mayor autoritativo. Dos nodos pueden sostener legítimamente scores
|
|
292
|
+
* distintos para el mismo sujeto, y ningún reintento dentro de esta capa lo
|
|
293
|
+
* arregla — es un problema de convergencia, no de transporte.
|
|
294
|
+
*
|
|
295
|
+
* ─── QUÉ HACE ESTE MÉTODO AL RESPECTO: DETECTA, NO CORRIGE ─────────────
|
|
296
|
+
*
|
|
297
|
+
* Antes de este cambio la capa aplicaba el aval y seguía, así que el score se
|
|
298
|
+
* corregía solo y en silencio y ningún operador se enteraba de que dos nodos
|
|
299
|
+
* honestos habían mostrado reputaciones distintas del mismo médico. Ahora lee
|
|
300
|
+
* el score justo antes y justo después de la aplicación y, cuando el aval lo
|
|
301
|
+
* movió, emite `karmaDivergente` nombrando al sujeto, el score desfasado, el
|
|
302
|
+
* nuevo y el aval responsable.
|
|
303
|
+
*
|
|
304
|
+
* LA CORRECCIÓN SIGUE SIENDO LA DEL MOTOR. Esta capa lee scores y los reporta;
|
|
305
|
+
* solo KarmaManager decide qué es un score. Y nada se reconcilia: sin escritura
|
|
306
|
+
* en el OpLog, sin reordenación, sin retractación, sin intentar que los pares
|
|
307
|
+
* coincidan. Hacerlos coincidir es la fase siguiente y necesita diseño de
|
|
308
|
+
* quórum/anti-entropía que no pertenece a un portador.
|
|
309
|
+
*
|
|
310
|
+
* La solución real es un protocolo de reconciliación y está DELIBERADAMENTE NO
|
|
311
|
+
* IMPLEMENTADO AQUÍ. Direcciones candidatas, ninguna elegida aún:
|
|
312
|
+
* (a) Anti-entropía de OpLog: intercambio periódico de entradas `karma:emit`
|
|
313
|
+
* indexadas por `tx.id`, aplicadas vía `aplicarTransaccion` (la
|
|
314
|
+
* idempotencia hace gratis los reenvíos), para que un nodo que regresa se
|
|
315
|
+
* ponga al día.
|
|
316
|
+
* (b) Quórum/acuerdo Bizantino sobre deltas, para que un score se acredite
|
|
317
|
+
* solo cuando una supermayoría de pares lo ha visto de forma
|
|
318
|
+
* independiente.
|
|
319
|
+
* (c) Exposición explícita del conflicto: divergencia (el conjunto de `tx.id`s)
|
|
320
|
+
* para que un operador pueda ver que dos nodos honestos discrepan en vez
|
|
321
|
+
* de confiar calladamente en el gossip que llegó primero. ← esta fase: el
|
|
322
|
+
* evento `karmaDivergente` y {@link MeshManager.obtenerDivergencias} son
|
|
323
|
+
* (c), acotado a lo que la sola llegada de gossip puede probar.
|
|
324
|
+
* Sea cual se elija, los invariantes se mantienen: el karma nunca otorga acceso,
|
|
325
|
+
* y solo un aval firmado puede mover un score. Hasta entonces, quien consuma un
|
|
326
|
+
* número de karma debe tratarlo como una pista no verificada — nunca como una
|
|
327
|
+
* credencial.
|
|
328
|
+
*
|
|
329
|
+
* @returns el motivo del rechazo, o null cuando la transacción se aplicó (o fue
|
|
330
|
+
* un duplicado ya aplicado, que KarmaManager dobla en `null` por
|
|
331
|
+
* diseño).
|
|
332
|
+
*/
|
|
333
|
+
aplicarKarmaRemoto(tx: TransaccionKarma, desde: NodoId): Promise<MotivoRechazo | "payload_malformado" | null>;
|
|
334
|
+
/**
|
|
335
|
+
* Lee un score, convirtiendo cualquier mal comportamiento del consumidor en
|
|
336
|
+
* "desconocido".
|
|
337
|
+
*
|
|
338
|
+
* Devuelve `null` — nunca un `0` fabricado — para que un lector roto sea
|
|
339
|
+
* indistinguible de uno ausente. Inventar un cero aquí haría que el informe de
|
|
340
|
+
* divergencia afirmara un movimiento que nunca ocurrió, que es peor que
|
|
341
|
+
* callarse: un operador no podría distinguir una discrepancia real de una
|
|
342
|
+
* inventada.
|
|
343
|
+
*/
|
|
344
|
+
private leerScoreSiPuede;
|
|
345
|
+
/**
|
|
346
|
+
* Registra una divergencia y la anuncia.
|
|
347
|
+
*
|
|
348
|
+
* Ambas mitades importan y sirven a lectores distintos: el evento llega a quien
|
|
349
|
+
* esté mirando la malla en vivo, mientras que
|
|
350
|
+
* {@link MeshManager.obtenerDivergencias} permite a un operador descubrir A
|
|
351
|
+
* POSTERIORI EL HECHO que dos nodos discrepaban — incluidas divergencias
|
|
352
|
+
* ocurridas mientras nadie escuchaba. Solo con un evento, la divergencia
|
|
353
|
+
* seguiría desapareciendo en silencio justo en el momento en que importaba.
|
|
354
|
+
*
|
|
355
|
+
* `karmaRecibido` se emite primero, así que un listener que reacciona a un
|
|
356
|
+
* score nuevo ya tiene el registro de divergencia garantizado.
|
|
357
|
+
*/
|
|
358
|
+
private registrarDivergencia;
|
|
359
|
+
/** Lee la clave pública de un par del registro de EdgeMesh (verificada en handshake). */
|
|
360
|
+
private obtenerClavePublicaDePeer;
|
|
361
|
+
/**
|
|
362
|
+
* Conecta (o desconecta) el motor de karma al que este MeshManager replica.
|
|
363
|
+
*
|
|
364
|
+
* Existe porque el orden de construccion lo impone: `EdgeMesh` crea el
|
|
365
|
+
* MeshManager en su constructor, y `MalocaKernel` crea el KarmaManager DESPUES
|
|
366
|
+
* de `super(config)`. Sin este gancho, la malla quedaria permanentemente sin
|
|
367
|
+
* consumidor y los avales seguirian sin viajar.
|
|
368
|
+
*
|
|
369
|
+
* Pasar `undefined` devuelve la malla a portador puro: deja de aplicar avales
|
|
370
|
+
* en vez de inventar un motor propio.
|
|
371
|
+
*/
|
|
372
|
+
setConsumidorKarma(consumidor?: ConsumidorKarma): void;
|
|
373
|
+
/**
|
|
374
|
+
* Gossipea un aval a la malla. Quien llame le pasa el objeto transacción que
|
|
375
|
+
* devolvió `KarmaManager.emit`, firma incluida — una transacción sin firma es
|
|
376
|
+
* inútil para todo par, y KarmaManager ya garantiza que no puede producirse.
|
|
377
|
+
*/
|
|
378
|
+
transmitirKarma(tx: TransaccionKarma, namespace?: string): Promise<void>;
|
|
379
|
+
/**
|
|
380
|
+
* Resuelve cuando todas las transacciones de karma en vuelo se han
|
|
381
|
+
* estabilizado. Los tests y gateways lo usan en vez de dormir; la malla nunca
|
|
382
|
+
* espera la aplicación de gossip en el camino caliente.
|
|
383
|
+
*/
|
|
384
|
+
esperarPropagacionKarma(): Promise<void>;
|
|
385
|
+
/**
|
|
386
|
+
* Extrae un aval de un payload de gossip y lo aplica por el motor de karma.
|
|
387
|
+
* Cualquier cosa que no sea reconociblemente un aval se ignora: otros tipos de
|
|
388
|
+
* payload (eventos maloca, descubrimiento de plugins) no son asunto nuestro y
|
|
389
|
+
* se dejan a los listeners de `gossipRecibido`.
|
|
390
|
+
*/
|
|
391
|
+
private enrutarKarmaDeGossip;
|
|
392
|
+
/**
|
|
393
|
+
* Aplica avales de UNO EN UNO, en orden de llegada.
|
|
394
|
+
*
|
|
395
|
+
* Por qué la cola, dado que el gossip deliberadamente no se espera en el
|
|
396
|
+
* camino caliente: `aplicarKarmaRemoto` lee el score antes de la aplicación y
|
|
397
|
+
* otra vez después, con un `await` en medio (la comprobación de firma es una
|
|
398
|
+
* operación PQC real). Sin serialización, varios gossips procesados en el mismo
|
|
399
|
+
* tick leerían el MISMO score "anterior" y cada uno aplicaría encima de él — así
|
|
400
|
+
* que el `scoreLocalAntes` registrado sería el valor de antes de todo el lote y
|
|
401
|
+
* no el valor que el nodo realmente mostraba cuando llegó ese aval. El evento
|
|
402
|
+
* seguiría disparándose, pero describiría un score que nadie vio, que es
|
|
403
|
+
* exactamente el tipo de número silenciosamente incorrecto que esta fase existe
|
|
404
|
+
* para dejar de publicar.
|
|
405
|
+
*
|
|
406
|
+
* La cola conserva el orden de llegada (`.then` sobre la tarea anterior), así
|
|
407
|
+
* que la secuencia es determinista e idéntica en cada nodo que vio los mismos
|
|
408
|
+
* gossips en el mismo orden.Tampoco cambia el resultado independiente del
|
|
409
|
+
* orden: KarmaManager suma deltas, así que el score FINAL es el mismo
|
|
410
|
+
* cualquiera — la cola hace que el reporte intermedio sea fiel, no que el
|
|
411
|
+
* total sea distinto.
|
|
412
|
+
*
|
|
413
|
+
* Los fallos no atascan la cola: cada eslabon absorbe su propio rechazo, así
|
|
414
|
+
* que un aval envenenado no bloquea a todos los que tiene detrás.
|
|
415
|
+
*/
|
|
416
|
+
private encolarAplicacionKarma;
|
|
417
|
+
procesarGossip(mensaje: GossipMessage): void;
|
|
418
|
+
private reenviarGossip;
|
|
419
|
+
private transmitirHeartbeat;
|
|
420
|
+
procesarHeartbeatPeer(peerId: NodoId, peersConocidos: readonly NodoId[], namespaces: readonly string[]): void;
|
|
421
|
+
descubrirSalon(salonId: string): Promise<readonly NodoId[]>;
|
|
422
|
+
obtenerPeersConectados(): readonly NodoId[];
|
|
423
|
+
/**
|
|
424
|
+
* Divergencias que este nodo ha observado, de la más antigua a la más reciente,
|
|
425
|
+
* acotadas por {@link MAX_DIVERGENCIAS_REGISTRADAS}.
|
|
426
|
+
*
|
|
427
|
+
* La respuesta a "¿mi red está de acuerdo conmigo?" — la pregunta que un
|
|
428
|
+
* presupuesto de divergencia v1 no puede responder por sí solo, ya que todo el
|
|
429
|
+
* coste del modelo es que el score PODRÍA estar mal.
|
|
430
|
+
*
|
|
431
|
+
* Devuelve una copia: la cola es contabilidad interna y handing fuera una
|
|
432
|
+
* referencia viva dejaría que un llamador mutara el estado de detección desde
|
|
433
|
+
* fuera.
|
|
434
|
+
*
|
|
435
|
+
* Vacío significa "no se observó divergencia DESDE QUE ARRANCÓ ESTE PROCESO", no
|
|
436
|
+
* "la red está de acuerdo". No es una prueba de consenso, y nada de esto
|
|
437
|
+
* debería presentarse como tal a un clínico.
|
|
438
|
+
*/
|
|
439
|
+
obtenerDivergencias(): readonly DetalleDivergenciaKarma[];
|
|
440
|
+
obtenerPeersActivos(): readonly NodoId[];
|
|
441
|
+
obtenerPeersLentos(): readonly string[];
|
|
442
|
+
obtenerPeerInfo(peerId: NodoId): PeerInfo | null;
|
|
443
|
+
obtenerTotalPeers(): number;
|
|
444
|
+
obtenerNamespaces(): readonly string[];
|
|
445
|
+
estaActivo(): boolean;
|
|
446
|
+
private actualizarLatencia;
|
|
447
|
+
private marcarPeerCaido;
|
|
448
|
+
private limpiarPeersCaidos;
|
|
449
|
+
private limpiarGossipCache;
|
|
450
|
+
private emitMeshSalud;
|
|
451
|
+
destruir(): void;
|
|
452
|
+
}
|
|
453
|
+
export declare class MeshGossip extends MeshManager {
|
|
454
|
+
recibirGossip(_origen: NodoId, mensaje: GossipMessage): void;
|
|
455
|
+
propagarGossip(mensaje: GossipMessage): Promise<void>;
|
|
456
|
+
}
|
|
457
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mesh/index.ts"],"names":[],"mappings":"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"}
|