Commit graph

62 commits

Author SHA1 Message Date
Mitchell R
44e4b7f3af
feat: add shell kiosk prototype for end-to-end testing 2026-05-10 03:13:52 +02:00
Mitchell R
94e316a207
feat: implement kiosk API, pairing flow, and bundle generation
- service-api-http: h3 on :18081 with pairing, bundle, heartbeat,
  and event endpoints
- shared/pairing.ts: 8-char code state machine (initiate → claim →
  confirm)
- shared/bundle.ts: label-scoped bundle with cluster-encrypted ONVIF
  passwords
- Admin kiosks page: POST /admin/kiosks/pair wired to confirmPairing
- sec-config: api-http bound to 0.0.0.0 with auth config
2026-05-10 03:12:07 +02:00
Mitchell R
3f358e5e5e
fix: remove hx-boost causing broken AJAX navigation 2026-05-10 03:05:14 +02:00
Mitchell R
bacf1d2fcb
fix: use deterministic HKDF key for cookie signing
cookieMac was using encryptString which generates a random IV per
call, making the HMAC key non-deterministic. Cookie signed at login
could never verify on subsequent requests. Now uses deriveKey(info)
which uses HKDF — deterministic for same server key.
2026-05-10 02:59:04 +02:00
Mitchell R
fe11519925
fix: drop Secure cookie flag for non-TLS dev access 2026-05-10 02:57:31 +02:00
Mitchell R
cbde4037ff
fix: add cookieName and totpIssuer to sec-config explicitly
BSB config doesn't apply schema defaults for missing keys.
Cookie was being set with name "undefined".
2026-05-10 02:55:21 +02:00
Mitchell R
3c5256bbb4
fix: avoid h3 setCookie, use Set-Cookie header on Response directly
h3 v2's setCookie modifies event response headers but doesn't
carry them when handler returns a raw Response object. Build
Set-Cookie header manually in redirect helpers instead.
2026-05-10 02:53:06 +02:00
Mitchell R
a64363258d
fix: use Response wrapper instead of h3 tagged template html()
h3 v2's html() is a tagged template literal, not a function that
accepts a string. JSX-rendered markup passed directly causes
"first.reduce is not a function". Created htmlPage() helper that
wraps markup in a proper Response with text/html content type.
2026-05-10 02:50:16 +02:00
Mitchell R
56053e2d6a
fix: bind admin-http to 0.0.0.0 for external access
127.0.0.1 rejects connections from other machines on the network.
2026-05-10 02:48:47 +02:00
Mitchell R
a8b0fbb2bc
refactor: collapse 6 non-service plugins into shared modules
BSB plugins should be actual services (own port, lifecycle, resource
ownership). Moved secrets, auth, pairing, bundle, nodered-bridge, and
cec-relay from plugin folders to shared modules under server/src/shared/.

4 BSB plugins remain: service-store, service-admin-http,
service-api-http, service-coordinator-ws.

service-admin-http now initializes secrets + auth as plain modules in
init() using the store repo from the plugin-registry singleton. No
more setSiblings() hack or inter-plugin wiring.

sec-config.yaml updated: secrets/auth config moved into
service-admin-http, pairing config into service-api-http, nodered
config into service-coordinator-ws.
2026-05-10 02:29:25 +02:00
Mitchell R
83f598f187
build fixes for bsb 2026-05-10 01:46:11 +02:00
Mitchell R
2fd2502b85
adding initial project 2026-05-10 01:09:13 +02:00