BetterFrame/nodered/src/bf-server-config.js
Mitchell R bd48c853e6 feat: restructure Node-RED nodes + server event emission
Renames:
- bf-config → bf-server-config (config node clarity)
- bf-event-in → bf-kiosk-camera-event (specific camera trigger)

New trigger nodes (input-only, under "BetterFrame Triggers"):
- bf-trigger-display-power, bf-trigger-layout-changed,
  bf-trigger-kiosk-changed, bf-trigger-camera-changed

New flow nodes:
- bf-config-get: query state by type (displays/kiosks/cameras/layouts/
  entities, or by-id)
- bf-config-set: mutate via typed setters (default-layout, enabled,
  priority, name)

Server-side event emission:
- shared/strip-secrets.ts: recursive password scrub
- New JSON admin endpoints: GET/POST /api/admin/{displays,kiosks,
  layouts,entities}[/:id]
- Coordinator-ws fires kiosk.changed on connect/disconnect/heartbeat
- Layout/power/camera routes call nodered.forward() on state change
2026-05-13 02:26:08 +02:00

23 lines
862 B
JavaScript

/**
* bf-server-config — shared config node holding BetterFrame server URL + admin
* API key. Every other bf-* node references one of these in its editor UI via
* the `config` field. The API key is stored as credentials so Node-RED encrypts
* it at rest.
*
* Previously named `bf-config`; renamed to disambiguate from the new
* `bf-config-get` / `bf-config-set` flow nodes.
*/
module.exports = function (RED) {
function BfServerConfigNode(n) {
RED.nodes.createNode(this, n);
this.name = n.name;
this.server_url = (n.server_url || "").replace(/\/+$/, "");
// credentials.api_key is auto-merged onto `this` by Node-RED.
this.api_key = (this.credentials && this.credentials.api_key) || "";
}
RED.nodes.registerType("bf-server-config", BfServerConfigNode, {
credentials: {
api_key: { type: "password" },
},
});
};