{"_id":"@ariada-org/anti-overlay","name":"@ariada-org/anti-overlay","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@ariada-org/anti-overlay","version":"0.1.0","description":"Detection + machine-readable reporting of third-party accessibility-overlay widgets with verbatim citation of W3C-WAI and OverlayFactsheet community positions. Detection only — non-judgement-prescriptive. Open source under EUPL-1.2.","license":"EUPL-1.2","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"devDependencies":{"@types/node":"^22.10.0","rimraf":"^6.0.1","typescript":"^5.7.2","vitest":"^4.1.0","eslint":"^9.17.0","@vitest/coverage-v8":"^2.1.8"},"engines":{"node":">=22"},"keywords":["accessibility","a11y","eaa","european-accessibility-act","overlay","detection","wcag","compliance","audit","eupl"],"homepage":"https://github.com/ariada-org/ariada/tree/main/packages/ariada-anti-overlay","repository":{"type":"git","url":"git+https://github.com/ariada-org/ariada.git","directory":"packages/ariada-anti-overlay"},"bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"author":{"name":"Alekszandr Bricskin","email":"git@ariada.org","url":"Agonist Development AB"},"publishConfig":{"access":"public","provenance":true},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","test:watch":"vitest","clean":"rimraf dist coverage","lint":"eslint src","test:coverage":"vitest run --coverage"},"_id":"@ariada-org/anti-overlay@0.1.0","_integrity":"sha512-Ayrihi2/8RDX7MyxdIkPDP7xcuVQ5WB7XPepy1ROcYovH3HvS7G6J/X+pqmciDq7fpzoSg5k4byaJQoRsCanJA==","_resolved":"/tmp/4f422a67a6b822a84502ed9bd7d9ed1d/ariada-org-anti-overlay-0.1.0.tgz","_from":"file:ariada-org-anti-overlay-0.1.0.tgz","_nodeVersion":"22.22.3","_npmVersion":"10.9.8","dist":{"integrity":"sha512-Ayrihi2/8RDX7MyxdIkPDP7xcuVQ5WB7XPepy1ROcYovH3HvS7G6J/X+pqmciDq7fpzoSg5k4byaJQoRsCanJA==","shasum":"2734cb8cd2124dd43dff23f9cda9dfc5d7f5f9d4","tarball":"https://registry.npmjs.org/@ariada-org/anti-overlay/-/anti-overlay-0.1.0.tgz","fileCount":72,"unpackedSize":90593,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ariada-org%2fanti-overlay@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCLpm4oygke5nXP00Ks43PsL0JrOkumRnYuOK3GZBj30gIgDW4gt2H0QNEJ5pgUZYvUmOwV9F77OXLusPsmlLxb6Ig="}]},"_npmUser":{"name":"agonist","email":"ab@agonist.ai"},"directories":{},"maintainers":[{"name":"agonist","email":"ab@agonist.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/anti-overlay_0.1.0_1781536547601_0.28554325966531713"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-15T15:15:47.387Z","0.1.0":"2026-06-15T15:15:47.769Z","modified":"2026-06-15T15:15:48.254Z"},"maintainers":[{"name":"agonist","email":"ab@agonist.ai"}],"description":"Detection + machine-readable reporting of third-party accessibility-overlay widgets with verbatim citation of W3C-WAI and OverlayFactsheet community positions. Detection only — non-judgement-prescriptive. Open source under EUPL-1.2.","homepage":"https://github.com/ariada-org/ariada/tree/main/packages/ariada-anti-overlay","keywords":["accessibility","a11y","eaa","european-accessibility-act","overlay","detection","wcag","compliance","audit","eupl"],"repository":{"type":"git","url":"git+https://github.com/ariada-org/ariada.git","directory":"packages/ariada-anti-overlay"},"author":{"name":"Alekszandr Bricskin","email":"git@ariada.org","url":"Agonist Development AB"},"bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"license":"EUPL-1.2","readme":"<!--\nSPDX-FileCopyrightText: 2025-2026 Agonist Development AB\nSPDX-License-Identifier: CC-BY-SA-4.0\n-->\n\n# `@ariada-org/anti-overlay`\n\nDetection-only library for third-party accessibility-overlay widgets on a web page. Pattern-matches against a curated registry of per-vendor signatures (script URLs, DOM ids, class prefixes, attributes, global JS variables, iframe-src patterns) and returns a structured report with verbatim citations of the W3C-WAI Accessibility Overlay community position and the OverlayFactsheet community statement.\n\nThe package does **not** recommend removal, does **not** auto-fail a scan, does **not** auto-disable any widget, and does **not** issue a WCAG or EAA non-conformance verdict. Detection only — the compliance decision is left to the operator and qualified counsel.\n\n## Install\n\n```bash\npnpm add @ariada-org/anti-overlay\n```\n\n## Quick start\n\n```ts\nimport { detectOverlays } from \"@ariada-org/anti-overlay\";\n\nconst html = await (await fetch(\"https://example.test/\")).text();\nconst report = await detectOverlays({ html });\n\nfor (const hit of report.vendorsDetected) {\n  console.log(hit.vendor, hit.confidence, hit.signaturesMatched.length);\n}\nconsole.log(report.citations.w3cWaiOverlayPosition);\nconsole.log(report.citations.overlayFactsheet);\nconsole.log(report.citations.disclaimer);\n```\n\nURL input is supported via a caller-supplied fetcher (the package itself never opens a network socket):\n\n```ts\nconst report = await detectOverlays(\n  { url: \"https://example.test/\" },\n  { fetcher: async (u) => (await fetch(u)).text() },\n);\n```\n\n## Coverage\n\nInitial v0.1 registry covers ten signatures: accessiBe, UserWay, EqualWeb / Accessibly, AudioEye (overlay-mode), Recite Me, MaxAccess, accessiBe-iframe variant, FACIL'iti, Purple Lens / PurpleHat / Purple Cube, and a generic accessibility-toolbar catch-all heuristic. Adding a vendor signature is a semver-minor bump; changing the report schema is a semver-major bump.\n\n## Confidence rubric\n\nEach detected vendor is assigned `high`, `medium`, or `low`:\n\n- **high** — at least one network-anchored signature (script-src or iframe-src) matched, or three-plus non-network signatures.\n- **medium** — exactly two non-network signatures matched.\n- **low** — exactly one non-network signature matched.\n\nSome vendors carry an explicit cap (the accessiBe-iframe variant tops out at `medium`; the generic-toolbar catch-all is locked at `low`).\n\n## Citations\n\nEvery report carries the same citations block:\n\n> Detection is mechanical pattern-matching. The fact a vendor is present does not by itself prove WCAG / EAA non-conformance. NOT LEGAL ADVICE.\n\nCitation URLs:\n\n- W3C-WAI Accessibility Overlay glossary entry\n- OverlayFactsheet community statement\n\nThe citation block is present even when zero vendors are detected so consumers can surface the references as informational context.\n\n## Performance\n\nTarget: P50 ≤ 20 ms, P95 ≤ 100 ms per page of up to 1 MB HTML. All regexes are linear-time-verifiable and host-anchored to prevent false positives on stray substring occurrences.\n\n## License\n\nEUPL-1.2. See `LICENSE` and `NOTICE`.\n","readmeFilename":"README.md","_rev":"1-eb6acf11ce2c867b8260c4b7c1a2f57c"}