{"_id":"@noia-network/node","_rev":"65-bc11ad7bb041329c54d86f087b7d4194","name":"@noia-network/node","dist-tags":{"latest":"1.2.4","alpha":"1.0.0-alpha.3","rc":"1.2.5-rc.1"},"versions":{"0.2.5":{"name":"@noia-network/node","version":"0.2.5","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.2","@noia-network/node-contents-client":"^0.2.0","@noia-network/protocol":"^0.2.2","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"faa96f009d588f6435240929d4c1c90367c21ba2","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.2.5","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-E8ecB1NJI1E/Ino2kQMA5kuz32qNXrx7l0U+oVHUGjjQDyH8HaITA2EmkJ7GGMIYZs9Uzx2pqODFTGZXm3z1Qw==","shasum":"68b430803b604fe3131c84d34a6d27d0def91a9a","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.2.5.tgz","fileCount":60,"unpackedSize":211800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLC1SCRA9TVsSAnZWagAA0NgQAI1LUb9tF9vnZCZUPq9m\nEKvUF9Rm6HgLKytzXtMsfYnEZEn1K8sbz/MXKrcGq/k5OZyZ99ecVm+8bYc9\n5GzlXfzIWqmTMgQVyQDSZHX1wdNykskCSWujVI/2V6pw61LoeDKKPy3Gl8gH\n/RM+W27TReDyUlMWa3fzOa3hUJP8vf8OLEb24Xf9bMZ30qJjbZN0JNqIbOWQ\n1ukGHcF+8EfRgxmtrVPdNRMuTEdUN4fXvqwKQOO6wCrcOMoE39iL/lmMLXVF\nJpXN4T08hqR0EHpaiBLL74y6Pjhy18klXfhrU+yiL+cRWa9r+5D+gNW5L8aO\nTsL8vd2ExzmoE2d1U0DdSkawGJEowHXuC9BOp91eYBSDNgOANr12v0UBltT8\n/SIZTHpy51RZdWuICUMg1j6W1OAYFfzHjUPbI1ReQtEdEzSnTSNqDtjpoxXA\n3mP99stIqaGJ2aLdtMQ2Zqg99vN+wqK1F1wGGuauhXpD6xwtyTbd0z+nQ4qg\nlUpZjcfeDkYz9r8L9US1dVaKmI0klabcvyq4Svq1u8H3odLf16p0qDTeXRzz\n6Wc+oj5GVTOJEvQAHHi2C0zhvvLZ6kwemHaBeBT0NQtExJyean0UKBXs6UMz\nEZboRdcqh4sZH2Lt8vU06M24XAfGgeBPIIlCic3YTuEq90BoC+CR2jxqvLj9\nxnMJ\r\n=xyaw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIClEj75O2FYXetXL6uat6VR10mMrEgqSkPOZUw40j9bRAiEAl2DETZJh5oFgU3/qewmh31S3sVBKeajudFLFxROxjUQ="}]},"maintainers":[{"name":"dovydas_noia","email":"dovydas@noia.network"},{"name":"sijonas","email":"jonas@noia.network"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.2.5_1529621842678_0.3914348160827268"},"_hasShrinkwrap":false},"0.2.6":{"name":"@noia-network/node","version":"0.2.6","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.2","@noia-network/node-contents-client":"^0.2.0","@noia-network/protocol":"^0.2.2","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"c415330ce090a5d8e16b349ba1628e255bc5f518","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.2.6","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-1sl1WJnDdSeuAbZiM0E0xxUBNv9gUiLKEGpxRv5HijzOCONQRhRmsJyTtvNIWRSpp6QpbvSIZStFtjQ59ENsnA==","shasum":"5f76f61244c88dc70edec6b7026a3f7ceadf2a12","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.2.6.tgz","fileCount":61,"unpackedSize":213710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLPgMCRA9TVsSAnZWagAAAnYP/jyx6DTq5RR25cTqAWG1\nOSp90uYZigjLmOmcpgZnnYZEWoCZc902YGEjcp31WiZ0gglP8HHoOVlopGev\nEY5wQHhPyCaCLnIvw5J0xb1NzwvLCurlAGIywcdprSjAh4/JtxrnkPgT0Oxu\nSibTUkgBzms9NKB5qhSfZbPK74H9hAe/PuKHYNwg0cc2xTDWWI8aZgFn4GXB\n09ykFETZrBQlkjFfBrkaQk4Ckk3sADGIIAvOGW6deDhKUnXWkDfOV2FWxRpi\nacs1ESJ4tOUiZUWLr9Q4WWuxAIM114JWumesj8DcQ0gb4URdMApk9KjZOBR0\nQSDWGqQndpwi/ruS68qRy0V75976PxSv3YcCawt3U4ELY8I0sxL61MmBqGx+\nrKy1zRWWMl8ykIWq3Cex2+jfhC8tvgRjlg6VxqNjDJZNHwDp35hI0Xh3t7gS\nzPifG6gANMEz2ChTInchEUwKkblltQILTTHjlYPqQz+6F7SLXkvl/vTb1NRS\nwsUsbO4V4goIfg0Dg8vFQylDTkKcFQtifYIep0gvASbZnYqCNYcn4rnggf6k\ngGoK79GJNSm9B38hO9q76xHcy66LkZq2OQhLJFNV9l7da9j9/Ob44QmaDsKd\nifh+395C59RVpBUN0TtoQvKYP8mjACC3LVig4ybJuMVKR5vGRrxEWVEW5k3s\nYIdi\r\n=b13I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEG54fnV2jIZeL7rM5JNhBw/ALoz/YQYoW80gPc3YBZLAiEApi1UKPnZTL+OfdLeLsKibx+aA3jMh+M+qmrDg8YIxac="}]},"maintainers":[{"name":"dovydas_noia","email":"dovydas@noia.network"},{"name":"sijonas","email":"jonas@noia.network"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.2.6_1529673740795_0.4861119411094743"},"_hasShrinkwrap":false},"0.2.7":{"name":"@noia-network/node","version":"0.2.7","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.2","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.2.2","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"33e1c7e252ce3afa58d0e4767c2441d1902fee2d","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.2.7","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-t03eknWPEiuDSGnjGVNIiSCjcI7LHw6AiUL5mf7GplIuGgbYgYTjrbiWLNPIBtD8J4s71ezIRjiF9CSvVgrc7Q==","shasum":"2a3110bd032f59fcc1f70f9cb390b681a9582d12","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.2.7.tgz","fileCount":61,"unpackedSize":213710,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOPfFCRA9TVsSAnZWagAAmR0P/3AWsECw/uzS5MVSoBk7\niWp5MsLSm36P/BBqLqxP7afN/8yXi20tWhi/QhHdFEqXczsuuU5qRiZk80df\nnnv0EMTdcNQ4h+IoSrnQnRqFW7UUJRCQZaA2HWeflCmdHiUq1PGM6Rr+NHJi\nUQHaFWhFfP1dpdiLwEQaOtPDAvQt/yu4WwtOGo1CqVhgFHmDihlLSDZvHh1j\nuuCrKPtsi3nFt2m0H3L3Yu2ew0Per7XcE6fKDaJjhsDnu59qm56corB8GKfy\nMyFBsMMxj86JllLF4I/hjIhxpWjqpr2lkwgHoqUz08DPEL22fyqquI/oIZn2\nggSs48CBKPv279NcigzGrxgSIXp5/b1hD+Y7IgArqO0WvfmPxE6VLFWfW5Ch\nNFCLh8ZaLIaUiVM+qyszqW27SFwajVHMEE0HAFldyBr9I0Jcq2wsQJvhFkIf\nGI+JvLw+Zvxp6KQGkizeAbwnlrd46CxJikpkYEyKUmVRY4zKWA2aCz6s6WZG\nJdOiJ3bfink53+6HMoccga/PyAKUxhTp10DXnhscu+RRtBC8Em6ITF06TX8U\nwp7HMLMXYmqW3g4VGTw7iO+cdXgqqBLHalP0+vE4g7naQU4Ub/9Md3DMBA79\niGGcI2zAYcKhJDtdmvIdg3JI7eFXh5kKbR2LabFGAQIl9726hGc7ZcOu54+5\nNH2L\r\n=XHie\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGKrqP2zge4QOoJw+BJ0kNfq3X/0/ajDHdp2JPNVSJ9YAiBXxOqHs0Cfx7txjq1jEZDbsqZIZfUryffjWsiIcLuRVw=="}]},"maintainers":[{"name":"dovydas_noia","email":"dovydas@noia.network"},{"name":"sijonas","email":"jonas@noia.network"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.2.7_1530460101236_0.08753242621910928"},"_hasShrinkwrap":false},"0.3.12":{"name":"@noia-network/node","version":"0.3.12","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.2","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.2","@noia-network/webrtc-direct-server":"^0.2.6","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"ac4c5db3fc9cf42abbf2e8f0a94a573f52cadc2e","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.3.12","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-MTDw93EdYuypuV6WinbBRGXeY0McjZCbObXm3PzPmW6QbcE67yAzJfVbmCw3a1JuPmxcrzxfWZ66Udv7H92PTw==","shasum":"747680271b95a5ed68a919f13dc19bde3793e64d","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.3.12.tgz","fileCount":64,"unpackedSize":236702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZC9iCRA9TVsSAnZWagAAjUgQAJpejI3mfdAmW7tNnimq\nDpRmIhgv3OeSWg3cgtaNBlNk7oFWZcDvvPJBBGK/uTlcBsNglRfah12Fsml6\nwOReTdF/5SrWoSPbRw1w4xlRP11JarI9EtywcLd755sKFCFEvjPg/R88YN8u\nm2QTV6gQQjICClZIp4Au7SoxcDGRd6y5P40dg4QA63SmcOA4TpkWEJyNWL63\nuqgNyoK9R79kTsDWvYEpNSR7ocJjmAdLz4kB2zmSG39i1Ub/+rWFXXCFbREn\no58sD5YUU0uPi13HmPri2e61kKpK8JXV2Txa2c/Y8iUmEEXwBKQ6QiV6xe9K\n6rpQd//GtOsC+H4v1sUnX3eapDoKQhpA2tt7qOeweDinoKBkbnwUI2Whm+IU\nuIRaoB22FCtcnEGAdIQmGmLBbIVzJgbCtiA+qTx+OZP07w8YPqbo/FlVcDjj\nsgib08j0DM0p1ZBX0odrEEPewGffZLgewuMime3D3qLC9vLkKPkTC6dqRp/R\nT8FRhYGljnE58nbX/CKJnvNtK7rLic5zMT7oAGGRRa6h39kiTC01ViqFgejk\nu5OhmuOVFJ5oi0I1/m2Fps/2s6NW2FGSA0gDFt6YRC0DJYA4uYbcn90JFWPq\nc8QvZYtMxRf9a2dplzXmnWRpPc4WIxbT3B+u8nUL8OeS490K8nR1DD8EMzD2\nslrb\r\n=UcVv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID0r0zfmXoLR4ABrh8EdxBclKRmjqIYs6s4dOMYUb9P3AiBy1uu1GJvhLOKDc7IebvMyeyStT8idrS8zo3/ecOilWQ=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.3.12_1533292385930_0.008317615097456432"},"_hasShrinkwrap":false},"0.3.13":{"name":"@noia-network/node","version":"0.3.13","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.2","@noia-network/webrtc-direct-server":"^0.2.6","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"e620d91ffecd764a3b433526fecdfed5cc0f7af9","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.3.13","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-TdxJXtKL2n+0rEk7DCP0PQx0KgA/QqKVWKT3j+N/a6XrDyTLHx2/3CKQJJtgZJ/7t+cCMyHQxVKxHim4/9tNXw==","shasum":"a30d533a578bdaaa3d99d927e37c5841495f86ef","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.3.13.tgz","fileCount":64,"unpackedSize":236702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaBwYCRA9TVsSAnZWagAAUe0P/1+QjfQ2dNfFv21An9bJ\naTRe6djV74HvYkZJ2iluHKr1B6FMwghlMKo74YA4DkpN2FWPfVi/vvl7dlGb\n66miHB1wFCmxnDxA7tMEV4jyCP1Py5Giu8IeJDi4ivbxgEJv8PRcrB/IvbME\naHdxNnu2BJHDo0XvtyRv0TWofqIIDpSx+ilbSLUygA9Kau7ta8d3gk8/RNNv\nQ4lSodck6BIAUgrH5J5Ft8oSeKrHVqSnW4ViGAPnowEtloAlB3RhX4FSl4T4\n5qGorhwS7jzvF6ITPk4qZW2xpTPupl8azZPmF8S0ek1N3YT4Qd3C0/POBleB\nLyaBu1vIsVG+SgIdhtFEflTVOprtoBgW+u0PziMJT9tKcROb5Tnh5wJjpnV+\nug6ObcYL1pmIbUihQ9LoqPIyaIOK4O6mfUpUmneUUuIpVnYZMztXnb7IEbTW\niIPynAE40Z8PHkIbRl/gXvbZkV5eVGza5X8RTfDcCOp/cybUUNWuezPuWrRO\ndKdUIcWw1PJ+pg4fk7y+mbU5tVl3YJO1+XQHHsblRdWgfwyoMIDtotu/Bc5j\nutFAokzyqy6PbjZT6V0AEB6mE1yxAURQ5+Yl9PrdUABKJEBxbAnBurKOdGWu\nFAEBzHLIoFx94y0HN4t4x6EeWANw+L68Ox1mC9tT0U0aWtNBxPimD+EFL69Z\n7d99\r\n=hm/e\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD195dwVLOOGN69bxMO/733/MyZ73LhI/5EZbuPjGu++wIgBnmP3N+u8UMcOuynJnleRPKE5b7Ic8DYXrZ5aj2e214="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.3.13_1533549584222_0.8755632950513308"},"_hasShrinkwrap":false},"0.3.14":{"name":"@noia-network/node","version":"0.3.14","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.2","@noia-network/webrtc-direct-server":"^0.2.6","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"c4a375d7c5a6122a33b23d8809cfea69522b5bc2","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.3.14","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-Pi3d2xF1NhR1aq8pWdSqraWhWGZs8FQ7NB8YRHk7poemYHOb7myozGybFYTrC9yZT+LbwJ+VhY4upIT7ssFbZg==","shasum":"20e988f91fca6d65ac9f55c57c0e538e0d3b85cc","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.3.14.tgz","fileCount":64,"unpackedSize":236767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaKJBCRA9TVsSAnZWagAARqYQAJCZ403baRGQR8hjq+qd\neF4FjRp9oxsAkzGesrEBBGl2HCWTCTlbGBYiAqEMPYbeaIcApczXzc2ijLbM\nyqG3zgmdPfoOHguChDIm/4/NDIPuw8ZA8AwLWGywz8EnG1N0MjA/whJ51EYH\nqgT+j62CbUZdZVVC9nSF2tTxottYzRE69k0Uauj/pH7WWvUM0AInHdgfyu1S\nqpe+RvJG43YW+w2RDNp5U2x6YRbHEYb/HVjgI40hNnHjzlacmRNXMbRELX8k\nlbFu4/m+nZ6XDY5DiSV9UH5bUzj1rXK9Y0nppPrxvrjZYhIKxWFWlRhJK1qU\nO9q5yOeeHD1VQIUuqLU/20r47060jRtBRO6jO0s3P2WohnNuAE3FIa01i527\nHYUCHxjgGOpdfWUAfOU6bFVnC3AtCKC3J0mzruKkAzKgTq7rkGvFV+/vsXW3\nZpYq129XoHATya8OtaaqqqVc+LSwbrGKTUGbaxBrWUYE6t0SqPX6PM4GbPAY\n+VYU1fdLoZ9M/J4z6R1zMhdMfX1wYiYTALEmD+4sn/8+JWjp8oPbdkbiU4tT\n/tKH/9RXc9qX0508R6hmoFzVVCtlEES1s/ZFzivODcfLIom3Y3Bpq44/sFU1\nSY2OwzNktLcV6ROm0ZsUQ2ZW+d+E6E6thlXwIgisRv3bJMx2j3wifMN1VZeN\n2ebc\r\n=t/UB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDywgKby4ip6HNq7XKFD6/Zi4liO0wH0DqLMI4QYZYN8AIhAMtd8/MNDyko5JD05ipb1fsqfM4Lu/YMu97gEkRzwN8u"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.3.14_1533583927457_0.12837099636755167"},"_hasShrinkwrap":false},"0.3.15":{"name":"@noia-network/node","version":"0.3.15","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.2","@noia-network/webrtc-direct-server":"^0.2.7","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"28ac8b861e0c8029ca1c70854f9d605ee0427258","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.3.15","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-Fg3mRj+56cXUv3ssofLnkY22iLsBkO9HOG0Ev9Xu1orF2oa/v/ulmFRCNhJePtGRNhEDxR7qMUgisar6ZyK0jQ==","shasum":"306b6a4f6ed1cf4671161df0bc3f7af895cb7b66","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.3.15.tgz","fileCount":64,"unpackedSize":237484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJba2FkCRA9TVsSAnZWagAANT8P/3mQRxONTFUmFtxkrXMC\nfJDXF8xG6SnsRn3OjxAlmX8Q5JR3y5sVwX/6ITkM+XBTdz6vzMMCyGvyl0Wu\nSdUYlwqE+ivSyA1YhXqYU/Yr4NWhv0Hb5DbpOj2oMhaI+gTi3nh/mHHaXS7r\nkrIQP8OZTB3tyOxyv2/Vu/hDdpV+paBQNhTeP7mO46Qk/XaauHO/6RKuN78N\nWCphHnwWms3CeZHCv32Y/lZOIKUlOB92283h7qLL8ukspTgAtCrNhUUhPnUz\nEmfGiAKR5RAHIW62n250AfngVNsNSqPsDnh7Mobbw0QjAjJlKvRf7QzamdXo\noRPY/ZnzqCV8Z8BRXA960g2sokmvNkvpaES9xIj1hVI7ZoQRa0HIFDGmUpn5\nAnVHaIil52Gpp5U7Hkblc7EbSz0JfO1y7z7Aa3B7/5i+0BinEBLLrjqwSA0p\nwoZZGgExmnnoe9iHmtEK7Z9PcwFCzknhEdQQPYzG3yu2G1dtlZL4oED7mZl+\nhjaJO9ZxDnzI1fAI74ymg6Pj6PwiYIyxA3A8jup9n9w3UnXU6y6iD9oeCVwg\n8KnRQ3BGdo5T7H+bOOndTrN1awy1zROCcoG4OXIU3lwXteuuG09f3u1484vL\nT/hNheM5i00jo3N+32Pkg/BuQN4NuXqxhmrijnIfJUKU7mdBD1QNgZZxZVZm\ncx7H\r\n=QhPz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdlYarq5DHuoSAE2ZbntTS43If7vz1IHXaceWHf/+sswIhAIF77X3mTuh2QYa3janYOE94OreJveSGcijfWHcryvWl"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.3.15_1533763939998_0.470093195390173"},"_hasShrinkwrap":false},"0.3.16":{"name":"@noia-network/node","version":"0.3.16","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.2","@noia-network/webrtc-direct-server":"^0.2.7","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"d62aff2e74496875e84f597880c8469e6cd00763","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.3.16","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-A1cUv2E9wEiCuHyZPXQxsfLS16HSHa7bfvluQfQMHaQAoOBGSqhi3/BYKwS6vBsdvvDpybaOfA1M+rDwIgBV/g==","shasum":"70bda8492d34031fca5e6c943d9d804493d96a82","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.3.16.tgz","fileCount":64,"unpackedSize":237486,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbegECRA9TVsSAnZWagAAtrUP/0a94CAMzahyys6/edrp\n7c2phT/viaPhIvDSnanumzV7z1XlktpTNTDgyBTKzkaVwP5BAqZG6+70J7nh\nqw0lj14blQonq+jB2Ux9KXpOr1xzqyrXNLBl0APKEQT0cY9s6OKmrbvRDGlX\nb05C7uXIiTVJ1+4Xr4xWeO8HrQLlI3OvzDBhdfJb74WbN/eRa/JeyOq3cbvG\nRHAxZ44blHE6MSJ3CtdDarn7rue63C9P5hsIfNqJ9NUEHVeTKOMyHYzeaJsN\nmHx7A5f2SCpFBa+VEKoA+8+OLwbM2kKl7wHyHhdSqAcKjLZz4/dHbfkjW92Q\nBQEOHmL6Sd0OCgBLJjJ0ncpw+/SF+EVdlR8r8zK5U9HwDAje6INK41PPoU/7\nUZL+AwWN2u4UwgsOu7pclGbqpeTs8+kFayhuCGSednJ7KcF5AmBj1WrEvndJ\nuZHmDCSbsRgk7TKa61phWdKMSr68eyfxQ/cSvW1mb3kJg+/Oay7uv2iAS784\n50w33bOU430RcHllAAcOXtbjSuLezlDgtnTp7JsHZBkjxjberu94kDeubLOJ\nLNIQ4w26XRPrtpClMyt7l1Rhs8LpneGya8MH2vjubkyMq+xcxuHyAE2sBMAj\n4a+6M/k3aH+z1bYFnFpegcWZPHGEfuCbTSN98ych17mh5pBv5uqMC1jVWC1N\nOTdn\r\n=mime\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfeIBY5YCc8WhXmcGQQX6yhi1e3Z0vv09AnNpPkJStfgIgBIicZdz9LIUOEV4pT1XP7yaiOWhQENOdhYMQsQoBelY="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.3.16_1533929475943_0.6278096204046364"},"_hasShrinkwrap":false},"0.3.17":{"name":"@noia-network/node","version":"0.3.17","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.3","@noia-network/webrtc-direct-server":"^0.2.7","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"4d0bc79db7728fe7e535cd515734c98863412733","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.3.17","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-0UHMLyuyJFqEozyiD2rM3Miu6QBrKYWi6SJI2T8rW/KRi24Mw7hNYBzUJs2KcVDqkTNNyEeSY6L+K1NWQeNDeQ==","shasum":"2d691f7cd8424272c9f9a1583485dccec39bd282","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.3.17.tgz","fileCount":64,"unpackedSize":237445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbc9pECRA9TVsSAnZWagAA/t8QAKG64kzCqGCWF2OBGoDK\nt16hfGMNWKQ2OTnXJmFCGm/7GdLFdmccMPDPXL7E8WaxwMrG42oiVhyyGrbS\n/9uQ53XBSjAszCG6taVyZbBE+Bii319r9qSKiil2xatLTREcFx/tDuqVgfEP\nCmrdRhXRiXyDfBulcxoNEkqr26SK21kIJW1Gwc9pvmxjUYy4TJKij+wf1Oub\nnzUOkxJwjWB0i2H4a2xLa7sR/UAp9mMrsibadNr2phxxqPILA9j7/NGqOI/b\ndJoQlC7FECKjynnxK0iOfSlBbgdwixp6KkX7a2jmm+0gg147v8Um7JoJBidD\n2YO8Pi7KWPI2f9ljAIjqZDn7y1PPDVg1rSCBDLcM8iOk+s6MSdW4uFdejj5M\noPRUCEcJzp+O4zn2HiT8T6zlCtoGtB/ARonfWeQ6D2FHNsGgIM9OcklWB4RL\ncU7B0Xa+y0HBWts1TsChz2HMcv4El5CvT71etFvgqxw938dxJgslnAe+Jxj3\nlwCs2TSQlUob/IX3IILKmjuv4wd8DSpq9l1l60CIAF7HQaal4Pe8bBNYU2kx\nnWalrcKT5092C4FtnOMyv0oq/+mqULaKC1Zf6DjQt5ColvUQcPj+fpN+zF+3\nSHSAjDLSxU56M6dgqP/VgJ0qR+W9VLMRZPq0g4lZIYnmmBAnMcFdHe+XlBEL\nhBWT\r\n=VPI3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBqelSD3SjcBqj/DkjIaNZx2gIgowY4821nDS0Rhq4YlAiAE6AGe3ZgrZXc4+fiRsTjmwqWtz1Bzbn8OjVNZt4shuw=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.3.17_1534319172161_0.4441439039024182"},"_hasShrinkwrap":false},"0.4.0":{"name":"@noia-network/node","version":"0.4.0","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.3","@noia-network/webrtc-direct-server":"^0.2.7","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"b56a938ee7c00e2485c281a9badd2fcb6defc6a2","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.4.0","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-cg33rOEO9Ba5nFUa2roZ1IB+Wm1Fp2X4u7VCvxPg+bYSkKmGlxqjrHb/LgSZnfxyYc8osjMe4LFPbO2mpC5WAg==","shasum":"4fefe9643ad6c3e7b58eb7956183c1f17eed086f","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.4.0.tgz","fileCount":67,"unpackedSize":239405,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbeqwsCRA9TVsSAnZWagAAuZwP/2ARc1SYRfij2YPu9vpQ\n/EULpegI1PIK8HJOL9keR2CQsZ7YMCaK9Kx997o6LauFdWPSJMpGXbHG6MtG\n8ndnwZXviSMz/71MeTl4jEJCZ5T1ulvCLgy/aZVObOvTugjIBtNzz8Uw+YGq\n3SVcqLaczZPpGszqoyzTDMwwmu2P5xkL1HwS/VENAFxvrHLt2j4Rp8KCC1+2\nh/pWHiMnGmaGwxkBMw7jrdP6ktWKJJ9QXS2RZefKvmu3NrEaeK88SV0lG/yH\n1/+0ojcKxiSgZ2IX9Roon/SjG9UdH2XQdnCCajTosglT2bKPXAMYtagmOXgS\n+l7SAwzIDVUgrbFNO32UdgLnjbh+wvgAbYCEXIk3CLbIRvscn8V+/dNm/SGa\n4trtVUpAb0BMpaI3NncRxay6GJ071sMXRWkjSheJg83rdQhJNF1qnyd2Ep44\nzl8N/yK0VClZcN/703qa/lZW3qg4DBJuFIXHm1WwZdR3sYjV6m3IItvPzlSW\nu7jhgBXLB4zUih3NApnGmHD3Y1SqQlJMWiVbEVQ8yZUc1r/gLSrc6U4ZO/6k\nERYMwi0BcnnrYmhyiWu+e4J6WrMLUJp2TZ02WkiJIwN12x7otlCEGJCTofbl\nbV54CyLryd1zq4guF4cdrB+Ys6OGfYiALNg0Yzu2KBjlQEPk848pTZUAojPy\nqSse\r\n=6N2L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGrzAFVM5+vsgeXWntjNwJL6RLJ5pE1+2LCWVd6rA/BAIgSsVh/8F9oQyR0iOjnjmsnV0GQYX4GWz8ZOJy5FEm/Ww="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.4.0_1534766123564_0.16690790316511528"},"_hasShrinkwrap":false},"0.5.0":{"name":"@noia-network/node","version":"0.5.0","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.3","@noia-network/webrtc-direct-server":"^0.2.7","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"9518c4dd591521b7d0283536c4f6542ab3fbfbf3","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.5.0","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-s7Ra02n/Fjcwx/9Y033hAl3MShfgGbu6rAtSlx9Iy+4P4ubTWo9GkJ3ykbLmdAbp8Pqyv/tw94z1Zq5nL1IqNQ==","shasum":"47efa6886fbae06088abf10fc4710954cb2c72ed","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.5.0.tgz","fileCount":70,"unpackedSize":245173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfbZSCRA9TVsSAnZWagAA0f8P/iy8P4gZjQ37Z2NCOfEk\nEaiLshH4Hf0FO32Z4TK4Sm5RkdaE01w60wU6S9FW4M90kA/P3/wXLE5f7RVP\n2nanjS/niUBP76IArietQUrcLd6izVkgAj+vonu0kfP4T5lPm3nM1wFftrXN\nAYIi7/mHb+wBuZszkwx99wDCD+5r1KGH4HkalzJiSfodn2UDV28SLADnK5u+\nZ+lmTwO3iOK0s0k8yvxHsfVVgtcJad7gA/al9Wtn3kb1cA+989mgaRiP/oZ3\nFdBunFvsd4imtmGqua/KwnEAYnHdNQvo4lBtDFZAdCFAl9JZoDoU4fJNYwwY\nJOkoBMowS9PRy2alALgGDA3TpKPMiyL77XtYhTJDZoxgT3zpboVxQoVylQDY\ncWrDyR/4zFLwKyhkmwHCuklPChJe6jYwpkfMl430TNpscej9mIJWChsTz4Ce\n2xiI7EA4NIN4y4xnLOvkaT4acZ7mDcuvaWRdbtBo6MYxslCTYPbfhwvqVAnP\ns9Fjy9TtrDQv20Yuj7ps2M7e0ZVVlgWhht+3yv+nxAI8jSvGHmag8ARsBxGu\nT6e5cydvyK2CrgZdBmW0swoylp6HV9lJM98/9Y/esOcyFZz9MKc0je6RXTv9\nfIbmD/X2wLsCZbcpedkU8CXc81lY1nyITdaunj10RpaMF8DkOtTIRKaAaKov\n3Umf\r\n=rg1j\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGu2gx7HEtEbqlZSdrzolnnqXF+S9Eu/g+mLpd4qMDqYAiAmOvYxSeSLgdlMU30AJ8mLuFd/Iv7g7XefhXfKFlGnBQ=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.5.0_1534965329645_0.4245052094221935"},"_hasShrinkwrap":false},"0.5.1":{"name":"@noia-network/node","version":"0.5.1","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"^0.2.1","@noia-network/protocol":"^0.3.3","@noia-network/webrtc-direct-server":"^0.2.7","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"files":["dist","**/*.md","swagger.json","@types","!/examples"],"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"326c5492d0d83e3cec159d604f6031ebc3098377","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.5.1","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-k4TFEz6S7mDS/SxLhR2fHJoOxJjTKiaB5mctg8spvaA5OM04z/ASMNN+lZwd2h+PBh/bTwpvhj4bHp/2A6gAdA==","shasum":"efbbb4d7f726399c0454ce5290b42babe05d679b","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.5.1.tgz","fileCount":70,"unpackedSize":245170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfsWZCRA9TVsSAnZWagAA2TcP+gJ6YaP8r3c6fNGOe5M6\n86lA6iapsmTKFT1vcmTdelHux9MPc/Ja9d22V0q97Aj+bJJRJ4s04GMaWTTD\nYMaKcJVgwfqc1fYFjBfDWQIRe3uPp5OM4Np/fX2O5GzSFHEwrrLN8g52wn2U\niRuZAgIktk5hVbP6wgOG7DWZEk2YV0mLOVa17PFBG8dd9gC4fV689k4bRkGR\nhlNCziBXvV6TsplhzgpyOZX5LZFaTQgkChvK5WvrQUjsj64nReUU8NZMcxiX\nGSCci4l74/95QCUanPhrhr1s6WhWHOhFd7rdfJKshLRX13bLWkcq75tFq6Kx\nevLD/IP0raoyP3ApFd2WuCbo8UZ6InOHnE4FQ27a8xwRdeClW7LvZByZRXsS\nwHUF5g8pULIA/zPPRwmhM9ITqiQk7TfpvID3pWZl92C2+6k33W7A9DHyUL6q\nTOCqwZ6cl9X2WiOPVi3JCfW4ALnSk5rgcAb2CBJ+4jOUTRkIyT23/figZesE\nZNRCapQIyNNbrdu3yI5NVf4mXaZnqZIMYKnSppOokSScksE5DQxVjqYa2eV2\nCZ+gm3+/9qnnSrsr7oofm4wXjYwXunLCTKSzdGnYHtIKmzan3kM8NVb2eKNG\nuiJyf4YvAIy4RIviWKH60O34gqUkqczGuvukO/4Egdn2EcWPVQB4OY0pvZDD\n+0tX\r\n=vp3q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCU8oAP2lqMDspeOKeewp6z/vN/NjTARs/YqDWJAsjC0wIgJMlHK2HE7N4YBQ3WsHwLpdO4GUgcC3jaC9mb0wuu5q8="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.5.1_1535034776741_0.7450214980786556"},"_hasShrinkwrap":false},"0.4.1":{"name":"@noia-network/node","version":"0.4.1","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"0.2.1","@noia-network/protocol":"0.3.3","@noia-network/webrtc-direct-server":"0.2.7","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/winston":"^2.4.4","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"0f6b1f5adf2fbeb484671755877671132fb4312c","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.4.1","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-GGipiIdNhz5K4V5WVh7Dbqr1uDz9o6/LDXMhP3XLhLG14CBFPvj919GuHBkTWedLocTC6VNO0SEUNAjy0qV+Yw==","shasum":"0741fe8481aa5a77938a935676411410949ddfae","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.4.1.tgz","fileCount":67,"unpackedSize":239388,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkA+sCRA9TVsSAnZWagAAuFkP/1Ye60jZ6gKsAq2qWu9Q\nNtB+AOGrvTh0qROlGAFY6pWJuYSu7W/96u7h4rO8r8VWcWA8p3KPhmIPhrpL\n3amPgPSVKSL3z1Iic/Byk4Ce9jibPBUp6MtC7KebYnuV+TPJ7Cqeu3rgfiPb\nZMCpmvzh64E5r1xhR5vNuWaxsQrVrh2+6VqSTryozuXWtFXsEb7GDTj60axs\ntGhimvUJBFWcpuwx4x2ZMIddH1A1AH+u7p8+9C7p79AOXIQWPdisgk9L49j6\ny7qlHacPV8rq72W4YeKe1Hdf5VDkM0+YCf1jO733Sruuux+SJzm3N41o6nm3\neznm3jaSBgicWTYA0uiyhem+rvFZHa54qluKxp4HEgRHWgYo1q1hRCllfVCj\n7cw14wgh+TMpizpY0bTSvfmzRnZ0qcYTUPnCrZartQn9F9O5v4Wgc8sF93YB\n/RjpVG+hDAMRmOth7HV0twr66Sg3VsxYnYHhH+G4gN1k63PRusNxeyU8xum9\n41rnier1hpi3ODD6gJhTJkNpEVcpEKXnEOPl9GKqoQ9PBmWNe45Z4SywgoXY\nGR9XmxZlKbTSy95+PghmNzCMhy3GgqlFvg0oinYJ1/PvbS3B439P1TgOEG/J\nhoGVh+8nzy8GZAGInhw+OFv04kaMBw84nMCxZf8ICpx4l8btJxheZNqJQmP+\nARQi\r\n=8kbk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHFtXmsX+eSoP1S6xpOvPoj2iT851lGDkonUZlA2hwd0AiEA0YpWT/7TybXFfdcQ6tYwG3mslToDEZw/Ck0hBEr42iA="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.4.1_1536167851476_0.49655355977696014"},"_hasShrinkwrap":false},"0.5.2":{"name":"@noia-network/node","version":"0.5.2","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"0.2.2","@noia-network/protocol":"0.3.7","@noia-network/webrtc-direct-server":"0.2.14","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"c8d226202c43c8f24d85a6ff772a3e5d5fcff88c","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.5.2","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-O/JDbOT6epiqZl2/bNHEDmOT+oU+gKLrlhvoaTqT+SLfKQnUwc0SUmErUKTpAA3j0MZxEXZ3ZYLpJRtDRJidNA==","shasum":"d6027fa6ddbfa4d204b051aec11bde383393b179","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.5.2.tgz","fileCount":70,"unpackedSize":245168,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkqsdCRA9TVsSAnZWagAAoksP/321xg2si/4Z216JAkoF\n96FI5LwtGkQS1gETkTd4dXivl1c1ZaqfDS5iAuQ9X0uO930zvY5Ke+o6akTB\nFWbWp3aCbfVPRheIpVdnecRTrSNZkSazGxFHztKxnn5QBPg7lUy716KBGh+9\ni65LXb9j6xKzNv9jqcFtZZPFx0c91s7lILz10yWx9+T26rRPV1RUNO1ERgtv\nDLMl31CHFQGb572BZ1kGuwCzYnAzGLSCDnQK/oK+CVMs5PDsDAyiDb9o8xKY\nOHOy0ggz6W+ti3zzilI9XmaZLNbyibvnmvtCqOvGiyOQc254s7J95Y6JBazs\nY/VwUOiSLhIzhhXhYSGzTCZRjo1ZBxnkTpI+sejzkUYTFMHgd9fKweqMTbMU\nLjNZiQQzAttqqu5HZ/mM0Y/7g4m5E9273q6/qtjUlOtmkv+P0D2vXuQHbhzm\nDARAzcj3QjhgG1bfwJ1QePvXs14RhGCB6n99X+Gj9aLt6ZS2od68gFuU5c9+\nFz+q8P0+ckCENpNwnGI4EofuexuN3iZ0w4bhNqKl6cWner11/9RMEnPkPISJ\ny2Syuu2Gco2tLELd+oxyB+JVa68wQepM4PdOlqRnTYp0mtdxy3QSYmY4048J\no/rjtZMrEXHdqd6VIBeHhvlybiUHQW0o1fZI70kEUbCvl+mjMuGCe+3zYAxO\n30JT\r\n=grdG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGsJyV3RuWerthdj1opmxSa2KP3Ydnd4E70oYwni0XitAiEAoDUAnq/X32pD43BWhcHyza5Va0HadiILulbBAUBvYJ0="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.5.2_1536338716592_0.3947243060060739"},"_hasShrinkwrap":false},"0.5.3":{"name":"@noia-network/node","version":"0.5.3","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"0.2.2","@noia-network/protocol":"0.3.7","@noia-network/webrtc-direct-server":"0.2.14","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"66cfc6af577c465bc547e126e8f6685b77cca79b","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.5.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-7HMykWdgmV6L2G2vXIouVNxBXgfiPXjfI98lXPHC79+/86OQUrsjH0t7X/UeZkKhnyOwUIfSm+ZMXSaho2ECdw==","shasum":"2636c7df598065105af248d44ae1667ce839c60f","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.5.3.tgz","fileCount":70,"unpackedSize":245170,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbo7KMCRA9TVsSAnZWagAAdQgP/3WMe5mzSg8o7B+nxQ7f\nxANs+1Sta3PIT+X4zeJJx0DYZAqdwGM/1Vkbk51p197w3959asrexI375uD1\nCD+ATD2fBi/vDoQ2oAhm+PjwKdQQl52fG7Kjr1g+xMAKk1K875/inDFq/RX+\nm5mrZXpJQefSUteWFJGs4jVXxKVgfi9wRBnTUtxJIMywNqp1g/uX+aC4aWin\n9NsKaswkBiQRhFITr10O4ZzIv7daGu+DJerNVLA40pvFt35X+Cs5KaJDjHNW\n0Vs3MpvIEtV7mcI4R/uX1SMb4nmZe+sXareeIuH7Y0oikpf2gkiiWTpxkqhK\nZCg01OOUo/nQgw1tKkBf2xtcOUZ6Yoh+OFLqhAOD86jQ6PtS4eRd5dWGc4Ps\nDyjZ71gzC7MQKIK0TvJESzrBIxFi1KKcbGaNLm42SH9vVql7jHW+MzZUdMeH\nwz26exCWSmPWk58dQgpFQjN8Vgt6b9BIdUK6VS8NOWp8AqwJeAgAbJxB/vmo\nlK7Jp+7hSwNEcd2+UF6FGFj49OxY4oIpQZ7kJ36tEdXCK4lqjNO7KJGl/Oen\nFTHF1W/OdxZd90NKqwqAb5/CUzoTeDQQp8+39uKZuXAPnW99SDwoRiAxS7qm\nz2h6S07Od4yzxYCGNji2k0ekgVcCIx+rcBwXqa8TRq4mZfwqT/6EOuyuUq3z\nUECy\r\n=c6tf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGsv7JQGl4Cq8HhJYDR/Ack3SO/d6jncD0JrtkJZHPS4AiAjT15busz/lTI621vT88Z/5T05a1h1SPJzZgH/Hku3nA=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.5.3_1537454731525_0.18565527801490633"},"_hasShrinkwrap":false},"0.5.4":{"name":"@noia-network/node","version":"0.5.4","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"npm run build-ts","pretest":"tsc -p . --noEmit","test":"echo 'Warning: jest tests are skipped.'","posttest":"npm run prettier","watch-jest":"jest --watch","build-ts":"tsc","watch-ts":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"jest":"^22.4.3","prettier":"^1.13.5","@types/jest":"^22.2.3","typescript":"^2.8.3","ts-jest":"^22.4.4"},"dependencies":{"@noia-network/governance":"0.0.4","@noia-network/node-contents-client":"0.2.2","@noia-network/protocol":"0.3.7","@noia-network/webrtc-direct-server":"0.2.14","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^4.0.2","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^5.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"b4372e0b42ca065d489d6b719e40ff0b3c0b908d","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@0.5.4","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-W84qAL66QracXN2zmbp6KskvUog/I76tapmkRsoKxLFqCMkp2EQaqEZcFC1IkTVxlXFezBN1/fe7CzQMOfMPaA==","shasum":"fb16306c59ac1517a9932ecff77c319208764c9d","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-0.5.4.tgz","fileCount":70,"unpackedSize":245450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqzJgCRA9TVsSAnZWagAA95kP/R92RxfV0A6qU0Jygy6o\nKwOJByVX3PfYikBMTRiZfcd2wrpVh2jLI3YKcZlRjB0Cb+Pns8MknRu+jMS0\niwx1tfdA7sEHt8OCUolA+UrbLQFnYtxexhgMHNk6KMxrlxd8qUYDCOzqmtCE\n0QOygN8+4lTF0DZ9MLeMnFlZVpKhd+c2rS7GN7ll1VE5yrA0lUBOw79whNqY\nCg32awm7XY7yq2x4dh4Y2JpWBsxuh6S34lfnLTvqFV+byq8e4pmU4PHsfhej\nnW42gzlWIeeThKQwt18R3BHRoG2RvZlxxIKbc2awudTQgvwrHqg71m5ubRhE\nmr++7iLOADwKqtVbSxydUFj776ccn6E4XfENANwHjz1P8R9Y16h5US5mz7rx\n3H+O8aTaQ7nZuZJxqCoURW651Qr0MBXx2TAPcqm1JQTbJ5fOgIeSxfVHFgqz\nZikV+DRzqQAereXo+le5iMk63bJT4YD/R/UPQOlEQpQx8igyi+3tQ+AIqKwA\niZgJI+Oi+RiFsBOL9HGo82G6Yvfo3gI5HjkazR25a7E4VsxwEkMbI70JrSQt\nW8A/YlSE2gLdrP77WQu6dHCZk29Svaph295339wOF5RiwsMBHs7OCM6X+wao\nw+0pFVF4Qhv6BFt4Qj7MmIkWcVgWhdcsfct1+8iMOqUk4foqEVqLKhispMhX\ncNpq\r\n=zrpm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDumMOGy4GcQsAogX6I57rtLYUaYKVaKf/aAKVWcj9UqQIhAOhka7iJ1Y5TxETNF8NXQhFTPLuTXJJ6QE0g8Mqhlg+8"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_0.5.4_1537946208280_0.46902858221642396"},"_hasShrinkwrap":false},"1.0.0-alpha":{"publishConfig":{"tag":"alpha"},"name":"@noia-network/node","version":"1.0.0-alpha","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.0","@noia-network/node-contents-client":"^1.0.0-rc","@noia-network/protocol":"^1.0.0-alpha.1","@noia-network/webrtc-direct-server":"^1.0.1-rc","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"3623638f3d1999007599f7cf2f0becc573cad632","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-alpha","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-3m76Wd2TMDg/JEwVbsm1TkFOulEMOmMw66kzEyMOx3l09oRdzjTRmYVgx1b1bIkFCI86xkxIpdgF/xWOPhrkFQ==","shasum":"6a82059f518b0574625eabd91eea9530a1b607e8","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-alpha.tgz","fileCount":50,"unpackedSize":305874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtM95CRA9TVsSAnZWagAAKZ4P/1YoCn+qk8FCivl3/h4r\nbJHCPsAfliJug9VTBA/+nPoZ0RlI+YXLpMlKrUkKPug9iiSuMh/nB+Haa7oi\n1yevNM/J4oriKGKLaJnslnObKquKAdlS/QGkv7VPk4D+UY5SmO+W/zmaPlLl\ng/Poqsz5bTXSYn+TT2MVvC8tr1FHeUWeu371Q8+GiSkZKKPxwf4oreZXtR+B\nwZDMkVGedDLua2B2bzHQlVBpjNuQhhroUn4DPjQUSoSLAJFJGLGV3JUR2ySs\nqBAwJt9jj2RTdkWss4YI7WMjRHrp7nFiCjNhcWxSSFpbI+yu7G1E9afTXnZ+\nZxV42QEfZ4FlH8LJ3J5qMt3xXQjYzTEZoSMcY50geSEZHwF6n5mjclR42Xqc\nZktIszuzMrhOaYnd1n9Xb/6Ae6r3orn0WL5ANxWmSWP0zdBuw+FS0Swi7TCo\nrXF+A0rRInhm8ObLI4F1aen+6Pq3fAfNh9jHc4EujdzCAcnmrn47hHEW10wl\nCYoImuWEPZTy+wSJOB956i714BCGahKPGLCCxtzn8CFNR8akxPPmoFNuSyWy\nSDHCf8UmWo4pk7+PiZaO5GFWJhfyAnQ8EmIwLwgrI7MvK/UyJMNhAW7/VEE0\neFQ7Qbz0m8Ka5FPgtF9I3RTav8FJhUhXe+Tkx/9QFsmA+wvQnuZHDV9XFHO4\nfnuJ\r\n=ZDsb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjpM4ZA5wUXS5HN8Z05DUagsRNSvgVh6U+WZ2tuVLS/AIgTuaOm7q3jeGoEhlKiqAh9V7lziHvmvDeJbRkJTzl7C0="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-alpha_1538576249248_0.5608214728874512"},"_hasShrinkwrap":false},"1.0.0-alpha.1":{"publishConfig":{"tag":"alpha"},"name":"@noia-network/node","version":"1.0.0-alpha.1","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.0","@noia-network/node-contents-client":"^1.0.0-alpha","@noia-network/protocol":"^1.0.0-alpha.1","@noia-network/webrtc-direct-server":"^1.0.0-alpha","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"862e78fe88f2b336659ceca756ed474380146471","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-alpha.1","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-uqDJ1SvgWRBEey/waRLnug3VS7vH+fp+xlnfdgEvZcN08RqVNMiOULOWrbCXRiZyHXE2S6r3g+cjXUW0Oe6BRQ==","shasum":"1a5086cc9391be8d428b8281941ffd553a2b569e","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-alpha.1.tgz","fileCount":50,"unpackedSize":305977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtOYZCRA9TVsSAnZWagAAwssP/24Yy68v6wUmdG0suFmU\nJBAXqW9vN1jul0b2e+3QLlvyv2pkpHJ1Kf6Z7LL4kbNTvogx3e748NyBPYla\nqgA6Jv3SFnr/+iqZjC3qvpCnsX6vg5XUxv7YvXcjkVDftMLIxpHHTDs92vzv\nwNpZUTmUP2jc97wtrG7oBWYFVj8ZreefvFAj29e4UaEwqPrO5Pp0w/p/ei2r\nFLRSsPU2AoXMDT3UmuXySYwMewDpPSNxpZWFBxD+tYXsLXvDCrRa3Kyt7sf3\nbE4S5pVk6bh527vMHIRe/5lpw7rllbVlPgqv70u2E8katJUpEe+kUT/8V0ic\nbIV91bSJk2sR2tKXV7tRAt9igiultPlukArT4fYiv0Bi1sVjbZ9eyT98X/S6\nDsgRAtVQ1yWAD++Iaj7pNRu1AgbOGh6hk/13B0I2lQXce6TEFx0GCMv+YrT5\ncOokgM+p+BzC95QrF9ySy1rXmqLRtiS7upMD2edbaU8TgqFXBgWf25U4smCO\nad3UJVhQNbTNxDIkzdUliUllNT2RWB96S5SWPpK/CIwljoZVygGnKfEAaEJl\ntsb8HmX+d8jYrp9n/3rmgku0mLZ41F6e5hyJtOpZB01mbfZ2AAZD6gdEWD7h\ngbRtF0+GfbyfQ9plpUOAaBYO9KKA56tZjXcgh3ap3NQpnS/3M222/7Utt0xT\nURCh\r\n=1eQg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB569D9GVF1l29x0klR64uLT0Gqtbyj+BGvH1dBwNEgiAiAzkWhF7whsaIZE61HuH9S1kDjQ/UtDYf+crLZriIg86g=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-alpha.1_1538582040701_0.9183564843843501"},"_hasShrinkwrap":false},"1.0.0-alpha.2":{"publishConfig":{"tag":"alpha"},"name":"@noia-network/node","version":"1.0.0-alpha.2","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.0","@noia-network/node-contents-client":"^1.0.0-alpha.2","@noia-network/protocol":"^1.0.0-alpha.4","@noia-network/webrtc-direct-server":"^1.0.0-alpha.2","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"2e808484e705dc8920ff74783f7e296bb9b5626c","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-alpha.2","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-K22xQkLdCdBDmpU2t+Lup7vLO8o7hP1swZt2q3mgJWqxD9j6X4gI/zl0J5qkAdjhHN4PzUyZ7a2vVNM+Mra+Ng==","shasum":"3eb56909f70067848101763293fba113921ce0dd","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-alpha.2.tgz","fileCount":50,"unpackedSize":309794,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFF8lcZ80iXfg6ufuMrMsr1rzQMiHNatLYSprLjHudNbAiAxlZtTE5JNOSeQ8f7ABQIStckHD91coXeglkqTjGO+KQ=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-alpha.2_1538663354460_0.7681606466394846"},"_hasShrinkwrap":false},"1.0.0-alpha.3":{"publishConfig":{"tag":"alpha"},"name":"@noia-network/node","version":"1.0.0-alpha.3","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.0","@noia-network/node-contents-client":"^1.0.0-alpha.2","@noia-network/protocol":"^1.0.0-alpha.4","@noia-network/webrtc-direct-server":"^1.0.0-alpha.2","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"32ab683a2504fc0210e954705c5e4605697df000","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-alpha.3","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-YeNiw2eZLYx6tERw9HTJEENsERam7tOCIZ8Z8XUh/I+/jh/WoUo2oQ7ImslDSOHoGBK8lkHbnP+834mhWMKWRA==","shasum":"2dec9ac6d2dbd06a89d304e504428f237eb25a7e","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-alpha.3.tgz","fileCount":50,"unpackedSize":309794,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDdtdth5PJd/Rv772xjLJMjetP4TO1/aG2vBvKJxk3K0wIgLfZffeYqpDM5DkMqYBXJfwOxkRpd4twBm8MaunIhfcA="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-alpha.3_1538665298956_0.3886755018991268"},"_hasShrinkwrap":false},"1.0.0-rc":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.0","@noia-network/node-contents-client":"^1.0.0-rc.2","@noia-network/protocol":"^1.0.1-rc.2","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"aae942c4909f3b84e17e996398fd839f7bc2d95e","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-e+tpEeWCgBJhaaTM77btDLr9MUAoWViv3Ewpc2Ni/BVmPRRseHUnfSi0Bj49Ue14kRm5HW5Syf1P0a48Jma3yA==","shasum":"eb55af70d4a1789f20630cd74ae7f6d7dc352e50","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.tgz","fileCount":50,"unpackedSize":309767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtySdCRA9TVsSAnZWagAARNsP/ihvwnBN3EmP14UR/mRu\n1H3xB596Ugu0zI5sPuAmg7nmjLlXNODcumXeYZ+jza/YtRmrfjT0ufW/U8x3\nl97/lD6JSqf7qUQXpPiAfjtRFtdbNd4tn7WmX7YoI0ZEjjvV5t1sx8Y85Pcy\ndAFeZ7OdWc0fIRDNCsjoM9Mv8HPzbpjR2lCmUfsh97qle6AWbO/UxGUWs+et\nHuZt44hE4p/JDxjQuIffK4ZzCP/TEfzwbS39qwSAdVYidlyIoh+Sp8mw00A4\nlDzXERM4bHaiid6ntVNJfn+Agomir0bj4fkf0mLJk00XSW4ioz3JJJNMdyUG\nBQJRm60wzxlpzH7Xa3ouAia9zYJELTIGrWMoEnoLPRvMiVT4xUQ0vpITlDqN\nuoE2oWTYzyh0mMbU/rl6YLgmsz15ip9MixL0cQcbP32lcvh0HS+ycRjv27ey\nFDyNnn4AApdze6lIAXw60wpHIw5bBNkCb8V8dvO+dCATsLIapRahaaK1VwW2\n80yZE7llp5fy+K1xvRmsxK9s3cvMU6HOpNP/NwU1Xv3Z2InhBbezfQCdO71y\nuJ+Sy5hO4zORz/iIMXwdlCjcjwBnnGM92+Zt/SQeg5AznALAOZC07l/2LfQM\n1ltHqFm56ZZH/mq1RxADoffuxaZsJpyNrHAoFZHSH7OP2anyMmjFabw4w+Cp\nzdvr\r\n=ECPz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEU+5+WPd1jX4o/6d6uhJS5/SgshPjIMJRkkzgvJYBYhAiA2hVQr6sqHCmiReICioVcOS8xSMUuujPlXbPdeeqx/JQ=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc_1538729117124_0.2806612220544822"},"_hasShrinkwrap":false},"1.0.0-rc.2":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.2","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.1","@noia-network/node-contents-client":"^1.0.0-rc.2","@noia-network/protocol":"^1.0.1-rc.4","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"gitHead":"41a598b0283b2297b05731689aa826d32c6278af","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.2","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-E1dQUUjD0XS2uHquPYysiHh5MfZTh4m+Bf/NJ6m3QYivtdklZdqIAIe48QdGCjw3vzotnQJfKsH85TNggPQUBA==","shasum":"9240c301a08ebebde52b4a8b31cf992c90beb565","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.2.tgz","fileCount":50,"unpackedSize":318457,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxFWDCRA9TVsSAnZWagAArMUQAKHWGi8zK9teAPSJWYS5\n0iyo4wpr/YRrvWD4rJ6SHxlfIWqEjFqdU0gIxbLEmn6/4ipgnvvYysz/FLjX\nwbMDhnpq2/pFSip8ORMlZAs6lhEEqwzcSbnIFFsAbeefi8iE5fILtMpt6dR4\nMywc7TbUtnwrXtQbEhNp3sKnHoe7uXk94Ob008AIpJDNr7C0SeP6kaP42mlf\nu1Bx1PA2Y1OFsoA0kAXXtGOJ2eqiCYG2prrQ9TTaceBjl8SzwQTwcAwiIC6Y\ns5Oa/tXcHpvQYYzTA/MD/1TacSXEW7OXqa0CRZpxIwul0MFezNrkSqCRdnwP\nkWIN99+zPX2ST2IVQsxxhsK28e14nmiOxWA1xOozlHe9+w8XjRZ7kXHwKLhI\nwz3kf26SgWjD6vqb/qaiHE4ph6ZdNJa3qCSqMc5T8yTj2nmChTvKkJu/t7mY\n4/4siumRJXUflXqijhkX+t6CSvRuv63EuPj9n7wO87MXTn/x/8ux2UB8UaG8\nuMnKKD9Iyk0X9QocaxrN3+7WmYXsvFt95sBr/SZ4P7IBo9n28sp7uz515Hsv\n75dIo9zlptwPYqVnVcghE5rQSxcOvJvsADYuk63ydENLKFCFmxui5MAjBEdh\nsI5lYWgGE70zlfuLA5lawN3plT5P5f8keEKWnTqAu6DzJ3BdcFSsMCZ9sS5q\nszkW\r\n=ijDe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCrzwzF2j2HpqLXRNG8OzSmp54wlblRhm6l/CV62VYXfQIgPR8ixGhMtC+ua4inot5j/yvvTgy8sAUHmnTxbzlo+VY="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.2_1539593602885_0.7424237154006528"},"_hasShrinkwrap":false},"1.0.0-rc.3":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.3","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.2","@noia-network/node-settings":"0.1.0-alpha.6","@noia-network/protocol":"^1.0.1-rc.5","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.3","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-Y5FjmW+fPtQMdR3N/xI6dJANSXfJK9c6Q2yLoj6pn8VhEDoeYOTtUSGgHJ6kG8rPmMpScjw/pV7WVIH8kZMi5A==","shasum":"b872081bd08480a396b4c5fb7d2b2f1d445ff5c0","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.3.tgz","fileCount":36,"unpackedSize":276397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxzCcCRA9TVsSAnZWagAAEC0QAI0yuL3I4CBybQ1rLi7B\nahaSJ3OzC88ule2UG24h3heDRb/oqxlHVJ8nAyGJpadre0uxd1u/q7xCWBDI\ncPs77zoqUft0ODM1vXW2lcOToL1KpcmaTvsAhdVE6AzT6eR4M3HJRAfuTEcI\nZSPpszo+RreaQa95819i3rlRZ4ZSHKoK7Nnz0Cpy7h6GwKs6ZGk+NLFgV9mg\nCVWJq1Bgqd1jTdsfDGjrRL/Z3kpKddFHUJRQlBkYtuX0se4TaWWi8fNXZDKS\nhS0Q4mqs/z88EO5NvXmWt7Lh9+wOYb3V1U62N2cDkno2+2wuLdMEbJ4DwFzW\nV90JEXyCn6GoEfFzAxQfvp0ZaO33836Mp5Cl4h+Wx0An+UYFrYluIs5124Ox\nkoGXIIOLd5g/ndyYovSzVbudtutK8QKm8eIqkkAEXrpFvi3Bgm1erlCxD4cK\n/hkR4aaAg1+txLSTtqB/lxATSCA610v9doBsorJOqaqDARc31/MmJ7Wbf5cK\nfPMDB9Em8AFmDY18net4UkP91BQIDlDU8y6g/nl5kL3rTaQMKVWDGK9ipQHq\nj34nmzEknK+h7DbOWVAyVtLMZDluIK9mLfSEtqDnYT1Q0BAWL6gKUOQbBtOf\njvSWj5i64n9JfKKyU9V2GZ/zO2rHjRxXb5GJvCasaCmBggKSefemR5FBCGPK\nz2YX\r\n=P682\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAF1UnC2/QeJwErbiK+Kb9jEe3ZSeAz1mS285MzKStd0AiEA8GOqf9dSJuW4fo9bNMpo7hYKyL9u2iemmd8kEEhMwNk="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.3_1539780763758_0.20905485553237657"},"_hasShrinkwrap":false},"1.0.0-rc.4":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.4","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.2","@noia-network/node-settings":"0.1.0-alpha.9","@noia-network/protocol":"^1.0.1-rc.6","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.4","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-COe3Zrl4e03vTBcpMW+4Qn9LwQ6uSGarGvGnu1OWlygGxz3gV2iz8T/J75lj4vNJYQhzQd8BsDw4sp40QzwM3A==","shasum":"fc606ad5324c0d32220bdb0336c55794a1c9fe4d","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.4.tgz","fileCount":34,"unpackedSize":267364,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyZdICRA9TVsSAnZWagAA9nMP/jsOmAIY6gpvi8sAGvcw\nn1qfc5pkHlmpebgKAt6cRj2Pb1BDF6NAKhMe9o7WGsKsB39adbZXVesriuUh\nWzZy40rtEfPlwnJeGMRh1Q/H5y+83+Fpifc2TVVBEiFwjlJ/GZu0t7iMSGz8\nNnZVIB01C9UQUBPllq0eTljkLodDvFirUA3ETG8OdA0ouGwLY563kwWiwpeX\nKusToCMqBGECdFT2WzqO6hZ9/vyvMxL3c9aqwwkkPERzs1AGfxBaqxvD2Ki9\ns+Kihcen8z1Uj1hdsp5huXcB1LZrBqbvQZczdRDn5DVQkkG6foZR8i2rBCld\nXnmzFALnA69MmHlUhJ1Uap3d7ZqjFtKdVJc8sEIVkv2jyexnstsKYeql45fe\n2xph9/Z3ylD5I/vkhNk7X7TFphq+SVXJtTij94u1z9vR0iy+MvLrYtgFLKuc\nswRn1aDxD2YXNxmjejHf7J5ApE7l+0MXmIhkMecDi6Oudu8LRamnwsF72+e7\nt2CSkutsPNcGwP7Zp3m/I+9BVaIeHawSEMZdSg5IWCqo1uhr1XWaR+kY/iJW\nsGZmSaehWvNJV0P06SnIu7Wcgysp7vzuMP/2aCyb4DYnWRQRmoqV03ZaKVK2\nNwYIV5NhbjUf8fm+Lny5qkGs/Y3nlSivZ57+KrjQGc6V9J9NM96aGrKi/YZu\n6Icr\r\n=okw7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCfP0S0pplOWX0lCt1szF5m4hWR7g1PKCNKBlZ0MZV7ZwIgTBi317xlz+IYAGt1a0VVqLgAL0YkJmIc8Xsd5KNZk5w="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.4_1539938119722_0.2860446295259207"},"_hasShrinkwrap":false},"1.0.0-rc.5":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.5","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.2","@noia-network/node-settings":"0.1.0-alpha.9","@noia-network/protocol":"^1.0.1-rc.6","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.5","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-nGoTU768rBeJzSqTHMmTc4mPjEnubnTgKRP4wSDunnLE+FgqIOeXQc+M/A5qDC3nzLfQU1ngAl+14KC6Igs/eg==","shasum":"99f032b59bbe7684ff8aab16015a3676cb63e2f9","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.5.tgz","fileCount":34,"unpackedSize":267944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbyb2JCRA9TVsSAnZWagAA6a8QAJ/nzRKZQVoVntyWc94u\neG+xgOf5ZM3BUQ1ZMMXSULLYx6JZrSMIgdPJs0YekLDk1VwD+WR7m77XHhun\n431pqF71r/S6WtZcaRgxhwzViWxb0cYK50DKZPK+CFQuvBQbPDXnMGvJ9KaV\naxFMnVITPg8MqjQUI1+MPzVQ6b8Hg3uE7VO4HFGc0Jk9LqWpa8CIUGosAY1c\np6HSGRvILFEZmajuj3PDWG8q1eKQI3OH+AIyP08ayvIJpMb89iQyRPfo9aqB\no63gAHe/YEzkXlN0W4UgDJ1NPNCg2XQZ4qmTb7H1CYiRVK4YfGwteS6xFzq0\ndclnWpFayEkFhvc5ZMn2PyrSqlMf7GqxvhQ8Z6pjRFY6ebReXzRYd6no06vj\nnbY/bJx+DBwd4sGtzHG/L0mRRF5jUEbBFkyNO8chadIPjgX3fGQrNkNlbMIC\n+6qAIMqoYRWQQVy5M8edEr47ngIPKodvRIEHa74Vb6zHuPX+wPZK0BiHa/Ai\nmTOM+FFLdI6yLMBKfCwQbEZlUJpP1PiuGoh4lN6IJZx825lhP4Iu5Aa9uTj2\ntKOwk8nzzD4oDJqsPZhk9lMLw5UW1hIeVwpleLMrkxh+pH+PvlFgsH+wwS9l\nfDHFX8zKvE8JCWfAf5SZjopAscHDzNrhZqGoY8c9N72xIt0gf+0MY38bHcei\nteO5\r\n=8QgK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHYzRPDQ1EmuWgaMOj8MWcNkyDUUR0QTj8WsYss0Zxt5AiEA4nFfHnvBWQ9u314TksVY+4fERpPw56eA8bvVF6UNMaA="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.5_1539947912564_0.4996267058947972"},"_hasShrinkwrap":false},"1.0.0-rc.6":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.6","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.2","@noia-network/node-settings":"0.1.0-alpha.10","@noia-network/protocol":"^1.0.1-rc.8","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.6","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-gIrRc/xlRK0PBXgUAL/vMV3KEBhj+8RMSW901NJb2CQqSNYYXwf6/hiyVWZi82FmARjmJyX4VN3YmEYShP7BqQ==","shasum":"ebd64925417c3385fb11503b2aca0798c6649ab0","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.6.tgz","fileCount":34,"unpackedSize":268489,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzdH6CRA9TVsSAnZWagAAfa4QAKRYfVNW4tJksFaPf+IN\n/nDfCzj3iqgBEWajzSG1TBEIhe1Ko2FL4SqO1CZk8VDKiDjlWHOxEnx3tfXp\nq9Yapr9H9pRvb6aAtb9zFSNxsKKR5rrRPauf7EPfDgSaHk1ojBhP2b5CnWTd\nhG5K1yxLJD/aOusaHXdDNB8nY9QQPoER9VvI2s7PMbhRCEzF9kCDsKvXkCGs\nuoB6R9Ql/T6aZffeBD6jWqhAgli99oQoxApE4aN2loFUTFS/Bn1B+ZbKrN8G\nYSS2HkpgAFZVmUjDg11bXbt+Jtf9g8D0gcUDgsWMi+ByPB0SeCJ8gHKoyDR9\nR3wF8N6LSZUAHhj8VuwD2VXFZ44Jx5b6vjJHw987R97/wAOOqsi+bBJxpuOp\nlHH+4WO6Pjpt74nAIUzeDlWps3UVu1jDm0MrnV/YrHnCK6+nGHi44L2rLjHU\nq/T+Co/M8c5agnwLKF5ea2mE44i4Nv9IJh06tYqLs7v6f3R4cP5UGt3EXeP4\n3sIH/NOlsPf1QgHHmRaZyVEFzZort1ERsj5so7HdXJLs/zX+ZMEeJHVwD/ON\nIzj/PBYNRkbESbrzlMrXpT+oLWmXHJH8R1R5bW67cyUAWxK9vIXPzvgI2Uzt\nMey6mkrRUzexthKmO6o4vfAyjY4/sS+pAsz4kf5qoGduxqSVlg6PuGTMmBGb\nXleT\r\n=K7Wt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFBDw0/5kSMfkaS/hHzjEIW/bJMT42kiwNl4MQbnUWM3AiEAmFqZxpsnbC5J8/e9VqY9BPG5h7rhl1b+NKDZOBOX7cM="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.6_1540215289793_0.55543893755077"},"_hasShrinkwrap":false},"1.0.0-rc.7":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.7","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/node-settings":"0.1.0-alpha.11","@noia-network/protocol":"^1.0.1-rc.8","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.7","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-JYhLRXINrTQsz9AoDTq2SL9+cwySNM1j8LPq1RH87L/5g17EGw5wATIEkwLeWqmjiteRJq41xHIphFnAHq8lsg==","shasum":"fed8a5bcf778646610b8efe3f6f4c540e5cb86cf","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.7.tgz","fileCount":34,"unpackedSize":268609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzxmwCRA9TVsSAnZWagAAvrcQAIsvEVMnVixo2APmEq3h\nYerNKKvpmz3pJXUWabSIpTmaZpzsLmLpAJZqdgSpt/etHGMBu45RBvgGsgwt\nDoLjnaL3Mv7ZQT4NIsNOE0oGThM5dFqNmByC4NifzTFHp4+K1pSg2UjEKY+0\niqJumv6k5oA6yewMLDpVGI1lcvK3xmm60fqehPnZr3wrMGFzui8X9J5jhKpN\nMmd1OvAunyGl8AX9/XlkrItmyYA79RE0h4NGiIrK/1EBv4ZMwNw99CS0Qn1b\nTzYs7eh9X+gyraX8NRydjEp4BzVNgNkIH1hieimgs9GYN326mbwXSRU1SGrp\n5fzBdqRr9vKKOsTK9pQiN4AtsTGufSa0zeILGVdLMrmQ6UJIFYcH89Kfwulz\n9GUwRcZ60mUYlc60P0wFbLLihI7b/+M3/uGoSyxppPLUS/ULp+44VwRAzxDm\nx9XCV4gaIrrQgJjOtWq65E6SERTnsxU56+1M8ExPE+zLercODHzPk1iCbHsV\n3eqa8zRqFAEGcr1uSQ6EFOxWoAk7a87CS9nLGLQOzscITd2KhnO0JQGEcmdj\noJYXLR0EswXz/VReBC7BvklYJeGVj0OBhrkWJLgduRAEabt4FrvbE9T3mWAq\neJwkiA76J/VB0gFr3PBrUzQZA4K+x4i4SuDfvMaf1KfWpCOUdDaTzX3lzN5B\nwxuU\r\n=XnVY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGmhq1QNkFdItb1/rI9eDkNuAfGLgUITsPCWJWeQH8WfAiBrMCwd2sZUZd8ew9IlC2vtjgLFWfj5LTsH/xFYwJle1Q=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.7_1540299183168_0.3371261699536112"},"_hasShrinkwrap":false},"1.0.0-rc.8":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.8","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/node-settings":"0.1.0-alpha.12","@noia-network/protocol":"^1.0.1-rc.8","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.8","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-j/JWU/fhd7JST8D72x+rQ1qQ+sY/HjqHMmYHC9+Axip58OzGttDD2TJtPgrvxVUcXXIZ+7XsJFFGooqPjt8uVQ==","shasum":"457abbf77936f84452577693c098077a8e311aa1","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.8.tgz","fileCount":34,"unpackedSize":268609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbz2AZCRA9TVsSAnZWagAAlVAP/28VskPdAKM3J2ZKSG8G\nmMd7jJphxsmSanLnBadv2jj5JXXNyO86Dx3t6ePHQCQFxuiLUlgFkdsiuFVE\nbaNQrPiRSdFUTVgYCCY60OvIjXsL7PGUKOaAN9lD45Wt1plORzg5jdGa1kU0\nDdGay1UQpQyC6p5tVbRLPn4392s+HyFvjMG7FaL7iLxK0IdsGCVn4pp2/af2\nMEIVPx1nMmiTg8KKwMiDsoDBXsf53X9jvHfPEzhch/h3kh6lv5Q70w/fBaC+\nHBJmIyhTLOWmkLkqDEY0baq2XX3N3GEKuYN9zupe0CClYSrxW6l6TGqPAp8C\n12NaznUslG976ZLnk6PNlahT7IaePsSWwQgKfqpg1IeaOMIA1BRo7VuAoduA\nJhoccGlJCGrL8Qtbq2qrqZJlxPrhYWHpUnlVes2aAGQK36+MbhAE/tV9aEq2\no2/qw1QacziJgrCbfQje49rwLrF1n+lPA4nr6NWMIs+Dh1enaJZSSp+jmRok\nYV6OWa1F4HCOmDl1/v/VeKPQ1iAq0VsBLusFtwlUsYd1/hsMIB7Ab86he9qA\ncbKrT1NnvJGoqI9axBNeRkBKrLmO7qef4j6fmBRwVR7tDSjRdwyuhCzPjQyR\nsJxT8pQ1PGvUyCYMrjtih1IOGTev/uVpNEIHDoUBHoF/omaua8UV6J/M8gac\nD5TO\r\n=f3IR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA8q0CaUeSFYt+kxg8EZVjdcDKZBHsIEJFiEbBbKnAcoAiBSAF9srhAF+c01O1PvchJEFz9sWgGCjqiFevjVS/bxYw=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.8_1540317208517_0.3036417959047011"},"_hasShrinkwrap":false},"1.0.0-rc.9":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.9","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.8","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.9","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-KuQuyfBrzEgl26TMpG+hVunq6bcVZjYUpyYqDALQXb0Qw8T1mYaxPGkprts5MACtbBjSZ66GKmdALIGxXnOjbg==","shasum":"c40d22f37a7ad1b2b020f214a81f509e77cde856","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.9.tgz","fileCount":34,"unpackedSize":268699,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0LQDCRA9TVsSAnZWagAAQeQP/jOT0ZbRHhWXa3m9Sij8\nNPUGl8ATKCB21cKAllSLlu5XlCVcxmKMJnhoZ2Sgu9EGo41JgU6Pqmr68Cij\nBgifvMKbu6dlV4WPMWfzmdRWWW34VoYQ6cw4fIeyNp04OsidJ34dSYFlsCeP\n2YxvdHTUOe4emn3Ah4IUmp1mWoV0e1BJrba9E8+hzN1IHsnPE14+iuziodrt\nCfctQ3sW3kGfOyD4Yv5+NsNfz4VXOHC1jSO+Lx8V2sJ6DKQWaTwiLb7hFi7g\nRQq6MEEodGaWHF71Wa7pXzLW793/YnaYA5Vrhw0xrupivQ51H/e5xRn5XRc2\n+6dsQ+qtLySuK1vsA8G10r5HQbaYrAlx7ROQGsOIa//6yLj9tWCVAGenIrNq\njvcDjoIAhJ1CKQC1ZYtayBb2E9BbL4saTfDIPew8A1RUSHRiK1BHqBXBv5nL\njNr+vSHSAQgn0IdMo9xytU4xhistMe+pa3CdE04xYd6OZXQUlsGiYoyLc90/\nK2AiS6VljhAK3fWVbAGSYhoy1mxqSqJG8RmRmVg6wjW2Qr2gNo7/p6j7V8Iu\nAqzqmeqVciwFGF/ZV7Mjr4c8wHgD29FO3wpGCA4orvEJMXxatMxb6Zrk+V1P\npUHQXwlj9PmmUA0r5aXxiDPVNqpfk+T0idMI9u987+qZ2q6rCQVCL65uCwkj\n+XM2\r\n=pOc0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDPum8K6wZvjcZ15smW7+GrEznIzkBOduBfxaucpRBMmwIhALCZK2ZCfe1ZdEMW5zumZMyZoU1BCh6CQSWZEdFq8uGJ"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.9_1540404227130_0.06896751393925693"},"_hasShrinkwrap":false},"1.0.0-rc.10":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.10","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.10","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-FAcds/52DZZUowqcxhVoZtudhBsBUxSjMMTW36ZcZIh4mpkqH5rkxkJ+ByXhiO+HYIpOeMYLTfGfuiHWNFo45g==","shasum":"264a43d05a8085673649df3a946132e12c7af580","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.10.tgz","fileCount":36,"unpackedSize":274219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0b9NCRA9TVsSAnZWagAAIRIP/2m9bZvDArx9zzC1FcKs\neuTPQYWluJ4mQgSzGOHOAmyCRwlH0+NGG7y4hTjaHwyXAULLiQMVsxstPd5U\nc7Cygz3LslR7DAwBzQmGLE5/mJadRKr+7TW7TePvRPe+1bDI6ciE0WRadS2D\n0XkGmQmlB31FCJNsKLw7EBaLl7wZhnK9tGIAGg53jonXfh0lwLwFebqfzf8y\nhw3Kwh7i8WRP8VxtAh65zpd4epHlzUVUT9+7rjMp4yzVnZinK81VGC7d/dEP\nMclnvoK2MEiuPcdnoXRriYV4H3qm5XWGqIrBh+DMfAe6+9BWd885bZaRvnFc\nCHPgFCBJ469Z+3AjlYXmm4WWJtgy1qBvYsiodzTLbos/1iHKwl5PGehgDPCO\nHlhp4PqpF9Kjdc/erzzC6bnn7CVh7PRNZeIHIlJHmyLMnG2TGt4gZTNX/0e/\nzfXJDS+sZXIg/GB/Bw2pbwFfpMaOjM0DpfNoFQXiX2fc3YzEyH4zB40zG37w\n/9OeQBz7V+WzzOQWDb7RINE3jpUHeNPILHdBRDTsgNMeyxtk99eBCU5980zH\nr/bK6wmJTalqBhbu08eBcFEQOjxeygKzblmJt3ixwUzK2F7p0qFZKX9ER1kI\naTxI4Hmua3hFy2TJU/VNP9vzu0BKMdf5T4liJjBb9wNo860YbW6tbYWy9FwF\nsuni\r\n=GtJd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnMrCbpNoWLDOS8cWCBxakWTGyG02CA/f/dfL3NPujJwIhALVCYgy5cHfbPpnWmoDBIyzPKSeREM9Ow+kJhBfxtpsI"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.10_1540472653044_0.43423312468923103"},"_hasShrinkwrap":false},"1.0.0-rc.11":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.11","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.11","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-vbtaqghIAsQpPuFXWtMaQZRBpJRdpzD7lynuis3574ADSZr4KimCaQ4N9gQ3xI5lerbSac/ixcjdBvEbLlYApQ==","shasum":"2bcf4812e457772c5f9febd5256799b1e5ba8203","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.11.tgz","fileCount":36,"unpackedSize":274335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0dkBCRA9TVsSAnZWagAAqI0P/1Rxdff+ANgBEFZTA7By\nvG5aztD67qitw3jUaLe6UaPCuBA4B56lGO2zUxPhT3GDG/waGeOTbxFp530s\nbCv2lh0oSIrZUhYprWV+MWlXYB9swIrgcIeElkI5gE/rH3R/MfrO3u4RQSEE\nilOZ0XLFzAZmvcaAi0M8C4PLUkhYvmB3nohjhit4YWUkfAeuG/nqLeVjLrrY\nJRP8E3xRF/vgPbYuzegq5NewYLY/i4VCKcHBjZreL3gjxepFPmk+LedoPJ5z\nPJHudy4gV+nY2aCCw/7AV6UAlvBWicvmCXc5UlUmYLtyQRVAkjTUEOMf6MkP\n7BrcWbjV7nnLMQ6gltqzrQUOFVaDAEeieJVe+FMNX19a76rmp3ENBm95IcLK\nEeYJiq7NOOp/cxgS3KcV40W/CZxQg0f/wptKas4YhoNzcixHi3Hmlp/frqJP\nwQA6B84lyoR95O28v0Ub70Q87e5aueDZFQmr0KAIWWOgHMKsRNFXMmcIxn/q\n1OZ0kGxkWC5SQ/DLDP/jwP3KGXvsaVpapGoHYIGLx1fG+ORaxVdmDTUIyJwy\ny4ik1eW3BO1IRfLMG7BjCqoiLGvsf1PmJCohn8RCONZ2Pp9x83/bEQCZpgNB\nuHtIh4+YH16duaLZr2bcz9NzSJyn8rtvGEUuq3B0SYbPWXrRUM8K6+Q3qoIU\nrXXL\r\n=h52l\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICrt8+siD3Uu+nT0k1Q2F2ewd/2gVPBU66vpEnsnTwE7AiEAyd/mKYo+anfTLv3Z9vI64JmeZJ1ygds/5uVRJoIywBs="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.11_1540479232301_0.057653527848572805"},"_hasShrinkwrap":false},"1.0.0-rc.12":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.12","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.12","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-buO42Bcd+bGQZ/t5QSF9tNYt06R7l6moqH+rjZf4T0rlmKxhUwYlBuqZU1rm4ETczbvDFnqXq3F3hCXXwbUjpA==","shasum":"613bd6bea5e987042c493ebb25a95c9ce5cc1890","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.12.tgz","fileCount":36,"unpackedSize":274952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0up8CRA9TVsSAnZWagAAV3oQAJ7tO/pgND6V0Uj12gvZ\nP6LlOefniGzMHbwtVo47St8Jc48sn1Zkb77U3/swOTpgNtHcMeeupcrW6MMc\nGrlul1M4+nPdvdUfSsAEvFZTxezKLs8OQBONJ4YiJjrvij9Kq8sVg5oDmFYn\n3ifz/NzdYGKTEHXFpz38gS04NglVftr6Ya76Q9SZj6Tx2mdyvjYQCsPPbJQr\noIAWJ9n60yR6wQ7Nk+cVYeH+zhh/89DWpbmvj9THLm5pqv4Dc3A6Tj+IwW/d\nPMSsppZswKkwTWU/hXCeJ1sOMjfckJk6GFwW8VIIHHimKwvUsMBlzXB/tfVs\nL8ecu3Px9arSK9FRBVJiEYRw9eYFGcVolUZl5IoYXXaKeL0DddTlYZjXIrja\nC+/oVWdBqj/QZQwIaJo7sJDl4LLhFwdl4kCe4aytNyqDde2iAIo0J/l9FAYi\npZM8s5L/2+av0mDcEjiWRTpGae3nBma7oyYl11GYMjASaEEv7udUKz8OhzxU\ntjnUzlC5YjpILkhba0ovT7GfozP4JZxoGrGFLbNb2TREgT2k+aCc6Y5UFbkM\nhLvfmGOJ3tIdDv+Mkgf2jhJI+61RTs3a0PvQtA8f+9colP9Sn+wvMZR0jl93\n1BSjMcMjTTYSAbD6YSeSsBuUJBg85QnMxcrcBWKsTnE8h+KcjStdZKe9aI+I\nOjlI\r\n=RcxL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaC1HBrNhE+MR5hC2dUQuWDtGT2JHV1p9Xej8BLKEydAIhAPZKD9NB8IIbTunWCauU+1AB0JgPwRsVwqcGOPOy08m4"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.12_1540549243686_0.2001585523365823"},"_hasShrinkwrap":false},"1.0.0-rc.13":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.13","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.13","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-Iw9WmSAJU8qCfCuGEdH9bN8llsf5hsuN95wDG7c96vfUUiyksFFrvOcL01geQqES7THzvLaDz13Sv+CUMSMQbg==","shasum":"781d1757200f52e0d8a2ca8e5365e90e145eb776","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.13.tgz","fileCount":36,"unpackedSize":274952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0wgcCRA9TVsSAnZWagAApK4P/2bQpDnTCdIQx3t2pNc5\nT9QElBxdcRT2jhxMole5B/6QPYnBsK6Lrumvyw3lJTArzuC60tBmvGrM/Z0n\nvpQhSlUbnNdClDDl0Cf8UZE0kwQB+lcD2hXdsMt+Y89+m41SWo+33gGpKVST\nexcKBMCQhEgo+TmoPfoSqlOc8oLo8qElxjQHfGfqIcwWaWSW0GTG4OXVjnj/\nRjb54r/AYGPCIW0y6yBk7eR1se39t2MPf2oqcS+w0jYyR4PFtf8evKo0mSKJ\n5o40NuQwJHe4DxsDiETP4E1N4XPGnLlm+J37GddPARjEdhMoidKlkOZ/Uz1p\n715nqip57vcstH2lbj5kTRWE88zUj+SJ2hg3FbFALFXATMo3nCPnHPrHUVpI\nFyEJMnrmdOzzfOVmcbJxjHgnti0maagWHhlBGuKEiMOKO5mS/iyig2bY2Ir1\n/Ya5XTQU12SwoQzqYVetCUL7dn5R9kN1h8NpE1wK2uPoI2D2S296kFFeUFuy\nweGbrVCfayqfZ97g9TlEYrIpL3fx11rd9e3zi424KGRpvnNXb4KQ1DL3YTvO\nDCXBD+TmvJCEwYStjoe2sK9MsuB8YUkWn0xlN9fMMP7v784BNzmqefpB6n4n\nKrjVNXLu1/9g7l6qZ4giaIa7OmxVxO5ZDB2TBj4v4FTaJfGy2L5xvFAqtZph\nG3bB\r\n=Rc0t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnrweHVrV2g3dQU2MNsyI8G0d6XJUVDJO73eu3wugPpAIhAJI25U1zpV3tVvT49Eq15rPRz2OuxpbeoMzBNfuTd2bn"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.13_1540556827685_0.36586256059166167"},"_hasShrinkwrap":false},"1.0.0-rc.14":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.14","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.14","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-sO5VUHPan9DdOvPi/FcZ2u8c3mISC1MAaW9BlExtyl0GJfXhT8J4AcUxG2Y680/yQbnPu8rX26IVi1lAxgXXmw==","shasum":"ef5e3b3cbcc1dbef7b116da859263e4f16bb7c60","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.14.tgz","fileCount":36,"unpackedSize":276297,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb0xT7CRA9TVsSAnZWagAAGaYP/Alh12BtJypFo/93ppvg\nMEVVsztBRwupTEJbY9tHZmensHCVbUlQDmbjsyDViwPBTjB39j7/wvzR3Omq\nnn1/vkxS5qtUC7Qv/dUS+Dc/aWu/6aVybab42Z0xWx/qd1+WfAXLvednN4X9\ndNoC6eXMX86qZDOq204bhz1vr3td02kmXkhDmgmNEORKBS0yobqyumOox6T/\nG144kxasGaEV8fZ0UgUGhpVwTc8woiXd7nWTXW8kV1BbWZ1j+VFMU2oTT2BY\nvEXmtDZAEv3q33omIy0U79qhpF0ofviSWlOINrx9uWBBBVngTSsdWQFWo2yv\nhM3N0urBmS3OkANRwAidviDIJwG5MjzlU6U9HeuIvjV4chvy1LggaLBbwaG/\nx0t65FAPdbznPGEmCwZ4I5W8fpN3i3uUHFB1Do3ZEge81M2EzwKxtP5i5uhi\nbMFfiBy8kVVQF/G9hZ6xTvXKpD3vD2jSuQifWrcvuZPdimAaEXK0UFWs0hvq\nB0GNJ1ZnD8+xNR21//mL49rdELrwcH6aiwDMfgEWat/Eri2+UodUVEEqewKH\nAGxKtUwhSz4p7FwjcKbyjJOVVckhAWeA7hLlEOJAE7lNrqPBLKq42isWcfEA\nOXFZk2krJ9XMbY2LB5dAoKpnmWzrZCZ2MTvtd7hhfacPohzb+Zlv7UZrYMsA\nRBUi\r\n=zbAI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDtkVpERY80OK0K86qUUpCYaoQDjjMed2z6RMSpV2nWWwIhAM1mm2XhBJmchASkmHo/BX2y5YR8iFKd42cTtoeNgr5s"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.14_1540560122638_0.4681779039142415"},"_hasShrinkwrap":false},"1.0.0-rc.15":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.15","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.15","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-sHB8N2dG7hQ8ZTAhJ5EkDu82S+oAy0bitO0+9ddfO8WaEPDmbmsVuR7kSnzlFefJEqVwR+sc22LnuQfC/jRGPg==","shasum":"f1be086d323378f8f4bc12c393d763f9cfaca772","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.15.tgz","fileCount":36,"unpackedSize":276519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1u/dCRA9TVsSAnZWagAAeZwP/AlnlLjHoE5/CEzZTnP3\nxFJ+X2AUEz+Eke7vfQrAjQJaPiXm7bEAbLFW9KA4d7pPECuQij8WRxSgycTt\nPM5SlwGO1RXWumJnWupoGV3eNcaYYmSrdaDY1u4buJLH6+Jhe6YjegwKlbba\nierYawB8XEK56I26cSOgsY1nAf/uQ6rCLH2uCdry9QIpjkXVKWgU2Dy0sQ8M\nIty5JuoY7yDfEOCKsV8Eol/WOPUBfb9CzzNTENKVQJqqUKSd/rZLsaPhT91v\n1xCYoPO/fNDQhfn7LWDsAHOE4kevvW8ICbkN9HlWnlXMZCZX1HdB3UbUDXKq\nxNAkcTQu0ewk7mfsG+5Za1FdTOSsJMnyjgDf5QOfkjeQPQze6f0m0ritOFld\nv1Uq0gM5mTb9Xisa+2fi5ryzORWf4RCMRNA5ZhLAOcHYFyc+BEoawOWJqYOM\nJMzkaBcqAxMuyPnywUkAr9glyRgnlp0mweWYAjKuocYYUCK+Ne94hTi/AKx2\nvNuo4mKhe6G3FXjWh61cqihQckGe2CeYgzusOGGBBNE7MJJbea3oOpjw+h9b\nmmwYiQzZ2ZAPbfINesFCNFC4LL9ACxoq1m9dwJ9WrSMfdV9vcbRSuNjLZdTl\nUK79Gz65gm2fMNwSrXmf6JjlQ9+xzlLBXqNwZFU7IBEAevV1DwykZYrmDdpz\nWPgZ\r\n=mg/8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDcbQ9YAAEULLqc6GK4QvTysk+xlv0uQ4sLJuYriCHA2gIgDQSrLL0v90n7dqDIFWtsZE5+QIuWjEqsPwqKVNOuBUo="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.15_1540812764779_0.7067391393025511"},"_hasShrinkwrap":false},"1.0.0-rc.16":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.16","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.16","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-WAPSaL2js1MJw5+Q0e0OrI1PbDUcNflhxVajfdU+xX+NO4BXZfuGT3HNBrb6J4QkxsJB51FjVjfs7R0f8+cGpg==","shasum":"772516639133e53f6a1f436afcb1647eb6e315c8","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.16.tgz","fileCount":36,"unpackedSize":278864,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb1xyCCRA9TVsSAnZWagAAb8EQAIG3ooQG9FlZo6zqzSMh\n8rLwbDQgLbI0DD0dNhnFZGj7nclHlZNQ4G/jKHw0AH3VOee5TRKKK4TNvU2Z\nE2VB6sGGB/mTTQk0Ah8yXgQjphwU8Oxe52zMXKSGOSdeNRoMdqRb12YPxPP6\n2OJlHCrzmxlMcFUmFrIcfYUYoNqHb3bnhthJ7de6H6tBEoKvQMUBJrBggVTN\nZ93YAT70yeQwlIsdMU2xKhjTgGFxWWwyVwozIW07EkBU0kZHbuMY9bOfikyS\nMfYDfP+3zUE5miZBj8OGMVTBgWon/mmn6ToXIyLV+TbE7VEqeSUlHw9W7L0x\nuM7VTO0nvU2HEUDYJqwv+88w5b2sIbmBFAZRR8YzP4/uZru7U9H4eTWbsREo\nDo7UQD4EpDHrjKItZiN/6kzdrxzYoxHIoFQmWhvbTSFe3QZf4XM1+pa7nahl\n9ADWCE5qBUgsoHt1W3D7Qtml2J6Pg/Zc+/rA8jsLrhxSpMKPTHUIabhzNCDM\n1hHBw9iS4iUVya7noRM2cvSd8le7XenLkey643KLHgckcplRCtLmsSasSyjX\nJyJszV2aEjYxrDSpKzo90XF7uTKK5DMAEw712wR4SjI07vXGUxq2D1KLYX4I\npS8DuvlP4qTseAJC5JRfg/RmENebTfK0tDehL9VKTHoew5lGIUWYAL+Yb8Nf\n6eiF\r\n=J5JM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEEztoJMvz2kxIMDJ2ALwcSxJriFkmYwzXB98x9e6AwHAiAyJ+tgE2dKHSLMOI+J9aIhmnvF0VJeiFKxzpVnPd1cKw=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.16_1540824193761_0.46617961843907985"},"_hasShrinkwrap":false},"1.0.0-rc.17":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.17","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.13"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.13"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.4","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.17","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-MajizKsqWGWOue4dYk+9sWwap/rVsZfZLlrtRPuLNg33tDvdLATeshfyvgKVelKKPCLWvTqJPsHZx9X4fcqLyw==","shasum":"0a39d5d1b33eba7aa05e24690f0f8edba8b8be1b","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.17.tgz","fileCount":36,"unpackedSize":280196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2B2LCRA9TVsSAnZWagAAYZcP/A91oL0+zOqiQu7sEseV\n4lhJ+UfZFWhgUP0vruE3iLsj8srFJDz6KgZnQBCkvphn8MO4GBc+qAJWebNi\nEtUkWwEerhTdJDBZt60Okd9miFzLwVElYECfc7M/xuq1Ct29jlrf1OhVrrco\nwaWFM6Y/fmVHRUW3j1QOXaYuTsbtWKeaT0pQJN2Dc5MviXXfe8swD9psN0N8\nanO/y0n3TG62LwB6OAsZo+Xly8X8sKHcaYKUdb7rL9Pv4lzxALnlPRHC7C9N\nkv9e/kwObR7rYTQsudldUuqluPTRu5SoGexjdvVtsFnGrVERXM/UiKg5CtsC\ndq4+jeKvtVi3t4hi7r/+BQkwOTkQd92galuyK51WG2IkaQbCUvzBhT4N17Ok\nWh/isxA5T5TZFZsY4j8hbnce16+otsB2bMecheL35LGsfw2SDisYfBzEMBlm\n2tIuPjXOTZbOyOHvsc4xTnEWQubGXynBWftmxsexsb1EVsHZY5XNCELhptZW\npFVcyYp0ny2ZLZHEFSGFKVTsKEAW1fvlZrwDRakbyg4OU8YPYQKi9I+tpfFc\nfZ9AuXWkxK4YTKR+CHqcTJ58zvD9NGVeoCTXiXb+/PhLl3K9OepVPwEl6d/P\nw0CViPfheRQiYAh2A2Zw2DN4bTHyHM6I7c8WImMbk4p8KjWrNDhnzZ3kVhq/\ncqob\r\n=2eIa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDlL169MVk131jF3QFuL30h0cVVDiJQ/GnR/7xkomrbrgIgAYDH342C+/0eMBBtdxJTbGsM5NCaxUbSdJmHhc5QQQU="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.17_1540889994890_0.17446260749387532"},"_hasShrinkwrap":false},"1.0.0-rc.18":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.18","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.15"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.15"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.5","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.18","_npmVersion":"5.6.0","_nodeVersion":"8.10.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-rsWXkjObrISjG+JXJGedC4fG3D2O0k1zYf9HW/kjzWx74xCK609lfd8FFGTWousPsen5JJhTVGVn3jnUNlWzIw==","shasum":"a4589e4200f1157d708484ad37fd2db7ea3a4b2e","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.18.tgz","fileCount":36,"unpackedSize":280294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2EsTCRA9TVsSAnZWagAAQ6IQAJPl4/Q9XMIts8JeBGFO\nMblFaKZDhEcoPLuZ6nhgFrO6cZQ4ujtis3/IHY7LTbd2yPH0pn1MvUb7nFZ7\nbKIGlc8QQeIH/kh7gGJPdGsnrz2NfXn8BD3gVFDvLiYJr8Ygf7vYjOsqPLqT\nqK99zQUBLwjliVxf8APIQQQzwnSNZKV2YwkIY4g1M/3WcyXZitI1Y+I6RhkI\n9r8aNYsnwESGjWy2fxO6Paz6R1yHeW3+yaYOf+8X1S7KtJw/fWz30b8zwpGI\ngLUHKHmHfGixgmeC4jnEN787qvQECJiBCsuE5n5KSyb8DZffmAq+mhozKNU2\ncYsOfOyWGfji5YykaRfk5c9gR/tL7nC4aj+yO7fcdaVeb5khGS+DkWP21cIp\nFaLR4w6VqOmV+b2ujDs73jrw/ByHfDfdktyb6NPXvuHXE0HQfuHMI+fhhdtA\nMP1zneBU5AQqN8FCf0+ZnL3ZvsSpAkuCnuW6yMO2kLLs0YyBlJZ44ryssTTB\nljhp4QaAUqi7RSkn9cKwRQ5g1+8uGj4GeESAaa3ViR9yqtIwZBCuOoNKkH9R\n07XWudbxgebKXDvcczHPo05QfaitFjz81kG1JxVmx8AuTEw0JZNyKV7Yexi9\nLyIRq8eiHOUr80Qwwx69MlZI0uV4CkfBZMN0HecLEK37VAbwdu284GKMoubQ\nHXRi\r\n=6iva\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYdAZnym1HL8SM0/jst0UYmB72rn+bhpbfCyzeYBgg8AiEAkYLymrwf4hCs0XB48zviEscQ+ylq++SZeKhP6L4KkhA="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.18_1540901651313_0.3078753604828046"},"_hasShrinkwrap":false},"1.0.0-rc.19":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.19","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.15"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.15"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.7","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.19","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-V3wW1GgAQ+P5v3kuOuHhioiqel8loTEFl3666hIEV5V11boeR5XTYgrRn9zsEtn6m5zuNmrWux7BluxUjsiZaw==","shasum":"7665b4c844b9cc0ea10971908743c87fee669589","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.19.tgz","fileCount":36,"unpackedSize":280415,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4wD+CRA9TVsSAnZWagAA4pAP/0Ux61/kM+V5QSdCnDwm\nXZQ33FtvgpcRkyD+rCpkKhu3iuE9sNWrPBKgDqrabQ4sIO3ZZO1HjsgYv20u\nZKsMMH/P1Kyvyc5PSAHRXqA85/z5t68DvUnaXZvUVhPtpsjxpXD+AErjibg2\n54+nsp4J91UO98Z4cjA95Zb8J9eHQNH9AxbBQ8+QOhSyNe6p6WUB28sPXuYh\n+ak1SgB2c0bG5ad3uyFG4v8T/1rSZsorFPjAGw3KH2h0TEVHf4J/WS2CFcD3\nznA7Qxi2zOlGWAmfhtdOJLLii8NX3VCYEtKzxmh1btmSxeQg/aZJdb7aNuCk\n7XqVaKwWrPYVdxkYyAyfGvU6DP4k36rrkyjbgXrYr3u6beXCuKaHpIU1BPOL\nTarxQPB1quCM1eexOGrb2mbVweOtC9EG5FppczWDTOU08Y91dT1/iyBom5hO\n71qr0eDcPHAxLp4/w7WGj//UxUbgWQgzS/g1hm6YCp5DFQdb6mjBFiU0xl5v\n0YgcNKxkDpS0KLEAecI+AaT1k4fVGIvjD2Dn6bwxeUIi55id+uL/BoIylV23\nbQdKagsENUtsIgMfnX9l2mE9Q1qlg+5k0d8vmD3EfbP58S7Yc0ZtiziKUZ/o\n65g8ykuzCyoviC5W4S48kXJyq4JZ1+EVSZdIf+0Cb0roweyLeMARw9zRiXR3\nsWL0\r\n=yi74\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB846kE3AoSJy8PAMM1L+LTklUuApiVLFo0n44I+54p7AiEA+TSFvSFk4pVIuDxMgRjEvzLaXLpCxqfBs0f+jD0Kbeg="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.19_1541603581586_0.09671376740249227"},"_hasShrinkwrap":false},"1.0.0-rc.20":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.20","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"0.1.0-alpha.15"},"peerDependencies":{"@noia-network/node-settings":"^0.1.0-alpha.15"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.0-rc.8","@noia-network/protocol":"^1.0.1-rc.9","@noia-network/webrtc-direct-server":"^1.0.1-rc.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.20","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-dDuQ3YG3BgIS8TzisIpvWtEu3+9A99D/xjoF+1Q+6shuWkvwYCAJQwdQ+CsvKaVncyoZnaoRDI/gVEcIZZ/0dQ==","shasum":"a7252dcb4b7c473fee96a8cf01507341041a672c","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.20.tgz","fileCount":36,"unpackedSize":280559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6ZAuCRA9TVsSAnZWagAA1uIP/RTEJdhc7EN7qvZF1L7R\nHUpypcwDO3aiXjALGfPl2PEs0JPaGBhERCCS3K/bq7PSb/JpnwXRgtFpgC62\n3shmwXlj4kI7smnMAmXN4hXFjebwxlVQ2YysxfM0jhb3y14G7134w9ODsMkF\nnN8+pLi6OrXmPyjjS02sSz43/zEXTaWSLJWEhhaqgDNGZLSsnMHnBivIHmkn\nCClgH2Vs9Idt+dI46yJ7+pFMihZYaVrKTpUvTW+l9UDoXTtWHJ8uNGd3z+WX\nd2ihrGOKnrJ5WIMaQwA9Fts+XvRTP4NK3X5Qc0/E2TuOufgrPlDSSWJiGe5f\nBb+DhRwcIloHSrZ5ngERDNvp3BzHat04hxgrcSXBhvLKl6arNNoxuKUeFVPa\nVVNxrE/QUs8YMYWUqLQsfN4Uq1pq7Hgek4btnlMcyedqLiX5jxvG34WPm3Pa\ntoFTeqVpfnCV7sT/+BflChAYM9mYtbW8/nJyUxJkl++krJfwWWxpd+rPzx9c\nPbZQGWLEey0+DkHPrn68B0Wv9Q7L84EPeifw6N6tSqtzwJoZye57gBlXNH1A\nMnkGsVxg08/RT71/Ewd5nYtkKyr8paGCG5HHLTobBG+Gd+aqquUmSgBnqHhl\n2rr6JjDJA5qvzfteGltuujiTq4ako5Gy8B6UkEYgxiRapkPK4jVByrArEHIc\nO4o7\r\n=dTxt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAXRXTestcBqHY1J+YUfkUT/zAzR+orYgEKD8WAhlOJkAiEAtARQJDZQEarBDVu5SQH411AFzCZy0MfNgX9Noe9fYKc="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.20_1542033453360_0.21765441988295353"},"_hasShrinkwrap":false},"1.0.0-rc.21":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.0.0-rc.21","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"1.0.0"},"peerDependencies":{"@noia-network/node-settings":"^1.0.0"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.1","@noia-network/protocol":"^1.0.0","@noia-network/webrtc-direct-server":"^1.0.0","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0-rc.21","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-PGB9Jtq/d/quJj88AFpZ/4yXojNoUzTDzqGZXiLlYhCW/2SJVLwUTnVAz1PL63TOCt+8uwaBt5xzly9dCjIGtA==","shasum":"3d5f024ce74a6ce350fe99c4672a0d51d505d0c7","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0-rc.21.tgz","fileCount":36,"unpackedSize":280526,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7rHRCRA9TVsSAnZWagAAyjkP/3EYgdrQQo+fJoffAQqQ\n5BSO/OSfCC87DV1PdPmlwHmbqDiYGr2CSLVcFMQeOIv02z8dwdjo1LJ5xxw6\nsJKf1n9IXc88AGD/tef+hceS9BGSC5rUZKG7/WfKHsYMvRi14epdfbtE3BdW\n7PlLjQKoaEYRBwMbJv8XTPahEbTrw805rCjwAZLJrm1k1yJlTUo177Ylgorl\n7faixeF0OIX+Ude0hsnDDf73VvuYH53tnkB6uTUqp6k/UCdVJZZ7UYxdqPxF\noUxCorJVpInhx1rNlTYMwEs1bvxasIdc9lK9xsNQyOvCz7pcW8s3+rtg8n24\nCivKgD5CelUJgykm6x6iln1sYtwG5xQG9ZVYS3Pjsw9C1Xi8xRydoETph7Dx\nCIXrHjjbe81ROdJYjZ9TvIpkrK+BigdE5ILtzlx550xU5yZW7zBcCqxOXEaG\nK8gJ5WTNndvFMPpOjq+bR1nuycx76waRwjrSBJmFWEQY+9URRsU2TmQtzguG\nbsa3hYkiVBKqprzPLUSjMKaklGPpI6/DNJ5+1DkLdVTnT/fPOVTmhVY2Xb9R\nCCbLJD015PwjJOo3ZMfiLGGueV6TMKUMifVU2bCGWifoa8GXZ8mfVs+nX2jI\nPHX2olxSZnuXO4sDPqBrUBOqmZVMVXXorMioK4+iBCODNrp9VmOtYSxfpJGL\nw5ZR\r\n=X6xh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDCAz6dUnYfv3Khfrt+0WRUMpAUqK7trYe8imABc97SKAIhAL3m87iY9zfIMDcxA61W/jMOi0QVq84kCsC9nPVP4M3d"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0-rc.21_1542369744970_0.8191231115948738"},"_hasShrinkwrap":false},"1.0.0":{"name":"@noia-network/node","version":"1.0.0","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.1","@noia-network/protocol":"^1.0.0","@noia-network/webrtc-direct-server":"^1.0.0","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-u6677V34Ri3n8vbxH7o6GIiGTPePkC+4CidnFNeB+Ado7eeq6ijSDy6IoBtiWVlgXvtN5241Gnips+opPW+fJQ==","shasum":"9cbfcbb128f2a2d8192703196badc023577ae896","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.0.tgz","fileCount":36,"unpackedSize":280471,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7rrACRA9TVsSAnZWagAARHYP/3CGVqfYJwzbKjz4eDBH\nkIbbyhs7q/Qk3+phDJL/HU43jcsalVzzqCGetOSGw4eW9EtTMBHwfe0M4Hii\nFsNkcvkm0rcM7hjLu9YwBubFMNHgXIoz4T+Hk5M8/EQoQgrKyxwGAioeQzq7\n/TN4xxr7HQyqudYBJZbu//R/RinKZvK3WMT7tTlpUlVUCkbNolszHnCyigeA\nyjeMfTo3lvEhOJ/JzAIFmMFB4wL3xGB8IY4y+xvJBd6OoMc6lqqEvATOEn+G\nG2PjSxNgZ0KQUnuBBGknVU1Fyc2Km9Ta1c1/N5UdKbBtpoWu1lj3uMIgDxzD\nbr1vXYe+I3t1GMtDMssuHAEdg3Qkht6oOvGdXsKgueS/6lrl1ejaTFJxMpK2\nMXa/8ZWrN6eLZBZTSx4kZjeL+/NuO1Bv9bfZFH22cg3SCpFUWj5ce3lbRB3C\n6Y1BaIvu5871cqZRBHrBLszG69V1fqOb775C13aLPW0b2bfoRNfpxIp778nd\neB0te9kNFpKdX+kVCEvFVmHAhSwrJX9n+XntVmtos2bbl76bUf96X+/ZETu4\nptya5qDfh++BoOrgW2e5KH7z2ZAKyJftXDVrDb0ekiSYBUtYsSijQxVnw6lW\nfqD6qMUYnwFry+EQbrqoq+GhOkczXl0HxaSlgk7+rP+fC8jtU/6ePJQl10WO\n4R03\r\n=WdUD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDjgy1m8MTLQ5io14FWc7nFgWHubtn0Y5aNKO2Ai9JFvAiEA0lTA63IKpZfUFjl5dNRBu1vw2KQLqX20ePzMn4yzgxQ="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.0_1542372032323_0.38439831718227224"},"_hasShrinkwrap":false},"1.0.1":{"name":"@noia-network/node","version":"1.0.1","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^1.0.1","@noia-network/protocol":"^1.0.0","@noia-network/webrtc-direct-server":"^1.0.0","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-zxU3gjjFhDLNoadZdMSHwYY+FjdJC5MGeaBMAyTTgjvs4kwLx8crhL7sXJ1UsXk+ZfxN5OejeAq+lpF9cjMmyQ==","shasum":"d796a971b8d62aa0931d385ca9b9751b8ab401e0","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.1.tgz","fileCount":36,"unpackedSize":280776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb88+9CRA9TVsSAnZWagAAiKcP/0YX3lHqo2pM5+7vBy53\n85tdoUAE/PUblwYO5sc756e6JJr54ZrCJGsTNK1k/y41r5WZiMHhDDJu9GDO\nZ7EV3I8UmYZDn+SgLhNB+C+dbNCzqrmshLQBm5KTTuutKu/bcTbm++bMslWa\nwzfeUrwoJCvRwMi6DdRT3rR+QBQb3vI1HcOb9fTt04lR7C5mwakKG/bBmURC\nwAMFpFVLQb1PctjZrBrOwWBs4LlWbH7vDYAlTMeug1z/mGZwIuwQwyyHUglB\nGGW0eVCOC68BLllEiBd12sUJUZ7LX/IhpTRB5OfxZf6Cbw8yXHWVLxIOTDOp\nCmuHJUIhF5SvqvCpNM+kCo/rWrKou+w0h2hUYr2aGwscZCYFz+6HS3HUuoKb\nGaGrdFLQooYSVljVfiAydbgurq2Zt1pv4vq/CVMuHMRPJ0F9M+rfvdH2iOGT\n3QWcwd5nv4GfVuOeME9sbew0NxHykL4guswPu0wTfQO2el+XW6NoJOgEDXDT\nm06u6x9apQ9vXF9TcdzOlqPVrYBIAkB221RA7CYnKsDhd61omljr1TRRcA7I\nTcHHsbeOABuingh2hSQmI4xNRPBx9TpvQCiJphCneAdfYlKrRkn1dvo0MOGz\nhHQCmbfERkGklmnoMzFcDyOtHST1c7Vjy3oP7oH+s6QqQ7HNB8XObOjJkv42\nZbEc\r\n=s1t5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICvtIoSALk4Copkvz1tFW6+k7+I3P5daMhbEtD8m49dtAiAiKFKZqzLmlEjL5jqAUQuzuF0yESqYKy6ILpwcagGEqw=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.1_1542705085301_0.7668257545767607"},"_hasShrinkwrap":false},"1.0.2":{"name":"@noia-network/node","version":"1.0.2","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^2.0.0","@noia-network/protocol":"^1.0.1","@noia-network/webrtc-direct-server":"^1.0.1","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-v8uzEneCEGVGaYV0mF3L2P0auoC/+n2SwpWxyBHT15+sPZKExdhGWpxyCqveJFGX7GcqnpVI5Jmr/vYE/H4O+Q==","shasum":"d57f45dd59a9dfa4e396ff01fd2261e968fa1f6e","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.2.tgz","fileCount":36,"unpackedSize":281465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcB820CRA9TVsSAnZWagAA4aUQAJIb/2t/NtVP9cQXUGK1\nrLhrzMnmXwr6b8WexpZIeLnR987gk/1/IFdcmWIOh+2elO5NVnZ+va/siyU8\nyuSpF83ZjFgg57cdz50pDSjL6amnzgTbhiCe/Fvnn1hCzwyu9R7jKwgUHy/h\ngrG2BiZkqmrQOMYzvHO+TnOkt0z6PHxfVsrfiUbkdi/2t8LfdmX2fwC3SkDw\n4bq+WhlMhHH8+2xkpOb6Ai4t/apB8GkgsKuiieGftjciEST9gTo42vNedNi/\n1JHQh9VmzgCRUOaZl4EjMXQQs06PKqVJSy0IivBowHMnlYWvrbfuIXS2Upfb\nhvafj4NzrnNqWUA+mQg3GsesmPGaoZKaVP8psuBGxOdKOtMYrvhaxQwA48QY\nctnNxTGOqyn7pdsq8vODmv0Q/tuvJvqYiHcHSjvZy1ecC7IbSkmLfksvGsf+\nWb/liTkYkEn6/SJ6Tnz0DiPKaTSjMA17IjJjLFZCItSmQApq2FUcmpYhmTlg\nzBnfCjkp5/bgz9izYevZeXKorNWL7DCMLi2X1dx2GmY1uMaeSiMC9xVXOwXn\nxDZ84eZspUBxJjejHSqk94zj3uZoioQQIan8vpmbI+8NtLN1hh9d8DCa1UKm\nEWL3+WFa0NpFEQ0BRjFdqt8jXpXKV4Q6azLnUxyosLBP/fgOxJ+0/1OLNUdP\nKPQA\r\n=Ibmp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG7JlCE9/A+0OAJgdbzuaTtRC1+ze0uyy/qTsxbGvpQ0AiEA2G1oz9f79T4SctcpuI+vDtmk8w6rKndFd/vtLYY/gho="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.2_1544015283988_0.6146168762798034"},"_hasShrinkwrap":false},"1.0.3":{"name":"@noia-network/node","version":"1.0.3","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^2.0.0","@noia-network/protocol":"^1.0.1","@noia-network/webrtc-direct-server":"^1.0.2","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-cKeNKxvGbNVtfSJdVNc/4pgMd/hRZDMWIVAx6NrEAcEyw0bo9LCk9jYAx8relX/mUmhaHGHRQ+kYq+q5uWTuXg==","shasum":"6484776d00d34462796a13d888dac2d4fb813a88","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.3.tgz","fileCount":36,"unpackedSize":281465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcNHBVCRA9TVsSAnZWagAAbiAP+gN40Lut8w0yEawdE/f5\nI3+Mu2m0KAmMkEtacDej7poQJF3k6F7h1GDfKnMOes0txfmA8k4wZSVoUQVo\neFUDxATfVDvVPcmhoVUNROLHDgDwUV/tSgzu9q+fW2WeHPEvmWRbheyZ7lOq\nz8aDRrF+BUrbeijfUq3AmBpXyPm0o8FVKXB1BnDEJ4qvNuZ9TiaMIrPWsQFa\nORx6MGdES0uOSPLh+QKRkddAdgYdpBfFU0sS88q5Q+tZu+F6GLD3kW2Z09DL\n7yLlAlGzK/mw/w2Kbj0HZGhHsMoXqFgZjndni26UHNADckdyR1MPTtii/WGu\nbDrBa81gMzM7qjDJ1GBBiQcIW4eqd4QkzrsQ9wV7kawlDU/kbDyw6IWVUBg3\nixsr+yX6rJ96r8FoxNTfF6eQidvE/vhh9T76xyBmWQTRomQVpxJGR3uvNJgJ\n4cizmdXy4ro8Q1SMlr78nkGaAvjkGL2w5E/AAsMizLedLbFbL2+xyUXKJYXG\n1+b3al3MOhcoiXZGPYEKrjlmgQnCidmVi8/lhMj3A/lbclQwFXfWy27Kmquf\noel40wKMicN6oRjowDQ5CTL4MDVIaBoroNTOt0HdTDAOCn3Pr6vgLqpXZuFv\nNRKwqSO3UKvneOsgqscP4A57JIPO868JYb4oWyx1wuX7kMeFYFoMWXtawUW8\nKsyX\r\n=Ey0O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsQ1pv1kIPbGuqM7EBGAEgt8WY9FcUToqRS2nqyQ8HNAIgYZwVegP4gTonuYjePTCRQ2WzRpEybnox7egMaZrj43I="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.3_1546940500282_0.5344973862464759"},"_hasShrinkwrap":false},"1.0.4":{"name":"@noia-network/node","version":"1.0.4","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^2.0.0","@noia-network/protocol":"^1.0.1","@noia-network/webrtc-direct-server":"^1.0.3","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.4","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-ucAuUQoZBiTno44DvBFgimhpNO3XFbzrGpe4oj/gGHgqeIitb0fO32K2xBJMEb/yNMarTxo3dDp7pAUSgOPYaA==","shasum":"482104d43a5e261fb97ad8044b133dff9f10bde9","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.4.tgz","fileCount":36,"unpackedSize":281465,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOJNNCRA9TVsSAnZWagAAnEgP/0lScR8NqojmvHQXMX3L\njmmA721R37T0kzbZFxdlunJtCDf+0HPHrEnHT/nZQmTCZI1WD7ssTp6nP6O/\nufv88RvUfBTP2PivTY+U17bJ3FtLxnG+DE+ZAqON1fE43Y9UaeZQey9QPoZU\n3pS1639R6UQn6m75DDkVoduD07zKb5bhFK3rvaOnZElvCGQ5QJgM3+TWUFBv\nfNdsZ/d+5JOozrSRYx5rQVC2QKtx9of1plm//SEcH2Hy2Nasxzp5I3GU+uiO\n1zSlXT5k9UbEo446D5OCk2W8v4eUiibfPV8EC9OrgDZn0ktQGpOClgQDFkOu\n2ST2X3v3gSZ5Wrk/txbEKBPCH1aCPW5tagvkrWB9nzCHhy+eBcW6wmdT6Pui\nq1FBq30S7X9D1cX2DLGLXD5KsJxeE+LDQEQEOT+J/SPxm4w85zQqR/QGHjVc\nhSe6NC8SsB1vabTTtzYGw8NFpfdN732grDUGxZK2TxWuVB8f4KFEjIuRTlg5\nDs83BamELlGM7RLdMYNW9r8dgsNxQ/Uekdxs2+8MRISozjHowG1p2pDPbSIn\nmhmDnWU+3kdKZei4eRx53OJ4h0fvXSMj+hcw4GUDgdKGuu65zmjEeaJbxpi/\nLVK44tJVvx8cXsSSkGSnpG6iPnm985nuCrtphpzcPt+Zb7mf0hEUfsenxZLj\nT9Ou\r\n=q5w5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4CRVWgRx/ikIaqpjCflSVVKd5eNj449x6wgO0xiv72QIgDjgeyYTsHFDMMmaelOKIb3z1ViOklIxY1vvLYIpouec="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.4_1547211597129_0.3943781303512863"},"_hasShrinkwrap":false},"1.0.5":{"name":"@noia-network/node","version":"1.0.5","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^2.0.0","@noia-network/protocol":"^1.0.1","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.0.5","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-zakO9Pl17DDV71f98GQtwjdQdQKw0xRkZvb5SiguA7GrNUBeBTh8omx0y/GWpnxBMv34r0TJ3un2eYStA8uDaQ==","shasum":"4be216a2cf65e8d398c8fb3bc10929c68aa0a0be","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.0.5.tgz","fileCount":36,"unpackedSize":281871,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQEMUCRA9TVsSAnZWagAA4u4P/1BaNU53y8jucYpHK6//\n4i3Pzc4bXce46cs9nCKENLvln12Z1EBtRUiWJDJamiZnTY5GoW6qo+tia/mq\nNaxVA7gneP2Nzlw6aPz7GHVR1cjdaSrT+ijixkEJUcwcEbV/IGWDVtTSm2m5\ns2ZjtN0jcmucYYn1mrPhRHJRJgPZuSShsrTc6jqQIUK+sbfdq7HUq9+KYOFw\nf2MIXeAWYAgoh+fPmfj03PaoDMnn9/ZhHag6ovjGBNjr/F/+ShyfpJxiQGwB\nVxG2Y2S0NI6CalC09hvPX+tBwmsmg09Aa4yDbXBw7r2l13D+TfXAZ7FjBvVp\n1H9y98b4wSD/shVJS2N5CzQ6MNRDotH5h3bCcPPF0L/74b5Kp22K9hwSgmUA\nHOETb/2MH9PF1XnawGsu6TNCH5BF0jtMFe3ER7+PqdJjxo9htoplSp3Azl10\npWb4yP9mqjaJSFRxiW11WO4ZwjF9Rw6tFAt99hX7xBMfFFZYlptLBqvq9a7i\nGFqGGKp3ipAqJZD2eMStH7/QF7keEIzcfTIrXhedV860xel+uqG2C9/D7wJP\nXTvAibMihq8UhpXFI9vY2r/CdAXKLiLvotX5iiwHEKXgVdpPYDenxmNHAH4G\ns9jlBoWGTOZyrw42VYGpRjqoJ2RcBM4kpBGnsmATCDnk4tVes9JMWkAXykIE\n31um\r\n=YyVb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCRa+rSsZUcZKVEV30Lv15Jy9fpGUYKSQ+KO+zHKxlWnAIgY1RBm++6ysWz6S+QDGpILjlt8IrzHTcwT1uA3NqHaFQ="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.0.5_1547715347728_0.7006713013477295"},"_hasShrinkwrap":false},"1.1.5":{"name":"@noia-network/node","version":"1.1.5","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/governance":"^0.1.2","@noia-network/node-contents-client":"^2.0.0","@noia-network/protocol":"^1.1.1","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","protobufjs":"^6.8.8","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.1.5","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-0WyyPl22nNqEHzoN5ndzSAXmrzu3SY46LGRPrOhzc0vp+RskdGwQqEdVb1ezGSqnKqaMPUoewb/7grIXqrSiiw==","shasum":"269f5df5de6fd8511ca9ccece1c17dd7f9a2395c","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.1.5.tgz","fileCount":36,"unpackedSize":282390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcqxr0CRA9TVsSAnZWagAA2iEP/iaAf9Ctjsj3KvyIfCWV\nNATrNa6XfEOXI1cNAnZa0cSrmfIagoi2BOfb/TQMDkdnbczZ2DGBiySK8KmV\nTD3HFk/tCZ4fCtIgiN+nnTSoyrNpbXighSyXHPX4KZoqsSDcvFbWVJn/mAKP\neiekBwT/izoUI5KNByW5rUeXuEgjZ3AwFDlfhpbNZUd4UvEAEpPQwK48vBT3\nIqWgMA2gi2sXXU7Nk9pnufkfX6cYgFf+E8sfsAMqrs/97DbRkf/hQsVF/JCQ\nAGk0YYjlPDxSsFWwSUt/9PXEU+1I7L9UTwjsoz4pUdf+ym4Dx/aMopQLoxU2\nsm3DcZkr1/H6dl8KTbrdqyeHd0ixvd66xbCw/pljQrcsXgCdjdu3P/3xcMze\n6+NuTDSEVr89G5AYrsQKB8FpjRmB5bDtwGYKpfBq9TDgKH8Oz0Ka1q6oJaie\nCzLmbdoVQjq80Nc+57hS7Dne08GJl+R2WhOcG/bw0Eh25AGW9hvnHhcgrgPF\nIBKyPh4xiqYC3LA7KOBRNzTs+3cciL/OEVBl0sm928iLL6DflcizqlUT3ym2\nYk8sjNlQ21+0lfib0IMPda+3PPYyCPaaneLfM1uZxCtujgoAHhiqeMtiFGLz\nVsDjqq+wesAhwKWQE5T0Kh8Gk0fx80ZpJzaed0WId54mGw7HzojQR/iHN7+0\n7J46\r\n=LY7s\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFv1FMkXG1uvsQQVPLswE4G3lLmFJWgDUlxcN5F7ITyLAiB4yfcp3eh8odoggP3QcfeK/omNAyQkFYpzq/OXli5INQ=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.1.5_1554717427877_0.14450587453023256"},"_hasShrinkwrap":false},"1.2.1-rc":{"name":"@noia-network/node","version":"1.2.1-rc","publishConfig":{"tag":"rc"},"description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.0.0","@noia-network/protocol":"^1.2.1","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.1-rc","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-U51S/uVy/wU62HRr1fOW7QOHXN+yxD+6P9ocUComw7Yz/m7I1Jg5va6z9Z9wvc5EbIIyMTMg9SFOt1zaQUgJGQ==","shasum":"504f5517654471cfd69bb4109291562b1a22a20c","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.1-rc.tgz","fileCount":34,"unpackedSize":242482,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOZxYCRA9TVsSAnZWagAASsMP/3ZMMmV0vwSGyelL7FVk\nijhpWeE1qkg6EdR0dbaObM5+dd/BOohWNVwzwgzv74TUeGB1NBbwjNxKuOcg\nCBVgS2y8bZ2dMFkM0OGTgaPGzRHM2TNamf2llzAmj9q9tAJyghWd9ZOIMeWW\nL33EAomFWdJ64+9a61sLIP10B0ylU6GA106+FuoGBf8qh5qKDycgYZGHvX0K\nnHf0dJxjf+ES+ifTx019kPHI2T35f8SsLlQBcxX69vR/iTuElVA3fMa9lg6D\n7+/ft9EIqLJhtDHC3bEuzZoMSPYagq08c3xrTOmcxfar6OX95IcGogeCvMUc\nu596aLYmu9sueznZqSeKUASeQN3Vl3Vfhh6CufH4OSZI/7pieT+7rjaE8rda\ndVaOJNO3GgzYIMGvtfDoV/YQk9roQnUTktqrGPqR8x9zYJx1V+1kR/OUXrke\nPaQpZDnABMvQeiAVvejgNEteJpS+J6byLR4v/oMPGtfvk95pmzYTyijbcUJU\n/8lcZo5fFY+wKcj8+CBHQHJ1D6RX+jJIyfZ+J56NUd6pEmurgJlcqSHCNtnN\n8nYI29rI6X1x0PPSNLVBLORpre4dkho1RrA+9+QWb4pSINvxhH9gqgQxJ8Dc\nNXupUO1xgLXsXLcsurIiYXQq4GoCYiOMLlm7P0TcVvAXAq3z3BNZWt9AMn+j\nJl5c\r\n=S+9h\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCtToKYXnUjXR4pRwXvoO/oZjVubXk/ZwBEdjHPe6VpSwIhAKSKzvgjOYB6u99WmobyAAqkq91fcklIRIw15VR7JpZI"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.1-rc_1564056664103_0.10993481847824027"},"_hasShrinkwrap":false},"1.2.1-rc.1":{"name":"@noia-network/node","version":"1.2.1-rc.1","publishConfig":{"tag":"rc"},"description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"^1.2.2","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.1-rc.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-YTQs/QaIFKi4gHywi/ov3XugHjxTx8G/DYGvlc7x2Tg7J5KfgDp7St3WiV6qJNv6fmHbySvW3eyV8dhG8korhQ==","shasum":"0aac4c7ff63466dbb8dd0739cdddf71456ecf291","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.1-rc.1.tgz","fileCount":36,"unpackedSize":241016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQCiiCRA9TVsSAnZWagAATx4P/jJOV30VbmZPSppOYAgu\nIptrn3juaRTLVZEyofWPRHbgxtTb9B0snCZy7t18MOGDZMPGiBQcuya8ObLu\nbKvOl3uTS0AR0XyCVpF+VrNwUfrIB4XPXy6efuO9BHgnFs1nR6DhyCuS75kA\n/pJhcW7UDa+/Juvd5OIVRlL0BltNDGIM7QimFHel2XYX4Me1xrj5t8BtZJQW\nrA0ZGKmiDe4PWoAA+Gd4L1UnQx808rkW7k0MHknMLHx1Axhn3FgwOdHYpBSM\nmovbuGOoNiZFKxVPBhz3BJxwQIFIesboB3nMeD4ZL1/+vl13K5hfQbZyTPb2\nvkYQNW7fnVuhxQhiof4EzoFNmPPamUQ7EGbzdBXKlRTDv2zdLGF2ihqhF6Ih\nXm3V5aGBDA9RtVdts1DZ6XmnwyeOfsyTI0U21r8TpUbThh12yAEkG1E6n9Ai\nuU2FtY+lKwjbmVyNr35r0CNoeSP9tvxCyIesQPMrEa8zmuS6yS7XDNAyuDWA\n2g4PGt1RNdXyV8vJ9XO3GAE5NYt2Hamw4Og63VRqhSBUuthby4wQ9FkSMLJh\nCCjTQSX1UavqBcOjx0kSdUYporiwsVimaAZNFpw5atKR8BVloQ98wwlEpmWP\ngG1fjsu/gYcjNQDwCbStNUvnAhIt967H076CKxVvz0SZU95tWshHW6N+Fpet\nU9BD\r\n=0xFe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtacH99ttmvLX3xHDe5tU+heUVOjtx0LJE8kehH8D7ZQIgA2Jj1MrTPna8hg3hAXT5qHF1MQCoDLKazuqSjXNOctU="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.1-rc.1_1564485793854_0.14505721127567783"},"_hasShrinkwrap":false},"1.2.1-rc.2":{"name":"@noia-network/node","version":"1.2.1-rc.2","publishConfig":{"tag":"rc"},"description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"^1.2.2","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.1-rc.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-Q6I2Yvmma3fbv5czwogadjV20+sG9HN8utM8pAVWijwkviPbij4aALMSq9LAHlFB8Zw7AmKTC+G7jUibxa+4RQ==","shasum":"29055e23a71ac12ea55a509980b421496ee7b839","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.1-rc.2.tgz","fileCount":36,"unpackedSize":241056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQEoECRA9TVsSAnZWagAAFhwP/2XYLp+h3WuoEHji+9U5\nDEvHgcV8GlhWWNwyLp6dOkYHaRQuKNoK0+x+QT8MWH28Hq9K0+28aYhxzOUm\nU68eKl9NwR5Je51xT1oNlihlJGzRns++UOepwziQhpt59uSEYiF0tuMm9y4c\nWTzCvd0eEbVcn0hUjCoraKAFhW8xUkjRch4H1tXGIFPJcI3/zwE9wzGLMma2\neCnrz/z2ORzeX0SWBrQCWhwJpgd4efEdRgOCrLr1FFkgvdDC7A0oppYobj5U\nFLedVpBO63AjKmdfr4pDY1vH3V9Us+pdnjq/itXU7XsOE33FWhoqehc7aNz+\nhw26Hl8waU3IrRp4JSoZX5Cy1m4teV3oSTWrJTSEnPoAjPf3rdhm8ITKjknW\nF+lum2FzufHMMAwjZkz20aO8bMVoN/f+Hubk3yutVolw0lxlsdCWWPmD6iIF\nlEb1C7azINizblyi4GLEP++8X2I+DTbAKiG80dgjJTP7y8dyeajPmPfcJ4q1\nMUDyoDpkQ5sp6UMHvTxCxRfY2KEIKge1Hp5u3XfsGtLBMTdmo+ip4k+UvgoS\nwr/gf8RfUNgXiDqp4KjjRDpbILAiihaUrDvXFgTIjlHM0CpG2V0u6y1abVJa\njVQYcXb9FFm+6MtsLKfN+bzEIuMMU8MzIKWAbS6RdJqz848UOnovykijbCNu\nLa4J\r\n=zxqb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHYStjX8RwrURoxfWV4o+dTjXWAFKIHpasnCpqtPK0wKAiBqCURSulR9+QnECXKK496YgFiRe66QJW/tokP6NMe24g=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.1-rc.2_1564494340347_0.7919465584543219"},"_hasShrinkwrap":false},"1.2.1-rc.3":{"name":"@noia-network/node","version":"1.2.1-rc.3","publishConfig":{"tag":"rc"},"description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"^1.2.2","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.1-rc.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-eVhgHzGLcb1JJRHqqQHFg/3PKyjVJqgGqE1mHKS2J7RL5DpPNq4/gwmLOPV5M6ASLupUhIY+mWRciku9QRnK+Q==","shasum":"2b5b04e76ff544fcdfbf2e6e4a87b9d5d8649af4","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.1-rc.3.tgz","fileCount":36,"unpackedSize":241056,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQFA7CRA9TVsSAnZWagAA8UkP/3qBU2kLqLo+aXeJAdRE\nCLf32jVp5Kc1r+uZ9rWHFAuEU9fk/hXp78WM+eNQxVVYuy10ST9YfXI6TmBk\n3BE5UekagriXImrGyrjcaGvQlTe1elfB4ADY4jIP+e/5bzLWTnXCr/X/CXm8\n8KmoqeWegiJ1rrpHEVFj6/Mm7ZdKDfQswI5DOwwTUsavvyvyf6LdCy1TdzWG\nrSHPfLVW8Drjsizu0h96AB2Ojj/pik4Woc54xct3FdIi8/tQfUAA7bR83n/R\nT51MStZj0zR8TNiL276tydcl+i1j9GWWJ4pqO5BYn/q87ftSmQ+5bGYHkWqZ\nubWlV4FMMHEW1MNwQ/Yzhe3mdAkqVhVfm21m8zfWluEJS5ctXxVhGGkfzr3a\nqzJHoXuC7e+ecmfR01KsvzI+NGCpB7LtLKJfgAyRY5+bI3SjfwPqi41Yevx1\ndpNw8WlNLyhfqrd90ZagokYzaXRuKyZeI39KlhEREMkwd0U8z9YbcOETISmd\nQ4y8lRiI/3B9ISb2LpVOrb4A0nLKNIm8dkrFfPqMRhJx09irfNAwLsYk6TGX\nKtrMHMmnnWV90+DonI4GklejLvSO1RU68JKW0/m0MsND7s3SnDT8AqdgHscF\nI7+wrlyADu5EM1ivnVFg6sFGtfmTFu9SqhF8+gsSCTfwR6PgciWGWT5ZNySP\n3h4d\r\n=t+JF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOD7SXesMUjozY+TuyXCmsr2NhOUDZU4xudgu+znajiQIhAPuAFLmv6rofWygn6QnHX+3uieXY72Uiqu7s+cqM+A3k"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.1-rc.3_1564495930428_0.43773960347169494"},"_hasShrinkwrap":false},"1.2.1-rc.4":{"name":"@noia-network/node","version":"1.2.1-rc.4","publishConfig":{"tag":"rc"},"description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"^1.2.2","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.1-rc.4","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-eIqANYYg94ymiqZUNhMbbktZ30qRqu8qCzeAMjzYbJifXbAOX6Qc2Tgy2j+4mhLOpcjFOLS7+4oy/uuPQqJiFw==","shasum":"f22d116435bc6528373550ad4c677b6b31e1d9c0","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.1-rc.4.tgz","fileCount":36,"unpackedSize":240983,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQFkOCRA9TVsSAnZWagAAPBYP/11fCT1W1n6tUs0Q5RI4\nB6PacOdVeoNc6zTIQblq7T/BXoOD3wV5DAFw4Jz7ssc/k9gIaJ/LOcZLbwAn\nMDQnaL4z0izhZyB22G6MTqrzQOwsCB1ews8iSJI/Zt5foInsbCdzAlDcFYDA\nL/M5n1pAFpyXvOx+XbRWBJ3JfOJ0I6a10Cz333Xdi+O/c8x6/k1X+HxEe1rJ\ne/zR0N5nwXTykgUiXLFpiZViC4qFa9YBA4u0qwSmGgCBabhyc8+OoYpNO1Pv\nLctvRm3WY0cIDPkAsuyLvpPUck5jNUL62x3duEqH9uu61ZkjmlzIDx+H7iDM\nAZie0XLog+nzO+KofE8CIPMPpekAmcDGPNqcQGq9ANFtMoyh310cLRKArt5s\nw6Lf7Bxxz8h2hPJZCw+t8po2Qfm5bufp1Ro1y6PY3fC6J4VrafqhlnigdQ9j\nLgTzMOgQ3FXS5XKc0XTpHRDQ7awNlhkvvlz1cUDJHukdaw594PxtqLq274UU\ncuOE16H0lDrAzoGZnyugLYP3JLBNM+wcyzgTzPmFxPttq7wZ6jWhp8KB8uxP\ndMsP8lqD+d1znon/ZR5ZMaPKj/865xjMWe0rkAAkj0k2AJ47hLp2QfxKUZ/2\n1lapdVd3G9i750iFMa/mltgho8zwOXOMdWSVCkCJqqPSzNKMDKxY2RF/irzB\nhHEn\r\n=jgRA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDC4yhVMH1Z6Ji4k7USzKYD6tLqpY4l1kB9k2lTawCInQIhAPzg4q+zpvYwADMrUUeBFh6B07GC+XPNj4ZwICSNaYgH"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.1-rc.4_1564498189724_0.730572497608468"},"_hasShrinkwrap":false},"1.2.1":{"name":"@noia-network/node","version":"1.2.1","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"^1.2.2","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-O5OmglQjUf9YwKejFHMvkYzp+sxbGGDHnoM95krXYaB5fOfjJbzt1apABPklOkUqq6uXRu0NIvW5LXGv3B4lTA==","shasum":"70bb7a424166ca8b7494111b686a8203bdd8bdb7","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.1.tgz","fileCount":36,"unpackedSize":240928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQW4LCRA9TVsSAnZWagAA0OIP/1Il7rIFva0RZaXGNWE0\nCv9KGSQp0dCTjp3jkgv0NH9FKszz+/g4107GHHWJfnMBI/nTBL790WyJOH29\nSC0cpRenEZFFz1CGkScFIkSplnZxPm3vVfRnQVnwwRz530GRL5FWzRMZV0ee\nR7bGzej/z3V4+ut8hMG0AeC3xNLXviXdEjuuPTF0Zj/3OYEtD+LjF5GJ7R8s\nh17VwN+83uQW9EBv8pbj7hf6UXs1HWu28FxWX+FIJ/I3BuT/hbES6IPIJ2dL\n1UGmu1KksP2A8LlCAoUP/JueVgOa2+3tMUAeA7/uqKYqhLiOmIPJjviUbNEz\nMyRbjSOxy7JVr95WS7LMVlvSkOttjXzHyiYJzxX/bYcaGRkTZHtq3+fDF/bk\nExiH3cRAWJ3j5IVcw0r7UHFjESqWKBr9TxB3fV7nh23dXkLUwsTB7nCm75LM\nKwPOKH5qj7DFnbYlI6AaBGQ873A2RHg170f6brXdWI4pFPw+N9NXfuyC2OYP\nNCrDGudiu2jYgVcPxOtbW0KpusOvNjoZGflqVyv6V5h5Lo+fVpJLRJXnpmA3\naPTB4HaC2g/Lqt80D6/wbIamDXI7mDID+a089QWma3zRmYhBC2kj2OP16/G8\n5uOqbUfpIi3Eo5aa+8mm9s3XXW+PMMOuy0DMRiozTUhxpey1s0hKGW/XRLwV\nDBRd\r\n=DdVN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB1OvTb8JEgniD1hERz9LEKedXKvHO2AOJb7Hk7gEODSAiEAsV+9d2cnDuFQEcVbDm04kJvT9tJafccK4d0vW13wEdI="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.1_1564569098454_0.6742986928212871"},"_hasShrinkwrap":false},"1.2.2-rc":{"name":"@noia-network/node","version":"1.2.2-rc","publishConfig":{"tag":"rc"},"description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"1.3.0","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","@types/tcp-ping":"^0.1.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tcp-ping":"^0.1.1","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.2-rc","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-7uipy5/SFwcSoKRUjHcOIxgkMfyMC6TzEtAxphKpp6fMelNMsYujMQt/agHRRDIvpwRBS8/JORIym6SeA6woMA==","shasum":"668e6a5c6424ff7d79e99f1027e0da478e51cd1b","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.2-rc.tgz","fileCount":36,"unpackedSize":245564,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdditXCRA9TVsSAnZWagAAUuAP/0g6Q/+akn9EnNlDKsoE\njqRYydqPKy8u08cEX1H/5tpog3+J1VG9viNLWQ9hO37I9Ua1buYVlSUn0Bh1\nWopDbHOPKB9jfnDB/O8kGSmulJ+pQt/d4UsQy4dauUWQ8Zxa9azL4nf8J9mh\nRQS9yR/Wx/WcIQGjMt0RNV8hKqJYsFyOvaoVQzIOlgJ5Jj6fr4cQSqqtdTbm\nA31nfXxv7Nlp/nAWkKJ++rNBVcb38K1u17ArsZvarrTJakA1HVXfMbXKOHju\nrBESnUai5B7nc3dnN5Bupd9pyWUJpBxYE9Yxj9i8fBeZlNBragyUfy6prqOK\nCj8n6LWr5EBAVr/wtGsmIHcLfCyWDl7tTtsCjN00n8J37WmJHxGdCTrhklGY\nIvHrhvzqo2d9Aabzyi1YgiBMxUd1giUlqDtaYLsFqwiCHLmzUp5loRfKsOII\nr7qkL4BRi22+Ry6Oufxl9259tDX5FrHr5g1SUhPEcblvi5AlHv6JCOCNsd2x\nImH/CUrfCvl0L9IkTVEKTkbXlNryDnXUNkWNWaZn6qRMeD54uZl572UzvKqF\nMFT1uxckL2XIfI03oggcdXSNzruLEZvygYGmmgdB/STtxRfp0qGLQpshCeHT\nUHIUcSWG/3MwK/qdGlOd46Oi9ud7cXn1F9dzX3vkVHkg1pLnejcROtv0f044\naPHn\r\n=Jz6U\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCPFTih/lk0qv90A1EwkffyPhdAWAUXMctPxPrWOxhCHAIgLUQq9n6gGc2mk3YHlFcfY5u7/O04qVnhHwnauchJwe0="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.2-rc_1568025430761_0.1649463372052995"},"_hasShrinkwrap":false},"1.2.2":{"name":"@noia-network/node","version":"1.2.2","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"1.3.0","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/ws":"^6.0.0","@types/tcp-ping":"^0.1.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tcp-ping":"^0.1.1","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-2wlT5LJgb+9j2mUKsjp2Tn8qw9nZXP/ktNfC501J9F1avZ/Czg29QNHXs9+sPtwFYf9B9C/piWXT4fy3uxN5Zg==","shasum":"faec51cc9e1e44bfeab81e36d793e6bded60a5d9","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.2.tgz","fileCount":36,"unpackedSize":245511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdggSSCRA9TVsSAnZWagAA2/sP/2NZSQi7ZBEmXl/n3Ug9\n/sns35PLFFrJnfw5DMXFstTmwR6Uw/oLoHZqgbWnwa+IQnqsz9wL7PttF/q/\nfxnOLMEnx2EbRGmpVKaDZJ/jkHCHeHnp88rlt0wPtxwO4ThAYg7yeqTxjH58\nRZ7hI9MqJbz4FjZSN1kte1Y0Cji53VEDiiiv7GEA3tbuIw6WIJ5UM/vCbztr\nlM9+wc3sSCmwQRmLXH0vXvLul2Z9YEDC69RTU8u5amEompM0/n3PfW/QcfYu\nPNlLk6UHInB8iTkZIPewrcTFO800EtPs+k10MjPYrtKzF0xeLVTmZRynOCMT\nSlTZLQfJySHfIwtsjbwEIAxDGGbmr3/Abew4a8DJD48vxjy3CXRjaDtSHYA9\n/4PiVtQo/KD8ugLqPorBZRabAScqN1dtDimVL1XrLd6Mrjy4g66ONNwTfgp0\nOd40bndbkjeP9PwLjKYqjwVZcBdyQSbVwMUFC45E8fJia3qyp2e2jG6cyVuw\nPx0oZwmZo4ZZbr8OaAe+0wv0/x8wdC9qppy3uf/PMhLC6pjYq9tDHqnIJceL\nsvuTgqyl3Po7txuo3guHH+5mogQ1yVznTcQ6w6KENetdJjYvdVgTsMxL31nS\nXaAfe1gbsbl/iE91+4Ll5ON2BqmxnEzvnYK9bFQPARjg4eTmHtbi0uLGOKe5\nqkaC\r\n=FiOZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDowkNByLxqxfC+Qjd+VuLuvzL9/xpc8YI/oVaZdapJ7gIhALVIIS1RGndl3QDU/j/WhpbYeqGjhsq4Yu103qtSYnh4"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.2_1568801938100_0.6225470551973435"},"_hasShrinkwrap":false},"1.2.3-rc":{"name":"@noia-network/node","version":"1.2.3-rc","publishConfig":{"tag":"rc"},"description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"1.3.0","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/tcp-ping":"^0.1.0","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tcp-ping":"^0.1.1","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.3-rc","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-aVvOso+REL7CP9rBY2uOMmyTt2i7rWnTXQyrg2VueGzo2JR3JSHPE1LvrhnZHiKVZ10XwupIXSord6Z75wzmLg==","shasum":"072bc3d91f9c725c698219e776f0027a2606f0b5","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.3-rc.tgz","fileCount":36,"unpackedSize":255724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnDSJCRA9TVsSAnZWagAANEYP/2qPQj7krjF9iXaJC0Zw\nXPoWw28Cz5Yzg8R61BIyTER6ELP01JTdOxtkk1iz5u9tPHyFSS7Ofik0o1pb\nL9gkiQvhG8HqyDV6Rhp566hOIhGRPG5WnOo1/RunwPX9nO8eoBacsksGXoeA\nIwiE7z5+RBbK2AWR0M/kSnfLQ3sVOn2u9lX5eCqZ9KjuxkmqfvL8XqaiHwXc\nRk03nk4pzKc1jvu73DPMy0ZEH1zkW1eHCS3X2Q1o1bfZ79uzlxPiG5vDR1U0\nAfpsUSmkp/JRfqV09BEmTZQ0rFkOYg2cUe/K28wiwJovct9a/AOQP+9p6cFS\n5u6lXEYTsAUEqRfOdrtLrl2h3QNOICWrIbblWWvnA9u21T82jlvLFTWc8vl1\nGOm2xE85FTAcZJ0TggIvE/s7KvRXnQFhmL6foBpmKhACS++BOGkR7gaFZSgk\n/906MQoVa11Qo1P9XtXChbC+2u4UQyCX2btw/as2DV2oHraO8piiuMY60+fC\nQfKfm4Ha2LRFWtPr504i6VqR9D4ZmdN9ybRJexxXve/UyzsXnQHdUHdqgGDp\nea4k7nL/hE+3sojBKQV03Z6U34nyLF3OJwsZT+cFPmb6KB0FZHt1kaHuNDOo\nERelPeOF2Uhspa8A+PF5GPU5Jkx4tIXybwuntqrYGjQDEIL3uV4s3FUHC1UZ\nL7zv\r\n=iB8k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEMCIFzKLFmz4PVN5I8/c2HoCgZPRBkP9q3CnfrV9m6Dp/NYAh9ai5t/nTCJQF+gN3Ma2fws+zcZDAtHSLPB2MGuHfiX"}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.3-rc_1570518152521_0.5250433387449864"},"_hasShrinkwrap":false},"1.2.3":{"name":"@noia-network/node","version":"1.2.3","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"1.3.0","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/tcp-ping":"^0.1.0","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.4.3","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tcp-ping":"^0.1.1","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-DdGLyql4a3LndOXSEbA6/h4RKJObWfqalaevQFohmyAvoBoPFbi7R97A+ZzfQdDS/0e0VuHXbq68uPfXw1XXXg==","shasum":"af823a0e846b175336da9a135659d5cbeefd2f31","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.3.tgz","fileCount":36,"unpackedSize":255512,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdt+F0CRA9TVsSAnZWagAAKWcP/1HpAKm34WI/AJwHRUUW\n2hjbikIyPIx7E9KWACJvlBok6/K9x40dyC9bwCJ8XXfXNitXQAnaZMvHHvdE\nLdQg5Jil3PM6o70+YEFwclJEK8dyorVcQ0lFBDzJGlM7uJlwTent79xhC/4M\nfLLjq3hM8TQ6ufnohHbEPLHwODtIV6IeCUEjuP6Yzrf6+GFajrvEOzmdMUGN\nEZLuWrkwfQNqaZwmXlOpspkThw7VfJJwaVXPCIRZwqDGdYn2AZ5da+cuaDpz\npzMgbNtpyEWlPmrL5+jOdbKPJJqSVOiE3O7FAX7+5ywaQ3t7JZpTLqwJ7ZDO\nUpNvQT4TXloFgOKhbITbqyBisja5RDGK4osbvqR9FJHK1jZN83S/Se9pFd2Y\npQoYES8fDmsGaNvauTWu+JXt0je9aO9oUd0MVxPDTv5SrV00IWp+DnLtcFDX\nKsPnoSC/Ohc2/D8eA02V2XP4yrssPqRUoLGMnqvutxdMqUSjucafRVn2gk+4\nlt1akttU1Rr+DESahzZmIfAmeXkYZ642aZykGh+Djt4PI/xG1njcQOL6ICDu\nSrJ8GbTV9W5LNw23ERN+0PX830EwT7yx8C1+TqBBBkNiHKCOz+MCun3SBt/w\nZleFcM0ZAw90aRmInbKc4sOb0BwgervgA2RkIwoPAZs/26pt5kJnQayXdz5O\nrAgh\r\n=EGdt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRMGsOOMGxhcgn68krUmZQH+Luhd1BdDz6itJU6Uq4wAIgAMUDaUbyE/SYwdQiB9RGuTPVOfPFBNhf//mUiLHdyy4="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.3_1572331892457_0.47688466977683475"},"_hasShrinkwrap":false},"1.2.4":{"name":"@noia-network/node","version":"1.2.4","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"^2.1.3","@noia-network/protocol":"1.3.0","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/tcp-ping":"^0.1.0","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.6.1","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tcp-ping":"^0.1.1","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.4","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-sHq5ga+Rj7Gmr3VcaKxyUSXrBAvnxixkTR3idKFGBCGZ6CBX4wZWiC79gn2hdtaXvl++j8f/+iW2sUzwxPcKcA==","shasum":"2785966d4cf72d16cf82180e4f8035055336678a","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.4.tgz","fileCount":36,"unpackedSize":255617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeOmONCRA9TVsSAnZWagAAPYgQAIZwjFvyZByhvNoBBFa4\nYvZn7dqRDn0R1prTM2XjHHPVL1/Uuwk49Rlxcv8r0JTfa6sQUTjRWptJAzYB\nd54ZPsGLJJZ38KCb2r0wihwQKDUaGtwX4/OcYYSQLS+gLsKxh1lw4c6edIpM\n5oVRS/xOBXkZ6reQAwzGBA3UPBcqcFxibzIpE7eDmN7fWgYlxV1lPJgkyy1z\nJEovQ9WoJPRKzAL9GNqz8nE1oVhvW7xv9kdzcWpIhalFRRXfbzX/JHCUVXQC\n3DAhfziigSRT3gmREdQCituFBYLKjCL0Ahndhw2STX7nrrdRWr5wijyMKBHX\nadgDlM++poVXytvMXCIFiqHlwYL3xMIYZxV7te9JowQiRQZWVrqkc0ePkja9\nALvzE4EWCE0irzoxkPqGCHmnb+QjRX3+Yy6ZwdjOCO67H4wlCj9nKqaAl3Gh\nsM0BoALPfA9+3JumP3HDfBUBHcSUE1gnB2UuoUUkANhrAzjF6vbLgAmjRCMd\ncoe+sxt50Ac24m4g6ZHTH25wBeN9iaviS75FxwjCwny0WvN9vze+C0yAOxYt\ncn/HQj1CYqd/76V6zrIGmxt/viq8V8fzdU3W0SEHQ/B+6aiBvHkRWE99zMwx\n1w5f48k7sCAd/xtVKN6P85W4GLHBg3XHZ6vGCvbPiTYnd6BSzHNo+Zhl+bLc\nSa4R\r\n=o/bq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDieqYbzqxdn9DxnoU7A5yQwmN8bVa4LbAvtpkkfkqWewIgPoayqpXDwBE9QZj/DysSyTAP2C/bJXjzIkZV2urUWog="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.4_1580884877219_0.9172085049050307"},"_hasShrinkwrap":false},"1.2.5-rc":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.2.5-rc","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"2.2.1-rc","@noia-network/protocol":"1.3.0","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/tcp-ping":"^0.1.0","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.6.1","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tcp-ping":"^0.1.1","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.5-rc","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-iZorA8jY1zQfYInbpiM/62XX68RkAKVopSXQnTXf6ZwSeiKUl9RPMTnvuRLMsQKciBXo9g3ya7Ovm7fP/pRaXQ==","shasum":"edb3d8dbed475adaa44dfe572d20caea84804cd0","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.5-rc.tgz","fileCount":36,"unpackedSize":255567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeO/taCRA9TVsSAnZWagAAFCcP/2j8i7LwT+h1yTrSmKHZ\n2/Tmgs4mFenpylxtDpp3hCemU320iJml4tS8RlawhlrA3FwJa5ay56M41psI\nDOwQb9MjTqvs1pnp9dD/AB7ns3V1OMKhbzUdRjrDrSDeQPFphJq/+1N24Yyi\nfIOliUeqALl9YFu+C1goPqc64NhA+bVEPFu6Mhs/daZPD33TDrxvr8GwywG/\nD7L6+tjvJ4hIpFykWy8vPFIO2ykfJm/CC5jgcU5FgX6szcJsN/Tmu8jPzG6T\n2FuSdBcnDQYg8KZnZO4/9mHYPPQn54bQxW7TmWC2z0/42voWK1oBSeaR/2ZC\nlSJeCtjrliY3XH8Ob6jvPL21Q1EFxX6vXWgsPs9WvrgoZ0nUM7Vd4gGfveYP\nW3tYBZZGimMGNfB7r9K/c6UtPeP5ZM6bGOjf6GiTucYwTeP4tsZfwiUwVxOD\n/19orSdHSddxw3O+8Z4tEFqFQXYl4qSx14EUOwjXzW2/5D/pCFhPioY8+Ayt\nl7Amzo0MwNWdwE+I/DUaYuw/CCWAOwll32MX+HCamKajuEoV2sSp+P0y3zEK\nDX7beDLIXQ84CQO/G+L3zTPyJrNbyqIc8niLx9b16spYhW8VPRDveLsN5CE3\nUMbPLxzOwC0s3mv1MLqq8eMIdT0UvBaMjJPp3GIR1a7zdaZOwBsiaI6OLDxF\n6j8J\r\n=Tb0y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG6j4xV+MfpiI5UmMeBck5I/HVeUb581BbGSb7jnDWmEAiApixYc82nFZiKOI6LlWE8cnj6zKhX9RiEiFwNk3AljXw=="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.5-rc_1580989273912_0.21823852220683726"},"_hasShrinkwrap":false},"1.2.5-rc.1":{"publishConfig":{"tag":"rc"},"name":"@noia-network/node","version":"1.2.5-rc.1","description":"NOIA Node core.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","pretest":"tsc -p . --noEmit","test":"npm run tslint && echo Warning: jest tests are skipped.","posttest":"npm run prettier","tslint":"tslint --project . --config ./tslint.json && echo Successfully passed tslint test.","watch-jest":"jest --watch","watch":"tsc -w","prettier":"prettier \"src/**/*\" -l"},"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"keywords":[],"author":{"name":"NOIA Network Limited"},"license":"LGPL-2.1","homepage":"https://github.com/noia-network/noia-node","devDependencies":{"@types/jest":"^22.2.3","jest":"^22.4.3","prettier":"^1.13.5","simplr-tslint":"0.0.1","ts-jest":"^22.4.4","tslint":"^5.11.0","tslint-language-service":"^0.9.9","typescript":"^3.0.0","@noia-network/node-settings":"^1.0.1"},"peerDependencies":{"@noia-network/node-settings":"^1.0.1"},"dependencies":{"@noia-network/node-contents-client":"2.2.1-rc.1","@noia-network/protocol":"^1.3.0","@noia-network/webrtc-direct-server":"^1.0.4","@types/bip39":"^2.4.0","@types/dotenv":"^4.0.3","@types/express":"^4.16.0","@types/jsonfile":"^4.0.1","@types/mime-types":"^2.1.0","@types/node":"^9.6.12","@types/node-fetch":"^1.6.8","@types/ping":"^0.2.0","@types/request":"^2.47.1","@types/rimraf":"^2.0.2","@types/tcp-ping":"^0.1.0","@types/ws":"^6.0.0","bip39":"^2.5.0","body-parser":"^1.18.2","crypto":"^1.0.1","default-gateway":"^2.7.2","dotenv":"^5.0.1","express":"^4.16.3","external-ip":"^2.0.3","jsonfile":"^4.0.0","logdna-winston":"^1.0.0","mime-types":"^2.1.18","nat-pmp":"^1.0.0","node-fetch":"^2.0.0","ping":"^0.2.2","protobufjs":"^6.8.8","public-ip":"^3.1.0","randombytes":"^2.0.6","request":"^2.85.0","rimraf":"^2.6.2","speedtest-net":"^1.6.1","strict-event-emitter-types":"^2.0.0","swagger-ui-express":"^3.0.8","systeminformation":"^4.11.4","tcp-ping":"^0.1.1","tslib":"^1.9.2","winston":"^2.4.1","ws":"^6.0.0"},"jest":{"transform":{"^.+\\.(ts|tsx)?$":"ts-jest"},"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.(ts|tsx)$","moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_resolved":"","_integrity":"","_from":"file:/var/vsts/r2/a/_noia-node Build/npm-package/package.tgz","readme":"# README #\n\nYou would normally want to use [noia-node-gui][noia-node-gui] or [noia-node-terminal][noia-node-terminal].\n\n#### Modules\n\n| module | description |\n|---|---|\n| **[noia-node][noia-node]** | **core noia node (this module)**\n| [noia-node-contents-client][noia-node-contents-client] | used to manage contents for noia-node\n| `*`[noia-node-gui][noia-node-gui] | node graphical user interface\n| `*`[noia-node-terminal][noia-node-terminal] | headless (terminal) node\n\n`*` - example modules how to use noia-node internally and create headless or node with GUI.\n\n[noia-node]: https://github.com/noia-network/noia-node\n[noia-node-contents-client]: https://github.com/noia-network/noia-node-contents-client\n[noia-node-gui]: https://github.com/noia-network/noia-node-gui\n[noia-node-terminal]: https://github.com/noia-network/noia-node-terminal\n\n#### Sample code\n\n```javascript\nconsole.log(\"[NODE]: Initializing...\")\n// Initialize node with default values\nconst node = new Node({\n  settingsPath: \"settings.json\",\n  ssl: true,\n  privateKeyPath: \"path/to/private.key\",\n  crtPath: \"path/to/crt.cert\",\n  crtBundlePath: \"path/to/crt-bundle.cert\",\n  // One option for test purposes is to use https://ropsten.infura.io infrastructure.\n  walletProviderUrl: \"https://example-wallet-provider.io/API_KEY\"\n})\nconsole.log(\"[NODE]: initialized.\")\n\n// Setters take effect after restart\n// node.setStorageSpace('/path/to/storage', 1048576)\n\n// Events\nnode.on(\"started\", () => {\n  console.log(\"[NODE]: started.\")\n})\nnode.master.on(\"connected\", () => {\n  console.log(\"[NODE]: connected to master.\")\n})\nnode.master.on(\"closed\", (info) => {\n  if (info && info.code !== 1000) {\n    console.log(`[NODE]: connection with master closed, info =`, info)\n    node.restart()\n  } else {\n    console.log(`[NODE]: connection with master closed, normal exit`, info)\n  }\n})\nnode.master.on(\"cache\", (info) => {\n  console.log(`[NODE][IN]: cache request, resource = ${info.source.url}`)\n})\nnode.master.on(\"clear\", (info) => {\n  console.log(`[NODE][IN]: clear request, infoHashes = ${info.infoHashes}`)\n})\nnode.master.on(\"seed\", (info) => {\n  console.log(\"[NODE][IN]: seed request.\")\n})\nif (node.clientSockets.http) {\n  node.clientSockets.http.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for HTTP requests on port ${info.port}.`)\n  })\n  node.clientSockets.http.on(\"closed\", () => {\n  console.log(`[NODE]: closed HTTP server.`)\n  })\n}\nif (node.clientSockets.ws) {\n  node.clientSockets.ws.on(\"listening\", (info) => {\n    console.log(`[NODE]: listening for ${info.ssl ? \"WSS\" : \"WS\"} requests on port ${info.port}.`)\n  })\n  node.clientSockets.ws.on(\"closed\", () => {\n    console.log(`[NODE]: closed WS/WSS server.`)\n  })\n  node.clientSockets.ws.on(\"connections\", (count) => {\n    console.log(`[NODE]: WS Clients connections = ${count}`)\n  })\n}\nnode.contentsClient.on(\"seeding\", (infoHashes) => {\n  console.log(\"[NODE]: seeding contents: \", infoHashes)\n})\nnode.clientSockets.on(\"resourceSent\", (info) => {\n  const client = `client ${info.ip}`\n  const resource = `resource = ${info.resource.infoHash}`\n  const url = `url = ${info.resource.url}`\n  const size = `size = ${info.resource.size}`\n  const sizeMB = `size = ${info.resource.size/1024/1024}`\n  if (info.resource.url) {\n    console.log(`[NODE]: HTTP sent to ${client} ${resource} ${sizeMB} ${url}`)\n  } else {\n    console.log(`[NODE]: WS sent to ${client} ${resource} ${sizeMB}`)\n  }\n})\nnode.on(\"destroyed\", () => {\n  console.log(\"[NODE]: stopped.\")\n})\nnode.on(\"error\", (error) => {\n  console.log(\"[NODE]: error =\", error)\n})\n\n// Start\nnode.start()\n```\n\n# Configuration\n\nNode configuration can be supplied to `Node` object or set via `settings.json` file. `settings.json` is generated on first run.\n\n`*`required |`Node` options property | `settings.json` property | type | default | description |\n|---|---|---|---|---| --- |\n| no | settingsPath | N/A | string | ./settings.json | Path to `settings.json`.\n| no | statisticsPath | N/A | statisticsPath | ./statistics.json | Path to `statistics.json`.\n| no | userDataPath | N/A | string | empty | Path to user user data folder. If specified, default `settings.json` and/or `statistics.json` will be saved to user data folder.\n| no | isHeadless | isHeadless | boolean | true | False if node GUI.\n| no | storageDir | storage.dir | string | ./storage | Path to storage directory.\n| no | storageSize | storage.size | number | 104857600 | Size of disk space available to use for caching purposes.\n| if ws | domain | domain | string | empty | Domain SSL is valid for.\n| if ws | ssl | ssl | boolean | false | True to use secure connections.\n| if ws | sslPrivateKeyPath | ssl.privateKeyPath | string | empty | Path to SSL private key.\n| if ws | sslCrtPath | ssl.crtPath | string | empty | Path to certificate.\n| if ws | sslCrtBundlePath | ssl.crtBundlePath | string | empty | Path to certificate bundle.\n| no | publicIp | publicIp | string | empty | Public IP that master must use. If empty, master must resolve IP by itself.\n| no | natPmp | natPmp | boolean | false | Automatic ports mapping using NAT-PMP.\n| no | http | sockets.http | boolean | false | True to deliver content via HTTP protocol.\n| no | httpIp | sockets.http.ip | string | 0.0.0.0 | HTTP listening ip.\n| no | httpPort | sockets.http.port | number | 6767 | HTTP listening port.\n| no | ws | sockets.ws | boolean | false | True to deliver content via WebSockets protocol.\n| no | wsIp | sockets.ws.ip | string | 0.0.0.0 | WS listening ip.\n| no | wsPort | sockets.ws.port | number | 7676 | WS listening port.\n| yes | wrtc | sockets.wrtc | boolean | true | True to deliver content via WebRTC.\n| yes | wrtcControlPort | sockets.wrtc.control.port | number | 7677 | Control port to exchange SDP descriptions via HTTP.\n| yes | wrtcControlIp | sockets.wrtc.control.ip | string | 0.0.0.0 | Control ip to exchange SDP descriptions via HTTP.\n| yes | wrtcDataPort | sockets.wrtc.data.port | number | 7679 |  WebRTC data port.\n| no | wrtcDataIp | sockets.wrtc.data.ip | string | undefined |  WebRTC data IP.\n| no | walletMnemonic | wallet.mnemonic | string | generated | Wallet mnemonic.\n| no | walletAddress | wallet.address | string | empty | Wallet address. If `skipBlockchain` is turned on this setting takes effect, else `walletMnemonic` is used to retrieve wallet address.\n| if not skipBlockchain | walletProviderUrl | wallet.providerUrl | string | empty | Wallet provider url.\n| no | client | client | string | empty | Node client address.\n| if skipBlockchain | masterAddress | masterAddress | string | empty | Master address to connect to if skipping blockchain.\n| no | whitelistMasters | whitelist.masters | array<string> | [\"csl-masters.noia.network\"] | Masters whitelist. If empty array then all masters addresses are available.\n| no | controller | controller | boolean | false | RESTful node controller. Listens by default on 9000 port when turned on. |\n| no | controllerIp | controllerIp | string | 127.0.0.1 | Node controller IP |\n| no | controllerPort | controllerPort | string | 9000 | Node controller port |\n| no | skipBlockchain | skipBlockchain | boolean | true | Connect directy to master using masterAddress (ignores whitelist) if turned on.\n| no | nodeId | nodeId | string | generated | Node identifier if skipping blockchain.\n\n\n`*` mandatory to make sure configuration is correct to connect to NOIA master and serve content using WebRTC protocol (default setup) or via secure WS (WebSockets). Currently HTTPS is not recommended and poorly supported.\n\n**Note**: `skipBlockchain` is turned on by default while we develop blockchain network.\n\n**Note**: On startup, node is registered on blockchain and client address (`client`) is saved in `settings.json`. If any of `domain`, `sockets.ws.port` or external IP information property changes, `client` should be regenerated. To do so, simply remove `client` property from `settings.json` and it will registern node client on blockchain with updated values.\n\n### SSL\n\nTODO: add SSL docs.\n\n### Logging to log file\n\nNode by default doesn't log activiy to file. To log to file `noia-node.log`, create `.env` file and add line `LOG_TO_FILE=yes` to enable it.\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"_id":"@noia-network/node@1.2.5-rc.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"dovydas_noia","email":"dovydas@noia.network"},"dist":{"integrity":"sha512-D+X927EnKaRS7CIsFOvSNAt4R/fo04mVzwXvbjA9evfQevUhpfwFN+VqN+rL+Nx3L2Zu0EWgCyu3Pn+qpfspcA==","shasum":"8548839f1ceeeb8cfa70db747842396e2df29364","tarball":"https://registry.npmjs.org/@noia-network/node/-/node-1.2.5-rc.1.tgz","fileCount":36,"unpackedSize":255572,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePDX7CRA9TVsSAnZWagAAtxgQAIXmSl/FITKjx/Hy1L8D\nnKYQ15kYQYSS5QsycaJlA1Ep/RtK4tf535varBY6gZVk1KtQnzdkfI0e3dGD\nMhvQr0721qcc0pjaOIXxWhjT2oFpL25ONxsXRF5tV/jxX+OXx8Fl+5cVFtQx\n9zAWesUvA2HHzD4GKWh08andAEZKshpiNbs2sCRiuyff0cneapZj0FLhZaFZ\nBH5ub4pY7+Udzra7UnB52cEgGhggM9ga3Ku+4jTh7xRrshhGWVhQ4eqpK5aQ\nYofHIVvqi8Kk/W7jvsCDYGxlxNZz0+SwXUQNthT2LWMjqMyql2wxLop+0oVE\nBP/PsjtI3nbHjyPRgXdNnB9tms+IndnlXYv/QP/4kBijtf6I9jGJqnubU6/w\n5e2vy7BbOGlZPsgvZk5y1wrZVR37nKbZKPaxUaEzqjpbh6oeAhNyuylC6UE/\npTd62z+5DVasR95mhsLAiOgkudtK5J+S88pw8rDHRTZS41RqS/a68wzjKRqV\nciRN7dc95q3Rk3QRdTVKceQBa/8Ns0vMmKlZ9lo0/OPHI9WnBz8zVh/4Gope\n+5d6jNnvCi3JnlZmUzGmPWHB3QJdazC9j9BzYRKBtkJdrpNRcCemQDU1tI5d\n3c7Cp0cSyVLIPxWfALTfrJS94Jipc5/bfTmmsjsilxrFu3fJZ2nvfKzhP2Hw\nwlz3\r\n=bKwy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhDKBZKt9MqWrncRP1i8enwVDhygVF+uNMlXYycr4uEwIgZfsDiVvPXhosKTCtpXb6Yv7nv+j1UdM3NdmTpta0f6E="}]},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/node_1.2.5-rc.1_1581004283091_0.5558804481923907"},"_hasShrinkwrap":false}},"time":{"created":"2018-06-21T22:57:22.284Z","0.2.5":"2018-06-21T22:57:22.810Z","modified":"2022-04-06T09:26:55.314Z","0.2.6":"2018-06-22T13:22:20.889Z","0.2.7":"2018-07-01T15:48:21.305Z","0.3.12":"2018-08-03T10:33:06.039Z","0.3.13":"2018-08-06T09:59:44.380Z","0.3.14":"2018-08-06T19:32:07.640Z","0.3.15":"2018-08-08T21:32:20.182Z","0.3.16":"2018-08-10T19:31:16.027Z","0.3.17":"2018-08-15T07:46:12.256Z","0.4.0":"2018-08-20T11:55:23.676Z","0.5.0":"2018-08-22T19:15:29.757Z","0.5.1":"2018-08-23T14:32:56.826Z","0.4.1":"2018-09-05T17:17:31.590Z","0.5.2":"2018-09-07T16:45:16.737Z","0.5.3":"2018-09-20T14:45:31.633Z","0.5.4":"2018-09-26T07:16:48.474Z","1.0.0-alpha":"2018-10-03T14:17:29.408Z","1.0.0-alpha.1":"2018-10-03T15:54:00.898Z","1.0.0-alpha.2":"2018-10-04T14:29:14.653Z","1.0.0-alpha.3":"2018-10-04T15:01:39.227Z","1.0.0-rc":"2018-10-05T08:45:17.245Z","1.0.0-rc.2":"2018-10-15T08:53:23.069Z","1.0.0-rc.3":"2018-10-17T12:52:43.914Z","1.0.0-rc.4":"2018-10-19T08:35:19.844Z","1.0.0-rc.5":"2018-10-19T11:18:32.752Z","1.0.0-rc.6":"2018-10-22T13:34:49.925Z","1.0.0-rc.7":"2018-10-23T12:53:03.463Z","1.0.0-rc.8":"2018-10-23T17:53:28.657Z","1.0.0-rc.9":"2018-10-24T18:03:47.289Z","1.0.0-rc.10":"2018-10-25T13:04:13.193Z","1.0.0-rc.11":"2018-10-25T14:53:52.471Z","1.0.0-rc.12":"2018-10-26T10:20:43.855Z","1.0.0-rc.13":"2018-10-26T12:27:07.824Z","1.0.0-rc.14":"2018-10-26T13:22:02.772Z","1.0.0-rc.15":"2018-10-29T11:32:45.080Z","1.0.0-rc.16":"2018-10-29T14:43:13.963Z","1.0.0-rc.17":"2018-10-30T08:59:55.112Z","1.0.0-rc.18":"2018-10-30T12:14:11.447Z","1.0.0-rc.19":"2018-11-07T15:13:01.723Z","1.0.0-rc.20":"2018-11-12T14:37:33.557Z","1.0.0-rc.21":"2018-11-16T12:02:25.080Z","1.0.0":"2018-11-16T12:40:32.447Z","1.0.1":"2018-11-20T09:11:25.463Z","1.0.2":"2018-12-05T13:08:04.203Z","1.0.3":"2019-01-08T09:41:40.449Z","1.0.4":"2019-01-11T12:59:57.384Z","1.0.5":"2019-01-17T08:55:47.837Z","1.1.5":"2019-04-08T09:57:08.042Z","1.2.1-rc":"2019-07-25T12:11:04.371Z","1.2.1-rc.1":"2019-07-30T11:23:14.014Z","1.2.1-rc.2":"2019-07-30T13:45:40.511Z","1.2.1-rc.3":"2019-07-30T14:12:10.693Z","1.2.1-rc.4":"2019-07-30T14:49:49.852Z","1.2.1":"2019-07-31T10:31:38.577Z","1.2.2-rc":"2019-09-09T10:37:10.918Z","1.2.2":"2019-09-18T10:18:58.245Z","1.2.3-rc":"2019-10-08T07:02:32.682Z","1.2.3":"2019-10-29T06:51:32.670Z","1.2.4":"2020-02-05T06:41:17.399Z","1.2.5-rc":"2020-02-06T11:41:14.016Z","1.2.5-rc.1":"2020-02-06T15:51:23.277Z"},"maintainers":[{"email":"danieliusd@hotmail.com","name":"dancia"},{"email":"dovydas@noia.network","name":"dovydas_noia"},{"email":"mindaugas@matutis.eu","name":"mmatutis"},{"email":"jonas@noia.network","name":"sijonas"}],"description":"NOIA Node core.","homepage":"https://github.com/noia-network/noia-node","keywords":[],"repository":{"type":"git","url":"git+https://github.com/noia-network/noia-node.git"},"author":{"name":"NOIA Network Limited"},"bugs":{"url":"https://github.com/noia-network/noia-node/issues"},"license":"LGPL-2.1","readme":"","readmeFilename":""}