import { chromium } from "playwright"; const args = ["--host-resolver-rules=MAP canvas.flow-master.ai 65.21.71.186", "--ignore-certificate-errors"]; const b = await chromium.launch({ headless: true, args }); const p = await (await b.newContext()).newPage(); const cspViolations = []; const consoleErrors = []; p.on("console", (msg) => { if (msg.type() === "error") consoleErrors.push(msg.text()); if (msg.text().includes("Content Security Policy")) cspViolations.push(msg.text()); }); p.on("pageerror", (err) => consoleErrors.push(`PAGE ERROR: ${err.message}`)); await p.goto("https://canvas.flow-master.ai/", { waitUntil: "networkidle" }); await p.waitForTimeout(2000); const loginVisible = await p.locator(".login-page").count(); console.log(`login page visible: ${loginVisible === 1 ? "YES" : "NO"}`); console.log(`csp violations: ${cspViolations.length}`); cspViolations.forEach((v) => console.log(" -", v.slice(0, 150))); console.log(`console errors: ${consoleErrors.length}`); consoleErrors.slice(0, 5).forEach((e) => console.log(" -", e.slice(0, 150))); await b.close();