HighAsCG exposes an HTTP API and operator WebSocket on the playout server. By default authentication is not enforced so existing deployments keep working. When enforcement is enabled, every /api/* route (except the auth bootstrap endpoints) and the operator WebSocket require a valid API token.
Set either:
HIGHASCG_ENFORCE_AUTH=1security.enforceAuth: true in highascg.config.json or modular config/general.jsonOn first boot with enforcement enabled, the server generates a random token in .private/api-token (mode 0600) and logs a warning with recovery instructions.
Print the token on the box:
bash tools/runtime/print-api-token.sh
HttpOnly; SameSite=Strict session cookie.For scripts and automation, send Authorization: Bearer <token> on HTTP requests. WebSocket upgrades accept the same token via ?token= query param.
| Setting | Effect |
|---|---|
security.enforceAuth: false (default) |
Legacy behaviour: binds 0.0.0.0 unless overridden |
security.enforceAuth: true + exposeToNetwork: false |
Binds 127.0.0.1 only |
security.enforceAuth: true + exposeToNetwork: true |
LAN bind allowed when a token is configured |
Refusing to bind 0.0.0.0 without a token prevents accidental open control planes.
With auth enforcement, CORS no longer uses Access-Control-Allow-Origin: *. Allowed origins are:
Origin matches Host)HIGHASCG_CORS_ORIGINS (comma-separated)Cross-site browser pages cannot drive the API when cookies are SameSite=Strict.
GET /api/settings runs sensitive fields through redaction (nuclearPassword, apiToken, keys matching *password* / *token* / *secret*).
HighAsCG does not terminate TLS in-process, and no HTTPS proxy ships with it any more (the :4443 one was removed in WO-822, nginx in WO-498). Put Caddy or Tailscale Serve in front for HTTPS. Set Secure on session cookies when the proxy sends X-Forwarded-Proto: https.
If locked out:
bash tools/runtime/print-api-token.sh.Authorization: Bearer … to API clients.To disable enforcement temporarily: unset HIGHASCG_ENFORCE_AUTH and set security.enforceAuth: false, then restart.
prepare-eggs-clone-with-exfat.sh installs highascg.service.d/25-api-auth.conf (HIGHASCG_ENFORCE_AUTH=1) unless HIGHASCG_EGG_ENFORCE_AUTH=0. Factory modular config from write-iso-default-config.js sets security.enforceAuth: true and exposeToNetwork: true.
Each stick generates a unique token on first highascg start (ensureApiToken). Operators recover it with print-api-token.sh on the box.
CI runs node tools/ci/npm-audit-ci.js, which fails on high or critical advisories in production dependencies (npm audit --omit=dev).
| Package | Notes |
|---|---|
ws |
Direct + transitive (via osc) pinned to 8.21.0+ via package.json overrides. |
puppeteer |
Removed (WO-247/WO-248). CEF control and headless-Chrome thumbnail rendering now use the in-repo raw CDP client (src/system/cef-cdp-client.js, src/media/headless-chrome-cdp.js) over ws. The Chrome binary is resolved from HIGHASCG_CHROME_BIN, the cached Chrome-for-Testing under ~/.cache/puppeteer/chrome/, or a system chromium/google-chrome. |
exceljs |
Optional — lower-third roster .xlsx import only. Parses with a 2 MB size cap and 15 s timeout; row objects use null prototypes and unsafe keys (__proto__, etc.) are stripped. |
Legacy .xls |
Not supported — operators should save as .xlsx or CSV. |
Run locally: node tools/ci/npm-audit-ci.js
src/utils/safe-unzip.js)