# Alta Local Camera Discovery Standalone Electron utility for discovering Alta cloud-native cameras on the technician's current LAN. It listens for `_vaioncam._tcp.local` mDNS announcements and reports each camera's Alta Key, IP address, and hostname Web UI URL without Alta credentials or camera configuration changes. The original Python web prototype remains available in `app.py`; the Electron app performs discovery directly in its main process through a narrow, isolated preload bridge. `src/scan-session.js` owns the single-flight scan lifecycle, defensive result snapshot, and latest-scan camera URL authorization so Electron bootstrap code remains small and testable. ## Run the Electron app ```bash npm install npm start ``` ## Use 1. Connect the computer to the same LAN/VLAN as the cameras. 2. Select **Start discovery**. 3. Copy an individual Alta Key or select **Export CSV**. 4. Select a camera hostname to open its local HTTPS Web UI. The CSV filename is `alta-camera-keys.csv` and its columns are: ```csv Alta Key,IP Address,Hostname URL ``` ## Download The current Windows x64 portable release is available from GitPeji: - [Download Alta Local Camera Discovery for Windows](https://git.pejicorp.com/peji/AltaNetowrkScanner/releases/download/v1.0.0/AltaLocalCameraDiscovery-1.0.0-portable.exe) - [View source and release notes](https://git.pejicorp.com/peji/AltaNetowrkScanner) No installer or Alta credentials are required. The current Windows release is unsigned and may trigger Microsoft Defender SmartScreen; verify its SHA-256 against the checksum published with the release. ## Build ```bash npm run build:win # Windows x64 portable EXE npm run build:linux # Linux x64 AppImage ``` Artifacts are written under `dist/`. The Electron app icon is `assets/icon.png` / `assets/icon.ico`: the approved radar artwork in the Alta colourway with the Alta A layered above it. Release artifacts are built from clean, tagged source revisions and are not committed to the repository. ## Verify ```bash npm run check npm run scan npm run build-test npm run build-test:win ``` `npm run scan` exercises the same Node mDNS engine used by Electron. The legacy Python scanner can still be checked with: ```bash .venv/bin/python -m unittest -v test_app.py ``` ## Security and limits - Renderer Node integration is disabled; context isolation and sandboxing are enabled. - The UI is served from an allowlisted `app://` protocol; arbitrary local files and renderer permissions are denied. - IPC accepts only the app's main frame at the exact packaged application URL. - Discovery requires matching Alta Key/hostname, HTTPS port 443, and a valid private or link-local address; scans are concurrency- and result-bounded. - External navigation is denied except a root HTTPS camera URL from the latest successful scan. - CSV content is generated in the main process and written only through a native save dialog. - Release builds are configured to disable Electron's Node/inspection/file-privilege fuses and enable ASAR integrity enforcement. - mDNS normally does not cross VLANs or routed boundaries. - mDNS advertisements are not cryptographically authenticated; results are correlated and constrained local announcements, not proof of device identity. - Only powered, reachable cameras advertising `_vaioncam._tcp.local` are shown.