@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,54 @@
|
|
|
1
|
+
import { topic } from "./rooms.js";
|
|
2
|
+
export const HEALTH_SCHEMA_PREFIX = "swal.health/v1";
|
|
3
|
+
export function isHealthRecord(r) {
|
|
4
|
+
return (typeof r === "object" &&
|
|
5
|
+
r !== null &&
|
|
6
|
+
typeof r.schema === "string" &&
|
|
7
|
+
r.schema.startsWith(HEALTH_SCHEMA_PREFIX));
|
|
8
|
+
}
|
|
9
|
+
/** Topic carrying cross-app health records for one subject (`subj_<ULID>`). */
|
|
10
|
+
export const exchangeTopic = (subject) => topic("health", "exchange", subject);
|
|
11
|
+
/**
|
|
12
|
+
* Cross-app exchange over a dedicated mesh (created with topic = exchangeTopic(subject)).
|
|
13
|
+
* Records live in an append-only Y.Array 'records'; receivers see only entries added remotely
|
|
14
|
+
* (or by any writer after subscription), de-duplicated by record id.
|
|
15
|
+
*/
|
|
16
|
+
export function exchange(mesh, doc, subject) {
|
|
17
|
+
const arr = doc.getArray("records");
|
|
18
|
+
const cbs = new Set();
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
const obs = (ev) => {
|
|
21
|
+
if (ev.transaction.local)
|
|
22
|
+
return;
|
|
23
|
+
for (const item of ev.changes.added) {
|
|
24
|
+
for (const e of item.content.getContent()) {
|
|
25
|
+
if (seen.has(e.id) || !isHealthRecord(e.record))
|
|
26
|
+
continue;
|
|
27
|
+
seen.add(e.id);
|
|
28
|
+
for (const cb of cbs)
|
|
29
|
+
cb(e.record);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
arr.observe(obs);
|
|
34
|
+
return {
|
|
35
|
+
topic: exchangeTopic(subject),
|
|
36
|
+
send(record) {
|
|
37
|
+
if (!isHealthRecord(record))
|
|
38
|
+
throw new Error(`record.schema must start with "${HEALTH_SCHEMA_PREFIX}"`);
|
|
39
|
+
const id = crypto.randomUUID();
|
|
40
|
+
seen.add(id);
|
|
41
|
+
arr.push([{ id, record }]);
|
|
42
|
+
return id;
|
|
43
|
+
},
|
|
44
|
+
onReceive(cb) {
|
|
45
|
+
cbs.add(cb);
|
|
46
|
+
return () => void cbs.delete(cb);
|
|
47
|
+
},
|
|
48
|
+
destroy() {
|
|
49
|
+
arr.unobserve(obs);
|
|
50
|
+
cbs.clear();
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=exchange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange.js","sourceRoot":"","sources":["../../src/web/exchange.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAQrD,MAAM,UAAU,cAAc,CAAC,CAAU;IACxC,OAAO,CACN,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACV,OAAQ,CAAkB,CAAC,MAAM,KAAK,QAAQ;QAC7C,CAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAC3D,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE,CAChD,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAStC;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACvB,IAAU,EACV,GAAsB,EACtB,OAAe;IAEf,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAuC,SAAS,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6B,CAAC;IACjD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CACX,EAAmE,EAClE,EAAE;QACH,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK;YAAE,OAAO;QACjC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAGrC,EAAE,CAAC;gBACJ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;oBAAE,SAAS;gBAC1D,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACf,KAAK,MAAM,EAAE,IAAI,GAAG;oBAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IACF,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO;QACN,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,MAAM;YACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;gBAC1B,MAAM,IAAI,KAAK,CACd,kCAAkC,oBAAoB,GAAG,CACzD,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC;QACX,CAAC;QACD,SAAS,CAAC,EAAE;YACX,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACZ,OAAO,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;QACD,OAAO;YACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export declare const F_FRAG = 4;
|
|
2
|
+
export declare const FRAG_HEADER: number;
|
|
3
|
+
export declare const DEFAULT_MAX_FRAME: number;
|
|
4
|
+
export declare const DEFAULT_MAX_MESSAGE: number;
|
|
5
|
+
/** Split `msg` into frames of at most `maxFrame` bytes; a message that already fits is returned as is. */
|
|
6
|
+
export declare function fragment(msg: Uint8Array, maxFrame?: number): Promise<Uint8Array[]>;
|
|
7
|
+
/** A byte budget shared by several reassemblers (e.g. every not-yet-authenticated link of a mesh). */
|
|
8
|
+
export interface ByteBudget {
|
|
9
|
+
used: number;
|
|
10
|
+
readonly max: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ReassemblerOptions {
|
|
13
|
+
/** Largest message accepted (declared length). Default 64 MiB. */
|
|
14
|
+
maxMessageBytes?: number;
|
|
15
|
+
/** Sum of declared lengths of all partial messages; the oldest partials are evicted beyond it. Default = maxMessageBytes. */
|
|
16
|
+
maxPendingBytes?: number;
|
|
17
|
+
/** A partial message older than this is dropped. Default 30 s. */
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
now?: () => number;
|
|
20
|
+
onDrop?: (reason: string) => void;
|
|
21
|
+
/** Also charge every partial message to this shared budget (dropped when it would overflow). */
|
|
22
|
+
shared?: ByteBudget;
|
|
23
|
+
}
|
|
24
|
+
/** Reassembles fragments arriving on ONE link. Not shared between links (a peer cannot complete another's message). */
|
|
25
|
+
export declare class Reassembler {
|
|
26
|
+
private o;
|
|
27
|
+
private partials;
|
|
28
|
+
private declared;
|
|
29
|
+
private timer;
|
|
30
|
+
private maxMessage;
|
|
31
|
+
private maxPendingBytes;
|
|
32
|
+
private shared?;
|
|
33
|
+
private readonly timeoutMs;
|
|
34
|
+
private readonly now;
|
|
35
|
+
constructor(o?: ReassemblerOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Change the limits (e.g. once the link is authenticated). `shared: null` stops charging NEW partials to the
|
|
38
|
+
* shared budget; partials already charged release it when they complete or are dropped.
|
|
39
|
+
*/
|
|
40
|
+
setLimits(o: {
|
|
41
|
+
maxMessageBytes?: number;
|
|
42
|
+
maxPendingBytes?: number;
|
|
43
|
+
shared?: ByteBudget | null;
|
|
44
|
+
}): void;
|
|
45
|
+
get pending(): number;
|
|
46
|
+
get pendingBytes(): number;
|
|
47
|
+
/** Returns the whole message once its last fragment arrives and the hash matches; null otherwise. */
|
|
48
|
+
push(frame: Uint8Array): Promise<Uint8Array | null>;
|
|
49
|
+
/** Drop partial messages older than the timeout. */
|
|
50
|
+
sweep(): void;
|
|
51
|
+
clear(): void;
|
|
52
|
+
private evictOldest;
|
|
53
|
+
private remove;
|
|
54
|
+
private drop;
|
|
55
|
+
/** Free memory of stalled partials even if no further fragment ever arrives. */
|
|
56
|
+
private arm;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=fragment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment.d.ts","sourceRoot":"","sources":["../../src/web/fragment.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM,IAAI,CAAC;AACxB,eAAO,MAAM,WAAW,QAAyB,CAAC;AAClD,eAAO,MAAM,iBAAiB,QAAY,CAAC;AAC3C,eAAO,MAAM,mBAAmB,QAAmB,CAAC;AAMpD,0GAA0G;AAC1G,wBAAsB,QAAQ,CAC7B,GAAG,EAAE,UAAU,EACf,QAAQ,SAAoB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC,CAsBvB;AAED,sGAAsG;AACtG,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IAClC,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6HAA6H;IAC7H,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,gGAAgG;IAChG,MAAM,CAAC,EAAE,UAAU,CAAC;CACpB;AAaD,uHAAuH;AACvH,qBAAa,WAAW;IAUX,OAAO,CAAC,CAAC;IATrB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC,YAAoB,CAAC,GAAE,kBAAuB,EAM7C;IAED;;;OAGG;IACH,SAAS,CAAC,CAAC,EAAE;QACZ,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;KAC3B,GAAG,IAAI,CAKP;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,qGAAqG;IAC/F,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA8DxD;IAED,oDAAoD;IACpD,KAAK,IAAI,IAAI,CAIZ;IAED,KAAK,IAAI,IAAI,CAOZ;IAED,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,IAAI;IAMZ,gFAAgF;IAChF,OAAO,CAAC,GAAG;CASX"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// Transport-independent fragmentation of mesh messages (H5). Browsers cap a DataChannel message
|
|
2
|
+
// (RTCSctpTransport.maxMessageSize, ~256 KiB in Chrome) and other link transports may cap lower, while an
|
|
3
|
+
// initial sync or a pairing grant can be megabytes. Messages above `maxFrame` are split into self-describing
|
|
4
|
+
// fragments and reassembled with integrity (sequence + total + length + SHA-256), bounded memory and a timeout.
|
|
5
|
+
//
|
|
6
|
+
// Fragment: F_FRAG | msgId(8) | seq(u32) | total(u32) | len(u32) | sha256(32) | chunk
|
|
7
|
+
import { bs, concat, equalBytes, randomBytes } from "./util.js";
|
|
8
|
+
export const F_FRAG = 4;
|
|
9
|
+
export const FRAG_HEADER = 1 + 8 + 4 + 4 + 4 + 32;
|
|
10
|
+
export const DEFAULT_MAX_FRAME = 64 * 1024;
|
|
11
|
+
export const DEFAULT_MAX_MESSAGE = 64 * 1024 * 1024;
|
|
12
|
+
const MAX_FRAGMENTS = 1 << 20;
|
|
13
|
+
const sha256 = async (b) => new Uint8Array(await crypto.subtle.digest("SHA-256", bs(b)));
|
|
14
|
+
/** Split `msg` into frames of at most `maxFrame` bytes; a message that already fits is returned as is. */
|
|
15
|
+
export async function fragment(msg, maxFrame = DEFAULT_MAX_FRAME) {
|
|
16
|
+
if (msg.length <= maxFrame)
|
|
17
|
+
return [msg];
|
|
18
|
+
const chunk = maxFrame - FRAG_HEADER;
|
|
19
|
+
if (chunk < 1)
|
|
20
|
+
throw new Error("maxFrame too small");
|
|
21
|
+
const total = Math.ceil(msg.length / chunk);
|
|
22
|
+
const id = randomBytes(8);
|
|
23
|
+
const hash = await sha256(msg);
|
|
24
|
+
const out = [];
|
|
25
|
+
for (let seq = 0; seq < total; seq++) {
|
|
26
|
+
const body = msg.subarray(seq * chunk, (seq + 1) * chunk);
|
|
27
|
+
const f = new Uint8Array(FRAG_HEADER + body.length);
|
|
28
|
+
const dv = new DataView(f.buffer);
|
|
29
|
+
f[0] = F_FRAG;
|
|
30
|
+
f.set(id, 1);
|
|
31
|
+
dv.setUint32(9, seq);
|
|
32
|
+
dv.setUint32(13, total);
|
|
33
|
+
dv.setUint32(17, msg.length);
|
|
34
|
+
f.set(hash, 21);
|
|
35
|
+
f.set(body, FRAG_HEADER);
|
|
36
|
+
out.push(f);
|
|
37
|
+
}
|
|
38
|
+
return out;
|
|
39
|
+
}
|
|
40
|
+
/** Reassembles fragments arriving on ONE link. Not shared between links (a peer cannot complete another's message). */
|
|
41
|
+
export class Reassembler {
|
|
42
|
+
o;
|
|
43
|
+
partials = new Map();
|
|
44
|
+
declared = 0;
|
|
45
|
+
timer = null;
|
|
46
|
+
maxMessage;
|
|
47
|
+
maxPendingBytes;
|
|
48
|
+
shared;
|
|
49
|
+
timeoutMs;
|
|
50
|
+
now;
|
|
51
|
+
constructor(o = {}) {
|
|
52
|
+
this.o = o;
|
|
53
|
+
this.maxMessage = o.maxMessageBytes ?? DEFAULT_MAX_MESSAGE;
|
|
54
|
+
this.maxPendingBytes = o.maxPendingBytes ?? this.maxMessage;
|
|
55
|
+
this.shared = o.shared;
|
|
56
|
+
this.timeoutMs = o.timeoutMs ?? 30_000;
|
|
57
|
+
this.now = o.now ?? (() => Date.now());
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Change the limits (e.g. once the link is authenticated). `shared: null` stops charging NEW partials to the
|
|
61
|
+
* shared budget; partials already charged release it when they complete or are dropped.
|
|
62
|
+
*/
|
|
63
|
+
setLimits(o) {
|
|
64
|
+
if (o.maxMessageBytes !== undefined)
|
|
65
|
+
this.maxMessage = o.maxMessageBytes;
|
|
66
|
+
if (o.maxPendingBytes !== undefined)
|
|
67
|
+
this.maxPendingBytes = o.maxPendingBytes;
|
|
68
|
+
if (o.shared !== undefined)
|
|
69
|
+
this.shared = o.shared ?? undefined;
|
|
70
|
+
}
|
|
71
|
+
get pending() {
|
|
72
|
+
return this.partials.size;
|
|
73
|
+
}
|
|
74
|
+
get pendingBytes() {
|
|
75
|
+
return this.declared;
|
|
76
|
+
}
|
|
77
|
+
/** Returns the whole message once its last fragment arrives and the hash matches; null otherwise. */
|
|
78
|
+
async push(frame) {
|
|
79
|
+
this.sweep();
|
|
80
|
+
if (frame.length <= FRAG_HEADER || frame[0] !== F_FRAG)
|
|
81
|
+
return this.drop(null, "malformed fragment");
|
|
82
|
+
const dv = new DataView(frame.buffer, frame.byteOffset, frame.byteLength);
|
|
83
|
+
const key = Array.from(frame.subarray(1, 9)).join(",");
|
|
84
|
+
const seq = dv.getUint32(9);
|
|
85
|
+
const total = dv.getUint32(13);
|
|
86
|
+
const len = dv.getUint32(17);
|
|
87
|
+
const hash = frame.subarray(21, FRAG_HEADER);
|
|
88
|
+
const body = frame.subarray(FRAG_HEADER);
|
|
89
|
+
let p = this.partials.get(key);
|
|
90
|
+
if (!p) {
|
|
91
|
+
if (len > this.maxMessage)
|
|
92
|
+
return this.drop(null, "message too large");
|
|
93
|
+
if (total < 2 || total > MAX_FRAGMENTS || total > len || seq >= total)
|
|
94
|
+
return this.drop(null, "malformed fragment");
|
|
95
|
+
while (this.partials.size > 0 &&
|
|
96
|
+
this.declared + len > this.maxPendingBytes)
|
|
97
|
+
this.evictOldest();
|
|
98
|
+
const shared = this.shared;
|
|
99
|
+
if (shared) {
|
|
100
|
+
while (this.partials.size > 0 && shared.used + len > shared.max)
|
|
101
|
+
this.evictOldest();
|
|
102
|
+
if (shared.used + len > shared.max)
|
|
103
|
+
return this.drop(null, "shared budget exhausted");
|
|
104
|
+
shared.used += len;
|
|
105
|
+
}
|
|
106
|
+
p = {
|
|
107
|
+
total,
|
|
108
|
+
len,
|
|
109
|
+
hash: hash.slice(),
|
|
110
|
+
parts: new Map(),
|
|
111
|
+
got: 0,
|
|
112
|
+
started: this.now(),
|
|
113
|
+
shared,
|
|
114
|
+
};
|
|
115
|
+
this.partials.set(key, p);
|
|
116
|
+
this.declared += len;
|
|
117
|
+
this.arm();
|
|
118
|
+
}
|
|
119
|
+
else if (p.total !== total ||
|
|
120
|
+
p.len !== len ||
|
|
121
|
+
!equalBytes(p.hash, hash) ||
|
|
122
|
+
seq >= total) {
|
|
123
|
+
return this.drop(key, "inconsistent fragment");
|
|
124
|
+
}
|
|
125
|
+
if (p.parts.has(seq))
|
|
126
|
+
return null; // duplicate
|
|
127
|
+
if (p.got + body.length > p.len)
|
|
128
|
+
return this.drop(key, "fragment overflow");
|
|
129
|
+
p.parts.set(seq, body.slice());
|
|
130
|
+
p.got += body.length;
|
|
131
|
+
if (p.parts.size < p.total)
|
|
132
|
+
return null;
|
|
133
|
+
this.remove(key);
|
|
134
|
+
if (p.got !== p.len)
|
|
135
|
+
return this.drop(null, "length mismatch");
|
|
136
|
+
const parts = [];
|
|
137
|
+
for (let i = 0; i < p.total; i++)
|
|
138
|
+
parts.push(p.parts.get(i));
|
|
139
|
+
const msg = concat(...parts);
|
|
140
|
+
if (!equalBytes(await sha256(msg), p.hash))
|
|
141
|
+
return this.drop(null, "hash mismatch");
|
|
142
|
+
return msg;
|
|
143
|
+
}
|
|
144
|
+
/** Drop partial messages older than the timeout. */
|
|
145
|
+
sweep() {
|
|
146
|
+
const limit = this.now() - this.timeoutMs;
|
|
147
|
+
for (const [k, p] of this.partials)
|
|
148
|
+
if (p.started <= limit)
|
|
149
|
+
this.drop(k, "timeout");
|
|
150
|
+
}
|
|
151
|
+
clear() {
|
|
152
|
+
for (const p of this.partials.values())
|
|
153
|
+
if (p.shared)
|
|
154
|
+
p.shared.used -= p.len;
|
|
155
|
+
this.partials.clear();
|
|
156
|
+
this.declared = 0;
|
|
157
|
+
if (this.timer)
|
|
158
|
+
clearTimeout(this.timer);
|
|
159
|
+
this.timer = null;
|
|
160
|
+
}
|
|
161
|
+
evictOldest() {
|
|
162
|
+
const first = this.partials.keys().next();
|
|
163
|
+
if (!first.done)
|
|
164
|
+
this.drop(first.value, "evicted");
|
|
165
|
+
}
|
|
166
|
+
remove(key) {
|
|
167
|
+
const p = this.partials.get(key);
|
|
168
|
+
if (!p)
|
|
169
|
+
return;
|
|
170
|
+
this.partials.delete(key);
|
|
171
|
+
this.declared -= p.len;
|
|
172
|
+
if (p.shared)
|
|
173
|
+
p.shared.used -= p.len;
|
|
174
|
+
if (this.partials.size === 0 && this.timer) {
|
|
175
|
+
clearTimeout(this.timer);
|
|
176
|
+
this.timer = null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
drop(key, reason) {
|
|
180
|
+
if (key !== null)
|
|
181
|
+
this.remove(key);
|
|
182
|
+
this.o.onDrop?.(reason);
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
/** Free memory of stalled partials even if no further fragment ever arrives. */
|
|
186
|
+
arm() {
|
|
187
|
+
if (this.timer || this.o.now)
|
|
188
|
+
return; // an injected clock means the caller sweeps
|
|
189
|
+
this.timer = setTimeout(() => {
|
|
190
|
+
this.timer = null;
|
|
191
|
+
this.sweep();
|
|
192
|
+
if (this.partials.size > 0)
|
|
193
|
+
this.arm();
|
|
194
|
+
}, this.timeoutMs);
|
|
195
|
+
this.timer.unref?.();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=fragment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment.js","sourceRoot":"","sources":["../../src/web/fragment.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,0GAA0G;AAC1G,6GAA6G;AAC7G,gHAAgH;AAChH,EAAE;AACF,sFAAsF;AACtF,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAEhE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AACpD,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC;AAE9B,MAAM,MAAM,GAAG,KAAK,EAAE,CAAa,EAAE,EAAE,CACtC,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9D,0GAA0G;AAC1G,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC7B,GAAe,EACf,QAAQ,GAAG,iBAAiB;IAE5B,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC;IACrC,IAAI,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1D,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QACd,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACb,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrB,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChB,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAgCD,uHAAuH;AACvH,MAAM,OAAO,WAAW;IAUH,CAAC;IATb,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IACtC,QAAQ,GAAG,CAAC,CAAC;IACb,KAAK,GAAyC,IAAI,CAAC;IACnD,UAAU,CAAS;IACnB,eAAe,CAAS;IACxB,MAAM,CAAc;IACX,SAAS,CAAS;IAClB,GAAG,CAAe;IAEnC,YAAoB,CAAC,GAAuB,EAAE;iBAA1B,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,eAAe,IAAI,mBAAmB,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,CAIT;QACA,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,eAAe,CAAC;QACzE,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS;YAClC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;QAC1C,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;IACjE,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3B,CAAC;IACD,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,qGAAqG;IACrG,KAAK,CAAC,IAAI,CAAC,KAAiB;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,CAAC,MAAM,IAAI,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM;YACrD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,EAAE,CAAC;YACR,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;YACvE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,aAAa,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,IAAI,KAAK;gBACpE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;YAC9C,OACC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;gBACtB,IAAI,CAAC,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe;gBAE1C,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG;oBAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,IAAI,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,GAAG;oBACjC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC;gBACnD,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC;YACpB,CAAC;YACD,CAAC,GAAG;gBACH,KAAK;gBACL,GAAG;gBACH,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE;gBAClB,KAAK,EAAE,IAAI,GAAG,EAAE;gBAChB,GAAG,EAAE,CAAC;gBACN,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;gBACnB,MAAM;aACN,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;YACrB,IAAI,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC;aAAM,IACN,CAAC,CAAC,KAAK,KAAK,KAAK;YACjB,CAAC,CAAC,GAAG,KAAK,GAAG;YACb,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;YACzB,GAAG,IAAI,KAAK,EACX,CAAC;YACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,YAAY;QAC/C,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QAC5E,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;QACrB,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;YACzC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,oDAAoD;IACpD,KAAK;QACJ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ;YACjC,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,KAAK;QACJ,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,CAAC,MAAM;gBAAE,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,KAAK;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAEO,WAAW;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAEO,MAAM,CAAC,GAAW;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC;YAAE,OAAO;QACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACnB,CAAC;IACF,CAAC;IAEO,IAAI,CAAC,GAAkB,EAAE,MAAc;QAC9C,IAAI,GAAG,KAAK,IAAI;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,gFAAgF;IACxE,GAAG;QACV,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG;YAAE,OAAO,CAAC,4CAA4C;QAClF,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;gBAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAClB,IAAI,CAAC,KAAgC,CAAC,KAAK,EAAE,EAAE,CAAC;IAClD,CAAC;CACD"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type { Role, TrustRoot } from "./admission.js";
|
|
2
|
+
export { canIssue, idMatchesPub, isDeviceId } from "./admission.js";
|
|
3
|
+
export { deriveDocKey, openUpdate, sealUpdate } from "./crypto.js";
|
|
4
|
+
export type { Exchange, HealthRecord } from "./exchange.js";
|
|
5
|
+
export { exchange, exchangeTopic, HEALTH_SCHEMA_PREFIX, isHealthRecord, } from "./exchange.js";
|
|
6
|
+
export type { PairPayload } from "./pairing.js";
|
|
7
|
+
export { decodePairPayload } from "./pairing.js";
|
|
8
|
+
export { deviceIdOf, IDENTITY_ALG, identityKeygen, identitySign, identityVerify, KEM_ALG, kemKeygen, ML_DSA_PUBLIC_KEY_BYTES, ML_DSA_SIGNATURE_BYTES, ML_KEM_CIPHERTEXT_BYTES, ML_KEM_PUBLIC_KEY_BYTES, } from "./pq.js";
|
|
9
|
+
export type { Mesh, MeshChannel, MeshEvent, MeshOptions, MeshSecurity, MeshStatus, PairHostOptions, PairJoinResult, PairOffer, } from "./provider.js";
|
|
10
|
+
export { createMesh } from "./provider.js";
|
|
11
|
+
export type { TopicScope } from "./rooms.js";
|
|
12
|
+
export { derivePairRoomId, deriveRoomId, fingerprint, legacyNamespace, meshNamespace, topic, } from "./rooms.js";
|
|
13
|
+
export type { RotDoc } from "./rotation.js";
|
|
14
|
+
export { isRotDoc, MAX_ROT_MEMBERS } from "./rotation.js";
|
|
15
|
+
export type { KexDoc, SecDoc } from "./secstate.js";
|
|
16
|
+
export { MAX_MEMBERS_PER_ADMIN, MESH_MODULE, MESH_SCHEMA, SecurityState, } from "./secstate.js";
|
|
17
|
+
export type { MeshStore } from "./store.js";
|
|
18
|
+
export { idbStore, memoryStore } from "./store.js";
|
|
19
|
+
export type { LoopbackHub } from "./transports/loopback.js";
|
|
20
|
+
export { createLoopbackHub } from "./transports/loopback.js";
|
|
21
|
+
export type { QrSdpTransport } from "./transports/qr-sdp.js";
|
|
22
|
+
export { qrSdpTransport } from "./transports/qr-sdp.js";
|
|
23
|
+
export { wsTransport } from "./transports/ws.js";
|
|
24
|
+
export type { Device, LinkTransport, PeerLink, RtcOptions, SigMessage, SignalingChannel, SigTransport, VaultClient, } from "./types.js";
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EACN,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,cAAc,GACd,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,OAAO,EACP,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,SAAS,CAAC;AACjB,YAAY,EACX,IAAI,EACJ,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,cAAc,EACd,SAAS,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,aAAa,EACb,KAAK,GACL,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EACN,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,aAAa,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EACX,MAAM,EACN,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,GACX,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { canIssue, idMatchesPub, isDeviceId } from "./admission.js";
|
|
2
|
+
export { deriveDocKey, openUpdate, sealUpdate } from "./crypto.js";
|
|
3
|
+
export { exchange, exchangeTopic, HEALTH_SCHEMA_PREFIX, isHealthRecord, } from "./exchange.js";
|
|
4
|
+
export { decodePairPayload } from "./pairing.js";
|
|
5
|
+
export { deviceIdOf, IDENTITY_ALG, identityKeygen, identitySign, identityVerify, KEM_ALG, kemKeygen, ML_DSA_PUBLIC_KEY_BYTES, ML_DSA_SIGNATURE_BYTES, ML_KEM_CIPHERTEXT_BYTES, ML_KEM_PUBLIC_KEY_BYTES, } from "./pq.js";
|
|
6
|
+
export { createMesh } from "./provider.js";
|
|
7
|
+
export { derivePairRoomId, deriveRoomId, fingerprint, legacyNamespace, meshNamespace, topic, } from "./rooms.js";
|
|
8
|
+
export { isRotDoc, MAX_ROT_MEMBERS } from "./rotation.js";
|
|
9
|
+
export { MAX_MEMBERS_PER_ADMIN, MESH_MODULE, MESH_SCHEMA, SecurityState, } from "./secstate.js";
|
|
10
|
+
export { idbStore, memoryStore } from "./store.js";
|
|
11
|
+
export { createLoopbackHub } from "./transports/loopback.js";
|
|
12
|
+
export { qrSdpTransport } from "./transports/qr-sdp.js";
|
|
13
|
+
export { wsTransport } from "./transports/ws.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EACN,QAAQ,EACR,aAAa,EACb,oBAAoB,EACpB,cAAc,GACd,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,cAAc,EACd,OAAO,EACP,SAAS,EACT,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,SAAS,CAAC;AAYjB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,EACN,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,aAAa,EACb,KAAK,GACL,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EACN,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,aAAa,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { StoredOp } from "../oplog/types.js";
|
|
2
|
+
/** Minimal op shape the strategies need (an accepted web/oplog op maps 1:1 via `toMergeOp`). */
|
|
3
|
+
export interface MergeOp {
|
|
4
|
+
id: string;
|
|
5
|
+
author: string;
|
|
6
|
+
seq: number;
|
|
7
|
+
hlc: string;
|
|
8
|
+
entityId: string;
|
|
9
|
+
action: string;
|
|
10
|
+
payload?: unknown;
|
|
11
|
+
base?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const toMergeOp: (s: StoredOp) => MergeOp;
|
|
14
|
+
export interface MergeStrategy<S> {
|
|
15
|
+
readonly kind: string;
|
|
16
|
+
project(ops: readonly MergeOp[]): S;
|
|
17
|
+
}
|
|
18
|
+
export declare const compareMergeOps: (a: MergeOp, b: MergeOp) => number;
|
|
19
|
+
/** Payload of an lww-field op. */
|
|
20
|
+
export interface LwwPayload {
|
|
21
|
+
set?: Record<string, unknown>;
|
|
22
|
+
unset?: string[];
|
|
23
|
+
/** tombstone the entity */
|
|
24
|
+
delete?: true;
|
|
25
|
+
/** undo every delete this op causally saw (gate who may restore with TrustSchema.actionLevel) */
|
|
26
|
+
restore?: true;
|
|
27
|
+
}
|
|
28
|
+
export interface LwwEntity {
|
|
29
|
+
id: string;
|
|
30
|
+
fields: Record<string, unknown>;
|
|
31
|
+
deleted: boolean;
|
|
32
|
+
/** field -> id of the winning op */
|
|
33
|
+
winners: Record<string, string>;
|
|
34
|
+
/** id of the last op in total order: use it as `base` for the next edit of this entity */
|
|
35
|
+
latest: string;
|
|
36
|
+
}
|
|
37
|
+
export interface LwwOptions {
|
|
38
|
+
/**
|
|
39
|
+
* Precedence for CONCURRENT edits of a field (neither saw the other via `base`/own history): higher rank wins,
|
|
40
|
+
* then HLC. Typical: owner 3 > admin 2 > staff 1 (derive it from web/trust grants). Without it: plain LWW by HLC.
|
|
41
|
+
*/
|
|
42
|
+
rank?: (author: string) => number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Per-field last-writer-wins. Causality comes from `base` (id of the latest op on the entity the author had seen)
|
|
46
|
+
* plus the author's own earlier ops: a causally later write always beats an earlier one; concurrent writes are
|
|
47
|
+
* resolved by `rank` then (hlc, author, seq). Delete = tombstone that wins over concurrent edits; only a `restore`
|
|
48
|
+
* that saw the delete brings the entity back.
|
|
49
|
+
*/
|
|
50
|
+
export declare function lwwField(opts?: LwwOptions): MergeStrategy<Map<string, LwwEntity>>;
|
|
51
|
+
export type EventResult<S> = {
|
|
52
|
+
state: S;
|
|
53
|
+
} | {
|
|
54
|
+
reject: string;
|
|
55
|
+
};
|
|
56
|
+
export interface EventReducer<S> {
|
|
57
|
+
init(entityId: string): S;
|
|
58
|
+
/** pure transition (e.g. an order state machine); `{ reject }` = invalid transition, state unchanged */
|
|
59
|
+
apply(state: S, op: MergeOp): EventResult<S>;
|
|
60
|
+
}
|
|
61
|
+
export interface EventEntity<S> {
|
|
62
|
+
id: string;
|
|
63
|
+
state: S;
|
|
64
|
+
/** ids of ops that changed the state, in fold order */
|
|
65
|
+
applied: string[];
|
|
66
|
+
/** rejected transitions (shown as "conflict" in the UI) */
|
|
67
|
+
conflicts: {
|
|
68
|
+
opId: string;
|
|
69
|
+
author: string;
|
|
70
|
+
reason: string;
|
|
71
|
+
}[];
|
|
72
|
+
}
|
|
73
|
+
/** Append-only events folded per entity by an app reducer, in (hlc, author, seq) order. */
|
|
74
|
+
export declare function eventLog<S>(reducer: EventReducer<S>): MergeStrategy<Map<string, EventEntity<S>>>;
|
|
75
|
+
export interface LedgerAccount {
|
|
76
|
+
id: string;
|
|
77
|
+
balance: number;
|
|
78
|
+
/** accepted movement ids, in fold order */
|
|
79
|
+
movements: string[];
|
|
80
|
+
rejected: {
|
|
81
|
+
opId: string;
|
|
82
|
+
author: string;
|
|
83
|
+
reason: string;
|
|
84
|
+
}[];
|
|
85
|
+
/** "flag" mode: the balance went below zero at some point (alert) */
|
|
86
|
+
wentNegative: boolean;
|
|
87
|
+
}
|
|
88
|
+
export interface LedgerOptions {
|
|
89
|
+
/**
|
|
90
|
+
* reject (default): a movement that would leave the account below zero is rejected (deterministic: in total order).
|
|
91
|
+
* flag: applied, account marked `wentNegative` (alert). allow: no check. A function decides per account.
|
|
92
|
+
*/
|
|
93
|
+
negative?: "reject" | "flag" | "allow" | ((account: string) => "reject" | "flag" | "allow");
|
|
94
|
+
/** amount of a movement; default `payload.amount`. Use integers (minor units / grams) for exact sums. */
|
|
95
|
+
amount?: (op: MergeOp) => number | null | undefined;
|
|
96
|
+
}
|
|
97
|
+
/** Signed movements summed per account (entityId). No conflicts: stock/balance = sum. */
|
|
98
|
+
export declare function ledger(opts?: LedgerOptions): MergeStrategy<Map<string, LedgerAccount>>;
|
|
99
|
+
/** module -> strategy. `project(module, ops)` folds accepted ops of that module. */
|
|
100
|
+
export declare function createProjector<M extends Record<string, MergeStrategy<unknown>>>(modules: M): {
|
|
101
|
+
modules: M;
|
|
102
|
+
project<K extends keyof M & string>(module: K, ops: readonly (MergeOp | StoredOp)[]): ReturnType<M[K]["project"]>;
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web/merge/index.ts"],"names":[],"mappings":"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"}
|