feat(playback): add per-user transcoding controls (#375)

* feat(playback): add per-user transcoding controls

* fix(playback): enforce forced video transcode permission

* chore: address transcode control review feedback

* fix(playback): recheck transcode permission on audio switch

---------

Co-authored-by: Quick104 <31828688+Quick104@users.noreply.github.com>
This commit is contained in:
Suspense
2026-07-10 22:30:04 -04:00
committed by GitHub
co-authored by Quick104
parent 3fd0912cb3
commit 28c6ddc237
30 changed files with 772 additions and 81 deletions
+39
View File
@@ -0,0 +1,39 @@
import { describe, expect, it } from "vitest";
import { describeTranscodingPolicyError } from "./playback-errors";
import { PlayerFetchError } from "./player-fetch";
describe("describeTranscodingPolicyError", () => {
it("describes disabled video transcoding", () => {
const error = new PlayerFetchError(
403,
"Transcoding is disabled for your user",
"transcoding_disabled",
);
expect(describeTranscodingPolicyError(error)).toEqual({
title: "Transcoding is disabled",
message: "Transcoding is disabled for your user. Ask your server administrator for access.",
});
});
it("describes disabled audio transcoding", () => {
const error = new PlayerFetchError(
403,
"Audio transcoding is disabled for your user",
"audio_transcoding_disabled",
);
expect(describeTranscodingPolicyError(error)).toEqual({
title: "Audio transcoding is disabled",
message:
"This item requires audio conversion, but audio transcoding is disabled for your user.",
});
});
it("ignores unrelated player errors", () => {
expect(
describeTranscodingPolicyError(new PlayerFetchError(500, "Failed", "internal_error")),
).toBeNull();
});
});