Full-screen /kiosk route, separate from the staff SPA: dedicated long-lived kiosk login (own password, hashed, mints its own hnf_session cookie locally via CENTRAL_AUTH_SECRET -- no central auth changes needed), scrollable grid of small mode/setpoint blocks per live-controllable device (shelly_trv, mhi_mqtt, daikin), tap-to-edit modal reusing the existing per-type control panels, and a type-aware bulk multiselect (separate TRV/AC sections, only applied to matching selected devices, TRV commands staggered). - backend/src/routes/kiosk.js: public POST /api/kiosk/login - backend/src/routes/settings.js: admin set/check kiosk password (bcrypt) - backend/src/routes/config.js: exclude/protect kiosk_password_hash - frontend/src/pages/Kiosk.tsx + components/Kiosk*: the kiosk UI - reuses GET /api/status for the combined device list -- no new status endpoint needed since the kiosk token now also carries the 'view' cap Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
24 lines
545 B
JSON
24 lines
545 B
JSON
{
|
|
"name": "hnf-hvac-backend",
|
|
"version": "1.0.0",
|
|
"type": "module",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"dev": "node --watch src/index.js"
|
|
},
|
|
"dependencies": {
|
|
"@fastify/cookie": "^9.4.0",
|
|
"@fastify/cors": "^9.0.1",
|
|
"@fastify/multipart": "^8.3.0",
|
|
"@fastify/static": "^7.0.4",
|
|
"bcryptjs": "^2.4.3",
|
|
"fastify": "^4.28.1",
|
|
"jose": "^5.9.6",
|
|
"luxon": "^3.5.0",
|
|
"modbus-serial": "^8.0.25",
|
|
"mqtt": "^5.10.3",
|
|
"pg": "^8.13.1",
|
|
"sharp": "^0.33.0",
|
|
"xlsx": "^0.18.5"
|
|
}
|
|
}
|