{"_id":"libp2p-circuit","_rev":"4634369","name":"libp2p-circuit","description":"JavaScript implementation of circuit/switch relaying","dist-tags":{"latest":"0.3.7"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"time":{"modified":"2026-04-10T19:07:50.000Z","created":"2017-10-21T07:43:44.625Z","0.3.7":"2019-05-29T14:56:36.590Z","0.3.6":"2019-03-12T08:42:47.408Z","0.2.2":"2019-02-15T22:13:09.569Z","0.3.5":"2019-02-15T11:33:20.974Z","0.3.4":"2019-01-10T02:57:43.982Z","0.3.3":"2019-01-04T14:51:41.567Z","0.3.2":"2019-01-02T19:51:43.783Z","0.3.1":"2018-11-15T18:41:12.499Z","0.3.0":"2018-10-01T20:43:55.254Z","0.2.1":"2018-08-13T14:08:12.277Z","0.2.0":"2018-04-05T17:01:26.934Z","0.1.5":"2018-03-14T13:22:55.302Z","0.1.4":"2017-11-03T10:20:34.913Z","0.1.3":"2017-10-26T10:11:23.147Z","0.1.2":"2017-10-25T17:19:53.598Z","0.1.1":"2017-10-24T18:27:35.018Z","0.1.0":"2017-10-21T07:43:44.625Z"},"users":{},"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"versions":{"0.3.7":{"name":"libp2p-circuit","version":"0.3.7","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Oli Evans","email":"oli@tableflip.io"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Yusef Napora","email":"yusef@napora.org"},{"name":"dirkmc","email":"dirk@mccormick.cx"}],"devDependencies":{"aegir":"^18.2.2","chai":"^4.2.0","dirty-chai":"^2.0.1","libp2p":"~0.25.0","libp2p-secio":"~0.11.1","pull-protocol-buffers":"~0.1.2","sinon":"^7.3.1"},"dependencies":{"async":"^2.6.2","debug":"^4.1.1","interface-connection":"~0.3.3","mafmt":"^6.0.7","multiaddr":"^6.0.6","once":"^1.4.0","peer-id":"~0.12.2","peer-info":"~0.15.1","protons":"^1.0.1","pull-handshake":"^1.1.4","pull-length-prefixed":"^1.3.2","pull-pair":"^1.1.0","pull-stream":"^3.6.9"},"gitHead":"e076c37523020d537601baf0fb15982f617df958","_id":"libp2p-circuit@0.3.7","_nodeVersion":"10.15.3","_npmVersion":"6.9.0","dist":{"shasum":"f2eb7a7250d968fa3844dcfeb718ac4735b78f5b","size":1413882,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.7.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.7_1559141796356_0.0865407358163155"},"_hasShrinkwrap":false,"publish_time":1559141796590,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1559141796590,"_cnpmcore_publish_time":"2021-12-16T13:38:51.743Z"},"0.3.6":{"name":"libp2p-circuit","version":"0.3.6","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"Yusef Napora","email":"yusef@napora.org"},{"name":"dirkmc","email":"dirk@mccormick.cx"}],"devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","dirty-chai":"^2.0.1","libp2p":"~0.24.4","libp2p-secio":"~0.11.1","pull-protocol-buffers":"~0.1.2","sinon":"^7.2.3"},"dependencies":{"async":"^2.6.2","debug":"^4.1.1","interface-connection":"~0.3.3","mafmt":"^6.0.6","multiaddr":"^6.0.4","once":"^1.4.0","peer-id":"~0.12.2","peer-info":"~0.15.1","protons":"^1.0.1","pull-handshake":"^1.1.4","pull-length-prefixed":"^1.3.1","pull-pair":"^1.1.0","pull-stream":"^3.6.9"},"gitHead":"48148c115f910a3835d6b36e56ef703908371098","_id":"libp2p-circuit@0.3.6","_nodeVersion":"10.15.3","_npmVersion":"6.8.0","dist":{"shasum":"cab020526dba73dcde3a95c0d9334be0058368ab","size":1422206,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.6.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.6_1552380167248_0.485804210532057"},"_hasShrinkwrap":false,"publish_time":1552380167408,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1552380167408,"_cnpmcore_publish_time":"2021-12-16T13:38:54.794Z"},"0.2.2":{"name":"libp2p-circuit","version":"0.2.2","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"}],"devDependencies":{"aegir":"^13.0.6","assert":"^1.4.1","chai":"^4.1.2","dirty-chai":"^2.0.1","libp2p":"^0.23.0","libp2p-secio":"^0.10.0","pull-protocol-buffers":"^0.1.2","sinon":"^4.5.0"},"dependencies":{"async":"^2.6.0","debug":"^3.1.0","interface-connection":"^0.3.2","mafmt":"^6.0.0","multiaddr":"^5.0.0","multistream-select":"^0.14.1","peer-id":"^0.11.0","peer-info":"~0.14.1","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.7"},"gitHead":"977fea0dff93f58b162448e2eb41cf9ee4520894","_id":"libp2p-circuit@0.2.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"54913f086880e6aafc17740f05085e617a152d05","size":1424712,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.2.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.2.2.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.2.2_1550268789306_0.5013778600892453"},"_hasShrinkwrap":false,"publish_time":1550268789569,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1550268789569,"_cnpmcore_publish_time":"2021-12-16T13:38:56.932Z"},"0.3.5":{"name":"libp2p-circuit","version":"0.3.5","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"}],"devDependencies":{"aegir":"^18.1.0","chai":"^4.2.0","dirty-chai":"^2.0.1","libp2p":"~0.24.4","libp2p-secio":"~0.11.1","pull-protocol-buffers":"~0.1.2","sinon":"^7.2.3"},"dependencies":{"async":"^2.6.2","debug":"^4.1.1","interface-connection":"~0.3.3","mafmt":"^6.0.6","multiaddr":"^6.0.4","once":"^1.4.0","peer-id":"~0.12.2","peer-info":"~0.15.1","protons":"^1.0.1","pull-handshake":"^1.1.4","pull-length-prefixed":"^1.3.1","pull-pair":"^1.1.0","pull-stream":"^3.6.9"},"gitHead":"1b94eb200511433cefa89ff1e7546b1118318f82","_id":"libp2p-circuit@0.3.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"fe4553ceb58eb9b25ea3407ebc0b3a8480011009","size":1407093,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.5.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.5_1550230400783_0.8113621080485389"},"_hasShrinkwrap":false,"publish_time":1550230400974,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1550230400974,"_cnpmcore_publish_time":"2021-12-16T13:38:59.853Z"},"0.3.4":{"name":"libp2p-circuit","version":"0.3.4","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Hugo Dias","email":"mail@hugodias.me"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"}],"devDependencies":{"aegir":"^18.0.3","chai":"^4.2.0","dirty-chai":"^2.0.1","libp2p":"~0.24.3","libp2p-secio":"~0.11.0","pull-protocol-buffers":"~0.1.2","sinon":"^7.2.2"},"dependencies":{"async":"^2.6.1","debug":"^4.1.0","interface-connection":"~0.3.2","mafmt":"^6.0.4","multiaddr":"^6.0.3","once":"^1.4.0","peer-id":"~0.12.2","peer-info":"~0.15.1","protons":"^1.0.1","pull-handshake":"^1.1.4","pull-length-prefixed":"^1.3.1","pull-pair":"^1.1.0","pull-stream":"^3.6.9"},"gitHead":"08d976af220f352a864e58acfb81d9f8ad6894ed","_id":"libp2p-circuit@0.3.4","_npmVersion":"6.4.1","_nodeVersion":"10.14.2","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"e7096321e1637b020ec79044bf261bb8c71779d7","size":1396580,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.4.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.4_1547089063765_0.39675965935938806"},"_hasShrinkwrap":false,"publish_time":1547089063982,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1547089063982,"_cnpmcore_publish_time":"2021-12-16T13:39:02.419Z"},"0.3.3":{"name":"libp2p-circuit","version":"0.3.3","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Vasco Santos","email":"vasco.santos@ua.pt"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"}],"devDependencies":{"aegir":"^18.0.2","assert":"^1.4.1","chai":"^4.2.0","dirty-chai":"^2.0.1","libp2p":"~0.24.3","libp2p-secio":"~0.11.0","pull-protocol-buffers":"~0.1.2","sinon":"^7.2.2"},"dependencies":{"async":"^2.6.1","debug":"^4.1.1","defaults-deep":"~0.2.4","interface-connection":"~0.3.3","mafmt":"^6.0.3","multiaddr":"^6.0.2","multistream-select":"~0.14.3","peer-id":"~0.12.1","peer-info":"~0.15.0","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.9"},"gitHead":"702fddcfd5c5fcf410a403bf48e6334c5a93cae5","_id":"libp2p-circuit@0.3.3","_npmVersion":"6.4.1","_nodeVersion":"10.14.2","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"4c20f6cacb48c6c3924e1c9785d6ae6ae8302317","size":2273512,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.3.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.3_1546613501351_0.6271486291985964"},"_hasShrinkwrap":false,"publish_time":1546613501567,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1546613501567,"_cnpmcore_publish_time":"2021-12-16T13:39:07.224Z"},"0.3.2":{"name":"libp2p-circuit","version":"0.3.2","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"},{"name":"dirkmc","email":"dirk@mccormick.cx"}],"devDependencies":{"aegir":"^17.0.1","assert":"^1.4.1","chai":"^4.2.0","dirty-chai":"^2.0.1","libp2p":"~0.23.1","libp2p-secio":"~0.10.1","pull-protocol-buffers":"~0.1.2","sinon":"^7.1.1"},"dependencies":{"async":"^2.6.1","debug":"^4.1.0","defaults-deep":"~0.2.4","interface-connection":"~0.3.2","mafmt":"^6.0.2","multiaddr":"^5.0.2","multistream-select":"~0.14.3","peer-id":"~0.12.0","peer-info":"~0.14.1","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.9"},"gitHead":"36e0e44221ca32eaa0c6d78ab0d4cae8501b5c13","_id":"libp2p-circuit@0.3.2","_npmVersion":"6.4.1","_nodeVersion":"10.14.2","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"9847e5e7ee28839523c9306b4ff790ce3645165e","size":1716799,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.2.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.2_1546458703471_0.8185632891126038"},"_hasShrinkwrap":false,"publish_time":1546458703783,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1546458703783,"_cnpmcore_publish_time":"2021-12-16T13:39:09.784Z"},"0.3.1":{"name":"libp2p-circuit","version":"0.3.1","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"}],"devDependencies":{"aegir":"^17.0.1","assert":"^1.4.1","chai":"^4.2.0","dirty-chai":"^2.0.1","libp2p":"~0.23.1","libp2p-secio":"~0.10.1","pull-protocol-buffers":"~0.1.2","sinon":"^7.1.1"},"dependencies":{"async":"^2.6.1","debug":"^4.1.0","defaults-deep":"~0.2.4","interface-connection":"~0.3.2","mafmt":"^6.0.2","multiaddr":"^5.0.2","multistream-select":"~0.14.3","peer-id":"~0.12.0","peer-info":"~0.14.1","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.9"},"gitHead":"b2698fd6cfcb81a80df3eee7c815113e35102865","_id":"libp2p-circuit@0.3.1","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"ac0b8cf3aaee63a71d61eb0a21a4dd287b7ca9b6","size":1718445,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.1.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.1_1542307272333_0.8142633629281479"},"_hasShrinkwrap":false,"publish_time":1542307272499,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1542307272499,"_cnpmcore_publish_time":"2021-12-16T13:39:13.655Z"},"0.3.0":{"name":"libp2p-circuit","version":"0.3.0","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Jacob Heun","email":"jacobheun@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"}],"devDependencies":{"aegir":"^15.2.0","assert":"^1.4.1","chai":"^4.1.2","dirty-chai":"^2.0.1","libp2p":"~0.23.0","libp2p-secio":"~0.10.0","pull-protocol-buffers":"~0.1.2","sinon":"^6.3.4"},"dependencies":{"async":"^2.6.0","debug":"^4.0.1","defaults-deep":"~0.2.4","interface-connection":"~0.3.2","mafmt":"^6.0.0","multiaddr":"^5.0.0","multistream-select":"~0.14.1","peer-id":"~0.11.0","peer-info":"~0.14.1","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.7"},"gitHead":"26ad29f38b212cdfaaf6de0c5b73b1ee26b9a0c3","_id":"libp2p-circuit@0.3.0","_npmVersion":"6.4.1","_nodeVersion":"10.11.0","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"3e5d56fd3b0cb2db8ecfdb4ff04940a1577008c6","size":1419047,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.3.0.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.3.0_1538426635060_0.3535916687218623"},"_hasShrinkwrap":false,"publish_time":1538426635254,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1538426635254,"_cnpmcore_publish_time":"2021-12-16T13:39:16.884Z"},"0.2.1":{"name":"libp2p-circuit","version":"0.2.1","description":"JavaScript implementation of circuit/switch relaying","leadMaintainer":"Jacob Heun <jacobheun@gmail.com>","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-push":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Jacob Heun","email":"jake@andyet.net"},{"name":"Maciej Krüger","email":"mkg20001@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"}],"devDependencies":{"aegir":"^13.0.6","assert":"^1.4.1","chai":"^4.1.2","dirty-chai":"^2.0.1","libp2p":"^0.23.0","libp2p-secio":"^0.10.0","pull-protocol-buffers":"^0.1.2","sinon":"^4.5.0"},"dependencies":{"async":"^2.6.0","debug":"^3.1.0","defaults-deep":"^0.2.4","interface-connection":"^0.3.2","mafmt":"^6.0.0","multiaddr":"^5.0.0","multistream-select":"^0.14.1","peer-id":"^0.11.0","peer-info":"~0.14.1","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.7"},"gitHead":"a35ce50ac8ac03045bd2f23d4da5edc830fcf117","_id":"libp2p-circuit@0.2.1","_npmVersion":"6.2.0","_nodeVersion":"10.6.0","_npmUser":{"name":"jacobheun","email":"jacobheun@gmail.com"},"dist":{"shasum":"d3f078e2c28925ee521cd28165682898e4842b90","size":1419205,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.2.1.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.2.1_1534169291859_0.8728672422361099"},"_hasShrinkwrap":false,"publish_time":1534169292277,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1534169292277,"_cnpmcore_publish_time":"2021-12-16T13:39:20.070Z"},"0.2.0":{"name":"libp2p-circuit","version":"0.2.0","description":"JavaScript implementation of circuit/switch relaying","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"author":{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","devDependencies":{"aegir":"^13.0.6","chai":"^4.1.2","dirty-chai":"^2.0.1","pre-commit":"^1.2.2","sinon":"^4.5.0"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"}],"dependencies":{"assert":"^1.4.1","async":"^2.6.0","debug":"^3.1.0","interface-connection":"^0.3.2","lodash":"^4.17.5","mafmt":"^6.0.0","multiaddr":"^4.0.0","multistream-select":"^0.14.1","peer-id":"^0.10.7","peer-info":"^0.14.0","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.7","safe-buffer":"^5.1.1","setimmediate":"^1.0.5"},"gitHead":"a77bbbc23818e32e798b7cc7a2fb0fcfe853a5e4","_id":"libp2p-circuit@0.2.0","_npmVersion":"5.8.0","_nodeVersion":"9.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"b7f5bd92e1d8579d9c004abfd5ad762f9caa1bb1","size":1416072,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.2.0.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.2.0_1522947686732_0.42549294075513533"},"_hasShrinkwrap":false,"publish_time":1522947686934,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1522947686934,"_cnpmcore_publish_time":"2021-12-16T13:39:23.665Z"},"0.1.5":{"name":"libp2p-circuit","version":"0.1.5","description":"JavaScript implementation of circuit/switch relaying","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"author":{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","devDependencies":{"aegir":"^13.0.6","chai":"^4.1.2","dirty-chai":"^2.0.1","pre-commit":"^1.2.2","sinon":"^4.4.5"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"},{"name":"Pedro Teixeira","email":"i@pgte.me"},{"name":"Victor Bjelkholm","email":"victorbjelkholm@gmail.com"}],"dependencies":{"assert":"^1.4.1","async":"^2.6.0","debug":"^3.1.0","interface-connection":"^0.3.2","lodash":"^4.17.5","mafmt":"^4.0.0","multiaddr":"^3.0.2","multistream-select":"^0.14.1","peer-id":"^0.10.6","peer-info":"^0.11.6","protons":"^1.0.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.2","safe-buffer":"^5.1.1","setimmediate":"^1.0.5"},"gitHead":"e52586bf12c9bf196bdb73ca52103f907a0e60b7","_id":"libp2p-circuit@0.1.5","_npmVersion":"5.7.1","_nodeVersion":"9.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"2553d4d692ee84e882c1c8af2ca3d99c3e3b2133","size":1275048,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.1.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.1.5.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit_0.1.5_1521033775152_0.03022823589992507"},"_hasShrinkwrap":false,"publish_time":1521033775302,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1521033775302,"_cnpmcore_publish_time":"2021-12-16T13:39:28.265Z"},"0.1.4":{"name":"libp2p-circuit","version":"0.1.4","description":"JavaScript implementation of circuit/switch relaying","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"author":{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","devDependencies":{"aegir":"^12.1.3","chai":"^4.1.2","dirty-chai":"^2.0.1","pre-commit":"^1.2.2","sinon":"^4.1.1"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"}],"dependencies":{"assert":"^1.4.1","async":"^2.5.0","debug":"^3.1.0","interface-connection":"^0.3.2","lodash":"^4.17.4","mafmt":"^3.0.2","multiaddr":"^3.0.1","multistream-select":"^0.14.0","peer-id":"^0.10.2","peer-info":"^0.11.0","protons":"^1.0.0","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.1","safe-buffer":"^5.1.1","setimmediate":"^1.0.5"},"gitHead":"d6bf15ba693538d88e7d0382d6066a7818a6978b","_id":"libp2p-circuit@0.1.4","_npmVersion":"5.5.1","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"d2210d0dddd5570f7d6c3ed46bdd46ebc31eaba5","size":738769,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.1.4.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit-0.1.4.tgz_1509704433257_0.5739687273744494"},"directories":{},"publish_time":1509704434913,"_hasShrinkwrap":false,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1509704434913,"_cnpmcore_publish_time":"2021-12-16T13:39:30.483Z"},"0.1.3":{"name":"libp2p-circuit","version":"0.1.3","description":"JavaScript implementation of circuit/switch relaying","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"author":{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","devDependencies":{"aegir":"^12.1.1","chai":"^4.1.2","dirty-chai":"^2.0.1","pre-commit":"^1.2.2","sinon":"^4.0.2"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"}],"dependencies":{"assert":"^1.4.1","async":"^2.5.0","debug":"^3.1.0","interface-connection":"^0.3.2","lodash":"^4.17.4","mafmt":"^3.0.2","multiaddr":"^3.0.1","multistream-select":"^0.14.0","peer-id":"^0.10.2","peer-info":"^0.11.0","protocol-buffers":"^3.2.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.1","safe-buffer":"^5.1.1","setimmediate":"^1.0.5"},"gitHead":"3296e3ebc472cf31272bbbb1f8855359ca47785e","_id":"libp2p-circuit@0.1.3","_npmVersion":"5.5.1","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"512e8043922efe744d4f71b53aa721e620eeccc0","size":761344,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.1.3.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit-0.1.3.tgz_1509012681319_0.32521477434784174"},"directories":{},"publish_time":1509012683147,"_hasShrinkwrap":false,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1509012683147,"_cnpmcore_publish_time":"2021-12-16T13:39:32.956Z"},"0.1.2":{"name":"libp2p-circuit","version":"0.1.2","description":"JavaScript implementation of circuit/switch relaying","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser --no-parallel","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir test release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"author":{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","devDependencies":{"aegir":"^12.1.0","chai":"^4.1.2","dirty-chai":"^2.0.1","pre-commit":"^1.2.2","sinon":"^4.0.1"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"}],"dependencies":{"assert":"^1.4.1","async":"^2.5.0","debug":"^3.1.0","interface-connection":"^0.3.2","lodash":"^4.17.4","mafmt":"^3.0.2","multiaddr":"^3.0.1","multistream-select":"^0.14.0","peer-id":"^0.10.2","peer-info":"^0.11.0","protocol-buffers":"^3.2.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.1","safe-buffer":"^5.1.1","setimmediate":"^1.0.5"},"gitHead":"8fa5824d3bacd042ad468cfef02b4f07d4f3a543","_id":"libp2p-circuit@0.1.2","_shasum":"fa30a3ed64d7e5008f0b52ac6ad5b77b970d0ff5","_from":".","_npmVersion":"2.15.12","_nodeVersion":"8.8.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"fa30a3ed64d7e5008f0b52ac6ad5b77b970d0ff5","size":857382,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.1.2.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit-0.1.2.tgz_1508951991861_0.9125201171264052"},"directories":{},"publish_time":1508951993598,"_hasShrinkwrap":false,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1508951993598,"_cnpmcore_publish_time":"2021-12-16T13:39:34.801Z"},"0.1.1":{"name":"libp2p-circuit","version":"0.1.1","description":"JavaScript implementation of circuit/switch relaying","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir test release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"author":{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","devDependencies":{"aegir":"^12.1.0","chai":"^4.1.2","pre-commit":"^1.2.2","sinon":"^4.0.1","dirty-chai":"^2.0.1"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"}],"dependencies":{"assert":"^1.4.1","async":"^2.5.0","debug":"^3.1.0","interface-connection":"^0.3.2","lodash":"^4.17.4","mafmt":"^3.0.2","multiaddr":"^3.0.1","multistream-select":"^0.14.0","peer-id":"^0.10.2","peer-info":"^0.11.0","protocol-buffers":"^3.2.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.1","safe-buffer":"^5.1.1","setimmediate":"^1.0.5"},"gitHead":"ac8c2b3c9fea5df002040e4382189e7a459ac30d","_id":"libp2p-circuit@0.1.1","_npmVersion":"5.5.1","_nodeVersion":"8.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"be8f5f50208453e4720b4c6b5ca36d5eacfa8ab1","size":760969,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.1.1.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit-0.1.1.tgz_1508869653409_0.8345118316356093"},"directories":{},"publish_time":1508869655018,"_hasShrinkwrap":false,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1508869655018,"_cnpmcore_publish_time":"2021-12-16T13:39:37.254Z"},"0.1.0":{"name":"libp2p-circuit","version":"0.1.0","description":"JavaScript implementation of circuit/switch relaying","main":"src/index.js","scripts":{"lint":"aegir lint","build":"aegir build","test":"aegir test --target node --target browser","test:node":"aegir test --target node","test:browser":"aegir test --target browser","release":"aegir test release --target node --target browser","release-minor":"aegir release --type minor --target node --target browser","release-major":"aegir release --type major --target node --target browser","coverage":"aegir coverage","coverage-publish":"aegir coverage --provider coveralls"},"pre-commit":["lint","test"],"repository":{"type":"git","url":"git+https://github.com/libp2p/js-libp2p-circuit.git"},"keywords":["IPFS"],"author":{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},"license":"MIT","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","devDependencies":{"aegir":"^12.0.8","chai":"^4.1.2","pre-commit":"^1.2.2","sinon":"^4.0.1","dirty-chai":"^2.0.1"},"contributors":[{"name":"David Dias","email":"daviddias.p@gmail.com"},{"name":"Dmitriy Ryajov","email":"dryajov@gmail.com"},{"name":"Friedel Ziegelmayer","email":"dignifiedquire@gmail.com"}],"dependencies":{"assert":"^1.4.1","async":"^2.5.0","debug":"^3.1.0","interface-connection":"^0.3.2","lodash":"^4.17.4","mafmt":"^3.0.1","multiaddr":"^3.0.1","multistream-select":"^0.13.5","peer-id":"^0.10.2","peer-info":"^0.11.0","protocol-buffers":"^3.2.1","pull-abortable":"^4.1.1","pull-handshake":"^1.1.4","pull-stream":"^3.6.1","safe-buffer":"^5.1.1","setimmediate":"^1.0.5"},"gitHead":"f862cd63f2b32badff27e57db129728884d67d3b","_id":"libp2p-circuit@0.1.0","_npmVersion":"5.5.1","_nodeVersion":"8.4.0","_npmUser":{"name":"daviddias","email":"daviddias.p@gmail.com"},"dist":{"shasum":"c2f3b60bc552a8c009c3267fda7b1b1e3324c77a","size":760960,"noattachment":false,"key":"/libp2p-circuit/-/libp2p-circuit-0.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/libp2p-circuit/download/libp2p-circuit-0.1.0.tgz"},"maintainers":[{"name":"daviddias","email":"daviddias.p@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libp2p-circuit-0.1.0.tgz_1508571822754_0.5023370427079499"},"directories":{},"publish_time":1508571824625,"_hasShrinkwrap":false,"deprecated":"Circuit is now part of libp2p as of libp2p@0.26.1. This module should no longer be used standalone.","_cnpm_publish_time":1508571824625,"_cnpmcore_publish_time":"2021-12-16T13:39:39.178Z"}},"readme":"# js-libp2p-circuit\n\n\n[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai)\n[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/)\n[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p)\n[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io)\n[![](https://img.shields.io/travis/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://travis-ci.com/libp2p/js-libp2p-circuit)\n[![](https://img.shields.io/codecov/c/github/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://codecov.io/gh/libp2p/js-libp2p-circuit)\n[![Dependency Status](https://david-dm.org/libp2p/js-libp2p-circuit.svg?style=flat-square)](https://david-dm.org/libp2p/js-libp2p-circuit)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/feross/standard)\n\n![](https://raw.githubusercontent.com/libp2p/interface-connection/master/img/badge.png)\n![](https://raw.githubusercontent.com/libp2p/interface-transport/master/img/badge.png)\n\n> Node.js implementation of the Circuit module that libp2p uses, which implements the [interface-connection](https://github.com/libp2p/interface-connection) interface for dial/listen.\n\n`libp2p-circuit` implements the circuit-relay mechanism that allows nodes that don't speak the same protocol to communicate using a third _relay_ node.\n\n**Note:** This module uses [pull-streams](https://pull-stream.github.io) for all stream based interfaces.\n\n### Why?\n\n`circuit-relaying` uses additional nodes in order to transfer traffic between two otherwise unreachable nodes. This allows nodes that don't speak the same protocols or are running in limited environments, e.g. browsers and IoT devices, to communicate, which would otherwise be impossible given the fact that for example browsers don't have any socket support and as such cannot be directly dialed.\n\nThe use of circuit-relaying is not limited to routing traffic between browser nodes, other uses include:\n - routing traffic between private nets and circumventing NAT layers\n - route mangling for better privacy (matreshka/shallot dialing).\n\n It's also possible to use it for clients that implement exotic transports such as  devices that only have bluetooth radios to be reachable over bluetooth enabled relays and become full p2p nodes.\n\n### libp2p-circuit and IPFS\n\nPrior to `libp2p-circuit` there was a rift in the IPFS network, were IPFS nodes could only access content from nodes that speak the same protocol, for example TCP only nodes could only dial to other TCP only nodes, same for any other protocol combination. In practice, this limitation was most visible in JS-IPFS browser nodes, since they can only dial out but not be dialed in over WebRTC or WebSockets, hence any content that the browser node held was not reachable by the rest of the network even through it was announced on the DHT. Non browser IPFS nodes would usually speak more than one protocol such as TCP, WebSockets and/or WebRTC, this made the problem less severe outside of the browser. `libp2p-circuit` solves this problem completely, as long as there are `relay nodes` capable of routing traffic between those nodes their content should be available to the rest of the IPFS network.\n\n## Lead Maintainer\n\n[Jacob Heun](https://github.com/jacobheun)\n\n## Table of Contents\n\n- [Install](#install)\n  - [npm](#npm)\n- [Usage](#usage)\n  - [Example](#example)\n  - [This module uses `pull-streams`](#this-module-uses-pull-streams)\n    - [Converting `pull-streams` to Node.js Streams](#converting-pull-streams-to-nodejs-streams)\n- [API](#api)\n- [Contribute](#contribute)\n- [License](#license)\n\n## Install\n\n### npm\n\n```sh\n> npm i libp2p-circuit\n```\n\n## Usage\n\n### Example\n\n#### Create dialer/listener\n\n```js\nconst Circuit = require('libp2p-circuit')\nconst multiaddr = require('multiaddr')\nconst pull = require('pull-stream')\n\nconst mh1 = multiaddr('/p2p-circuit/ipfs/QmHash') // dial /ipfs/QmHash over any circuit\n\nconst circuit = new Circuit(swarmInstance, options) // pass swarm instance and options\n\nconst listener = circuit.createListener(mh1, (connection) => {\n  console.log('new connection opened')\n  pull(\n    pull.values(['hello']),\n    socket\n  )\n})\n\nlistener.listen(() => {\n  console.log('listening')\n\n  pull(\n    circuit.dial(mh1),\n    pull.log,\n    pull.onEnd(() => {\n      circuit.close()\n    })\n  )\n})\n```\n\nOutputs:\n\n```sh\nlistening\nnew connection opened\nhello\n```\n\n#### Create `relay`\n\n```js\nconst Relay = require('libp2p-circuit').Relay\n\nconst relay = new Relay(options)\n\nrelay.mount(swarmInstance) // start relaying traffic\n```\n\n### This module uses `pull-streams`\n\nWe expose a streaming interface based on `pull-streams`, rather then on the Node.js core streams implementation (aka Node.js streams). `pull-streams` offers us a better mechanism for error handling and flow control guarantees. If you would like to know more about why we did this, see the discussion at this [issue](https://github.com/ipfs/js-ipfs/issues/362).\n\nYou can learn more about pull-streams at:\n\n- [The history of Node.js streams, nodebp April 2014](https://www.youtube.com/watch?v=g5ewQEuXjsQ)\n- [The history of streams, 2016](http://dominictarr.com/post/145135293917/history-of-streams)\n- [pull-streams, the simple streaming primitive](http://dominictarr.com/post/149248845122/pull-streams-pull-streams-are-a-very-simple)\n- [pull-streams documentation](https://pull-stream.github.io/)\n\n#### Converting `pull-streams` to Node.js Streams\n\nIf you are a Node.js streams user, you can convert a pull-stream to a Node.js stream using the module [`pull-stream-to-stream`](https://github.com/dominictarr/pull-stream-to-stream), giving you an instance of a Node.js stream that is linked to the pull-stream. For example:\n\n```js\nconst pullToStream = require('pull-stream-to-stream')\n\nconst nodeStreamInstance = pullToStream(pullStreamInstance)\n// nodeStreamInstance is an instance of a Node.js Stream\n```\n\nTo learn more about this utility, visit https://pull-stream.github.io/#pull-stream-to-stream.\n\n## API\n\n[![](https://raw.githubusercontent.com/libp2p/interface-transport/master/img/badge.png)](https://github.com/libp2p/interface-transport)\n\n`libp2p-circuit` accepts Circuit addresses for both IPFS and non IPFS encapsulated addresses, i.e:\n\n`/p2p-circuit/ip4/127.0.0.1/tcp/4001/ipfs/QmHash`\n\nBoth for dialing and listening.\n\n### Implementation rational\n\nThis module is not a transport, however it implements `interface-transport` interface in order to allow circuit to be plugged with `libp2p-swarm`. The rational behind it is that, `libp2p-circuit` has a dial and listen flow, which fits nicely with other transports, moreover, it requires the _raw_ connection to be encrypted and muxed just as a regular transport's connection does. All in all, `interface-transport` ended up being the correct level of abstraction for circuit, as well as allowed us to reuse existing integration points in `libp2p-swarm` and `libp2p` without adding any ad-hoc logic. All parts of `interface-transport` are used, including `.getAddr` which returns a list of `/p2p-circuit` addresses that circuit is currently listening.\n\n```\nlibp2p                                                                                  libp2p-circuit (transport)\n+-------------------------------------------------+                                     +--------------------------+\n|        +---------------------------------+      |                                     |                          |\n|        |                                 |      |                                     |   +------------------+   |\n|        |                                 |      |  circuit-relay listens for the HOP  |   |                  |   |\n|        |           libp2p-swarm          <------------------------------------------------|  circuit-relay   |   |\n|        |                                 |      |  message to handle incomming relay  |   |                  |   |\n|        |                                 |      |  requests from other nodes          |   +------------------+   |\n|        +---------------------------------+      |                                     |                          |\n|         ^     ^   ^  ^   ^           ^          |                                     |   +------------------+   |\n|         |     |   |  |   |           |          |                                     |   | +-------------+  |   |\n|         |     |   |  |   |           |          |  dialer uses libp2p-swarm to dial   |   | |             |  |   |\n|         |     |   |  +---------------------------------------------------------------------->   dialer    |  |   |\n|         |     | transports           |          |  to a circuit-relay node using the  |   | |             |  |   |\n|         |     |   |      |           |          |  HOP message                        |   | +-------------+  |   |\n|         |     |   |      |           |          |                                     |   |                  |   |\n|         v     v   |      v           v          |                                     |   |                  |   |\n|+------------------|----------------------------+|                                     |   |  +-------------+ |   |\n||           |      |    |      |                ||                                     |   |  |             | |   |\n||libp2p-tcp |libp2p-ws  | .... |libp2p-circuit  ||  listener handles STOP messages from|   |  | listener    | |   |\n||           |      +-------------------------------------------------------------------------->             | |   |\n||           |           |      |plugs in just   ||  circuit-relay nodes                |   |  +-------------+ |   |\n||           |           |      |as any other    ||                                     |   |                  |   |\n||           |           |      |transport       ||                                     |   +------------------+   |\n|+-----------------------------------------------+|                                     |                          |\n+-------------------------------------------------+                                     +--------------------------+\n```\n\n## Contribute\n\nContributions are welcome! The libp2p implementation in JavaScript is a work in progress. As such, there's a few things you can do right now to help out:\n\n- [Check out the existing issues](//github.com/libp2p/js-libp2p-circuit/issues).\n- **Perform code reviews**.\n- **Add tests**. There can never be enough tests.\n\nPlease be aware that all interactions related to libp2p are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md).\n\nSmall note: If editing the README, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification.\n\n## License\n\n[MIT](LICENSE) © 2017 Protocol Labs\n","_attachments":{},"homepage":"https://github.com/libp2p/js-libp2p-circuit#readme","bugs":{"url":"https://github.com/libp2p/js-libp2p-circuit/issues"},"license":"MIT"}