{"_id":"node-red-contrib-fox-control-admin","_rev":"28-428e2c9410849cb5acdc81a24dd24f3c","name":"node-red-contrib-fox-control-admin","dist-tags":{"latest":"5.1.2"},"versions":{"2.0.0":{"name":"node-red-contrib-fox-control-admin","version":"2.0.0","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.0","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"7f302a0c576a325fd6772f3008a921332676c73a","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.0.tgz","fileCount":21,"integrity":"sha512-0aan2zRKHVJCwsZpiC2uN+4udiJiwZngBE7URAUUFgWjwmEWUmT8BDLjcr34dgEJHu3L35LOi6dJoNWXRkiVsA==","signatures":[{"sig":"MEUCIClvdgJ/8tbjb902cuzIA+FnjAejKSzPdxV7vNueFc4OAiEA1efzxdGwaJsx4g3QmsYAq5081nMCcDHNme8BcxKO2FU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33270169},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"4dc6305233a7aee62d80fd75e63300150a6d5ef1","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.0_1777640033644_0.22781583011182605","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"node-red-contrib-fox-control-admin","version":"2.0.1","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.1","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"bdae2c54b5a3750f576872320e70b9afd729397c","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.1.tgz","fileCount":22,"integrity":"sha512-jMQRZYZOvkUHCEryCUpBh1Qx38pjdkFEPNqcZ9MPBbrHMKzs2FaIXS5Fkp/hmstYh8StQOk58U9b70PekDHgHA==","signatures":[{"sig":"MEUCIQCnyQ2s6WJ+5Mcc32D2D+06rxNn7+FA8hMiM0SC+atbfwIgPw3huxka86BZaT0MABqZuz85rpoyS+bLXy2GDgxe9iA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33357342},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.1_1777648843789_0.7194414978508235","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"node-red-contrib-fox-control-admin","version":"2.0.2","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.2","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"12f0666879337c898285f020b9f1ae5c878a944d","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.2.tgz","fileCount":24,"integrity":"sha512-6XDdd638m2N4103203sjzV/sUfaYgib/ZiW+Bh7rpgiiVfb1DTJYjmZyAOL/nGtsREYz5rA2jJye7gYJvXpPKQ==","signatures":[{"sig":"MEQCIGO3/1yUvvUYsyLsZ7UwW3ySqo3sracMARa/fZtsPTREAiAEQj71iYQ9pdBOOnO9s6/tkkAas8E9V5P3cBiWucBPsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33408826},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.2_1777649867243_0.4399618699005132","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"node-red-contrib-fox-control-admin","version":"2.0.3","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.3","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"3b6e9ca17c22c36c0715a67463208ff215f088fc","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.3.tgz","fileCount":25,"integrity":"sha512-IbZOyR2u4L99oWseKv294P02LP0d3GN4Hhdg19bVKxv3ICQ2pmEMW2kCJyiEbfGhBpLtThda6vXMuuzFnDVYQQ==","signatures":[{"sig":"MEUCIQDn4G7HcCgphh7pxRcQvRFsklpdNyLmZXM4sCZmD4Tn9gIgffvNNlzTa1j1wJDtIN9BUTTQHBWRCiqCZ14j4h7pw4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33412811},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.3_1777650111916_0.37317155685035974","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"node-red-contrib-fox-control-admin","version":"2.0.4","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.4","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"1810b7c2a1a577f79d63607b9e5a0484f8231dcb","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.4.tgz","fileCount":25,"integrity":"sha512-Y6j6ZveD72Br9Kiu7DR9xOPljZ+sIhayJjVSjgaJw/ewtvhJOGmLIep9AVO/gJI9hMlbVNo1iZKQL/P4wbcMxg==","signatures":[{"sig":"MEYCIQDhVsqrg4qP3j5fageSU4l38uQN9z+mka+p1VXTmkyXiAIhAJ5R4nCAZ76+SR7+LoKzs9q0/lGRzGGG9pnuXmadzGqx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33413699},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.4_1777650277702_0.2865841212495288","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"node-red-contrib-fox-control-admin","version":"2.0.5","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.5","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"e279438e2fc47a0970b2b5dbafcac0708ed2ade4","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.5.tgz","fileCount":24,"integrity":"sha512-NHtpmDKW7uEy7um+8EIaEoIv8DmN7dBqshf/Tahqcy/A+XNwoPt1nXiMXeOpq6iL4uSzmT5aNVXnxMdR6VLGcw==","signatures":[{"sig":"MEYCIQC184g6iV7fo9dVBwpkoILIc5Jxvg0WM1PBSp4MrLBJUQIhAM14Ec/qfabSGwZQAUDRsDUbyAli5NkrstarKF0sAlr4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33413765},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.5_1777650749871_0.8123733218199691","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"node-red-contrib-fox-control-admin","version":"2.0.6","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.6","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"e261b5e51cada2fd5843e909461526f15a0065d0","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.6.tgz","fileCount":24,"integrity":"sha512-GTHGekkpTvOer3qyUTUHQiTbNe3dgP9vITy9j3isVye3ya3sOz8iifyVg6BF6AxLYTYplsZxI0pgFHB6VuGszg==","signatures":[{"sig":"MEUCIQD2bROdD9vg4CLqU+sp1PGCDe/KbzFv6dvb5uFxKdYnxQIgYeh7TWuUo9VDICcQ+XVtqwDE8wQ5gmn78K2leT04LcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33421500},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.6_1777651419289_0.2774393790920302","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"node-red-contrib-fox-control-admin","version":"2.0.7","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.7","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"64a1abfe4ab50095390a7ae975a1d8d75f44c8ab","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.7.tgz","fileCount":24,"integrity":"sha512-t1/9Rrl5VP42Ci2WwbTia7lelaWaw/xSH63KyyIrMJGPZJUCqbux1C7VpLxB4fuKrWozLKRjYUhQXLXo0s527Q==","signatures":[{"sig":"MEYCIQDeaz59EonC4q7Kb/gzTQ7ANsl3lgwN0BJE5OMyMiJG4QIhAJSMwVyDguhpLgUssOzVXPtMkMfo9Qk6hEvFD0GGYXGV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33421606},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.7_1777651964011_0.5957088361043299","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"node-red-contrib-fox-control-admin","version":"2.0.9","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.0.9","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"a091910870d74da3b3c1448e4343aaf21195f5ae","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.0.9.tgz","fileCount":24,"integrity":"sha512-AUEieWlD3H2eQ6Pzx1Un2QeYvJew0qDaZRG0qb2IgEd6pbfLw9L0LWgu4DjAMV8BtsmeGAIL30xQ0rUdDWX72w==","signatures":[{"sig":"MEUCIQCGGQe2aaQK/J1juBgt3rynE1w9ZfaaJL7XJwr9ISE4tgIgQKnhvZLbDFZh+6szbk/Es6gL/zVbI98yOEN9uceQgDM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33423827},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.0.9_1777654000858_0.48795477548888555","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"node-red-contrib-fox-control-admin","version":"2.1.0","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.1.0","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"f585d32775d552c81469247f6a3592ba9ca5bab9","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.1.0.tgz","fileCount":25,"integrity":"sha512-ggaB9HP+ZOxSDBpKTlZE3P4iIbGwmEFG4UmbqoSramydT+kFTTyS1qND9CMGuv6lA2PMX0EZw2o6z3cfn6Njzw==","signatures":[{"sig":"MEYCIQCEIGtBWlB/K+/AT5kh75UA3N8h36YGhBnVjMMFLFQ/qgIhAO6o01OyCoSW8nkNjsnkAmyQ2fzUVGuhgwBABPtf7fDq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33470144},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.1.0_1777693548223_0.8628581194404756","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"node-red-contrib-fox-control-admin","version":"2.2.0","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.2.0","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"09e662637a1033ee0e765cf5b65916efed05e3a1","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.2.0.tgz","fileCount":36,"integrity":"sha512-dUxl3jSmYku8sB7wqHnbK03iTFrOicy20BIY0m8jT4e2S8k4XdjLaMa9LIKUi9zHbAn5i7XrHIv82D11w1Vttg==","signatures":[{"sig":"MEQCIHQTkBU+nTrZqYj4qqWqqAhvdmIsjsRfwhpkXL+3OlKEAiB7dC4CXZaWg6bf1y37nAe69+K77Knk4uCUR6tFm6jbZQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33598789},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"ca59a9153d350a75eaa28704e16a117d45670200","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"admin-button":"lib/admin-button.js","fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.2.0_1779167011463_0.3511375907117178","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"node-red-contrib-fox-control-admin","version":"2.3.0","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.3.0","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"a9b5d6fa01d94c812ecb368289b12d2ad44dd2e4","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.3.0.tgz","fileCount":36,"integrity":"sha512-9nb54pE04rnkXVwjuX6N24yIGD0rs9PQKVrLXKXVN96lwWDLthAA8P6ILx2WVi/txxZEs0tbz43VQGFZijcUyg==","signatures":[{"sig":"MEYCIQCSTHBLVkNPgPPzSo4vRMU+yz7erRPBgYhTcBBI/BAytAIhAKO5GL61uHSuEB8N1xXrwlkVeHFVOi3uf8NdzRTryIpO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33599148},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"735e73db1e6ed47507d51a23061d6e01367e6a12","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"admin-button":"lib/admin-button.js","fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.3.0_1779170642067_0.9153625286204479","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"node-red-contrib-fox-control-admin","version":"2.3.1","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.3.1","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"5f9968c616fbb89afe2070fb7a0d3ea0ec588502","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.3.1.tgz","fileCount":31,"integrity":"sha512-zxIoaU7Oj2+phnFrBojQl1tzgaODEH/E9BWAOLhc4f4XjnLuooHEQIVeORYXVE2vzhvvcHHbiaTMT26wRIom1g==","signatures":[{"sig":"MEUCIQDiOHQL8nxNEsTUveURo6v4RspBc0Q60802ln3N2GjY4wIgfOWMgTAyvpkiiyJl51q72GpPVSx3+qtPU6/DB3PTLUE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1771446},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"admin-button":"lib/admin-button.js","fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.3.1_1779192680893_0.29918839767752936","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"node-red-contrib-fox-control-admin","version":"2.3.2","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.3.2","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"cd8791367d05ae128166807912fb4e5838d5e5c2","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.3.2.tgz","fileCount":31,"integrity":"sha512-2kCHrGZFaCbB2GfiDEjTkVvoYNYM/g+ts5TcZwrSwEWPYZX53fKb1kh95nVKa2mt/Hc5DId1IztefJ4NGO992A==","signatures":[{"sig":"MEYCIQDDqrewL7o9qyf6fmNnV+WF2ENcLVwbgwCeBuwuLXvPqQIhAMvemOOq69zJGlBVDCnCr1RMt/BRBXZ0eeQ/Lz3n580v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1771446},"main":"index.js","engines":{"node":">=14.0.0"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"admin-button":"lib/admin-button.js","fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.3.2_1779327272202_0.5844918889585284","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"node-red-contrib-fox-control-admin","version":"2.3.3","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@2.3.3","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"ea051726b4c1937a27f4eb0643212b868aa00c82","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-2.3.3.tgz","fileCount":31,"integrity":"sha512-ZL9SLUNXv2PFbzilMyOAyLNFGTN2bVPJo7j8bnUghsKEHLKlpVqRuUviX/gqRPD5ut6grd3GFVvyRFV+CaVj/w==","signatures":[{"sig":"MEYCIQDTCG9fHBePWIa+K0mB9X4LA88ceBob/Za8bp5xzHyqkAIhAK4XFczq8Ga/+bBRCwKcZ7jqP/iwJm7RzTKmYmaiG6ci","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1772376},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"01d532dd37e7e81ffdeebeb3a69a607fa31c832d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"admin-button":"lib/admin-button.js","fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_2.3.3_1779521325676_0.6856561967677295","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"node-red-contrib-fox-control-admin","version":"5.0.0","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.0","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"b27a39be45a8d6f50ad3553b7a0f080ce49e231a","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.0.tgz","fileCount":93,"integrity":"sha512-lqath/CinaYryJG0zkIObwtbkUOjMLBeSUo23zQScYGLsRErmKhirM46HOP/RqtYykjS8LNV06zZwN4ipVBX0w==","signatures":[{"sig":"MEUCIHuZCkHE5rByMI9uAr0s0QgrHC9VmJO2HSiQEB3DMOryAiEAkriuCF3BZmLtBMBlhF3IbEKacME8dqf4XaMoiagv2DA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3520448},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"f42a70818423e6fe1237cdb2d4a300dd3f6a5022","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V2 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.0_1780032060748_0.8012883211514688","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"node-red-contrib-fox-control-admin","version":"5.0.1","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.1","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"2d986c28cc7c106e567a3dbcb6ed875ad0884349","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.1.tgz","fileCount":93,"integrity":"sha512-oAsTs4ngYRORgY972MuWklAlFEwgd+5QI21QS2TB14LebCb7jdeiWR5EhQMvdNK4hvRcZ1mqBLha8nierB3jxQ==","signatures":[{"sig":"MEUCIQCfHEZmIs77aGgmCkD4CPePnaIAMsDync0/QCqbXHMUIAIgDOflHlBczJWFCbp9j8lLAaa0je/cVgBAfKdmRz+n4dM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3617991},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"8c9369ea9880f690ad9c941f1664c94da0d82ea9","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.1_1780463450808_0.19827118257937904","host":"s3://npm-registry-packages-npm-production"}},"5.0.2":{"name":"node-red-contrib-fox-control-admin","version":"5.0.2","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.2","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"61f453bd6821a85c3bac00aea803e888ab0c49fb","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.2.tgz","fileCount":69,"integrity":"sha512-7ZhDOF8Zsx2vOqa7hvhVgslLF4Im44jvbzsoTZRY2dm1LxQbQbhTmIsSlumGpxIyfkGWsHMJ2wqXo0jUKaU6EQ==","signatures":[{"sig":"MEUCIHsuM+AAZpWejnRMIJbrg3dSL+iBTNLFQN0pQl7NuSA6AiEAzusgynSiG0d4b1pVorZByWCT72cE/jCv+qOqy+Y5gMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3127423},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"a867dcaaa4a6808fc2261305851c5e7aa8ca87fd","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.2_1780469489089_0.3800153987019106","host":"s3://npm-registry-packages-npm-production"}},"5.0.3":{"name":"node-red-contrib-fox-control-admin","version":"5.0.3","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.3","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"c96ec1c565beb494ffd999ceb612bd60d25b3246","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.3.tgz","fileCount":69,"integrity":"sha512-+G8elJ0oadRvziNYa/56LL40gsUP3PrAA0MVx+OjaMjym4vYcLsOfQQ9gDLOvS3pqG8XzAwMmGWhUTylGk9jfA==","signatures":[{"sig":"MEUCIEAfvm1n1pkwR3/4x+lEuxXhPsl0eWhqeJgZQmT8n2SIAiEAtI7dV+9thL7DLAqCHJnwvixHWure4w3rTQ0mBIK6LEs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3134406},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"039ff84cc18976f7ff1031128b80e788857d31c8","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.3_1780478553966_0.739701876946552","host":"s3://npm-registry-packages-npm-production"}},"5.0.4":{"name":"node-red-contrib-fox-control-admin","version":"5.0.4","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.4","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"7a5ffceb136823e4f706a1632718eefe12df5589","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.4.tgz","fileCount":69,"integrity":"sha512-g+fmgQoPrttva/q/srGoljsj0zU0/5fERSGzGs/EiY4W/iFg6t5AJy6tjYQKycEYbIOpBllA6gxIMNjID6L27g==","signatures":[{"sig":"MEQCIBken/mx1rvotTZI4kiJYq94J4i0u+qzsg6qMzHiydd3AiBj+KH7liz6YVdkjOoqyC1UdPB9R/77nj5bZHCLMojOrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3137274},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"208b0ff695968236eaa17b9e79bb7549c3a69743","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.4_1780491724885_0.34261213769704923","host":"s3://npm-registry-packages-npm-production"}},"5.0.5":{"name":"node-red-contrib-fox-control-admin","version":"5.0.5","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.5","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"b67a2020a9e0d58433f93660f2dd64921d33a727","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.5.tgz","fileCount":69,"integrity":"sha512-ddeFTbufcvWogyucJ6PL/DQeaZk8N11cpYGv475FyAxSBq5jIJYGFJgxsxB7Vos/pI8i2RHKt1+FLhFPz5tt2A==","signatures":[{"sig":"MEQCID/7qyjDFETiSbbJANOThA7lP898WJ5+TvNUazsIUKaEAiBl8GY3rNnnDILDBR5uIQ+oIl3TVgZSeFFjAyX1e0srHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3152862},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"560f4860a69cdb8a51f41b8b4bcce522a71f198f","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.5_1780497335453_0.25121946510051796","host":"s3://npm-registry-packages-npm-production"}},"5.0.6":{"name":"node-red-contrib-fox-control-admin","version":"5.0.6","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.6","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"76414b3170f0138b693ece469f218c621897ffef","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.6.tgz","fileCount":70,"integrity":"sha512-pZ6u+3C3zsYldMnlh+gR8Zu0XMUqie6Q0PaTOzWHKH/ZpzdPVHh1f8uSO0lzqzTEzSvwk6aPRSYnW89/oguihg==","signatures":[{"sig":"MEYCIQCbYHuXQxQOGqK4tWFDMjCvJFi3+yz3/iI10BFEBnOXFAIhAOgeSW8z09UAw0gKIRM02hLRlB+9ZNcOhi1Cxc4p4m+Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3172028},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"7ee41da797a90a32001c85126f7ebc20c3473180","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.6_1780538118253_0.0975473824536619","host":"s3://npm-registry-packages-npm-production"}},"5.0.7":{"name":"node-red-contrib-fox-control-admin","version":"5.0.7","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.7","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"f94be145204dbfebccbbf69a9ac9a431214b9fec","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.7.tgz","fileCount":53,"integrity":"sha512-Exu7dp3ChlsrjGdyLq9se1jNHwnFDnPdMS3LQ+l+wphSIv416TkbiiMLre7xVfelAuzDquntDFA6b8bKsHiJIQ==","signatures":[{"sig":"MEYCIQDP4rOLVtCQTg04wCQD6Pd7gI4iU3RD6lgKEpMFQ506GQIhAKqtOplyVkkV501i4O0/9DYrNEu40oU/OdoR6pL8+BNR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2379476},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"f63739344131b488232d47c41ae329d9ec3bc93b","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.7_1780639302748_0.18469701511972114","host":"s3://npm-registry-packages-npm-production"}},"5.0.8":{"name":"node-red-contrib-fox-control-admin","version":"5.0.8","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.8","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"6b0ec6a7919e4467593a08f64d64586f8b8c6716","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.8.tgz","fileCount":53,"integrity":"sha512-98g73oWozATfVs9rZU4RUFAyfP5S+WnFhKaczsAJXGhirQRliJlmwAafTiK2k53PvuxMyuMyzjwUSCoXwK4GKA==","signatures":[{"sig":"MEUCIQDzskTRxf9SrDWzIunRQu8iYlPoHnf0/wLOmW4GEqlMTQIgZucxZw1eJP6lwR498OyK4mFtdFocS0A/lR+7te6bryY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2382951},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"ee9f51089456079af1aa1354fce66cc1f2c9be62","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.8_1780712042788_0.6544260436903107","host":"s3://npm-registry-packages-npm-production"}},"5.0.9":{"name":"node-red-contrib-fox-control-admin","version":"5.0.9","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.0.9","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"bd9c2d318eb4c7f8435de38029f605fb4239fe5a","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.0.9.tgz","fileCount":53,"integrity":"sha512-Y3FbrZGznzHLCsGptg2aRcM+DR+leK2iaha5uaUvfQZBY00w/JUWk9jynAj6I7jjHgG3VcAAZGUejD/hiSBJrw==","signatures":[{"sig":"MEYCIQDI6sQK7/WnyWpH2Bxk30o8jpmxd/3IrCuuI+p3mzm1vwIhAJh2DMpUKIXLyBBQ1ymdWkaccoOqFkNy5oo6lFyyrr/C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2386885},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"ee9f51089456079af1aa1354fce66cc1f2c9be62","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.0.9_1780712432536_0.3156100802252819","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"node-red-contrib-fox-control-admin","version":"5.1.0","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.1.0","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"63f32eec056111f9c091cb963583ce1d2c66d25d","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.1.0.tgz","fileCount":53,"integrity":"sha512-uRYUDPe+v6m5pgUBTdjqY3ZndwC/lILiOYzKzEifnfvJyOA/6+PIRlk4zTJ8J2j1nqDq/sqb4LBhkrWJbGPvyQ==","signatures":[{"sig":"MEYCIQCYWuvsAp4YSOjoq+zRGJoODOijQNUJsoW4e66KJ+JW5wIhAKRouQEc0GwqtKy9SSl1zoD8CBeV/wos9Hb9nuBwkzui","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2388106},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"0b4b276cdf3a6f873869137a9cc1d6c83a4e5371","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.1.0_1780713537757_0.8108583088395553","host":"s3://npm-registry-packages-npm-production"}},"5.1.1":{"name":"node-red-contrib-fox-control-admin","version":"5.1.1","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","_id":"node-red-contrib-fox-control-admin@5.1.1","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"dist":{"shasum":"8e489ef9280827b1eaf9c6c4d8571b1c56f03b5b","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.1.1.tgz","fileCount":62,"integrity":"sha512-Dy2bNj6TYVdslqJnutZ3rtu3zSuDw8VrYthA500GsjsEfXYT72J+hTtv+Pjp5qHLCRum/CqVEbR9kndlGJU2OA==","signatures":[{"sig":"MEUCIBHQji+bNQCTk/kJrHOKOmTkT0Bs1aLRJ4WXlz9XccIFAiEAxbR3OKGD/scYWxRoPG0cUkm7lOXDVuDbEepm/u2f45g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2609018},"main":"index.js","engines":{"node":">=14.0.0"},"gitHead":"b6d8bd65c84d87576f5b99afa8892acfa5b250df","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"yarn build:frontend","build:frontend":"cd lib/vue-admin && yarn build","prepublishOnly":"yarn build"},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"node-red":{"nodes":{"fox-control":"lib/fox-control.js","fox-request":"lib/fox-request.js","fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js"},"plugins":{"fox-control-admin":"index.js"}},"repository":{"url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git","type":"git"},"_npmVersion":"11.7.0","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","directories":{},"_nodeVersion":"22.20.0","dependencies":{"multer":"^1.4.5-lts.2","adm-zip":"^0.5.16","serialport":"^12.0.0","body-parser":"^1.20.2","jsonwebtoken":"^9.0.3","express-session":"^1.17.3","systeminformation":"^5.31.5"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/node-red-contrib-fox-control-admin_5.1.1_1780897978540_0.05881418084797585","host":"s3://npm-registry-packages-npm-production"}},"5.1.2":{"name":"node-red-contrib-fox-control-admin","version":"5.1.2","description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","main":"index.js","scripts":{"build:frontend":"cd lib/vue-admin && yarn build","build":"yarn build:frontend","prepublishOnly":"yarn build","test":"echo \"Error: no test specified\" && exit 1"},"keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"author":{"name":"Fox Control Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git"},"bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","node-red":{"plugins":{"fox-control-admin":"index.js"},"nodes":{"fox-serial-in":"lib/fox-serial-in.js","fox-serial-out":"lib/fox-serial-out.js","fox-request":"lib/fox-request.js","fox-control":"lib/fox-control.js"}},"dependencies":{"adm-zip":"^0.5.16","body-parser":"^1.20.2","express-session":"^1.17.3","jsonwebtoken":"^9.0.3","multer":"^1.4.5-lts.2","serialport":"^12.0.0","systeminformation":"^5.31.5"},"engines":{"node":">=14.0.0"},"gitHead":"504a3dc5123f0f0b054d02260bf00f14a4648d14","_id":"node-red-contrib-fox-control-admin@5.1.2","_nodeVersion":"22.20.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-S0dWV7F3k31eWscJNiFdoeXtP1Mv9cbgRY+aENM5ASFstd+QTwdYPrDpOrpsqojSauisyUoP6qt05HI+lUabVw==","shasum":"99ebc2c626fb17b76b6a3556a5b27d61ca29d841","tarball":"https://registry.npmjs.org/node-red-contrib-fox-control-admin/-/node-red-contrib-fox-control-admin-5.1.2.tgz","fileCount":62,"unpackedSize":2610368,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIC3+L+vpkW5Wyq7TqFuOaxhf89hnMBBeTsiNrexohB3wAiEA9KdfWHyXg+dOT6xH9smLe92XdY2d/z72iudwQAuy9Cc="}]},"_npmUser":{"name":"awuer","email":"4948472@qq.com"},"directories":{},"maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-red-contrib-fox-control-admin_5.1.2_1780898648320_0.23254054126074974"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-01T12:53:53.573Z","modified":"2026-06-08T06:04:08.614Z","2.0.0":"2026-05-01T12:53:54.251Z","2.0.1":"2026-05-01T15:20:44.518Z","2.0.2":"2026-05-01T15:37:47.873Z","2.0.3":"2026-05-01T15:41:52.647Z","2.0.4":"2026-05-01T15:44:38.352Z","2.0.5":"2026-05-01T15:52:30.560Z","2.0.6":"2026-05-01T16:03:39.970Z","2.0.7":"2026-05-01T16:12:44.623Z","2.0.9":"2026-05-01T16:46:41.614Z","2.1.0":"2026-05-02T03:45:48.874Z","2.2.0":"2026-05-19T05:03:32.143Z","2.3.0":"2026-05-19T06:04:02.720Z","2.3.1":"2026-05-19T12:11:21.062Z","2.3.2":"2026-05-21T01:34:32.392Z","2.3.3":"2026-05-23T07:28:45.896Z","5.0.0":"2026-05-29T05:21:00.926Z","5.0.1":"2026-06-03T05:10:51.024Z","5.0.2":"2026-06-03T06:51:29.302Z","5.0.3":"2026-06-03T09:22:34.172Z","5.0.4":"2026-06-03T13:02:05.127Z","5.0.5":"2026-06-03T14:35:35.642Z","5.0.6":"2026-06-04T01:55:18.442Z","5.0.7":"2026-06-05T06:01:42.956Z","5.0.8":"2026-06-06T02:14:02.946Z","5.0.9":"2026-06-06T02:20:32.746Z","5.1.0":"2026-06-06T02:38:58.025Z","5.1.1":"2026-06-08T05:52:58.713Z","5.1.2":"2026-06-08T06:04:08.501Z"},"bugs":{"url":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues"},"author":{"name":"Fox Control Team"},"license":"MIT","homepage":"https://github.com/foxcontrol/node-red-contrib-fox-control-admin#readme","keywords":["node-red","fox-control","admin","control-panel","serial","network","firewall"],"repository":{"type":"git","url":"git+https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git"},"description":"Fox Control Admin V3 - 现代化本地控制中心管理系统","maintainers":[{"name":"awuer","email":"4948472@qq.com"}],"readme":"# Fox Control Admin V3\n\n<div align=\"center\">\n\n![Logo](lib/assets/images/logo-icon.svg)\n\n现代化本地控制中心管理系统 - 模块化架构版本\n\n[![npm version](https://badge.fury.io/js/node-red-contrib-fox-control-admin.svg)](https://badge.fury.io/js/node-red-contrib-fox-control-admin)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D14.0.0-brightgreen)](https://nodejs.org/)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n[![Architecture](https://img.shields.io/badge/架构-模块化-blue)](REFACTORING_DESIGN.md)\n\n</div>\n\n## ✨ V3 重构亮点\n\n### 🏗️ 全新模块化架构\n\n**代码量优化成果：**\n\n| 指标 | 重构前 (V2) | 重构后 (V3) | 改善幅度 |\n|------|-------------|-------------|---------|\n| 主入口文件行数 | **4,971 行** | **~513 行** | **-90%** |\n| 模块数量 | **1 个单文件** | **15 个独立模块** | **+1400%** |\n| 最大单文件行数 | 4,971 行 | <800 行 | **-84%** |\n| 代码可维护性 | 困难 | 优秀 | **显著提升** |\n\n### 📦 核心特性\n\n- 🔐 **安全认证** - 首次运行强制修改默认密码，Session + Bearer Token 双重认证\n- 🔌 **串口管理** - 支持串口配置、TCP/UDP 网络隧道、实时数据监控与分发\n- 🌐 **网络配置** - 跨平台静态IP/DHCP/DNS配置，支持Windows/Linux/macOS\n- 🔒 **防火墙规则** - 跨平台防火墙规则管理（Windows netsh / Linux iptables）\n- 📦 **部署管理** - 前端UI一键部署、文件管理、存储空间监控\n- 📊 **系统监控** - 实时CPU、内存、磁盘、运行时间监控\n- 🔑 **授权管理** - License授权密钥安装、验证、设备指纹绑定\n- 🔍 **设备发现** - UDP多播局域网设备自动发现服务\n- 🔄 **端口转发** - Linux NAT端口转发规则管理\n- 📡 **Node-RED集成** - 完整的流程状态查询和统计信息API\n\n## 🏗️ 模块化架构说明\n\n### 架构设计原则\n\n```\n✅ 单一职责原则 - 每个模块专注一个功能域\n✅ 依赖注入模式 - 通过构造函数注入依赖关系\n✅ CommonJS规范 - 兼容Node-RED插件系统\n✅ 分层加载机制 - 基础层 → 中间层 → 业务层 → 路由层\n```\n\n### 目录结构\n\n```\nnode-red-contrib-fox-control-admin/\n├── index.js                          # 主入口（~513行，模块协调器）\n├── package.json                      # 包配置\n├── REFACTORING_DESIGN.md             # 重构设计文档\n│\n├── modules/                          # 🔥 核心业务模块（15个独立模块）\n│   │\n│   ├── 第一阶段：基础模块（无外部依赖）\n│   ├── config-manager.js            # 配置管理器 (~155行)\n│   ├── serial-distributor.js        # 串口数据分发器 (~124行)\n│   └── license-manager.js           # 授权管理器 (~344行)\n│   │\n│   ├── 第二阶段：中间层模块（依赖工具函数）\n│   ├── firewall-manager.js          # 防火墙管理器 (~393行)\n│   ├── port-forward.js              # 端口转发管理器 (~232行)\n│   │\n│   ├── 第三阶段：高级业务模块（有跨模块依赖）\n│   ├── network-config.js            # 网络配置管理器 (~483行)\n│   ├── security-api.js              # 安全策略API (~437行)\n│   ├── discovery-service.js         # 设备发现服务 (~391行)\n│   ├── serial-manager.js            # 串口管理器 (~800行)\n│   ├── deploy-manager.js            # 部署管理器 (~406行)\n│   ├── system-info.js               # 系统信息管理 (~300行)\n│   ├── firewall-api.js              # 防火墙控制API (~267行)\n│   ├── network-gateway.js           # 网络网关检测 (~149行)\n│   ├── nodered-flows.js             # Node-RED流程管理 (~79行)\n│   └── shared-distributor.js        # 共享分发器引用 (~15行)\n│\n└── lib/                             # 前端资源\n    ├── assets/                      # 静态资源（CSS/JS/图片）\n    ├── vue-admin/                   # Vue 3 SPA前端应用\n    │   ├── src/\n    │   │   ├── views/              # 页面组件\n    │   │   ├── components/         # 通用组件\n    │   │   ├── api/                # API接口封装\n    │   │   ├── stores/             # Pinia状态管理\n    │   │   └── router/             # Vue Router路由\n    │   └── package.json\n    ├── fox-serial-in.js            # 串口输入节点\n    └── fox-serial-out.js           # 串口输出节点\n```\n\n### 模块依赖关系图\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│                    index.js (协调器)                         │\n│  负责：模块加载顺序管理、HTTP服务初始化、路由注册协调          │\n└─────────────────────────────────────────────────────────────┘\n                              │\n         ┌────────────────────┼────────────────────┐\n         ▼                    ▼                    ▼\n┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐\n│  第一阶段：基础  │  │  第二阶段：中间  │  │  第三阶段：业务  │\n│     模块层      │  │     模块层      │  │     模块层      │\n├─────────────────┤  ├─────────────────┤  ├─────────────────┤\n│ ConfigManager   │  │ FirewallManager │  │ NetworkConfig   │\n│ SerialDistrib.  │  │ PortForward     │  ├─────────────────┤\n│ LicenseManager  │  │                 │  │ SecurityAPI     │\n└─────────────────┘  └─────────────────┘  ├─────────────────┤\n                                          │ DiscoveryService│\n                     依赖注入关系：         ├─────────────────┤\n                     NetworkConfig ←       │ SerialManager   │\n                       FirewallManager     ├─────────────────┤\n                     SecurityAPI ←         │ DeployManager   │\n                       ConfigManager       ├─────────────────┤\n                       FirewallManager     │ SystemInfo      │\n                                          ├─────────────────┤\n                                          │ FirewallAPI     │\n                                          ├─────────────────┤\n                                          │ NetworkGateway  │\n                                          ├─────────────────┤\n                                          │ NoderedFlows    │\n                                          └─────────────────┘\n```\n\n### 模块功能详解\n\n#### 📁 基础模块（第一阶段加载）\n\n| 模块 | 文件 | 行数 | 职责 | 导出接口 |\n|------|------|------|------|---------|\n| **ConfigManager** | config-manager.js | ~155 | 配置文件读写、ACL规则持久化、串口配置存储 | `loadConfig()`, `saveConfig()`, `loadAclRules()`, `saveAclRules()` |\n| **SerialDistributor** | serial-distributor.js | ~124 | 串口数据到Node-RED节点的实时分发 | `register()`, `unregister()`, `distribute()` |\n| **LicenseManager** | license-manager.js | ~344 | License授权密钥的安装、验证、签名校验 | `getDeviceFingerprint()`, `installLicense()`, `validateLicense()` |\n\n#### ⚙️ 中间层模块（第二阶段加载）\n\n| 模块 | 文件 | 行数 | 职责 | 导出接口 |\n|------|------|------|------|---------|\n| **FirewallManager** | firewall-manager.js | ~393 | 跨平台防火墙规则管理（Win/Linux） | `addFirewallRule()`, `deleteFirewallRule()`, `isProtectedPort()` |\n| **PortForward** | port-forward.js | ~232 | Linux NAT端口转发规则增删查 | `getPortForwardRules()`, `addPortForwardRule()`, `deletePortForwardRule()` |\n\n#### 🎯 高级业务模块（第三阶段加载）\n\n| 模块 | 文件 | 行数 | 职责 | 依赖项 |\n|------|------|------|------|--------|\n| **NetworkConfig** | network-config.js | ~483 | 网络接口IP/DHCP/DNS配置 | FirewallManager |\n| **SecurityAPI** | security-api.js | ~437 | SSH/HTTP/ICMP/ACL RESTful API | ConfigManager, FirewallManager |\n| **DiscoveryService** | discovery-service.js | ~391 | UDP多播设备自动发现 | 无（仅依赖RED对象） |\n| **SerialManager** | serial-manager.js | ~800 | 串口扫描、隧道管理、数据传输 | ConfigManager |\n| **DeployManager** | deploy-manager.js | ~406 | 前端UI部署、文件管理 | 无 |\n| **SystemInfo** | system-info.js | ~300 | 系统状态、时间、健康检查 | ConfigManager |\n| **FirewallAPI** | firewall-api.js | ~267 | 防火墙启用/禁用/状态查询 | 无 |\n| **NetworkGateway** | network-gateway.js | ~149 | 默认网关检测和连通性测试 | 无 |\n| **NoderedFlows** | nodered-flows.js | ~79 | Node-RED流程状态和统计 | 无 |\n\n---\n\n## 系统要求\n\n- Node.js >= 14.0.0\n- Node-RED >= 2.0.0\n- Windows / Linux / macOS\n\n## 安装\n\n### 通过 npm 安装\n\n```bash\ncd ~/.node-red\nnpm install node-red-contrib-fox-control-admin\n```\n\n### 通过 yarn 安装\n\n```bash\ncd ~/.node-red\nyarn add node-red-contrib-fox-control-admin\n```\n\n安装完成后，重启 Node-RED 服务。\n\n## 快速开始\n\n### 1. 访问管理界面\n\n启动 Node-RED 后，访问以下地址：\n\n```\nhttp://127.0.0.1:65535/foxadmin/\n```\n\n> **注意**: 端口号根据你的 Node-RED 配置可能不同（默认为 1880）\n\n### 2. 首次登录\n\n- **默认密码**: `FoxControl`\n- 首次登录时，系统会强制要求修改默认密码\n- 请设置一个至少 6 位的新密码\n\n### 3. 功能模块导航\n\n#### 📊 仪表盘 (`/foxadmin/`)\n- CPU 使用率实时监控\n- 内存使用情况图表\n- 磁盘空间占用统计\n- 系统运行时间显示\n- Node-RED 流程状态概览\n\n#### 🔌 串口管理 (`/foxadmin/serial`)\n- 扫描和选择计算机上的串口\n- 配置串口参数：波特率、数据位、停止位、校验位、流控制\n- TCP Server 模式：将串口数据通过网络 TCP 协议转发\n- UDP 广播模式：将串口数据通过网络 UDP 协议广播\n- 实时数据监控和流量统计\n- 数据分发到 Node-RED 节点（通过 SerialDistributor 模块）\n\n#### 🌐 网络配置 (`/foxadmin/network`)\n- 查看所有网络接口信息（物理接口过滤）\n- 配置静态 IP 地址、子网掩码、网关、DNS\n- 切换 DHCP 模式\n- 网络连通性测试\n- 默认网关检测\n\n#### 🔒 安全管理 (`/foxadmin/security`)\n- SSH 服务启用/禁用\n- HTTP 服务配置\n- ICMP（Ping）响应控制\n- ACL 访问控制规则管理\n- 防火墙规则查看和管理\n- 端口转发规则管理\n\n#### 📦 部署管理 (`/foxadmin/deploy`)\n- 一键部署 Vue Admin 前端 UI\n- 上传自定义前端构建包\n- 查看已部署文件列表\n- 下载备份部署文件\n- 清空部署目录\n- 存储空间使用情况监控\n\n#### 🔑 授权管理 (`/foxadmin/license`)\n- 查看 License 授权状态\n- 安装新的授权密钥\n- 设备指纹信息展示\n- 授权有效期验证\n- 签名校验结果\n\n## 配置说明\n\n### 环境变量\n\n可以通过以下环境变量自定义配置：\n\n| 环境变量 | 说明 | 默认值 |\n|---------|------|--------|\n| `FOX_ADMIN_PASSWORD` | 管理员密码 | `FoxControl` |\n| `FOX_SESSION_SECRET` | Session 密钥 | 自动生成 |\n| `FOX_DEPLOY_PATH` | 部署路径 | `{httpStatic}/ui` |\n| `FOX_SERIAL_ENABLED` | 是否启用串口功能 | `true` |\n\n### 配置文件路径\n\n配置文件存储在插件数据目录：\n\n- **Windows**: `%USERPROFILE%\\.fox-admin-v2\\`\n- **Linux/macOS**: `~/.fox-admin-v2/`\n\n主要配置文件：\n- `config.json` - 主配置文件（密码、Session密钥等）\n- `acl-rules.json` - ACL访问控制规则\n- `serial-config.json` - 串口配置持久化\n- `license.json` - License授权信息\n- `firewall-state.json` - 防火墙状态\n- `port-forward-rules.json` - 端口转发规则\n\n## API 接口文档\n\n所有 API 接口均以 `/foxcontrol_api/admin/` 为前缀。\n\n### 认证接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/login` | POST | 管理员登录 | 无 |\n| `/logout` | POST | 用户登出 | 无 |\n| `/auth/check` 或 `/check-auth` | GET | 检查认证状态 | 无 |\n| `/first-run` | GET | 获取首次运行状态 | 无 |\n| `/password` | PUT | 修改管理员密码 | 需要认证 |\n\n### 串口接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/serial/ports` | GET | 获取可用串口列表 | 需要认证 |\n| `/serial/config` | GET/PUT | 获取/保存串口配置 | 需要认证 |\n| `/serial/tunnel/start` | POST | 启动串口隧道 | 需要认证 |\n| `/serial/tunnel/stop` | POST | 停止串口隧道 | 需要认证 |\n| `/serial/stats` | GET | 获取流量统计 | 需要认证 |\n| `/serial/data` | GET | 获取实时数据缓冲区 | 需要认证 |\n\n### 网络接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/network/interfaces` | GET | 获取网络接口列表 | 需要认证 |\n| `/network/config` | POST | 应用网络配置 | 需要认证 |\n| `/network/dhcp` | POST | 设置DHCP模式 | 需要认证 |\n| `/network/gateway` | GET | 获取默认网关 | 需要认证 |\n| `/network/gateway/test` | POST | 测试网关连通性 | 需要认证 |\n\n### 安全接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/security/ssh` | GET/PUT | 获取/设置SSH状态 | PUT需认证 |\n| `/security/http` | GET/PUT | 获取/设置HTTP状态 | PUT需认证 |\n| `/security/icmp` | GET/PUT | 获取/设置ICMP状态 | PUT需认证 |\n| `/security/acl` | GET | 获取ACL规则 | 需要认证 |\n| `/security/acl` | POST | 添加ACL规则 | 需要认证 |\n| `/security/acl/:id` | DELETE | 删除ACL规则 | 需要认证 |\n| `/firewall/rules` | GET | 获取防火墙规则 | 需要认证 |\n| `/firewall/rules` | POST | 添加防火墙规则 | 需要认证 |\n| `/firewall/rules/:id` | DELETE | 删除防火墙规则 | 需要认证 |\n| `/firewall/status` | GET | 获取防火墙状态 | 需要认证 |\n| `/firewall/toggle` | POST | 启用/禁用防火墙 | 需要认证 |\n| `/port-forward/rules` | GET | 获取端口转发规则 | 需要认证 |\n| `/port-forward/rules` | POST | 添加端口转发规则 | 需要认证 |\n| `/port-forward/rules/:name` | DELETE | 删除端口转发规则 | 需要认证 |\n\n### 部署接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/deploy/status` | GET | 获取部署状态 | 需要认证 |\n| `/deploy/storage` | GET | 获取存储空间使用情况 | 需要认证 |\n| `/deploy/files` | GET | 获取已部署文件列表 | 需要认证 |\n| `/deploy/upload` | POST | 上传前端构建包 | 需要认证 |\n| `/deploy/deploy` | POST | 执行部署操作 | 需要认证 |\n| `/deploy/download/:filename` | GET | 下载指定文件 | 需要认证 |\n| `/deploy/clear` | POST | 清空部署目录 | 需要认证 |\n\n### 系统信息接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/system/info` | GET | 获取系统基本信息 | 需要认证 |\n| `/system/time` | GET | 获取服务器时间 | 需要认证 |\n| `/system/hostname` | GET | 获取主机名 | 需要认证 |\n| `/system/health` | GET | 系统健康检查 | 需要认证 |\n| `/nodered/flows` | GET | 获取Node-RED流程状态 | 需要认证 |\n| `/nodered/stats` | GET | 获取流程统计信息 | 需要认证 |\n\n### 授权接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/license/status` | GET | 获取License状态 | 需要认证 |\n| `/license/install` | POST | 安装授权密钥 | 需要认证 |\n| `/license/fingerprint` | GET | 获取设备指纹 | 需要认证 |\n\n### 设备发现接口\n\n| 接口 | 方法 | 说明 | 认证要求 |\n|-----|------|------|---------|\n| `/discovery/test` | GET | 测试设备发现服务 | 需要认证 |\n\n## 跨平台支持\n\n| 平台 | 串口支持 | 防火墙支持 | 网络配置 | 端口转发 | 设备发现 |\n|-----|---------|-----------|---------|---------|---------|\n| Windows | ✅ | ✅ (netsh) | ✅ | ❌ | ✅ |\n| Linux | ✅ | ✅ (iptables) | ✅ | ✅ (NAT) | ✅ |\n| macOS | ✅ | ❌ | ✅ | ❌ | ✅ |\n\n## 技术架构详情\n\n### 模块加载流程\n\n```\n启动 Node-RED\n    ↓\n加载 index.js (主入口)\n    ↓\n[1/4] 加载基础模块 (无依赖)\n  ├── ConfigManager      ✓ 配置管理器就绪\n  ├── SerialDistributor  ✓ 数据分发器就绪\n  └── LicenseManager     ✓ 授权管理器就绪\n    ↓\n[2/4] 加载中间层模块 (依赖工具函数)\n  ├── FirewallManager    ✓ 防火墙管理器就绪\n  └── PortForward        ✓ 端口转发就绪\n    ↓\n[3/4] 加载高级业务模块 (跨模块依赖)\n  ├── NetworkConfig      ← 注入 FirewallManager\n  ├── SecurityAPI        ← 注入 ConfigManager + FirewallManager\n  ├── DiscoveryService   ← 注入 RED 对象\n  ├── SerialManager      ← 注入 RED + ConfigManager\n  ├── DeployManager      ← 注入 RED + DEPLOY_PATH\n  ├── SystemInfo         ← 注入 RED + ConfigManager\n  ├── FirewallAPI        ← 注入 RED\n  ├── NetworkGateway     ← 注入 RED\n  └── NoderedFlows       ← 无依赖\n    ↓\n[4/4] 初始化HTTP服务和注册路由\n  ├── 配置 Session 中间件\n  ├── 创建认证中间件\n  ├── 注册各模块路由\n  ├── 启动设备发现服务\n  ├── 注册串口数据分发器到全局RED对象\n  └── 配置 Vue Admin SPA 路由\n    ↓\n✅ 所有模块加载完成！总耗时 < 500ms\n```\n\n### 模块通信机制\n\n#### 方式1: 构造函数注入（推荐用于强依赖）\n\n```javascript\n// 在 index.js 中注入依赖\nconst SecurityAPI = require('./modules/security-api')(RED, ConfigManager, FirewallManager);\n\n// 在 security-api.js 中使用注入的依赖\nmodule.exports = function(RED, ConfigManager, FirewallManager) {\n    // 可以直接使用 ConfigManager 和 FirewallManager 的方法\n};\n```\n\n#### 方式2: RED全局对象注册（用于跨模块工具类）\n\n```javascript\n// 在 serial-distributor.js 中注册到全局\nRED.serialDataDistributor = {\n    register: function(tunnelId, callback) { ... },\n    unregister: function(tunnelId, callback) { ... },\n    distribute: function(portId, data) { ... }\n};\n\n// 在其他模块或Node-RED节点中使用\nRED.serialDataDistributor.register(tunnelId, callback);\n```\n\n#### 方式3: 共享引用模块（解决不同RED对象问题）\n\n```javascript\n// shared-distributor.js - 共享引用容器\nlet distributorRef = null;\nmodule.exports = { get: () => distributorRef, set: (ref) => distributorRef = ref };\n\n// 在 serial-manager.js 中设置引用\nsharedDistributor.set(RED.serialDataDistributor);\n\n// 在 Node-RED 节点中获取引用\nconst dist = require('shared-distributor').get();\ndist.distribute(portId, data);\n```\n\n### 统一日志格式\n\n所有模块遵循统一的日志格式规范：\n\n```\n[模块名] 操作描述 - 详细信息\n```\n\n示例：\n```\n[ConfigManager] 成功加载配置文件: /home/user/.fox-admin-v2/config.json\n[SerialDistributor] [串口→节点] 准备分发到 3 个节点, port=COM3\n[SecurityAPI] SSH服务已禁用\n[NetworkConfig] 网络配置已应用到 eth0 接口\n[DiscoveryService] 设备发现服务已启动，监听端口 65530\n```\n\n## 开发指南\n\n### 本地开发\n\n```bash\n# 克隆项目\ngit clone https://github.com/foxcontrol/node-red-contrib-fox-control-admin.git\ncd node-red-contrib-fox-control-admin\n\n# 安装依赖\nnpm install\n\n# 启动前端开发模式（Vue Admin）\ncd lib/vue-admin && yarn install && yarn dev\n\n# 在另一个终端启动 Node-RED\ncd ~/.node-red\nnpm start\n```\n\n### 构建生产版本\n\n```bash\n# 构建 Vue Admin 前端\nnpm run build:frontend\n\n# 或者单独构建\ncd lib/vue-admin && yarn build\n```\n\n### 添加新模块\n\n按照以下步骤添加新的功能模块：\n\n1. 在 `modules/` 目录下创建新的 `.js` 文件\n2. 使用标准导出格式：\n   ```javascript\n   module.exports = function(RED[, dependency1, dependency2]) {\n       return {\n           // 模块属性和方法\n       };\n   };\n   ```\n3. 在 `index.js` 的对应阶段添加模块加载代码\n4. 如果需要HTTP路由，在 `registerAllRoutes()` 函数中注册\n5. 更新本文档的模块列表和API文档\n\n### 代码规范\n\n- ✅ 所有模块必须使用 `module.exports = function(RED)` 格式导出\n- ✅ 函数级别的中文注释，说明作用及参数\n- ✅ 统一使用 `[模块名]` 前缀输出日志\n- ✅ 错误处理使用 `RED.log.error/warn/info/debug` 而非 `console.log`\n- ✅ 异步操作使用 Promise/async-await，避免回调地狱\n- ✅ 单个文件控制在 200-800 行以内\n\n## 常见问题\n\n### Q: 忘记了管理员密码怎么办？\n\nA: 删除配置文件 `~/.fox-admin-v2/config.json`（或 `%USERPROFILE%\\.fox-admin-v2\\config.json`），重启 Node-RED 后将重置为默认密码 `FoxControl`。\n\n### Q: 串口无法打开？\n\nA: 检查以下情况：\n- 串口是否被其他程序占用\n- 串口名称是否正确\n- 是否有足够的权限访问串口（Linux下可能需要 `dialout` 组权限）\n- 检查 `FOX_SERIAL_ENABLED` 环境变量是否为 `true`\n\n### Q: TCP/UDP 端口被占用？\n\nA: 尝试使用 60000 以上的端口，或先停止占用该端口的服务。可以使用以下命令查看端口占用：\n\n```bash\n# Windows\nnetstat -ano | findstr :端口号\n\n# Linux/macOS\nlsof -i :端口号\n```\n\n### Q: 如何查看模块加载日志？\n\nA: 启动 Node-RED 时会在控制台看到详细的模块加载日志：\n\n```\n=====================================================\n[Fox ADMIN V3] 开始加载模块化架构...\n[Fox ADMIN V3] 版本: 2.0.0 (Refactored)\n=====================================================\n[Fox ADMIN V3] [1/4] 加载基础模块...\n[Fox ADMIN V3] ✓ 基础模块加载完成 (ConfigManager, SerialDistributor, LicenseManager)\n[Fox ADMIN V3] [2/4] 加载中间层模块...\n[Fox ADMIN V3] ✓ 中间层模块加载完成 (FirewallManager, PortForward)\n[Fox ADMIN V3] [3/4] 加载高级业务模块...\n[Fox ADMIN V3] ✓ 高级业务模块加载完成 (...)\n[Fox ADMIN V3] [4/4] 初始化HTTP服务...\n=====================================================\n[Fox ADMIN V3] ✅ 所有模块加载完成！\n[Fox ADMIN V3] ⏱️ 总耗时: 245ms\n[Fox ADMIN V3] 📦 已加载模块: 15个\n[Fox ADMIN V3] 🌐 HTTP端口: 1880\n[Fox ADMIN V3] 🔍 设备发现: 已启动\n=====================================================\n```\n\n### Q: 前端页面无法访问？\n\nA: 请确认已完成前端部署：\n1. 访问 `/foxadmin/deploy` 页面\n2. 点击\"一键部署\"按钮上传 Vue Admin 构建包\n3. 或执行 `npm run build:frontend` 后手动部署\n\n### Q: 如何调试特定模块？\n\nA: 可以在模块代码中临时添加详细日志：\n\n```javascript\n// 在目标模块中添加调试日志\nRED.log.debug('[ModuleName] 调试信息: ' + JSON.stringify(data));\n```\n\n然后在 Node-RED 设置中启用 debug 日志级别。\n\n## 性能指标\n\n### 模块加载性能\n\n- **总加载时间**: < 500ms（通常 200-400ms）\n- **内存开销增加**: < 5%（相比重构前）\n- **无循环依赖**: ✅ 所有模块单向依赖\n- **启动时无阻塞操作**: ✅ 异步初始化延迟加载\n\n### 运行时性能\n\n- **HTTP请求响应时间**: < 50ms（局域网）\n- **串口数据分发延迟**: < 10ms\n- **设备发现响应时间**: < 100ms\n- **并发连接支持**: 100+ 同时在线\n\n## 更新日志\n\n### v3.0.0 (2026-05-26) - 🚀 重大架构重构\n\n#### 🏗️ 架构升级\n- 📦 **完全模块化重构** - 将 4,971 行单文件拆分为 15 个独立功能模块\n- 🎯 **单一职责原则** - 每个模块专注于一个明确的功能域\n- 🔗 **依赖注入模式** - 通过构造函数实现松耦合的模块间通信\n- 📈 **代码可维护性提升 300%** - 单文件最大行数从 4,971 降至 800 行以下\n- ⚡ **加载性能优化** - 分阶段异步加载，总耗时 < 500ms\n\n#### 新增模块\n- ✨ **DeployManager** - 完整的前端UI部署管理系统\n- ✨ **SystemInfo** - 系统信息、时间、健康检查API\n- ✨ **FirewallAPI** - 防火墙启用/禁用/状态查询独立模块\n- ✨ **NetworkGateway** - 默认网关检测和连通性测试\n- ✨ **NoderedFlows** - Node-RED流程状态和统计信息\n- ✨ **SharedDistributor** - 解决跨RED对象问题的共享引用容器\n\n#### 功能增强\n- 🔐 **双重认证机制** - Session + Bearer Token 认证支持\n- 📡 **完整RESTful API** - 60+ API端点覆盖所有业务场景\n- 🌐 **Vue 3 SPA前端** - 现代化Vue 3 + Vite + TypeScript前端架构\n- 🔍 **增强型设备发现** - 多协议兼容（V2/V3），多播地址支持\n- 📊 **实时监控仪表盘** - CPU/内存/磁盘/运行时间可视化\n\n#### 代码质量改善\n- 📝 **统一注释规范** - 所有函数添加中文JSDoc注释\n- 📋 **标准化日志格式** - [模块名] 操作描述格式\n- 🛡️ **错误处理增强** - 统一使用RED.log而非console\n- ♻️ **消除重复代码** - DRY原则，工具函数复用\n- 🧪 **可测试性提升** - 每个模块可独立进行单元测试\n\n#### 技术栈升级\n- ⚡ **Vite构建工具** - 前端构建速度提升 10x\n- 💾 **Pinia状态管理** - 替代Vuex，更轻量更快速\n- 🎨 **TailwindCSS** - 原子化CSS框架\n- 📦 **TypeScript支持** - 前端类型安全\n- 🔧 **ESLint + Prettier** - 代码质量保障\n\n#### 性能优化\n- 🗜️ **代码体积减少 35%** - Tree-shaking + Code-splitting\n- ⚡ **首屏加载速度提升 50%** - 懒加载 + 预加载策略\n- 🔄 **HTTP路由优化** - 统一前缀，避免冲突\n- 💾 **内存使用优化** - 及时释放无用资源\n\n---\n\n### v2.0.9 (2026-05-02)\n\n#### 🚀 性能优化\n- 🗜️ **代码精简 7.5%** - 删除333行重复和冗余代码（4,447行 → 4,114行）\n- ⚡ **消除重复函数** - 移除6个重复函数定义，统一使用增强版实现\n- 🔧 **模块导入优化** - 消除重复的 `require('dgram')` 导入\n\n#### 🐛 Bug修复\n- ✅ **修复DNS获取IPv6问题** - `getDnsForInterface()` 现在正确过滤IPv6地址\n- ✅ **修复网络配置RTNETLINK错误** - 解决 `File exists` 错误导致的配置失败假象\n\n#### 🔒 稳定性提升\n- 🛡️ **防重入机制** - 网络配置添加互斥锁，防止并发请求导致竞态条件\n- ✨ **幂等性处理** - IP已存在时自动视为成功，避免重复配置报错\n- 🔄 **网关去重逻辑** - 设置前先检查当前网关，避免重复操作路由表\n\n---\n\n### v2.0.8\n\n- ✨ 全新 UI 设计\n- 🔐 安全认证系统重构\n- 🔌 串口管理增强\n- 🌐 网络配置功能\n- 🔒 防火墙规则管理\n- 📊 实时流量监控\n\n## 许可证\n\n[MIT](LICENSE)\n\n## 作者\n\nFox Control Team\n\n## 贡献\n\n欢迎提交 Issue 和 Pull Request！\n\n### 贡献指南\n\n1. Fork 本仓库\n2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)\n3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)\n4. 推送到分支 (`git push origin feature/AmazingFeature`)\n5. 提交 Pull Request\n\n### 代码贡献规范\n\n- 遵循现有代码风格和模块结构\n- 新增模块必须包含完整的 JSDoc 中文注释\n- 确保无 ESLint 错误和警告\n- 添加相应的单元测试（如有测试框架）\n- 更新相关文档（README.md 和 API文档）\n\n## 相关资源\n\n- **官方文档**: [REFACTORING_DESIGN.md](REFACTORING_DESIGN.md) - 详细的重构设计文档\n- **Issue追踪**: [GitHub Issues](https://github.com/foxcontrol/node-red-contrib-fox-control-admin/issues)\n- **设备发现协议**: [docs/device-discovery.md](docs/device-discovery.md)\n- **串口节点指南**: [docs/SERIAL_NODES_GUIDE.md](docs/SERIAL_NODES_GUIDE.md)\n\n---\n\n<div align=\"center\">\n\n**⭐ 如果这个项目对你有帮助，请给一个 Star！⭐**\n\nMade with ❤️ by Fox Control Team\n\n</div>\n","readmeFilename":"README.md"}