{"_id":"signal-channel","_rev":"45-e15a3f35f6579c382ac5563769a99b7e","name":"signal-channel","description":"A signal channel that empowers webrtc","dist-tags":{"latest":"0.7.0"},"versions":{"0.1.0":{"name":"signal-channel","version":"0.1.0","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.1.0","dist":{"shasum":"b77af0be67c39b3c310ec384b8e46a8dc14b7cfc","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.1.0.tgz","integrity":"sha512-aN5RNZbUr/f0IxGMgwnfgWzL1IGrjTrAhA3aQz7amyjNktEEW2I7tZ8WYtNA5xXTwRduu2l022uPCDZsWKEQ2A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvH9PV2THQW1B0ZaVzSIE+/ghqd47229ydjMhM9LbybAIgOmSXRooiejN7K45BPouJq2L4PCbBn/W/6HnUbnZVAP0="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.1.1":{"name":"signal-channel","version":"0.1.1","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.0"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.1.1","dist":{"shasum":"97c734c923e37fdd3e8acfe42c1e408284c4bd90","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.1.1.tgz","integrity":"sha512-A8FtHOzjBoaVGvwjHxdqOneX/WM7MgFT1kfaVrrUyjVdplzDFIXAADU55Cf2MwGN0Mst3tmkMMctydLaK0tH5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6nCCcJo0ZjxNns3KcuktGdB0eyOJD2HDRWHuoarNCsAIgUh+Yuny73ZfZTRkZSYX2vZsR98v3PXoMnFUfFMTHiSU="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.1.2":{"name":"signal-channel","version":"0.1.2","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.1.2","dist":{"shasum":"39a4328c970f3e1dd9772791c0e7dc414cc5dc61","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.1.2.tgz","integrity":"sha512-KftyT7xnRS8M/CPZveUHzaR/I/tWA6z/b1R62h4vJsuJ5fd5J2AnaDabcdRYNSmHtfQIJ3/1weErKkYqPNatkA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFW2CbAoAAWzpoWSAQ9Im+oC3kqrhbNa4tE3tVcaeiY5AiAymFZl2hVYPRXdALU1Sw9KrDTsuyf+bcHPqEaLAAftJw=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.1.3":{"name":"signal-channel","version":"0.1.3","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.1.3","dist":{"shasum":"34e6ee7c02f2e7b6e8b83ae03ecb1f1f06b64aad","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.1.3.tgz","integrity":"sha512-KZTasrnDXYc6jk5tlymm8JuC40OChCMXkn3XkIUPqANiHzb6r4BqBNzaneX32UDH8HncIzHdRuPlt1isjo+nww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC1OqSdNXZtN5vllWusSFUhOsMBYh1BYlq0VL01mSF4eAIhAJjHIapeba9r+06c4FT6LcZh2idblzNBcawkNLPFGnJr"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.0":{"name":"signal-channel","version":"0.2.0","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.0","dist":{"shasum":"7b4f23ea33a74549ea11d6664335e223d5a91b3b","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.0.tgz","integrity":"sha512-dSHjXUEqb2sXS/prC53y4Dx3CQVsUjm/agk/wnZvNxIhWZ8PpfijeSgrmlB/JOXpeCr/tE/DIYWuJ/gpGHfP+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDEq8c0HtVzhGArMZlgfxraxxL9PNctFI+uZ9aQPCYVeAiEAxuFY2pcAm413VpCyj3Txbk2JeP4TJJ0vsaeRNlX7tJo="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.1":{"name":"signal-channel","version":"0.2.1","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.1","dist":{"shasum":"e98ee3497e45444a8392f7c96057262f426ee03e","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.1.tgz","integrity":"sha512-HOjumETczxtjVLaST5pOdtgT8Y+lg8aVviLjO3yU7i/1t8Ntj4OwlDq7ARawz3+3OCE3S4C651yM2Fe/EXMvEA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHGKGtllpq4DevBN+0bc9As4harPCH1oBoCVWk8Uq3ZDAiEAmFVVTQskWUjVAaPX6Wow2+g5Pmg7RTzie6nHwT0f4ho="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.2":{"name":"signal-channel","version":"0.2.2","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.2","dist":{"shasum":"905fc378510803e9c533658b865e538c3cf65fc4","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.2.tgz","integrity":"sha512-EE1m6hHCMXrmWyqyNvqiynlH+evSw9vZTDNSYYTX3C527ccOAP3k9gMXOglnEipI04M4CDjhdwlsouiaY55+aw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJbn3N4stAQum2tB6gbZX6JZirYaS0yiOe9vpTDBuJ4AIgKmv9iJbtKx9/G7Jg0286U+xpo91dtWKl4RmgGmci8HQ="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.3":{"name":"signal-channel","version":"0.2.3","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.3","dist":{"shasum":"2c435a5265a969e44323cfd8d335a01f93e3c174","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.3.tgz","integrity":"sha512-4RKjGxln1jNuhNwOclW4LabOnwKab8syFnIAVeeBIqeDwVHFIJOpU1B4LspgQm4JT4VcjfqaOkek1Tp9bBk0JA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2NhLtCnDQIO24SpIN3CTpZHl9aOJ6glZsJCkV4LFjHgIhAJFF5waCK9gUpu7IDQb7B2nEg/B8+3fFIIGlG0TTzEG4"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.4":{"name":"signal-channel","version":"0.2.4","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1","read-write-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.4","dist":{"shasum":"94e1c4169ca5bee7d776b4365d9dff3db6390d79","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.4.tgz","integrity":"sha512-r+pLQhuukBiD2YXkZBKlPzhgEOxhtCBuLu1pNI/oEPCtRFrL8rD7VvAcLRoAsM6cFJFGQuQ/lEMVqmhZgKf6fg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDqeHORKEM+e42+J3/ahwJFY6Uc9eqeV+7ELeMyu0a8pAiEAoZFLn0J82d8V7rpxfusfXQRZHXft0VtWy5WnfzYxuXI="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.5":{"name":"signal-channel","version":"0.2.5","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1","read-write-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.5","dist":{"shasum":"920f1746ece09ae4e619ec8c70a5f549586966e9","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.5.tgz","integrity":"sha512-rSjmdOE9Le/xShxohWpCDEYxxW1HUVGby9IlJPzbCSJrrtGKKt3M+ass89AqwZgWddiPdY5+tP2QbBtfODLtOg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIATL09fEYUr6x8ebfaQyiWj+Si+KPlLoFs2vj3W9W/zNAiBTCxg5e+CCZHU2MWUvMHfHBJywDFcTyRuYa4eTko2dXg=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.7":{"name":"signal-channel","version":"0.2.7","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1","read-write-stream":"~0.1.4","expiry-model":"~0.1.2","mux-demux-logger":"~0.1.0"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.7","dist":{"shasum":"1bdd98e25c1eb562f6ac3d86c345162ca7fe22f2","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.7.tgz","integrity":"sha512-jAQq8Fddij+OEpq562nZG+76oIvFEtJNxbEObEooznbZNJ/0/Miw7nWpiFsMi9MPrA6TZiP77tEhpWz4470JFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBSRdvNmfL5jYfimS+e2tHeXqGLoblr13CJqMZVjY5fpAiEA49gi+Xiao2a7EM6c/GoWQ1JOjL2XrAIFn5Ct9Y252HQ="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.8":{"name":"signal-channel","version":"0.2.8","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1","expiry-model":"~0.1.2","mux-demux-logger":"~0.1.0","through":"~1.1.2"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.8","dist":{"shasum":"4ca67fc7caaeba681021f5fcd37eb2833a81a4d0","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.8.tgz","integrity":"sha512-NEGEKPGkljAgi9iC/Lsql9Q+EZeblqcjVNZ36cX9Pm/2Mq/kibJMPlCS6h1FcYX/D5G1fpcWOadAaq5nwoGn3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFSv1oU5eVO1PI2YK/n0U3BLVi42CA30ew8hAcWYwylAAiEAvLMwYb1491ZOszMv1zS9EdJZXEZCyg0rPAbH68LDLxQ="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.9":{"name":"signal-channel","version":"0.2.9","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1","expiry-model":"~0.1.2","mux-demux-logger":"~0.1.0","through":"~1.1.2"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.9","dist":{"shasum":"cf8756ea2ca25db47175482e0d9df9a251dcba90","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.9.tgz","integrity":"sha512-4sg8CNAPODBiVWV5bty4dKJHYEYQGR5z2G5zmstV62JvLYq2dhTM7VhKw+zRWAUYZbKFJo1sO/IC0ayBhflfRA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2bvlKOLIXKz+7LYcrnyhFa4hGC5yAlpg/BoGD92nDTgIgKXzmNQeuQB6OnNB3XhKpw+U8o4eUa6nN9DD50fXitzk="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.2.10":{"name":"signal-channel","version":"0.2.10","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.5","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1","expiry-model":"~0.1.2","mux-demux-logger":"~0.1.0","through":"~1.1.2"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.2.10","dist":{"shasum":"3ba84c5728689bd271b877fed452ec6484c0b61e","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.2.10.tgz","integrity":"sha512-oJcW/Xhzqs6n2nIecb2+abfJFCT8aXz+t++xMb9OAfpLa26FufGbROqBJhBVXhan/mpTVqfI+n7oQZqmh5Nw3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDAq/jgMfV7HKpTIQxif5uuM2l2L6vWW3PDmuXru2SF9gIhAKF9PrSJN0FBnA6M4riLws4FEKpxO9XPtD5Vw4zvx1h8"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.3.0":{"name":"signal-channel","version":"0.3.0","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connection","dependencies":{"shoe":"0.0.7","mux-demux":"~3.3.6","individual":"~0.1.0","header-stream":"~0.1.4","lru-cache":"~2.1.0","streams2":"~0.1.0","stream-router":"~0.1.0","sockjs-stream":"~0.1.1","expiry-model":"~0.1.2","mux-demux-logger":"~0.1.0","through":"~1.1.2","peer-connection-shim":"~0.7.0","peer-nodes":"~0.1.3","reconnect":"~0.3.1","node-uuid":"~1.4.0","peer-connection-pool":"~0.2.0"},"devDependencies":{"tap":"~0.3.1"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.3.0","dist":{"shasum":"c9cda9bc6ed474f5c26fbff8e1d9724c3456ecab","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.3.0.tgz","integrity":"sha512-oQEedtxnlcd1ZYlqBhmWHtWC0Zwk8RzJWWbHtkiX6VuWa5QqwYtGMhv+fIkNmQexJ9ZDfbTO7f21C/usQJ1jbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEzz+MDfCkLgsEGetyZtGIGvtLBNcPobPSs8sUbjlkc1AiBDdF1OF+nt6Trzhw+yWNYLG+6EukYC9TRWtRKrUySdQA=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.4.0":{"name":"signal-channel","version":"0.4.0","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connect","dependencies":{"node-uuid":"~1.4.0","shoe":"0.0.7","mux-demux-logger":"~0.1.0","mux-demux":"~3.3.6","stream-router":"~0.1.0","mux-memo":"~0.1.1","peer-connection-shim":"~0.7.0","peer-nodes":"~0.1.4","reconnect":"~0.3.1","peer-connection-pool":"~0.2.2","through":"~1.1.2","lru-cache":"~2.1.0","streams2":"~0.1.1","header-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"browserify-server":"~2.1.2"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.4.0","dist":{"shasum":"227659c944407db0547999fde93bb5574508dc46","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.4.0.tgz","integrity":"sha512-DkZxLp3AfTECd33e+iz8yh9+Pz0UqAsYH7YnxZVDNAT/kjPoKv9/tXhT4jBUJnvH53C1AjVUWkBTx2MvZ0Q0LA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBUMa2L0FENXGsiDsmlhxNLeZ/EL6pppbObYKqAeecMlAiEAwyfekxB/XEgHjybG4Jp9/10rQMkTdbyszlIj3z8F3iM="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.5.0":{"name":"signal-channel","version":"0.5.0","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"browserify":"connect","dependencies":{"node-uuid":"~1.4.0","shoe":"0.0.7","mux-demux-logger":"~0.1.0","mux-demux":"~3.4.0","stream-router":"~0.1.0","mux-memo":"~0.1.1","peer-connection-shim":"~0.7.0","peer-nodes":"~0.1.4","reconnect":"~0.3.1","peer-connection-network":"~0.2.2","through":"~2.1.0","lru-cache":"~2.2.1","streams2":"~0.1.1","header-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"browserify-server":"~2.1.2"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test","start":"node server.js"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\n## Motivation\n\nWebRTC allows you to make a peer connection between two arbitary\n    browsers. To be able to do so you need to exchange session\n    descriptions that tell eachother where you are and how you\n    can open a peer connection.\n\nTo exchange these session descriptions you need a signal channel.\n    A server to which you can send descriptions and receive\n    descriptions.\n\nOnce you've done the handshake through the signal channel you\n    have an open peer to peer connection and don't need to deal\n    with the signal channel server.\n\nThat's exactly what this is. It's a signal channel. It's hosted\n    at `http://signalchannel.co/` and\n\nSignal channel gives you a central end point which streams so\n    you can easily make star shaped network topologies. That\n    basically means everyone connects to the centralized signal\n    channel server and the data flows through it to everyone.\n\n## Channel example\n\nA channel consists of two parts. A list of peers in the\n    signalling channel and a network interface to open\n    connections to them.\n\nFirst you listen to the network, then you wait to hear about\n    peers and then open connections.\n\nFor a true peer to peer system you should open connections\n    deterministically, i.e. only one of the peers should connect\n    the other should wait.\n\n```js\nvar SignalChannel = require(\"signal-channel\")\n    , uuid = require(\"node-uuid\")\n    , WriteStream = require(\"write-stream\")\n\n    , channel = SignalChannel(\"unique namespace\")\n    , peers = channel.createPeers()\n    , node = channel.createNode(onConnection)\n    , id = uuid()\n\npeers.on(\"join\", function (peer) {\n    if (peer.id <= id) {\n        // other side will open this connection\n        return\n    }\n\n    onConnection(node.connect(peer.id))\n})\n\nnode.listen(id)\npeers.join({ id: id })\n\nfunction onConnection(stream) {\n    stream.pipe(WriteStream(function (data) {\n        console.log(\"got data\", data, \"from\", stream.peerId)\n    }))\n\n    stream.write(\"some data to\" + id)\n}\n```\n\n## Echo Example\n\nAll the examples below work in either browser or node. You can\n    run the examples in the examples folder with `node index.js`\n    or `make build && open static/index.html`\n\nLet's say you want to send offers to other peers through the\nsignal channel.\n\n```js\nvar echo = require(\"signal-channel/echo\")\n    , RemoteEvents = require(\"remote-events\")\n\nvar stream1 = echo(\"optional namespace\")\n    , stream2 = echo(\"optional namespace\")\n    , ee1 = new RemoteEvents()\n    , ee2 = new RemoteEvents()\n\nstream1.pipe(ee1.getStream()).pipe(stream1)\nstream2.pipe(ee2.getStream()).pipe(stream2)\n\nee1.on(\"offer\", function (peer, offer) {\n    console.log(\"got offer\", offer, \"from peer\", peer)\n})\n\nee2.emit(\"offer\", \"peer id #222\", \"this is an offer\")\n```\n\nSignal channel doesn't give you magic out of the box. It gives\n    you simple primitives like `echo`. Echo is just an echo\n    stream.\n\nEvery time you connect to `echo` you get a stream which will\n    echo back anything you write to it. It also echos it to\n    everyone else connected to that namespace.\n\nIt's really simple to build a pub sub system on to of the `echo`\n    stream. Note that it's not distributed (unless you take the\n    server and implement it in a distributed fashion).\n\n## [Scuttlebutt][2] example\n\nSignal channel gives you a scuttlebutt end point. This is similar\n    to the echo endpoint except its slightly more clever.\n\nEcho just takes whatever you give it and broadcasts it to all\n    the streams connected to it. Scuttlebutt takes whatever you\n    gives it. Stores it in memory and passes that update along\n    to all the other streams.\n\nNote that signal channel uses [ExpiryModel][3] which is similar\n    to [Scuttlebutt/Model][4] except it expires keys and purges\n    them from memory, making it volatile storage.\n\n```js\n// Scuttlebutt stream connects to a single scuttlebutt model\n// for that namespace and allows you to set and get state from\n// it. Note that update gets called twice, once with the state\n// from the server and once with the state your overwrite it with\nvar scuttlebutt = require(\"signal-channel/scuttlebutt\")\n    , Model = require(\"scuttlebutt/model\")\n    , uuid = require(\"node-uuid\")\n\nvar stream3 = scuttlebutt(\"some other namespace\")\n    , stream4 = scuttlebutt(\"some other namespace\")\n\nvar m1 = Model()\n    , m2 = Model()\n\nstream3.pipe(m1.createStream()).pipe(stream3)\nstream4.pipe(m2.createStream()).pipe(stream4)\n\nm2.on(\"update\", function (key, value) {\n    console.log(\"update\", key, value)\n})\n\nm1.set(\"some key\", \"some value \" + uuid())\n```\n\n## Relay example\n\nThe third end end point provided by signal channel is a relay\n    end point.\n\nRelay allows you to use the signal channel as a relay server.\n    You open the relay stream and then pass a header which acts\n    as a handshake that's similar to webrtc.\n\nYou pass it a local and remote token and the other side is\n    supposed to pass the local and remote in the other order.\n\nWhen that is done signal channel will act as a relay forwarding\n    on all traffic between these two streams AND only those\n    two streams.\n\nThis is being used by [peer-connection-shim][5] to emulate\n    peer connection and data channels\n\n```js\n\n// Relay streams allow you to make a direct connection to\n// another stream via a relay. This involves a handshake and\n// exchanging local and remote identifiers\nvar relay = require(\"signal-channel/relay\")\n    , header = require(\"header-stream\")\n    , WriteStream = require(\"write-stream\")\n\nvar stream5 = header(relay(\"namespace is optional\"))\n    , stream6 = header(relay(\"namespace is optional\"))\n\nstream5.setHeader(\"local\", \"12\")\nstream5.setHeader(\"remote\", \"22\")\nstream5.writeHead()\n\nstream6.setHeader(\"local\", \"22\")\nstream6.setHeader(\"remote\", \"12\")\nstream6.writeHead()\n\nstream5.pipe(WriteStream(function (msg) {\n    console.log(\"relay message\", msg)\n}))\n\nstream6.write(\"hello! relay\")\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n  [2]: https://github.com/dominictarr/scuttlebutt\n  [3]: https://github.com/Raynos/expiry-model/blob/master/index.js\n  [4]: https://github.com/dominictarr/scuttlebutt#scuttlebuttmodel\n  [5]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.5.0","dist":{"shasum":"67536919d37d98dfd3517fdd0768cca89ecc0f67","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.5.0.tgz","integrity":"sha512-DOO9xQmPmJwwgQTZIMg0ghB9lI6EfmTl/5oWDg/1edh4KDXdnogDP3DGwB3W6q8MThoPVuGDDW7yhZ3z2kX74g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE57ARLujWS+5UHHXD3yEz5o3R9LvImW/IgtugqkXFIdAiAoMzDwBWch/CA60qnfswJMmWPN8lPKf81rYaYfn9WogQ=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.5.1":{"name":"signal-channel","version":"0.5.1","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"dependencies":{"node-uuid":"~1.4.0","shoe":"0.0.7","mux-demux-logger":"~0.1.0","mux-demux":"~3.4.0","stream-router":"~0.1.0","mux-memo":"~0.1.1","peer-connection-shim":"~0.7.0","peer-nodes":"~0.1.4","reconnect":"~0.3.1","peer-connection-network":"~0.2.2","through":"~2.1.0","lru-cache":"~2.2.1","streams2":"~0.1.1","header-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"browserify-server":"~2.1.2"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test","start":"node server.js"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\n## Motivation\n\nWebRTC allows you to make a peer connection between two arbitary\n    browsers. To be able to do so you need to exchange session\n    descriptions that tell eachother where you are and how you\n    can open a peer connection.\n\nTo exchange these session descriptions you need a signal channel.\n    A server to which you can send descriptions and receive\n    descriptions.\n\nOnce you've done the handshake through the signal channel you\n    have an open peer to peer connection and don't need to deal\n    with the signal channel server.\n\nThat's exactly what this is. It's a signal channel. It's hosted\n    at `http://signalchannel.co/` and\n\nSignal channel gives you a central end point which streams so\n    you can easily make star shaped network topologies. That\n    basically means everyone connects to the centralized signal\n    channel server and the data flows through it to everyone.\n\n## Channel example\n\nA channel consists of two parts. A list of peers in the\n    signalling channel and a network interface to open\n    connections to them.\n\nFirst you listen to the network, then you wait to hear about\n    peers and then open connections.\n\nFor a true peer to peer system you should open connections\n    deterministically, i.e. only one of the peers should connect\n    the other should wait.\n\n```js\nvar SignalChannel = require(\"signal-channel\")\n    , uuid = require(\"node-uuid\")\n    , WriteStream = require(\"write-stream\")\n\n    , channel = SignalChannel(\"unique namespace\")\n    , peers = channel.createPeers()\n    , node = channel.createNode(onConnection)\n    , id = uuid()\n\npeers.on(\"join\", function (peer) {\n    if (peer.id <= id) {\n        // other side will open this connection\n        return\n    }\n\n    onConnection(node.connect(peer.id))\n})\n\nnode.listen(id)\npeers.join({ id: id })\n\nfunction onConnection(stream) {\n    stream.pipe(WriteStream(function (data) {\n        console.log(\"got data\", data, \"from\", stream.peerId)\n    }))\n\n    stream.write(\"some data to\" + id)\n}\n```\n\n## Echo Example\n\nAll the examples below work in either browser or node. You can\n    run the examples in the examples folder with `node index.js`\n    or `make build && open static/index.html`\n\nLet's say you want to send offers to other peers through the\nsignal channel.\n\n```js\nvar echo = require(\"signal-channel/echo\")\n    , RemoteEvents = require(\"remote-events\")\n\nvar stream1 = echo(\"optional namespace\")\n    , stream2 = echo(\"optional namespace\")\n    , ee1 = new RemoteEvents()\n    , ee2 = new RemoteEvents()\n\nstream1.pipe(ee1.getStream()).pipe(stream1)\nstream2.pipe(ee2.getStream()).pipe(stream2)\n\nee1.on(\"offer\", function (peer, offer) {\n    console.log(\"got offer\", offer, \"from peer\", peer)\n})\n\nee2.emit(\"offer\", \"peer id #222\", \"this is an offer\")\n```\n\nSignal channel doesn't give you magic out of the box. It gives\n    you simple primitives like `echo`. Echo is just an echo\n    stream.\n\nEvery time you connect to `echo` you get a stream which will\n    echo back anything you write to it. It also echos it to\n    everyone else connected to that namespace.\n\nIt's really simple to build a pub sub system on to of the `echo`\n    stream. Note that it's not distributed (unless you take the\n    server and implement it in a distributed fashion).\n\n## [Scuttlebutt][2] example\n\nSignal channel gives you a scuttlebutt end point. This is similar\n    to the echo endpoint except its slightly more clever.\n\nEcho just takes whatever you give it and broadcasts it to all\n    the streams connected to it. Scuttlebutt takes whatever you\n    gives it. Stores it in memory and passes that update along\n    to all the other streams.\n\nNote that signal channel uses [ExpiryModel][3] which is similar\n    to [Scuttlebutt/Model][4] except it expires keys and purges\n    them from memory, making it volatile storage.\n\n```js\n// Scuttlebutt stream connects to a single scuttlebutt model\n// for that namespace and allows you to set and get state from\n// it. Note that update gets called twice, once with the state\n// from the server and once with the state your overwrite it with\nvar scuttlebutt = require(\"signal-channel/scuttlebutt\")\n    , Model = require(\"scuttlebutt/model\")\n    , uuid = require(\"node-uuid\")\n\nvar stream3 = scuttlebutt(\"some other namespace\")\n    , stream4 = scuttlebutt(\"some other namespace\")\n\nvar m1 = Model()\n    , m2 = Model()\n\nstream3.pipe(m1.createStream()).pipe(stream3)\nstream4.pipe(m2.createStream()).pipe(stream4)\n\nm2.on(\"update\", function (key, value) {\n    console.log(\"update\", key, value)\n})\n\nm1.set(\"some key\", \"some value \" + uuid())\n```\n\n## Relay example\n\nThe third end end point provided by signal channel is a relay\n    end point.\n\nRelay allows you to use the signal channel as a relay server.\n    You open the relay stream and then pass a header which acts\n    as a handshake that's similar to webrtc.\n\nYou pass it a local and remote token and the other side is\n    supposed to pass the local and remote in the other order.\n\nWhen that is done signal channel will act as a relay forwarding\n    on all traffic between these two streams AND only those\n    two streams.\n\nThis is being used by [peer-connection-shim][5] to emulate\n    peer connection and data channels\n\n```js\n\n// Relay streams allow you to make a direct connection to\n// another stream via a relay. This involves a handshake and\n// exchanging local and remote identifiers\nvar relay = require(\"signal-channel/relay\")\n    , header = require(\"header-stream\")\n    , WriteStream = require(\"write-stream\")\n\nvar stream5 = header(relay(\"namespace is optional\"))\n    , stream6 = header(relay(\"namespace is optional\"))\n\nstream5.setHeader(\"local\", \"12\")\nstream5.setHeader(\"remote\", \"22\")\nstream5.writeHead()\n\nstream6.setHeader(\"local\", \"22\")\nstream6.setHeader(\"remote\", \"12\")\nstream6.writeHead()\n\nstream5.pipe(WriteStream(function (msg) {\n    console.log(\"relay message\", msg)\n}))\n\nstream6.write(\"hello! relay\")\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n  [2]: https://github.com/dominictarr/scuttlebutt\n  [3]: https://github.com/Raynos/expiry-model/blob/master/index.js\n  [4]: https://github.com/dominictarr/scuttlebutt#scuttlebuttmodel\n  [5]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.5.1","dist":{"shasum":"cb734f61fa2979709c55650bfe404fef55710aca","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.5.1.tgz","integrity":"sha512-eRtIvPQ2fnrJQVEOySHs6sUpLxoLd8+aF7Kv4DqItyTwepXpIktcCcaYd/Xcrp+cm6vQQSyUS/jq3WH5XonmOw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHBi7WzhOPBB1f4oEwr+XLuxU9ZWFWaTqxbNhk9RCxEPAiBar/pywIIRyBGOLeMyV77XapkSybomMT6OJbZfsV6oVw=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.6.0":{"name":"signal-channel","version":"0.6.0","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"dependencies":{"node-uuid":"~1.4.0","shoe":"0.0.7","mux-demux-logger":"~0.1.0","mux-demux":"~3.4.0","stream-router":"~0.1.0","mux-memo":"~0.1.1","peer-connection-shim":"~0.7.0","peer-nodes":"~0.1.4","reconnect":"~0.3.1","peer-connection-network":"~0.2.2","through":"~2.1.0","lru-cache":"~2.2.1","streams2":"~0.1.1","header-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"browserify-server":"~2.1.2"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test","start":"node server.js"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\n## Motivation\n\nWebRTC allows you to make a peer connection between two arbitary\n    browsers. To be able to do so you need to exchange session\n    descriptions that tell eachother where you are and how you\n    can open a peer connection.\n\nTo exchange these session descriptions you need a signal channel.\n    A server to which you can send descriptions and receive\n    descriptions.\n\nOnce you've done the handshake through the signal channel you\n    have an open peer to peer connection and don't need to deal\n    with the signal channel server.\n\nThat's exactly what this is. It's a signal channel. It's hosted\n    at `http://signalchannel.co/` and\n\nSignal channel gives you a central end point which streams so\n    you can easily make star shaped network topologies. That\n    basically means everyone connects to the centralized signal\n    channel server and the data flows through it to everyone.\n\n## Channel example\n\nA channel consists of two parts. A list of peers in the\n    signalling channel and a network interface to open\n    connections to them.\n\nFirst you listen to the network, then you wait to hear about\n    peers and then open connections.\n\nFor a true peer to peer system you should open connections\n    deterministically, i.e. only one of the peers should connect\n    the other should wait.\n\n```js\nvar SignalChannel = require(\"signal-channel\")\n    , uuid = require(\"node-uuid\")\n    , WriteStream = require(\"write-stream\")\n\n    , channel = SignalChannel(\"unique namespace\")\n    , peers = channel.createPeers()\n    , node = channel.createNode(onConnection)\n    , id = uuid()\n\npeers.on(\"join\", function (peer) {\n    if (peer.id <= id) {\n        // other side will open this connection\n        return\n    }\n\n    onConnection(node.connect(peer.id))\n})\n\nnode.listen(id)\npeers.join({ id: id })\n\nfunction onConnection(stream) {\n    stream.pipe(WriteStream(function (data) {\n        console.log(\"got data\", data, \"from\", stream.peerId)\n    }))\n\n    stream.write(\"some data to\" + id)\n}\n```\n\n## Echo Example\n\nAll the examples below work in either browser or node. You can\n    run the examples in the examples folder with `node index.js`\n    or `make build && open static/index.html`\n\nLet's say you want to send offers to other peers through the\nsignal channel.\n\n```js\nvar echo = require(\"signal-channel/echo\")\n    , RemoteEvents = require(\"remote-events\")\n\nvar stream1 = echo(\"optional namespace\")\n    , stream2 = echo(\"optional namespace\")\n    , ee1 = new RemoteEvents()\n    , ee2 = new RemoteEvents()\n\nstream1.pipe(ee1.getStream()).pipe(stream1)\nstream2.pipe(ee2.getStream()).pipe(stream2)\n\nee1.on(\"offer\", function (peer, offer) {\n    console.log(\"got offer\", offer, \"from peer\", peer)\n})\n\nee2.emit(\"offer\", \"peer id #222\", \"this is an offer\")\n```\n\nSignal channel doesn't give you magic out of the box. It gives\n    you simple primitives like `echo`. Echo is just an echo\n    stream.\n\nEvery time you connect to `echo` you get a stream which will\n    echo back anything you write to it. It also echos it to\n    everyone else connected to that namespace.\n\nIt's really simple to build a pub sub system on to of the `echo`\n    stream. Note that it's not distributed (unless you take the\n    server and implement it in a distributed fashion).\n\n## [Scuttlebutt][2] example\n\nSignal channel gives you a scuttlebutt end point. This is similar\n    to the echo endpoint except its slightly more clever.\n\nEcho just takes whatever you give it and broadcasts it to all\n    the streams connected to it. Scuttlebutt takes whatever you\n    gives it. Stores it in memory and passes that update along\n    to all the other streams.\n\nNote that signal channel uses [ExpiryModel][3] which is similar\n    to [Scuttlebutt/Model][4] except it expires keys and purges\n    them from memory, making it volatile storage.\n\n```js\n// Scuttlebutt stream connects to a single scuttlebutt model\n// for that namespace and allows you to set and get state from\n// it. Note that update gets called twice, once with the state\n// from the server and once with the state your overwrite it with\nvar scuttlebutt = require(\"signal-channel/scuttlebutt\")\n    , Model = require(\"scuttlebutt/model\")\n    , uuid = require(\"node-uuid\")\n\nvar stream3 = scuttlebutt(\"some other namespace\")\n    , stream4 = scuttlebutt(\"some other namespace\")\n\nvar m1 = Model()\n    , m2 = Model()\n\nstream3.pipe(m1.createStream()).pipe(stream3)\nstream4.pipe(m2.createStream()).pipe(stream4)\n\nm2.on(\"update\", function (key, value) {\n    console.log(\"update\", key, value)\n})\n\nm1.set(\"some key\", \"some value \" + uuid())\n```\n\n## Relay example\n\nThe third end end point provided by signal channel is a relay\n    end point.\n\nRelay allows you to use the signal channel as a relay server.\n    You open the relay stream and then pass a header which acts\n    as a handshake that's similar to webrtc.\n\nYou pass it a local and remote token and the other side is\n    supposed to pass the local and remote in the other order.\n\nWhen that is done signal channel will act as a relay forwarding\n    on all traffic between these two streams AND only those\n    two streams.\n\nThis is being used by [peer-connection-shim][5] to emulate\n    peer connection and data channels\n\n```js\n\n// Relay streams allow you to make a direct connection to\n// another stream via a relay. This involves a handshake and\n// exchanging local and remote identifiers\nvar relay = require(\"signal-channel/relay\")\n    , header = require(\"header-stream\")\n    , WriteStream = require(\"write-stream\")\n\nvar stream5 = header(relay(\"namespace is optional\"))\n    , stream6 = header(relay(\"namespace is optional\"))\n\nstream5.setHeader(\"local\", \"12\")\nstream5.setHeader(\"remote\", \"22\")\nstream5.writeHead()\n\nstream6.setHeader(\"local\", \"22\")\nstream6.setHeader(\"remote\", \"12\")\nstream6.writeHead()\n\nstream5.pipe(WriteStream(function (msg) {\n    console.log(\"relay message\", msg)\n}))\n\nstream6.write(\"hello! relay\")\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n  [2]: https://github.com/dominictarr/scuttlebutt\n  [3]: https://github.com/Raynos/expiry-model/blob/master/index.js\n  [4]: https://github.com/dominictarr/scuttlebutt#scuttlebuttmodel\n  [5]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.6.0","dist":{"shasum":"de50f559ca919ca40e71e3184f32d1096f1bde23","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.6.0.tgz","integrity":"sha512-FhJANMD6dfeBPFFdEVCHr6diLUsYtTbSS+vjrnj0JMYjRBoqv+QA3lJ1cxVzvJ+4sLe4OMauqTVGnd6dJd4AMg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDYMv+a9hwN57PDyPfp0e+uSrLb7HTgAdllHK/AE7ezvwIgH5u4DKEpewVy2iQ/M4H+rsT3jha3tvJf8CUM0IfIcvE="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.6.1":{"name":"signal-channel","version":"0.6.1","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"dependencies":{"node-uuid":"~1.4.0","shoe":"0.0.7","mux-demux-logger":"~0.1.0","mux-demux":"~3.4.0","stream-router":"~0.1.0","mux-memo":"~0.1.1","peer-connection-shim":"~0.7.0","peer-nodes":"~0.1.4","reconnect":"~0.3.1","peer-connection-network":"~0.2.2","through":"~2.1.0","lru-cache":"~2.2.1","streams2":"~0.1.1","header-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"browserify-server":"~2.1.2"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test","start":"node server.js"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\n## Motivation\n\nWebRTC allows you to make a peer connection between two arbitary\n    browsers. To be able to do so you need to exchange session\n    descriptions that tell eachother where you are and how you\n    can open a peer connection.\n\nTo exchange these session descriptions you need a signal channel.\n    A server to which you can send descriptions and receive\n    descriptions.\n\nOnce you've done the handshake through the signal channel you\n    have an open peer to peer connection and don't need to deal\n    with the signal channel server.\n\nThat's exactly what this is. It's a signal channel. It's hosted\n    at `http://signalchannel.co/` and\n\nSignal channel gives you a central end point which streams so\n    you can easily make star shaped network topologies. That\n    basically means everyone connects to the centralized signal\n    channel server and the data flows through it to everyone.\n\n## Channel example\n\nA channel consists of two parts. A list of peers in the\n    signalling channel and a network interface to open\n    connections to them.\n\nFirst you listen to the network, then you wait to hear about\n    peers and then open connections.\n\nFor a true peer to peer system you should open connections\n    deterministically, i.e. only one of the peers should connect\n    the other should wait.\n\n```js\nvar SignalChannel = require(\"signal-channel\")\n    , uuid = require(\"node-uuid\")\n    , WriteStream = require(\"write-stream\")\n\n    , channel = SignalChannel(\"unique namespace\")\n    , peers = channel.createPeers()\n    , node = channel.createNode(onConnection)\n    , id = uuid()\n\npeers.on(\"join\", function (peer) {\n    if (peer.id <= id) {\n        // other side will open this connection\n        return\n    }\n\n    onConnection(node.connect(peer.id))\n})\n\nnode.listen(id)\npeers.join({ id: id })\n\nfunction onConnection(stream) {\n    stream.pipe(WriteStream(function (data) {\n        console.log(\"got data\", data, \"from\", stream.peerId)\n    }))\n\n    stream.write(\"some data to\" + id)\n}\n```\n\n## Echo Example\n\nAll the examples below work in either browser or node. You can\n    run the examples in the examples folder with `node index.js`\n    or `make build && open static/index.html`\n\nLet's say you want to send offers to other peers through the\nsignal channel.\n\n```js\nvar echo = require(\"signal-channel/echo\")\n    , RemoteEvents = require(\"remote-events\")\n\nvar stream1 = echo(\"optional namespace\")\n    , stream2 = echo(\"optional namespace\")\n    , ee1 = new RemoteEvents()\n    , ee2 = new RemoteEvents()\n\nstream1.pipe(ee1.getStream()).pipe(stream1)\nstream2.pipe(ee2.getStream()).pipe(stream2)\n\nee1.on(\"offer\", function (peer, offer) {\n    console.log(\"got offer\", offer, \"from peer\", peer)\n})\n\nee2.emit(\"offer\", \"peer id #222\", \"this is an offer\")\n```\n\nSignal channel doesn't give you magic out of the box. It gives\n    you simple primitives like `echo`. Echo is just an echo\n    stream.\n\nEvery time you connect to `echo` you get a stream which will\n    echo back anything you write to it. It also echos it to\n    everyone else connected to that namespace.\n\nIt's really simple to build a pub sub system on to of the `echo`\n    stream. Note that it's not distributed (unless you take the\n    server and implement it in a distributed fashion).\n\n## [Scuttlebutt][2] example\n\nSignal channel gives you a scuttlebutt end point. This is similar\n    to the echo endpoint except its slightly more clever.\n\nEcho just takes whatever you give it and broadcasts it to all\n    the streams connected to it. Scuttlebutt takes whatever you\n    gives it. Stores it in memory and passes that update along\n    to all the other streams.\n\nNote that signal channel uses [ExpiryModel][3] which is similar\n    to [Scuttlebutt/Model][4] except it expires keys and purges\n    them from memory, making it volatile storage.\n\n```js\n// Scuttlebutt stream connects to a single scuttlebutt model\n// for that namespace and allows you to set and get state from\n// it. Note that update gets called twice, once with the state\n// from the server and once with the state your overwrite it with\nvar scuttlebutt = require(\"signal-channel/scuttlebutt\")\n    , Model = require(\"scuttlebutt/model\")\n    , uuid = require(\"node-uuid\")\n\nvar stream3 = scuttlebutt(\"some other namespace\")\n    , stream4 = scuttlebutt(\"some other namespace\")\n\nvar m1 = Model()\n    , m2 = Model()\n\nstream3.pipe(m1.createStream()).pipe(stream3)\nstream4.pipe(m2.createStream()).pipe(stream4)\n\nm2.on(\"update\", function (key, value) {\n    console.log(\"update\", key, value)\n})\n\nm1.set(\"some key\", \"some value \" + uuid())\n```\n\n## Relay example\n\nThe third end end point provided by signal channel is a relay\n    end point.\n\nRelay allows you to use the signal channel as a relay server.\n    You open the relay stream and then pass a header which acts\n    as a handshake that's similar to webrtc.\n\nYou pass it a local and remote token and the other side is\n    supposed to pass the local and remote in the other order.\n\nWhen that is done signal channel will act as a relay forwarding\n    on all traffic between these two streams AND only those\n    two streams.\n\nThis is being used by [peer-connection-shim][5] to emulate\n    peer connection and data channels\n\n```js\n\n// Relay streams allow you to make a direct connection to\n// another stream via a relay. This involves a handshake and\n// exchanging local and remote identifiers\nvar relay = require(\"signal-channel/relay\")\n    , header = require(\"header-stream\")\n    , WriteStream = require(\"write-stream\")\n\nvar stream5 = header(relay(\"namespace is optional\"))\n    , stream6 = header(relay(\"namespace is optional\"))\n\nstream5.setHeader(\"local\", \"12\")\nstream5.setHeader(\"remote\", \"22\")\nstream5.writeHead()\n\nstream6.setHeader(\"local\", \"22\")\nstream6.setHeader(\"remote\", \"12\")\nstream6.writeHead()\n\nstream5.pipe(WriteStream(function (msg) {\n    console.log(\"relay message\", msg)\n}))\n\nstream6.write(\"hello! relay\")\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n  [2]: https://github.com/dominictarr/scuttlebutt\n  [3]: https://github.com/Raynos/expiry-model/blob/master/index.js\n  [4]: https://github.com/dominictarr/scuttlebutt#scuttlebuttmodel\n  [5]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.6.1","dist":{"shasum":"43ab0283efb33517c19b1cd9a7cccad8eef8a7b0","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.6.1.tgz","integrity":"sha512-7lwn6ZTrOYNddrvxvkVwVmB4Wg8PVKqeql84YOAfsWmvzEg/B5sL4vJ0aQDAXxv/YUeJk00CVD7WFgxuEuRibw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDIyIyXihM1mFyyhoB7Uf6F/shMyQ7DUtOKA8AUsgjRFAiEA5MIzIvNSifRVaXKYJlVuzClHDfEz2zyZKHGh2tNyOSE="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]},"0.7.0":{"name":"signal-channel","version":"0.7.0","description":"A signal channel that empowers webrtc","keywords":["webrtc","p2p","peer","real-time","realtime","real","time","peer2peer"],"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"},"main":"index","homepage":"https://github.com/Raynos/signal-channel","contributors":[{"name":"Jake Verbaten"}],"bugs":{"url":"https://github.com/Raynos/signal-channel/issues","email":"raynos2@gmail.com"},"dependencies":{"node-uuid":"~1.4.0","shoe":"0.0.7","mux-demux-logger":"~0.1.0","mux-demux":"~3.4.0","stream-router":"~0.1.0","mux-memo":"~0.1.1","peer-connection-shim":"~0.7.2","peer-nodes":"~0.1.4","reconnect":"~0.3.1","peer-connection-network":"~0.4.0","through":"~2.1.0","lru-cache":"~2.2.1","streams2":"~0.1.1","header-stream":"~0.1.4","expiry-model":"~0.1.2"},"devDependencies":{"browserify-server":"~2.1.2"},"licenses":[{"type":"MIT","url":"http://github.com/Raynos/signal-channel/raw/master/LICENSE"}],"scripts":{"test":"tap --stderr --tap ./test","start":"node server.js"},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\n## Motivation\n\nWebRTC allows you to make a peer connection between two arbitary\n    browsers. To be able to do so you need to exchange session\n    descriptions that tell eachother where you are and how you\n    can open a peer connection.\n\nTo exchange these session descriptions you need a signal channel.\n    A server to which you can send descriptions and receive\n    descriptions.\n\nOnce you've done the handshake through the signal channel you\n    have an open peer to peer connection and don't need to deal\n    with the signal channel server.\n\nThat's exactly what this is. It's a signal channel. It's hosted\n    at `http://signalchannel.co/` and\n\nSignal channel gives you a central end point which streams so\n    you can easily make star shaped network topologies. That\n    basically means everyone connects to the centralized signal\n    channel server and the data flows through it to everyone.\n\n## Channel example\n\nA channel consists of two parts. A list of peers in the\n    signalling channel and a network interface to open\n    connections to them.\n\nFirst you listen to the network, then you wait to hear about\n    peers and then open connections.\n\nFor a true peer to peer system you should open connections\n    deterministically, i.e. only one of the peers should connect\n    the other should wait.\n\nNote that we pass in a boolean as to whether we've opened to\n    connection. The resulting peer connection we have is\n    multiplexed so we either have to listen for streams\n    that are opened or open one.\n\n```js\nvar SignalChannel = require(\"../../index\")\n    , uuid = require(\"node-uuid\")\n    , WriteStream = require(\"write-stream\")\n\n    , channel = SignalChannel(\"unique namespace\")\n    , peers = channel.createPeers()\n    , node = channel.createNode(onConnection)\n    , id = uuid()\n\npeers.on(\"join\", function (peer) {\n    if (peer.id <= id) {\n        // other side will open this connection\n        return\n    }\n\n    onConnection(node.connect(peer.id), true)\n})\n\nconsole.log(\"listening on\", id)\n\nnode.listen(id)\npeers.join({ id: id })\n\nfunction onConnection(pc, opened) {\n    if (opened) {\n        return next(pc.createStream(\"x\"))\n    }\n\n    pc.on(\"connection\", next)\n\n    function next(stream) {\n        stream.pipe(WriteStream(function (data) {\n            console.log(\"got data\", data, \"from\", pc.peerId)\n        }))\n\n        stream.write(\"some data to \" + pc.peerId)\n    }\n}\n\n```\n\n## Echo Example\n\nAll the examples below work in either browser or node. You can\n    run the examples in the examples folder with `node index.js`\n    or `make build && open static/index.html`\n\nLet's say you want to send offers to other peers through the\nsignal channel.\n\n```js\nvar echo = require(\"signal-channel/echo\")\n    , RemoteEvents = require(\"remote-events\")\n\nvar stream1 = echo(\"optional namespace\")\n    , stream2 = echo(\"optional namespace\")\n    , ee1 = new RemoteEvents()\n    , ee2 = new RemoteEvents()\n\nstream1.pipe(ee1.getStream()).pipe(stream1)\nstream2.pipe(ee2.getStream()).pipe(stream2)\n\nee1.on(\"offer\", function (peer, offer) {\n    console.log(\"got offer\", offer, \"from peer\", peer)\n})\n\nee2.emit(\"offer\", \"peer id #222\", \"this is an offer\")\n```\n\nSignal channel doesn't give you magic out of the box. It gives\n    you simple primitives like `echo`. Echo is just an echo\n    stream.\n\nEvery time you connect to `echo` you get a stream which will\n    echo back anything you write to it. It also echos it to\n    everyone else connected to that namespace.\n\nIt's really simple to build a pub sub system on to of the `echo`\n    stream. Note that it's not distributed (unless you take the\n    server and implement it in a distributed fashion).\n\n## [Scuttlebutt][2] example\n\nSignal channel gives you a scuttlebutt end point. This is similar\n    to the echo endpoint except its slightly more clever.\n\nEcho just takes whatever you give it and broadcasts it to all\n    the streams connected to it. Scuttlebutt takes whatever you\n    gives it. Stores it in memory and passes that update along\n    to all the other streams.\n\nNote that signal channel uses [ExpiryModel][3] which is similar\n    to [Scuttlebutt/Model][4] except it expires keys and purges\n    them from memory, making it volatile storage.\n\n```js\n// Scuttlebutt stream connects to a single scuttlebutt model\n// for that namespace and allows you to set and get state from\n// it. Note that update gets called twice, once with the state\n// from the server and once with the state your overwrite it with\nvar scuttlebutt = require(\"signal-channel/scuttlebutt\")\n    , Model = require(\"scuttlebutt/model\")\n    , uuid = require(\"node-uuid\")\n\nvar stream3 = scuttlebutt(\"some other namespace\")\n    , stream4 = scuttlebutt(\"some other namespace\")\n\nvar m1 = Model()\n    , m2 = Model()\n\nstream3.pipe(m1.createStream()).pipe(stream3)\nstream4.pipe(m2.createStream()).pipe(stream4)\n\nm2.on(\"update\", function (key, value) {\n    console.log(\"update\", key, value)\n})\n\nm1.set(\"some key\", \"some value \" + uuid())\n```\n\n## Relay example\n\nThe third end end point provided by signal channel is a relay\n    end point.\n\nRelay allows you to use the signal channel as a relay server.\n    You open the relay stream and then pass a header which acts\n    as a handshake that's similar to webrtc.\n\nYou pass it a local and remote token and the other side is\n    supposed to pass the local and remote in the other order.\n\nWhen that is done signal channel will act as a relay forwarding\n    on all traffic between these two streams AND only those\n    two streams.\n\nThis is being used by [peer-connection-shim][5] to emulate\n    peer connection and data channels\n\n```js\n\n// Relay streams allow you to make a direct connection to\n// another stream via a relay. This involves a handshake and\n// exchanging local and remote identifiers\nvar relay = require(\"signal-channel/relay\")\n    , header = require(\"header-stream\")\n    , WriteStream = require(\"write-stream\")\n\nvar stream5 = header(relay(\"namespace is optional\"))\n    , stream6 = header(relay(\"namespace is optional\"))\n\nstream5.setHeader(\"local\", \"12\")\nstream5.setHeader(\"remote\", \"22\")\nstream5.writeHead()\n\nstream6.setHeader(\"local\", \"22\")\nstream6.setHeader(\"remote\", \"12\")\nstream6.writeHead()\n\nstream5.pipe(WriteStream(function (msg) {\n    console.log(\"relay message\", msg)\n}))\n\nstream6.write(\"hello! relay\")\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n  [2]: https://github.com/dominictarr/scuttlebutt\n  [3]: https://github.com/Raynos/expiry-model/blob/master/index.js\n  [4]: https://github.com/dominictarr/scuttlebutt#scuttlebuttmodel\n  [5]: https://github.com/Raynos/peer-connection-shim\n","readmeFilename":"README.md","_id":"signal-channel@0.7.0","dist":{"shasum":"50a87a0cb8fd09beec37631d9cddfa94d191471b","tarball":"https://registry.npmjs.org/signal-channel/-/signal-channel-0.7.0.tgz","integrity":"sha512-vOcfjIfbSFnQI00I4+HP8Vcq9OV0gS5uIc+tpY9zb0S4aeKYHFQn0bW0bquzZTuToCXcmsVKamXncnnMECiLlg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDZiNNLIYrV025wC5//Z5X6XkdKDQgKHNJfeOJWxJIO2AiAT4t808yID5u1jyuTdndkP+LjWgPJG36hKFTBshQ8HeA=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"raynos","email":"raynos2@gmail.com"},"maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}]}},"readme":"# signal-channel\n\nA signal channel that empowers webrtc\n\nUsed internally by [`peer-connection-shim`][1].\n\nAllows you to open connections to a signal channel server.\n\n## Example\n\n```\nvar Conn = require(\"signal-channel/connection\")\n\n    , stream = Conn(\"http://myserver.com\", \"namespace\")\n\n// do stuff with stream\n```\n\n## Installation\n\n`npm install signal-channel`\n\n## Contributors\n\n - Raynos\n\n## MIT Licenced\n\n  [1]: https://github.com/Raynos/peer-connection-shim\n","maintainers":[{"name":"raynos","email":"raynos2@gmail.com"}],"time":{"modified":"2022-06-26T19:19:32.785Z","created":"2012-11-18T09:38:26.979Z","0.1.0":"2012-11-18T09:38:27.684Z","0.1.1":"2012-11-18T10:32:22.647Z","0.1.2":"2012-11-18T10:49:17.811Z","0.1.3":"2012-11-20T05:45:19.936Z","0.2.0":"2012-11-20T06:13:10.676Z","0.2.1":"2012-11-20T07:01:56.198Z","0.2.2":"2012-11-20T10:21:02.189Z","0.2.3":"2012-11-20T10:21:58.704Z","0.2.4":"2012-11-21T05:58:50.455Z","0.2.5":"2012-11-21T08:32:16.406Z","0.2.7":"2012-11-21T09:10:18.195Z","0.2.8":"2012-11-21T09:26:34.454Z","0.2.9":"2012-11-21T10:08:45.685Z","0.2.10":"2012-11-21T10:10:33.583Z","0.3.0":"2012-11-21T10:29:29.651Z","0.4.0":"2012-11-22T08:50:50.859Z","0.5.0":"2012-12-07T07:56:03.331Z","0.5.1":"2012-12-07T08:26:59.356Z","0.6.0":"2012-12-12T05:28:59.041Z","0.6.1":"2012-12-12T05:49:43.895Z","0.7.0":"2012-12-12T06:08:51.522Z"},"author":{"name":"Raynos","email":"raynos2@gmail.com"},"repository":{"type":"git","url":"git://github.com/Raynos/signal-channel.git"}}