{"_id":"signalk-crows-nest","_rev":"28-d31b8e5e5cd123043c900127e954cf10","name":"signalk-crows-nest","dist-tags":{"latest":"0.18.0"},"versions":{"0.4.2":{"name":"signalk-crows-nest","version":"0.4.2","keywords":["signalk-node-server-plugin","signalk-category-utility","signalk-plugin-configurator"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.4.2","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"7fa4340eb0f965dcdabc66c51c27f06c55ff15a0","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.4.2.tgz","fileCount":206,"integrity":"sha512-O5uu2htsL7wBu83McMoqz4G4Kj6KOdDsJFKtvU/CMle+MYq6r/JwdqQZSkl/dqfr2vE5kZZjYBPDzXq0cVf66A==","signatures":[{"sig":"MEUCIQDNHLEcXNm95o5LixtJOVz5wSnSNOxQ5vaqNBvXCNUsLAIgGxEL2g67R81pQwG9J4r/RVg+QWbqGnF1RiFM6ns7Oh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":740191},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"gitHead":"5e9b8accc7d985703cef3883a9f35e59e1e87565","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel","clean":"rm -rf dist && rm -f public/*.js public/*.js.map public/*.LICENSE.txt","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"displayName":"Crow's Nest"},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.0","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.1","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.2","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.28.5","@signalk/server-api":"^2.24.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.28.5"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.4.2_1779583620966_0.2678839017058563","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.4.3":{"name":"signalk-crows-nest","version":"0.4.3","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.4.3","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"d2656f8d0a24f083df37039e62f49033626a211b","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.4.3.tgz","fileCount":206,"integrity":"sha512-nZ3JIijcopk6csU0xkjFZaTmwEVE6iLIbKVvaBAXZ24bbsnDHTb64zQ4dsmfR2sm46NC08qw/CQ6FlVCoCelPg==","signatures":[{"sig":"MEUCIQCJffklW4Nxmdk0isOlE4PBam+0jO5sBWUWoKWiTTZ3kgIgV2+cSmdp06pBJI7ZN1qTMfcCin1cMeKAxI/f1xeIZCY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":741350},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"gitHead":"074c5c5dee6eabe8c1ccd52a52db86770ac177b8","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel","clean":"rm -rf dist && rm -f public/*.js public/*.js.map public/*.LICENSE.txt","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"displayName":"Crow's Nest"},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.0","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.1","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.2","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.28.5","@signalk/server-api":"^2.24.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.28.5"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.4.3_1779584651834_0.7343746350163329","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.4.4":{"name":"signalk-crows-nest","version":"0.4.4","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.4.4","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"5b830fd380bcfc36f20be80b07f917cc919a029a","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.4.4.tgz","fileCount":216,"integrity":"sha512-gieX/ccNJwAV5PgFpNG1o6p+azjv2QL+DG3QgArsCRTJ+XWfzUFqLoTaOF4y0LPpDLmR73ITW4YIQqK36rIftQ==","signatures":[{"sig":"MEUCIQDacijVIqhk3CkYMp/1sihLBE5hoKPl/mNJNuRqAFwY4AIgPm5rDSuZZNL7uVyQONjMHtV+E43RPYmzdp1UmkSzoic=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":840279},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"gitHead":"f4f8c52b4a8b9bd5c82ea7498555bc8ccadd9ea5","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"rm -rf dist public","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"mkdir -p public/assets/icons && cp assets/icons/icon.svg assets/icons/icon-*.png public/assets/icons/","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","displayName":"Crow's Nest"},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.0","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.1","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.2","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.28.5","@signalk/server-api":"^2.24.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.28.5"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.4.4_1779839178377_0.9494378165203121","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.4.6":{"name":"signalk-crows-nest","version":"0.4.6","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.4.6","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"8d8746a1a91d8bced8ba87096fd2f2e7ab197d59","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.4.6.tgz","fileCount":216,"integrity":"sha512-BulItH8n4q+I+pmWA9E1fVMR3nWNxhnySh7huO1qqIIEKK88XQaA9CzGYwzoXakfJscfRDjiar1E1IbsF052kw==","signatures":[{"sig":"MEUCIFSAE/3/XlavFMxeIemFQduqIbGdGn8gSIwiuiV8qhH6AiEAiFLSzZoEc+8JWu2un7BlQkVzyh9kccbHl9pE4iC+IZw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":868451},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"gitHead":"f9fa88683a399f7c087d8665c7a8d7f1919af8f2","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"rm -rf dist public","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"mkdir -p public/assets/icons && cp assets/icons/icon.svg assets/icons/icon-*.png public/assets/icons/","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","displayName":"Crow's Nest"},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.0","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.1","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.2","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.28.5","@signalk/server-api":"^2.24.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.28.5"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.4.6_1779906871004_0.9974102274376593","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.4.7":{"name":"signalk-crows-nest","version":"0.4.7","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.4.7","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"457dec5e4c356c5b1a704a00201773f1ccf1cd2c","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.4.7.tgz","fileCount":231,"integrity":"sha512-1eFxCSKNWcSxyUowrbLaSfcWJHbiQGu3+W7DPwAyajrAG1ltPOl24OuxJKOiAjg0LZh5GOrAtZh3ZJmsks9JYA==","signatures":[{"sig":"MEUCIQDAi2USjzs1tLI4vUaZq7VnSghQTFcTqz9Ssq7h7nv6kwIgW0nEbqZAUSIbFiFqlw+zHx/O+k/aSlUKo/tdFbrEhYU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.4.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2141941},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"gitHead":"f3642712a57cf0d493203a97e6c6bea87a2852d7","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"rm -rf dist public","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"mkdir -p public/assets/icons && cp assets/icons/icon.svg assets/icons/icon-*.png public/assets/icons/","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.0","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.1","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.2","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.28.5","@signalk/server-api":"^2.24.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.28.5"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.4.7_1780030157464_0.19996304574466217","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.6.0":{"name":"signalk-crows-nest","version":"0.6.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.6.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"f12686895d657147203141fd51a105b9077d26ae","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.6.0.tgz","fileCount":231,"integrity":"sha512-VRjcGCLlC4pFHCVJ4fwa4NKH5WQre/+EHbRvo+D+J/hD96kUb4CwJ7mjIsVvz3UNeglnBelced+fFhSj5qjwEw==","signatures":[{"sig":"MEQCIDtjJZjLjbKIQh18vzuoe5+lZQ9SxiOy1f7ODXWN78vSAiAabEXQi9SiE85SXiXVQ8M+mYTaccFfVhU0vykBa8eBXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2142029},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"gitHead":"1214cbd0380fd2a305da47d6a9af9cb74fe53d89","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"rm -rf dist public","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"mkdir -p public/assets/icons && cp assets/icons/icon.svg assets/icons/icon-*.png public/assets/icons/","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.0","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.1","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.2","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.28.5","@signalk/server-api":"^2.24.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.28.5"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.6.0_1780030644474_0.6751629657534275","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.6.1":{"name":"signalk-crows-nest","version":"0.6.1","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.6.1","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"31a04391e8f9e5f61527340819f4f4836f3aedc9","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.6.1.tgz","fileCount":231,"integrity":"sha512-UUmh/dKWzekGfz2doP3+Ju0d5oIaM4BplVTgtbXLoJ1BJ+JoWeEpveyrhFtpEbZAmgKjflkZMz54xxVXVav94g==","signatures":[{"sig":"MEYCIQDR1HZKeDdjbse5ukSeGBeuIrUwVx4Ve9CxhtOOvJTVNwIhAL95JreVit+FO+sqgL9vKp92MnWbouuBdtkBBeRhJPJP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2147209},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"gitHead":"6abef1be9490adff8ca37f998aaef3c5edad84fb","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.0","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.1","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.0","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.2","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.28.5","@signalk/server-api":"^2.24.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.28.5"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.6.1_1780176851265_0.9016072552358925","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.7.0":{"name":"signalk-crows-nest","version":"0.7.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.7.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"a3025c6515155d76bdea8d48b88e73345afd6499","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.7.0.tgz","fileCount":258,"integrity":"sha512-B20MrChtaUI3zGOlq1EBYjXFxEMeUJMlanD+ccuMIL1q9FIUbHBEI8L2xM5qsBmLD5rFwk/0eizvhELlGnmdXw==","signatures":[{"sig":"MEUCIGLqnVu3WFJf/ETdtblRuNxpQlA2fSt+0ZCCoQECb1N4AiEA0kf6sOb9YJqEvXb3A0WgSxikRKN5dNrd2r6D85tZw6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2228790},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"e9f7ddedacb1c12c8a4311be858c7415cd70a5c7","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.2","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.25.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.7.0_1780194323884_0.33048115707302483","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.8.0":{"name":"signalk-crows-nest","version":"0.8.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.8.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"e99279bc6ea16d11b33b17e918424681c61cd107","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.8.0.tgz","fileCount":273,"integrity":"sha512-Tic9Qr+Zw4tzsyf1A5yew9T+f28ljsxuM2kEPruApfQuNpcfC/kcYIM8vbnN6RvMfnjiv5451BaTMZ8Tw6lr4w==","signatures":[{"sig":"MEUCIQDUO3Pufkplhk/UMAc82zn8fX0Q5BdG2IedPudxV7LGhQIgLQAjf7Kt+xKVZPft7ZjKN5R0ecmrWNiyDpAPccyFAQY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2327923},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"ef99a4f7e95197f97e2a2efb623138badcbab0a2","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.2","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.25.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.8.0_1780414954585_0.6863492378080369","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.8.1":{"name":"signalk-crows-nest","version":"0.8.1","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.8.1","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"4e06bbfd2b8a1e51f6138157b2972c1916377d9a","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.8.1.tgz","fileCount":294,"integrity":"sha512-JUsH4H7PpL15Jpw7+hHwwy1QCYfVsY6smQ1qpoOOESSpFJ9AHMNJwPZgsVlO6KSEjucVgVlhw+s4f/q94DP29A==","signatures":[{"sig":"MEUCIQCVW3lTeronB3xVcSQTlHSpLghe8QH/NpLRTRap1w3sTQIgL0tnRH0vT9JNzjcGOjf26Hbw0SuYAFm1jwM0G2bt9EE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2359979},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"8232821d8cd37514a814fbf506801ff973ec0b1a","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.2","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.1","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.15","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.25.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.8.1_1780601266778_0.8657323032232958","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.8.2":{"name":"signalk-crows-nest","version":"0.8.2","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.8.2","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"5f2bf7e5fc5c5796b0cd6ce341791364b09b925e","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.8.2.tgz","fileCount":303,"integrity":"sha512-UalGP7gIRRNgyjQICYjdsGc92Cq9nJxbIFbKlfBU+hxIJ5wsvjbu10lqmRqQx0nyiXk0+FLviEzW4NKIrR+s1A==","signatures":[{"sig":"MEYCIQDrc/n3WSCF9lBqRjrKU5IK2ooOQY2G4MYMWV2MGO8K0QIhAPvScRBLO5v7q8HbGwze/YcXEFD4D2IzVoxcUaO8yrQR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2419022},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"93d02498ce5cff9df469f39a7d90191612097d66","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.2","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.3","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.25.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.8.2_1781193817094_0.48272943924836764","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.9.0":{"name":"signalk-crows-nest","version":"0.9.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.9.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"7d52c83fa7138ab4baf3f0f09b4b059d443a640c","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.9.0.tgz","fileCount":307,"integrity":"sha512-m1O3AZM7WnscavfWWrxoIH5dbbmSgTqeoIlwa5MEPvDkzQpteXhq0rn//P/qlLEACzO039qIUrZMmMJ4wBqXyQ==","signatures":[{"sig":"MEQCIH/KFbPz6FUx3IIUVId7Q6PiZNDV0LaNDlFZ5orToMERAiBcYID+2lCXkKBfO/75kLe6MvpxWHxtvyXAeabexkSmvA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2499970},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"15d6ae8d147a90baaffb0346cf347a93fc7a7b78","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.2","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.3","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.25.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.9.0_1781285196877_0.7784673076216391","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.10.0":{"name":"signalk-crows-nest","version":"0.10.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.10.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"fac1efcc35ecfca9f046f3a7a66fcf5795fa7c6e","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.10.0.tgz","fileCount":396,"integrity":"sha512-7bN91EjhqWLJtLiuZmRW6iSqVExPNG25ceQkmoQ80/9mu0cAqA/X5ep6rEv0QU/MSLNqTenJLx4WInUfF4VzGA==","signatures":[{"sig":"MEQCIGJnWcy41ew4SXq2waZnalczujmu+eMdipLftVwqgTNaAiBC14OJEyjOZw0ULuDOhG9J+YPqdRY6ZbBSsCFGrBdmNw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4471302},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"257e9314fa47ad55cdab55991995c55e8daef56d","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build","build:boundaries":"node scripts/build-boundaries.mjs"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pbf":"^5.1.0","lru-cache":"^11.5.1","handlebars":"^4.7.9","@mapbox/vector-tile":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.2","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.3","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.25.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.10.0_1781709637936_0.2517038277990107","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.10.2":{"name":"signalk-crows-nest","version":"0.10.2","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.10.2","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"9c058ae6ca0fd11dbbe025a289c5c62b7aea4043","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.10.2.tgz","fileCount":402,"integrity":"sha512-MfCRIRM+ctPK0mtm3LPZyHIyqzV9ONRNmtu4TqxsWfoiZhylogNTL+5MSswrqmfKcB87EOykvGcChGRILgrhOw==","signatures":[{"sig":"MEUCIQCZ10Tqr03qloMLuo7cCDAWdBJlWMnjYm+BSQ/tQeEtDAIgQL5v01iPzkzl1HfySc1NDoQUWt6CeoQst/Ka8+UR+ro=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.10.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4484196},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"78ec7b424becc46a23cac75117efcd77bdf8d917","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build","build:boundaries":"node scripts/build-boundaries.mjs"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"pbf":"^5.1.0","lru-cache":"^11.5.1","handlebars":"^4.7.9","@mapbox/vector-tile":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.107.2","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.3","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.25.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.10.2_1782088581075_0.7717329045935233","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.10.3":{"name":"signalk-crows-nest","version":"0.10.3","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.10.3","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"fe373d873e28bd0d2616f8eb1225e307ce8774c8","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.10.3.tgz","fileCount":402,"integrity":"sha512-GbcLh2K+RrJil2zYn7P8IuptBH5uMut0d9i8Si0hJ1JssmMiMOV/udUw6ioaMMbHgwUPOCNpBj7BMehp6W4dSg==","signatures":[{"sig":"MEUCID/z1Tvqv9yFl5k1LeSSCCws1cCcnidTlrsq02hWo60EAiEA0P/KSydy2bBwmGc0OBPpZMPbjoPDo079X6ultX5B21U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.10.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4494016},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"1c21341f41bc982e7eb4d302cbdc5fcbf8ec455c","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build","build:boundaries":"node scripts/build-boundaries.mjs"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-nmea2000-emitter-cannon","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity, route-corridor, and bridge air-draft alarms.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"pbf":"^5.1.0","lru-cache":"^11.5.1","handlebars":"^4.7.9","@mapbox/vector-tile":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.108.0","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^25.9.4","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.28.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.10.3_1782421376802_0.6883565421247619","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.13.0":{"name":"signalk-crows-nest","version":"0.13.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.13.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"f2e26d8ce0737829ea05be2d9178e96ca153d49a","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.13.0.tgz","fileCount":445,"integrity":"sha512-x/HpuAmXoIuJUoQ0+jj4EHZs8NWY7X81yQ91fdRaEAhWYuLjNnMScZLXUFua5XUcDtFTwA79nXAe7/cGkbuscA==","signatures":[{"sig":"MEUCIHUsoT+BiULsHIX/SGwmR3eR1H6G0vGHFIEiigH2krzxAiEA8JfErytJT0QX5tePEICYf1vXMM3WedO/QUdEwRjhWjM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2955572},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"5407829907162c6a64cc0a5888f656cf09f4117c","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List and Local Notice to Mariners, NOAA ENC Direct and CO-OPS stations, the NGA World Port Index, and USACE locks and dams as Signal K notes resources, with proximity, route-","directories":{},"_nodeVersion":"22.23.1","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.108.0","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^26.0.1","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.28.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.13.0_1783351983383_0.38327602762695423","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.13.1":{"name":"signalk-crows-nest","version":"0.13.1","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.13.1","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"3bb4f188578c1d639fa5b4d2f434135746f63f81","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.13.1.tgz","fileCount":445,"integrity":"sha512-chyhkpgNkBm2WxME4bwq8Hb03aC+mq8qrurtPuiyhkXDNRxWxOR0P3IEf/eWmtDfvOQWJcTYufjmGgtgEfNRXg==","signatures":[{"sig":"MEUCIQCRWgjtagj8t7acLf1iLLK/WZF10BWPOpKx7wPDKO5+BgIgTY1+s31SqR3UYPihjckQN38f5yLd2CuOiOHU7hCDCao=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2950795},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"6685de933c9ba4b6bfd0b9f31aa894aa88eb06e1","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","prepublishOnly":"npm run clean && npm run build"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List and Local Notice to Mariners, NOAA ENC Direct and CO-OPS stations, the NGA World Port Index, and USACE locks and dams as Signal K notes resources, with proximity, route-","directories":{},"_nodeVersion":"22.23.1","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.108.0","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^26.0.1","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.28.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.13.1_1783354138276_0.11850600750270135","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.14.0":{"name":"signalk-crows-nest","version":"0.14.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.14.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"90da5aac4a0fbd5283e589498194f5ebcb52433c","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.14.0.tgz","fileCount":439,"integrity":"sha512-S11wRFTtfAL2pDQfasdHhG+O8C98HhGH3nS4QLhTv1VtFEBLAuiBsubF7Kcu5k7KI4kiBQ68XRC5+vgsx+FUTg==","signatures":[{"sig":"MEUCIQDSm33KSo3k5otmnMQFGLC95ziSI687IFimm3BDrXCrUAIgf5kH25ad72ubUUULDhFhmaFLW8Z+WYg4zvWK1Os2bRY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3001446},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"de5eb7caeb686a31142b8c218bdeb495cbf60069","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","prepack":"npm run clean && npm run build","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.1","dependencies":{"lru-cache":"^11.5.1","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.3","react":"^19.2.6","eslint":"^9.39.4","webpack":"^5.108.0","react-dom":"^19.2.6","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^26.0.1","neostandard":"^0.13.0","webpack-cli":"^7.0.3","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.28.0","eslint-plugin-react":"^7.37.5","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.14.0_1784051734480_0.6062195041646352","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.15.0":{"name":"signalk-crows-nest","version":"0.15.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.15.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"66a581068e6e5689580062b9d4de46da7a401ec6","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.15.0.tgz","fileCount":439,"integrity":"sha512-hAU0CQ6AULhBkhtpluhTRmCExdPxO6+k1nQoqKXtqpQfmjgDFx2bWuaryMtEnOwuBAiUXUusKlLEOodlNzTq0Q==","signatures":[{"sig":"MEUCICEqm0DQc6hjI6YMh0OdQpsJSqEcO/GX9bLz6WiDTDJRAiEAsgBvoFzEQXtOh4kmr71qEhLbQlAmjONJ5QIHoqxAHT0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3092749},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"c3e97d832186682634a7dbd1967ec88236579fe3","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","prepack":"npm run clean && npm run build","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","react":"^19.2.7","eslint":"^9.39.5","webpack":"^5.108.4","react-dom":"^19.2.7","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^26.1.1","neostandard":"^0.13.0","webpack-cli":"^7.2.1","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.30.0","eslint-plugin-react":"^7.37.5","signalk-nearlcrews-ui":"0.3.0","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.15.0_1784444780043_0.38458366462542215","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.15.1":{"name":"signalk-crows-nest","version":"0.15.1","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.15.1","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"f207202e9eaf44f24902133f1beab8582f45772b","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.15.1.tgz","fileCount":442,"integrity":"sha512-6uEAOoc1acj92351oOhSkzzyYUAmLqvLMewYg/TU6DXfQi7qjiXlKlizRg5Z5L7G8UbO+w6m2s+E09OWwU1e+Q==","signatures":[{"sig":"MEUCIQDvZ4wJB+jBTd3QeqmIPquXUy7TaLQwVFBzfFsCQpMEyQIgFXqQH4XrhAHFbgrNROivZmZdAZdTE2UluBv5jLkpZZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.15.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3090669},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"da073126df2475f9a5a8d7bfaa204590089d57fe","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","prepack":"npm run clean && npm run build","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","react":"^19.2.7","eslint":"^9.39.5","webpack":"^5.108.4","react-dom":"^19.2.7","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^26.1.1","neostandard":"^0.13.0","webpack-cli":"^7.2.1","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.30.0","eslint-plugin-react":"^7.37.5","signalk-nearlcrews-ui":"0.3.0","@babel/preset-typescript":"^7.29.7"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.15.1_1785108257695_0.5210648644261588","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.15.2":{"name":"signalk-crows-nest","version":"0.15.2","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.15.2","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"3f0069fed8a6b4f830998e11f55344cfa2d2b6aa","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.15.2.tgz","fileCount":442,"integrity":"sha512-xr90yunn9HYubVGkkkCJPvVQUJsGoemR9Yf8lb3KepXqjmBhAnevzWC/IflHYASxfzTXkDUYRDhtfEZJVv34PA==","signatures":[{"sig":"MEUCIFqLgFVqSlIM6S3JS8MRo/LkzfdtPyojioz6ubPSuXo4AiEAs3zu9EyAwi3DN9RUrnzcWBmq0EqyeqUqb0W0WrgKNyg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.15.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3143764},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"516695f43cbb13a4677b89ed3d8f0a09b8a27cbc","scripts":{"lint":"eslint .","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","prepack":"npm run clean && npm run build","lint:fix":"eslint . --fix","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.23.1","react":"^19.2.8","eslint":"^9.39.5","webpack":"^5.109.0","react-dom":"^19.2.8","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.1.1","neostandard":"^0.13.0","webpack-cli":"^7.2.1","@types/react":"^19.2.17","babel-loader":"^10.1.1","@types/express":"^5.0.6","@types/react-dom":"^19.2.3","@babel/preset-react":"^8.0.1","@signalk/server-api":"^2.30.0","eslint-plugin-react":"^7.37.5","signalk-nearlcrews-ui":"0.4.1","@babel/preset-typescript":"^8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.15.2_1785181650741_0.4690834452726955","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.15.3":{"name":"signalk-crows-nest","version":"0.15.3","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.15.3","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"6dddff912fe46bed3fc7618a5596c4f889187dc2","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.15.3.tgz","fileCount":442,"integrity":"sha512-IONYnq/PmSmTy+u4zXa5D5EclhSJ9OEkFKmi97Tbx4+YjPdJVYLPSG5kWrd8594VvqtcMR/nVn8DMohsdXMI8g==","signatures":[{"sig":"MEUCIQDadHsJPh3rphKhKUF5+72N22R0MCyoMQavwEC64KRmLwIgImncjhXVSyEH/QHtbXgHxeazOagwkPy/q6mnvvltXuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.15.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3182639},"main":"dist/index.js","type":"commonjs","_from":"file:artifacts/signalk-crows-nest-0.15.3.tgz","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"scripts":{"lint":"npm run lint:code && npm run lint:docs && npm run spellcheck","size":"size-limit","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","format":"eslint . --fix && prettier --write \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","verify":"npm run verify:fast && npm run test:coverage && npm run build && npm run size && npm run package:check && npm run audit:runtime","prepack":"npm run clean && npm run build","deadcode":"knip --include files,dependencies,unlisted,binaries","lint:fix":"eslint . --fix","lint:code":"eslint .","lint:docs":"markdownlint-cli2 \"*.md\" \".github/*.md\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","audit:full":"npm audit --audit-level=high","spellcheck":"cspell --no-progress --show-suggestions README.md CHANGELOG.md THIRD_PARTY_NOTICES.md CLAUDE.md \".github/**/*.{md,yml,yaml}\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","verify:fast":"npm run verify:commit && npm run typecheck","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","ci:workflows":"node scripts/check-workflows.mjs","format:check":"prettier --check \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","test:browser":"npm run build && playwright test --project=chromium","audit:runtime":"npm audit --omit=dev --audit-level=high","package:check":"publint --pack npm --strict && node scripts/check-package.mjs","test:coverage":"c8 --reporter=text --reporter=lcov node --import tsx --test test/*.test.ts","verify:commit":"npm run lint && npm run format:check && npm run ci:workflows && npm run deadcode","verify:browser":"npm run verify && npm run test:browser","verify:release":"npm run verify && playwright test && npm run audit:full","test:browser:cross":"npm run build && playwright test"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"_resolved":"/home/runner/work/signalk-crows-nest/signalk-crows-nest/artifacts/signalk-crows-nest-0.15.3.tgz","_integrity":"sha512-IONYnq/PmSmTy+u4zXa5D5EclhSJ9OEkFKmi97Tbx4+YjPdJVYLPSG5kWrd8594VvqtcMR/nVn8DMohsdXMI8g==","devEngines":{"runtime":{"name":"node","onFail":"warn","version":">=22.22.2"},"packageManager":{"name":"npm","onFail":"warn","version":">=10.9.3"}},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"size-limit":[{"gzip":true,"name":"Configuration panel JavaScript","path":"public/*.js","limit":"50 kB"}],"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"packageManager":"npm@11.18.0","devDependencies":{"c8":"12.0.0","tsx":"^4.23.4","knip":"6.31.0","vite":"^8.2.0","react":"^19.2.8","cspell":"10.0.1","eslint":"^9.39.5","publint":"0.3.22","webpack":"^5.109.2","prettier":"3.9.6","react-dom":"^19.2.8","size-limit":"13.0.3","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^26.1.2","neostandard":"^0.13.0","webpack-cli":"^7.2.2","@types/react":"^19.2.18","babel-loader":"^10.1.1","@types/express":"^5.0.6","@playwright/test":"^1.62.1","@size-limit/file":"13.0.3","@types/react-dom":"^19.2.4","markdownlint-cli2":"0.23.2","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.30.0","eslint-plugin-react":"^7.37.5","@axe-core/playwright":"^4.12.1","@vitejs/plugin-react":"^6.0.5","signalk-nearlcrews-ui":"0.6.1","@babel/preset-typescript":"^7.29.7","@microsoft/eslint-formatter-sarif":"3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.15.3_1785722549723_0.5538704841018613","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.15.4":{"name":"signalk-crows-nest","version":"0.15.4","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.15.4","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"c80269ed00c7ea48860f4ea5d9a03d4501f3ae42","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.15.4.tgz","fileCount":442,"integrity":"sha512-PbczC6s0NnpJInXqdi9mErs5Z9vqsMpEoVlGDzteRfqR+Fn1pxbPzXZ6tGDEgKiFS4CW/ykhHjvNHj/naDJVYQ==","signatures":[{"sig":"MEUCIFiOI7zX/QaUmGiqJ43V+D5bMAwA/v/pUDMjXNNzBGGSAiEA8rodqqB5WJv136myNbYpLQJ0bigbGvNaKzTwXw62CJw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.15.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3189260},"main":"dist/index.js","type":"commonjs","_from":"file:artifacts/signalk-crows-nest-0.15.4.tgz","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"scripts":{"lint":"npm run lint:code && npm run lint:docs && npm run spellcheck","size":"size-limit","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","format":"eslint . --fix && prettier --write \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","verify":"npm run verify:fast && npm run test:coverage && npm run build && npm run size && npm run package:check && npm run audit:runtime","prepack":"npm run clean && npm run build","deadcode":"knip --include files,dependencies,unlisted,binaries","lint:fix":"eslint . --fix","lint:code":"eslint .","lint:docs":"markdownlint-cli2 \"*.md\" \".github/*.md\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","audit:full":"npm audit --audit-level=high","spellcheck":"cspell --no-progress --show-suggestions README.md CHANGELOG.md THIRD_PARTY_NOTICES.md CLAUDE.md \".github/**/*.{md,yml,yaml}\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","verify:fast":"npm run verify:commit && npm run typecheck","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","ci:workflows":"node scripts/check-workflows.mjs","format:check":"prettier --check \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","test:browser":"npm run build && playwright test --project=chromium","audit:runtime":"npm audit --omit=dev --audit-level=high","package:check":"publint --pack npm --strict && node scripts/check-package.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --check-coverage --lines 90 --branches 80 --functions 90 node --import tsx --test test/*.test.ts","verify:commit":"npm run lint && npm run format:check && npm run ci:workflows && npm run deadcode","verify:browser":"npm run verify && npm run test:browser","verify:release":"npm run verify && playwright test && npm run audit:full","test:browser:cross":"npm run build && playwright test"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"_resolved":"/home/runner/work/signalk-crows-nest/signalk-crows-nest/artifacts/signalk-crows-nest-0.15.4.tgz","_integrity":"sha512-PbczC6s0NnpJInXqdi9mErs5Z9vqsMpEoVlGDzteRfqR+Fn1pxbPzXZ6tGDEgKiFS4CW/ykhHjvNHj/naDJVYQ==","devEngines":{"runtime":{"name":"node","onFail":"warn","version":">=22.22.2"},"packageManager":{"name":"npm","onFail":"warn","version":">=10.9.3"}},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"size-limit":[{"gzip":true,"name":"Configuration panel JavaScript","path":"public/*.js","limit":"50 kB"}],"_npmVersion":"10.9.8","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.1":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"packageManager":"npm@11.18.0","devDependencies":{"c8":"12.0.0","tsx":"^4.23.4","knip":"6.31.0","vite":"^8.2.0","react":"^19.2.8","cspell":"10.0.1","eslint":"^9.39.5","publint":"0.3.23","webpack":"^5.109.2","prettier":"3.9.6","react-dom":"^19.2.8","size-limit":"13.0.3","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^26.1.2","neostandard":"^0.13.0","webpack-cli":"^7.2.2","@types/react":"^19.2.18","babel-loader":"^10.1.1","@types/express":"^5.0.6","@playwright/test":"^1.62.1","@size-limit/file":"13.0.3","@types/react-dom":"^19.2.4","markdownlint-cli2":"0.23.2","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.30.0","eslint-plugin-react":"^7.37.5","@axe-core/playwright":"^4.12.1","@vitejs/plugin-react":"^6.0.5","signalk-nearlcrews-ui":"0.6.2","@babel/preset-typescript":"^7.29.7","@microsoft/eslint-formatter-sarif":"3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.15.4_1785849873599_0.3894589746915489","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.15.5":{"name":"signalk-crows-nest","version":"0.15.5","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.15.5","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"02300f75f8b37d962066504851aeb721a710b3e8","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.15.5.tgz","fileCount":439,"integrity":"sha512-T1Cv37r5Qo/TPzNmE9Q4/uFtnQrUKCu27gu2gGwV5jlYesDhpXL3wOVmdo0u7CI1pk7oZdeWvfv+9y3QYwQtOA==","signatures":[{"sig":"MEQCIGRvAnBbfsJ6XL2G41idOTls/1XNgzppiBycdRcN7DnjAiAiKEkSXKCV4mCHiCi1XYnEk5xljhDcHbNr1JG1HK6mMw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.15.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3201793},"main":"dist/index.js","type":"commonjs","_from":"file:artifacts/signalk-crows-nest-0.15.5.tgz","types":"dist/index.d.ts","engines":{"node":">=20.3.0"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"d369d30ea9c53e86bf4929e7f9382e8445e2cde8","scripts":{"lint":"npm run lint:code && npm run lint:docs && npm run spellcheck","size":"size-limit","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","format":"eslint . --fix && prettier --write \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","verify":"npm run verify:fast && npm run test:coverage && npm run build && npm run size && npm run package:check && npm run audit:runtime","prepack":"npm run clean && npm run build","deadcode":"knip --include files,dependencies,unlisted,binaries","lint:fix":"eslint . --fix","lint:code":"eslint .","lint:docs":"markdownlint-cli2 \"*.md\" \".github/*.md\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","audit:full":"npm audit --audit-level=high","spellcheck":"cspell --no-progress --show-suggestions README.md CHANGELOG.md THIRD_PARTY_NOTICES.md CLAUDE.md \".github/**/*.{md,yml,yaml}\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","verify:fast":"npm run verify:commit && npm run typecheck","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","ci:workflows":"node scripts/check-workflows.mjs","format:check":"prettier --check \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","pack:release":"node scripts/create-release-tarball.mjs","test:browser":"npm run build && playwright test --project=chromium","audit:runtime":"npm audit --omit=dev --audit-level=high","package:check":"node scripts/test-package-report.mjs && publint --pack npm --strict && node scripts/check-package.mjs","test:coverage":"c8 --reporter=text --reporter=lcov --check-coverage --lines 90 --branches 80 --functions 90 node --import tsx --test test/*.test.ts","verify:commit":"npm run lint && npm run format:check && npm run ci:workflows && npm run deadcode","verify:browser":"npm run verify && npm run test:browser","verify:release":"npm run verify && playwright test && npm run audit:full","screenshot:panel":"npm run build && node scripts/capture-panel-screenshot.mjs","test:browser:cross":"npm run build && playwright test"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"_resolved":"/home/runner/work/signalk-crows-nest/signalk-crows-nest/artifacts/signalk-crows-nest-0.15.5.tgz","_integrity":"sha512-T1Cv37r5Qo/TPzNmE9Q4/uFtnQrUKCu27gu2gGwV5jlYesDhpXL3wOVmdo0u7CI1pk7oZdeWvfv+9y3QYwQtOA==","devEngines":{"runtime":{"name":"node","onFail":"warn","version":"^22.22.2 || ^24.15.0 || ^26.0.0"},"packageManager":{"name":"npm","onFail":"warn","version":">=10.9.3"}},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"size-limit":[{"gzip":true,"name":"Configuration panel JavaScript","path":"public/*.js","limit":"50 kB"}],"_npmVersion":"12.0.2","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.1","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"packageManager":"npm@12.0.2","devDependencies":{"c8":"12.0.0","tsx":"^4.23.12","knip":"6.32.2","vite":"^8.2.1","react":"^19.2.8","cspell":"10.0.1","eslint":"^9.39.5","publint":"0.3.23","webpack":"^5.109.2","prettier":"3.9.6","react-dom":"^19.2.8","size-limit":"13.0.3","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^20.19.43","neostandard":"^0.13.0","webpack-cli":"^7.2.2","@types/react":"^19.2.18","babel-loader":"^10.1.1","@types/express":"^5.0.6","@playwright/test":"^1.62.1","@size-limit/file":"13.0.3","@types/react-dom":"^19.2.4","markdownlint-cli2":"0.23.2","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.31.0","eslint-plugin-react":"^7.37.5","@axe-core/playwright":"^4.13.0","@vitejs/plugin-react":"^6.0.5","signalk-nearlcrews-ui":"0.7.1","@babel/preset-typescript":"^7.29.7","@microsoft/eslint-formatter-sarif":"3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.15.5_1786565733071_0.647922096319302","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.15.6":{"name":"signalk-crows-nest","version":"0.15.6","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.15.6","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"bc84daaa352dd1cbffde589650fe410af6856ad8","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.15.6.tgz","fileCount":439,"integrity":"sha512-dwzGW8UW4T7Wbg5ODi+bLqMNF670tyvASBTyWHf5Ua9rU7Bd7JToN2ZemnOtwCzvzCL9IPnGPUopvbJ3elq59A==","signatures":[{"sig":"MEQCIBPMHhjbiiA+ORIeasXq+C7rdJDjTSP04+HCOZbLFAmlAiBcnvEh89yROIgCyMOXdL6EYnpvq0GAbRkG1+9hrii3hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.15.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3230087},"main":"dist/index.js","type":"commonjs","_from":"file:artifacts/signalk-crows-nest-0.15.6.tgz","types":"dist/index.d.ts","engines":{"node":"^20.3.0 || >=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"a4c943f2e22f7fd213ddfe507bdb9a59a4415f46","scripts":{"lint":"npm run lint:code && npm run lint:docs && npm run spellcheck","size":"size-limit","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","format":"eslint . --fix && prettier --write \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","verify":"npm run verify:fast && npm run test:coverage && npm run build && npm run size && npm run package:check && npm run audit:runtime","prepack":"npm run clean && npm run build","deadcode":"knip --include files,dependencies,unlisted,binaries","licenses":"node scripts/generate-third-party-notices.mjs","lint:fix":"eslint . --fix","lint:code":"eslint .","lint:docs":"markdownlint-cli2 \"*.md\" \".github/*.md\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.panel.json && tsc --noEmit -p tsconfig.test.json","audit:full":"npm audit --audit-level=high","spellcheck":"cspell --no-progress --show-suggestions README.md CHANGELOG.md THIRD_PARTY_NOTICES.md CLAUDE.md \".github/**/*.{md,yml,yaml}\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","build:icons":"node scripts/copy-icons.mjs","build:panel":"webpack --config webpack.config.cjs","verify:fast":"npm run verify:commit && npm run typecheck","watch:panel":"webpack --watch --mode development --config webpack.config.cjs","build:plugin":"tsc","ci:workflows":"node scripts/check-workflows.mjs","format:check":"prettier --check \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","pack:release":"node scripts/create-release-tarball.mjs","test:browser":"npm run build && playwright test --project=chromium","audit:runtime":"npm audit --omit=dev --audit-level=high","package:check":"node scripts/test-package-report.mjs && publint --pack npm --strict && node scripts/check-package.mjs && npm run licenses:check","test:coverage":"c8 --reporter=text --reporter=lcov --check-coverage --lines 90 --branches 80 --functions 90 node --import tsx --test test/*.test.ts","verify:commit":"npm run lint && npm run format:check && npm run ci:workflows && npm run deadcode","licenses:check":"node scripts/generate-third-party-notices.mjs --check","verify:browser":"npm run verify && npm run test:browser","verify:release":"npm run verify && playwright test && npm run audit:full","screenshot:panel":"npm run build && node scripts/capture-panel-screenshot.mjs","test:browser:cross":"npm run build && playwright test"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle","signalk-nmea2000-emitter-cannon"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"_resolved":"/home/runner/work/signalk-crows-nest/signalk-crows-nest/artifacts/signalk-crows-nest-0.15.6.tgz","_integrity":"sha512-dwzGW8UW4T7Wbg5ODi+bLqMNF670tyvASBTyWHf5Ua9rU7Bd7JToN2ZemnOtwCzvzCL9IPnGPUopvbJ3elq59A==","devEngines":{"runtime":{"name":"node","onFail":"warn","version":"^22.22.2 || ^24.15.0 || ^26.0.0"},"packageManager":{"name":"npm","onFail":"warn","version":">=10.9.3"}},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"size-limit":[{"gzip":true,"name":"Configuration panel JavaScript","path":"public/*.js","limit":"44 kB"}],"_npmVersion":"12.0.2","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"packageManager":"npm@12.0.2","devDependencies":{"c8":"12.0.0","tsx":"^4.23.12","knip":"6.32.2","vite":"^8.2.2","react":"^19.2.8","cspell":"10.0.1","eslint":"^9.39.5","publint":"0.3.24","webpack":"^5.109.2","prettier":"3.9.6","react-dom":"^19.2.8","size-limit":"13.0.3","typescript":"^6.0.3","@babel/core":"^7.29.7","@types/node":"^20.19.43","neostandard":"^0.13.0","webpack-cli":"^7.2.2","@types/react":"^19.2.18","babel-loader":"^10.1.1","@types/express":"^5.0.6","@playwright/test":"^1.62.1","@size-limit/file":"13.0.3","@types/react-dom":"^19.2.4","markdownlint-cli2":"0.23.2","@babel/preset-react":"^7.29.7","@signalk/server-api":"^2.31.1","eslint-plugin-react":"^7.37.5","@axe-core/playwright":"^4.13.0","@vitejs/plugin-react":"^6.1.0","signalk-nearlcrews-ui":"0.8.2","@babel/preset-typescript":"^7.29.7","@microsoft/eslint-formatter-sarif":"3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.15.6_1787553031443_0.8781408028636137","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.16.0":{"name":"signalk-crows-nest","version":"0.16.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.16.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"9301067afca8f5f4fb87770f48469bf0a75a148b","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.16.0.tgz","fileCount":441,"integrity":"sha512-riTUbNUzTeGfA1anK13Kt21BJxG4F0v67nSfffIDB0IalHBsYo3EsMZ0FmFdefE0Ty8vUmtiNg+aJMMyd4Y9dw==","signatures":[{"sig":"MEUCIQCHpdK2EpQig8jC0UsLSHJ6/v2FYFmfzOGrmdo+3KPLkwIgUQgXU0I4elv3Ilc8bKbcEzaqE0vzzxzgZDbHp1jRpoE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3301243},"main":"dist/index.js","type":"commonjs","_from":"file:artifacts/signalk-crows-nest-0.16.0.tgz","types":"dist/index.d.ts","engines":{"node":"^20.3.0 || >=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"9942c8974d2d70bff487d2b20b2abc838f9ec76f","scripts":{"lint":"npm run lint:code && npm run lint:docs && npm run spellcheck","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","format":"eslint . --fix && prettier --write \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","verify":"npm run verify:fast && npm run test:coverage && npm run build && npm run check:panel && npm run package:check && npm run audit:runtime","prepack":"npm run clean && npm run build","deadcode":"knip --include files,dependencies,unlisted,binaries","licenses":"node scripts/generate-third-party-notices.mjs","lint:fix":"eslint . --fix","lint:code":"eslint .","lint:docs":"markdownlint-cli2 \"*.md\" \".github/*.md\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","typecheck":"node scripts/tsc7.mjs --noEmit && node scripts/tsc7.mjs --noEmit -p tsconfig.panel.json && node scripts/tsc7.mjs --noEmit -p tsconfig.test.json","audit:full":"npm audit --audit-level=high","spellcheck":"cspell --no-progress --show-suggestions README.md CHANGELOG.md THIRD_PARTY_NOTICES.md CLAUDE.md \".github/**/*.{md,yml,yaml}\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","build:icons":"node scripts/copy-icons.mjs","build:panel":"node scripts/build-panel.mjs","check:panel":"snui-check-consumer --root . --remote public/remoteEntry.js --baseline scripts/panel-size-baseline.json","verify:fast":"npm run verify:commit && npm run typecheck && npm run typecheck:ts6","watch:panel":"node scripts/build-panel.mjs --watch --mode development","build:plugin":"node scripts/tsc7.mjs","ci:workflows":"node scripts/check-workflows.mjs","format:check":"prettier --check \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","pack:release":"node scripts/create-release-tarball.mjs","test:browser":"npm run build && playwright test --project=chromium","audit:runtime":"npm audit --omit=dev --audit-level=high","package:check":"node scripts/test-package-report.mjs && node scripts/test-panel-toolchain.mjs && publint --pack npm --strict && node scripts/check-package.mjs && npm run licenses:check","test:coverage":"c8 --reporter=text --reporter=lcov --check-coverage --lines 90 --branches 80 --functions 90 node --import tsx --test test/*.test.ts","typecheck:ts6":"tsc6 --noEmit && tsc6 --noEmit -p tsconfig.panel.json && tsc6 --noEmit -p tsconfig.test.json","verify:commit":"npm run lint && npm run format:check && npm run ci:workflows && npm run deadcode","licenses:check":"node scripts/generate-third-party-notices.mjs --check","verify:release":"npm run verify && playwright test","screenshot:panel":"npm run build && node scripts/capture-panel-screenshot.mjs"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle","signalk-nmea2000-emitter-cannon"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"_resolved":"/home/runner/work/signalk-crows-nest/signalk-crows-nest/artifacts/signalk-crows-nest-0.16.0.tgz","_integrity":"sha512-riTUbNUzTeGfA1anK13Kt21BJxG4F0v67nSfffIDB0IalHBsYo3EsMZ0FmFdefE0Ty8vUmtiNg+aJMMyd4Y9dw==","devEngines":{"runtime":{"name":"node","onFail":"warn","version":"^22.22.2 || ^24.15.0 || ^26.0.0"},"packageManager":{"name":"npm","onFail":"warn","version":">=10.9.3"}},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"12.0.2","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"packageManager":"npm@12.0.2","devDependencies":{"c8":"12.0.0","tsx":"^4.23.13","knip":"6.34.0","vite":"^8.2.2","react":"^19.2.8","cspell":"10.2.2","eslint":"^9.39.5","publint":"0.3.24","webpack":"^5.110.3","prettier":"3.9.6","react-dom":"^19.2.8","typescript":"npm:@typescript/typescript6@^6.0.2","@babel/core":"^8.0.1","@types/node":"^20.19.43","neostandard":"^0.13.0","webpack-cli":"^7.2.3","@types/react":"^19.2.18","babel-loader":"^10.1.1","@types/express":"^5.0.6","@playwright/test":"^1.63.0","@types/react-dom":"^19.2.7","markdownlint-cli2":"0.23.2","@typescript/native":"npm:typescript@^7.0.2","@babel/preset-react":"^8.0.1","@signalk/server-api":"^2.31.1","eslint-plugin-react":"^7.37.5","@axe-core/playwright":"^4.13.0","@vitejs/plugin-react":"^6.1.1","signalk-nearlcrews-ui":"0.9.0","@babel/preset-typescript":"^8.0.1","@microsoft/eslint-formatter-sarif":"3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.16.0_1788991691847_0.2514161247523885","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.17.0":{"name":"signalk-crows-nest","version":"0.17.0","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","_id":"signalk-crows-nest@0.17.0","maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"contributors":[{"url":"original author of signalk-activecaptain-resources","name":"Paul Willems"}],"homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"dist":{"shasum":"a324e6431bbfa69d1220c92c07312deb81878e5e","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.17.0.tgz","fileCount":441,"integrity":"sha512-OL3JvgeOq+m9xZcmlHrZYi6E+dI417HF1Bk4/5xXAjkhOCi0nCxvZJ1EgaPVgUE0uzYJjXXrwqHd1Ni6YJCSdA==","signatures":[{"sig":"MEUCIF6EcflQrdt+7+SVXSETEvlmN5oz5jsx8TPwACUJmxOhAiEA6hetN+Gp4qA3gW9wLfMf9XM6qwBSWR6Z/mxYPKp0T7M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2873652},"main":"dist/index.js","type":"commonjs","_from":"file:artifacts/signalk-crows-nest-0.17.0.tgz","types":"dist/index.d.ts","engines":{"node":"^20.3.0 || >=22"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js","require":"./dist/index.js"}},"funding":{"url":"https://www.buymeacoffee.com/nearlcrews","type":"buymeacoffee"},"gitHead":"a7ba8478ea368259f13d746816e3d6f3b05c6bea","scripts":{"lint":"npm run lint:code && npm run lint:docs && npm run spellcheck","test":"node --import tsx --test test/*.test.ts","build":"npm run build:plugin && npm run build:panel && npm run build:icons","clean":"node scripts/clean.mjs","format":"eslint . --fix && prettier --write \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","verify":"npm run verify:fast && npm run test:coverage && npm run build && npm run check:panel && npm run package:check && npm run audit:runtime","prepack":"npm run clean && npm run build","deadcode":"knip --include files,dependencies,unlisted,binaries","licenses":"node scripts/generate-third-party-notices.mjs","lint:fix":"eslint . --fix","lint:code":"eslint .","lint:docs":"markdownlint-cli2 \"*.md\" \".github/*.md\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","typecheck":"node scripts/tsc7.mjs --noEmit && node scripts/tsc7.mjs --noEmit -p tsconfig.panel.json && node scripts/tsc7.mjs --noEmit -p tsconfig.test.json","audit:full":"npm audit --audit-level=high","spellcheck":"cspell --no-progress --show-suggestions README.md CHANGELOG.md THIRD_PARTY_NOTICES.md CLAUDE.md \".github/**/*.{md,yml,yaml}\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","build:icons":"node scripts/copy-icons.mjs","build:panel":"node scripts/build-panel.mjs","check:panel":"snui-check-consumer --root . --remote public/remoteEntry.js --baseline scripts/panel-size-baseline.json --runtime --expose ./PluginConfigurationPanel --expect \"Plugin status\"","verify:fast":"npm run verify:commit && npm run typecheck && npm run typecheck:ts6","watch:panel":"node scripts/build-panel.mjs --watch --mode development","build:plugin":"node scripts/tsc7.mjs","ci:workflows":"node scripts/check-workflows.mjs","format:check":"prettier --check \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","pack:release":"node scripts/create-release-tarball.mjs","test:browser":"npm run build && playwright test --project=chromium","audit:runtime":"npm audit --omit=dev --audit-level=high","package:check":"node scripts/test-package-report.mjs && node scripts/test-panel-toolchain.mjs && publint --pack npm --strict && node scripts/check-package.mjs && npm run licenses:check","test:coverage":"c8 --reporter=text --reporter=lcov --check-coverage --lines 90 --branches 80 --functions 90 node --import tsx --test test/*.test.ts","typecheck:ts6":"tsc6 --noEmit && tsc6 --noEmit -p tsconfig.panel.json && tsc6 --noEmit -p tsconfig.test.json","verify:commit":"npm run lint && npm run format:check && npm run ci:workflows && npm run deadcode","licenses:check":"node scripts/generate-third-party-notices.mjs --check","verify:release":"npm run verify && playwright test","screenshot:panel":"npm run build && node scripts/capture-panel-screenshot.mjs"},"signalk":{"appIcon":"assets/icons/icon-192.png","recommends":["@signalk/freeboard-sk","signalk-binnacle","signalk-nmea2000-emitter-cannon"],"displayName":"Crow's Nest","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"_resolved":"/home/runner/work/signalk-crows-nest/signalk-crows-nest/artifacts/signalk-crows-nest-0.17.0.tgz","overrides":{"smol-toml":"1.8.0"},"_integrity":"sha512-OL3JvgeOq+m9xZcmlHrZYi6E+dI417HF1Bk4/5xXAjkhOCi0nCxvZJ1EgaPVgUE0uzYJjXXrwqHd1Ni6YJCSdA==","devEngines":{"runtime":{"name":"node","onFail":"warn","version":"^22.22.2 || ^24.15.0 || ^26.0.0"},"packageManager":{"name":"npm","onFail":"warn","version":">=10.9.3"}},"repository":{"url":"git+https://github.com/NearlCrews/signalk-crows-nest.git","type":"git"},"_npmVersion":"12.0.2","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","directories":{},"_nodeVersion":"22.23.2","allowScripts":{"esbuild@0.28.2":true},"dependencies":{"lru-cache":"^11.5.2","handlebars":"^4.7.9"},"_hasShrinkwrap":false,"packageManager":"npm@12.0.2","devDependencies":{"c8":"12.0.0","tsx":"^4.23.13","knip":"6.35.1","vite":"^8.3.0","react":"^19.3.0","cspell":"10.3.0","eslint":"^9.39.5","publint":"0.3.24","webpack":"^5.110.3","prettier":"3.9.6","react-dom":"^19.3.0","typescript":"npm:@typescript/typescript6@^6.0.2","@babel/core":"^8.0.5","@types/node":"^20.19.43","neostandard":"^0.13.0","webpack-cli":"^7.2.3","@types/react":"^19.3.0","babel-loader":"^10.1.1","@types/express":"^5.0.6","@playwright/test":"^1.63.0","@types/react-dom":"^19.3.0","markdownlint-cli2":"0.23.2","@typescript/native":"npm:typescript@^7.0.2","@babel/preset-react":"^8.0.1","@signalk/server-api":"^2.32.0","eslint-plugin-react":"^7.37.5","@axe-core/playwright":"^4.13.0","@vitejs/plugin-react":"^6.1.1","signalk-nearlcrews-ui":"0.10.1","@babel/preset-typescript":"^8.0.1","@microsoft/eslint-formatter-sarif":"3.1.0"},"_npmOperationalInternal":{"tmp":"tmp/signalk-crows-nest_0.17.0_1789157717931_0.46726637944435634","host":"s3://npm-registry-packages-npm-production"},"signalk-plugin-enabled-by-default":false},"0.18.0":{"name":"signalk-crows-nest","version":"0.18.0","description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","type":"commonjs","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.js"}},"scripts":{"build":"npm run build:plugin && npm run build:panel && npm run build:icons","build:plugin":"node scripts/tsc7.mjs","build:panel":"node scripts/build-panel.mjs","check:panel":"snui-check-consumer --root . --remote public/remoteEntry.js --baseline scripts/panel-size-baseline.json --runtime --expose ./PluginConfigurationPanel --expect \"Plugin status\"","build:icons":"node scripts/copy-icons.mjs","watch:panel":"node scripts/build-panel.mjs --watch --mode development","clean":"node scripts/clean.mjs","typecheck":"node scripts/tsc7.mjs --noEmit && node scripts/tsc7.mjs --noEmit -p tsconfig.panel.json && node scripts/tsc7.mjs --noEmit -p tsconfig.test.json","typecheck:ts6":"tsc6 --noEmit && tsc6 --noEmit -p tsconfig.panel.json && tsc6 --noEmit -p tsconfig.test.json","lint":"npm run lint:code && npm run lint:docs && npm run spellcheck","lint:code":"eslint .","lint:docs":"markdownlint-cli2 \"*.md\" \".github/*.md\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","spellcheck":"cspell --no-progress --show-suggestions README.md CHANGELOG.md THIRD_PARTY_NOTICES.md CLAUDE.md \".github/**/*.{md,yml,yaml}\" \"docs/*.md\" \"docs/decisions/*.md\" \"docs/maintainers/*.md\"","lint:fix":"eslint . --fix","test":"node --import tsx --test test/*.test.ts","test:coverage":"c8 --reporter=text --reporter=lcov --check-coverage --lines 90 --branches 80 --functions 90 node --import tsx --test test/*.test.ts","test:browser":"npm run build && playwright test --project=chromium","screenshot:panel":"npm run build && node scripts/capture-panel-screenshot.mjs","format":"eslint . --fix && prettier --write \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","format:check":"prettier --check \"*.{json,jsonc,md,yml,yaml}\" \".github/**/*.{md,yml,yaml}\" \"docs/**/*.{json,jsonc,md,yml,yaml}\"","deadcode":"knip --include files,dependencies,unlisted,binaries","ci:workflows":"node scripts/check-workflows.mjs","package:check":"node scripts/test-package-report.mjs && node scripts/test-panel-toolchain.mjs && publint --pack npm --strict && node scripts/check-package.mjs && npm run licenses:check","pack:release":"node scripts/create-release-tarball.mjs","licenses":"node scripts/generate-third-party-notices.mjs","licenses:check":"node scripts/generate-third-party-notices.mjs --check","audit:runtime":"npm audit --omit=dev --audit-level=high","audit:full":"npm audit --audit-level=high","verify:commit":"npm run lint && npm run format:check && npm run ci:workflows && npm run deadcode","verify:fast":"npm run verify:commit && npm run typecheck && npm run typecheck:ts6","verify":"npm run verify:fast && npm run test:coverage && npm run build && npm run check:panel && npm run package:check && npm run audit:runtime","verify:release":"npm run verify && playwright test","prepack":"npm run clean && npm run build"},"keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"signalk-plugin-enabled-by-default":false,"signalk":{"displayName":"Crow's Nest","appIcon":"assets/icons/icon-192.png","screenshots":["assets/screenshots/freeboard-activecaptain-hazard.png","assets/screenshots/freeboard-uscg-light-list.png","assets/screenshots/admin-panel.png"],"recommends":["@signalk/freeboard-sk","signalk-binnacle","signalk-nmea2000-emitter-cannon"]},"engines":{"node":"^20.3.0 || >=22"},"packageManager":"npm@12.0.2","devEngines":{"runtime":{"name":"node","version":"^22.22.2 || ^24.15.0 || ^26.0.0","onFail":"warn"},"packageManager":{"name":"npm","version":">=10.9.3","onFail":"warn"}},"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"contributors":[{"name":"Paul Willems","url":"original author of signalk-activecaptain-resources"}],"license":"MIT","homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","repository":{"type":"git","url":"git+https://github.com/NearlCrews/signalk-crows-nest.git"},"bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"funding":{"type":"buymeacoffee","url":"https://www.buymeacoffee.com/nearlcrews"},"dependencies":{"handlebars":"^4.7.9","lru-cache":"^11.5.2"},"devDependencies":{"@axe-core/playwright":"^4.13.0","@babel/core":"^8.0.5","@babel/preset-react":"^8.0.1","@babel/preset-typescript":"^8.0.1","@microsoft/eslint-formatter-sarif":"3.1.0","@playwright/test":"^1.63.0","@signalk/server-api":"^2.32.0","@types/express":"^5.0.6","@types/node":"^20.19.43","@types/react":"^19.3.0","@types/react-dom":"^19.3.0","@typescript/native":"npm:typescript@^7.0.2","@vitejs/plugin-react":"^6.1.1","babel-loader":"^10.1.1","c8":"12.0.0","cspell":"10.3.1","eslint":"^9.39.5","eslint-plugin-react":"^7.37.5","knip":"6.35.1","markdownlint-cli2":"0.23.2","neostandard":"^0.13.0","prettier":"3.9.6","publint":"0.3.24","react":"^19.3.0","react-dom":"^19.3.0","signalk-nearlcrews-ui":"0.11.1","tsx":"^4.23.13","typescript":"npm:@typescript/typescript6@^6.0.2","vite":"^8.3.0","webpack":"^5.111.0","webpack-cli":"^7.2.3"},"overrides":{"smol-toml":"1.8.0"},"allowScripts":{"esbuild@0.28.2":true},"gitHead":"4f9c3ca8c7f04a432662ebfb9c336ed4e9db81bf","_id":"signalk-crows-nest@0.18.0","_integrity":"sha512-VftE9MpDjNkz+YXjbFX3cM/qRh2qqy5lG/UWAmUzm0OVYX2bDXfLGJ2T/RagIFHXXgjuFyElcqgwi8leuZ3mVA==","_resolved":"/home/runner/work/signalk-crows-nest/signalk-crows-nest/artifacts/signalk-crows-nest-0.18.0.tgz","_from":"file:artifacts/signalk-crows-nest-0.18.0.tgz","_nodeVersion":"22.23.2","_npmVersion":"12.0.2","dist":{"integrity":"sha512-VftE9MpDjNkz+YXjbFX3cM/qRh2qqy5lG/UWAmUzm0OVYX2bDXfLGJ2T/RagIFHXXgjuFyElcqgwi8leuZ3mVA==","shasum":"4bf511440f35f7100b5f7e0d214979b5dd4ec5b4","tarball":"https://registry.npmjs.org/signalk-crows-nest/-/signalk-crows-nest-0.18.0.tgz","fileCount":441,"unpackedSize":2903476,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/signalk-crows-nest@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCmi+xHeM8M8V1qQc7LM9dGbu6Ww/83nuE6J8FbaMh5HAIhAIRnD6Gu8uisDs/5JbVfb6wnEZRx7A94CmXw5DP0J7KQ"}]},"_npmUser":{"name":"nearlcrews","email":"nearlcrewsx@proton.me"},"directories":{},"maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/signalk-crows-nest_0.18.0_1789394514517_0.892944863639209"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-24T00:47:00.914Z","modified":"2026-09-14T14:01:55.034Z","0.4.2":"2026-05-24T00:47:01.223Z","0.4.3":"2026-05-24T01:04:12.050Z","0.4.4":"2026-05-26T23:46:18.526Z","0.4.6":"2026-05-27T18:34:31.175Z","0.4.7":"2026-05-29T04:49:17.763Z","0.6.0":"2026-05-29T04:57:24.714Z","0.6.1":"2026-05-30T21:34:11.512Z","0.7.0":"2026-05-31T02:25:24.095Z","0.8.0":"2026-06-02T15:42:34.801Z","0.8.1":"2026-06-04T19:27:46.969Z","0.8.2":"2026-06-11T16:03:37.308Z","0.9.0":"2026-06-12T17:26:37.053Z","0.10.0":"2026-06-17T15:20:38.125Z","0.10.2":"2026-06-22T00:36:21.337Z","0.10.3":"2026-06-25T21:02:57.022Z","0.13.0":"2026-07-06T15:33:03.566Z","0.13.1":"2026-07-06T16:08:58.459Z","0.14.0":"2026-07-14T17:55:34.695Z","0.15.0":"2026-07-19T07:06:20.254Z","0.15.1":"2026-07-26T23:24:17.877Z","0.15.2":"2026-07-27T19:47:30.956Z","0.15.3":"2026-08-03T02:02:29.939Z","0.15.4":"2026-08-04T13:24:33.767Z","0.15.5":"2026-08-12T20:15:33.269Z","0.15.6":"2026-08-24T06:30:31.627Z","0.16.0":"2026-09-09T22:08:12.048Z","0.17.0":"2026-09-11T20:15:18.255Z","0.18.0":"2026-09-14T14:01:54.672Z"},"bugs":{"url":"https://github.com/NearlCrews/signalk-crows-nest/issues"},"author":{"name":"Nearl Crews","email":"NearlCrews@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/NearlCrews/signalk-crows-nest#readme","keywords":["signalk-node-server-plugin","signalk-plugin-configurator","signalk-category-chart-plotters","signalk-category-notifications","points-of-interest","notes","chart-overlay","activecaptain","openseamap","uscg","noaa","freeboard","proximity-alarm","route-corridor","marina","anchorage","hazard","tides","currents","ports","locks"],"repository":{"type":"git","url":"git+https://github.com/NearlCrews/signalk-crows-nest.git"},"description":"Imports points of interest from Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, USCG Local Notices to Mariners, NOAA ENC Direct, NOAA CO-OPS, the NGA World Port Index, and USACE as Signal K notes resources, with proximity, route-corridor, and bridg","contributors":[{"name":"Paul Willems","url":"original author of signalk-activecaptain-resources"}],"maintainers":[{"name":"nearlcrews","email":"nearlcrewsx@proton.me"}],"readme":"# Crow's Nest\n\n[![npm version](https://img.shields.io/npm/v/signalk-crows-nest.svg)](https://www.npmjs.com/package/signalk-crows-nest)\n[![npm downloads](https://img.shields.io/npm/dm/signalk-crows-nest.svg)](https://www.npmjs.com/package/signalk-crows-nest)\n[![CI](https://github.com/NearlCrews/signalk-crows-nest/actions/workflows/ci.yml/badge.svg)](https://github.com/NearlCrews/signalk-crows-nest/actions/workflows/ci.yml)\n[![ESLint](https://github.com/NearlCrews/signalk-crows-nest/actions/workflows/eslint.yml/badge.svg)](https://github.com/NearlCrews/signalk-crows-nest/actions/workflows/eslint.yml)\n[![SignalK Plugin CI](https://github.com/NearlCrews/signalk-crows-nest/actions/workflows/plugin-ci.yml/badge.svg)](https://github.com/NearlCrews/signalk-crows-nest/actions/workflows/plugin-ci.yml)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/NearlCrews/signalk-crows-nest/blob/main/LICENSE)\n[![node](https://img.shields.io/badge/node-%5E20.3%20%7C%7C%20%3E%3D22-brightgreen.svg)](https://nodejs.org)\n[![Buy Me a Coffee](https://img.shields.io/badge/Buy%20Me%20a%20Coffee-FFDD00?logo=buymeacoffee&logoColor=black)](https://www.buymeacoffee.com/nearlcrews)\n\nA points-of-interest importer for [Signal K](https://signalk.org): it pulls\nmarinas, ports, anchorages, hazards, aids to navigation, live safety notices,\ntide and current stations, locks, and chart hazards from eight marine data\nsources and publishes them as Signal K `notes` resources, with proximity,\nroute-corridor, and bridge air-draft alarms.\n\n> Built on the foundation of [`signalk-activecaptain-resources`](https://github.com/KvotheBloodless/signalk-activecaptain-resources)\n> by Paul Willems and the Signal K community.\n\n> The alarms and the imported data are advisory. They are not certified for\n> safety-of-life navigation: always cross-check against official charts and\n> your primary instruments.\n\n## What's new in 0.18.0\n\nThis release is configuration panel work. Nothing you have configured changes,\nno alarm changes when it sounds, and the data reaching the chart is unchanged.\nWhat changes is what the panel calls things and how it behaves under the\nkeyboard.\n\n- **The theme choices say what they follow.** The toggle at the foot of the\n  panel now reads Match Admin, Match device, Light, Dark, and Night. The two\n  automatic choices are named for the thing they track rather than for being\n  automatic, and the selector carries its \"Panel theme\" label. The themes\n  themselves are unchanged, and an explicit choice still persists across\n  visits.\n- **A refused save keeps its buttons reachable.** When the panel holds a save\n  back, which today means an unusable Overpass endpoint, Save and Discard stay\n  in the keyboard tab order and the reason is named on the status line beside\n  them. Both buttons used to leave the tab order, which dropped focus wherever\n  it was standing on one of them.\n- **Clearer save and age wording.** The save bar reports \"All changes saved\",\n  \"Unsaved changes\", \"Save sent to the server\", and \"Save to enable the\n  plugin\". In the source health table a relative age of a day or more counts in\n  numbers, so a source last reached yesterday reads \"1 day ago\".\n- **Focus lands on the heading it announces.** When a status poll clears the\n  recent errors while a \"Show source\" button holds focus, focus moves to the\n  Plugin status heading rather than to the section around it.\n\nSee the [v0.18.0 changelog entry](https://github.com/NearlCrews/signalk-crows-nest/blob/main/CHANGELOG.md#v0180)\nand [full release history](https://github.com/NearlCrews/signalk-crows-nest/blob/main/CHANGELOG.md).\n\n## What it does\n\nSignal K is an open marine data standard that streams a boat's navigation,\nenvironment, and AIS data over a single API. Crow's Nest is a Signal K\nserver plugin that fills the chart around that data: it imports points of\ninterest from eight sources, merges duplicates into one corroborated marker,\nand serves them as standard `notes` resources that chartplotters such as\n[Freeboard-SK](https://github.com/SignalK/freeboard-sk) display natively.\n\nIt is built for life on a boat: details are cached on disk so the chart\nkeeps working offline, refresh traffic is debounced and sized to each\nupstream's real update rate, and the same POI data drives three safety\nalarms (hazard proximity, hazards on the route ahead, and a bridge\nair-draft check).\n\n## Features\n\n- **Eight data sources, merged into one chart layer.** Garmin ActiveCaptain\n  is the base; the other seven are opt-in: OpenSeaMap (OpenStreetMap marine\n  data via the Overpass API), the USCG Light List of US Aids to Navigation\n  (US-only), NOAA ENC Direct (US authoritative wrecks, obstructions, and\n  underwater rocks), NOAA CO-OPS tide and current stations (US and\n  territories), USCG Local Notice to Mariners live safety notices (US-only),\n  the NGA World Port Index (worldwide), and USACE locks and dams (US inland\n  waterways). Cross-source duplicates merge into the ActiveCaptain base, and\n  the surviving note records every contributing source as a corroboration\n  signal.\n- **A broad point-of-interest overlay** as Signal K `notes` resources:\n  marinas, ports, anchorages, hazards, safety notices, businesses, boat\n  ramps, bridges, dams, ferries, inlets, locks, local knowledge,\n  navigational aids, airports, lighted and unlighted aids, daymarks, racons,\n  tide and current stations, wrecks, obstructions, and underwater rocks.\n- **Proximity hazard alarms** with hysteresis: a Signal K notification\n  fires when a Hazard point comes within a configurable radius and clears\n  once the vessel moves beyond it.\n- **Route-corridor hazard scan**: warns about hazards, bridges, and locks\n  on the active Course API route ahead, with along-track distance and ETA.\n- **Bridge air-draft check**: warns when a bridge's vertical clearance is\n  at or below the vessel air draft (`design.airHeight` or a configured\n  fallback) plus a safety margin, both as a proximity alarm as the vessel\n  nears a too-low bridge and as a clearance-specific route warning ahead.\n- **Rich point detail** rendered as plain-English HTML, with the\n  source-specific attribution credit (ODbL for OSM, CC0 for NOAA ENC, US\n  Government public domain for the USCG, NOAA CO-OPS, NGA, and USACE feeds,\n  Garmin ActiveCaptain for the base) published as a structured\n  `properties.attribution` field on every note, so a client UI can render it\n  in chrome rather than next to the POI text.\n- **A normalized detail schema for structured clients**: every note also\n  carries a presentation-neutral `properties.crowsNest` view of the same\n  detail alongside the HTML, documented in the\n  [notes-resource integration guide](https://github.com/NearlCrews/signalk-crows-nest/blob/main/docs/notes-resource-format.md), so a\n  richer chartplotter can render the sections natively and skip the HTML.\n- **Persistent, offline caching.** ActiveCaptain details and OpenSeaMap, NOAA\n  ENC, and USACE features live in 30-day on-disk stores. OpenSeaMap, NOAA ENC,\n  and USACE can rebuild previously visited markers from those stores after an\n  offline restart; ActiveCaptain can still resolve a known marker's persisted\n  detail, but a new ActiveCaptain list requires its upstream. The USCG Light\n  List index is sharded on disk and queried through an in-memory spatial tile\n  index, while Local Notice to Mariners, NOAA CO-OPS, and World Port Index keep\n  their complete datasets on disk and survive restarts.\n- **Refresh debounce per source**: each at-runtime source snaps the\n  viewport to a coarse tile and serves stale while revalidating, so a\n  Freeboard refresh burst on a stationary viewport reuses the cached\n  result rather than flooding the upstream.\n- **Filters to cut clutter**: a minimum-rating filter on ActiveCaptain, a\n  per-source earliest-year filter (`SORDAT` survey vintage on NOAA ENC,\n  `MODIFIED_DATE` on USCG, OSM element timestamp on OpenSeaMap), and a\n  freshness warning in the popup for an ActiveCaptain Hazard whose report\n  has not been confirmed in over two years.\n- **A React configuration panel** with a per-source health table, an\n  accordion of cards each with a live-status pill, an Alerts section, and\n  shared `signalk-nearlcrews-ui` controls and five themes, including a\n  red-preserving Night mode for the helm. The panel tour below describes what\n  each theme follows.\n\n## Screenshots\n\nPoints of interest from every source land on the chart as Signal K notes,\neach with a plain-English popup, and the whole plugin is configured from\none panel.\n\n| ActiveCaptain hazard                                                                                                                                                      | USCG Light List aid                                                                                                                                             | Configuration panel                                                                                                                               |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |\n| ![An ActiveCaptain hazard note open in Freeboard-SK, showing the rating, the review text, and a staleness warning](assets/screenshots/freeboard-activecaptain-hazard.png) | ![A USCG Light List buoy note open in Freeboard-SK, showing the light characteristic and the source citation](assets/screenshots/freeboard-uscg-light-list.png) | ![The light-themed Crow's Nest configuration panel, showing per-source live status and the data-source cards](assets/screenshots/admin-panel.png) |\n\n## Architecture\n\nCrow's Nest is one plugin built from focused modules:\n\n- **TypeScript 7 under strict flags.** The Node plugin compiles with `tsc`;\n  the React configuration panel bundles with webpack 5 as a Module\n  Federation remote that the Signal K admin UI loads. The panel uses\n  `signalk-nearlcrews-ui` for shared controls and token-driven themes.\n- **Inputs and outputs.** Every POI source is a self-contained input module\n  (ActiveCaptain, OpenSeaMap, USCG Light List, NOAA ENC Direct, NOAA CO-OPS,\n  USCG Local Notice to Mariners, NGA World Port Index, and USACE locks and\n  dams) and every consumer is an output module (the `notes` provider, the\n  proximity alarm, the route-corridor scan, and the bridge air-draft check),\n  each registered on one line in the plugin entrypoint.\n- **One aggregate source.** A registry fans each chart request out to every\n  enabled input, namespaces the ids, unions the results, records per-source\n  health, and runs the dedupe pass that merges duplicates within a\n  configurable radius (default 150 feet).\n- **Polite HTTP.** Queued, throttled clients with retry and `Retry-After`\n  handling for the high-volume sources; conditional GET for the bulk-download\n  feeds (USCG Light List, Local Notice to Mariners, and NOAA CO-OPS);\n  Overpass fallback mirrors so a single instance outage does not take the\n  source offline; and a US-waters gate that skips outbound HTTP on the\n  US-only feeds when the vessel is elsewhere.\n- **Tested on `node:test`** via `tsx`, with ESLint 9 and neostandard.\n\nSee `CLAUDE.md` for the full module map.\n\n## Signal K paths\n\nCrow's Nest is a well-behaved Signal K citizen: it reads a few `vessels.self`\npaths and the Course API, and it writes only `notes` resources and\nnotifications under its own branch. All values are SI units (position in\ndecimal degrees, distances and heights in meters).\n\n**Reads (from `vessels.self`):**\n\n- `navigation.position`: the US-waters gate on the US-only feeds and the\n  vessel position for proximity, route, and bridge air-draft scans. Chart\n  resource requests supply their own bounding box or search center.\n- `navigation.speedOverGround`: ETA math in the route-corridor scan.\n- `design.airHeight`: the vessel air draft for the bridge-clearance check\n  (a configured fallback is used only when this path is absent).\n- The **Course API** active route: the route-corridor hazard scan reads the\n  active route to look ahead along the planned track.\n\n**Writes:**\n\n- `resources/notes`: every imported POI is published as a Signal K `note`\n  resource (with the source-agnostic structured detail on\n  `properties.crowsNest` alongside the HTML description) so chartplotters such\n  as Freeboard-SK can display it.\n- `notifications.navigation.crowsNest.hazard.<id>`: proximity hazard alarms.\n- `notifications.navigation.crowsNest.route.<id>`: route-corridor hazard\n  alarms (including the too-low-bridge verdict).\n- `notifications.navigation.crowsNest.bridgeClearance.<id>`: bridge\n  air-draft alarms.\n\nThe plugin also serves an admin-gated `GET` status endpoint.\n\n## Requirements\n\n- [Signal K server](https://github.com/SignalK/signalk-server) 2.x. The\n  `notes` layer does not require a GPS because the chartplotter supplies its\n  viewport. A `navigation.position` source on `vessels.self` is required for\n  the position-driven alarms and lets the plugin avoid US-only requests when\n  the vessel is clearly outside US waters.\n- Node.js 20.3 or newer, or 22 or newer. Node 21 is excluded, because a\n  dependency does not support it.\n- A chartplotter that consumes Signal K `notes` resources. Freeboard-SK\n  is the reference consumer; any client that reads `notes` resources will\n  see the markers, including [Binnacle](https://github.com/NearlCrews/signalk-binnacle),\n  which renders the structured detail natively.\n- The configuration panel needs Signal K admin UI 2.26.0 or newer. On\n  older servers the plugin still works and falls back to the standard\n  settings form.\n\n## Installation\n\nInstall from the Signal K admin UI under **AppStore, then Available**, or\nfrom npm:\n\n```bash\ncd ~/.signalk\nnpm install signalk-crows-nest\n```\n\nFrom source:\n\n```bash\ngit clone https://github.com/NearlCrews/signalk-crows-nest.git\ncd signalk-crows-nest\nnpm install\nnpm run build\nln -s \"$(pwd)\" ~/.signalk/node_modules/signalk-crows-nest\n```\n\n## Configuration\n\nIn the Signal K admin UI, open **Server, then Plugin Config**, find\n\"Crow's Nest\", and enable the plugin. The defaults work for an\nActiveCaptain-only setup; opt in to the other sources from their cards.\nThe panel has these areas, from the top down:\n\n1. **Plugin status section**: a source health table reading `Reachable`,\n   `Unreachable`, or `Not yet contacted` for each enabled source, with the last\n   successful upstream list-fetch time and a \"checked Ns ago\" freshness note.\n   Recent errors appear below it, and each one carries its own\n   \"Show <source>\" button that expands the Data sources section, scrolls to\n   the source the error came from, and moves focus there. Local cache and index\n   reads do not count as proof that an upstream is reachable.\n2. **Data sources accordion** with one collapsible card per source\n   (ActiveCaptain, OpenSeaMap, USCG Light List, NOAA ENC Direct, NOAA\n   CO-OPS, USCG Local Notice to Mariners, NGA World Port Index, and USACE\n   locks and dams). Each card's body groups its options into bordered\n   fieldsets: import layers, refresh and freshness, filters (when present),\n   and merge with ActiveCaptain. In brief, per card:\n   - **ActiveCaptain** (always on): 13 POI-type toggles, a minimum-rating\n     filter, the detail freshness window (default 24 hours), and the viewport\n     refresh window (default 30 seconds). Selecting no POI types hides the\n     chart notes layer; enabled safety alerts still request the hazard types\n     they require.\n   - **OpenSeaMap** (off by default): four seamark feature-group toggles, an\n     earliest-year filter, the Overpass endpoint with optional fallback\n     mirrors, and the viewport refresh window (default 10 minutes).\n   - **USCG Light List** (off by default, US-only): the background refresh\n     period in hours (default 24) and an earliest-year filter.\n   - **NOAA ENC Direct** (off by default, US-only): wreck and obstruction\n     layer toggles (on), an underwater-rocks toggle (off, heavy), the chart\n     scale band, an earliest survey-year filter, and the viewport refresh\n     window (default 30 minutes).\n   - **NOAA CO-OPS** (off by default, US and territories): tide and\n     current-meter station family toggles (both on) and the background\n     refresh period in hours (default 24).\n   - **USCG Local Notice to Mariners** (off by default, US-only): the\n     background refresh period in seconds (default 900, 15 minutes).\n   - **NGA World Port Index** (off by default, worldwide): the background\n     refresh period in hours (default 24).\n   - **USACE locks and dams** (off by default, US-only): a locks toggle\n     (on), a dams toggle (off, heavy), and the viewport refresh window\n     (default 30 minutes).\n\n   Every card except ActiveCaptain also carries a merge-with-ActiveCaptain\n   toggle (on by default) and its per-source merge radius. For every\n   earliest-year filter, `0` means off; positive values below 1900 normalize\n   to 1900.\n\n3. **Alerts section** (collapsed by default; expand it to configure an\n   alarm): the proximity-alarm, route-corridor scan, and bridge air-draft\n   check controls, each in its own fieldset with an opt-in toggle and its\n   numeric settings.\n4. **Theme toggle** at the foot of the panel: Match Admin, Match device,\n   Light, Dark, or a red-preserving Night mode for night vision at the helm.\n   Match Admin is the default for a fresh profile and follows an explicit host\n   theme, falling back to Light. Match device follows the operating-system\n   color scheme, and an explicit choice persists across visits.\n\nPer-source enable toggles live on each card's header, alongside the\ndisclosure chevron. Each card carries a small live-status pill on the\nheader: `✓ Healthy` after a successful upstream list fetch, `Idle` before the\nfirst request or during an intentional skip, `! Fetching` when a slow request\ncontinues after the five-second aggregate deadline, and `× Unreachable` after a\nfailure. An idle pill names its reason when it has one, as in\n`Idle: outside US waters`. Expanding a card puts the longer detail under the\nheader as\nvisible text, such as \"17 POIs in last fetch, 5 minutes ago\".\nDisabled cards show a \"Disabled.\" prefix on their summary so an off source\nnever reads as live. Every numeric input clears cleanly mid-edit. Saving\napplies immediately; the plugin rebuilds its runtime and in-memory viewport\ncaches while retaining the on-disk data used for offline operation.\n\n## Documentation\n\n- [Troubleshooting](https://github.com/NearlCrews/signalk-crows-nest/blob/main/docs/troubleshooting.md)\n- [Development guide](https://github.com/NearlCrews/signalk-crows-nest/blob/main/docs/development.md)\n- [Notes-resource integration guide](https://github.com/NearlCrews/signalk-crows-nest/blob/main/docs/notes-resource-format.md): the\n  wire format and the normalized detail schema for client developers\n- Architecture notes in `CLAUDE.md`: project layout and module map\n- The changelog in `CHANGELOG.md`\n- [Contributing](https://github.com/NearlCrews/signalk-crows-nest/blob/main/.github/CONTRIBUTING.md)\n- [Security policy](https://github.com/NearlCrews/signalk-crows-nest/blob/main/.github/SECURITY.md)\n\n## Development\n\nThis project targets Node 20.3 or newer, or 22 or newer (`engines.node` is\n`^20.3.0 || >=22`, which excludes Node 21), and develops against\n`@signalk/server-api` 2.32.0 or newer, with TypeScript 7 and the exact shared\nUI package `signalk-nearlcrews-ui` pinned in `package.json` (development only).\nThe full local toolchain supports Node 22 from 22.22.2, Node 24 from 24.15.0,\nand Node 26, while the published plugin runtime keeps its Node 20.3\ncompatibility floor.\n\n```bash\ngit clone https://github.com/NearlCrews/signalk-crows-nest.git\ncd signalk-crows-nest\nnpm install          # install dependencies\nnpm run build        # compile the plugin and bundle the panel\nnpm test             # node:test suite via tsx\nnpm run typecheck    # type-check the plugin, the panel, and the tests\nnpm run lint         # code, Markdown, and spelling checks\nnpm run lint:fix     # lint and auto-fix\nnpm run verify       # full local verification without cross-browser tests\nnpm run verify:release # full verification and the cross-browser matrix\nnpm run clean        # remove dist/ and the panel build artifacts\n```\n\nRun `npm run verify` before committing and `npm run verify:release` before a\nrelease.\nSee the\n[development guide](https://github.com/NearlCrews/signalk-crows-nest/blob/main/docs/development.md)\nfor the full workflow.\n\n## License\n\nMIT: see the `LICENSE` file for the full text. The software is provided\n\"AS IS\", without warranty of any kind. Treat the imported data and the\nalarms as advisory, and always carry independent means of navigation.\nBundled dependency licenses are listed in\nthe `THIRD_PARTY_NOTICES.md` file.\n\n## Acknowledgments\n\nBuilt on the foundation of [`signalk-activecaptain-resources`](https://github.com/KvotheBloodless/signalk-activecaptain-resources)\nby Paul Willems and the Signal K community. Full credit to the original\nauthor for the initial plugin that imports ActiveCaptain points of\ninterest and exposes them as Signal K resources. Crow's Nest is written\nand maintained by [Nearl Crews](https://github.com/NearlCrews).\n\n- [Signal K Project](https://signalk.org/) for the open marine data\n  standard\n- [Garmin ActiveCaptain](https://activecaptain.garmin.com) for the\n  community point-of-interest database\n- [OpenStreetMap](https://www.openstreetmap.org) contributors and\n  [OpenSeaMap](https://www.openseamap.org) for the open marine data,\n  served through the [Overpass API](https://overpass-api.de) and used\n  under the [Open Database License](https://opendatacommons.org/licenses/odbl/)\n- The [US Coast Guard Navigation Center](https://www.navcen.uscg.gov)\n  for the [Light List](https://www.navcen.uscg.gov/light-lists) of US\n  Aids to Navigation and for the Local Notice to Mariners feeds, US\n  Government public domain\n- The [NOAA Office of Coast Survey](https://nauticalcharts.noaa.gov)\n  for [ENC Direct](https://encdirect.noaa.gov) authoritative US chart\n  hazard data, published under CC0\n- [NOAA CO-OPS](https://tidesandcurrents.noaa.gov) for the tide and\n  current station metadata, US Government public domain\n- The [National Geospatial-Intelligence Agency](https://msi.nga.mil) for\n  the World Port Index (Pub 150), US Government public domain\n- The [US Army Corps of Engineers](https://www.usace.army.mil) for the\n  navigation lock data and the National Inventory of Dams, US Government\n  public domain\n\nCrow's Nest pairs well with sibling plugins such as\n[`signalk-nmea2000-emitter-cannon`](https://github.com/NearlCrews/signalk-nmea2000-emitter-cannon)\nand [`signalk-binnacle`](https://github.com/NearlCrews/signalk-binnacle).\n\n## Support\n\nFind this plugin useful? You can support its continued development by\n[buying me a coffee](https://www.buymeacoffee.com/nearlcrews).\n\n- [Report a bug](https://github.com/NearlCrews/signalk-crows-nest/issues/new?template=bug_report.yml)\n- [Request a feature](https://github.com/NearlCrews/signalk-crows-nest/issues/new?template=feature_request.yml)\n- [Security issues](https://github.com/NearlCrews/signalk-crows-nest/blob/main/.github/SECURITY.md)\n","readmeFilename":"README.md"}