{"_id":"@ariada-org/multi-domain","_rev":"3-7d1a7bcd7aeb1bcc084f316d853d8bc1","name":"@ariada-org/multi-domain","dist-tags":{"latest":"0.1.2"},"versions":{"0.1.0":{"name":"@ariada-org/multi-domain","version":"0.1.0","keywords":["accessibility","a11y","wcag","wcag-2.2","en-301-549","eaa","european-accessibility-act","scanner","jurisdiction","compliance","eupl"],"author":{"url":"Agonist Development AB","name":"Alekszandr Bricskin","email":"git@ariada.org"},"license":"EUPL-1.2","_id":"@ariada-org/multi-domain@0.1.0","maintainers":[{"name":"agonist","email":"ab@agonist.ai"}],"homepage":"https://ariada.org/packages/multi-domain","bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"dist":{"shasum":"5ba198d8dc174ec25ec15168d3ca885405ce7182","tarball":"https://registry.npmjs.org/@ariada-org/multi-domain/-/multi-domain-0.1.0.tgz","fileCount":40,"integrity":"sha512-qY9Fsorm+C/Inl8uP17E7XmpWfZ8Js30SHJQ5CiCxfJBqWQ6ePChr2bghML7b82les4OIwUDvA9bXMNRVTlzrg==","signatures":[{"sig":"MEQCIFuVYz1HVm6vTHtTei1lH/mYiiVdHlvPilwuZSARjKbyAiBzi6uRrOV3Sy098pKSUJMIOW1yQYxIpvKXAMfIJu03Jw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ariada-org%2fmulti-domain@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":88136},"type":"module","_from":"file:ariada-org-multi-domain-0.1.0.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"},"./extension-api":{"types":"./dist/extension-api.d.ts","import":"./dist/extension-api.js"},"./single-jurisdiction":{"types":"./dist/single-jurisdiction.d.ts","import":"./dist/single-jurisdiction.js"}},"scripts":{"lint":"eslint src","test":"vitest run","build":"tsc -p tsconfig.json","clean":"rimraf dist coverage","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"agonist","email":"ab@agonist.ai"},"_resolved":"/tmp/3378273652f9cbd44a69df4c088915a4/ariada-org-multi-domain-0.1.0.tgz","_integrity":"sha512-qY9Fsorm+C/Inl8uP17E7XmpWfZ8Js30SHJQ5CiCxfJBqWQ6ePChr2bghML7b82les4OIwUDvA9bXMNRVTlzrg==","repository":{"url":"git+https://github.com/ariada-org/ariada.git","type":"git","directory":"packages/ariada-multi-domain"},"_npmVersion":"10.9.8","description":"Single-jurisdiction accessibility-scan reference implementation plus extension API for community-authored jurisdiction rule packs. Open source under EUPL-1.2.","directories":{},"_nodeVersion":"22.22.3","dependencies":{},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","rimraf":"^6.0.1","vitest":"^4.1.0","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^2.1.8"},"_npmOperationalInternal":{"tmp":"tmp/multi-domain_0.1.0_1781536554068_0.9659756487005771","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ariada-org/multi-domain","version":"0.1.1","keywords":["accessibility","a11y","wcag","wcag-2.2","en-301-549","eaa","european-accessibility-act","scanner","jurisdiction","compliance","eupl"],"author":{"url":"Agonist Development AB","name":"Alekszandr Bricskin","email":"git@ariada.org"},"license":"EUPL-1.2","_id":"@ariada-org/multi-domain@0.1.1","maintainers":[{"name":"agonist","email":"ab@agonist.ai"}],"homepage":"https://ariada.org/packages/multi-domain","bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"dist":{"shasum":"53b2d9445753137ec3a85788de9158fc8332161f","tarball":"https://registry.npmjs.org/@ariada-org/multi-domain/-/multi-domain-0.1.1.tgz","fileCount":44,"integrity":"sha512-qPtLTF1+dZ2he0iWTCGcxsx6M2FpTJJJ0lwBF8BfCBY+m+frs82ifzkfd2TCkwGdBq/cmdKrOKpUl2K3gxwqaA==","signatures":[{"sig":"MEUCIQCoQNA+2r7cKql0BjOx+e6j6dQYns8PF7yZTAeGyRPJzgIgHhAFngilluJ6PG3UKgBweq0oevnqearzxp4w3lVzRWo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96055},"type":"module","_from":"file:ariada-org-multi-domain-0.1.1.tgz","engines":{"node":">=22"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"},"./discovery":{"types":"./dist/discovery.d.ts","import":"./dist/discovery.js"},"./extension-api":{"types":"./dist/extension-api.d.ts","import":"./dist/extension-api.js"},"./single-jurisdiction":{"types":"./dist/single-jurisdiction.d.ts","import":"./dist/single-jurisdiction.js"}},"scripts":{"lint":"eslint src","test":"pnpm -F ariada-domain-fixture build && vitest run","build":"tsc -p tsconfig.json","clean":"rimraf dist coverage","typecheck":"tsc -p tsconfig.json --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"agonist","email":"ab@agonist.ai"},"_resolved":"/private/var/folders/2c/_42xj0l179z8yc7wmp5k91s00000gn/T/934e16865c0e451c07b0c53b41275b8f/ariada-org-multi-domain-0.1.1.tgz","_integrity":"sha512-qPtLTF1+dZ2he0iWTCGcxsx6M2FpTJJJ0lwBF8BfCBY+m+frs82ifzkfd2TCkwGdBq/cmdKrOKpUl2K3gxwqaA==","repository":{"url":"git+https://github.com/ariada-org/ariada.git","type":"git","directory":"packages/ariada-multi-domain"},"_npmVersion":"11.17.0","description":"Single-jurisdiction accessibility-scan reference implementation plus extension API for community-authored jurisdiction rule packs. Open source under EUPL-1.2.","directories":{},"_nodeVersion":"26.5.0","dependencies":{"@ariada-org/core-engine":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.17.0","rimraf":"^6.0.1","vitest":"^4.1.0","typescript":"^5.7.2","@types/node":"^22.10.0","@vitest/coverage-v8":"^4.1.0"},"_npmOperationalInternal":{"tmp":"tmp/multi-domain_0.1.1_1784942566703_0.7519644596297363","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ariada-org/multi-domain","version":"0.1.2","description":"Single-jurisdiction accessibility-scan reference implementation plus extension API for community-authored jurisdiction rule packs. Open source under EUPL-1.2.","license":"EUPL-1.2","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./plugin":{"types":"./dist/plugin.d.ts","import":"./dist/plugin.js"},"./single-jurisdiction":{"types":"./dist/single-jurisdiction.d.ts","import":"./dist/single-jurisdiction.js"},"./extension-api":{"types":"./dist/extension-api.d.ts","import":"./dist/extension-api.js"},"./discovery":{"types":"./dist/discovery.d.ts","import":"./dist/discovery.js"}},"dependencies":{"@ariada-org/core-engine":"0.3.0"},"devDependencies":{"@types/node":"^22.10.0","@vitest/coverage-v8":"^4.1.0","eslint":"^9.17.0","rimraf":"^6.0.1","typescript":"^5.7.2","vitest":"^4.1.0"},"engines":{"node":">=22"},"keywords":["accessibility","a11y","wcag","wcag-2.2","en-301-549","eaa","european-accessibility-act","scanner","jurisdiction","compliance","eupl"],"homepage":"https://ariada.org/packages/multi-domain","repository":{"type":"git","url":"git+https://github.com/ariada-org/ariada.git","directory":"packages/ariada-multi-domain"},"bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"author":{"name":"Alekszandr Bricskin","email":"git@ariada.org","url":"Agonist Development AB"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"pnpm -F ariada-domain-fixture build && vitest run","test:watch":"vitest","clean":"rimraf dist coverage","lint":"eslint src","test:coverage":"vitest run --coverage"},"_id":"@ariada-org/multi-domain@0.1.2","_integrity":"sha512-Ov8Fj9DKmKd1hKJ6fqipN93OG7Owwl2stV9Es1tbuFD4vBkVAMJtYToux/3RtbzFs62xH59gXB+QVWWDiMsXDg==","_resolved":"/private/var/folders/2c/_42xj0l179z8yc7wmp5k91s00000gn/T/5507259845fd829015ad8bb315273bfe/ariada-org-multi-domain-0.1.2.tgz","_from":"file:ariada-org-multi-domain-0.1.2.tgz","_nodeVersion":"26.5.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-Ov8Fj9DKmKd1hKJ6fqipN93OG7Owwl2stV9Es1tbuFD4vBkVAMJtYToux/3RtbzFs62xH59gXB+QVWWDiMsXDg==","shasum":"0e3d36692b6a80a5d04d86b6da1fa9878fcf2a14","tarball":"https://registry.npmjs.org/@ariada-org/multi-domain/-/multi-domain-0.1.2.tgz","fileCount":44,"unpackedSize":96055,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIQCRG0OnOcIRHaakvQMDQbQDuFiB948a/mpeVYMnHiO6GgIfCjyRhyNSIq8E6Um1BjCKNAlIch69m6oqmqaGpbRLEA=="}]},"_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/multi-domain_0.1.2_1787175675302_0.6503775925394417"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-15T15:15:53.739Z","modified":"2026-08-19T21:41:15.640Z","0.1.0":"2026-06-15T15:15:54.210Z","0.1.1":"2026-07-25T01:22:46.848Z","0.1.2":"2026-08-19T21:41:15.429Z"},"bugs":{"url":"https://github.com/ariada-org/ariada/issues"},"author":{"name":"Alekszandr Bricskin","email":"git@ariada.org","url":"Agonist Development AB"},"license":"EUPL-1.2","homepage":"https://ariada.org/packages/multi-domain","keywords":["accessibility","a11y","wcag","wcag-2.2","en-301-549","eaa","european-accessibility-act","scanner","jurisdiction","compliance","eupl"],"repository":{"type":"git","url":"git+https://github.com/ariada-org/ariada.git","directory":"packages/ariada-multi-domain"},"description":"Single-jurisdiction accessibility-scan reference implementation plus extension API for community-authored jurisdiction rule packs. Open source under EUPL-1.2.","maintainers":[{"name":"agonist","email":"ab@agonist.ai"}],"readme":"# @ariada-org/multi-domain\n\nSingle-jurisdiction accessibility-scan reference orchestrator plus a\n`JurisdictionPlugin` extension contract for community-authored rule\npacks.\n\nOpen source under [EUPL-1.2](./LICENSE).\n\n## What this package does\n\nThis package publishes three things:\n\n1. A canonical `ScanEvent` data contract that downstream\n   accessibility-compliance tooling consumes.\n2. A `JurisdictionPlugin` extension interface that community\n   implementers use to register additional accessibility\n   jurisdictions (for example Canada AODA, Japan JIS X 8341-3).\n3. A reference orchestrator that dispatches one scan against exactly\n   one registered jurisdiction plugin and emits a `ScanEvent`.\n\nThe reference orchestrator is enough to exercise the contract\nend-to-end, validate a community-authored plugin, and serve as a\nworking example for downstream tools.\n\n## What this package does NOT do\n\nThe reference orchestrator deliberately runs one jurisdiction at a\ntime. The package does not implement:\n\n- multi-jurisdiction execution in a single pass;\n- cross-jurisdiction conflict detection or resolution;\n- consensus / normalisation heuristics across multiple jurisdictions;\n- production rule packs (those live in sibling packages such as\n  `@ariada-org/wcag-rules-extended`).\n\nCommunity implementers may build their own multi-jurisdiction\norchestrator on top of the `JurisdictionPlugin` contract published\nhere.\n\n## Install\n\n```bash\nnpm install @ariada-org/multi-domain\n```\n\n## Quick start\n\n```ts\nimport {\n  JurisdictionRegistry,\n  SingleJurisdictionOrchestrator,\n  sePlugin,\n} from '@ariada-org/multi-domain';\n\nconst registry = new JurisdictionRegistry();\nregistry.register(sePlugin);\n\nconst orchestrator = new SingleJurisdictionOrchestrator({\n  registry,\n  scannerVersion: '0.1.0',\n  ruleEngineVersion: '0.1.0',\n  deps: {\n    captureSnapshot: async () => ({\n      domHash: 'a'.repeat(64),\n      axTreeHash: 'b'.repeat(64),\n      cssomHash: 'c'.repeat(64),\n      screenshotRefs: [],\n      viewports: [{ label: 'desktop', width: 1280, height: 800 }],\n    }),\n    evaluateRules: async () => [],\n    newId: () => '01HXYZSCANID0000000000000A',\n    now: () => new Date(),\n  },\n});\n\nconst event = await orchestrator.scan({\n  url: 'https://example.se',\n  jurisdictions: ['SE'],\n});\nconsole.log(event.perJurisdiction['SE']);\n```\n\n## API\n\n| Export                              | Type      | Description                                                                |\n| ----------------------------------- | --------- | -------------------------------------------------------------------------- |\n| `SingleJurisdictionOrchestrator`    | class     | Runs one scan against one registered plugin and emits a `ScanEvent`.       |\n| `JurisdictionRegistry`              | class     | In-memory plugin registry with idempotent registration semantics.          |\n| `validatePluginShape`               | function  | Validates the structure of a `JurisdictionPlugin` value.                   |\n| `matchJurisdictionFromHints`        | function  | Pure helper that maps URL / `<meta>` / `<html lang>` hints to a plugin.    |\n| `computePassRate`                   | function  | Pure helper that computes success-criterion pass rate from findings.       |\n| `sePlugin`, `dePlugin`, `euEaaPlugin` | constants | Minimal reference plugins for Sweden, Germany, and the EU EAA umbrella.    |\n\nType-only exports (`ScanEvent`, `Finding`, `JurisdictionSubset`, etc.)\nare also published for downstream consumers.\n\n## Writing a plugin\n\nCopy one of the reference plugins as a starting point:\n\n```ts\nimport type { JurisdictionPlugin } from '@ariada-org/multi-domain';\n\nexport const myPlugin: JurisdictionPlugin = {\n  jurisdictionCode: 'XX',\n  jurisdictionLabel: 'Country X',\n  governingRegulation: 'Statute citation',\n  technicalStandard: 'EN 301 549 v3.2.1 + WCAG 2.2 Level AA',\n  supervisoryAuthority: 'Authority name',\n  tldHints: ['xx'],\n  metaHints: [],\n  langAttrHints: ['xx'],\n  rulePackId: '@ariada-org/wcag-rules-extended',\n  rulePackVersion: '0.1.0',\n  emitJurisdictionSubset(ctx) {\n    /* … */\n  },\n};\n```\n\nRegister it against a `JurisdictionRegistry` instance:\n\n```ts\nregistry.register(myPlugin);\n```\n\n## Standards\n\n- [WCAG 2.2 — W3C](https://www.w3.org/TR/WCAG22/)\n- [EN 301 549 v3.2.1 — ETSI](https://www.etsi.org/deliver/etsi_en/301500_301599/301549/03.02.01_60/en_301549v030201p.pdf)\n- [Directive (EU) 2019/882 — European Accessibility Act](https://eur-lex.europa.eu/eli/dir/2019/882/oj)\n\n## License\n\n[EUPL-1.2](./LICENSE). See [NOTICE](./NOTICE) for the package scope statement.\n","readmeFilename":"README.md"}