#!/usr/bin/env node /** * checkCsp.mjs — PLAN.md §6 and D48, added in phase 10. * * §6 promises "a strict CSP with no external origins". D48 decided that promise should be * a real response header sent by the container itself, not a `` (which ignores * `frame-ancestors`) and not advice in an operator's proxy config (which lives outside the * artifact we ship and test). `astro.config.mjs` sets it up; this checks it arrived. * * node scripts/checkCsp.mjs # verify the built output * node scripts/checkCsp.mjs --write # rewrite src/config/cspHashes.mjs from the build * node scripts/checkCsp.mjs --reset # empty it, so the next harvest starts from nothing * * Three things are checked, and each one has already been wrong once: * * 1. **Every built route has a policy.** `staticHeaders` writes `dist/_headers.json`; a * route missing from it is a page served with no CSP at all, which is the failure mode * nobody notices because the page looks perfect. * * 2. **Every inline script and style is covered by its page's own policy.** This is the * real check. Astro does not hash `