{"_id":"@elijah-bodden/membrane","_rev":"17-bb81badf95dcd929dfd3018b697dcc5e","name":"@elijah-bodden/membrane","dist-tags":{"latest":"2.1.3"},"versions":{"1.1.2":{"name":"@elijah-bodden/membrane","version":"1.1.2","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.1.2","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"258fe632409d4b9a1a31cd688b3b08eedb8b0fa6","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.1.2.tgz","fileCount":2,"integrity":"sha512-BMoTmDFxzndppde26Vhw/aw1P5FSgiyjXoEz5TdWkV/bP1WGjKW7Ll91B3AiX7KpNyZDbT+MrzEIjQeOetDuZg==","signatures":[{"sig":"MEUCIQCG6XU7uyKezbnyUf5hdvjiKuUN8SwyN1WoJ//Z7wotdAIgKdVJKfTIFoylgQXFuddo1nGdERRVyq8EvByGoJg22Z4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56925,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi+6WtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo1NxAAnL81pA8lPxl97zDj7ftkgm9qopkSak7Thq14PWADSz6iQ9Yj\r\nrUNpR+2Oao3wmzEML5gB/AXGV/DWX0prNAmXqSWwRot/0uoPvUSWKY/FstzQ\r\nw23mx/xGEiixd9kPvcIUE7WQH7RMCgZY8HxfdtnsJWbzf7Cv5pT+19fHY7v4\r\n3xy+jIVGu1cScNUFOXXmr3u1M92D0QaenMaWkSSeNhBgy7AIINP47bx18cds\r\nc5sYA+WV4X0e2sihYtmA1EgESZxcziKO44Pp9hWYd0yfS0pt08lwNZq4DJ7y\r\nFmylPrX1lV8Ojn916kEgDo90ZIrzI+nwLkhgYgd9Th1QORtTRht/GWQtNN2P\r\nF8fpLUWskRxBwNYIaRs3xP7LVZy/XKKc1mJ/Oo16TzuDzpGigusbKoWZmu6R\r\n3ZDUFrKvmW3j0oRsF96nt0M0k6BFdU2QygoIoSetDEfGd+mNTC7bHd3esk3C\r\nn8awTtmbNTHywJbZ/j+3wQHKo2dkYciXHPezCfFwgWHGErFI4BPHNVHK0o0r\r\ngpEtTzypgbSAFiSj6M4Cf23GoidDZ+kCQBnfaAQ8QwK7QRNyiByB1nwgFhR8\r\nzw0b2LoMJw4CkaE/QSAWPM1X+zMCWCJmio6Kjl8FMrTCe/vpXbRiwtDxworI\r\nGSIN67MxW8ScZPXAxc783vjRpkvHrv0vkyg=\r\n=EYIw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"8.1.2","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"16.13.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.1.2_1660659116866_0.7712967571784455","host":"s3://npm-registry-packages"}},"1.1.3":{"name":"@elijah-bodden/membrane","version":"1.1.3","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.1.3","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"155de5e8a8db17ebb8ff5ced8cfad647cdecee38","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.1.3.tgz","fileCount":3,"integrity":"sha512-aixHXE3MA+cEoNKBkDt7k6E6W/s/Pr6H7YsVkt0Que/sfW8GK3s18ic+P21CDIfZC7xgOwhTc/OPJ+u/FIQwYg==","signatures":[{"sig":"MEUCIDXKjcOJjxZGBMr2jMhY7yEaY5jQbwDN7+SiCpeU0BEzAiEA8ZG/w3zqVCZOauq+kADKr4pZOw2NTHzQiiPMiUnd3Fs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":69090,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/XRKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpFWg/+JMjSurfZwkag4F/osp4kv5sQYr8Y31vIYPV5e+17xcFfM0PB\r\nTMw22lbGq4/Uy5AKSD9TZkqq66fqxlSFmbXojsSu0BSYZPTVPo/TC4IMzC8q\r\nh8bSY/8BQgCZCh2ocjLQnuztZUwc854crtlvK8zMKF83a0bezeqNz4rtAZDO\r\nPEv8jgI45U41A/FnyhTSjKgKD8q4izbrj3UJeGV60Vo6r3c8LELRIKWxvG6S\r\nVAy8xtB6LxsY722FjPzcxeKVzWa3BTACSpRrmdf1C5dNdIM87wTF0FYWPFH7\r\nPyPN8MKk92sl/YUMEm3RXRMcKeAJff/UUPPqMpT5grZAZzKjSNkNV9izNe2v\r\n4s6+MTNXi3bOwvwOAC07lHICVbW2rPRZHWgw1IO7engqDZpU/tLyvqXXAtVz\r\n6y8kkbObphkoO1V1RxhQC8k0mIwVUYzY7bBKPptz9UVW7wdZ+T3YSlxjoQG1\r\n3gbiUyEESKoYG/NHwZHuZW12txaJ912W7gO0UvJo534kN0NI9yNHwP13N897\r\nEeRqq64mKtMae6GRyGpnBn+aFNZjGYUYfWsn21ICveZgHbPRLivOD81vFM0S\r\nlYCO39Sy+EcaJxoVzcNEVDyID+kneeBsqYxbbaeiv336pufplQa/6QISmJ9p\r\nzs9F2U8ZNXzMAfF1ys4LQ6EsCJmTVePen9A=\r\n=+a18\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"8.1.2","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"16.13.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.1.3_1660777546337_0.30738409286970736","host":"s3://npm-registry-packages"}},"1.1.4":{"name":"@elijah-bodden/membrane","version":"1.1.4","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.1.4","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"4f83d71360a9fb6fd2df2e7d39391c27fca60921","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.1.4.tgz","fileCount":3,"integrity":"sha512-HSOxqiiIRnV/UeSNuov5X2MHZ5g27iaj/Ywz0nHqFM3uCWpRWMd1aMtChsxL5DPuCF1jB10NJESa7OGk/Nx4fA==","signatures":[{"sig":"MEUCIGztUj8+GCL2/a21nX3C9TEOug641qU69StINe96hUMHAiEAjQQ49DcrSB0istIGhIbDGGLkoCUZaK2C4CUTiD7fbN0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":69091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/XTXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoV0Q/+JwQYzcAEjHV/bqdpXQdI9SyyOKHyUt9ySpJVSlg0KJ1vuEwP\r\n6yKylPHIeN9MhmiihuiKjSJKg7XihaRvrNk9WC8wJ8gOrXle1hWtc/gq7hxf\r\nBYbsIqEo0RRgm9Hdb9mQ2I89QQ3jSmmMlrvm71IudUMHC3OxvQKEkuKJo4pA\r\nRiXi1kxk/w8zMWZAOblYZ5w+H1Rzgn3G6r3zEPeHkE9BgnK99S0o6JvFGg68\r\nKbPB2G7DE9gauwZMCnEDCk6+vSewA38Cki98HCEGESjZ+3yoa5M8WM1AiAOX\r\n+WyYeYviVKduJjp4lhYWIEc8SGJsMEIm07n4dw4XeFFMtBq8eSxUOGC9mNpX\r\nUaDuNPBiCZmceD5BABPF5rzBB+rlSjjykpQIgHYLwMjTuBEhWxwOJwBnnuPM\r\npj67Rw8k3Zr1R5l0LJLH7Xq3n0WGQ1vebI15xEhsGusolaX3gkajFb6BkM2c\r\nC4KxEIksdz+gpXThOpffVTpQWOFvHqdNwm3wiTQ1lz6oERVy2CT6UQxK2gqj\r\nP6m5r6WakfCAqTZILvWRiSmBgQ988/rWepLhSbra9iqyfJKcH60aBi3Z8aTO\r\nSvNdq6BZPxAzAgFipTtJQJ4cGwUxQSiVR5b/lGIpfewmoPMugQPuN5Vp87E7\r\nqSpB5VyMl64IeHjQRigfGEiokZV2jaUD2aI=\r\n=eEX7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"8.1.2","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"16.13.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.1.4_1660777687761_0.9468142374216031","host":"s3://npm-registry-packages"}},"1.1.5":{"name":"@elijah-bodden/membrane","version":"1.1.5","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.1.5","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"37eae2612dfa0eb72f0f547b06c24794ffc4250c","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.1.5.tgz","fileCount":3,"integrity":"sha512-tLe9szA4OCN5KbPXjFwTuksifxm8LUykie/fBMlT/dQX5Jl16hMk+Et6ZmhqFPgTZk6+/ZrFPpboYJsu4RdvKg==","signatures":[{"sig":"MEQCIFGVBk28HKtCdLc25qt7bpw9eareOzrWyI8lzRyF/6gRAiBsJu4KkoXDzraRnMMl365e0jm5NjCEJ9jJrkWuGV7gAA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":68949,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/nlzACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqp9A/+MzOOpsry3JRsSwdHEkfX2OI5SewHoJs2ZU7S561QzE8EKJ+p\r\nDG4Ai4ESfVuHR9JESwksjhHhZSyZBh0RBnIFOihTzP0YjfitFW+wZLZIfv5k\r\nOMf9TBzAnPBz8lxzUd61UxPQDME0UKC0jtEnI8nVcKUm3fvgxJEKCOFr+OUN\r\nqqPST+WLbrT2AtCJzUFbjZXBzbdLvYfjtEgp26SYJ8ERq1J0KSYWoG986BFa\r\nRwmNo90ALrdvVTJIaYw4wkVdovLWG8Te0x3jJrgw/f1NQpc/5s7gJeSnK894\r\nTLrdporeAIYB5OQRyyAbv/oGE9f3F4GyNOQBLwIvFVuaq9wXi1UtkKTBTXtu\r\nKLnvGoh76ZlEDPBwdkHA3BEbC/ACXTwi75DYDWxVskpCQ15CqXktR/B8gjhI\r\nhmjRhphHZUk6dOTBIteVoFfCY3z8TNVXHQ6NuZqRtt+9sOSBepIVQwFX+U2t\r\n4ImKmNUwlrFV6rHppGjiT5rY52hG+cUttUbAu36csmVSNQQPpnHc7Au/vuQ4\r\n8MY9OoA55/H6h4unPuac8wYRD9pzv8JA51G6c5K3teVoQR+L2szstc7A3pin\r\nipOIv2odCoh9sP+c5ah8Sp+/mtjw5dc0kl1r2xCGt/HLZ94J0cEsF7DYWC0g\r\nxDHhynIkpxPkAZN4gMr7MxV42qwpDclOHVk=\r\n=Ce9x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"8.1.2","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"16.13.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.1.5_1660844402688_0.8557983136792515","host":"s3://npm-registry-packages"}},"1.2.0":{"name":"@elijah-bodden/membrane","version":"1.2.0","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.2.0","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"40b93b91046858bf692ef1f6950167592db81b2d","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.2.0.tgz","fileCount":3,"integrity":"sha512-yoRtKeFoEkSUQBdI6aYusYEbrYJjV4M+7Y6E4l+rjREut7QETkq3DRelBVD19k+wknrBBM0ZtQBwt+op6U7nkA==","signatures":[{"sig":"MEUCIFSfCs3HTwrK030zg6ySaiiNMnifkaMS6UGRk/ZQSLcrAiEAtElLy3py3oP4lUuy0vbivTCWY1JoO0xEbCtWoL7OLJ0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67282},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"9.2.0","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"18.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.2.0_1727125896477_0.8159418408830668","host":"s3://npm-registry-packages"}},"1.2.1":{"name":"@elijah-bodden/membrane","version":"1.2.1","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.2.1","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"7bd559aae51b9473a2bb7f27ceb2bfb3b3bbe720","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.2.1.tgz","fileCount":3,"integrity":"sha512-7L5k6j7Y8os5Rr5XVxEJmuZf6TLkOqH3kHBdtd+FiR6nLj/e7FPYZj8E8I4rOks0TWJwdowJTy3xIYMH7teW5Q==","signatures":[{"sig":"MEUCIQCjhTVrg+9r5lAUKmEHHKilqUrwZS1TW4H9quMzMlXJ4gIgfcv67whOybwrb3HGT2+T5H8XVHZkHJ5ZJUS3mN3Y8Jg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67203},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"9.2.0","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"18.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.2.1_1727128031015_0.3459351074561925","host":"s3://npm-registry-packages"}},"1.2.2":{"name":"@elijah-bodden/membrane","version":"1.2.2","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.2.2","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"141fe5302b2243566abe66140a161a21740f0270","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.2.2.tgz","fileCount":3,"integrity":"sha512-YTvIatNlI6lgTKOnzdn8PCGzkhPhliIzjSXKX7vkWwW7pJTg1rysDNtaKZwfEpizK8iwFmz3aXRLtEtG6/0baA==","signatures":[{"sig":"MEYCIQDCL9LShUCQgpGkJXjJEQZifL/onzvrtmdsI3b/nrKuewIhAJ1VMmej8GBqDpislgM7P8OxZe0AigyDbfoXYYAnJBrI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67463},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"9.2.0","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"18.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.2.2_1727154748792_0.9098671027183036","host":"s3://npm-registry-packages"}},"1.2.3":{"name":"@elijah-bodden/membrane","version":"1.2.3","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.2.3","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"71d0e1186d78a7e68e42d3e6cb217569db1b61b5","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.2.3.tgz","fileCount":3,"integrity":"sha512-HAoGBfPh2YXLeDy3/p32fwqer+PTF2EI8X56nz/Z5vKyXqOQcGmmArVjRaIeackRLLgy3z33KDr6oxB22t/O6A==","signatures":[{"sig":"MEYCIQD4E+5y27MlBvOievLv8znL4SWFGxEP0PSPQkySxZIhMQIhAPxNX1ALgDVNh8E68tI8EaJTgg0Lo/nMYGEh6LFRDiYz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67463},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"9.2.0","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"18.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.2.3_1727212431847_0.25831742631350707","host":"s3://npm-registry-packages"}},"1.2.4":{"name":"@elijah-bodden/membrane","version":"1.2.4","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.2.4","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"4944b1ca066c6165d1b79692912d17cdfff4ee6e","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.2.4.tgz","fileCount":3,"integrity":"sha512-VTdbx+B402ygVgo+AmhbGhVX1A9dHQDDsDO17n9KkEttBX1O/DH1NdnbOjXL27WrXQbh2PBtOI54lcFsG5pCvg==","signatures":[{"sig":"MEUCIGP4dJYxHEo+DN+a9RPVUgUkSJpH9sutoPjbTMVgqkj7AiEAzRG3KPBLu70MVbi0HIM360Wj9pHRLgSeEzFXlQTJ0Rg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":67463},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"9.2.0","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"18.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.2.4_1727227154024_0.9646921163288078","host":"s3://npm-registry-packages"}},"1.2.5":{"name":"@elijah-bodden/membrane","version":"1.2.5","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.2.5","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"a5bc6963a9a60e17ce01d2fd4770d197b62e5aa4","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.2.5.tgz","fileCount":3,"integrity":"sha512-V6AR+0YgZuDOWEL/Bhdyn/RqeRfFLUkiIArvl+ybNwEP8LaClGdPLrRUtKtUqVC0KWFmJNl+r7OrLrYgwoh6gg==","signatures":[{"sig":"MEUCIHKAA0o8iiCjCJPfyJX0gKrHdSI2cMnYCKGrrlgH1JlmAiEA9yMchYTzdlk85u/fOQOOS1kXUsn0BLiSm7Cjz7Y99tg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66478},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.2.5_1727228924743_0.4377949720724381","host":"s3://npm-registry-packages"}},"1.3.0":{"name":"@elijah-bodden/membrane","version":"1.3.0","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@1.3.0","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"38e7075b2b4aca0fb2e1e7034d20b14aa6c7d953","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-1.3.0.tgz","fileCount":3,"integrity":"sha512-3FY1bDKnvvDusOB0qRw+l2s4f83HzNZ0+FKVA6xTO/aYANZWOm+HwqPJTNGpr6j9cMKh90lFFb9i0q+EwDWDdw==","signatures":[{"sig":"MEUCIH0msKGTPO+NeeD9A1glk7IM3A48G47xkED9XIplG6iJAiEAoyYinUWNBq1ZpA/hmUyEI16NxWrjFJ+Ne8YlI/KPXjY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":66478},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_1.3.0_1727228936108_0.3726220063528094","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@elijah-bodden/membrane","version":"2.0.0","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@2.0.0","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"3be9ac5750d420957f4967a5e3372633672e9abd","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-2.0.0.tgz","fileCount":3,"integrity":"sha512-4AffYd0wNbpnyvntjL6GzyD7r00PvDsw/ui2tvBPKX+7gkIlFp1X9SubNHfZO3kcr+YSeGFhZEgsf53Gp8pn6A==","signatures":[{"sig":"MEYCIQC756MwMEtj4Fho9HJcQsZpVK1Qy44tBCQ1WvnANdMs5gIhAMtq+BTF/aeZUFBb3P3DsLP4kFEfCrtFKzjQXPYbeV+8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62040},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_2.0.0_1727235618986_0.5057515077529862","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@elijah-bodden/membrane","version":"2.0.1","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@2.0.1","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"adce1c8a84642627c3004eb98e50f11c676530e6","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-2.0.1.tgz","fileCount":3,"integrity":"sha512-nL1U+Fhi/v3uAteGSZqEflCXy7Zk4l416q/BpVcKHGHF7wGffMpgyn8DTNVEpSARqwwGPOPqC3Ynv0NZHsvmdw==","signatures":[{"sig":"MEUCIBoZsD8V92z9R1zV1Q8iADtisyN8P2EJ6j7dADmzexYaAiEA2tDP5BqGgtndLhzylsIi4UT+Q68mxHg4z0LA2keUhCw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62018},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_2.0.1_1727235712281_0.5429388670105166","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"@elijah-bodden/membrane","version":"2.0.2","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@2.0.2","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"2d6a1940b257aa0b713e43f829490bf0b1baf3f2","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-2.0.2.tgz","fileCount":3,"integrity":"sha512-oUhy8tNBuBXhYvmDT/F27htgfzA1Yk91c5qYl4ZZKcAh/F2J84YUwTJYIxSsgUg5EhA+az2uL7D/g1GiNRHDpw==","signatures":[{"sig":"MEUCIF3QU92YAZpIgccCTMNUy9zE91oVxhTVTcWTtfhsQUO7AiEAlVqxQcDSeCBHjc8O/psRW6GqGcc62sodba08hiIaDHE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62038},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_2.0.2_1727235821949_0.10930928697759468","host":"s3://npm-registry-packages"}},"2.1.0":{"name":"@elijah-bodden/membrane","version":"2.1.0","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@2.1.0","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"6ed39d120f1f288ea4b1ff1e89d72bcc80bff6e1","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-2.1.0.tgz","fileCount":3,"integrity":"sha512-mS8Jl3AT8+3U6qTs9SFv5WFawdbd8xP/+jLNB4x2UTlIoigOCpVG2HjuhbDer49czW6aY4j2jJCkHwuYXWhthw==","signatures":[{"sig":"MEUCIBTw5EQc0mvrW7CGW5/GdPGWypKXsS8Jo1+fZHgzs2wnAiEAu3sirE4BwA/zlDMiJP2vdtPMsmPdSOexfqLp/OIIm7M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":62683},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_2.1.0_1727291914739_0.5189899134868912","host":"s3://npm-registry-packages"}},"2.1.1":{"name":"@elijah-bodden/membrane","version":"2.1.1","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@2.1.1","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"2d5da826830f6e3e2025a58cdc90590aa1cf5a38","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-2.1.1.tgz","fileCount":3,"integrity":"sha512-CXJLS/Dp/EHwansAdzJgz2B/4nUfPAZNr3CQDuNZKyfhyHZzi2PFnkiVGLmZzLDFufleOx3NfrsgDtEOrnCm9w==","signatures":[{"sig":"MEUCIQCSmTJu44+Ux0cBhUxvAfskOH8Gv9lwKfxlP2KzLr+uEAIgZhH+EYTgEoNBHCi7WfYoKGqyuCcEqFIfFQlvQjWrCBw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74597},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_2.1.1_1727297082864_0.19225286491041937","host":"s3://npm-registry-packages"}},"2.1.2":{"name":"@elijah-bodden/membrane","version":"2.1.2","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","_id":"@elijah-bodden/membrane@2.1.2","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"dist":{"shasum":"0c8ebba3bc384d29417b349a4f0b2e924fa70114","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-2.1.2.tgz","fileCount":3,"integrity":"sha512-g/+PX7PIlKw+2AmK5fM0uD5lOdt96Dy1tQzxhgn52g7y6dNRHjdV5I6nxekcin/sSTXNXenMcYwah36Dd4CsHw==","signatures":[{"sig":"MEUCIQDDvH6Ln62zxZRDNudICHR0Dyn+O0gaWIYyo3WJ1vZqCQIgd+lqPt4NsZtZstUETU3TtkR81+w5joPnD4qwBiDGm8c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":73408},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"repository":{"url":"git+https://github.com/Elijah-Bodden/Membrane.git","type":"git"},"_npmVersion":"10.8.1","description":"Robust, minimal-server-interaction peer routing in the browser","directories":{},"_nodeVersion":"20.16.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/membrane_2.1.2_1727376572942_0.481716756359698","host":"s3://npm-registry-packages"}},"2.1.3":{"name":"@elijah-bodden/membrane","version":"2.1.3","description":"Robust, minimal-server-interaction peer routing in the browser","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"git+https://github.com/Elijah-Bodden/Membrane.git"},"keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"author":{"name":"Elijah Bodden"},"license":"MIT","bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"homepage":"https://github.com/Elijah-Bodden/Membrane#readme","_id":"@elijah-bodden/membrane@2.1.3","_nodeVersion":"20.16.0","_npmVersion":"10.8.1","dist":{"integrity":"sha512-exNn3FKZsD86SL1pohA9X5aAa/XHP6hBhwOrEB5EYbDGtvrwGzkC9Hso6K4nNMUceZ/nH9ITjvHzGhiu4rGQfA==","shasum":"a4912108d599497bd12f844d4935555d0f4c2101","tarball":"https://registry.npmjs.org/@elijah-bodden/membrane/-/membrane-2.1.3.tgz","fileCount":3,"unpackedSize":63320,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCkUxYrYGCNhhnlRQ6q9LMlbOY9QOUYgOyrg6y3r+huOAIhAJH9eoMVpINhA1BewFViz3DqWuRcxzOvyhxXya7bRziZ"}]},"_npmUser":{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"},"directories":{},"maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/membrane_2.1.3_1727403373427_0.6849692481114793"},"_hasShrinkwrap":false}},"time":{"created":"2022-08-16T14:11:56.807Z","modified":"2024-09-27T02:16:13.754Z","1.1.2":"2022-08-16T14:11:57.019Z","1.1.3":"2022-08-17T23:05:46.522Z","1.1.4":"2022-08-17T23:08:07.909Z","1.1.5":"2022-08-18T17:40:03.150Z","1.2.0":"2024-09-23T21:11:36.717Z","1.2.1":"2024-09-23T21:47:11.226Z","1.2.2":"2024-09-24T05:12:28.968Z","1.2.3":"2024-09-24T21:13:52.059Z","1.2.4":"2024-09-25T01:19:14.218Z","1.2.5":"2024-09-25T01:48:44.925Z","1.3.0":"2024-09-25T01:48:56.307Z","2.0.0":"2024-09-25T03:40:19.160Z","2.0.1":"2024-09-25T03:41:52.454Z","2.0.2":"2024-09-25T03:43:42.143Z","2.1.0":"2024-09-25T19:18:34.936Z","2.1.1":"2024-09-25T20:44:44.899Z","2.1.2":"2024-09-26T18:49:33.114Z","2.1.3":"2024-09-27T02:16:13.583Z"},"bugs":{"url":"https://github.com/Elijah-Bodden/Membrane/issues"},"author":{"name":"Elijah Bodden"},"license":"MIT","homepage":"https://github.com/Elijah-Bodden/Membrane#readme","keywords":["javascript","distributed-systems","js","graph-algorithms","webrtc","peer-to-peer","p2p","vanilla-javascript","webapp","webrtc-experiments","chat-application","sigmajs","webrtc-signaling","djikstra"],"repository":{"type":"git","url":"git+https://github.com/Elijah-Bodden/Membrane.git"},"description":"Robust, minimal-server-interaction peer routing in the browser","maintainers":[{"name":"elijah-bodden","email":"elijahbodden@protonmail.com"}],"readme":"![Membrane](./Assets/Membrane-banner.svg)\n<p align=\"center\">\n<img src=\"https://api.codiga.io/project/33828/score/svg\"/>\n<img src=\"https://img.shields.io/github/license/Elijah-Bodden/membrane?color=blue&label=License\"/>\n<img src=\"https://img.shields.io/github/languages/code-size/Elijah-Bodden/membrane?color=%20%23d0a011%20&label=Raw%20Code%20Size\"/>\n<a href=\"https://membranexus.com\">\n<img src=\"https://img.shields.io/website?down_color=%23D0342C&down_message=Offline&label=Website%20Status&up_color=%23e8daef&up_message=Operational&url=https%3A%2F%2Fmembranexus.com\"/>\n</a>\n<img src=\"https://img.shields.io/maintenance/yes/2022?label=Maintained\"/>\n<a href=\"https://twitter.com/intent/tweet?text=An+unkillable%2C+browser-based+p2p+network.&url=https%3A%2F%2Fgithub.com%2FElijah-Bodden%2FMembrane&hashtags=webrtc+opensource+p2p+peer2peer+github+projectMembrane&original_referer=http%3A%2F%2Fgithub.com%2F&tw_p=tweetbutton\" target=\"_blank\">\n  <img src=\"http://jpillora.com/github-twitter-button/img/tweet.png\" title=\"An unkillable browser-based p2p network.\"></img>\n</a>\n</br>\n<a href = https://github.com/Elijah-Bodden/Membrane/blob/main/docs.md>\n<img src=\"https://img.shields.io/badge/Documentation-here-green?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAMAAADfNcjQAAAACXBIWXMAAAPoAAAD6AG1e1JrAAABI1BMVEVHcEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADRGyDUAAAAYHRSTlMADsnu1gXVAQQD0YN0VgJ2Y2Fk73WFVdfzB9QGEhqEWoJndwwhc85iGNM62+uGz9LLyghgQFgxgewRXowiF3FXX/L4D7cbUhDl5FDqVCnYFGWJCjiy9Isdxyfd4QnQ9Ul2HlhyAAABVklEQVQ4y8WTxXLDMABEt41t2U2jpHaYoYGGy8zMzKT//4racqYxNse+g09vVrsaGc135k36EhQ6b0wQEoKThHTFDkAMgUkpRXYh4jqQEMGFNDypBKQUkamRoH+II4AQjGkzhkd0gZhn2dCF9snFWfweXMBGOTwkGq42gONTvqVjCBRFx0QV2D/XbjtPbWYm5OpTFuo7WQw6vDD/DgEhhczsn4IIeXxwxHR00kJ0axM2gSLoLmlPOIyokSHqfNYhjOxgERQO4FmyGi5VPBMsJRfMR+KamVM5pcW5kR18Loooym87T2Fkwr8LIlVcyFjVJNkUet7/BVYGCXu7sWI+FgvayS+vsxq4UGZ+rOn3pwtoFuKhVvLmaDtkJV5Y0psaAt/QT965S1ACWX/VoDJVaskGFGKHrzWOMOg+PiMjOsnIH30uUDywdHfCzWePfZnCa8tnifb9A/asZNZ24Y66AAAAAElFTkSuQmCC\"/>\n</a>\n<a href =\"https://membranexus.com\">\n<img src=\"https://img.shields.io/badge/Demo-here-blue?style=for-the-badge\"/>\n</a>  \n<br>\nRobust, minimal-server-interaction peer routing in the browser\n</p>\n\n## What  is this?\nMembrane takes signalling to the browser, creating living peer networks. After just one server-based signal, a node never again needs centrality. The network acts as one giant signaling *membrane*, connecting far-flung peers at a whim. So long as a node remains a part of the network, it has full contact with every participant. Meanwhile, the network actively stabilizes around each new member, ensuring that severed connections will not damage the network nor cut off nodes, and allowing for an overall seamless \"immediate-access-to-anyone\" experience.\n| ![](./Assets/demo.gif) |\n|:--:|\n| *Taken from [Membranexus.com](https://membranexus.com), which was built using Membrane* |  \n\nMembrane leverages the `RTCPeerConnection` API's agnosticism regarding signaling. You could just as well communicate `ICE` connectivity data through smoke signals or quantum teleportation (*if only*), as through a conventional signalling server. That's profound; *we forced to use this terribly unreliable, centralized approach*. With membrane, just one server-based signal opens an entire realm of peers; each membrane is a single, behemoth router. Distant, unconnected members can exchange arbitrary data in milliseconds, with no clumsy intermediary server, nor any risk of downtime.\n\nTo be clear, however, this approach is not perfect. The boon of decentralization may in fact be this project's worst enemy. No singular, trusted ledger to authenticate peers means spoofing, posing, and general manipulation are elementary. \n\nIn brief, this tool is robustly functional at enabling anonymous, homogeneous, untrusted data exchange across a network, but poor at most else.\n\n## Installation and Integation\n### Installing the Demo or Building From Source\n  #### Prerequisites\n  - `npm`\n  - `npx`\n  - `node.js`  \n### \nPaste the following commands into a terminal to build a complete directory structure, then install and initialize the demo on 127.0.0.1:8000 anywhere with the prerequisities installed.\n  ```shell\n  curl -LJo Membrane-current.tar.gz https://github.com/Elijah-Bodden/Membrane/tarball/v1.0.5\n  tar xfv Membrane-current.tar.gz --transform 's!^[^/]\\+\\($\\|/\\)!Membrane-current\\1!'\n  cd Membrane-current/src/source/frontend\n  npm install\n  cd ../server\n  npm install\n  npm run deploy\n  rm ../../../../Membrane-current.tar.gz\n  ```\n  To kill the pm2 daemon created by `npm run deploy`, run `npm run kill`.\n  \n  However, although this demo functions, this does not mean it should be used in production. It is a quick-and-dirty demonstration of the library's promise, and is not made for any serious scalable production situation. quoting `./src/source/frontend`'s \"`PLEASENOTE.md`\", \n  >Excluding the included `lib` code, the vast majority of the code within this directory and its descendants should never see the light of serious production. It was hastily coded to fit its closed use case. This is nothing more than a demo of the library—far out-of-scope of this project's goal. Please do not treat it as a true part of Membrane. The project begins and ends at `lib`.  \nTL;DR: This code is a great risk to the performance and stability of your frontend. Unlike `lib`, it was not intended as a viable product, and shouldn't be used like one.\n### Deploying a New Signalling Server\nInstalling the pre-made server from `/src/source/server/index.noStatic.js` is a piece of cake! Simply enter the following into a terminal while in the root of your node project, sit back, and relax while the project installs.\n```bash\nnpm i membrane-server\n```\nThen, to deploy the server over pm2 onto websocket port 8777, enter `npm explore membrane-server -- npm run deploy`. Simmilarly, to kill the instance created by this command, run `npm explore membrane-server -- npm run kill`. Now just remember to replace the signalling addresses in your `lib` script's config with your new server's, and you're ready to go.\n### Custom Applications\nUsing the vanilla `lib` module in a custom use-case is relatively simple. Here is an overview of the typical integration process. First, find the delivery method you like below, then, after you've completed its unique instructions, head down below to the general next steps  \n| Delivery Vector | Instructions |\n---- | ----\n| npm + Webpack | Run `npm install @elijah-bodden/membrane \\| cd node-modules/elijah-bodden/membrane` in the root of your webpack project<sup id=\"a1\">[ \\[1\\]](#f1)</sup>|\n| HTML script tag | Enter your project's static file directory, find where you'd like to store the script, then run `wget https://raw.githubusercontent.com/Elijah-Bodden/Membrane/main/lib/index.js -o membrane.min.js`. Then insert within your HTML `head` the following tag: `<script src=\"/path/to/membrane.min.js\"/>`. From here, return to the folder where you installed the script and follow the instructions found after this table |\n| Jsdelivr CDN (not recommended) | With this method, you will not need to follow the general instruction which come after the table; however, you will be stuck with the default config and every peer request will be accepted by default. If you wish to proceed, knowing this, simply prepend the following tag to your HTML `head`'s contents. `<script src=\"https://cdn.jsdelivr.net/npm/@elijah-bodden/membrane/index.min.js\"` |\n\n<p align=center><i>then</i></p>\n\n1. (optionally) Modify your script's `CONFIG.communication.configLoaderFunction` as needed in [this](https://github.com/Elijah-Bodden/Membrane/blob/main/docs.md#loading-custom-configurations) form.\n2. (optionally) Create a `CONFIG.communication.routeAcceptHeuristic` either statically in `defaultConfig` or dynamically at runtime through `CONFIG.constants.configLoadFunction`. If you want to allow the user to explicitly accept certain routes, you can include an awaited async function which fetches user responses.\n<!--List Break-->\nAt this stage, the script should be capable of standalone function. To verify, serve several instances of it into any relatively-recent `window`-based environment (i.e. a browser) with the [default server](https://github.com/Elijah-Bodden/Membrane#deploying-a-new-signalling-server). If an instance's `livePeers` variable contains at least one `Object`, everything's working.  \nThen, to interact with the modlue:\n- Use `negotiateAgnosticAuthRoute` on members of `Object.keys(networkMap.nodes)` to authenticate arbitrary nodes.\n- Use `* Authenticated Peer *.standardSend(\"consumable\", *arbitrary data*)` to send consumable data to authenticated peers.\n- Define an output for consumable data with `onConsumableAuth((_dontUse, data) => {* useData *(data)})`.\n- Provide initial connect and reconnect websocket urls in `CONFIG.serverLink`.\n- Set up a signaling server with the appropriate endpoints and exchange methods (or use the [included](https://github.com/Elijah-Bodden/Membrane#deploying-a-new-signalling-server) one)  \n###\n___\n<b id=\"f1\">1 </b>The following items are able to be imported from the npm module: `CONFIG`, `GossipTransport`, `authPeers`, `deauthPeer`, `defaultConfig`, `detatchedRoute`, `eventHandler`, `eventHandlingMechanism`, `gossipTransport`, `hiddenAliasLookup`, `init`, `initialReferenceLedger`, `livePeers`, `loadConfig`, `mostRecentServerHeartbeat`, `networkMap`, `networkMap`, `onAuthRejected`, `onLivePeersUpdated`, `onPublicError`, `peerConnection`, `pubAliasLookup`, `pubAliasUnparser`, `routingTableTransport`, `serverHardRestart`, and `topologyTransport`. [↩](#a1)\n## Contributing\nAny and all contributions are greatly appreciated. If you want to see this project grow as much as I do, there are several ways to help. Firstly, if you see something you think you can improve within the code, please `fork` the repository and make a `pull` request once you have made any changes you'd like to see. If you just have an idea, or spot a bug, that's great too! In this case, please file an `issue` with a corresponding `bug` or `enhancement` tag. Oh, and if you like what you see here, please feel free to leave a star on the project, it would mean a ton to me.\n## Authors\n* **Elijah Bodden** - *Initial work* - [Elijah-Bodden](https://github.com/Elijah-Bodden)\n## License\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n## Built With\n- The core module - 100% [Vanilla.js](http://vanilla-js.com/). Additionally, check out [kNow](https://github.com/Elijah-Bodden/kNow), which I spun off of the homebrew event handler made for use in Membrane.\n- Frontend - Standard HTML/SCSS/JS, plus [Sigma.js](https://github.com/jacomyal/sigma.js)+[Graphology](https://github.com/graphology/graphology) to power the gorgeous network visualization graph (and a pinch of Font Awesome for icons)\n- Backend - JS on [node](https://github.com/nodejs/node) using, most notably, [Winston Logger](https://github.com/winstonjs/winston) for logging and [WS](https://github.com/websockets/ws) as a WebSocket server\n\n## Contact\nElijah Bodden - elijahbodden@protonmail.com / admin@membranexus.com  \nProject - https://github.com/Elijah-Bodden/Membrane  \n","readmeFilename":"README.md"}