- src/lib/first-run.ts settles where data lives (asked once, remembered in a pointer under the user's config dir), creates the owner-only key that protects stored camera logins, and reports whether MediaMTX is installed. Without a terminal nothing prompts: defaults are taken and logged, so a service still starts. Running it again changes nothing. - cli/onvif-dashboard.mjs is the published command: setup, install-video and help. Node runs the TypeScript in src/lib directly, so the CLI needs no build of its own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
80 lines
2.1 KiB
JSON
80 lines
2.1 KiB
JSON
{
|
|
"name": "onvif-dashboard",
|
|
"version": "0.1.0",
|
|
"description": "Web dashboard for ONVIF cameras (Hikvision, Annke): discovery, live video over WebRTC, motion recording and settings, all on your own network.",
|
|
"keywords": [
|
|
"onvif",
|
|
"hikvision",
|
|
"annke",
|
|
"ip-camera",
|
|
"cctv",
|
|
"webrtc",
|
|
"nvr",
|
|
"surveillance",
|
|
"dashboard"
|
|
],
|
|
"license": "MIT",
|
|
"author": "Michael Mainguy",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://git.dasfad.com/mmainguy/cameras.git"
|
|
},
|
|
"engines": {
|
|
"node": ">=24.0.0"
|
|
},
|
|
"files": [
|
|
".next/standalone",
|
|
".next/static",
|
|
"public",
|
|
"cli",
|
|
"src/lib/paths.ts",
|
|
"src/lib/first-run.ts",
|
|
"src/lib/mediamtx-install.ts",
|
|
"src/lib/admin-file.ts",
|
|
"scripts/create-admin.mts",
|
|
"scripts/install-mediamtx.mts",
|
|
"LICENSE",
|
|
"README.md"
|
|
],
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"coverage": "vitest run --coverage",
|
|
"admin:create": "node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON scripts/create-admin.mts",
|
|
"video:install": "node --disable-warning=MODULE_TYPELESS_PACKAGE_JSON scripts/install-mediamtx.mts"
|
|
},
|
|
"dependencies": {
|
|
"@tanstack/react-query": "^5.103.1",
|
|
"lucide-react": "^1.47.0",
|
|
"next": "16.3.5",
|
|
"onvif": "github:mikemainguy/onvif#e8c340fdf97cf4a42da23ce810b4ecdd8c93dd4b",
|
|
"react": "19.2.8",
|
|
"react-dom": "19.2.8",
|
|
"server-only": "^0.0.1",
|
|
"zod": "^4.6.5"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4",
|
|
"@testing-library/dom": "^10.4.2",
|
|
"@testing-library/react": "^16.3.3",
|
|
"@types/node": "^24.13.6",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"@vitejs/plugin-react": "^6.1.1",
|
|
"@vitest/coverage-v8": "^5.0.1",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.3.5",
|
|
"jsdom": "^29.1.1",
|
|
"tailwindcss": "^4",
|
|
"typescript": "^5",
|
|
"vitest": "^5.0.1"
|
|
},
|
|
"bin": {
|
|
"onvif-dashboard": "cli/onvif-dashboard.mjs"
|
|
}
|
|
}
|