{"_id":"@eden_labs/branch","_rev":"2-6e6ded2e7fa31a4739a237207a03f75a","name":"@eden_labs/branch","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@eden_labs/branch","version":"0.1.0","license":"MIT","_id":"@eden_labs/branch@0.1.0","maintainers":[{"name":"maison-damarante","email":"maysondamarante@hotmail.com"}],"homepage":"https://github.com/Eden-Labs-Community/branch#readme","bugs":{"url":"https://github.com/Eden-Labs-Community/branch/issues"},"dist":{"shasum":"907514014b0cddfe8eefa2618f6c9e2cf52dfa86","tarball":"https://registry.npmjs.org/@eden_labs/branch/-/branch-0.1.0.tgz","fileCount":2,"integrity":"sha512-pUYHQjjlef4ShG085wglijgORlsCTbYtrORsPVny6LO94xxp1STn4r2j5QeoDIisIoGNJeH1L8yDuQEML1Oumg==","signatures":[{"sig":"MEQCIFR1g+yUc1C+l+h5UJEJUQNdbXhAGF7UhT+xV+4w0aUmAiAwz3rhHJ+tIaS5m9WTbXBmr9EXQfOQ5Wl5UmvHbrTUuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5119},"type":"module","exports":"./server.js","gitHead":"90468785112a8f0abdfba2652278f907892d0be7","scripts":{"test":"node --test test/*.test.js","start":"node server.js"},"_npmUser":{"name":"maison-damarante","email":"maysondamarante@hotmail.com"},"repository":{"url":"git+https://github.com/Eden-Labs-Community/branch.git","type":"git"},"_npmVersion":"11.6.1","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ws":"^8.18.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/branch_0.1.0_1774626046656_0.5819948464319027","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@eden_labs/branch","version":"0.1.1","type":"module","exports":"./server.js","scripts":{"test":"node --test test/*.test.js","start":"node server.js"},"dependencies":{"ws":"^8.18.0"},"repository":{"type":"git","url":"git+https://github.com/Eden-Labs-Community/branch.git"},"license":"MIT","gitHead":"11f689e16030f00442aa9ffb94616dc2ad640933","_id":"@eden_labs/branch@0.1.1","description":"Servidor de sinalizacao para redes P2P mesh. Gerencia descoberta de peers, sinalizacao para NAT hole punching e entrega de mensagens entre peers online.","bugs":{"url":"https://github.com/Eden-Labs-Community/branch/issues"},"homepage":"https://github.com/Eden-Labs-Community/branch#readme","_nodeVersion":"24.10.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-YQmP0XF95Q9hOUd+NKNV8vjwNPpeaiK1f3QJLPyazBQIiu088r/0ChWjtfGbxkEsbpR4FusBiB1Yzabnb3qC4Q==","shasum":"96e05826706841a042fd27c5aad8a531adfe36cc","tarball":"https://registry.npmjs.org/@eden_labs/branch/-/branch-0.1.1.tgz","fileCount":3,"unpackedSize":7814,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDX6CFKLmbzBz6gkQbRMb+mOxJw74xDW/LQykdMKp95OgIhAOLTt6JfG4YnnB8/GPzJ5W6jVQ/5EDzL6DCqdD/hgrKg"}]},"_npmUser":{"name":"maison-damarante","email":"maysondamarante@hotmail.com"},"directories":{},"maintainers":[{"name":"maison-damarante","email":"maysondamarante@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/branch_0.1.1_1774626474216_0.3126770578412361"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-27T15:40:46.564Z","modified":"2026-03-27T15:47:55.001Z","0.1.0":"2026-03-27T15:40:46.785Z","0.1.1":"2026-03-27T15:47:54.883Z"},"bugs":{"url":"https://github.com/Eden-Labs-Community/branch/issues"},"license":"MIT","homepage":"https://github.com/Eden-Labs-Community/branch#readme","repository":{"type":"git","url":"git+https://github.com/Eden-Labs-Community/branch.git"},"maintainers":[{"name":"maison-damarante","email":"maysondamarante@hotmail.com"}],"readme":"# @eden_labs/branch\n\nServidor de sinalizacao para redes P2P mesh. Gerencia descoberta de peers, sinalizacao para NAT hole punching e entrega de mensagens entre peers online.\n\n## Instalacao\n\n```bash\nnpm install @eden_labs/branch\n```\n\n## Uso rapido\n\n```js\nimport { WebSocketServer } from 'ws'\nimport { createSignalingServer } from '@eden_labs/branch'\n\nconst wss = new WebSocketServer({ port: 8080 })\nawait createSignalingServer({ wss })\n```\n\n## Opcoes\n\n```js\nawait createSignalingServer({\n  wss,                        // WebSocketServer (obrigatorio)\n  storage: fileStorage,       // implementacao de persistencia (default: fileStorage)\n  maxPeers: 50,               // max peers retornados no joined (default: 50)\n  cleanupTTL: 7 * 24 * 3600000, // tempo (ms) sem contato antes de remover peer\n  cleanupInterval: 3600000,   // intervalo (ms) entre limpezas periodicas\n})\n```\n\n### Retorno\n\n```js\nconst server = await createSignalingServer({ wss })\n\nserver.getOnline()    // Map<peerId, { ws, endpoint }> — peers conectados agora\nserver.getKnown()     // Map<peerId, { publicKey, lastSeen }> — todos os peers persistidos\nserver.cleanup()      // executa limpeza manual de peers expirados\nserver.stopCleanup()  // para o timer de limpeza periodica\n```\n\n## Protocolo\n\n### Descoberta de peers\n\n```\ncliente -> servidor:  { type: \"join\", peerId, publicKey }\nservidor -> cliente:  { type: \"joined\", peers: [{ peerId, publicKey }] }\nservidor -> broadcast: { type: \"peer_connected\", peerId, publicKey }\nservidor -> broadcast: { type: \"peer_disconnected\", peerId }\n```\n\n### Sinalizacao P2P\n\n```\ncliente -> servidor:  { type: \"register\", peerId, endpoint: { host, port } }\nservidor -> cliente:  { type: \"registered\" }\n\ncliente -> servidor:  { type: \"request_connect\", myId, targetId }\nservidor -> cliente:  { type: \"peer_endpoint\", peerId, endpoint, publicKey }\n                   ou { type: \"error\", reason: \"peer_not_found\" }\n```\n\n### Mensagens entre peers\n\n```\ncliente -> servidor:  { type: \"send\", targetPeerId, payload }\nservidor -> target:   { type: \"message\", fromPeerId, payload }\n```\n\n`fromPeerId` e derivado do WebSocket (quem mandou), nao declarado na mensagem. Mensagens para peers offline sao descartadas silenciosamente.\n\n## Storage customizado\n\nO `fileStorage` padrao grava em `data/known-peers.json`. Para usar outro backend (Redis, SQLite, etc.), passe um objeto com a mesma interface:\n\n```js\nconst customStorage = {\n  async load() {\n    // retorna Map<peerId, { publicKey, lastSeen }>\n  },\n  async save(peers) {\n    // recebe Map<peerId, { publicKey, lastSeen }>\n  }\n}\n\nawait createSignalingServer({ wss, storage: customStorage })\n```\n\n## Testes\n\n```bash\nnpm test\n```\n\n## Licenca\n\nMIT\n","readmeFilename":"README.md","description":"Servidor de sinalizacao para redes P2P mesh. Gerencia descoberta de peers, sinalizacao para NAT hole punching e entrega de mensagens entre peers online."}