{"_id":"@calebcall/camera-ui-amcrest","_rev":"18-0707c983eb3f5fe45a7391d61145833c","name":"@calebcall/camera-ui-amcrest","dist-tags":{"latest":"1.9.1"},"versions":{"1.0.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.0.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/plugins","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.0.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/plugins/tree/main/camera-ui-amcrest#readme","bugs":{"url":"https://github.com/calebcall/plugins/issues"},"os":[],"cpu":[],"dist":{"shasum":"f08fa93e6dca83579abb57bfdf288cd676caaafb","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.0.0.tgz","fileCount":4,"integrity":"sha512-WZx40fO0wXWwuWQ7GTcV4XajejtDREpRL7FmQkmlPuejOLUVVs9B3INdtyrihGQnVenYHaUeQ50TKOPf4JGPjw==","signatures":[{"sig":"MEUCIQCatIZBwZw83eU3BCV/rcP8PuT9CVpmdY1pjElcIFwKUAIgKSDV3X7h36/VSWMKQTT10baZe4dQKGRK12Ny32w0lGk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42459},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.12"},"gitHead":"c4ff38a495eed94164ee6bcbec74bbb1e199ab46","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"calebcall","email":"calebcall@pm.me"},"repository":{"url":"git+https://github.com/calebcall/plugins.git","type":"git","directory":"camera-ui-amcrest"},"_npmVersion":"11.16.0","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.0.0_1784410576621_0.074557739927956","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@calebcall/camera-ui-amcrest","version":"1.0.1","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/plugins","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.0.1","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/plugins/tree/main/camera-ui-amcrest#readme","bugs":{"url":"https://github.com/calebcall/plugins/issues"},"os":[],"cpu":[],"dist":{"shasum":"398e8b85b0613db2778d7b783cafe9904ff03b5e","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.0.1.tgz","fileCount":4,"integrity":"sha512-K41IBpFpMuCePmtnV2jsI871WJh4Un5JSi2sjmDXlcYgQ03vzfeztofU/1HilllbI8sLky8Ubqj5diItPQrTUQ==","signatures":[{"sig":"MEQCIGNo5wPdWRUWh4v7rIeVpjB4BuyOPNWEE0ES5W/DGZK5AiBrbGuzTGoNlOte4j+zcM4YH61aE+Krd/UO6O4G9KoPCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43265},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.12"},"gitHead":"67d74c4c0b53cafe83000279088eec3fe8d824bd","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"calebcall","email":"calebcall@pm.me"},"repository":{"url":"git+https://github.com/calebcall/plugins.git","type":"git","directory":"camera-ui-amcrest"},"_npmVersion":"11.16.0","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.0.1_1784413660121_0.015842770167174614","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@calebcall/camera-ui-amcrest","version":"1.0.2","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/plugins","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.0.2","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/plugins/tree/main/camera-ui-amcrest#readme","bugs":{"url":"https://github.com/calebcall/plugins/issues"},"os":[],"cpu":[],"dist":{"shasum":"352cd9e7f8971bc819e8ef5eee8cf46794321dab","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.0.2.tgz","fileCount":4,"integrity":"sha512-S2/qPRC+5cg7JI7RKxgpb6ynBEkJlRwh1XgSO8iIOVwVKk2dxkdm8jMy5GcyJh/2vxarIhjNOZUhZ1qHfs8Xag==","signatures":[{"sig":"MEUCIAXii9wimDGUcbOK/hNiVMiAwvuVttiKRWI4c7jFRTQTAiEAown3kqL6pU6LpQUDtgz9C7a2mk3KEN269jlD5Hqq+NM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44689},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.15"},"gitHead":"2bc4e81f2d0cd8849c396a27e0a44b74edf5b608","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"calebcall","email":"calebcall@pm.me"},"repository":{"url":"git+https://github.com/calebcall/plugins.git","type":"git","directory":"camera-ui-amcrest"},"_npmVersion":"11.16.0","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.0.2_1784427958032_0.27222381401017226","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@calebcall/camera-ui-amcrest","version":"1.0.3","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.0.3","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"82d6d62ec4ff8488b49fa8bbb152447560956667","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.0.3.tgz","fileCount":5,"integrity":"sha512-SwTmbckkU2qmymjqUkS+qPGE88r4EEOVwb3d6jdHKBAmkZcyhAy73l337/72ik4fLBbBpDYGkdS0aqyVgo9UKQ==","signatures":[{"sig":"MEUCIQCCZ3jUG/SykGHgvyJ2Bl8y45eUAyxii/RI0Gh93vYpOQIgT51OpgnJsYsh3xEyi3suxCb0ePnU9zP6+c8BI3j4S9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45785},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.15"},"gitHead":"2a1afc2f3138f9e4258adcd370de640aa4dc52df","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"calebcall","email":"calebcall@pm.me"},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"11.13.0","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.16.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.0.3_1784670389212_0.3155138664168393","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@calebcall/camera-ui-amcrest","version":"1.0.4","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.0.4","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"c4af08743db377505b5202190fc18025903c8223","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.0.4.tgz","fileCount":5,"integrity":"sha512-K/EKJ4g62He7Zdl8aVbrvp1CL8FmTOttpFiJ0IT3RW7GYKKKMirnwVFHuekLbBke2zveBtQuQp6NXqgeY2WOVg==","signatures":[{"sig":"MEUCIFykRs8DVWBqm5XTNYekOImXoE6hhbvGqeeenx0paMpNAiEAoLFTfiGoNoWSgL2jZKRKNC1EIdZmpld00rby07wbhD0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":45785},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.15"},"gitHead":"b0cad355295001cb277060084dd2fc7bb9272d37","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.1","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"22.23.1","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.0.4_1784995534962_0.3609442341432072","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.1.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.1.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"ed3883b2ce094f3cfa947de2f7d2bb233e23489b","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.1.0.tgz","fileCount":5,"integrity":"sha512-WiaQKkwwDv8TrHtnrN9xpQQfaevK6eLlkyiqOFliBYRufKk1D9pfgGpX1eXI4ioVeUICSkjvz4OAjLDePIFjIA==","signatures":[{"sig":"MEUCIQDrky8RHVY9xvx7b/Jvf2SEropRGENK/MerQUmrlGPP1AIgQxy5eWOh+4n+0wM8VPRLiuzyibhAsC7DzQDo2m+JL44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":46664},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.15"},"gitHead":"0b24f0fbe1ef9f223e88b70b908add93ccaa85b1","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.1","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"22.23.1","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.1.0_1785107321722_0.11680561607428896","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@calebcall/camera-ui-amcrest","version":"1.1.1","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.1.1","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"ab313d0db4b2234d72ce8ad152a16ac7d2bc0a6b","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.1.1.tgz","fileCount":5,"integrity":"sha512-H5Id2J53j7qXtq35gow47LN3PiDJLTYGDehxuZPrgmzBodxmBQj8jzwYXWKSScGcfaqJ0nT6mt259OYPdhJhcg==","signatures":[{"sig":"MEUCIQCvPTFz/k0I7N1vYCYt7EjGuKdsNVRGkf3F7aa5JjI1rwIgfdf+oDwi3GYJ/iApSRwFuOBp6rutL8RFahzEWDlk7WY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":47337},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.15"},"gitHead":"226b51991d25cf3d1688eeb473527720b5b070d1","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.1","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"22.23.1","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.1.1_1785116224546_0.5663107357474566","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.2.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.2.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"3c4f5ca95846e6d8c33195e73053d4f22199287f","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.2.0.tgz","fileCount":5,"integrity":"sha512-ETycBaIbmaWgjBJ0tEgTVZ4Pai5aGIkOxLwjR/kfWcQX/Wwimn4Bchu+CeoGFkAezIISy1Kqzc7bs3FjJpo3lw==","signatures":[{"sig":"MEUCIDO8VPY4NJo3tcHGpuCf34q3epGD9tQPPifmJ+u4HuW+AiEA16MBtyv1icEwZjC1yO06C9X91tiP88Zc47ibcEVtDqA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":50317},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.15"},"gitHead":"b9a0baec383b165b1fa77dae9952f4e3a5d48c8e","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.1","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"22.23.1","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.2.0_1785119852624_0.18381406879154083","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.3.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.3.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"47b2a5223bb75d266cbef3c58721f96740a09c70","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.3.0.tgz","fileCount":5,"integrity":"sha512-Sr0xn8ISwCwWNMtxRNKEBYpCYVKl57n6AMDKsuR/dvULssoM2Vi0aBnC+ukUsrhxIKFoEBaWiC9WxO+pADMIHA==","signatures":[{"sig":"MEUCIHA0nGTZNy6NrzE15lUAcySJXJhxQR/1Y41/4DedfS8VAiEA9cwuzI5ClPjizoa7HVG3unZcwr0JdukEaNYLIDAHbKs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":51475},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=22.0.0","camera.ui":">=2.0.15"},"gitHead":"7162967533b02782573559dea935c157869ff2e7","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.1","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"22.23.1","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.3.0_1785123915340_0.14146537475887566","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.4.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.4.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"0f37ba0c10c8179dde06fcd3da8ff1455ddf8c4d","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.4.0.tgz","fileCount":5,"integrity":"sha512-gB1KI+0MDkFDGaSRP9n3T0JvuoP+1qMLfYDVMVcAMVpS1RWbP/WM19cbkabTeNsi7qnGkouBJu2gi6WzjU670w==","signatures":[{"sig":"MEUCIAKdw4HgYXfkioqDqzcESBDVXSx8McqOpZCJTxZJodTFAiEAlqvK1nsMFl4zan3SqU3mvMWQHucfv5727VdpwmWG6ZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":61065},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.0.15"},"gitHead":"598ddd8d5d4ab65e67b3bb5d31fcc33680b64f5e","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.4.0_1785372263060_0.9602026165655657","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.5.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.5.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"ba8987c0ad25975b5796ff06edd184b4d9f87d60","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.5.0.tgz","fileCount":5,"integrity":"sha512-cobDhjTCUeonxF2SNJmO0Ng56W8dsrqvuQOJZ9Iak5VSYVWJm1zNzTJCStIKUSGbWK38uviRL6OlAqhCCv8C5A==","signatures":[{"sig":"MEUCIQCQ72Ls+8z0Yziob22PuP9QnWsu4j4mgcsKAGo6OW2CqAIgBWqQJAQ3S3GFXVqKtTmQH9hFt2scUbazBwwwv5+eaT4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":67812},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.0.15"},"gitHead":"ddfa33ae8d3e586cc4dfb32f76249c0596fd6fb7","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.5.0_1785418114494_0.9475484133040177","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@calebcall/camera-ui-amcrest","version":"1.5.1","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.5.1","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"422f45b80cb4f292a35263d4e9aebc1cf6eee0ab","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.5.1.tgz","fileCount":5,"integrity":"sha512-V6319pfFNteP6qhs6FjERXuZ9LDQNTG6RSi4kPJzUGtHb6Wv6a0TDloX86R9thg5AUh9NdvKJEuBqrqb70Fpyw==","signatures":[{"sig":"MEQCIEPCmQfZWTL4ofm9R71J540ZrjgTtBPYjQONuTTCvEsuAiBXhMHfV/8SVi47lwsFvKqLrdP858VJcPPd7pVt1Tkb/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69467},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.0.15"},"gitHead":"bc12d4d5233974ea6cb20e7bbffab0076b650ddb","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"cameraui":{"protocolLevel":1},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.5.1_1785532910597_0.45228817907619323","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.6.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.6.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"dc789df0c8c5d844c9324cf7ed88167db01f649b","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.6.0.tgz","fileCount":5,"integrity":"sha512-j2PwK8Jse+U2e7maP0N6XOu+XtL6mPpPZkeRqhvR/e6kZhuihhGwd21/0teIJjBlXLVuz4z5uIcuwo/7Mm/mlw==","signatures":[{"sig":"MEUCIAwFOgg3caZTaWx7SHpRfxurEO/IebgRQxx1gRhWOebaAiEAu/XLg139h2+r60dqCUR9qHyBdGVplgCX6mo0yxr13xU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72039},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.0.24"},"gitHead":"8c0ea0d4dbec5b80b1f1c973e36ddc5aaefcd9b2","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"cameraui":{"protocolLevel":1},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.6.0_1785556726654_0.49063095233976317","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@calebcall/camera-ui-amcrest","version":"1.6.1","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.6.1","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"7756cf491112e8f176c500bc0e0dedf12e54037d","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.6.1.tgz","fileCount":5,"integrity":"sha512-3+M0NE7K+/e/VEqA/juRwC36qwcOfuNNLbrpn/xwRAvmEroYkkx0HZgOOdipFdbiJBHhmsc7/ha3RF6Nwxy5Ng==","signatures":[{"sig":"MEYCIQDFd6UqEGZuirlyXRVroAEpGaxFO1CLgLnnv7STapDpigIhAO8c/R4ALoZ+4TwNbHPxQAUIsE3JuDCs6WcJ3mDzgxby","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":72682},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.0.24"},"gitHead":"910b90386fdde63b5f2a9d3813d71593b6e1127c","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run typecheck && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","typecheck":"tsc -p tsconfig.test.json","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"cameraui":{"protocolLevel":1},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.6.1_1785589166564_0.09532246965943192","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.7.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.7.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"6ae67596c3f8f8e4d93ba18f42a9fed320dbaa6e","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.7.0.tgz","fileCount":5,"integrity":"sha512-8w7Vjy891RGc2ZBngMku/5eKDEt32lkCnu7ANl8t7uBT8b3GLNxgZSxJHzITbTJ6D3wElcVRaf+gICwtq3lPAA==","signatures":[{"sig":"MEYCIQDzPqkpfhmQ/GMigVmgBNaSjlTHl6AXk6tndp7+b0v0tgIhANnQM7zPwuImwfqZxSmD7gVRIssAB/CvKqPC0CMNRw60","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":76114},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.0.24"},"gitHead":"25748c3df55fe90cd1db2405b6da9ad552748e08","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run typecheck && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","typecheck":"tsc -p tsconfig.test.json","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"cameraui":{"protocolLevel":1},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.7.0_1786170715962_0.7066170914417387","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.8.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.8.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"d9c7fc3a40cd50f0db0eaaab4d466c29075529c0","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.8.0.tgz","fileCount":5,"integrity":"sha512-cCFbiNSSB987kaMM7f1ykGvmU+zYagyUeQygGmbAGMGiN4pDiRZ5kYoCTD1xM7Kx+bDkh26fIMEG9hSn4gWKPw==","signatures":[{"sig":"MEQCIBtkQtiwP6AABjeqyYX+HwNrWdvqY8z4V6a5dtSsE4yzAiAWxabaQcKObWRU8a2SKTmkegFg3raxs/r1NZzGXP2NzQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":77557},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.0.24"},"gitHead":"c955a284a6198661b02ac7ca471b238474bd29b6","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run typecheck && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","typecheck":"tsc -p tsconfig.test.json","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"cameraui":{"protocolLevel":1},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.18.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.8.0_1786178678886_0.8967533413762554","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@calebcall/camera-ui-amcrest","version":"1.9.0","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"author":{"url":"https://github.com/calebcall/camera-ui-amcrest","name":"calebcall"},"license":"MIT","_id":"@calebcall/camera-ui-amcrest@1.9.0","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"os":[],"cpu":[],"dist":{"shasum":"01847457cc368312ae0a8063a6af7e2f5b9a35c0","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.9.0.tgz","fileCount":5,"integrity":"sha512-hpXmzvwTJ6GogctQaKRCm96EcPCZMyyWM5A6Jn4bJKiuwH6jiL7okgUv9o5nlfcEoT+/iAFeDvNgX4+EBFp0Xg==","signatures":[{"sig":"MEUCIQDtQdgd1zo1hu7DOqZEiXe8GGRUUYqUVr7tanAXzm4ZmwIgK0gCMbGLKq7pTAoO7p4DJflFEX8c54Or0c/IQAhdVrQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":91051},"main":"./dist/index.js","type":"commonjs","engines":{"node":">=24.0.0","camera.ui":">=2.1.10"},"gitHead":"4900e24f2cedad77f68b3ef21ddb04af7ba9e319","scripts":{"lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run typecheck && npm run test && npm run build && cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","update":"updates --update ./","typecheck":"tsc -p tsconfig.test.json","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts","bundle:dev":"npm run build && cross-env MODE=development cui bundle","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","watch-events":"node --import tsx scripts/watch-events.ts","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","install-updates":"npm i --save --force"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"cameraui":{"protocolLevel":2},"repository":{"url":"git+https://github.com/calebcall/camera-ui-amcrest.git","type":"git"},"_npmVersion":"12.0.2","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","directories":{},"displayName":"Amcrest","_nodeVersion":"24.20.0","allowScripts":{"node-av@6.2.0-beta.7":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/camera-ui-amcrest_1.9.0_1788560167150_0.6327584935077188","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"displayName":"Amcrest","name":"@calebcall/camera-ui-amcrest","version":"1.9.1","description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","author":{"name":"calebcall","url":"https://github.com/calebcall/camera-ui-amcrest"},"type":"commonjs","main":"./dist/index.js","scripts":{"build":"rimraf dist && tsc","bundle":"npm run format && npm run lint && npm run typecheck && npm run test && npm run build && cui bundle","bundle:dev":"npm run build && cross-env MODE=development cui bundle","format":"prettier --write \"src/\" --ignore-unknown --no-error-on-unmatched-pattern","install-updates":"npm i --save --force","lint":"eslint --fix .","test":"node --import tsx --test \"src/**/*.test.ts\"","typecheck":"tsc -p tsconfig.test.json","prepublishOnly":"node -e \"if(!process.env.SAFE_PUBLISH){console.error('Error: Please use @camera.ui/cli to publish the plugin');process.exit(1)}\"","publish:alpha":"npm i --save --force && npm run bundle && cui publish --alpha","publish:beta":"npm i --save --force && npm run bundle && cui publish --beta","publish:latest":"npm i --save --force && npm run bundle && cui publish --latest","update":"updates --update ./","watch-events":"node --import tsx scripts/watch-events.ts","zone-fuzz":"node --import tsx scripts/zone-fuzz.ts"},"engines":{"camera.ui":">=2.1.10","node":">=24.0.0"},"os":[],"cpu":[],"license":"MIT","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","repository":{"type":"git","url":"git+https://github.com/calebcall/camera-ui-amcrest.git"},"allowScripts":{"node-av@6.2.0-beta.7":true},"cameraui":{"protocolLevel":2},"gitHead":"5c7ae4d4fd1f495ce8af28cdc83cdf34aa77162a","_id":"@calebcall/camera-ui-amcrest@1.9.1","_nodeVersion":"24.20.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-1QjLuXdMhojBHf94rWxAX/g89gL8FdeIYgSxCfRXNL4IumwNh9yCXwovCwrdCevfhPFYb0KoeSF8JZoi83cIJQ==","shasum":"9e4afb56e9fb6de911a4afed2519a6be593c143e","tarball":"https://registry.npmjs.org/@calebcall/camera-ui-amcrest/-/camera-ui-amcrest-1.9.1.tgz","fileCount":5,"unpackedSize":93097,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@calebcall%2fcamera-ui-amcrest@1.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDCcrgFwC6YauBfMjIdpuwGvGdxsrEznexS66PAc2QnwwIgPnLJmP8M0g4sjV40xFpVvgXhA49Tli3/LfJnKxiSpS8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8190232e-54ae-4271-b655-6a750471e525"}},"directories":{},"maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/camera-ui-amcrest_1.9.1_1788561483003_0.781015195218483"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-18T21:36:16.455Z","modified":"2026-09-04T22:38:03.464Z","1.0.0":"2026-07-18T21:36:16.769Z","1.0.1":"2026-07-18T22:27:40.248Z","1.0.2":"2026-07-19T02:25:58.187Z","1.0.3":"2026-07-21T21:46:29.372Z","1.0.4":"2026-07-25T16:05:35.107Z","1.1.0":"2026-07-26T23:08:41.864Z","1.1.1":"2026-07-27T01:37:04.694Z","1.2.0":"2026-07-27T02:37:32.799Z","1.3.0":"2026-07-27T03:45:15.814Z","1.4.0":"2026-07-30T00:44:23.236Z","1.5.0":"2026-07-30T13:28:34.635Z","1.5.1":"2026-07-31T21:21:50.734Z","1.6.0":"2026-08-01T03:58:46.797Z","1.6.1":"2026-08-01T12:59:26.698Z","1.7.0":"2026-08-08T06:31:56.114Z","1.8.0":"2026-08-08T08:44:39.023Z","1.9.0":"2026-09-04T22:16:07.287Z","1.9.1":"2026-09-04T22:38:03.145Z"},"bugs":{"url":"https://github.com/calebcall/camera-ui-amcrest/issues"},"author":{"name":"calebcall","url":"https://github.com/calebcall/camera-ui-amcrest"},"license":"MIT","homepage":"https://github.com/calebcall/camera-ui-amcrest/tree/main#readme","keywords":["camera-ui-plugin","amcrest","dahua","doorbell","ptz","discovery"],"repository":{"type":"git","url":"git+https://github.com/calebcall/camera-ui-amcrest.git"},"description":"Integrates Amcrest and Dahua-compatible IP cameras, doorbells and PTZ cameras into camera.ui via their native CGI API, with discovery, live streaming, two-way audio, PTZ, and motion, object, audio and doorbell events.","maintainers":[{"name":"calebcall","email":"calebcall@pm.me"}],"readme":"# Amcrest\n\nAmcrest and Dahua-compatible camera integration for camera.ui. Provides camera discovery, live streaming, two-way audio, PTZ control, motion, object, audio and doorbell events, and tamper/fault state via the native Amcrest/Dahua CGI API.\n\n## Requirements\n\n- **camera.ui 2.1.10 or newer.** Server 2.1.6 replaced the single detection-zone list with one list per purpose (motion, object, privacy, alert, lines), and 2.1.10 settled that shape by dropping the interim include/exclude filter. This plugin targets the SDK generation that came with it, so on an older server its zones — and, on servers before 2.0.24, its sensors — would not work. The floor turns that into a clear message at install time instead of a feature that silently never appears.\n- **Node 24 or newer.** `@seydx/rtsp`, used for RTSP relay and talkback, ships syntax Node 22 cannot parse.\n\n## Supported devices\n\n- Standard Amcrest IP cameras (main/sub stream, motion and object detection).\n- Amcrest doorbells (e.g. AD110/AD410-style models), including doorbell press events and two-way audio.\n- PTZ-capable Amcrest cameras (pan, tilt and zoom).\n- Other Dahua-compatible (OEM) devices that expose the same CGI/RTSP interface.\n\nNVR-attached channels are not supported in this release — see [Known limitations](#known-limitations--v2) below.\n\n## Features\n\n- **Live view & snapshot** — native RTSP streaming and CGI snapshot capture, no ONVIF required.\n- **Two-way audio** — talkback over the device's native audio path. Amcrest-branded devices use the AAC path; Dahua-branded doorbells use G.711A (see [Known limitations](#known-limitations--v2)).\n- **Events** — motion, object detection (person/vehicle), audio detection, and doorbell press, all delivered over the device's native event stream (no polling).\n- **Tamper & fault state** — the camera's own reports that its view has been interfered with (lens covered, scene changed, defocused) or that the device is unwell (video signal lost, storage missing, failing or nearly full), as two sensors.\n- **PTZ** — pan/tilt/zoom control for capable cameras, exposed as a PTZ sensor/service.\n- **Discovery** — automatic discovery of Dahua-compatible devices on the local network via UDP, plus manual add for devices that don't respond to discovery (e.g. across subnets).\n\n## Setup\n\n### Manual add\n\nIf a device isn't discovered automatically, add it manually with:\n\n| Field      | Description                                                                |\n| ---------- | -------------------------------------------------------------------------- |\n| IP Address | The camera/doorbell's IP address, e.g. `192.168.1.50`.                     |\n| Username   | Account username (see the admin-credential note below for doorbells).      |\n| Password   | Account password.                                                          |\n| Channel    | Camera channel (defaults to `1`; only relevant for multi-channel devices). |\n\n### Discovery\n\nThe plugin listens for Dahua DHIP discovery responses on the local network (UDP multicast/broadcast on port 37810) and lists any devices found so they can be adopted with the same IP/username/password/channel fields as manual add.\n\n### Admin credential for doorbells\n\nFor Amcrest doorbells, the plugin requires the device's local **admin** account credential — the same `admin` username and password used to configure the doorbell directly (e.g. via its web UI or `Amcrest Smart Home` cloud app's device settings).\n\nThis is **not** the same as your `Amcrest Smart Home` cloud account login. The cloud account uses an email address and is only used to manage the device from the mobile app; it cannot be used to authenticate directly against the device's CGI API. If you don't remember the `admin` password, it's the one you set the first time you configured the doorbell (before adding it to the cloud app).\n\n## Detection zones\n\nZones drawn in camera.ui apply to this plugin's events. Draw them as normal — there is nothing to enable, and no zone settings on the plugin's own page.\n\n**camera.ui does the filtering, not the plugin.** Everything a camera-side sensor reports goes through the host's own zone filter, which judges a tracked and optionally refined box rather than the single coarse one the camera sends. The plugin reports what the camera saw and, when you have zones drawn, says in the debug log what those zones make of it — see [Checking what is being filtered](#checking-what-is-being-filtered). Because the host has the better box, its verdict and the log line can occasionally differ; the log describes the boxes as they arrived.\n\nBecause detection happens on the camera rather than on frames decoded by camera.ui, zones can only be applied to events that tell us _where_ something happened:\n\n| Event                                         | Carries coordinates | Zones apply |\n| --------------------------------------------- | ------------------- | ----------- |\n| `SmartMotionHuman` / `SmartMotionVehicle`     | yes                 | yes         |\n| `CrossLineDetection` / `CrossRegionDetection` | yes                 | yes         |\n| `FaceDetection`                               | usually             | yes         |\n| `VideoMotion` (plain motion)                  | no                  | **no**      |\n\nPlain motion carries no coordinates at all, so it is always reported in full. If plain motion is your main source of noise, turn it off on the camera and rely on the smart events instead.\n\n### Which zone lists are used\n\ncamera.ui draws five kinds of zone. This plugin uses two of them:\n\n| Zone list   | Reported on | What it does                                                                       |\n| ----------- | ----------- | ---------------------------------------------------------------------------------- |\n| **Object**  | yes         | An object counts only where an object zone claims its label.                       |\n| **Privacy** | yes         | An object wholly inside one is dropped, unless the zone is set to keep detections. |\n| **Alert**   | no          | Never filters — it decides which detections may raise a push notification.         |\n| **Motion**  | no          | Scopes the `motion` label only, and `VideoMotion` carries no coordinates to test.  |\n| **Lines**   | no          | Line crossings arrive as their own camera-side events.                             |\n\nObject zones are include gates: every one of them says where something _does_ count, never where it doesn't. To keep something out of an area, use a privacy zone.\n\n### Filtering by object type\n\nA zone's **labels** decide which detections it applies to, and they also decide which labels are watched at all. Drawing any object zone puts the camera into allow-listed mode: from that point a label appearing in **no** zone's label list is dropped wherever it stands, not waved through. That is how you express \"never alert me about vehicles\" — list only `person` on your object zones. The log says `is a 'vehicle' and no zone lists that label` when this is what dropped something.\n\nOne object zone with no labels turns that off: a zone that lists nothing claims every label, so the zones constrain _where_ things count rather than _which_.\n\n### Choosing intersect or contain\n\n|               | Object zone                                 |\n| ------------- | ------------------------------------------- |\n| **intersect** | alert if the object touches the zone at all |\n| **contain**   | alert only if the object is wholly inside   |\n\n**Recommended: `intersect`.**\n\n`contain` is the strict setting, and on this hardware it will miss almost anything that does not begin wholly inside the zone. Because the camera reports an object's position only once, at first detection, that single sample has to satisfy the whole zone. It misfires in two common ways:\n\n- Someone entering from the edge of frame is only partly inside the zone at first, so they do not alert until they are wholly within it.\n- Someone close to the camera has a large bounding box. If your zone is a modest patch of driveway, that box may never fit wholly inside it, so they never alert even while standing in the middle of the zone.\n\nPrivacy zones always match on containment, so \"ignore things wholly inside the neighbour's garden\" still lets someone straddling the boundary alert.\n\n### Known limitation\n\nFiltering uses the position reported when the camera first detects the object, because that is the only position available. The camera sends exactly one \"started\" and one \"stopped\" event per object, 30–60 seconds apart, with no updates in between — and the two positions can describe completely different parts of the frame. In one measured case a person was first seen in the upper middle of the picture and last seen in the lower left, with no overlap between the two.\n\nSo if someone is first picked up outside your zone and then walks into it, **no alert is produced**. Draw object zones generously larger than the area you actually care about, so that the object's _first_ detection already falls inside them.\n\nEnable debug logging to see whether this is happening to you — see [Checking what is being filtered](#checking-what-is-being-filtered) below.\n\n### Checking what is being filtered\n\nEnable debug logging in camera.ui and look for:\n\n```\nSmartMotionHuman is inside the detection zones (1 zone(s)): box [0.38,0.32,0.10,0.51]\nSmartMotionHuman is outside the detection zones: box [0.38,0.11,0.05,0.05] outside object zone(s) 'Driveway' — camera.ui drops detections its zones reject\nSmartMotionVehicle is partly outside the detection zones: box [0.71,0.33,0.09,0.21] inside privacy mask 'Street'\nDetection zones updated: 2 zone(s)\n```\n\nThe first line is the one to look for when you are checking that a zone works at all: a detection that lands cleanly inside says so, naming the box it was measured with. Without it, a working zone looks the same in the log as no zone at all.\n\nThree more lines describe where an object the zones rejected had got to by the time it left:\n\n```\nSmartMotionVehicle stayed outside the zones for the whole event — correctly rejected\nSmartMotionHuman entered the zones during the event, after a Start the zones reject (see #26). Stop box [0.15,0.72,0.18,0.28] is inside; Start was box [0.55,0.29,0.08,0.37] outside object zone(s) 'Driveway'\nSmartMotionHuman left without coordinates — cannot tell whether it entered the zones\n```\n\nThe second is the limitation above, caught in the act. If you see it often, the boxes tell you where — and enlarging the zone to cover the first-detection position usually fixes it.\n\nThe third appears when the \"stopped\" event carries no position at all: nothing can be concluded either way, and it is said explicitly so that a quiet log means \"this is not happening to you\" rather than \"this could never be measured\".\n\nEditing your zones ends any of these that are still pending. A rejection recorded against the old zones cannot be judged against the new ones, so the object that was in flight when you saved goes undescribed rather than being measured against two different zone lists.\n\nThe `box` is the detection's position as `[x, y, width, height]`, in fractions of the frame from the top-left corner. It tells you whether the zone or the camera's own coordinates are the surprise — a value of `1.00` on an edge means the object was clipped at the edge of frame.\n\nIf a camera reports detections without coordinates, you will see this once per event type:\n\n```\nSmartMotionHuman (person) carried no coordinates, so detection zones cannot be applied to it — camera.ui lets a positionless detection through. Further occurrences are not logged.\n```\n\nThat is expected on some firmware. A detection with no position is let through rather than dropped, so a terse camera never costs you a real detection. Note that this line is only logged when you have zones drawn — with no zones there is nothing for the missing coordinates to cost you, so it is not worth saying.\n\n## Tamper and fault sensors\n\nTwo sensors carry the camera's own opinion of its health:\n\n| Sensor      | Raised by                                                             |\n| ----------- | --------------------------------------------------------------------- |\n| **Tamper**  | `VideoBlind`, `SceneChange`, `VideoUnFocus`, `VideoAbnormalDetection` |\n| **Problem** | `VideoLoss`, `StorageNotExist`, `StorageFailure`, `StorageLowSpace`   |\n\nEach sensor stands for several codes at once and is true while _any_ of them is active, so a `SceneChange` ending does not clear a tamper that `VideoBlind` is still holding up. Debug logging names what is still holding a sensor up:\n\n```\nTamper active: VideoBlind, SceneChange\nTamper cleared (SceneChange ended)\n```\n\nBoth sensors are registered for every camera, because whether a device emits these codes cannot be probed — only observed. A camera that never reports interference or a fault simply leaves its sensors at false, which is a truthful answer rather than a missing one.\n\nThey also work as cascade triggers: add one under the camera's detection settings and a tamper or fault will start a detection event of its own.\n\n**These code mappings come from the Dahua CGI event list, not from a capture.** Firmware varies in which codes it emits and, occasionally, in what it means by them. If one of these turns out to mean something else on your hardware, please open an issue — `npm run watch-events` (below) prints every code the camera sends alongside how the plugin classifies it.\n\n## Troubleshooting snapshots and event thumbnails\n\nSnapshots come from the camera's own `snapshot.cgi` over HTTP rather than from a decoded RTSP frame, so they do not compete with live view for the device's limited connections. camera.ui asks this plugin for them before it asks go2rtc.\n\nThat same picture is what camera.ui uses for the **event thumbnail** on the dashboard. On a camera whose only event is plain `VideoMotion` there is nothing else it can use — no smart detection means no detection segment, so there are no cropped \"moment\" pictures to fall back on. If `snapshot.cgi` is not answering with a JPEG, motion events end up with no thumbnail at all even though the event itself is recorded and shows on the timeline.\n\nWhen that happens the plugin says so:\n\n```\nCamera refused the snapshot request: HTTP 503 Service Unavailable — the device is out of spare connections — it is busy serving streams\nCamera answered the snapshot request with 45 bytes that are not a JPEG — Error\n```\n\nThe line is logged at error level the first time and at debug while it stays the same, so a camera that has stopped serving snapshots does not fill the log with one identical line a minute. A snapshot that succeeds re-arms it.\n\nIn every one of these cases the plugin returns nothing rather than the bad bytes, which lets camera.ui fall back to grabbing a frame through go2rtc. If you see one of these lines, check that snapshots are enabled on the camera and that the account has permission to read them.\n\n## Troubleshooting events\n\nIf a camera-side detection (person, vehicle, face, line crossing) isn't showing up in camera.ui, the likely cause is an event code this plugin doesn't recognize yet — firmware varies in which codes it emits.\n\nEnable debug logging in camera.ui and look for lines like:\n\n```\nUnhandled Amcrest event code: ParkingDetection (action=Start) — please report it at ...\n```\n\nEach unrecognized code is logged once per camera. If you see one that should map to a detection, please open an issue with that line.\n\nTo watch the raw stream directly from a checkout of this repo:\n\n```bash\nnpm run watch-events -- --ip 192.168.1.50 --user admin --pass secret\n```\n\nThen trigger the event on the camera (walk through frame, drive past, ring the doorbell). Each event prints with how the plugin classifies it:\n\n```\n14:02:31  CrossRegionDetection     action=Start   -> object person active box=[0.349, 0.156, 0.125, 0.440] track=863\n14:02:44  ParkingDetection         action=Start   -> UNHANDLED\n```\n\nCredentials can also be supplied as `AMCREST_IP` / `AMCREST_USER` / `AMCREST_PASS`.\n\n## Known limitations / v2\n\nThe following are deferred to a future release:\n\n- **NVR channels** — cameras attached to and accessed through an Amcrest/Dahua NVR are not supported; only directly-addressable devices are.\n- **Siren / floodlight control** — not exposed in this release.\n- **Camera-side recording configuration** — the plugin does not configure the device's own SD-card/NVR recording settings.\n- **Door lock/unlock** — Dahua video-intercom lock relay control is not implemented.\n- **ONVIF-backchannel talkback fallback** — devices that only support two-way audio via an ONVIF backchannel (rather than the native Amcrest/Dahua audio path) are not yet supported.\n- **Dahua-doorbell G.711A talkback** — implemented per the documented codec path but not yet verified against real Dahua-branded doorbell hardware. If it does not work for you, turn on debug logging: the plugin reports the codec it chose, the request it made, and the status the camera answered with, which is what a report needs to be actionable.\n- **Discovery byte format** — the Dahua UDP discovery probe/response parsing is based on the documented protocol and has not yet been validated against a real device capture; manual add remains the reliable fallback if discovery doesn't find your device.\n- **Camera-side zone configuration** — zones are applied by camera.ui, not written to the camera. The device's own recording and alert rules still use whatever regions are configured on it.\n","readmeFilename":"README.md"}