81b832dc70
Replace inline auth script with shared auth-guard.js in recorders.html
2026-05-18 13:41:52 -04:00
936867c0c3
Replace inline auth script with shared auth-guard.js on recorders, jobs, users, tokens pages: tokens.html
2026-05-18 13:38:27 -04:00
de3920dd4a
Replace inline auth script with shared auth-guard.js on recorders, jobs, users, tokens pages: users.html
2026-05-18 13:38:26 -04:00
9dfefc5731
Replace inline auth script with shared auth-guard.js on recorders, jobs, users, tokens pages: jobs.html
2026-05-18 13:38:25 -04:00
f3fbb027f6
Replace inline auth script with shared auth-guard.js on recorders, jobs, users, tokens pages: recorders.html
2026-05-18 13:38:24 -04:00
e3128acb15
fix: use shared auth-guard.js on capture.html
2026-05-18 13:27:24 -04:00
d8766f18cc
fix: use shared auth-guard.js on upload.html
2026-05-18 13:26:19 -04:00
a40232e2b5
fix: use shared auth-guard.js on settings.html
2026-05-18 13:25:03 -04:00
ebe8b3be59
fix: use shared auth-guard.js on index.html
2026-05-18 13:24:25 -04:00
cb63e4743d
fix: /me returns guest user when AUTH_ENABLED is false so auth-guard never fires on dev
2026-05-18 13:21:37 -04:00
4f649b41a9
feat: add shared auth-guard.js with 401 → login redirect
2026-05-18 13:21:22 -04:00
725c3ed292
feat: rebuild settings.html with new shell layout
2026-05-18 13:08:19 -04:00
9ceb5db1e3
feat: add admin sidebar section and user footer widget
2026-05-18 13:08:04 -04:00
533250b1c3
feat: add admin sidebar section and user footer widget
2026-05-18 13:07:47 -04:00
ffffe8039e
feat: add admin sidebar section and user footer widget
2026-05-18 13:07:40 -04:00
027e73467f
feat: add admin sidebar section and user footer widget
2026-05-18 13:06:57 -04:00
95fa1b83b6
feat: add admin sidebar section and user footer widget
2026-05-18 13:06:40 -04:00
4213c8a7b3
feat: auth system — CSS page transitions, API helpers, users/tokens pages
2026-05-18 13:00:31 -04:00
c7d8be9f28
feat: auth system — CSS page transitions, API helpers, users/tokens pages
2026-05-18 12:59:36 -04:00
2d21d4d44d
feat: auth system — CSS page transitions, API helpers, users/tokens pages
2026-05-18 12:58:24 -04:00
d0f9848717
feat: auth system — CSS page transitions, API helpers, users/tokens pages
2026-05-18 12:57:50 -04:00
28a4b24911
feat(mam-api): wire users, groups, and tokens routes into main app
2026-05-18 12:51:14 -04:00
1e4c92c2df
feat(mam-api): add personal API token routes
2026-05-18 12:50:58 -04:00
d23ca9be73
feat(mam-api): add groups admin CRUD routes with member management
2026-05-18 12:50:49 -04:00
5ed604136c
feat(mam-api): add users admin CRUD routes
2026-05-18 12:50:33 -04:00
f93feb6e40
feat(mam-api): add auth middleware with session and Bearer token support
2026-05-18 12:50:21 -04:00
f57ed1b498
feat(mam-api): add auth middleware with session and Bearer token support
2026-05-18 12:45:15 -04:00
2d8c44c529
feat(mam-api): add groups and API tokens schema patch
2026-05-18 12:45:06 -04:00
3154cce37c
fix: ETag case mismatch in multipart upload complete route
...
api.js sends parts as { partNumber, ETag } (uppercase) but upload.js
was reading p.etag (lowercase), resulting in undefined ETag passed to
S3 CompleteMultipartUpload → InvalidPart error on all large file uploads.
Also handle both casings defensively.
2026-05-16 18:56:38 -04:00
17646c1155
fix(jobs): read from BullMQ queues instead of empty DB table
...
GET /api/v1/jobs now queries the proxy, thumbnail, and conform BullMQ
queues directly and returns normalized job objects with id, type,
status, progress, asset_id, timestamps, and error fields.
Also adds DELETE /:id to remove completed/failed jobs from the queue,
supporting the clearCompleted action in jobs.html.
The PostgreSQL jobs table is still used only for conform job creation
(POST /conform) to preserve that workflow.
2026-05-16 17:38:53 -04:00
44b59742b8
redesign: jobs.html — filter tabs, type chips, inline progress, detail panel
2026-05-16 17:02:39 -04:00
7aae1d2738
feat: redesign capture.html with new design system
2026-05-16 16:48:25 -04:00
f7a96677ef
feat: redesign recorders.html with new design system
2026-05-16 13:57:20 -04:00
cf93b2f378
feat: redesign upload.html and recorders.html: upload.html
2026-05-16 13:06:10 -04:00
c6cca63595
feat: redesign index.html, upload.html, recorders.html: index.html
2026-05-16 13:04:45 -04:00
c0d3d0590b
feat: full GUI redesign — broadcast control register aesthetic: common.css
2026-05-16 13:02:33 -04:00
f5abf359fb
fix(nginx): use Docker embedded DNS resolver to avoid startup DNS failure
...
nginx resolves upstream hostnames at config load time, which fails when
sibling containers haven't registered with the Docker DNS yet. Using
resolver 127.0.0.11 with set $upstream defers resolution to request
time, preventing the "host not found in upstream" startup crash.
2026-05-16 08:44:50 -04:00
af9c9dbae4
fix(db): parse DATABASE_URL in pool.js instead of individual DB_* vars
...
pool.js was using DB_HOST/DB_USER/etc which were never set.
The docker-compose.yml passes DATABASE_URL. Parse that if present,
fall back to individual vars for local dev.
2026-05-16 08:39:47 -04:00
3c97999ea3
chore: use env-var port bindings — no hardcoded host ports
...
All host ports are now configurable via .env variables with sensible
defaults. This prevents collisions when deploying alongside existing
services on TrueNAS or any other host.
2026-05-16 08:27:25 -04:00
0a5b4d6191
feat(ui): SRT/RTMP listener/caller mode UI in recorders
...
- SRT: mode selector (Listener / Caller)
- Listener: listen_port field + live connection info banner
- Caller: source URL field
- RTMP: mode selector (Listener / Caller)
- Listener: listen_port + stream_key fields + live connection info banner
- Caller: source URL field
- Connection info banners update live as port/key fields change
- handleCreateRecorder builds correct source_config per mode
- Card meta display handles listener config (shows port, not url)
- updateSrtModeFields / updateRtmpModeFields helpers for dynamic show/hide
2026-05-16 08:23:24 -04:00
7aa07c6708
feat(docker): expose SRT (9000/udp) and RTMP (1935/tcp) ports on capture service
2026-05-16 08:21:21 -04:00
78b1f3482f
feat(recorders): add PortBindings for SRT/RTMP listener mode containers
...
When source_config.mode === 'listener':
- SRT: bind UDP listen_port (default 9000) on container host
- RTMP: bind TCP listen_port (default 1935) on container host
Add ExposedPorts to container config alongside HostConfig.PortBindings.
Also pass LISTEN, LISTEN_PORT, STREAM_KEY env vars to container.
2026-05-16 08:21:03 -04:00
55fec605c6
feat(capture): accept SRT/RTMP source params in POST /start
...
- Accept source_type, source_url, listen, listen_port, stream_key
- Validate: SDI requires device; SRT/RTMP caller requires source_url
- Pass all params through to captureManager.start()
- On stop: if proxyKey is null (network source), include needsProxy flag
in MAM API registration so worker can generate proxy asynchronously
2026-05-16 08:20:10 -04:00
ea48e98465
feat(capture): add SRT/RTMP source type support
...
- Add _buildInputArgs() to build FFmpeg input args per source type
- SRT caller: srt://host:port?mode=caller
- SRT listener: srt://0.0.0.0:PORT?mode=listener
- RTMP caller: -i rtmp://host/app/key
- RTMP listener: -listen 1 -i rtmp://0.0.0.0:PORT/live/key
- Network sources spawn hires-only FFmpeg process (can't open stream twice)
- proxyKey is null for network sources; proxy generated by worker post-stop
- SDI keeps existing dual-process behavior unchanged
2026-05-16 08:19:41 -04:00
ed52dfcafb
Fix recorders.html: rename handlers to avoid api.js shadowing (infinite recursion), fix resolution→recording_resolution
2026-05-16 00:48:40 -04:00
6f7a446aa5
Fix docker-compose.yml: add default for MAM_API_URL in capture service
2026-05-16 00:47:01 -04:00
cc174c4977
Fix worker/index.js: job.progress is a property not a function in BullMQ v3+
2026-05-16 00:46:53 -04:00
44759391e5
Fix jobs.js: send camelCase fields to conform worker (projectId/outputFormat)
2026-05-16 00:46:45 -04:00
79dcfaffeb
Fix capture.html: remove bin requirement, fix start/stop handler naming to avoid recursion, track sessionId
2026-05-16 00:42:36 -04:00
1862082ba7
Fix upload.html: camelCase multipart params, filename field, ETag/partNumber, s3Key/assetId tracking
2026-05-16 00:41:36 -04:00