{"_id":"tcp-serial-relay","_rev":"49-d623b4afda88a152a3bb2184e2fd3edd","name":"tcp-serial-relay","dist-tags":{"latest":"1.2.47"},"versions":{"1.1.0":{"name":"tcp-serial-relay","version":"1.1.0","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.1.0","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/yourusername/tcp-serial-relay#readme","bugs":{"url":"https://github.com/yourusername/tcp-serial-relay/issues"},"dist":{"shasum":"6fbf61d38370e26bc5101106615bac72d913e0bd","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.1.0.tgz","fileCount":59,"integrity":"sha512-sNxGnBLncDMZWw1lOZgJd6Vqj+V9dQda1cvqoPL6e/dr49viJcVNwotx1jlYGYYBk1JqsM9uZ8Rsn+08/qabVA==","signatures":[{"sig":"MEQCIDoB23m0osDAQLSxwD2BTeMYdam/MQ8K0JUTPMbGtUgNAiApslFpI3iJgFV1O0CvmRYJ0DZm8FR2z1b0zFcvWDfT7A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1284096},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"32e860570b721bf2d585da870b4a07c2b83c0cde","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/yourusername/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.1.0_1748097875453_0.5006428470210531","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"tcp-serial-relay","version":"1.2.0","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.0","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"26760b8db90e783fb3577b83f8cc669bd05fc781","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.0.tgz","fileCount":59,"integrity":"sha512-8Flh/xeSi0NxhfeS2zv6Qd7+AXcqpYptqbQGWrMxybx++YHuubpOJXubllr6iTLIEKLtRSBhsf5INoKg3JJMHQ==","signatures":[{"sig":"MEYCIQCPVrhPUTAFhXAW/P4C5yP4T3u3fTdU2nvaxx5ERcyZ3gIhALXpzxOcC4THrKGaTJJou6he9t8cX4q1gYQgUC4A9XKI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1284170},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"ac5e3d21446e0061936078f2be0baf30fbe5335d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.0_1748099885286_0.08354786308430251","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"tcp-serial-relay","version":"1.2.1","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.1","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"52842a807dfd32d69cc26643979eb3468b92a5f6","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.1.tgz","fileCount":60,"integrity":"sha512-l6BQWFPP0OZpYvRi4SgCwjgKI7Yl6bn6j8UZVPA2F1CNsnO+E8wCPdp/LPr/+8YWCSM9K32wWuO6AZykBo1O7A==","signatures":[{"sig":"MEUCIQDNdZEYdElALaflhtt3zN8hwZFESlzrKK+ORF/AzEGGGgIgTief02zt9vUrx0umBF/AWvcY4O7Y3D9IRG1lSKKQluo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1285519},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"ac5e3d21446e0061936078f2be0baf30fbe5335d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.1_1748100449113_0.8204921655814346","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"tcp-serial-relay","version":"1.2.2","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.2","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"73b408b7b055cddeed68aca1481069bf4fa4d68e","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.2.tgz","fileCount":60,"integrity":"sha512-J4IOaPjVww2TqSieKkAWlCE2SX9egDczsJXgjRYC2FYJMTmI7N+hAv74psGwJ/u2wzwd4tC8THFXbH6RTBAPMg==","signatures":[{"sig":"MEUCICWX6mXDyT4EzXSLvVRXU7ec46snbqKRRKGdQzuiQqv2AiEAn37zeefGkapatrYOAnLYXr3HWOtAEaQV3MCsPFPnqUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1285581},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"ac5e3d21446e0061936078f2be0baf30fbe5335d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.2_1748100617289_0.0256505775896938","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"tcp-serial-relay","version":"1.2.4","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.4","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"17a33852a40b4f25e1f7f7138426f7d7e5f03273","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.4.tgz","fileCount":60,"integrity":"sha512-jlpQBiwFNDR8HFowykV4D7eVtLzW5l19yN3wjbgM3YNwOiH2uC1epI408EW70wqsEoXvuyHCF4ofskl2JTk3Cg==","signatures":[{"sig":"MEUCICyfK5meF6/YVNegNpUMdTZkVwoyb20VseYxrmRN1dptAiEAizED55INBZimrATonG+co+QH/zz/K+luKI8ACg8jJDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1287125},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.4_1748101498151_0.01696972064791047","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"tcp-serial-relay","version":"1.2.5","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.5","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"a9aa044315b1821acb7c6db577826a8e7a69e9f0","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.5.tgz","fileCount":60,"integrity":"sha512-IxQa2kXRHnhitCKt/LbS8NJ4sCLuCe5zA41oevkR87U7HwqVBbgXuI4tEpk5IFIxYV5iCkKYGWuGn6W3K0/Evw==","signatures":[{"sig":"MEQCIBiZjnToapvudz7ocfe5lZUN9Jsk2B8O5Jig/RQEIzx3AiB8RnBSXxredP3AfHplpQUNLY0mwcjLvh9KBYZDbc2rKQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1289262},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.5_1748102197145_0.4932119139146869","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"tcp-serial-relay","version":"1.2.6","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.6","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"9b52a4166f6c51dc7351578df0ea3038ed8dfa30","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.6.tgz","fileCount":60,"integrity":"sha512-kcZ8lxTf3Q41q9+jRSyJ0xSUdJ2t0RghUWgbbZVfotTX6N6jSb9L8/RUywg1n2re3aN837r6rfVA9/C13O915Q==","signatures":[{"sig":"MEYCIQC6m5vN8N78VfaMD61myOB7k2TibHcMhpGN3yRG5oUKGQIhAN/lM/5XWYQIVMhE029ojLp5XD6dWXH1RSTchm/soio/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1289296},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.6_1748102594855_0.6687090539267757","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"tcp-serial-relay","version":"1.2.7","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.7","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"2c0516974710136bf8d6c6fe0fa524a12f797da0","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.7.tgz","fileCount":60,"integrity":"sha512-KMisJiURnzjkruQePs0JjHtKhddFBYLiJ97VCdR1A9bYaDmDBy/m3x9bFsNQIse9lHtlwoVFnwn8KqO5USAOcA==","signatures":[{"sig":"MEYCIQCkKw5t8ar4jbi1mrjfFoDx0OoKHEFYFDu9gIb8GynXvQIhAPSLDQ9oZ44vTe/o0cirx8dqDHWE/HLJ+wC1ksUoJdWV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1289263},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.7_1748102855461_0.7933472088102458","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"tcp-serial-relay","version":"1.2.8","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.8","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"a1f995ab7800e5fc2a2a7109d5657cd7f3b8aa92","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.8.tgz","fileCount":60,"integrity":"sha512-AMFTnFB5Zhir6lUhG4qQyIyi/oIALyIDlwC654ObLmIy9w9JJ0rdTeaxQk+/SHszA2NU3b2uKn3FQ3DLsQQXnQ==","signatures":[{"sig":"MEUCIQCqA4IvfBcvBE5nnqqnhn2bNU7IGz8dTLnmJxSaeW2SjwIgZg17Xxnx8l+nsF4PoZExw7Pv/jRxnQMSA6JuFSq6YbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1289250},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.8_1748104225565_0.8204942575778553","host":"s3://npm-registry-packages-npm-production"}},"1.2.9":{"name":"tcp-serial-relay","version":"1.2.9","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.9","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"927ee0cba050c34514b78134e5e1fa96a2f203c8","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.9.tgz","fileCount":60,"integrity":"sha512-OzQ4kPsBH1mr0NV1QF9ejAWcfAObjBMr5rj8bQNxN1JUp+3TUNmo0sShMWfybaP436T6IWEPZn0dj8Z0GNoYqw==","signatures":[{"sig":"MEYCIQDyyRVtPMGgOeMrjn/h6Z5MlHxIRM+sFPIaZhQu+OzUcAIhAN8PnncDdaH/ga4qodBwBZbaVwiNBZo0/Q0m/eh1zu//","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1289450},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.9_1748105956252_0.17846614076483136","host":"s3://npm-registry-packages-npm-production"}},"1.2.10":{"name":"tcp-serial-relay","version":"1.2.10","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.10","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"c366d31f150b81e5dc984004e1d700cceb8a55d1","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.10.tgz","fileCount":60,"integrity":"sha512-0wPHC7Hh1lnhjPGHHuDX5cX4HT+gHwZGQ4PeLX1Fc9TPYLnDLbIumeWEOfpl5WEzi2IkxkFD1pyWOuLUf3RQOg==","signatures":[{"sig":"MEQCIAjZn9Gjq+XHz1sHl1T2ECGpdvRStZln4AABOQpYgvBSAiAA4IAznlG1XBLhYevO4Fl7bR5cIthBJDYScMcPcj6HYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1294160},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.10_1748106318361_0.6927342137679848","host":"s3://npm-registry-packages-npm-production"}},"1.2.11":{"name":"tcp-serial-relay","version":"1.2.11","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.11","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"aba5a2a750f6243102703890a69048c4ff8a6ca4","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.11.tgz","fileCount":60,"integrity":"sha512-2eNphPZHIjoGYZ+eHG2vVKjBK8P6hCiGFyGhAOhNNvGqGXQF6qnPeD0NFaqtaGNNyVpH7woxFlH9mEFL/dmIKg==","signatures":[{"sig":"MEUCIQC83SpRY6tW6BMSrJs5FF47rZDb4ngvDBxB4nJ76Tn0QwIgOSbgGwSPAIiwEBYjoIewR4XK7q7YJFOAiAXUlaBucjg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1293824},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.11_1748107458933_0.8380908427340334","host":"s3://npm-registry-packages-npm-production"}},"1.2.12":{"name":"tcp-serial-relay","version":"1.2.12","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.12","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"dc18e687fd3e951078b6e7325cb2cc3b3ae85297","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.12.tgz","fileCount":60,"integrity":"sha512-Hsj+4Ld8OEqce1hxrVJxaTugwUyi02rbLCFjNJkt+Zc9oQu9QT8QFAWK7xO5JKBAqo0pR+faXNeOK10esSuY/A==","signatures":[{"sig":"MEYCIQC//zb4ZFd/BsyQvEeQrJrDj3LGhFhX4Qrc5Soy/Z4eZAIhAKBygyemozLVCny3nEH70l9HDX7iEAFbtgKCP0lP4IoV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1275820},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.12_1748133039181_0.08301884585849617","host":"s3://npm-registry-packages-npm-production"}},"1.2.13":{"name":"tcp-serial-relay","version":"1.2.13","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.13","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"e1cc58dd0d263afbf68fe2f1ad601d0b98730cec","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.13.tgz","fileCount":61,"integrity":"sha512-+MClE010cYYYcUytVBcjZUHcdNFxNGf/lXOftgKXWiOMEiGdx/EIJec/pHEK5pHx5o4/Hl6weYByhp540tewBg==","signatures":[{"sig":"MEUCIQCqqS5PkJ6aGATGAXRcqtfMskGoNwiDT6ZvVPRpL0DQegIgdOGjbP0YVCHlC9MCjdxHSQONbacRtWZ/H/iJTfcqKjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1277341},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.13_1748139089405_0.04611935437145109","host":"s3://npm-registry-packages-npm-production"}},"1.2.14":{"name":"tcp-serial-relay","version":"1.2.14","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.14","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"adca772faf4fcb29d4d75a4d02db9f762cf0cfee","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.14.tgz","fileCount":61,"integrity":"sha512-fyxCBkA67r0tUM80TIKbSkN94QkJ6IvqPp5ksD85PZXO6eXpyTUSr48YLMUqcQMuX8IW7XhbeAh30lBqWGgDsg==","signatures":[{"sig":"MEUCIQDnqNAUDxws4iWXvO8UIfx55IgBUb8fH80/EcSyPdxobgIgKBPL+tZlU7UsrrqEiMOi3c3R3aYboP83FegAs+N/TJk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1277677},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.14_1748140495313_0.9713760136258696","host":"s3://npm-registry-packages-npm-production"}},"1.2.15":{"name":"tcp-serial-relay","version":"1.2.15","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.15","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"390a26b8e41a4f4b56d5418f1e60ddeab9a14266","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.15.tgz","fileCount":61,"integrity":"sha512-x7LAOWcPoMsy71mnCCZapvzOouoKpRyHJ8vV+ITgIzkDtLpVa8bdDu7Bt41TfpuZAhyOC053o1Jvn/cCQ+2JKw==","signatures":[{"sig":"MEYCIQD3PEGxzKAe/VbIUw/9irWcS0zeK62e8StbxA39IaPqzwIhAMl2QEmC/d2gTEQ8YJ+iBzbzPN8CHjt0VO1qyyljSwvd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1277714},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"3b26aa97413daaecf6784717009380385890487d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.15_1748144593006_0.5780235240494334","host":"s3://npm-registry-packages-npm-production"}},"1.2.16":{"name":"tcp-serial-relay","version":"1.2.16","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.16","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"1a5954906b57ebe585455a7030850e16879e7076","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.16.tgz","fileCount":61,"integrity":"sha512-w30OKE8tgdswiNn0eQ/gin1mDEw98kYapOVE+8ed4bYR13tabElc8Fei+mWr/6YPAjzLe+El3bttg8KRv+D5Hw==","signatures":[{"sig":"MEUCIQDfZ8/UYk8yg0xkB0ew1OL+Lox3Z2XG9k65h+Jq82UYSAIgcSvSuJRf+fyeeRqevqOcsAD1lItKhZoknLjihqfLgKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1276998},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"df3b9551ad18b31c097a9edd8bf60ba68c0efff3","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.16_1748145027769_0.3749871561669329","host":"s3://npm-registry-packages-npm-production"}},"1.2.17":{"name":"tcp-serial-relay","version":"1.2.17","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.17","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"f489e154879e95a0c40bd7afd11ceb4155cd11a9","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.17.tgz","fileCount":61,"integrity":"sha512-wlFhDDukg/FS1KB9DfN9upqNXoV12GDhjiR0WzXkfOSh4TFmIr4U8Ezby7y9m1YnNc4j1WEQ1rh3LnB+4EwNrA==","signatures":[{"sig":"MEQCIDEAJGE9D5W9EcyfCKinHFi8tmASAfjSxBxz49ouXmGbAiA2AR1tUrPPZTEYi8NFfaJqDueU3TIGHzv5NORMfZ0s/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1277007},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"df3b9551ad18b31c097a9edd8bf60ba68c0efff3","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.17_1748145499398_0.06320608201371214","host":"s3://npm-registry-packages-npm-production"}},"1.2.18":{"name":"tcp-serial-relay","version":"1.2.18","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.18","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"2c858a9385aea2297968bcdddec12d5a3a0faa08","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.18.tgz","fileCount":62,"integrity":"sha512-efttEvKFGhY2ajmGMI62ZScEs1wqYC3423Ud0lixQyltQM6hYEcRVZWKlM2KnczlIYKHJB5daL78oSZLhXzG3g==","signatures":[{"sig":"MEUCIQC8EBfpicAFBurScDpMCFqwO74yMU6ViWzlE+lWE1qmawIgNAGu23K+/7RtQ+ErKIdtetqhwduj/UjWTLbDS0vsl1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1278904},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"9317fa0965c7bbaf532af4c6ecabaa9634fec58d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","commander":"^14.0.0","serialport":"^12.0.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.18_1748228570118_0.4929728459039313","host":"s3://npm-registry-packages-npm-production"}},"1.2.19":{"name":"tcp-serial-relay","version":"1.2.19","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.19","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"3ac197af5fa49d4de50105186c20efb0201d1f0c","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.19.tgz","fileCount":92,"integrity":"sha512-fxofs5Pxl5zQXwovW4YJHx/O3/NyX5jSppkxw50HT5BgrLQ6xgH1HPz4el8Li5KoUQfT2pNChVBBlfFLGaTPOg==","signatures":[{"sig":"MEQCIFQsMvgyISubzJ/ygftMDoQBxVtF69umQgi7kypZKhuxAiAmRBoX20jCmAHYWWz58cK61Gr5wxswoha/V5FGKca4AQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1570708},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"9317fa0965c7bbaf532af4c6ecabaa9634fec58d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","commander":"^14.0.0","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.19_1748297209543_0.583009269607558","host":"s3://npm-registry-packages-npm-production"}},"1.2.20":{"name":"tcp-serial-relay","version":"1.2.20","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.20","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"22af478b9c34066685c0ce2de380de2c9d639b23","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.20.tgz","fileCount":92,"integrity":"sha512-agqRZrfB1tNKXSrW4TagjzPrpg53iADo8sWIvwjQz0ae43YNzcZe0VOpO/j7lS5JGDsjPCSo3Xjc1ltRvHP6Yw==","signatures":[{"sig":"MEQCID9yD4/FUQXTaD3raAqe/Miw4rvKhnoAFhcWCUBPRlWcAiASOcA45Vj3w4qPnM73YUoqiqmIEyAmWiHCFV9IfU2Dmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1570959},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"9317fa0965c7bbaf532af4c6ecabaa9634fec58d","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","commander":"^14.0.0","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.20_1748298113794_0.41388927562234756","host":"s3://npm-registry-packages-npm-production"}},"1.2.21":{"name":"tcp-serial-relay","version":"1.2.21","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.21","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"ff3a11b8791ee795c7fce32b72b9245818906129","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.21.tgz","fileCount":660,"integrity":"sha512-IgYHZxNgC5VIRR9b8R1ngBhz7cqcf9USCXkrEjkwZWg1GCblxsff0ZheQNAOYTVJLp8DvKZUXB1AbtjfZimLQQ==","signatures":[{"sig":"MEUCIBA+QimmGGaQyTGnQTIlBSaF/jvRV7RVjTywT5mz4wx/AiEAgVH3N5DhxVoxzMAOBegxo/wrqhWeXQPuW+59VXnzzS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3502978},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"928d265f2028b49bf1a7f67282385ed41c2491c4","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","dotenv":"^16.3.1","winston":"^3.11.0","commander":"^14.0.0","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.21_1748302933996_0.19087486357734917","host":"s3://npm-registry-packages-npm-production"}},"1.2.22":{"name":"tcp-serial-relay","version":"1.2.22","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.22","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"cd0e3fe6c9e863e4a18b08296b90cbc001371871","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.22.tgz","fileCount":664,"integrity":"sha512-skWwVV/D7cKWxfiKfMdL8Ir4YnALmc5Ie0goYpExANzmV20f51eLA3smskJsXLubtnH2ESF0/3IzVMjih0YIuw==","signatures":[{"sig":"MEUCIBzbYRz1w685q4mPe4wF3lm1c6ziKEP3wv8Z/+rhySDdAiEAp1E4/vGydgxtBb/W0D6Y3JrSZKABR6EoliBvu785cNY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3529382},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"928d265f2028b49bf1a7f67282385ed41c2491c4","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.22_1748307194048_0.13173328920959815","host":"s3://npm-registry-packages-npm-production"}},"1.2.23":{"name":"tcp-serial-relay","version":"1.2.23","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.23","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"3743bb4cdd912143c1f121ec23b8af4af98c2e8f","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.23.tgz","fileCount":664,"integrity":"sha512-JzBtJ6vNDQvvE7ywe2TguBrcvsWhT9EMuLDzz52F2vaYhiiJFhuD0GMIZmjtLyW6mU/easRz67iRS7YCILR4XQ==","signatures":[{"sig":"MEYCIQCpoMBKR00upmVPTAnxPa3yNLfqDcXjeJRxB8GfEAiiBgIhAKyaAV/XTc843cXA6ff+ui3d4+Nw5/wTeckVs8NgeGEJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3523388},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"928d265f2028b49bf1a7f67282385ed41c2491c4","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.23_1748355135495_0.008468131268336121","host":"s3://npm-registry-packages-npm-production"}},"1.2.24":{"name":"tcp-serial-relay","version":"1.2.24","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.24","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"13013a17e42ad44b36df6da85e8bde075ec054bc","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.24.tgz","fileCount":664,"integrity":"sha512-yjPWxK9M3hWjG4bbuuBIvQ1+CFw13yKV6PQD5fn1PmrKhI08a2wP9EiFEwDoXic9pX36NJwXuukLE71OasB4JA==","signatures":[{"sig":"MEQCIFXvNfqZ1hM+Zy7cXFSVOCg9XCKARX2XBzvYSWBLoxgzAiANHqMFnOenviVIrneNDxQ2U3d9Xp2qyDwNyOICp9pxNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3524028},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"928d265f2028b49bf1a7f67282385ed41c2491c4","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.24_1748356670956_0.2923161843384694","host":"s3://npm-registry-packages-npm-production"}},"1.2.25":{"name":"tcp-serial-relay","version":"1.2.25","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.25","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"d62a7734001224a254fb6ecef7f79c8844dd862e","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.25.tgz","fileCount":664,"integrity":"sha512-lbZSFX32D3JZkK4rfx/AzOJSDiaPmPrbNbZJLWQ7jF+YWkVnrOpdSNvy/K0SNYlKbqPsIF/XWqPR41Ve2WL/zA==","signatures":[{"sig":"MEUCIA9NQAsQaoMY9YGwdWCgvhu0eF+xWnYMLf2HGxLcyX0bAiEAhbxjf5TEVqmYPXvp8mllt2uMnL6lpgelusgz/8RYEhk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3523970},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"928d265f2028b49bf1a7f67282385ed41c2491c4","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.25_1748357343537_0.8683336418247698","host":"s3://npm-registry-packages-npm-production"}},"1.2.26":{"name":"tcp-serial-relay","version":"1.2.26","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.26","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"a688163185faeec3d2e486297a11afad598df6b3","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.26.tgz","fileCount":666,"integrity":"sha512-j9/IzHd+ZSXdStL3k6Ja7EA1DBAlpq4w6h2buNu34h7MbdN6KjSbl4s9WMRhbK/QyPzHW7fCduF7w/5v9aE2+A==","signatures":[{"sig":"MEYCIQCy01hCIt3yp3I6yd7EPrKpeYJ6jXrrN5zGkvdB8toWPQIhAPM209AeM9xscJKNwVEPBN8wrVld5oQtNINc6jYpC9m2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3552097},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"928d265f2028b49bf1a7f67282385ed41c2491c4","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.26_1748358711679_0.8229624935247761","host":"s3://npm-registry-packages-npm-production"}},"1.2.27":{"name":"tcp-serial-relay","version":"1.2.27","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.27","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"255be9b94238a50de4977d88eec0373c5124511b","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.27.tgz","fileCount":667,"integrity":"sha512-Fun2qZT0UUqGW0Za29UkGC7EabPpBLE03yyPugTEGPw2LewuuKmercp8i8XKOiEyIJH+0B72lpXalk62fSw5ag==","signatures":[{"sig":"MEUCIDRMI8DQ9tQqpAjDkQIgWRfSLVcZVPPgGiX+N1RHsx1VAiEA+n8kVSHlDgYUyk75ttf0bBKorEsxv4z8O5xiAlkKlEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3567780},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"928d265f2028b49bf1a7f67282385ed41c2491c4","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.27_1748360720632_0.2993427831667512","host":"s3://npm-registry-packages-npm-production"}},"1.2.28":{"name":"tcp-serial-relay","version":"1.2.28","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.28","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"134bf8bd64e978ac937d56479dd460afe43e66d1","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.28.tgz","fileCount":1288,"integrity":"sha512-HU5uc0eGD6zko2b10h5gY26RQ9UY1cIKm4PqPh+FDeCqxyC1SkwMEXtXEgjy+PQSVJv3yrWrfMnd58gl16GTPQ==","signatures":[{"sig":"MEUCIQC+XTa+ECFkc24eDY8615SVrZMi0Ulpf3NW4cYn51AOzQIgOEEjuTFfE/hNjBwGYugsv1swGao0l7gXYQDeek7abLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5803673},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.28_1748365115181_0.5772279833230087","host":"s3://npm-registry-packages-npm-production"}},"1.2.29":{"name":"tcp-serial-relay","version":"1.2.29","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.29","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"7ffb67031db7156644d13d0b1520fc966b94657e","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.29.tgz","fileCount":1288,"integrity":"sha512-SgiCz6xPBMCUIdx71m7UxcsDXoEOAqdE+PbI/xCluULduVWxe2m9T0NoMRILccVglmrNCNwJciY/aW/8Cn/7yw==","signatures":[{"sig":"MEQCIE/NZ8oCNFMRZ9kwb1FA3Ow9QA+uB9pXyNACjaL5Wb98AiAAkTeX4iYhTSbPQeSnRnFUUT/4xNxX35Td47OgB/zbOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5812103},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.29_1748365509342_0.4946464088438607","host":"s3://npm-registry-packages-npm-production"}},"1.2.30":{"name":"tcp-serial-relay","version":"1.2.30","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.30","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"c80d18bf2b3ae1cbaeb40c0078aa8eb0184e4fbc","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.30.tgz","fileCount":1288,"integrity":"sha512-bIp262X28f477avutg56hg1T0kZ51vihpUaGywZQ/pyFZJw6Qyzw6771ZsZMGHHScQTGxz0agPLQkPgoW7FgVg==","signatures":[{"sig":"MEYCIQC2bHyos5bpaytnyZmhBQBaCoTD5Cj3IRNbwjSgmoYfsgIhANcRVCgfWJOGldGVWLGwbEZnajQoXqlAsISR65m4mDzk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5819025},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.30_1748370018772_0.7727188325345806","host":"s3://npm-registry-packages-npm-production"}},"1.2.31":{"name":"tcp-serial-relay","version":"1.2.31","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.31","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"572aa069f1a73b96f165fdea59c0458b46b6c385","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.31.tgz","fileCount":1288,"integrity":"sha512-zsjPk8T/DZ/JKahKigOogWDDX0AKmNk8LFOGbEzK4cpEnwrSEI1w3FnAeeOTrkbR12lFxtwgwwcpVzZU7j4InQ==","signatures":[{"sig":"MEUCIQDzO82/5g2akiOAK0p7CSXqeadVmFdZ38M5HHhi+oq49gIgO1meyg/46hLEHviBXcOERPK8+POE4gin8Ee0kesFZ84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5815614},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.31_1748370304886_0.8285832507262694","host":"s3://npm-registry-packages-npm-production"}},"1.2.32":{"name":"tcp-serial-relay","version":"1.2.32","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.32","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"7f401f93562a86293e9e3c01d21641e23a66102c","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.32.tgz","fileCount":1288,"integrity":"sha512-oioEjibgvm54H0+bdIt29GsOmhTg+6bN5D+fJ159zCs2lWb1sjNzSM8/QVKhmV+/oOONHIvNF6k8s/AjsUSw+w==","signatures":[{"sig":"MEYCIQDu/+XJSZwmPQcZEpE/QRfT3DCfAZslh95necLASz2j2QIhAMf53rgQJDXf46VFHVg8HaXlwUrgLKrVX9JHQqvntr2B","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5815714},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.32_1748370495013_0.6539453285613928","host":"s3://npm-registry-packages-npm-production"}},"1.2.33":{"name":"tcp-serial-relay","version":"1.2.33","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.33","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"afd129a513ed99746358bd03d226ed11e9f931ec","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.33.tgz","fileCount":1288,"integrity":"sha512-OHK40d9ch9qxKLMFtrRjHYD+ab6FOb7g1VvR4ySW9IpRKo6WwTLg+4IjtnqviCUtACqT0aIoNUzFOdYnvg+OXQ==","signatures":[{"sig":"MEUCIGytZh+IZUYeJ0zyM8fep/XplSs83lPtyu8AjaBHRUo7AiEAphwGBK0Okubt8RY6lqVeREpyNZdVS1Jhib0FmFSD944=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5815809},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.33_1748371566133_0.7609353412832294","host":"s3://npm-registry-packages-npm-production"}},"1.2.34":{"name":"tcp-serial-relay","version":"1.2.34","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.34","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"83a9536d42070a86f419b14cd33748c55f36994b","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.34.tgz","fileCount":1288,"integrity":"sha512-j8uwyf42fEVuNYPLVGWFUfEm9nfTpfBbAqb6nX1WQ8CHvVEVlEYIgCjNyJTv3TT79TKYn5Tp2UhXYCSQXz+biA==","signatures":[{"sig":"MEYCIQCo+ta8pQZU+biqEgNekZwf9q2OymgHNt+PRmw6a1YcQwIhANZFIzq932V8W8SlvHkREQdqL2yPdsNDDJ85GgdRPRAT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5816188},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.34_1748459443705_0.9450427630512388","host":"s3://npm-registry-packages-npm-production"}},"1.2.35":{"name":"tcp-serial-relay","version":"1.2.35","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.35","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"573666f65e9a1f65013279b3824e7aa75fb10417","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.35.tgz","fileCount":1288,"integrity":"sha512-orElP6+4oSwYxW5LnShsjI8uibFE4p0ewlQ/jbkF92cqpq6usM8FBZDto5G5CBWZvLqfM0VTi8F/zNsDlpH45A==","signatures":[{"sig":"MEQCIB+dQxJCgNf4pX/qMBSml9k02Uo+lfBzHR3OPxpqgUl0AiAIp81dLJjbuuXSi7x7pEhNnAQ8+qFti/E2H2uG54Jlpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5816016},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.35_1748460199432_0.11851132890364369","host":"s3://npm-registry-packages-npm-production"}},"1.2.36":{"name":"tcp-serial-relay","version":"1.2.36","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.36","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"14fed343dbf5f74a6338966c1f7cb565ef676808","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.36.tgz","fileCount":1288,"integrity":"sha512-6YRDpSexVDEnUGrYUdhHJwbLWPbBWBhqvoZmsF+J4uLPeUclsqOUR/cYhZTX2HiVClh7h31KEbOVM2Dl61C4zg==","signatures":[{"sig":"MEUCIG0B7BjbY8XdViN17pnrCmh5KH/dZ809unXf1GSCcErfAiEA6osvSkgUk+vJFS2D7wG/ilWRDj1QhE3fjPONzwF9y4Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5816023},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.36_1748460476752_0.3527367567276507","host":"s3://npm-registry-packages-npm-production"}},"1.2.37":{"name":"tcp-serial-relay","version":"1.2.37","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.37","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"14e3f3171b093e5d383e9a367f7dc3c3aacedbe4","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.37.tgz","fileCount":1288,"integrity":"sha512-TvkiZvhjGhLaWjm4qggNOH/CvqSmcQJGdTI+kmxN3p8j9CCAoulAX84L5+kfnocgdPx5MkXkcSYL3xUQ/lpWyw==","signatures":[{"sig":"MEQCIBeUbFe9MIZsc8HF/gkmDeSIJsD3BVaAC3K/KqUL+YoJAiAE29sxuudqy9xfrLaRXti4Kd3IpNx0Xp+i/dItuDIWIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5824694},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.37_1748535016160_0.468866838612761","host":"s3://npm-registry-packages-npm-production"}},"1.2.38":{"name":"tcp-serial-relay","version":"1.2.38","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.38","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"708317c072ad0ac5cae101ba3aa45810544ca861","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.38.tgz","fileCount":1288,"integrity":"sha512-oZNrnW45sWEfxHHhfNhwIGn+Ei5JPpGN6W0MKtkIbExZ2d8qBNAiVMjdF/EYgzPN5K27YICDnfCjutMZiEX1sQ==","signatures":[{"sig":"MEQCIBE1lZrhMlZbo+5NYQNkXeWzgPP4MQKVdjuYlLf95rQsAiAPBwcsbzXbbhjEn/+lXgchQlDJyIW7TYi28ZeBAp6+JA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5824681},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.38_1748536007500_0.8589017251094071","host":"s3://npm-registry-packages-npm-production"}},"1.2.39":{"name":"tcp-serial-relay","version":"1.2.39","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.39","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"5450d71df0763fcee635609fd2dc98f32c719023","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.39.tgz","fileCount":1288,"integrity":"sha512-TOt+qQwtEPwXE1bXHXnj1699LckAWBKM337VtDfXq1P7McihyYOyKfvL+LFWiRP2lYXiiGo1pNryO05eaHrosA==","signatures":[{"sig":"MEQCIH90sIIFP9lYZDAg0FvNeBlS9DfVRMX5LzY0XL/wA8rsAiAy/m3HQC1Rehaz/68aI0lcnNjbjarr8/b0TjKHBIQ4Jg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5829024},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.39_1748538258725_0.7038274048120909","host":"s3://npm-registry-packages-npm-production"}},"1.2.40":{"name":"tcp-serial-relay","version":"1.2.40","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.40","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"4356552e91cf177eb78837e11c4c72f2295db764","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.40.tgz","fileCount":1288,"integrity":"sha512-DtTKqqyofV9ubY4bK2BdlpMjnlBgqjOXjjUhlK5G9S4FnSKxB1RkBVGMoxgEbXnUksHC+GpHkyIOXk3BKIKNcA==","signatures":[{"sig":"MEYCIQDDsEFNkR+OYAWza6KramsNDJXCMQLrOSmFerfcNl2BTwIhAMpYrbO94KtH7QWLqVCBf+Q2dTY79kEVqVJ/3LQ3gAMt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5831628},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.40_1748540010948_0.9695530258300427","host":"s3://npm-registry-packages-npm-production"}},"1.2.41":{"name":"tcp-serial-relay","version":"1.2.41","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.41","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"b927fc54d100c8c65f2f84672612571905476bfb","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.41.tgz","fileCount":1288,"integrity":"sha512-zNi3kfzCdUypEyb+ZwJFkS+z78FEdWcKK5ZjFoOCsbWrqXaskd0yDZgPJPNz/HtfEUzJ6Q5/4cohOab1ZdJ6lg==","signatures":[{"sig":"MEQCICoo+lrS3fndsunLzZfzo2cZMk5CqzJnUVBChsEXQL3dAiBEtw7XIS5t/ernDoErfnSM3/2vvmOVGzzFS4NswaLufA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5836199},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.41_1748546602253_0.44051604246505005","host":"s3://npm-registry-packages-npm-production"}},"1.2.42":{"name":"tcp-serial-relay","version":"1.2.42","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.42","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"61e72c8333fe547a64a05f87f097490972e6f2dd","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.42.tgz","fileCount":1288,"integrity":"sha512-A4UQUbSVmVvt4rUKA8/d7hLfCqBLjgHQ6JP33P0Vl7p5uckYIQ4Y8Klm1ZFQDWIKOws+++1VHx3YshLBxRzHSQ==","signatures":[{"sig":"MEYCIQC/hN9aDpw+DpA47DhG9AjcCM4YYet61iDHda/ptkDpqAIhAKRb0IWJUi44lnIV6qz9UID5bVLmhLxTq+oBrI4Qklmv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5841615},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.42_1748549270302_0.8549387494815157","host":"s3://npm-registry-packages-npm-production"}},"1.2.43":{"name":"tcp-serial-relay","version":"1.2.43","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.43","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"1731b3d4c11ed2f65a1c93403d0b0c60099327bf","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.43.tgz","fileCount":1288,"integrity":"sha512-2imWsp7lg12OSCfeWx7day1GSZ9rWwTFii8Q5rMPg4ZEcPwdjwrp3DGTXZ4GFBOn17MmIk7V/VGPMvNWa0vp8w==","signatures":[{"sig":"MEYCIQDSTxAEV/3YVHaXLdufsgkkkGncSRcl4MPj5C8HN1DQGAIhANXVGBfQMBcbutsqhkwVL8kHxt2ElV5LLpdCWZi1MPuj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5841615},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.43_1748550009225_0.4526628791332301","host":"s3://npm-registry-packages-npm-production"}},"1.2.44":{"name":"tcp-serial-relay","version":"1.2.44","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.44","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"58208c4c28ff211013028a23f1ecd5821cf96f05","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.44.tgz","fileCount":1289,"integrity":"sha512-ZMpzLM/lTjC49msJ8RFfbEFJkBgeyCkiKPk2n5i5MT5m6k6z0rF+oecyyAwFIFnMfdMWldwTUTcmcBQw/vl4Dg==","signatures":[{"sig":"MEQCIBrsSjeeMPQ3Hke30KEadhNa3R/UWgbgTnsh9WaB7FNOAiBrPpVk8AH7v1kqxwahGVKeOk4dy7SPW2QlJ09bQkzsew==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5849510},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.44_1748553543609_0.5997112698230118","host":"s3://npm-registry-packages-npm-production"}},"1.2.45":{"name":"tcp-serial-relay","version":"1.2.45","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.45","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"fd865c352caced737fc4ae713f59edb354b81a73","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.45.tgz","fileCount":1289,"integrity":"sha512-USMKpCGvbnqK/XgktlnaLYxO0aCxpobP3sdt+4xvEC6HYpexXBW5evJmlqwsRGRoHJVUXOhwA2/NA17+J8Xfjg==","signatures":[{"sig":"MEUCIHFOH74/5w/zMPMFf6/cWBDUV40t01hchsmehvoou2ZHAiEAyg1W7l3gFJfL1K8ECO5/WilAt5zsNf7Geguqli48Rl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5849863},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.45_1748555579601_0.04656506063150201","host":"s3://npm-registry-packages-npm-production"}},"1.2.46":{"name":"tcp-serial-relay","version":"1.2.46","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.2.46","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"a9085229dd4b5e139ca90c13294019416d4b70d9","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.46.tgz","fileCount":1289,"integrity":"sha512-nySIDl/t4EOfLoar/LbiD3p+dcht2lzNdpsizSpmFkBwwhQKrk9t1hcEGyMnoW5WpZPdK2ZfgAT+2UhICh5xoA==","signatures":[{"sig":"MEUCIDsiBdFfGSNJD5jBav4u61vR7IAQWN33uKwao/gZIl17AiEAlZ6+jDG2OKX/98NGpofk4o8CfC6lByY0IgIriwPUVb8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5849863},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"6edc568c9c39b6ac0af4832414a9536bcc55a5d7","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.2.46_1748556046409_0.5254638371220901","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"tcp-serial-relay","version":"1.3.0","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","_id":"tcp-serial-relay@1.3.0","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"dist":{"shasum":"dc5b4fca0c50ccc70b0f28cdc0521f491de3e198","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.3.0.tgz","fileCount":1290,"integrity":"sha512-S1g6C0TLLVvtPUF3NT6tYmm12mmYDmYAJiEy0qNfqW+rRjNjA7zRPAEX111+qnqU4AhhLPVC39KdpU0vJl9CaA==","signatures":[{"sig":"MEYCIQDzzXhA7LE+djLeSuR0wyU2sG4/0jIJa8H7pZqbqzP/oQIhAL95L27oskCIPFRkIk7Z4Np+BUOeGsxew5H8hBtwLFdK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5880521},"jest":{"testEnvironment":"node","coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"collectCoverageFrom":["src/**/*.js","!src/types/*.js"]},"main":"src/app.js","engines":{"node":">=14.0.0"},"gitHead":"0767530a8cd5779a4632bb589b703533885e200a","scripts":{"dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","docs":"jsdoc -d docs src/","lint":"eslint src/ tests/","test":"npm run test:unit && npm run test:integration","start":"node src/app.js","lint:fix":"eslint src/ tests/ --fix","dashboard":"npm run start:dashboard","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","test:unit":"jest tests/unit","clean-logs":"rm -rf logs/*","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","test:watch":"jest --watch","health-check":"node scripts/health-check.js","start:legacy":"node job.js","build:dashboard":"node scripts/build-dashboard.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","test:integration":"jest tests/integration","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js"},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"repository":{"url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git","type":"git"},"_npmVersion":"9.6.6","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","directories":{},"_nodeVersion":"20.2.0","dependencies":{"pm2":"^5.3.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","nodemon":"^3.1.10","winston":"^3.11.0","commander":"^14.0.0","socket.io":"^4.8.1","serialport":"^12.0.0","lucide-react":"^0.511.0","winston-daily-rotate-file":"^4.7.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","jsdoc":"^4.0.2","eslint":"^8.57.0","supertest":"^6.3.3","concurrently":"^8.2.2","eslint-config-standard":"^17.1.0"},"_npmOperationalInternal":{"tmp":"tmp/tcp-serial-relay_1.3.0_1748620537466_0.5660445913973309","host":"s3://npm-registry-packages-npm-production"}},"1.2.47":{"name":"tcp-serial-relay","version":"1.2.47","description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","main":"src/app.js","bin":{"tcp-serial-relay":"bin/tcp-serial-relay.js"},"scripts":{"start":"node src/app.js","start:legacy":"node job.js","start:dev":"NODE_ENV=development LOG_LEVEL=debug node src/app.js","start:mock":"MOCK_ENV=true LOG_LEVEL=debug node src/app.js","start:production":"NODE_ENV=production LOG_LEVEL=info node src/app.js","start:dashboard":"MODE=dashboard-only DASHBOARD_PORT=3000 node src/app.js","start:dashboard-dev":"MODE=dashboard-only NODE_ENV=development LOG_LEVEL=debug DASHBOARD_PORT=3000 node src/app.js","start:relay-only":"MODE=relay-only node src/app.js","start:with-dashboard":"MODE=normal DASHBOARD_PORT=3000 node src/app.js","dashboard":"npm run start:dashboard","test":"npm run test:unit && npm run test:integration","test:unit":"jest tests/unit","test:integration":"jest tests/integration","test:watch":"jest --watch","lint":"eslint src/ tests/","lint:fix":"eslint src/ tests/ --fix","health-check":"node scripts/health-check.js","list-ports":"node -e \"require('./src/services/serial-client').listPorts().then(console.log).catch(console.error)\"","clean-logs":"rm -rf logs/*","docs":"jsdoc -d docs src/","dev":"concurrently \"npm run start:dashboard-dev\" \"npm run start:mock\"","build:dashboard":"node scripts/build-dashboard.js"},"dependencies":{"commander":"^14.0.0","cors":"^2.8.5","dotenv":"^16.3.1","express":"^5.1.0","lucide-react":"^0.511.0","nodemon":"^3.1.10","pm2":"^5.3.0","serialport":"^12.0.0","socket.io":"^4.8.1","winston":"^3.11.0","winston-daily-rotate-file":"^4.7.1"},"devDependencies":{"concurrently":"^8.2.2","eslint":"^8.57.0","eslint-config-standard":"^17.1.0","jest":"^29.7.0","jsdoc":"^4.0.2","supertest":"^6.3.3"},"engines":{"node":">=14.0.0"},"keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"author":{"name":"Your Name"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git"},"bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","jest":{"testEnvironment":"node","collectCoverageFrom":["src/**/*.js","!src/types/*.js"],"coverageDirectory":"coverage","coverageReporters":["text","lcov","html"]},"gitHead":"98a70cd64836914487872821f9731bd7daa17149","_id":"tcp-serial-relay@1.2.47","_nodeVersion":"20.2.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-YCh6Z6NAANzgDFFjX/UWbf/VBYY0P5D8AhK7fyZXnnsbtMhbO5e6Up4r1SsdXwLBGLtDM+0UpqxhcAAEDJgXlQ==","shasum":"a0dbc9a974527a44e04949161c7bd6bbe17fc253","tarball":"https://registry.npmjs.org/tcp-serial-relay/-/tcp-serial-relay-1.2.47.tgz","fileCount":1290,"unpackedSize":5862682,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDk3ygHv9YOa2ScGY7cKIAflHWlthWp/9MmeBkF6PSZMAIgXZ3uTu3nNhaSWk0u5tcvUdwUqBWdgnTZo5gieaHDfhM="}]},"_npmUser":{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"},"directories":{},"maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tcp-serial-relay_1.2.47_1748624958695_0.8829810717952187"},"_hasShrinkwrap":false}},"time":{"created":"2025-05-24T14:44:35.395Z","modified":"2025-05-30T17:09:19.209Z","1.1.0":"2025-05-24T14:44:35.694Z","1.2.0":"2025-05-24T15:18:05.547Z","1.2.1":"2025-05-24T15:27:29.487Z","1.2.2":"2025-05-24T15:30:17.509Z","1.2.4":"2025-05-24T15:44:58.442Z","1.2.5":"2025-05-24T15:56:37.377Z","1.2.6":"2025-05-24T16:03:15.078Z","1.2.7":"2025-05-24T16:07:35.693Z","1.2.8":"2025-05-24T16:30:25.774Z","1.2.9":"2025-05-24T16:59:16.472Z","1.2.10":"2025-05-24T17:05:18.623Z","1.2.11":"2025-05-24T17:24:19.228Z","1.2.12":"2025-05-25T00:30:39.476Z","1.2.13":"2025-05-25T02:11:29.627Z","1.2.14":"2025-05-25T02:34:55.582Z","1.2.15":"2025-05-25T03:43:13.266Z","1.2.16":"2025-05-25T03:50:27.981Z","1.2.17":"2025-05-25T03:58:19.629Z","1.2.18":"2025-05-26T03:02:50.367Z","1.2.19":"2025-05-26T22:06:49.847Z","1.2.20":"2025-05-26T22:21:54.050Z","1.2.21":"2025-05-26T23:42:14.314Z","1.2.22":"2025-05-27T00:53:14.333Z","1.2.23":"2025-05-27T14:12:15.746Z","1.2.24":"2025-05-27T14:37:51.327Z","1.2.25":"2025-05-27T14:49:03.749Z","1.2.26":"2025-05-27T15:11:51.910Z","1.2.27":"2025-05-27T15:45:20.844Z","1.2.28":"2025-05-27T16:58:35.442Z","1.2.29":"2025-05-27T17:05:09.622Z","1.2.30":"2025-05-27T18:20:19.065Z","1.2.31":"2025-05-27T18:25:05.135Z","1.2.32":"2025-05-27T18:28:15.339Z","1.2.33":"2025-05-27T18:46:06.367Z","1.2.34":"2025-05-28T19:10:44.006Z","1.2.35":"2025-05-28T19:23:19.710Z","1.2.36":"2025-05-28T19:27:57.024Z","1.2.37":"2025-05-29T16:10:16.494Z","1.2.38":"2025-05-29T16:26:47.690Z","1.2.39":"2025-05-29T17:04:19.058Z","1.2.40":"2025-05-29T17:33:31.184Z","1.2.41":"2025-05-29T19:23:22.575Z","1.2.42":"2025-05-29T20:07:50.675Z","1.2.43":"2025-05-29T20:20:09.587Z","1.2.44":"2025-05-29T21:19:03.957Z","1.2.45":"2025-05-29T21:52:59.856Z","1.2.46":"2025-05-29T22:00:46.670Z","1.3.0":"2025-05-30T15:55:37.710Z","1.2.47":"2025-05-30T17:09:19.034Z"},"bugs":{"url":"https://github.com/timothyfranzke/tcp-serial-relay/issues"},"author":{"name":"Your Name"},"license":"MIT","homepage":"https://github.com/timothyfranzke/tcp-serial-relay#readme","keywords":["tcp","serial","relay","logging","winston","modular","monitoring","industrial","automation","dashboard","web-ui","real-time"],"repository":{"type":"git","url":"git+https://github.com/timothyfranzke/tcp-serial-relay.git"},"description":"Modular TCP   to Serial relay service with comprehensive logging, monitoring and web dashboard","maintainers":[{"name":"timothyfranzke","email":"timothyfranzke@gmail.com"}],"readme":"# TCP-Serial Relay\n\nA modular TCP to Serial relay service with comprehensive logging, monitoring, and a web dashboard.\n\n## Features\n\n- **Bidirectional Relay**: Relay data between TCP and Serial connections\n- **Robust Error Handling**: Automatic reconnection and comprehensive error recovery\n- **Detailed Logging**: Configurable logging with rotation support\n- **Web Dashboard**: Modern Next.js dashboard for monitoring and configuration\n- **Command Line Interface**: Comprehensive CLI for service management\n- **Configurable**: Extensive configuration options via JSON file\n- **Health Monitoring**: Built-in health checks and status reporting\n\n## Installation\n\n```bash\n# Install globally\nnpm install -g tcp-serial-relay\n\n# Or install locally\nnpm install tcp-serial-relay\n```\n\n## Quick Start\n\n```bash\n# Start the relay service with dashboard\ntcp-serial-relay dashboard\n\n# Start the relay service only\ntcp-serial-relay start\n\n# View service status\ntcp-serial-relay status\n\n# View logs\ntcp-serial-relay logs\n```\n\n## Web Dashboard\n\nThe TCP-Serial Relay includes a modern Next.js dashboard for monitoring and configuring the service. The dashboard provides:\n\n- Real-time status monitoring\n- Configuration management\n- Log viewing\n- Service control (start/stop/restart)\n\n### Starting the Dashboard\n\n```bash\n# Start both the relay service and dashboard\ntcp-serial-relay dashboard\n\n# Start with custom port (default: 3000)\ntcp-serial-relay dashboard --port 8080\n\n# Start with custom configuration file\ntcp-serial-relay dashboard --config /path/to/config.json\n\n# Start in mock mode for testing\ntcp-serial-relay dashboard --mock\n```\n\n### Dashboard Features\n\n- **Status Tab**: View real-time connection status and metrics\n- **Configuration Tab**: Edit and manage relay configuration\n- **Logs Tab**: View service logs\n- **Control Tab**: Start, stop, and restart the relay service\n\n## Configuration\n\nThe relay service is configured using a JSON file located at `config/relay-config.json`. You can specify a custom configuration file using the `--config` option.\n\nExample configuration:\n\n```json\n{\n  \"tcpIp\": \"127.0.0.1\",\n  \"tcpPort\": 10002,\n  \"serialPath\": \"/dev/ttyUSB0\",\n  \"serialBaud\": 9600,\n  \"serialParity\": \"odd\",\n  \"serialDataBits\": 7,\n  \"serialStopBits\": 1,\n  \"maxRetries\": 3,\n  \"retryDelay\": 5000,\n  \"connectionTimeout\": 10000,\n  \"relayTimeout\": 30000,\n  \"logDataTransfers\": true,\n  \"logLevel\": \"info\"\n}\n```\n\n## CLI Commands\n\nThe TCP-Serial Relay provides a comprehensive command-line interface:\n\n```bash\nUsage: tcp-serial-relay [options] [command]\n\nOptions:\n  -V, --version                 output the version number\n  -h, --help                    display help for command\n\nCommands:\n  start [options]               Start the relay service\n  stop                          Stop the relay service\n  status                        Check service status\n  setup [options]               Setup service on Raspberry Pi\n  health [options]              Run health check\n  list-ports                    List available serial ports\n  config [options]              Manage configuration\n  logs [options]                View service logs\n  update [options]              Check for updates\n  dashboard [options]           Start the relay service with web dashboard\n  help [command]                display help for command\n```\n\n### Dashboard Command\n\n```bash\nUsage: tcp-serial-relay dashboard [options]\n\nStart the relay service with web dashboard\n\nOptions:\n  -c, --config <path>  Configuration file path\n  -p, --port <port>    Dashboard port (default: \"3000\")\n  --mock               Run in mock mode for testing\n  --debug              Enable debug logging\n  -h, --help           display help for command\n```\n\n## Development\n\n### Building the Dashboard\n\nThe dashboard is built using Next.js. To build the dashboard:\n\n```bash\n# Build the dashboard\nnpm run build:dashboard\n\n# Run the dashboard in development mode\nnpm run dev\n```\n\n### Project Structure\n\n- `/bin`: CLI entry point\n- `/config`: Configuration files\n- `/dashboard`: Next.js dashboard application\n- `/scripts`: Utility scripts\n- `/src`: Main application code\n- `/tests`: Test files\n\n## License\n\nMIT","readmeFilename":"README.md"}