{"_id":"@dpkrn/nodetunnel","_rev":"11-931432da286bb14f6cae4ead56f5ef1f","name":"@dpkrn/nodetunnel","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@dpkrn/nodetunnel","version":"1.0.0","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.0","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/NGROK/tree/main/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/NGROK/issues"},"dist":{"shasum":"33dfa7adcaf7c97af754755e84eb22ee753e9127","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.0.tgz","fileCount":8,"integrity":"sha512-sFWNa0lUull5PXsACGCcsZWuzyDYwY2L/WAANywTulwpLna339OVdRVtu6yjSbUKggm/O1M7aN5WVdNaDLMpcA==","signatures":[{"sig":"MEUCIQC0Z897fND5Dh3oLrti2rssCOPc6YmMrb957wbXarRsCgIgaxcdZKwXH/VyBHJkVHTTi/YyPWWBu6OKiUI6B+HDRBg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17927},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/NGROK.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"yamux-js":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.0_1775212075263_0.24666249302297016","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dpkrn/nodetunnel","version":"1.0.2","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.2","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/NGROK/tree/main/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/NGROK/issues"},"dist":{"shasum":"0dd52f7eefde4059be6a0b9776f270a37521ceca","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.2.tgz","fileCount":8,"integrity":"sha512-Y0BhQSPVx8ntD2IDSVm/gP6WsZBWtn2VlQdvo75MFXIL93BMqGg1aTZwj56dFvAylh0C5Bclq1O6/rX1NOYplg==","signatures":[{"sig":"MEYCIQCDexPnAgXn9EGH5umdUQvB693C6mxogMU2PbFf60kbiAIhAOxF6CWkfVygG72vJXTDyGtzH2BuCYduJP8hGVABV6Uf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17927},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"09893a34229248ea48096f89c72eb38c2df4d4e4","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/NGROK.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"yamux-js":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.2_1775212270283_0.718036389198476","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@dpkrn/nodetunnel","version":"1.0.3","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.3","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/NGROK/tree/main/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/NGROK/issues"},"dist":{"shasum":"f1a565ebf20667935db9fca5609c5c751c12c86e","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.3.tgz","fileCount":8,"integrity":"sha512-si+bMntGXh6PQc+N/ezHfv2CnVjrNT1ZzOfHUuYKxjXgKCbZ6S8L4aX8DEQO52MmJLzBM4UNumUm7kCvNvbo0g==","signatures":[{"sig":"MEUCIQCJr5VwS+e8Usi91xWQsJ7hF1FQnJwv5vajt90Xhq9lzgIgMkC0mPAXP1g9WLiY0PkPzQLzy+Y4BS04KYetlctRRgU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14846},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"09893a34229248ea48096f89c72eb38c2df4d4e4","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/NGROK.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"yamux-js":"^0.2.0","@dpkrn/nodetunnel":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.3_1775213378107_0.18664181353429998","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@dpkrn/nodetunnel","version":"1.0.4","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.4","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"dist":{"shasum":"3e9677d37cbaa183b2387b72dcec30f870826637","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.4.tgz","fileCount":8,"integrity":"sha512-n6f8K7Xtm59k1dGcjVHhzHGyhZgYyrdx5XcyWi+f1IL3qZCQssIxr7FYVbi6QqZC6DGJmM+66ME9W1OtL6+OUw==","signatures":[{"sig":"MEQCIE0z9V6MpCl1lYRZTtKu/kdBqOeLRNT+z49ABdJKtU6FAiATfudSv9SxRhuPjzrp+RyMkreCwmNqEHqTQXzKFhP8iw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14698},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"04f76c9377de25f97d7d6807e98c8d490c6da65d","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/nodetunnel.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"yamux-js":"^0.2.0","@dpkrn/nodetunnel":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.4_1775215219079_0.16293019560243738","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@dpkrn/nodetunnel","version":"1.0.5","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.5","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"dist":{"shasum":"2bd493adfaba640b88e21b9d05e97e4ebb911bc3","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.5.tgz","fileCount":8,"integrity":"sha512-26nbkd5Sz1E53lNmP3+buEgiGfkJqWs57XXbG20KnNVbuiWjAFE4SWGBu8vyfpiZ7ncVdi9evTWHxo1G44roEQ==","signatures":[{"sig":"MEUCIQCK7iVBX/j7BJZsM/jX11OL1LuYwniod22JOLJamDKaPQIgAcHJ8Rd/ukAV/9IfRT8mB0GcZSJ2qBnW8K753J5dkuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14633},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"2653392ea8a3d2fd6b901687afcbf1ee739c905b","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/nodetunnel.git","type":"git"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"yamux-js":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.5_1775410053721_0.9169548583160418","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@dpkrn/nodetunnel","version":"1.0.6","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.6","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"dist":{"shasum":"e181e1f2d2b378c5a62e4c359e61fcabba0c89d3","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.6.tgz","fileCount":8,"integrity":"sha512-GHBcHp02Q8FGSno75WYrpitHzNJC+zChD7GcF2xfZqovxnm4+lfPsdbgjZksFtEMnRGQVeItWE6OV4OSHu7lpw==","signatures":[{"sig":"MEYCIQDURlQN8ULhvpJ2VFXbmE3tlq1CNen7lfC1mpAnbouMCwIhAIm7Wzf+hJ/HrxcTJUEAq9SIQrCS7BRquixQNSEaxPxe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14692},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"2653392ea8a3d2fd6b901687afcbf1ee739c905b","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/nodetunnel.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"yamux-js":"^0.2.0","@dpkrn/nodetunnel":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.6_1775410595730_0.48400633293020046","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@dpkrn/nodetunnel","version":"1.0.8","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.8","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"dist":{"shasum":"f27853d71e43b2208055f8df5cd5c1a679ebbdd7","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.8.tgz","fileCount":8,"integrity":"sha512-JKGOiuav6Zz47P35m+xLqtTPVjS+NLQAB7W0qPCUliwWNUA7za9NK+nUmHXFmPAYyuLvTrCJxdoHPOKfElbRyw==","signatures":[{"sig":"MEQCIDiPmw08VJvk/m7gZgaQvTKazVo/HlJcdpW+bWJ3av5nAiBdrcuQHWbpAyQx67jtHBIVKVq9sizyyLt1NhkSG7OCJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16325},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"ae164ce4252e749ee7207047c3ffc1b6ccf3ecb5","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/nodetunnel.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"yamux-js":"^0.2.0","@dpkrn/nodetunnel":"^1.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.8_1775935971697_0.019915203044441387","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@dpkrn/nodetunnel","version":"1.0.9","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.9","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"dist":{"shasum":"6f3062a6032acf5e32e00213cb2d7a7cc4b6b2f3","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.9.tgz","fileCount":11,"integrity":"sha512-OTjq8DI/u4vwFfzCkrzYKa4jfSokXfDKW8yfnn62IY85nT2vcKeUht9VDwvweC1eKk5/nmPkhCy+IxqDnWCAWw==","signatures":[{"sig":"MEYCIQCCDZjuJ/skerwd364i14JzXfe1xcySjf3bm6S0YNYAewIhAPlOmETNMUsa97wucUnwQGl1OpckbvLLgWkIBoyLfVGv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49045},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"e0a914a39c14c47e372cc349c3e55f057bfda2e7","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/nodetunnel.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"ws":"^8.18.0","yamux-js":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.9_1776005219265_0.44489925814291253","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@dpkrn/nodetunnel","version":"1.0.10","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.0.10","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"dist":{"shasum":"b3de27bf6bfa9222952c02298e210ef6bde0d1de","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.0.10.tgz","fileCount":11,"integrity":"sha512-uXRyP8Tl5V24jJW1YqQ73b686pOMCG7rMPHGJL2XeYeU03WSePcko2KD+7Ax9TDR2ffSFg/2EJL1Jf5DrNOW1w==","signatures":[{"sig":"MEQCICgsNp7sw3/AdiaAGpmrAF7LaszRo4FFmvMVh/P0Ix/iAiBEAH2ZKnfzGvSonH1FL5Yc77B6B81vB9Eitjpz7jzdKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50369},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"4ac8eaf3035202367c1ab513f0002a3835783bc0","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/nodetunnel.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"ws":"^8.18.0","yamux-js":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.0.10_1776005594330_0.25806961306675924","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dpkrn/nodetunnel","version":"1.1.0","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"author":{"url":"https://github.com/DpkRn","name":"DpkRn"},"license":"MIT","_id":"@dpkrn/nodetunnel@1.1.0","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"dist":{"shasum":"836a4f24619945283cb95bb58252dbb53b57213b","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.1.0.tgz","fileCount":16,"integrity":"sha512-rZMztBSOsDb8gRIdXxIJsYERMS/qbaBtZMOWjxgR2U+R7BbQCc9d/R9HpRBbwcTCqlGxZNO2Hs2iNQ2NV/9qhw==","signatures":[{"sig":"MEYCIQC9u+PUaFZeUqiuMbMIu42NLcAJkURDmhBYZApoyJkHPAIhANzhQrs0GiLFf2ja9E3UCpn8wuKFSb5WzxzYe/vkdJu5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115878},"main":"./pkg/tunnel/tunnel.js","type":"module","engines":{"node":">=18"},"exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"gitHead":"da34a7e0eae7a53cdf1243f81f65f2499e4f9909","scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"repository":{"url":"git+https://github.com/DpkRn/nodetunnel.git","type":"git","directory":"nodetunnel"},"_npmVersion":"11.10.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","directories":{},"_nodeVersion":"24.6.0","dependencies":{"ws":"^8.18.0","undici":"^7.25.0","yamux-js":"^0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"express":"^5.2.1"},"_npmOperationalInternal":{"tmp":"tmp/nodetunnel_1.1.0_1777805053356_0.7602895790038937","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@dpkrn/nodetunnel","version":"1.1.1","description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"homepage":"https://github.com/DpkRn/nodetunnel#readme","bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"repository":{"type":"git","url":"git+https://github.com/DpkRn/nodetunnel.git","directory":"nodetunnel"},"license":"MIT","author":{"name":"DpkRn","url":"https://github.com/DpkRn"},"type":"module","main":"./pkg/tunnel/tunnel.js","exports":{".":{"import":"./pkg/tunnel/tunnel.js","default":"./pkg/tunnel/tunnel.js"},"./pkg/tunnel":"./pkg/tunnel/tunnel.js","./pkg/tunnel/tunnel.js":"./pkg/tunnel/tunnel.js"},"engines":{"node":">=18"},"scripts":{"test-lib":"node cmd/test-lib/main.js","prepublishOnly":"node -e \"import('./pkg/tunnel/tunnel.js').then(() => console.log('pack ok')).catch(e => { console.error(e); process.exit(1); })\""},"dependencies":{"undici":"^7.25.0","ws":"^8.18.0","yamux-js":"^0.2.0"},"devDependencies":{"express":"^5.2.1"},"publishConfig":{"access":"public"},"gitHead":"dd37376aa4836948ec32198e99f234e0ff8f64b3","_id":"@dpkrn/nodetunnel@1.1.1","_nodeVersion":"24.6.0","_npmVersion":"11.10.1","dist":{"integrity":"sha512-pbENPm08AgrgKpNld+KyEZ6F7916zVz9QO+zlUyP7jV5o5NR2SCrGqrgNQZMk4OLYGXE1LIgeBMrThY92wWjpQ==","shasum":"e5c66465512280a809dd8cee17a22216138b63ba","tarball":"https://registry.npmjs.org/@dpkrn/nodetunnel/-/nodetunnel-1.1.1.tgz","fileCount":16,"unpackedSize":116596,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCQB2yVgsZ4oSYNKkBxfnUyp5w8A2ch3U8Pb6Pldhya7QIhAPDHxGhelBQGUH94IR5lVt4AeUvLOoDc2VFnTZF7EU3+"}]},"_npmUser":{"name":"dpkrn","email":"d.wizard.techno@gmail.com"},"directories":{},"maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nodetunnel_1.1.1_1777806136720_0.04814724357188305"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-03T10:27:55.156Z","modified":"2026-05-03T11:02:16.984Z","1.0.0":"2026-04-03T10:27:55.424Z","1.0.2":"2026-04-03T10:31:10.443Z","1.0.3":"2026-04-03T10:49:38.476Z","1.0.4":"2026-04-03T11:20:19.238Z","1.0.5":"2026-04-05T17:27:33.892Z","1.0.6":"2026-04-05T17:36:35.868Z","1.0.8":"2026-04-11T19:32:51.844Z","1.0.9":"2026-04-12T14:46:59.417Z","1.0.10":"2026-04-12T14:53:14.487Z","1.1.0":"2026-05-03T10:44:13.518Z","1.1.1":"2026-05-03T11:02:16.860Z"},"bugs":{"url":"https://github.com/DpkRn/nodetunnel/issues"},"author":{"name":"DpkRn","url":"https://github.com/DpkRn"},"license":"MIT","homepage":"https://github.com/DpkRn/nodetunnel#readme","keywords":["tunnel","ngrok","yamux","devtunnel","gotunnel","localhost","expose","http","multiplex"],"repository":{"type":"git","url":"git+https://github.com/DpkRn/nodetunnel.git","directory":"nodetunnel"},"description":"Expose a local HTTP server through a devtunnel/gotunnel-compatible server (yamux + JSON). Node.js 18+.","maintainers":[{"name":"dpkrn","email":"d.wizard.techno@gmail.com"}],"readme":"# @dpkrn/nodetunnel\n\nPackage **nodetunnel** exposes a local HTTP server on a public URL by establishing a persistent outbound TCP connection to a tunnel server.\n\nIt creates an outbound connection to a tunnel server and forwards incoming requests to your local application (e.g., `localhost:8080`).\n\nFrom **Node.js**, you get a **public URL** for webhooks, demos, sharing a dev server, or testing from another device — without a separate tunnel daemon.\n\n## Introduction\n\n### Benefits\n\n- Sharing your local server with others\n- Testing webhooks (Stripe, GitHub, etc.)\n- Remote debugging without deployment\n- No port forwarding or firewall configuration needed\n- Works behind NAT or private networks\n- Simple integration with existing Node.js HTTP servers (Express, Fastify, plain `http`, etc.)\n- Optional **traffic inspector**: local dashboard to capture tunneled requests, inspect them, and replay against your app\n\nIncoming traffic reaches the public URL, is forwarded through the tunnel, and is proxied to your local HTTP server (e.g., `localhost:8080`).\n\nThis enables exposing local development servers without port forwarding, firewall changes, or public hosting.\n\n### Requirements\n\n- **Node.js 18+**\n- A **tunnel server** must be running and reachable (configure `host` / `serverPort` — see **Options** under [API](#api) below).\n- The port passed to `startTunnel` must match your local HTTP server port.\n- Your local server must be running **before** or **concurrently** with `startTunnel`.\n\n## Overview\n\n**nodetunnel** exposes a local HTTP server on a public URL by connecting to a tunnel server you run separately. Traffic hits the tunnel first, then your app on `localhost`.\n\n---\n\n## Why use it\n\n- **No separate tunnel process** — call one function from your app.\n- **Works with your existing server** — Express, Fastify, or plain `http`.\n- **Simple API** — you get a public `url` and a `stop()` when you are done.\n- **Optional traffic inspector** — pass `inspector: true` to start a local HTTP UI on loopback (captures, replay, headers/bodies). By default the inspector is **off**. Themes are chosen **inside the inspector UI** (not via `startTunnel` options).\n\n---\n\n## Install\n\n```bash\nnpm install @dpkrn/nodetunnel\n```\n\nThis package is **ESM** (`import` / `export`).\n\n---\n\n## Quick Example\n\n```js\nimport express from \"express\";\nimport { startTunnel } from \"@dpkrn/nodetunnel\";\n\nconst app = express();\nconst PORT = 8080;\n\napp.get(\"/\", (req, res) => res.send(\"OK\"));\n\napp.listen(PORT, async () => {\n  const { url, stop } = await startTunnel(String(PORT));\n  // `url` — public URL for your server\n  // `stop()` — closes the tunnel connection\n});\n```\n\n---\n\n## Easiest example\n\n```js\nimport http from \"node:http\";\nimport { startTunnel } from \"@dpkrn/nodetunnel\";\n\nconst PORT = 8080;\n\nconst server = http.createServer((req, res) => {\n  res.end(\"Hello\\n\");\n});\n\nserver.listen(PORT, async () => {\n  try {\n    const { url, stop } = await startTunnel(String(PORT));\n    console.log(\"Public URL:\", url);\n\n    process.on(\"SIGINT\", () => {\n      stop();\n      server.close(() => process.exit(0));\n    });\n  } catch (e) {\n    console.error(\"Tunnel failed:\", e.message);\n  }\n});\n```\n\nRun with `node app.js`. Open the printed URL in a browser or share it for webhooks.\n\n---\n\n## Traffic inspector (optional local dashboard)\n\n**Default:** `inspector` is **`false`** if you omit options or do not set `inspector`. No inspector server, no capture buffer, no extra listen port.\n\nWhen **`inspector: true`**:\n\n1. Starts a small **HTTP server on your machine** (default listen **`http://127.0.0.1:4040`**) that serves the inspector UI (override with `inspectorAddr`).\n2. **Captures** each tunneled request/response in memory (up to **`logs`** entries) so the UI can list them and push updates over WebSocket.\n\nWhen **`inspector` stays false** (the default):\n\n- No inspector process runs — nothing listens on the inspector port.\n- No traffic is stored for inspection (`logs` and `inspectorAddr` are ignored).\n- The startup banner omits the **Inspector →** line.\n\n### What you get with the inspector enabled\n\n- **Live traffic** — tunneled requests appear in the UI (WebSocket updates).\n- **History** — recent captures in memory (size limited by `logs`).\n- **Inspect** — request/response headers and bodies (when captured).\n- **Replay** — send a capture again to your local app, or edit method/path/headers/body and replay.\n\n### Themes (inspector UI only)\n\nPostman-style and Terminal-style palettes are available from the **Theme** dropdown in the inspector page; the choice is stored in the browser (localStorage). You do **not** configure themes on `startTunnel`.\n\n### Example: inspector enabled with custom port and log limit\n\n```js\nimport http from \"node:http\";\nimport { startTunnel } from \"@dpkrn/nodetunnel\";\n\nconst PORT = 3000;\n\nconst server = http.createServer((req, res) => {\n  res.setHeader(\"Content-Type\", \"text/plain\");\n  res.end(\"hello\\n\");\n});\n\nserver.listen(PORT, async () => {\n  const { url, stop } = await startTunnel(String(PORT), {\n    inspector: true,\n    inspectorAddr: \":4040\",\n    logs: 100,\n  });\n\n  process.once(\"SIGINT\", () => {\n    stop();\n    server.close(() => process.exit(0));\n  });\n});\n```\n\nOpen the **Inspector →** URL printed on startup (e.g. `http://127.0.0.1:4040`).\n\n### Example: tunnel only (default — same as omitting options)\n\n`startTunnel(port)` / `startTunnel(port, {})` already keeps the inspector off. You only need `inspector: false` if you merge options from elsewhere and want to force it off:\n\n```js\nconst { url, stop } = await startTunnel(\"8080\"); // no inspector\n```\n\n---\n\n## Express (same idea)\n\n```js\nimport express from \"express\";\nimport { startTunnel } from \"@dpkrn/nodetunnel\";\n\nconst app = express();\nconst PORT = 8080;\n\napp.get(\"/\", (req, res) => res.send(\"OK\"));\n\napp.listen(PORT, async () => {\n  try {\n    const { url, stop } = await startTunnel(String(PORT));\n    console.log(\"Public:\", url);\n    process.once(\"SIGINT\", () => {\n      stop();\n      process.exit(0);\n    });\n  } catch (e) {\n    console.error(e.message);\n  }\n});\n```\n\n---\n\n## API\n\n### `await startTunnel(port, options?)`\n\n| Argument | Description |\n|----------|-------------|\n| `port` | String, e.g. `\"8080\"` — must match the port your HTTP server uses. |\n| `options` | Optional. See **Options** below. |\n\n**Returns:** `{ url, stop }`\n\n| Field | Description |\n|-------|-------------|\n| `url` | Public URL people can hit. |\n| `stop` | Call to tear down the tunnel (and the inspector, if it was started). |\n\nErrors **reject** the promise — use `try/catch`.\n\n### Options (`startTunnel` second argument)\n\n| Field | Type | Default | Applies when |\n|-------|------|---------|----------------|\n| `host` | `string` | `'clickly.cv'` | Always — tunnel control server hostname. |\n| `serverPort` | `number` | `9000` | Always — TCP port of the tunnel server. |\n| `inspector` | `boolean` | `false` | Always — if `false` (default), no inspector UI, no capture store, and inspector-only options below are ignored. Set `true` to enable the local inspector. |\n| `logs` | `number` | `100` | **`inspector: true` only** — max request/response captures kept in memory. |\n| `inspectorAddr` | `string` | `':4040'` | **`inspector: true` only** — listen address for the inspector (e.g. `':4040'`, `'localhost:9090'`). |\n\n---\n\n## Troubleshooting\n\n- **Connection / tunnel failed** — Confirm your tunnel server is running and that `host` / `serverPort` match your setup.\n- **Nothing loads on the public URL** — Confirm your local server is already listening on the port you passed to `startTunnel`.\n- **Port in use** — Pick another port or stop the other process using it.\n\n---\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","readmeFilename":"README.md"}