From 5f1b789250398ee32fc00d922591411f6cfe2472 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 8 Jun 2026 21:11:08 +1000 Subject: [PATCH] =?UTF-8?q?chore(release):=202.1.0=20=E2=80=94=20LAN=20dev?= =?UTF-8?q?ice=20discovery;=20retire=20static=20devices.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 9 +++++++++ package.json | 2 +- public/devices.json | 38 -------------------------------------- server.js | 2 +- 4 files changed, 11 insertions(+), 40 deletions(-) delete mode 100644 public/devices.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 1059ed8..f9b19f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,15 @@ All notable changes to Void 2.0 are documented here. Format: [Keep a Changelog](https://keepachangelog.com). +## 2.1.0 — LAN device discovery +- **`lan_devices` store + hourly `arp-scan`** (`migration 024`, `lib/infra/scan.js`, + `lib/db/repos/lan_devices.js`, `lib/cron`): the Devices band is now DB-backed and + self-updating. New MACs land in a **Discovered** review queue; the owner names/ + groups/promotes them (`/api/devices`). Devices are keyed by MAC (IP is mutable); + unreviewed + absent rows auto-prune (randomized >24h, others >14d) so randomized + MACs can't bloat the table. Replaces the static `public/devices.json` (now seeded + into the table by the migration). + ## 2.0.0 — General availability (Void 1 retired) - **Dropped the `-alpha` tag.** Void 2 is *the* homelab dashboard; `void.hynesy.com` has served it since alpha-18. - **Void 1 retired.** CT 301 stopped, backed up (vzdump archive + off-CT data tarball), and destroyed 2026-06-08. diff --git a/package.json b/package.json index 24606bc..9446a39 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "void-server", - "version": "2.0.0", + "version": "2.1.0", "type": "module", "private": true, "scripts": { diff --git a/public/devices.json b/public/devices.json deleted file mode 100644 index c34fa08..0000000 --- a/public/devices.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "note": "LAN devices — ARP/nmap rescan 2026-06-08 with MACs mapped. Separate from Little Blue's homelab services (Proxmox BC:24:11:* guests, tracked in the infra inventory). Locally-administered / randomized MACs (2nd hex digit 2/6/A/E) can't be OUI-identified and are labelled by hand.", - "groups": [ - { "name": "Smart Home", "devices": [ - { "name": "Amazon Echo", "ip": "192.168.1.3", "mac": "48:43:DD:FC:2F:84", "vendor": "Amazon" }, - { "name": "Amazon Echo", "ip": "192.168.1.4", "mac": "14:0A:C5:6D:15:6E", "vendor": "Amazon" }, - { "name": "Smart device", "ip": "192.168.1.6", "mac": "C8:47:8C:01:17:70", "vendor": "Beken" }, - { "name": "Smart device", "ip": "192.168.1.23", "mac": "D4:A6:51:12:36:92", "vendor": "Tuya" }, - { "name": "Xiaomi device", "ip": "192.168.1.20", "mac": "EC:4D:3E:36:EF:E1", "vendor": "Xiaomi" } - ]}, - { "name": "Entertainment", "devices": [ - { "name": "Google / Nest", "ip": "192.168.1.12", "mac": "1C:53:F9:BB:32:24", "vendor": "Google" }, - { "name": "Google / Nest", "ip": "192.168.1.14", "mac": "D4:F5:47:95:33:93", "vendor": "Google" }, - { "name": "Google / Nest", "ip": "192.168.1.18", "mac": "EC:4D:3E:37:38:8F", "vendor": "Google", "note": "MAC OUI is Xiaomi — label may be wrong" }, - { "name": "Google / Nest", "ip": "192.168.1.21", "vendor": "Google" }, - { "name": "Google / Nest", "ip": "192.168.1.22", "vendor": "Google" }, - { "name": "Cambridge Audio", "ip": "192.168.1.29", "mac": "48:70:1E:01:4F:7B", "vendor": "StreamMagic" }, - { "name": "Apple TV / HomePod", "ip": "192.168.1.43", "mac": "08:66:98:B9:CF:F2", "vendor": "Apple" }, - { "name": "Samsung TV", "ip": "192.168.1.24", "mac": "1C:86:9A:4C:F0:EC", "vendor": "Samsung" } - ]}, - { "name": "Personal", "devices": [ - { "name": "Galaxy Tab S4", "ip": "192.168.1.171", "mac": "5A:DA:61:7A:0F:12", "vendor": "Samsung (randomized MAC)" }, - { "name": "Apple device", "ip": "192.168.1.133", "mac": "1C:57:DC:70:E8:2D", "vendor": "Apple" }, - { "name": "Samsung device", "ip": "192.168.1.61", "mac": "A0:D0:5B:04:70:96", "vendor": "Samsung" }, - { "name": "TP-Link device", "ip": "192.168.1.10", "mac": "14:EB:B6:40:7E:93", "vendor": "TP-Link" } - ]}, - { "name": "Network", "devices": [ - { "name": "Gateway / Router", "ip": "192.168.1.1", "mac": "44:A5:6E:68:D0:E9", "vendor": "Netgear" }, - { "name": "Orbi Satellite", "ip": "192.168.1.13", "mac": "BC:A5:11:3E:06:88", "vendor": "Netgear (Orbi mesh)" } - ]}, - { "name": "Flagged / Unknown", "devices": [ - { "name": "ASUS device", "ip": "192.168.1.15", "mac": "24:4B:FE:8E:09:A4", "vendor": "ASUSTek", "flag": true }, - { "name": "Unknown", "ip": "192.168.1.34", "vendor": "randomized MAC · offline", "flag": true }, - { "name": "Unknown", "ip": "192.168.1.35", "vendor": "unknown · offline", "flag": true }, - { "name": "Unknown", "ip": "192.168.1.51", "vendor": "randomized MAC · offline", "flag": true } - ]} - ] -} diff --git a/server.js b/server.js index a8dc74f..cc54149 100644 --- a/server.js +++ b/server.js @@ -14,7 +14,7 @@ import { mcpAuth } from './lib/api/middleware/mcp_auth.js'; import { handleMcp } from './lib/mcp/http.js'; import httpProxy from 'http-proxy'; -const VERSION = '2.0.0'; +const VERSION = '2.1.0'; // Proxy /terminal (+ its WebSocket) to ttyd on CT 300, so the embedded terminal // works whether the Void is reached via Traefik (void2-app.hynesy.com) OR the