Commit graph

  • 5f83fc20d3 docs(api): document /api/pip and the assignments muted field (#109/#129) v1.9.1-beta4 ScreenTinker 2026-06-18 17:36:12 -0500
  • 71f8948bdb chore(android): bump versionName to 1.9.1-beta4 (versionCode 24) ScreenTinker 2026-06-18 17:28:44 -0500
  • 118367837b chore(release): v1.9.1-beta4 ScreenTinker 2026-06-18 17:00:59 -0500
  • 618a7048c6
    fix(server): proxy remote YouTube thumbnails + real version in boot banner (#131) screentinker 2026-06-18 17:00:24 -0500
  • f1f3d45221 fix(server): boot banner shows the real version, not a hardcoded v1.2.0 ScreenTinker 2026-06-18 16:17:58 -0500
  • 10298d8a18 fix(server): proxy remote YouTube thumbnails instead of ENOENT on a local path ScreenTinker 2026-06-18 16:17:44 -0500
  • 6f0e4a07f6
    Fix per-item mute (#129): persist, ship to device, and toggle in real time (#130) screentinker 2026-06-18 16:54:23 -0500
  • c55118d8d8 fix(player): apply per-item mute live on Android + web (#129) ScreenTinker 2026-06-18 16:51:41 -0500
  • 332f4c5b5c fix(server): persist + ship + real-time per-item mute (#129) ScreenTinker 2026-06-18 16:51:31 -0500
  • 965920cd17
    PiP overlay MVP: push image/web overlays to a device or group (#109) (#127) screentinker 2026-06-18 14:54:44 -0500
  • 1c76fa865c PiP overlay: add Android + web players (#109) ScreenTinker 2026-06-18 14:52:10 -0500
  • 7eab9c6092 PiP overlay MVP: push image/web overlays to a device or group (#109) ScreenTinker 2026-06-18 14:42:32 -0500
  • e2ff8f47b7 Tizen player: real Samsung B2B fleet control (#125), folding in #126 ScreenTinker 2026-06-18 13:24:40 -0500
  • 9c4b48800f Tizen player 1.9.1-beta3: bug fixes, multi-zone layouts, video walls ScreenTinker 2026-06-17 18:47:51 -0500
  • d7a1801dcc Tizen player: real Samsung B2B fleet control (#125), folding in #126 ScreenTinker 2026-06-18 13:24:40 -0500
  • d018cb24a3 Tizen player: wire up Samsung B2B fleet control (#125) ScreenTinker 2026-06-18 13:17:50 -0500
  • 0cd2a904e5 Android player: video-wall (wall:sync) support ScreenTinker 2026-06-17 19:26:02 -0500
  • b903144456 Android player: video-wall (wall:sync) support ScreenTinker 2026-06-17 19:26:02 -0500
  • eb3abf3a0e Tizen player 1.9.1-beta3: bug fixes, multi-zone layouts, video walls ScreenTinker 2026-06-17 18:47:51 -0500
  • 10726fde42 Merge #117: HIDE_BILLING flag to hide the Subscription/billing UI (#116) ScreenTinker 2026-06-16 09:57:17 -0500
  • 674a34ba45 feat(config): HIDE_BILLING flag to hide the Subscription/billing UI (#116) ScreenTinker 2026-06-16 09:19:24 -0500
  • 5b13254de3 chore(release): v1.9.1-beta3 v1.9.1-beta3 ScreenTinker 2026-06-15 16:07:04 -0500
  • c5e8067b35 Merge #115: last-resort uncaughtException safety net (#114) ScreenTinker 2026-06-15 16:02:18 -0500
  • 78a4ee4d37 fix(server): last-resort uncaughtException/unhandledRejection safety net (#114) ScreenTinker 2026-06-15 15:57:17 -0500
  • 7539603b17 Merge #111: device-free preview, playlist + device surfaces (#104) ScreenTinker 2026-06-15 15:20:57 -0500
  • 647a7de1e6 Merge #112: duplicate + replace playlist items (#105) ScreenTinker 2026-06-15 15:20:51 -0500
  • d2feb2a3c5 Merge #113: drag-to-reorder display tiles (#106) ScreenTinker 2026-06-15 15:20:17 -0500
  • 5d24c30ea1 feat(displays): drag-to-reorder display tiles within a section (#106) ScreenTinker 2026-06-15 15:15:21 -0500
  • cbabbeb78c feat(preview): device-manager preview — second surface for #104 (combined) ScreenTinker 2026-06-15 14:57:19 -0500
  • e6ebf2a380 feat(playlists): duplicate + replace playlist items in place (#105) ScreenTinker 2026-06-15 14:36:19 -0500
  • 1c748b8d3b feat(preview): draft-aware device-free playlist preview via player reuse (#104) ScreenTinker 2026-06-15 14:11:05 -0500
  • d64244b5ac chore(release): v1.9.1-beta2 v1.9.1-beta2 ScreenTinker 2026-06-14 20:34:21 -0500
  • a21843818c fix(release): bump-version handles a pre-release CURRENT version ScreenTinker 2026-06-14 20:33:37 -0500
  • fbd466b7f2 fix(docker): copy docs/openapi.yaml into the image so /docs's spec resolves ScreenTinker 2026-06-14 20:32:30 -0500
  • 31be2ffe8c Merge feat/agency-tokens: agency upload portal (#73), full-screen guardrail, YouTube preview referrer fix ScreenTinker 2026-06-14 20:27:10 -0500
  • 46e4bc8579 fix(content): YouTube preview 153 — give the iframe a referrer (page is no-referrer) ScreenTinker 2026-06-14 20:12:57 -0500
  • 7f7dc80a8c fix(content): YouTube preview 153 — drop enablejsapi/origin from the passive embed ScreenTinker 2026-06-14 18:18:58 -0500
  • ed45a9a23d feat(ui): surface the agency portal handoff at token creation (#73) ScreenTinker 2026-06-14 17:54:23 -0500
  • 02859eb1aa feat(ui): surface the API docs link in Settings -> API Tokens (#73) ScreenTinker 2026-06-14 17:44:42 -0500
  • 57d78dd1fa feat: full-screen-only guardrail for agency designations (#73) ScreenTinker 2026-06-14 17:36:03 -0500
  • 4c38536cc6 feat(ui): edit-designations for agency tokens (#73) ScreenTinker 2026-06-14 17:04:07 -0500
  • 6ea8100aeb feat(ui): the size-guidance card container in the agency portal (#73) ScreenTinker 2026-06-14 16:10:25 -0500
  • 400a438fff revert: drop zone-binding, keep whole-playlist grants + size-guidance card (#73) ScreenTinker 2026-06-14 15:52:11 -0500
  • c5550f5bc9 feat: agency zone-grant issuance UI + reactive placement card (#73) ScreenTinker 2026-06-14 15:12:18 -0500
  • 289d54f4fa feat(api): zone-grant confinement for agency tokens - FK-anchored (#73) ScreenTinker 2026-06-14 14:57:27 -0500
  • c55ca60b56 feat(api): batched email digest for agency uploads (#73) ScreenTinker 2026-06-14 13:59:37 -0500
  • 986d94a778 feat(api): GET /api/agency/layouts - device-free layout geometry (#73) ScreenTinker 2026-06-14 13:53:30 -0500
  • 1f207c4278 feat(api): per-agency-token auto-publish (#73) ScreenTinker 2026-06-14 13:48:17 -0500
  • 79c453cd43 refactor(playlists): extract publishPlaylist() shared fn (#73) ScreenTinker 2026-06-14 13:48:17 -0500
  • efd4d7826c feat(ui): standalone agency upload portal (#73) ScreenTinker 2026-06-14 13:08:07 -0500
  • d59adfd10c feat(ui): agency token designation in Settings (#73) ScreenTinker 2026-06-14 13:08:07 -0500
  • 6d152a5ccf feat(api): GET /api/agency/playlists - a token's designated targets (#73) ScreenTinker 2026-06-14 13:08:07 -0500
  • 40102b2b41 feat(api): agency portal endpoints + router.param target seam (#73) ScreenTinker 2026-06-13 22:48:42 -0500
  • a59b53cc25 refactor(content): extract the upload ingest into a shared lib (#73) ScreenTinker 2026-06-13 22:48:42 -0500
  • c8a24d2243 feat(api): agency-token security primitive - off-ladder scope + agencyGate (#73) ScreenTinker 2026-06-13 21:30:38 -0500
  • f4c5865013 fix(server): strip totp_secret_enc/totp_last_step from login responses (#100) ScreenTinker 2026-06-13 20:48:25 -0500
  • 728f03beba test(server): TOTP - bite, lockout, replay, recovery, st_ bypass, key-rotation (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 1d3e9acea4 feat(server): TOTP MFA login flow + enrollment/verify endpoints (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • c38d8dc0e6 fix(server): rate-limit per endpoint, not the stripped req.path (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • c02086e305 feat(server): TOTP primitives - encrypted secret, hashed recovery codes, verify lockout (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • e1cd8591bb chore(server): TOTP schema + otplib dep (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • d1ade93ab3 fix(server): strip totp_secret_enc/totp_last_step from login responses (#100) ScreenTinker 2026-06-13 20:48:25 -0500
  • 1a12d9e23b test(server): TOTP - bite, lockout, replay, recovery, st_ bypass, key-rotation (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • a8b46f3787 feat(server): TOTP MFA login flow + enrollment/verify endpoints (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 05ca229b2e fix(server): rate-limit per endpoint, not the stripped req.path (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 1f14714515 feat(server): TOTP primitives - encrypted secret, hashed recovery codes, verify lockout (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • a15597ffa2 chore(server): TOTP schema + otplib dep (#100) ScreenTinker 2026-06-13 20:36:10 -0500
  • 1f794ff7b4 chore(release): v1.9.1-beta1 v1.9.1-beta1 ScreenTinker 2026-06-12 22:37:50 -0500
  • 6add29bf6a fix(player): auto-relaunch after OTA self-update (#96) ScreenTinker 2026-06-12 22:21:50 -0500
  • 5bcaca7c51 fix(player): OTA install silently fails on Android 14+ (explicit PendingIntent) ScreenTinker 2026-06-12 22:21:50 -0500
  • 8d03741713 feat(server): make OTA observable - log update-check + apk-download hits (#96) ScreenTinker 2026-06-12 20:35:07 -0500
  • 47e1f620c4 fix(player): auto-relaunch after OTA self-update (#96) ScreenTinker 2026-06-12 22:21:50 -0500
  • 3f52643598 fix(player): OTA install silently fails on Android 14+ (explicit PendingIntent) ScreenTinker 2026-06-12 22:21:50 -0500
  • 1246902305 feat(server): make OTA observable - log update-check + apk-download hits (#96) ScreenTinker 2026-06-12 20:35:07 -0500
  • f06a87f4be fix(api): harden device pairing against brute-force (#87) ScreenTinker 2026-06-12 19:41:27 -0500
  • 3305e79e61 fix(api): consolidate device pairing to /pair, remove vestigial bare endpoint (#90) ScreenTinker 2026-06-12 19:20:00 -0500
  • 538f4a7b03 test(api): close #92 follow-up coverage gaps ScreenTinker 2026-06-12 19:10:25 -0500
  • 135aae1dc8 fix(api): harden device pairing against brute-force (#87) ScreenTinker 2026-06-12 19:41:27 -0500
  • 42d24c37c5 fix(api): consolidate device pairing to /pair, remove vestigial bare endpoint (#90) ScreenTinker 2026-06-12 19:20:00 -0500
  • a347bfb10e test(api): close #92 follow-up coverage gaps ScreenTinker 2026-06-12 19:10:25 -0500
  • 33eaef826c test(api): fix spec scope drift + guard it in CI; Redoc provenance ScreenTinker 2026-06-12 13:54:26 -0500
  • 2ad9f54b8e test(api): token partition + threat-model + device WS coverage ScreenTinker 2026-06-12 13:34:32 -0500
  • c1b9c27f3a docs(api): OpenAPI spec, Redoc at /docs, CI spec-lint ScreenTinker 2026-06-12 13:34:32 -0500
  • dce0d22763 fix(api): expose zone_id + layout_id on the public write paths ScreenTinker 2026-06-12 13:33:56 -0500
  • fab4ae909a feat(api): token management endpoints + Settings UI ScreenTinker 2026-06-12 13:33:56 -0500
  • 73ca3cf258 feat(api): scoped API token foundation + secure-by-exclusion mounts ScreenTinker 2026-06-12 13:33:17 -0500
  • feebca1b74 test(api): fix spec scope drift + guard it in CI; Redoc provenance ScreenTinker 2026-06-12 13:54:26 -0500
  • 613e1d23c3 test(api): token partition + threat-model + device WS coverage ScreenTinker 2026-06-12 13:34:32 -0500
  • 4645f833f0 docs(api): OpenAPI spec, Redoc at /docs, CI spec-lint ScreenTinker 2026-06-12 13:34:32 -0500
  • 33095acf5b fix(api): expose zone_id + layout_id on the public write paths ScreenTinker 2026-06-12 13:33:56 -0500
  • 55aa12e8ce feat(api): token management endpoints + Settings UI ScreenTinker 2026-06-12 13:33:56 -0500
  • 428da688f3 feat(api): scoped API token foundation + secure-by-exclusion mounts ScreenTinker 2026-06-12 13:33:17 -0500
  • 300d331562 fix(security): rate-limit the whole /api/provision pairing surface (#88) ScreenTinker 2026-06-12 10:38:32 -0500
  • 4ed5afbf1b fix(security): rate-limit the whole /api/provision pairing surface (#88) ScreenTinker 2026-06-12 10:38:32 -0500
  • 11e339dd89 ci(release): make the pipeline prerelease-aware (#80) ScreenTinker 2026-06-12 08:51:20 -0500
  • 444caa74f8 ci(release): make the pipeline prerelease-aware (#80) ScreenTinker 2026-06-12 08:51:20 -0500
  • bd732f4c48 fix(android): zone image falls back to server URL when not cached (#78) ScreenTinker 2026-06-12 08:39:09 -0500
  • 955902266d fix(android): zone image falls back to server URL when not cached (#78) ScreenTinker 2026-06-12 08:39:09 -0500
  • 68367cb3a3 fix(settings): show the real app version in the About section (#83) ScreenTinker 2026-06-12 08:09:19 -0500
  • 1b6423cb42 fix(settings): show the real app version in the About section (#83) ScreenTinker 2026-06-12 08:09:19 -0500