import assert from "node:assert/strict"; import { readFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; import { describe, it } from "node:test"; const staticRunbook = readFileSync( fileURLToPath(new URL("../../deploy/STATIC.md", import.meta.url)), "utf8", ); describe("production media permissions policy", () => { const policy = staticRunbook.match(/Permissions-Policy\s+"([^"]+)"/)?.[1] ?? ""; it("allows only same-origin contextual camera and display prompts", () => { assert.match(policy, /(?:^|,\s*)display-capture=\(self\)(?:,|$)/); assert.match(policy, /(?:^|,\s*)camera=\(self\)(?:,|$)/); assert.doesNotMatch(policy, /camera=\(\*\)/); assert.doesNotMatch(policy, /display-capture=\(\*\)/); }); it("keeps audio and unrelated high-risk capabilities denied", () => { for (const capability of ["microphone", "geolocation", "payment", "usb"]) { assert.match(policy, new RegExp(`(?:^|,\\s*)${capability}=\\(\\)(?:,|$)`)); } }); it("documents denial, indicator, stop, and page lifecycle acceptance", () => { assert.match(staticRunbook, /denying the browser prompt/i); assert.match(staticRunbook, /active indicator/i); assert.match(staticRunbook, /stop on the in-product control or `pagehide`/i); assert.match(staticRunbook, /neither webcam faces nor office screens request audio/i); }); });