@blamejs/blamejs-shop 0.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +87 -0
- package/LICENSE +17 -0
- package/README.md +117 -0
- package/SECURITY.md +139 -0
- package/lib/admin.js +952 -0
- package/lib/analytics.js +267 -0
- package/lib/cart.js +279 -0
- package/lib/catalog-import.js +344 -0
- package/lib/catalog.js +769 -0
- package/lib/checkout.js +320 -0
- package/lib/config.js +151 -0
- package/lib/customers.js +322 -0
- package/lib/email.js +242 -0
- package/lib/externaldb-d1.js +283 -0
- package/lib/index.js +57 -0
- package/lib/inventory-alerts.js +198 -0
- package/lib/newsletter.js +142 -0
- package/lib/order.js +380 -0
- package/lib/payment.js +318 -0
- package/lib/pricing.js +185 -0
- package/lib/r2-bridge.js +169 -0
- package/lib/shipping.js +185 -0
- package/lib/storefront.js +2160 -0
- package/lib/subscriptions.js +410 -0
- package/lib/tax.js +161 -0
- package/lib/theme.js +194 -0
- package/lib/vendor/MANIFEST.json +19 -0
- package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +23 -0
- package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +34 -0
- package/lib/vendor/blamejs/.clusterfuzzlite/project.yaml +16 -0
- package/lib/vendor/blamejs/.dockerignore +45 -0
- package/lib/vendor/blamejs/.gitattributes +42 -0
- package/lib/vendor/blamejs/.github/CODEOWNERS +4 -0
- package/lib/vendor/blamejs/.github/FUNDING.yml +2 -0
- package/lib/vendor/blamejs/.github/ISSUE_TEMPLATE/bug_report.md +58 -0
- package/lib/vendor/blamejs/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/lib/vendor/blamejs/.github/ISSUE_TEMPLATE/feature_request.md +99 -0
- package/lib/vendor/blamejs/.github/PULL_REQUEST_TEMPLATE.md +77 -0
- package/lib/vendor/blamejs/.github/dependabot.yml +37 -0
- package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +148 -0
- package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +107 -0
- package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +122 -0
- package/lib/vendor/blamejs/.github/workflows/ci.yml +511 -0
- package/lib/vendor/blamejs/.github/workflows/codeql.yml +50 -0
- package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +655 -0
- package/lib/vendor/blamejs/.github/workflows/release-container.yml +406 -0
- package/lib/vendor/blamejs/.github/workflows/scorecard.yml +101 -0
- package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +134 -0
- package/lib/vendor/blamejs/.gitignore +102 -0
- package/lib/vendor/blamejs/.gitleaks.toml +166 -0
- package/lib/vendor/blamejs/.hadolint.yaml +18 -0
- package/lib/vendor/blamejs/.npmrc +5 -0
- package/lib/vendor/blamejs/.pinact.yaml +17 -0
- package/lib/vendor/blamejs/ARCHITECTURE.md +158 -0
- package/lib/vendor/blamejs/CHANGELOG.md +1351 -0
- package/lib/vendor/blamejs/CODE_OF_CONDUCT.md +86 -0
- package/lib/vendor/blamejs/CONTRIBUTING.md +156 -0
- package/lib/vendor/blamejs/GOVERNANCE.md +201 -0
- package/lib/vendor/blamejs/LICENSE +201 -0
- package/lib/vendor/blamejs/LTS-CALENDAR.md +29 -0
- package/lib/vendor/blamejs/MIGRATING.md +29 -0
- package/lib/vendor/blamejs/NOTICE +81 -0
- package/lib/vendor/blamejs/README.md +304 -0
- package/lib/vendor/blamejs/SECURITY.md +432 -0
- package/lib/vendor/blamejs/api-snapshot.json +48709 -0
- package/lib/vendor/blamejs/assets/BlameJS_Logo.png +0 -0
- package/lib/vendor/blamejs/assets/BlameJS_Logo.svg +129 -0
- package/lib/vendor/blamejs/bench/README.md +77 -0
- package/lib/vendor/blamejs/bench/_helpers.js +70 -0
- package/lib/vendor/blamejs/bench/baseline.json +183 -0
- package/lib/vendor/blamejs/bench/crypto-hash.bench.js +19 -0
- package/lib/vendor/blamejs/bench/crypto-symmetric.bench.js +28 -0
- package/lib/vendor/blamejs/bench/run.js +140 -0
- package/lib/vendor/blamejs/bench/safe-json.bench.js +31 -0
- package/lib/vendor/blamejs/bin/blamejs.js +13 -0
- package/lib/vendor/blamejs/docker/caddy/Caddyfile +46 -0
- package/lib/vendor/blamejs/docker/coredns/Corefile +37 -0
- package/lib/vendor/blamejs/docker/haproxy/haproxy.cfg +52 -0
- package/lib/vendor/blamejs/docker/init/generate-certs.sh +118 -0
- package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +87 -0
- package/lib/vendor/blamejs/docker/mitmproxy/config.yaml +16 -0
- package/lib/vendor/blamejs/docker/mongo/init-tls.sh +17 -0
- package/lib/vendor/blamejs/docker/mysql/my.cnf +12 -0
- package/lib/vendor/blamejs/docker/nats/nats.conf +33 -0
- package/lib/vendor/blamejs/docker/postgres/init-tls.sh +17 -0
- package/lib/vendor/blamejs/docker/postgres/postgresql.conf +18 -0
- package/lib/vendor/blamejs/docker/rabbitmq/rabbitmq.conf +18 -0
- package/lib/vendor/blamejs/docker/redis/redis.conf +15 -0
- package/lib/vendor/blamejs/docker/squid/squid.conf +24 -0
- package/lib/vendor/blamejs/docker/syslog/syslog-ng.conf +34 -0
- package/lib/vendor/blamejs/docker-compose.test.yml +545 -0
- package/lib/vendor/blamejs/docs/cis-postgres-crosswalk.md +102 -0
- package/lib/vendor/blamejs/docs/cis-sqlite-equivalent.md +92 -0
- package/lib/vendor/blamejs/eslint.config.mjs +204 -0
- package/lib/vendor/blamejs/examples/wiki/Caddyfile +40 -0
- package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +218 -0
- package/lib/vendor/blamejs/examples/wiki/Dockerfile +120 -0
- package/lib/vendor/blamejs/examples/wiki/README.md +157 -0
- package/lib/vendor/blamejs/examples/wiki/cli-snapshot.json +250 -0
- package/lib/vendor/blamejs/examples/wiki/docker-compose.prod.yml +231 -0
- package/lib/vendor/blamejs/examples/wiki/docker-compose.yml +166 -0
- package/lib/vendor/blamejs/examples/wiki/env-snapshot.json +217 -0
- package/lib/vendor/blamejs/examples/wiki/lib/auto-site-entries.js +139 -0
- package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +555 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-cli.js +507 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-env-vars.js +435 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-errors.js +282 -0
- package/lib/vendor/blamejs/examples/wiki/lib/harvest-vendored-deps.js +321 -0
- package/lib/vendor/blamejs/examples/wiki/lib/nav.js +15 -0
- package/lib/vendor/blamejs/examples/wiki/lib/opts-resolver.js +75 -0
- package/lib/vendor/blamejs/examples/wiki/lib/page-generator.js +508 -0
- package/lib/vendor/blamejs/examples/wiki/lib/section.js +276 -0
- package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +587 -0
- package/lib/vendor/blamejs/examples/wiki/lib/source-doc-parser.js +318 -0
- package/lib/vendor/blamejs/examples/wiki/lib/symbol-index.js +122 -0
- package/lib/vendor/blamejs/examples/wiki/migrations/0001-pages-schema.js +74 -0
- package/lib/vendor/blamejs/examples/wiki/package.json +18 -0
- package/lib/vendor/blamejs/examples/wiki/public/img/blamejs-logo.png +0 -0
- package/lib/vendor/blamejs/examples/wiki/public/img/blamejs-logo.svg +129 -0
- package/lib/vendor/blamejs/examples/wiki/public/robots.txt +5 -0
- package/lib/vendor/blamejs/examples/wiki/public/vendor/MANIFEST.json +30 -0
- package/lib/vendor/blamejs/examples/wiki/public/vendor/prism.css +1 -0
- package/lib/vendor/blamejs/examples/wiki/public/vendor/prism.js +15 -0
- package/lib/vendor/blamejs/examples/wiki/public/wiki.css +1250 -0
- package/lib/vendor/blamejs/examples/wiki/routes/admin.js +366 -0
- package/lib/vendor/blamejs/examples/wiki/routes/integration.js +230 -0
- package/lib/vendor/blamejs/examples/wiki/routes/pages.js +266 -0
- package/lib/vendor/blamejs/examples/wiki/scripts/backfill-module-metadata.js +214 -0
- package/lib/vendor/blamejs/examples/wiki/seeders/prod/0001-default-pages.js +35 -0
- package/lib/vendor/blamejs/examples/wiki/seeders/prod/pages/_index.js +34 -0
- package/lib/vendor/blamejs/examples/wiki/seeders/prod/pages/api.js +76 -0
- package/lib/vendor/blamejs/examples/wiki/server.js +129 -0
- package/lib/vendor/blamejs/examples/wiki/site.config.js +197 -0
- package/lib/vendor/blamejs/examples/wiki/snippets/README.md +38 -0
- package/lib/vendor/blamejs/examples/wiki/snippets/auth/password-hash.example.js +15 -0
- package/lib/vendor/blamejs/examples/wiki/src/editor.js +103 -0
- package/lib/vendor/blamejs/examples/wiki/src/wiki.js +349 -0
- package/lib/vendor/blamejs/examples/wiki/test/AUDIT.md +155 -0
- package/lib/vendor/blamejs/examples/wiki/test/codebase-patterns.test.js +594 -0
- package/lib/vendor/blamejs/examples/wiki/test/e2e.js +741 -0
- package/lib/vendor/blamejs/examples/wiki/test/find-missing-pages.js +254 -0
- package/lib/vendor/blamejs/examples/wiki/test/integration.js +391 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-cli-snapshot.js +379 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-env-snapshot.js +346 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-nav-coverage.js +212 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-site-coverage.js +252 -0
- package/lib/vendor/blamejs/examples/wiki/test/validate-source-comment-blocks.js +107 -0
- package/lib/vendor/blamejs/examples/wiki/views/_layout.html +115 -0
- package/lib/vendor/blamejs/examples/wiki/views/admin/api-keys.html +51 -0
- package/lib/vendor/blamejs/examples/wiki/views/admin/dashboard.html +22 -0
- package/lib/vendor/blamejs/examples/wiki/views/admin/edit.html +17 -0
- package/lib/vendor/blamejs/examples/wiki/views/home.html +85 -0
- package/lib/vendor/blamejs/examples/wiki/views/login.html +18 -0
- package/lib/vendor/blamejs/examples/wiki/views/page.html +5 -0
- package/lib/vendor/blamejs/examples/wiki/views/partials/nav.html +13 -0
- package/lib/vendor/blamejs/examples/wiki/views/search.html +19 -0
- package/lib/vendor/blamejs/examples/wiki/wiki.config.js +15 -0
- package/lib/vendor/blamejs/fuzz/README.md +137 -0
- package/lib/vendor/blamejs/fuzz/_expected.js +35 -0
- package/lib/vendor/blamejs/fuzz/guard-agent-registry.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-csv.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-csv_seed_corpus/01-basic.csv +3 -0
- package/lib/vendor/blamejs/fuzz/guard-csv_seed_corpus/02-formula.csv +1 -0
- package/lib/vendor/blamejs/fuzz/guard-csv_seed_corpus/03-hyperlink.csv +1 -0
- package/lib/vendor/blamejs/fuzz/guard-dsn.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-email.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-email_seed_corpus/01-basic.eml +5 -0
- package/lib/vendor/blamejs/fuzz/guard-envelope.fuzz.js +24 -0
- package/lib/vendor/blamejs/fuzz/guard-event-bus-payload.fuzz.js +24 -0
- package/lib/vendor/blamejs/fuzz/guard-event-bus-topic.fuzz.js +20 -0
- package/lib/vendor/blamejs/fuzz/guard-html.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/01-basic.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/02-script.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/03-event.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-html_seed_corpus/04-jsurl.html +1 -0
- package/lib/vendor/blamejs/fuzz/guard-idempotency-key.fuzz.js +20 -0
- package/lib/vendor/blamejs/fuzz/guard-imap-command.fuzz.js +35 -0
- package/lib/vendor/blamejs/fuzz/guard-jmap.fuzz.js +41 -0
- package/lib/vendor/blamejs/fuzz/guard-json.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/01-basic.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/02-proto.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/03-dupkey.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/04-nan.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-json_seed_corpus/05-bom.json +1 -0
- package/lib/vendor/blamejs/fuzz/guard-list-id.fuzz.js +21 -0
- package/lib/vendor/blamejs/fuzz/guard-list-unsubscribe.fuzz.js +25 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-compose.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-move.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-query.fuzz.js +27 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-reply.fuzz.js +23 -0
- package/lib/vendor/blamejs/fuzz/guard-mail-sieve.fuzz.js +36 -0
- package/lib/vendor/blamejs/fuzz/guard-managesieve-command.fuzz.js +26 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown_seed_corpus/01-basic.md +2 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown_seed_corpus/02-jsurl.md +1 -0
- package/lib/vendor/blamejs/fuzz/guard-markdown_seed_corpus/03-jsimg.md +1 -0
- package/lib/vendor/blamejs/fuzz/guard-message-id.fuzz.js +26 -0
- package/lib/vendor/blamejs/fuzz/guard-pop3-command.fuzz.js +23 -0
- package/lib/vendor/blamejs/fuzz/guard-posture-chain.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-saga-config.fuzz.js +32 -0
- package/lib/vendor/blamejs/fuzz/guard-smtp-command.fuzz.js +27 -0
- package/lib/vendor/blamejs/fuzz/guard-snapshot-envelope.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-stream-args.fuzz.js +22 -0
- package/lib/vendor/blamejs/fuzz/guard-svg.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-svg_seed_corpus/01-basic.svg +1 -0
- package/lib/vendor/blamejs/fuzz/guard-svg_seed_corpus/02-script.svg +1 -0
- package/lib/vendor/blamejs/fuzz/guard-tenant-id.fuzz.js +20 -0
- package/lib/vendor/blamejs/fuzz/guard-trace-context.fuzz.js +30 -0
- package/lib/vendor/blamejs/fuzz/guard-xml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-xml_seed_corpus/01-basic.xml +1 -0
- package/lib/vendor/blamejs/fuzz/guard-xml_seed_corpus/02-xxe.xml +1 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/01-basic.yaml +2 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/02-anchor.yaml +2 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/03-norway.yaml +1 -0
- package/lib/vendor/blamejs/fuzz/guard-yaml_seed_corpus/04-multidoc.yaml +4 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-ini.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-ini_seed_corpus/01-basic.ini +2 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-toml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-toml_seed_corpus/01-basic.toml +4 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-xml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-xml_seed_corpus/01-basic.xml +1 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-yaml.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/parsers__safe-yaml_seed_corpus/01-basic.yaml +4 -0
- package/lib/vendor/blamejs/fuzz/safe-decompress.fuzz.js +49 -0
- package/lib/vendor/blamejs/fuzz/safe-dns.fuzz.js +29 -0
- package/lib/vendor/blamejs/fuzz/safe-ical.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/safe-icap.fuzz.js +42 -0
- package/lib/vendor/blamejs/fuzz/safe-json.fuzz.js +25 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/01-object.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/02-array.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/03-string.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/04-proto.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-json_seed_corpus/05-deep.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/01-basic.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/02-filter.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/03-deepscan.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-jsonpath_seed_corpus/04-slice.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-mime.fuzz.js +27 -0
- package/lib/vendor/blamejs/fuzz/safe-mount-info.fuzz.js +33 -0
- package/lib/vendor/blamejs/fuzz/safe-sieve.fuzz.js +28 -0
- package/lib/vendor/blamejs/fuzz/safe-smtp.fuzz.js +64 -0
- package/lib/vendor/blamejs/fuzz/safe-url.fuzz.js +16 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/01-basic.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/02-userinfo.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/03-dangerous.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/04-data.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/05-ipv6.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-url_seed_corpus/06-idn.txt +1 -0
- package/lib/vendor/blamejs/fuzz/safe-vcard.fuzz.js +16 -0
- package/lib/vendor/blamejs/index.js +678 -0
- package/lib/vendor/blamejs/keys/release-pqc-pub.json +7 -0
- package/lib/vendor/blamejs/lib/_test/crypto-fixtures.js +67 -0
- package/lib/vendor/blamejs/lib/a2a-tasks.js +598 -0
- package/lib/vendor/blamejs/lib/a2a.js +407 -0
- package/lib/vendor/blamejs/lib/acme.js +1448 -0
- package/lib/vendor/blamejs/lib/agent-audit.js +45 -0
- package/lib/vendor/blamejs/lib/agent-event-bus.js +382 -0
- package/lib/vendor/blamejs/lib/agent-idempotency.js +497 -0
- package/lib/vendor/blamejs/lib/agent-orchestrator.js +717 -0
- package/lib/vendor/blamejs/lib/agent-posture-chain.js +366 -0
- package/lib/vendor/blamejs/lib/agent-saga.js +321 -0
- package/lib/vendor/blamejs/lib/agent-snapshot.js +676 -0
- package/lib/vendor/blamejs/lib/agent-stream.js +269 -0
- package/lib/vendor/blamejs/lib/agent-tenant.js +632 -0
- package/lib/vendor/blamejs/lib/agent-trace.js +281 -0
- package/lib/vendor/blamejs/lib/ai-adverse-decision.js +184 -0
- package/lib/vendor/blamejs/lib/ai-content-detect.js +268 -0
- package/lib/vendor/blamejs/lib/ai-input.js +201 -0
- package/lib/vendor/blamejs/lib/ai-model-manifest.js +363 -0
- package/lib/vendor/blamejs/lib/ai-pref.js +340 -0
- package/lib/vendor/blamejs/lib/api-key.js +721 -0
- package/lib/vendor/blamejs/lib/api-snapshot.js +458 -0
- package/lib/vendor/blamejs/lib/app-shutdown.js +557 -0
- package/lib/vendor/blamejs/lib/app.js +365 -0
- package/lib/vendor/blamejs/lib/archive.js +547 -0
- package/lib/vendor/blamejs/lib/arg-parser.js +697 -0
- package/lib/vendor/blamejs/lib/argon2-builtin.js +173 -0
- package/lib/vendor/blamejs/lib/asn1-der.js +424 -0
- package/lib/vendor/blamejs/lib/asyncapi-bindings.js +160 -0
- package/lib/vendor/blamejs/lib/asyncapi-traits.js +143 -0
- package/lib/vendor/blamejs/lib/asyncapi.js +575 -0
- package/lib/vendor/blamejs/lib/atomic-file.js +1023 -0
- package/lib/vendor/blamejs/lib/audit-chain.js +266 -0
- package/lib/vendor/blamejs/lib/audit-daily-review.js +389 -0
- package/lib/vendor/blamejs/lib/audit-sign.js +751 -0
- package/lib/vendor/blamejs/lib/audit-tools.js +1113 -0
- package/lib/vendor/blamejs/lib/audit.js +1671 -0
- package/lib/vendor/blamejs/lib/auth/aal.js +169 -0
- package/lib/vendor/blamejs/lib/auth/access-lock.js +220 -0
- package/lib/vendor/blamejs/lib/auth/acr-vocabulary.js +265 -0
- package/lib/vendor/blamejs/lib/auth/ato-kill-switch.js +112 -0
- package/lib/vendor/blamejs/lib/auth/auth-time-tracker.js +111 -0
- package/lib/vendor/blamejs/lib/auth/bot-challenge.js +573 -0
- package/lib/vendor/blamejs/lib/auth/ciba.js +637 -0
- package/lib/vendor/blamejs/lib/auth/dpop.js +516 -0
- package/lib/vendor/blamejs/lib/auth/elevation-grant.js +306 -0
- package/lib/vendor/blamejs/lib/auth/fal.js +229 -0
- package/lib/vendor/blamejs/lib/auth/fido-mds3.js +681 -0
- package/lib/vendor/blamejs/lib/auth/jwt-external.js +519 -0
- package/lib/vendor/blamejs/lib/auth/jwt.js +430 -0
- package/lib/vendor/blamejs/lib/auth/lockout.js +449 -0
- package/lib/vendor/blamejs/lib/auth/oauth.js +2141 -0
- package/lib/vendor/blamejs/lib/auth/oid4vci.js +657 -0
- package/lib/vendor/blamejs/lib/auth/oid4vp.js +531 -0
- package/lib/vendor/blamejs/lib/auth/openid-federation.js +600 -0
- package/lib/vendor/blamejs/lib/auth/passkey.js +676 -0
- package/lib/vendor/blamejs/lib/auth/password.js +693 -0
- package/lib/vendor/blamejs/lib/auth/saml.js +2109 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc-disclosure.js +95 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc-holder.js +225 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc-issuer.js +197 -0
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +728 -0
- package/lib/vendor/blamejs/lib/auth/status-list.js +272 -0
- package/lib/vendor/blamejs/lib/auth/step-up-policy.js +335 -0
- package/lib/vendor/blamejs/lib/auth/step-up.js +454 -0
- package/lib/vendor/blamejs/lib/auth-bot-challenge.js +505 -0
- package/lib/vendor/blamejs/lib/auth-header.js +148 -0
- package/lib/vendor/blamejs/lib/backup/bundle.js +265 -0
- package/lib/vendor/blamejs/lib/backup/crypto.js +176 -0
- package/lib/vendor/blamejs/lib/backup/index.js +1001 -0
- package/lib/vendor/blamejs/lib/backup/manifest.js +443 -0
- package/lib/vendor/blamejs/lib/boot-gates.js +174 -0
- package/lib/vendor/blamejs/lib/breach-deadline.js +272 -0
- package/lib/vendor/blamejs/lib/break-glass.js +1753 -0
- package/lib/vendor/blamejs/lib/budr.js +205 -0
- package/lib/vendor/blamejs/lib/bundler.js +461 -0
- package/lib/vendor/blamejs/lib/cache-redis.js +256 -0
- package/lib/vendor/blamejs/lib/cache-status.js +288 -0
- package/lib/vendor/blamejs/lib/cache.js +1331 -0
- package/lib/vendor/blamejs/lib/calendar.js +1240 -0
- package/lib/vendor/blamejs/lib/canonical-json.js +143 -0
- package/lib/vendor/blamejs/lib/cdn-cache-control.js +473 -0
- package/lib/vendor/blamejs/lib/cert.js +763 -0
- package/lib/vendor/blamejs/lib/chain-writer.js +259 -0
- package/lib/vendor/blamejs/lib/circuit-breaker.js +101 -0
- package/lib/vendor/blamejs/lib/cli-helpers.js +237 -0
- package/lib/vendor/blamejs/lib/cli.js +2328 -0
- package/lib/vendor/blamejs/lib/client-hints.js +318 -0
- package/lib/vendor/blamejs/lib/cloud-events.js +277 -0
- package/lib/vendor/blamejs/lib/cluster-provider-db.js +317 -0
- package/lib/vendor/blamejs/lib/cluster-storage.js +351 -0
- package/lib/vendor/blamejs/lib/cluster.js +1017 -0
- package/lib/vendor/blamejs/lib/cms-codec.js +826 -0
- package/lib/vendor/blamejs/lib/codepoint-class.js +262 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-logging.js +190 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +205 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-risk.js +189 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +200 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act.js +821 -0
- package/lib/vendor/blamejs/lib/compliance-eaa.js +204 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions-aliases.js +167 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions-fetcher.js +206 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions-fuzzy.js +297 -0
- package/lib/vendor/blamejs/lib/compliance-sanctions.js +569 -0
- package/lib/vendor/blamejs/lib/compliance.js +1558 -0
- package/lib/vendor/blamejs/lib/config-drift.js +426 -0
- package/lib/vendor/blamejs/lib/config.js +446 -0
- package/lib/vendor/blamejs/lib/consent.js +369 -0
- package/lib/vendor/blamejs/lib/constants.js +209 -0
- package/lib/vendor/blamejs/lib/content-credentials.js +704 -0
- package/lib/vendor/blamejs/lib/cookies.js +560 -0
- package/lib/vendor/blamejs/lib/cra-report.js +299 -0
- package/lib/vendor/blamejs/lib/credential-hash.js +394 -0
- package/lib/vendor/blamejs/lib/crypto-field.js +1017 -0
- package/lib/vendor/blamejs/lib/crypto-hpke-pq.js +187 -0
- package/lib/vendor/blamejs/lib/crypto-hpke.js +256 -0
- package/lib/vendor/blamejs/lib/crypto.js +1908 -0
- package/lib/vendor/blamejs/lib/csp.js +271 -0
- package/lib/vendor/blamejs/lib/csv.js +418 -0
- package/lib/vendor/blamejs/lib/daemon.js +481 -0
- package/lib/vendor/blamejs/lib/dark-patterns.js +488 -0
- package/lib/vendor/blamejs/lib/data-act.js +328 -0
- package/lib/vendor/blamejs/lib/db-collection.js +587 -0
- package/lib/vendor/blamejs/lib/db-declare-row-policy.js +267 -0
- package/lib/vendor/blamejs/lib/db-declare-view.js +420 -0
- package/lib/vendor/blamejs/lib/db-file-lifecycle.js +333 -0
- package/lib/vendor/blamejs/lib/db-query.js +802 -0
- package/lib/vendor/blamejs/lib/db-role-context.js +50 -0
- package/lib/vendor/blamejs/lib/db-schema.js +322 -0
- package/lib/vendor/blamejs/lib/db.js +3111 -0
- package/lib/vendor/blamejs/lib/dbsc.js +299 -0
- package/lib/vendor/blamejs/lib/ddl-change-control.js +523 -0
- package/lib/vendor/blamejs/lib/deprecate.js +377 -0
- package/lib/vendor/blamejs/lib/dev.js +405 -0
- package/lib/vendor/blamejs/lib/dora.js +402 -0
- package/lib/vendor/blamejs/lib/dr-runbook.js +368 -0
- package/lib/vendor/blamejs/lib/dsr.js +1188 -0
- package/lib/vendor/blamejs/lib/dual-control.js +526 -0
- package/lib/vendor/blamejs/lib/early-hints.js +212 -0
- package/lib/vendor/blamejs/lib/error-page.js +420 -0
- package/lib/vendor/blamejs/lib/events.js +214 -0
- package/lib/vendor/blamejs/lib/external-db-migrate.js +659 -0
- package/lib/vendor/blamejs/lib/external-db.js +1877 -0
- package/lib/vendor/blamejs/lib/fapi2.js +394 -0
- package/lib/vendor/blamejs/lib/fda-21cfr11.js +395 -0
- package/lib/vendor/blamejs/lib/fdx.js +370 -0
- package/lib/vendor/blamejs/lib/fedcm.js +264 -0
- package/lib/vendor/blamejs/lib/file-type.js +360 -0
- package/lib/vendor/blamejs/lib/file-upload.js +1256 -0
- package/lib/vendor/blamejs/lib/flag-cache.js +136 -0
- package/lib/vendor/blamejs/lib/flag-evaluation-context.js +135 -0
- package/lib/vendor/blamejs/lib/flag-providers.js +279 -0
- package/lib/vendor/blamejs/lib/flag-targeting.js +210 -0
- package/lib/vendor/blamejs/lib/flag.js +346 -0
- package/lib/vendor/blamejs/lib/forms.js +525 -0
- package/lib/vendor/blamejs/lib/framework-error.js +724 -0
- package/lib/vendor/blamejs/lib/framework-schema.js +845 -0
- package/lib/vendor/blamejs/lib/framework-sha1-hibp.js +34 -0
- package/lib/vendor/blamejs/lib/fsm.js +469 -0
- package/lib/vendor/blamejs/lib/gate-contract.js +1661 -0
- package/lib/vendor/blamejs/lib/gdpr-ropa.js +261 -0
- package/lib/vendor/blamejs/lib/graphql-federation.js +234 -0
- package/lib/vendor/blamejs/lib/guard-agent-registry.js +179 -0
- package/lib/vendor/blamejs/lib/guard-all.js +555 -0
- package/lib/vendor/blamejs/lib/guard-archive.js +901 -0
- package/lib/vendor/blamejs/lib/guard-auth.js +451 -0
- package/lib/vendor/blamejs/lib/guard-cidr.js +676 -0
- package/lib/vendor/blamejs/lib/guard-csv.js +1176 -0
- package/lib/vendor/blamejs/lib/guard-domain.js +814 -0
- package/lib/vendor/blamejs/lib/guard-dsn.js +382 -0
- package/lib/vendor/blamejs/lib/guard-email.js +951 -0
- package/lib/vendor/blamejs/lib/guard-envelope.js +294 -0
- package/lib/vendor/blamejs/lib/guard-event-bus-payload.js +217 -0
- package/lib/vendor/blamejs/lib/guard-event-bus-topic.js +150 -0
- package/lib/vendor/blamejs/lib/guard-filename.js +956 -0
- package/lib/vendor/blamejs/lib/guard-graphql.js +731 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-aria.js +164 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-forms.js +144 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-tables.js +154 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag-tagwalk.js +44 -0
- package/lib/vendor/blamejs/lib/guard-html-wcag.js +470 -0
- package/lib/vendor/blamejs/lib/guard-html.js +1209 -0
- package/lib/vendor/blamejs/lib/guard-idempotency-key.js +151 -0
- package/lib/vendor/blamejs/lib/guard-image.js +584 -0
- package/lib/vendor/blamejs/lib/guard-imap-command.js +337 -0
- package/lib/vendor/blamejs/lib/guard-jmap.js +321 -0
- package/lib/vendor/blamejs/lib/guard-json.js +935 -0
- package/lib/vendor/blamejs/lib/guard-jsonpath.js +512 -0
- package/lib/vendor/blamejs/lib/guard-jwt.js +772 -0
- package/lib/vendor/blamejs/lib/guard-list-id.js +318 -0
- package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +412 -0
- package/lib/vendor/blamejs/lib/guard-mail-compose.js +282 -0
- package/lib/vendor/blamejs/lib/guard-mail-move.js +202 -0
- package/lib/vendor/blamejs/lib/guard-mail-query.js +310 -0
- package/lib/vendor/blamejs/lib/guard-mail-reply.js +172 -0
- package/lib/vendor/blamejs/lib/guard-mail-sieve.js +207 -0
- package/lib/vendor/blamejs/lib/guard-managesieve-command.js +566 -0
- package/lib/vendor/blamejs/lib/guard-markdown.js +768 -0
- package/lib/vendor/blamejs/lib/guard-message-id.js +267 -0
- package/lib/vendor/blamejs/lib/guard-mime.js +609 -0
- package/lib/vendor/blamejs/lib/guard-oauth.js +650 -0
- package/lib/vendor/blamejs/lib/guard-pdf.js +569 -0
- package/lib/vendor/blamejs/lib/guard-pop3-command.js +317 -0
- package/lib/vendor/blamejs/lib/guard-posture-chain.js +201 -0
- package/lib/vendor/blamejs/lib/guard-regex.js +632 -0
- package/lib/vendor/blamejs/lib/guard-saga-config.js +157 -0
- package/lib/vendor/blamejs/lib/guard-shell.js +522 -0
- package/lib/vendor/blamejs/lib/guard-smtp-command.js +594 -0
- package/lib/vendor/blamejs/lib/guard-snapshot-envelope.js +168 -0
- package/lib/vendor/blamejs/lib/guard-stream-args.js +166 -0
- package/lib/vendor/blamejs/lib/guard-svg.js +1163 -0
- package/lib/vendor/blamejs/lib/guard-template.js +490 -0
- package/lib/vendor/blamejs/lib/guard-tenant-id.js +138 -0
- package/lib/vendor/blamejs/lib/guard-time.js +586 -0
- package/lib/vendor/blamejs/lib/guard-trace-context.js +172 -0
- package/lib/vendor/blamejs/lib/guard-uuid.js +548 -0
- package/lib/vendor/blamejs/lib/guard-xml.js +666 -0
- package/lib/vendor/blamejs/lib/guard-yaml.js +726 -0
- package/lib/vendor/blamejs/lib/hal.js +125 -0
- package/lib/vendor/blamejs/lib/handlers.js +350 -0
- package/lib/vendor/blamejs/lib/honeytoken.js +168 -0
- package/lib/vendor/blamejs/lib/html-balance.js +347 -0
- package/lib/vendor/blamejs/lib/http-client-cache.js +923 -0
- package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +519 -0
- package/lib/vendor/blamejs/lib/http-client.js +2152 -0
- package/lib/vendor/blamejs/lib/http-message-signature.js +589 -0
- package/lib/vendor/blamejs/lib/http2-teardown.js +34 -0
- package/lib/vendor/blamejs/lib/i18n-messageformat.js +398 -0
- package/lib/vendor/blamejs/lib/i18n.js +931 -0
- package/lib/vendor/blamejs/lib/iab-mspa.js +257 -0
- package/lib/vendor/blamejs/lib/iab-tcf.js +461 -0
- package/lib/vendor/blamejs/lib/importmap-integrity.js +90 -0
- package/lib/vendor/blamejs/lib/inbox.js +435 -0
- package/lib/vendor/blamejs/lib/incident-report.js +314 -0
- package/lib/vendor/blamejs/lib/ip-utils.js +102 -0
- package/lib/vendor/blamejs/lib/jobs.js +185 -0
- package/lib/vendor/blamejs/lib/jose-jwe-experimental.js +228 -0
- package/lib/vendor/blamejs/lib/jsonapi.js +230 -0
- package/lib/vendor/blamejs/lib/keychain.js +865 -0
- package/lib/vendor/blamejs/lib/lazy-require.js +48 -0
- package/lib/vendor/blamejs/lib/legal-hold.js +374 -0
- package/lib/vendor/blamejs/lib/local-db-thin.js +321 -0
- package/lib/vendor/blamejs/lib/log-stream-cloudwatch.js +369 -0
- package/lib/vendor/blamejs/lib/log-stream-local.js +146 -0
- package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +410 -0
- package/lib/vendor/blamejs/lib/log-stream-otlp.js +286 -0
- package/lib/vendor/blamejs/lib/log-stream-syslog.js +310 -0
- package/lib/vendor/blamejs/lib/log-stream-webhook.js +199 -0
- package/lib/vendor/blamejs/lib/log-stream.js +584 -0
- package/lib/vendor/blamejs/lib/log.js +625 -0
- package/lib/vendor/blamejs/lib/lro.js +200 -0
- package/lib/vendor/blamejs/lib/mail-agent.js +786 -0
- package/lib/vendor/blamejs/lib/mail-arc-sign.js +417 -0
- package/lib/vendor/blamejs/lib/mail-arf.js +343 -0
- package/lib/vendor/blamejs/lib/mail-auth.js +2144 -0
- package/lib/vendor/blamejs/lib/mail-bimi.js +1047 -0
- package/lib/vendor/blamejs/lib/mail-bounce.js +955 -0
- package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +1286 -0
- package/lib/vendor/blamejs/lib/mail-crypto-smime.js +789 -0
- package/lib/vendor/blamejs/lib/mail-crypto.js +108 -0
- package/lib/vendor/blamejs/lib/mail-dav.js +1224 -0
- package/lib/vendor/blamejs/lib/mail-deploy.js +1119 -0
- package/lib/vendor/blamejs/lib/mail-dkim.js +1250 -0
- package/lib/vendor/blamejs/lib/mail-greylist.js +448 -0
- package/lib/vendor/blamejs/lib/mail-helo.js +473 -0
- package/lib/vendor/blamejs/lib/mail-journal.js +435 -0
- package/lib/vendor/blamejs/lib/mail-mdn.js +424 -0
- package/lib/vendor/blamejs/lib/mail-rbl.js +392 -0
- package/lib/vendor/blamejs/lib/mail-require-tls.js +198 -0
- package/lib/vendor/blamejs/lib/mail-scan.js +502 -0
- package/lib/vendor/blamejs/lib/mail-send-deliver.js +629 -0
- package/lib/vendor/blamejs/lib/mail-server-imap.js +1858 -0
- package/lib/vendor/blamejs/lib/mail-server-jmap.js +1565 -0
- package/lib/vendor/blamejs/lib/mail-server-managesieve.js +908 -0
- package/lib/vendor/blamejs/lib/mail-server-mx.js +969 -0
- package/lib/vendor/blamejs/lib/mail-server-pop3.js +915 -0
- package/lib/vendor/blamejs/lib/mail-server-rate-limit.js +315 -0
- package/lib/vendor/blamejs/lib/mail-server-registry.js +378 -0
- package/lib/vendor/blamejs/lib/mail-server-submission.js +1396 -0
- package/lib/vendor/blamejs/lib/mail-server-tls.js +445 -0
- package/lib/vendor/blamejs/lib/mail-sieve.js +557 -0
- package/lib/vendor/blamejs/lib/mail-spam-score.js +284 -0
- package/lib/vendor/blamejs/lib/mail-srs.js +248 -0
- package/lib/vendor/blamejs/lib/mail-store-fts.js +394 -0
- package/lib/vendor/blamejs/lib/mail-store.js +929 -0
- package/lib/vendor/blamejs/lib/mail-unsubscribe.js +400 -0
- package/lib/vendor/blamejs/lib/mail.js +1971 -0
- package/lib/vendor/blamejs/lib/mcp-tool-registry.js +473 -0
- package/lib/vendor/blamejs/lib/mcp.js +950 -0
- package/lib/vendor/blamejs/lib/metrics.js +1503 -0
- package/lib/vendor/blamejs/lib/middleware/age-gate.js +177 -0
- package/lib/vendor/blamejs/lib/middleware/ai-act-disclosure.js +203 -0
- package/lib/vendor/blamejs/lib/middleware/api-encrypt.js +981 -0
- package/lib/vendor/blamejs/lib/middleware/assetlinks.js +137 -0
- package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +171 -0
- package/lib/vendor/blamejs/lib/middleware/attach-user.js +220 -0
- package/lib/vendor/blamejs/lib/middleware/bearer-auth.js +293 -0
- package/lib/vendor/blamejs/lib/middleware/body-parser.js +1519 -0
- package/lib/vendor/blamejs/lib/middleware/bot-disclose.js +183 -0
- package/lib/vendor/blamejs/lib/middleware/bot-guard.js +217 -0
- package/lib/vendor/blamejs/lib/middleware/clear-site-data.js +122 -0
- package/lib/vendor/blamejs/lib/middleware/compose-pipeline.js +355 -0
- package/lib/vendor/blamejs/lib/middleware/compression.js +489 -0
- package/lib/vendor/blamejs/lib/middleware/cookies.js +130 -0
- package/lib/vendor/blamejs/lib/middleware/cors.js +386 -0
- package/lib/vendor/blamejs/lib/middleware/csp-nonce.js +388 -0
- package/lib/vendor/blamejs/lib/middleware/csp-report.js +167 -0
- package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +499 -0
- package/lib/vendor/blamejs/lib/middleware/daily-byte-quota.js +243 -0
- package/lib/vendor/blamejs/lib/middleware/db-role-for.js +304 -0
- package/lib/vendor/blamejs/lib/middleware/dpop.js +402 -0
- package/lib/vendor/blamejs/lib/middleware/error-handler.js +69 -0
- package/lib/vendor/blamejs/lib/middleware/fetch-metadata.js +168 -0
- package/lib/vendor/blamejs/lib/middleware/flag-context.js +110 -0
- package/lib/vendor/blamejs/lib/middleware/gpc.js +153 -0
- package/lib/vendor/blamejs/lib/middleware/headers.js +242 -0
- package/lib/vendor/blamejs/lib/middleware/health.js +438 -0
- package/lib/vendor/blamejs/lib/middleware/host-allowlist.js +189 -0
- package/lib/vendor/blamejs/lib/middleware/idempotency-key.js +964 -0
- package/lib/vendor/blamejs/lib/middleware/index.js +183 -0
- package/lib/vendor/blamejs/lib/middleware/nel.js +214 -0
- package/lib/vendor/blamejs/lib/middleware/network-allowlist.js +237 -0
- package/lib/vendor/blamejs/lib/middleware/no-cache.js +106 -0
- package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +177 -0
- package/lib/vendor/blamejs/lib/middleware/protected-resource-metadata.js +277 -0
- package/lib/vendor/blamejs/lib/middleware/rate-limit.js +556 -0
- package/lib/vendor/blamejs/lib/middleware/request-id.js +79 -0
- package/lib/vendor/blamejs/lib/middleware/request-log.js +205 -0
- package/lib/vendor/blamejs/lib/middleware/require-aal.js +138 -0
- package/lib/vendor/blamejs/lib/middleware/require-auth.js +144 -0
- package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +290 -0
- package/lib/vendor/blamejs/lib/middleware/require-content-type.js +113 -0
- package/lib/vendor/blamejs/lib/middleware/require-methods.js +97 -0
- package/lib/vendor/blamejs/lib/middleware/require-mtls.js +212 -0
- package/lib/vendor/blamejs/lib/middleware/require-step-up.js +226 -0
- package/lib/vendor/blamejs/lib/middleware/scim-server.js +375 -0
- package/lib/vendor/blamejs/lib/middleware/security-headers.js +285 -0
- package/lib/vendor/blamejs/lib/middleware/security-txt.js +170 -0
- package/lib/vendor/blamejs/lib/middleware/span-http-server.js +280 -0
- package/lib/vendor/blamejs/lib/middleware/speculation-rules.js +323 -0
- package/lib/vendor/blamejs/lib/middleware/sse.js +200 -0
- package/lib/vendor/blamejs/lib/middleware/trace-log-correlation.js +167 -0
- package/lib/vendor/blamejs/lib/middleware/trace-propagate.js +148 -0
- package/lib/vendor/blamejs/lib/middleware/tus-upload.js +749 -0
- package/lib/vendor/blamejs/lib/middleware/web-app-manifest.js +164 -0
- package/lib/vendor/blamejs/lib/migration-files.js +37 -0
- package/lib/vendor/blamejs/lib/migrations.js +385 -0
- package/lib/vendor/blamejs/lib/mime-parse.js +198 -0
- package/lib/vendor/blamejs/lib/money.js +699 -0
- package/lib/vendor/blamejs/lib/mtls-ca.js +572 -0
- package/lib/vendor/blamejs/lib/mtls-engine-default.js +501 -0
- package/lib/vendor/blamejs/lib/network-byte-quota.js +308 -0
- package/lib/vendor/blamejs/lib/network-dns-resolver.js +533 -0
- package/lib/vendor/blamejs/lib/network-dns.js +1930 -0
- package/lib/vendor/blamejs/lib/network-heartbeat.js +425 -0
- package/lib/vendor/blamejs/lib/network-nts.js +574 -0
- package/lib/vendor/blamejs/lib/network-proxy.js +265 -0
- package/lib/vendor/blamejs/lib/network-smtp-policy.js +836 -0
- package/lib/vendor/blamejs/lib/network-tls.js +3126 -0
- package/lib/vendor/blamejs/lib/network.js +346 -0
- package/lib/vendor/blamejs/lib/nis2-report.js +181 -0
- package/lib/vendor/blamejs/lib/nist-crosswalk.js +293 -0
- package/lib/vendor/blamejs/lib/nonce-store.js +177 -0
- package/lib/vendor/blamejs/lib/notify.js +683 -0
- package/lib/vendor/blamejs/lib/ntp-check.js +458 -0
- package/lib/vendor/blamejs/lib/numeric-bounds.js +111 -0
- package/lib/vendor/blamejs/lib/numeric-checks.js +40 -0
- package/lib/vendor/blamejs/lib/object-store/azure-blob-bucket-ops.js +349 -0
- package/lib/vendor/blamejs/lib/object-store/azure-blob.js +488 -0
- package/lib/vendor/blamejs/lib/object-store/gcs-bucket-ops.js +351 -0
- package/lib/vendor/blamejs/lib/object-store/gcs.js +515 -0
- package/lib/vendor/blamejs/lib/object-store/http-put.js +153 -0
- package/lib/vendor/blamejs/lib/object-store/http-request.js +38 -0
- package/lib/vendor/blamejs/lib/object-store/index.js +197 -0
- package/lib/vendor/blamejs/lib/object-store/local.js +163 -0
- package/lib/vendor/blamejs/lib/object-store/sigv4-bucket-ops.js +1133 -0
- package/lib/vendor/blamejs/lib/object-store/sigv4.js +957 -0
- package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +420 -0
- package/lib/vendor/blamejs/lib/observability-tracer.js +395 -0
- package/lib/vendor/blamejs/lib/observability.js +720 -0
- package/lib/vendor/blamejs/lib/openapi-paths-builder.js +248 -0
- package/lib/vendor/blamejs/lib/openapi-schema-walk.js +192 -0
- package/lib/vendor/blamejs/lib/openapi-security.js +169 -0
- package/lib/vendor/blamejs/lib/openapi-yaml.js +154 -0
- package/lib/vendor/blamejs/lib/openapi.js +489 -0
- package/lib/vendor/blamejs/lib/otel-export.js +278 -0
- package/lib/vendor/blamejs/lib/outbox.js +547 -0
- package/lib/vendor/blamejs/lib/pagination.js +542 -0
- package/lib/vendor/blamejs/lib/parsers/index.js +91 -0
- package/lib/vendor/blamejs/lib/parsers/safe-env.js +642 -0
- package/lib/vendor/blamejs/lib/parsers/safe-ini.js +293 -0
- package/lib/vendor/blamejs/lib/parsers/safe-toml.js +784 -0
- package/lib/vendor/blamejs/lib/parsers/safe-xml.js +390 -0
- package/lib/vendor/blamejs/lib/parsers/safe-yaml.js +1015 -0
- package/lib/vendor/blamejs/lib/permissions.js +793 -0
- package/lib/vendor/blamejs/lib/pick.js +105 -0
- package/lib/vendor/blamejs/lib/pqc-agent.js +351 -0
- package/lib/vendor/blamejs/lib/pqc-gate.js +279 -0
- package/lib/vendor/blamejs/lib/pqc-software.js +271 -0
- package/lib/vendor/blamejs/lib/problem-details.js +482 -0
- package/lib/vendor/blamejs/lib/process-spawn.js +196 -0
- package/lib/vendor/blamejs/lib/promise-pool.js +162 -0
- package/lib/vendor/blamejs/lib/protobuf-encoder.js +190 -0
- package/lib/vendor/blamejs/lib/protocol-dispatcher.js +161 -0
- package/lib/vendor/blamejs/lib/public-suffix.js +403 -0
- package/lib/vendor/blamejs/lib/pubsub-cluster.js +154 -0
- package/lib/vendor/blamejs/lib/pubsub-redis.js +167 -0
- package/lib/vendor/blamejs/lib/pubsub.js +463 -0
- package/lib/vendor/blamejs/lib/queue-local.js +476 -0
- package/lib/vendor/blamejs/lib/queue-redis.js +745 -0
- package/lib/vendor/blamejs/lib/queue-sqs.js +319 -0
- package/lib/vendor/blamejs/lib/queue.js +1016 -0
- package/lib/vendor/blamejs/lib/redact.js +1007 -0
- package/lib/vendor/blamejs/lib/redis-client.js +520 -0
- package/lib/vendor/blamejs/lib/render.js +285 -0
- package/lib/vendor/blamejs/lib/request-helpers.js +767 -0
- package/lib/vendor/blamejs/lib/resource-access-lock.js +116 -0
- package/lib/vendor/blamejs/lib/restore-bundle.js +340 -0
- package/lib/vendor/blamejs/lib/restore-rollback.js +365 -0
- package/lib/vendor/blamejs/lib/restore.js +409 -0
- package/lib/vendor/blamejs/lib/retention.js +640 -0
- package/lib/vendor/blamejs/lib/retry.js +523 -0
- package/lib/vendor/blamejs/lib/router.js +1289 -0
- package/lib/vendor/blamejs/lib/safe-async.js +1184 -0
- package/lib/vendor/blamejs/lib/safe-buffer.js +562 -0
- package/lib/vendor/blamejs/lib/safe-decompress.js +297 -0
- package/lib/vendor/blamejs/lib/safe-dns.js +665 -0
- package/lib/vendor/blamejs/lib/safe-ical.js +634 -0
- package/lib/vendor/blamejs/lib/safe-icap.js +502 -0
- package/lib/vendor/blamejs/lib/safe-json.js +946 -0
- package/lib/vendor/blamejs/lib/safe-jsonpath.js +285 -0
- package/lib/vendor/blamejs/lib/safe-mime.js +831 -0
- package/lib/vendor/blamejs/lib/safe-mount-info.js +306 -0
- package/lib/vendor/blamejs/lib/safe-path.js +254 -0
- package/lib/vendor/blamejs/lib/safe-redirect.js +106 -0
- package/lib/vendor/blamejs/lib/safe-schema.js +1810 -0
- package/lib/vendor/blamejs/lib/safe-sieve.js +684 -0
- package/lib/vendor/blamejs/lib/safe-smtp.js +185 -0
- package/lib/vendor/blamejs/lib/safe-sql.js +363 -0
- package/lib/vendor/blamejs/lib/safe-url.js +428 -0
- package/lib/vendor/blamejs/lib/safe-vcard.js +473 -0
- package/lib/vendor/blamejs/lib/sandbox-worker.js +135 -0
- package/lib/vendor/blamejs/lib/sandbox.js +358 -0
- package/lib/vendor/blamejs/lib/scheduler.js +827 -0
- package/lib/vendor/blamejs/lib/sd-notify.js +269 -0
- package/lib/vendor/blamejs/lib/sec-cyber.js +214 -0
- package/lib/vendor/blamejs/lib/security-assert.js +395 -0
- package/lib/vendor/blamejs/lib/seeders.js +620 -0
- package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +309 -0
- package/lib/vendor/blamejs/lib/self-update.js +804 -0
- package/lib/vendor/blamejs/lib/server-timing.js +174 -0
- package/lib/vendor/blamejs/lib/session-device-binding.js +431 -0
- package/lib/vendor/blamejs/lib/session-stores.js +138 -0
- package/lib/vendor/blamejs/lib/session.js +1162 -0
- package/lib/vendor/blamejs/lib/slug.js +381 -0
- package/lib/vendor/blamejs/lib/sse.js +349 -0
- package/lib/vendor/blamejs/lib/ssrf-guard.js +792 -0
- package/lib/vendor/blamejs/lib/standard-webhooks.js +183 -0
- package/lib/vendor/blamejs/lib/static.js +1249 -0
- package/lib/vendor/blamejs/lib/storage.js +1272 -0
- package/lib/vendor/blamejs/lib/stream-throttle.js +235 -0
- package/lib/vendor/blamejs/lib/structured-fields.js +244 -0
- package/lib/vendor/blamejs/lib/subject.js +667 -0
- package/lib/vendor/blamejs/lib/tcpa-10dlc.js +175 -0
- package/lib/vendor/blamejs/lib/template.js +931 -0
- package/lib/vendor/blamejs/lib/tenant-quota.js +545 -0
- package/lib/vendor/blamejs/lib/test-harness.js +275 -0
- package/lib/vendor/blamejs/lib/testing.js +1185 -0
- package/lib/vendor/blamejs/lib/time.js +578 -0
- package/lib/vendor/blamejs/lib/tls-exporter.js +239 -0
- package/lib/vendor/blamejs/lib/totp.js +318 -0
- package/lib/vendor/blamejs/lib/tracing.js +546 -0
- package/lib/vendor/blamejs/lib/uuid.js +207 -0
- package/lib/vendor/blamejs/lib/validate-opts.js +381 -0
- package/lib/vendor/blamejs/lib/vault/index.js +638 -0
- package/lib/vendor/blamejs/lib/vault/passphrase-ops.js +311 -0
- package/lib/vendor/blamejs/lib/vault/passphrase-source.js +198 -0
- package/lib/vendor/blamejs/lib/vault/rotate.js +803 -0
- package/lib/vendor/blamejs/lib/vault/seal-pem-file.js +471 -0
- package/lib/vendor/blamejs/lib/vault/wrap.js +296 -0
- package/lib/vendor/blamejs/lib/vault-aad.js +259 -0
- package/lib/vendor/blamejs/lib/vendor/.vendor-data-pubkey +4 -0
- package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +161 -0
- package/lib/vendor/blamejs/lib/vendor/bimi-trust-anchors.data.js +68 -0
- package/lib/vendor/blamejs/lib/vendor/bimi-trust-anchors.pem +33 -0
- package/lib/vendor/blamejs/lib/vendor/common-passwords-top-10000.data.js +1325 -0
- package/lib/vendor/blamejs/lib/vendor/common-passwords-top-10000.txt +10002 -0
- package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +9 -0
- package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +18 -0
- package/lib/vendor/blamejs/lib/vendor/pki.cjs +181 -0
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +16382 -0
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5881 -0
- package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +328 -0
- package/lib/vendor/blamejs/lib/vendor/vendor-data-pubkey.js +16 -0
- package/lib/vendor/blamejs/lib/vendor-data.js +520 -0
- package/lib/vendor/blamejs/lib/vex.js +630 -0
- package/lib/vendor/blamejs/lib/watcher.js +608 -0
- package/lib/vendor/blamejs/lib/web-push-vapid.js +322 -0
- package/lib/vendor/blamejs/lib/webhook.js +977 -0
- package/lib/vendor/blamejs/lib/websocket-channels.js +327 -0
- package/lib/vendor/blamejs/lib/websocket.js +1561 -0
- package/lib/vendor/blamejs/lib/wiki-concepts.js +338 -0
- package/lib/vendor/blamejs/lib/worker-pool.js +464 -0
- package/lib/vendor/blamejs/lib/ws-client.js +978 -0
- package/lib/vendor/blamejs/lib/xml-c14n.js +506 -0
- package/lib/vendor/blamejs/memory/specs/node-26-map-getorinsert-migration.md +164 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +19 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/README.md +88 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/build.sh +26 -0
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/project.yaml +28 -0
- package/lib/vendor/blamejs/package.json +81 -0
- package/lib/vendor/blamejs/release-notes/v0.0.x.json +310 -0
- package/lib/vendor/blamejs/release-notes/v0.1.x.json +1798 -0
- package/lib/vendor/blamejs/release-notes/v0.10.x.json +1288 -0
- package/lib/vendor/blamejs/release-notes/v0.11.x.json +2551 -0
- package/lib/vendor/blamejs/release-notes/v0.12.0.json +64 -0
- package/lib/vendor/blamejs/release-notes/v0.12.1.json +32 -0
- package/lib/vendor/blamejs/release-notes/v0.12.2.json +45 -0
- package/lib/vendor/blamejs/release-notes/v0.2.x.json +706 -0
- package/lib/vendor/blamejs/release-notes/v0.3.x.json +786 -0
- package/lib/vendor/blamejs/release-notes/v0.4.x.json +588 -0
- package/lib/vendor/blamejs/release-notes/v0.5.x.json +390 -0
- package/lib/vendor/blamejs/release-notes/v0.6.x.json +1947 -0
- package/lib/vendor/blamejs/release-notes/v0.7.x.json +3811 -0
- package/lib/vendor/blamejs/release-notes/v0.8.x.json +3318 -0
- package/lib/vendor/blamejs/release-notes/v0.9.x.json +2257 -0
- package/lib/vendor/blamejs/scripts/build-vendored-sbom.js +325 -0
- package/lib/vendor/blamejs/scripts/check-api-snapshot.js +62 -0
- package/lib/vendor/blamejs/scripts/check-changelog-extract.js +108 -0
- package/lib/vendor/blamejs/scripts/check-pack-against-gitignore.js +83 -0
- package/lib/vendor/blamejs/scripts/check-services.js +483 -0
- package/lib/vendor/blamejs/scripts/check-vendor-currency.js +349 -0
- package/lib/vendor/blamejs/scripts/consolidate-release-notes.js +216 -0
- package/lib/vendor/blamejs/scripts/gen-migrating.js +275 -0
- package/lib/vendor/blamejs/scripts/generate-changelog-entry.js +577 -0
- package/lib/vendor/blamejs/scripts/generate-release-signing-key.js +79 -0
- package/lib/vendor/blamejs/scripts/publish-dep-confusion-placeholder.sh +101 -0
- package/lib/vendor/blamejs/scripts/refresh-api-snapshot.js +31 -0
- package/lib/vendor/blamejs/scripts/refresh-vendor-manifest.js +132 -0
- package/lib/vendor/blamejs/scripts/release.js +652 -0
- package/lib/vendor/blamejs/scripts/sha3-digest.js +62 -0
- package/lib/vendor/blamejs/scripts/sign-release-artifact.js +92 -0
- package/lib/vendor/blamejs/scripts/test-integration.js +181 -0
- package/lib/vendor/blamejs/scripts/test-wiki-integration.js +126 -0
- package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +77 -0
- package/lib/vendor/blamejs/scripts/vendor-data-gen.js +186 -0
- package/lib/vendor/blamejs/scripts/vendor-data-keygen.js +101 -0
- package/lib/vendor/blamejs/scripts/vendor-update.sh +278 -0
- package/lib/vendor/blamejs/test/00-primitives.js +19075 -0
- package/lib/vendor/blamejs/test/10-state.js +622 -0
- package/lib/vendor/blamejs/test/20-db.js +561 -0
- package/lib/vendor/blamejs/test/30-chain.js +2110 -0
- package/lib/vendor/blamejs/test/40-consumers.js +2453 -0
- package/lib/vendor/blamejs/test/50-integration.js +486 -0
- package/lib/vendor/blamejs/test/_helpers.js +10 -0
- package/lib/vendor/blamejs/test/_smoke-worker.js +69 -0
- package/lib/vendor/blamejs/test/fixtures/exploit-corpus/corpus.json +368 -0
- package/lib/vendor/blamejs/test/fixtures/http-client-stream-payload.txt +2 -0
- package/lib/vendor/blamejs/test/fixtures/worker-pool/echo.js +52 -0
- package/lib/vendor/blamejs/test/helpers/_codebase-shingle-worker.js +24 -0
- package/lib/vendor/blamejs/test/helpers/_codebase-shingle.js +203 -0
- package/lib/vendor/blamejs/test/helpers/_shape-match.js +513 -0
- package/lib/vendor/blamejs/test/helpers/check.js +36 -0
- package/lib/vendor/blamejs/test/helpers/cluster.js +70 -0
- package/lib/vendor/blamejs/test/helpers/db.js +143 -0
- package/lib/vendor/blamejs/test/helpers/drivers.js +207 -0
- package/lib/vendor/blamejs/test/helpers/fs-watch.js +101 -0
- package/lib/vendor/blamejs/test/helpers/http.js +14 -0
- package/lib/vendor/blamejs/test/helpers/index.js +93 -0
- package/lib/vendor/blamejs/test/helpers/json-round-trip.js +120 -0
- package/lib/vendor/blamejs/test/helpers/mocks.js +20 -0
- package/lib/vendor/blamejs/test/helpers/otel.js +13 -0
- package/lib/vendor/blamejs/test/helpers/services.js +380 -0
- package/lib/vendor/blamejs/test/helpers/wait.js +206 -0
- package/lib/vendor/blamejs/test/integration/cache.test.js +235 -0
- package/lib/vendor/blamejs/test/integration/cluster-provider-mysql.test.js +174 -0
- package/lib/vendor/blamejs/test/integration/federation-auth.test.js +611 -0
- package/lib/vendor/blamejs/test/integration/http-client.test.js +129 -0
- package/lib/vendor/blamejs/test/integration/log-stream.test.js +219 -0
- package/lib/vendor/blamejs/test/integration/mail-crypto-smime.test.js +181 -0
- package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +152 -0
- package/lib/vendor/blamejs/test/integration/mail-smtp.test.js +161 -0
- package/lib/vendor/blamejs/test/integration/mtls-ca.test.js +289 -0
- package/lib/vendor/blamejs/test/integration/network-dns.test.js +123 -0
- package/lib/vendor/blamejs/test/integration/network-heartbeat.test.js +101 -0
- package/lib/vendor/blamejs/test/integration/ntp-check.test.js +89 -0
- package/lib/vendor/blamejs/test/integration/object-store-sigv4.test.js +403 -0
- package/lib/vendor/blamejs/test/integration/pqc-pkcs8-forward-compat.test.js +271 -0
- package/lib/vendor/blamejs/test/integration/pubsub.test.js +137 -0
- package/lib/vendor/blamejs/test/integration/queue-redis.test.js +352 -0
- package/lib/vendor/blamejs/test/integration/redis-client-tls.test.js +96 -0
- package/lib/vendor/blamejs/test/integration/ssrf-guard.test.js +98 -0
- package/lib/vendor/blamejs/test/integration/websocket-permessage-deflate.test.js +261 -0
- package/lib/vendor/blamejs/test/integration/ws-client-roundtrip.test.js +230 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +211 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/a2a.test.js +59 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/access-lock.test.js +136 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +219 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +69 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-event-bus.test.js +266 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +262 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-orchestrator.test.js +390 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-posture-chain.test.js +174 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +279 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +322 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-stream.test.js +227 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-tenant.test.js +302 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-trace.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-adverse-decision.test.js +44 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-content-detect.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-input.test.js +50 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-model-manifest.test.js +96 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ai-pref.test.js +76 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +1080 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +311 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-zip-stream.test.js +291 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive.test.js +140 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +267 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +108 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/asyncapi.test.js +929 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file-conflict-path.test.js +80 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-cve-defensive.test.js +176 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-daily-review.test.js +132 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-export-cadf.test.js +97 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-framework-namespaces.test.js +141 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-segregation.test.js +115 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-ml-dsa-65.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-use-store.test.js +246 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-bot-challenge-verifier.test.js +485 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-bot-challenge.test.js +331 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +352 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-lockout.test.js +572 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-password-audit.test.js +61 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/azure-blob-bucket-ops.test.js +258 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-worker.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/bearer-auth.test.js +107 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/body-parser-chunked-malformed.test.js +131 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/body-parser-smuggling.test.js +118 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/boot-gates.test.js +85 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/breach-deadline.test.js +38 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +861 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/budr.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/bundler-engine.test.js +209 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cache-status.test.js +129 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +871 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +891 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/canonical-json-jcs.test.js +43 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cdn-cache-control.test.js +243 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +550 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +107 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-api-key.test.js +147 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-audit-verify-chain.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-backup.test.js +135 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-config-drift.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +75 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-file-type.test.js +98 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-helpers.test.js +145 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-mtls.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-password.test.js +97 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-restore.test.js +160 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-retention.test.js +84 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-security.test.js +69 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-vault.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/client-hints.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +237 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +9600 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +575 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-cascade.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-eaa.test.js +36 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +712 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance.test.js +278 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/config-drift.test.js +97 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/config.test.js +424 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cors.test.js +357 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cra-report.test.js +31 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/credential-hash.test.js +226 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-base64url.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-envelope.test.js +85 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +193 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +98 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hpke-pq.test.js +132 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hpke.test.js +155 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-mlkem768-x25519.test.js +129 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-namespace-hash.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-random-int.test.js +72 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-builder.test.js +96 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-nonce.test.js +401 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +180 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +210 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/daily-byte-quota.test.js +153 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +66 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/data-act.test.js +74 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-collection-extensions.test.js +226 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-collection.test.js +136 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-init-extensions.test.js +165 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query-cross-schema.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query-extensions.test.js +191 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-role-for.test.js +228 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-vacuum.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-worm.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +184 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/declare-row-policy.test.js +203 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/declare-view.test.js +303 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dns-dnssec-algorithm.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dns-null-mx.test.js +39 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dora.test.js +165 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dr-runbook.test.js +59 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dsr-state-rules.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +786 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/early-hints.test.js +147 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/events.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/exploit-replay.test.js +243 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-hardening.test.js +181 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-routing.test.js +531 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +118 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fapi2.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fda-21cfr11.test.js +156 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fdx.test.js +79 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +216 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +434 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +432 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/file-type.test.js +81 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +887 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/forensic-snapshot.test.js +51 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fsm.test.js +375 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gcs-bucket-ops.test.js +321 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +41 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/graphql-federation.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-agent-registry.test.js +87 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-all.test.js +328 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +339 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-csv.test.js +694 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-dsn.test.js +296 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-email.test.js +234 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-envelope.test.js +192 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-event-bus-payload.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-event-bus-topic.test.js +71 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +386 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-html-wcag.test.js +859 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +357 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-imap-command.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-jmap.test.js +174 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-json.test.js +317 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-list-id.test.js +199 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-list-unsubscribe.test.js +214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-compose.test.js +111 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-move.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-query.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-reply.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mail-sieve.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +301 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +265 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-message-id.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +161 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-posture-chain.test.js +100 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-saga-config.test.js +79 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-smtp-command.test.js +269 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-snapshot-envelope.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-stream-args.test.js +78 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +288 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-tenant-id.test.js +69 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-trace-context.test.js +102 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-xml.test.js +202 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-yaml.test.js +203 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/hal.test.js +51 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/honeytoken.test.js +50 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +37 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +692 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-stream.test.js +280 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +225 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +203 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +991 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/iab-mspa.test.js +63 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/iab-tcf.test.js +73 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +612 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/importmap-integrity.test.js +56 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/inbox.test.js +166 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/incident-report.test.js +29 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jose-jwe-experimental.test.js +121 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-api.test.js +58 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-round-trip-helper.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +159 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/legal-hold.test.js +118 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/local-db-thin.test.js +150 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream-cloudwatch.test.js +489 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream-otlp-grpc.test.js +207 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream-otlp.test.js +283 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/lro.test.js +65 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +417 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-arf.test.js +208 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +910 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +502 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +680 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-canspam.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +149 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +323 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +297 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +514 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy-tlsrpt.test.js +369 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +199 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +627 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-feedback-id.test.js +56 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-greylist.test.js +217 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +283 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-journal.test.js +217 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-mdn.test.js +334 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-rbl.test.js +271 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-require-tls.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +215 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +336 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +732 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +840 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +130 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +285 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +74 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +229 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +394 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-tls.test.js +147 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +151 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-spam-score.test.js +204 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-srs.test.js +152 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +279 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +323 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-unsubscribe.test.js +165 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +439 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp-tool-registry.test.js +202 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +155 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-shadow-registry.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +224 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-compose-pipeline.test.js +278 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/money.test.js +376 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-paths.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nel.test.js +200 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-allowlist.test.js +106 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-byte-quota.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +372 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +635 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-heartbeat-passive.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls-build-options.test.js +130 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls-ct-inclusion.test.js +179 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +447 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +369 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nis2-report.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nist-crosswalk.test.js +42 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/no-cache.test.js +98 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/notify.test.js +707 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/numeric-bounds.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/oauth-callback.test.js +72 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +597 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/openapi.test.js +877 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/otel-export.test.js +257 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pagination.test.js +522 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +216 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +324 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +546 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +153 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pqc-software.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/problem-details.test.js +195 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/process-spawn.test.js +62 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/promise-pool.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/protected-resource-metadata.test.js +68 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/protobuf-encoder.test.js +138 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/protocol-dispatcher.test.js +174 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/public-suffix.test.js +197 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +232 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-dlq-extend-lease.test.js +178 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +322 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-priority-rate-progress.test.js +266 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-sqs.test.js +300 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-cluster.test.js +338 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-registry.test.js +75 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redact-dlp.test.js +246 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redis-client.test.js +130 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +335 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/request-log.test.js +170 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/require-auth-cache-control.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/require-mtls.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/resource-access-lock.test.js +52 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retention-floor.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retry.test.js +535 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-cross-origin-redirect.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +128 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-async-loops.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-async-parallel.test.js +170 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +248 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +451 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +289 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-icap.test.js +206 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-jsonpath.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +339 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-mount-info.test.js +180 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +78 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-sieve.test.js +123 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-smtp.test.js +95 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-url-idn-homograph.test.js +77 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +257 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/saml-slo.test.js +249 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sandbox.test.js +228 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scheduler-exactly-once.test.js +238 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +700 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-notify.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sec-cyber.test.js +85 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +107 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/security-headers.test.js +175 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/seeders.test.js +816 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/self-update-standalone-verifier.test.js +168 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +302 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/server-timing.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +247 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-extensions.test.js +295 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/shape-match.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +952 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-multipart-sse.test.js +441 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/slug.test.js +330 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/smtp-policy.test.js +233 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/source-comment-blocks.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/speculation-rules.test.js +319 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sse.test.js +148 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +283 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/standard-webhooks.test.js +67 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +266 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/step-up.test.js +487 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage-chunk-scratch.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +773 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/stream-throttle.test.js +173 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/structured-fields.test.js +180 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tcpa-10dlc.test.js +66 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +571 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/test-harness.test.js +190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/testing-request.test.js +119 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/testing.test.js +522 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +151 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-exporter.test.js +168 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-ocsp-ct.test.js +275 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-ocsp-verify.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-pinset-drift.test.js +35 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tls-preferred-groups.test.js +81 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tracing.test.js +280 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/uuid.test.js +93 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault-aad.test.js +277 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault-seal-pem-file.test.js +252 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vendor-data.test.js +149 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vendor-manifest.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vex.test.js +661 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +308 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/web-push-vapid.test.js +144 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +674 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/websocket-channels.test.js +360 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/worker-pool.test.js +302 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +349 -0
- package/lib/vendor/blamejs/test/layer-1-state/api-key.test.js +717 -0
- package/lib/vendor/blamejs/test/layer-5-integration/bundler-output.test.js +444 -0
- package/lib/vendor/blamejs/test/layer-5-integration/guard-host-integration.test.js +597 -0
- package/lib/vendor/blamejs/test/layer-5-integration/security-chaos.test.js +308 -0
- package/lib/vendor/blamejs/test/smoke.js +431 -0
- package/lib/webhooks.js +305 -0
- package/package.json +43 -0
|
@@ -0,0 +1,1558 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @module b.compliance
|
|
4
|
+
* @featured true
|
|
5
|
+
* @nav Compliance
|
|
6
|
+
* @title Compliance
|
|
7
|
+
*
|
|
8
|
+
* @intro
|
|
9
|
+
* Top-level compliance-posture coordinator — single source of truth
|
|
10
|
+
* for "what regulatory regime is this deployment running under?".
|
|
11
|
+
*
|
|
12
|
+
* `b.compliance.set("hipaa")` cascades the posture into every
|
|
13
|
+
* framework primitive that owns a posture-conditioned default:
|
|
14
|
+
* `b.retention` (TTL floors), `b.audit` (ML-DSA-87 chain-signing),
|
|
15
|
+
* `b.db` (column-policy enforcement), `b.cryptoField` (vacuum-after-
|
|
16
|
+
* erase). Each primitive merges the matching `POSTURE_DEFAULTS`
|
|
17
|
+
* entry into its own state and emits a
|
|
18
|
+
* `compliance.posture.cascade.applied` audit row so operators can
|
|
19
|
+
* confirm the cascade landed.
|
|
20
|
+
*
|
|
21
|
+
* Posture overlays follow a union-of-bars rule: when a primitive
|
|
22
|
+
* knob has different floors per regime (TLS minimum, retention
|
|
23
|
+
* ceiling, hash-algorithm minimum), the strictest applicable bar
|
|
24
|
+
* wins. Operators running under a single posture get that posture's
|
|
25
|
+
* floor; operators running multi-tenant deployments compose
|
|
26
|
+
* per-tenant by reading `postureDefault(posture, key)` per request
|
|
27
|
+
* instead of pinning a single global.
|
|
28
|
+
*
|
|
29
|
+
* Boot-time only — `set()` MUST run before the primitives it
|
|
30
|
+
* coordinates are first used. Runtime switches throw
|
|
31
|
+
* `compliance/already-set` because partial cascades produce
|
|
32
|
+
* half-set state across already-initialized primitives.
|
|
33
|
+
*
|
|
34
|
+
* Audit emissions: `compliance.posture.set` on success,
|
|
35
|
+
* `compliance.posture.set_rejected` on unknown / already-set,
|
|
36
|
+
* `compliance.posture.cascade.applied` / `.skipped` per primitive,
|
|
37
|
+
* `compliance.posture.cleared` on `clear()`. Grep audit chain to
|
|
38
|
+
* reconstruct posture history per deployment.
|
|
39
|
+
*
|
|
40
|
+
* @card
|
|
41
|
+
* Top-level compliance-posture coordinator — single source of truth for "what regulatory regime is this deployment running under?".
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
var lazyRequire = require("./lazy-require");
|
|
45
|
+
var sanctions = require("./compliance-sanctions");
|
|
46
|
+
var aiAct = require("./compliance-ai-act");
|
|
47
|
+
var { ComplianceError } = require("./framework-error");
|
|
48
|
+
|
|
49
|
+
var audit = lazyRequire(function () { return require("./audit"); });
|
|
50
|
+
var retentionMod = lazyRequire(function () { return require("./retention"); });
|
|
51
|
+
var db = lazyRequire(function () { return require("./db"); });
|
|
52
|
+
var cryptoField = lazyRequire(function () { return require("./crypto-field"); });
|
|
53
|
+
|
|
54
|
+
// Recognised posture names. Aligns with the compliance-posture
|
|
55
|
+
// vocabulary every guard / retention floor / etc. accepts. Operators
|
|
56
|
+
// passing an unknown name get a typo-surfacing throw at set-time, not
|
|
57
|
+
// silent fall-through to no-op.
|
|
58
|
+
var KNOWN_POSTURES = Object.freeze([
|
|
59
|
+
// ---- US Federal / Sectoral ----
|
|
60
|
+
"hipaa", // Health Insurance Portability and Accountability Act
|
|
61
|
+
"pci-dss", // Payment Card Industry Data Security Standard
|
|
62
|
+
"soc2", // System and Organization Controls 2
|
|
63
|
+
"sox", // Sarbanes-Oxley
|
|
64
|
+
"sox-404", // Sarbanes-Oxley §404 ICFR (DDL change-control + segregation of duties)
|
|
65
|
+
"soc2-cc1.3", // SOC 2 Trust Services Criterion CC1.3 (segregation of duties)
|
|
66
|
+
"wmhmda", // Washington My Health My Data Act (added 2026)
|
|
67
|
+
"bipa", // Illinois Biometric Information Privacy Act (added 2026)
|
|
68
|
+
// ---- US State Privacy ----
|
|
69
|
+
"ccpa", // California Consumer Privacy Act / CPRA (added 2026)
|
|
70
|
+
// ---- EU / EEA ----
|
|
71
|
+
"gdpr", // General Data Protection Regulation
|
|
72
|
+
"dora", // EU Digital Operational Resilience Act
|
|
73
|
+
"nis2", // EU Network and Information Security Directive 2 (added 2026)
|
|
74
|
+
"cra", // EU Cyber Resilience Act (added 2026)
|
|
75
|
+
"ai-act", // EU AI Act (added 2026)
|
|
76
|
+
// ---- Latin America / APAC ----
|
|
77
|
+
"lgpd-br", // Brazil Lei Geral de Proteção de Dados (added 2026)
|
|
78
|
+
"pipl-cn", // China Personal Information Protection Law (added 2026)
|
|
79
|
+
"appi-jp", // Japan Act on Protection of Personal Information (added 2026)
|
|
80
|
+
"pdpa-sg", // Singapore Personal Data Protection Act (added 2026)
|
|
81
|
+
// ---- Canada / UK ----
|
|
82
|
+
"pipeda-ca", // Canada Personal Information Protection and Electronic Documents Act (added 2026)
|
|
83
|
+
"uk-gdpr", // UK General Data Protection Regulation (added 2026)
|
|
84
|
+
// ---- Sectoral expansions (added 2026 — v0.8.24) ----
|
|
85
|
+
"fapi-2.0", // Financial-grade API 2.0 Final (composes PAR + DPoP + OAuth 2.1 + mTLS)
|
|
86
|
+
"fapi-2.0-message-signing", // FAPI 2.0 Message Signing profile — adds JARM mandate + signed-request-object enforcement
|
|
87
|
+
"cfpb-1033", // CFPB §1033 / FDX consumer-financial-data sharing (deadline past for $250B+ banks 2026-04-01)
|
|
88
|
+
"iab-tcf-v2.3", // IAB Transparency & Consent Framework v2.3 with disclosedVendors (deadline past 2026-02-28)
|
|
89
|
+
"iab-mspa", // IAB Multi-State Privacy Agreement / Global Privacy Platform universal opt-out
|
|
90
|
+
"tcpa-10dlc", // TCPA 10DLC carrier-shaped consent + FCC 1:1 disclosure
|
|
91
|
+
"fda-21cfr11", // FDA 21 CFR Part 11 — audit-trail + electronic signatures (general-purpose subset)
|
|
92
|
+
"fda-annex-11", // EU GMP Annex 11 — computerized systems (Part-11 equivalent)
|
|
93
|
+
"sec-1.05", // SEC Cybersecurity Disclosure Item 1.05 — material-incident 8-K filing // allow:raw-byte-literal — regulatory identifier, not bytes
|
|
94
|
+
// ---- US state student-data privacy (F5.1 posture group) ----
|
|
95
|
+
"ny-2-d", // NY Education Law §2-d
|
|
96
|
+
"il-soppa", // Illinois Student Online Personal Protection Act
|
|
97
|
+
"ca-sopipa", // California Student Online Personal Information Protection Act
|
|
98
|
+
"ct-pa-5-2", // Connecticut Public Act 5-2
|
|
99
|
+
"tx-hb-4504", // Texas HB 4504 // allow:raw-byte-literal — statute identifier, not bytes
|
|
100
|
+
"va-sb-1376", // Virginia SB 1376 // allow:raw-byte-literal — statute identifier, not bytes
|
|
101
|
+
// ---- EU government / cloud-region ----
|
|
102
|
+
"staterramp", // StateRAMP / TX-RAMP / AZ-RAMP / GovRAMP family (FedRAMP-Moderate cross-walks)
|
|
103
|
+
"irap", // Australia IRAP / Essential Eight / ISM
|
|
104
|
+
"bsi-c5", // Germany BSI C5
|
|
105
|
+
"ens-es", // Spain Esquema Nacional de Seguridad
|
|
106
|
+
"uk-g-cloud", // UK G-Cloud
|
|
107
|
+
// ---- v0.8.70 expansion — 2026 effective deadlines ----
|
|
108
|
+
"modpa", // Maryland Online Data Privacy Act (effective 2025-10-01) — strict data-min
|
|
109
|
+
"nydfs-500", // NYDFS 23 NYCRR 500 Amendment 2 — financial cybersecurity (multi-factor + asset inventory + governance)
|
|
110
|
+
"hipaa-2026", // HHS HIPAA Security Rule 2026-Q4 final — extends hipaa with mandatory MFA + asset inventory + 72h restoration testing
|
|
111
|
+
"quebec-25", // Quebec Law 25 final phase (effective 2026-09-22) — DPIA + automated-decision opt-out
|
|
112
|
+
// ---- v0.8.77 expansion — US state consumer-privacy postures ----
|
|
113
|
+
// Each posture carries per-state cure-period, profiling opt-out
|
|
114
|
+
// and minor-consent metadata via b.dsr.stateRules(state). The
|
|
115
|
+
// generic DSR primitive (b.dsr.submit) covers ~80% of the surface;
|
|
116
|
+
// these postures fill in the per-state drift.
|
|
117
|
+
"vcdpa", // Virginia Consumer Data Protection Act
|
|
118
|
+
"co-cpa", // Colorado Privacy Act
|
|
119
|
+
"ctdpa", // Connecticut Data Privacy Act
|
|
120
|
+
"ucpa", // Utah Consumer Privacy Act
|
|
121
|
+
"tdpsa", // Texas Data Privacy and Security Act
|
|
122
|
+
"or-cpa", // Oregon Consumer Privacy Act
|
|
123
|
+
"mt-cdpa", // Montana Consumer Data Privacy Act
|
|
124
|
+
"ia-icdpa", // Iowa Consumer Data Protection Act
|
|
125
|
+
"in-indpa", // Indiana Consumer Data Protection Act
|
|
126
|
+
"de-dpdpa", // Delaware Personal Data Privacy Act
|
|
127
|
+
"nh-nhpa", // New Hampshire SB 255 Consumer Privacy Act
|
|
128
|
+
"nj-njdpa", // New Jersey Data Privacy Act
|
|
129
|
+
"ky-kcdpa", // Kentucky Consumer Data Protection Act
|
|
130
|
+
"tn-tipa", // Tennessee Information Protection Act
|
|
131
|
+
"mn-mncdpa", // Minnesota Consumer Data Privacy Act
|
|
132
|
+
"ri-ricpa", // Rhode Island Consumer Privacy Act
|
|
133
|
+
"ne-dpa", // Nebraska Data Privacy Act
|
|
134
|
+
"nv-sb370", // Nevada SB 370 Consumer Health Data Privacy
|
|
135
|
+
"ca-aadc", // California Age-Appropriate Design Code (partial preliminary injunction; track for re-enforcement)
|
|
136
|
+
"ct-sb3", // Connecticut SB 3 Consumer Health Data
|
|
137
|
+
"tx-cubi", // Texas Capture or Use of Biometric Identifier
|
|
138
|
+
"fl-fdbr", // Florida Digital Bill of Rights (SB 262, effective 2024-07-01) — narrow scope ($1B+ revenue threshold)
|
|
139
|
+
// ---- v0.8.81 expansion — AI-governance postures ----
|
|
140
|
+
// State + sectoral AI regulations crystallizing through 2026. Each
|
|
141
|
+
// posture is a flag that operators pin alongside their base
|
|
142
|
+
// privacy/sectoral posture; the floors enforce audit-chain signing
|
|
143
|
+
// and posture-cascade visibility so AI-decision audit trails meet
|
|
144
|
+
// regulator expectations even when the base posture is unregulated.
|
|
145
|
+
"co-ai", // Colorado AI Act SB24-205 (postponed to 2026-06-30; stay pending)
|
|
146
|
+
"il-hb3773", // Illinois HB 3773 — IHRA AI amendment (effective 2026-01-01)
|
|
147
|
+
"tx-traiga", // Texas Responsible AI Governance Act HB 149 (effective 2026-01-01)
|
|
148
|
+
"ut-aipa", // Utah AI Disclosure Act (UAIPA + 2025 amendments; sunset 2027-07-01)
|
|
149
|
+
"nyc-ll144", // NYC Local Law 144 — Automated Employment Decision Tools (in force) // allow:raw-byte-literal — regulatory identifier, not bytes
|
|
150
|
+
"ca-tfaia", // California SB 53 — Transparency in Frontier AI Act (effective 2026-01-01)
|
|
151
|
+
"kr-ai-basic", // South Korea AI Basic Act (effective 2026-01-22)
|
|
152
|
+
"cn-ai-label", // China Measures for Labelling of AI-Generated Content (effective 2025-09-01)
|
|
153
|
+
// ---- v0.8.81 expansion — AI management cross-walks ----
|
|
154
|
+
"iso-42001", // ISO/IEC 42001:2023 — AI Management System
|
|
155
|
+
"iso-23894", // ISO/IEC 23894:2023 — AI Risk Management Guidance
|
|
156
|
+
// ---- v0.8.81 expansion — content-credentials posture flags ----
|
|
157
|
+
"ca-sb942", // California SB-942 (Cal. Bus. & Prof. Code §22757) gen-AI disclosure (effective 2026-08-02) // allow:raw-byte-literal — regulatory identifier + date, not bytes
|
|
158
|
+
"ca-ab853", // California AB-853 platform-side gen-AI detection (effective 2026-08-02) // allow:raw-byte-literal — regulatory identifier + date, not bytes
|
|
159
|
+
// ---- v0.8.81 expansion — substrate-to-posture cleanup ----
|
|
160
|
+
"eaa", // EU Accessibility Act / Directive (EU) 2019/882 (effective 2025-06-28)
|
|
161
|
+
"wcag-2-2", // W3C Web Content Accessibility Guidelines 2.2 (Oct 2023 Recommendation)
|
|
162
|
+
"eu-data-act", // EU Data Act / Regulation (EU) 2023/2854 (effective 2025-09-12)
|
|
163
|
+
"hitech", // Health Information Technology for Economic and Clinical Health Act (2009)
|
|
164
|
+
"ferpa", // Family Educational Rights and Privacy Act (20 U.S.C. §1232g)
|
|
165
|
+
"dpdp", // India Digital Personal Data Protection Act 2023 (rules-pending; cascade tier exists)
|
|
166
|
+
// ---- v0.8.82 expansion — privacy 2026 sweep ----
|
|
167
|
+
// US federal child / financial privacy
|
|
168
|
+
"coppa", // Children's Online Privacy Protection Act (15 U.S.C. §6501)
|
|
169
|
+
"coppa-2025", // COPPA 2025 Amendment (FTC final 2025-04-22; effective 2026-06-23 — biometric expansion + knowing-collection disclosure)
|
|
170
|
+
"glba-safeguards", // GLBA Safeguards Rule 2024 Amendment (16 CFR Part 314 — effective 2024-05-13) // allow:raw-byte-literal — CFR title number, not bytes
|
|
171
|
+
// UK
|
|
172
|
+
"uk-duaa", // UK Data (Use and Access) Act 2025 (Royal Assent 2025-06-19; replaces DPDI Bill)
|
|
173
|
+
// Latin America
|
|
174
|
+
"cl-pdpa", // Chile Ley 21.719 (enacted 2024-12-13; effective 2026-12-01)
|
|
175
|
+
"mx-lfpdppp", // Mexico LFPDPPP + 2025 secondary reform
|
|
176
|
+
"ar-pdpa", // Argentina PDPA (Ley 25.326 + 2024 modernization bill)
|
|
177
|
+
// APAC
|
|
178
|
+
"pipa-kr", // South Korea Personal Information Protection Act (2023 major amendment)
|
|
179
|
+
"au-privacy", // Australia Privacy Act + 2024 Amendment Act (first tranche 2024-12-10; statutory tort 2025-06-10)
|
|
180
|
+
"th-pdpa", // Thailand PDPA (effective 2022-06-01)
|
|
181
|
+
"vn-pdp", // Vietnam PDP Decree 13/2023 + 2025 PDP Law (effective 2026-01-01)
|
|
182
|
+
"id-pdp", // Indonesia Personal Data Protection Law (effective 2024-10-17)
|
|
183
|
+
"my-pdpa", // Malaysia PDPA + 2024 amendments (effective 2025-04-30)
|
|
184
|
+
// US state child privacy / age-appropriate design codes
|
|
185
|
+
"ny-safe-kids", // NY Child Data Protection Act / SAFE for Kids Act (effective 2025-06-20)
|
|
186
|
+
"ny-saffe", // NY Stop Addictive Feeds Exploitation for Kids Act (effective 2025-06-20)
|
|
187
|
+
"md-kids-code", // Maryland Age-Appropriate Design Code (enacted 2024)
|
|
188
|
+
"vt-aadc", // Vermont Age-Appropriate Design Code (enacted 2024)
|
|
189
|
+
// US cross-cutting privacy / sectoral
|
|
190
|
+
"gina", // Genetic Information Nondiscrimination Act (effective 2009-11-21)
|
|
191
|
+
"vppa", // Video Privacy Protection Act (1988; class-action pixel-tracking surface)
|
|
192
|
+
"can-spam", // CAN-SPAM Act (effective 2004-01-01)
|
|
193
|
+
"il-gipa", // Illinois Genetic Information Privacy Act (post-2024 amendment private right of action)
|
|
194
|
+
"hhs-repro-24", // HHS Reproductive Health HIPAA Amendment (effective 2024-12-23)
|
|
195
|
+
// NIST cross-walks
|
|
196
|
+
"nist-pf-1.1", // NIST Privacy Framework 1.1 (final 2025-04-14)
|
|
197
|
+
// EU non-personal-data + adjacent
|
|
198
|
+
"dsa", // EU Digital Services Act (Regulation 2022/2065; fully applicable 2024-02-17)
|
|
199
|
+
"dga", // EU Data Governance Act (Regulation 2022/868; applicable 2023-09-24) // allow:raw-byte-literal — calendar day, not bytes
|
|
200
|
+
"eu-cer", // EU Critical Entities Resilience Directive (2022/2557; transposition 2024-10-17)
|
|
201
|
+
"eu-cyber-sol", // EU Cyber Solidarity Act (Regulation 2025/38; effective 2025-02-04)
|
|
202
|
+
"eidas-2", // eIDAS 2 / EUDI Wallet (Regulation 2024/1183; rollout 2026-2027)
|
|
203
|
+
// ---- v0.8.86 expansion — sectoral + cybersecurity directives ----
|
|
204
|
+
"cmmc-2.0", // US DoD Cybersecurity Maturity Model Certification 2.0 (effective 2025-Q1)
|
|
205
|
+
"cjis-v6", // FBI Criminal Justice Information Services Security Policy v6.0 (Dec 2024)
|
|
206
|
+
"iso-27001-2022", // ISO/IEC 27001:2022 — Information Security Management System
|
|
207
|
+
"iso-27002-2022", // ISO/IEC 27002:2022 — Code of practice for information security controls
|
|
208
|
+
"iso-27017", // ISO/IEC 27017 — Cloud-services security controls
|
|
209
|
+
"iso-27018", // ISO/IEC 27018 — PII protection in public-cloud processors
|
|
210
|
+
"iso-27701", // ISO/IEC 27701 — Privacy Information Management System
|
|
211
|
+
"nist-800-66-r2", // NIST SP 800-66 Rev 2 — HIPAA Security Rule implementation guidance // allow:raw-byte-literal — NIST publication number, not bytes
|
|
212
|
+
"ehds", // EU European Health Data Space (Regulation 2025/327; phased 2027-2029)
|
|
213
|
+
"circia", // US Cyber Incident Reporting for Critical Infrastructure Act (final rule pending)
|
|
214
|
+
// ---- v0.9.6 expansion — exceptd framework-control-gap closure ----
|
|
215
|
+
// Postures added to recognise every framework cited in the
|
|
216
|
+
// exceptd 2026-05-11 framework-control-gaps catalog. Each posture
|
|
217
|
+
// either (a) maps to a framework the operator must audit against,
|
|
218
|
+
// or (b) recognises a security testing methodology / SBOM /
|
|
219
|
+
// supply-chain attestation standard. Operators pin the posture
|
|
220
|
+
// and the framework's cascade defaults + audit emissions match
|
|
221
|
+
// the named regime's evidence expectations.
|
|
222
|
+
"nist-800-53", // NIST SP 800-53 Rev 5 — full Moderate / High baseline
|
|
223
|
+
"nist-ai-rmf-1.0", // NIST AI Risk Management Framework 1.0
|
|
224
|
+
"iso-42001-2023", // ISO/IEC 42001:2023 — AI management system (alias for v0.8.81 iso-42001 entry, kept for posture-vocabulary stability) // allow:raw-byte-literal — standard publication year, not bytes
|
|
225
|
+
"iso-23894-2023", // ISO/IEC 23894:2023 — AI risk management guidance (alias)
|
|
226
|
+
"owasp-llm-top-10-2025", // OWASP Top 10 for LLM Applications 2025
|
|
227
|
+
"owasp-asvs-v5.0", // OWASP Application Security Verification Standard v5.0
|
|
228
|
+
"nist-800-218-ssdf", // NIST SP 800-218 Secure Software Development Framework v1.1 // allow:raw-byte-literal — NIST pub number, not bytes
|
|
229
|
+
"nist-800-82-r3", // NIST SP 800-82 Rev 3 — OT security guide // allow:raw-byte-literal — NIST pub number, not bytes
|
|
230
|
+
"nist-800-63b-rev4", // NIST SP 800-63B Rev 4 — Digital Identity (AAL/IAL/FAL)
|
|
231
|
+
"iec-62443-3-3", // IEC 62443-3-3 — IACS system security
|
|
232
|
+
"fedramp-rev5-moderate", // FedRAMP Rev 5 Moderate baseline
|
|
233
|
+
"hipaa-security-rule", // HIPAA Security Rule 45 CFR §164.312 (technical safeguards) // allow:raw-byte-literal — CFR section, not bytes
|
|
234
|
+
"hitrust-csf-v11.4", // HITRUST CSF v11.4
|
|
235
|
+
"nerc-cip-007-6", // NERC CIP-007-6 — BES Cyber System Security Management
|
|
236
|
+
"psd2-rts-sca", // EU PSD2 RTS on Strong Customer Authentication (Commission Delegated Regulation 2018/389)
|
|
237
|
+
"swift-cscf-v2026", // SWIFT Customer Security Controls Framework v2026
|
|
238
|
+
"slsa-v1.0-build-l3", // SLSA v1.0 Build Track Level 3
|
|
239
|
+
"vex-csaf-2.1", // VEX via OASIS CSAF 2.1 — b.vex primitive ships this
|
|
240
|
+
"cyclonedx-v1.6", // CycloneDX v1.6 SBOM — framework ships sbom.cdx.json
|
|
241
|
+
"spdx-v3.0", // SPDX v3.0 SBOM — framework ships sbom.spdx.json (v0.9.6+)
|
|
242
|
+
"owasp-wstg-v5", // OWASP Web Security Testing Guide v5
|
|
243
|
+
"ptes", // Penetration Testing Execution Standard
|
|
244
|
+
"nist-800-115", // NIST SP 800-115 Technical Guide to Information Security Testing // allow:raw-byte-literal — NIST pub number, not bytes
|
|
245
|
+
"cwe-top-25-2024", // CWE Top 25 Most Dangerous Software Weaknesses (2024)
|
|
246
|
+
"cis-controls-v8", // CIS Controls v8
|
|
247
|
+
"cmmc-2.0-level-2", // CMMC 2.0 Level 2 (Advanced) — 110 NIST 800-171 Rev 2 controls // allow:raw-byte-literal — NIST pub number / level, not bytes
|
|
248
|
+
// ---- v0.9.57 — granular CMMC level distinction ----
|
|
249
|
+
// CMMC 2.0 maturity levels carry distinct control-mapping
|
|
250
|
+
// expectations: Level 1 = 15 controls (FAR 52.204-21), Level 2 =
|
|
251
|
+
// 110 controls (NIST 800-171 Rev 2), Level 3 = additional NIST
|
|
252
|
+
// 800-172 enhanced controls. The umbrella "cmmc-2.0" posture
|
|
253
|
+
// remains for back-compat with existing operators; the explicit
|
|
254
|
+
// L1/L2/L3 postures are the recommended pin for new deployments.
|
|
255
|
+
"cmmc-2.0-level-1", // CMMC 2.0 Level 1 (Foundational) — 15 FAR controls; FCI-only data // allow:raw-byte-literal — regulatory identifier, not bytes
|
|
256
|
+
"cmmc-2.0-level-3", // CMMC 2.0 Level 3 (Expert) — NIST 800-172 enhanced controls atop L2 // allow:raw-byte-literal — regulatory identifier, not bytes
|
|
257
|
+
// ---- v0.12.1 — promote POSTURE_DEFAULTS-only entries into the
|
|
258
|
+
// canonical KNOWN_POSTURES surface so operators can actually
|
|
259
|
+
// `b.compliance.set(...)` them. Each entry had cascade
|
|
260
|
+
// configuration wired but couldn't be pinned because set()'s
|
|
261
|
+
// KNOWN_POSTURES check refused unknown strings.
|
|
262
|
+
"42-cfr-part-2", // 42 CFR Part 2 — Confidentiality of Substance Use Disorder Patient Records (HHS final rule 2024-02-08) // allow:raw-byte-literal — CFR section identifier, not bytes
|
|
263
|
+
"hti-1", // ONC HTI-1 — Health IT certification + algorithm transparency (45 CFR Part 170; effective 2024-12-31)
|
|
264
|
+
"uscdi-v4", // USCDI v4 — US Core Data for Interoperability v4 (ONC; 2024-01) // allow:raw-byte-literal — version identifier, not bytes
|
|
265
|
+
"irs-1075", // IRS Publication 1075 — Tax Information Security Guidelines (Rev. 11-2023) // allow:raw-byte-literal — publication number, not bytes
|
|
266
|
+
"nist-800-172-r3", // NIST SP 800-172 Rev 3 — Enhanced Security Requirements for CUI // allow:raw-byte-literal — publication number, not bytes
|
|
267
|
+
"tlp-2.0", // FIRST Traffic Light Protocol 2.0 — information-sharing classifications (TLP:CLEAR / GREEN / AMBER / AMBER+STRICT / RED)
|
|
268
|
+
"soci-au", // Australia Security of Critical Infrastructure Act (SOCI 2018) + 2022 amendments
|
|
269
|
+
"ffiec-cat-2", // FFIEC Cybersecurity Assessment Tool 2.0 (federal financial institution exam) // allow:raw-byte-literal — tool version, not bytes
|
|
270
|
+
"cri-profile-v2.0", // Cyber Risk Institute Profile v2.0 — financial-services framework mapping (NIST CSF cross-walk) // allow:raw-byte-literal — version identifier, not bytes
|
|
271
|
+
"m-22-09", // OMB M-22-09 — Federal Zero Trust Architecture Strategy
|
|
272
|
+
"m-22-18", // OMB M-22-18 — Enhancing Software Supply Chain Security (SSDF attestation)
|
|
273
|
+
"nist-800-53-r5-privacy", // NIST SP 800-53 Rev 5 — Privacy Control Family overlay // allow:raw-byte-literal — publication number, not bytes
|
|
274
|
+
"nist-ai-600-1-genai", // NIST AI 600-1 — Generative AI Profile (companion to AI RMF 1.0) // allow:raw-byte-literal — publication number, not bytes
|
|
275
|
+
"nist-csf-2.0", // NIST Cybersecurity Framework 2.0 (Feb 2024) // allow:raw-byte-literal — framework version, not bytes
|
|
276
|
+
"sb-53", // California SB-53 — Transparency in Frontier AI Act (effective 2025-09-29) // allow:raw-byte-literal — statute identifier, not bytes
|
|
277
|
+
"nyc-ll144-2024", // NYC Local Law 144 — Automated Employment Decision Tool bias audits (2024 enforcement update) // allow:raw-byte-literal — statute identifier, not bytes
|
|
278
|
+
]);
|
|
279
|
+
|
|
280
|
+
// SUPPLY-34 — Artifact standards (SBOM / VEX format families) are NOT
|
|
281
|
+
// regulatory regimes. Pinning a posture like `cyclonedx-v1.6` to
|
|
282
|
+
// cascade audit + TLS floors conflates the act of EMITTING a SBOM
|
|
283
|
+
// format with the regulatory floor an operator needs. Operators who
|
|
284
|
+
// emit CycloneDX SBOMs do so because of an underlying regime
|
|
285
|
+
// (FedRAMP SBOM requirement, SSDF PW.4, etc.) — not because emitting
|
|
286
|
+
// the format itself defines the floor.
|
|
287
|
+
//
|
|
288
|
+
// b.compliance.artifactStandards exposes the format catalog as a
|
|
289
|
+
// READ-ONLY channel — operators pick a format (or set of formats)
|
|
290
|
+
// for SBOM / VEX emission without affecting the regulatory posture
|
|
291
|
+
// cascade. The names remain in KNOWN_POSTURES for back-compat
|
|
292
|
+
// (existing operators may have pinned them); pinning them via
|
|
293
|
+
// b.compliance.set emits a `compliance.posture.format_as_regime`
|
|
294
|
+
// audit warning so the misconfiguration is grep-able in the audit
|
|
295
|
+
// chain.
|
|
296
|
+
var ARTIFACT_STANDARDS = Object.freeze([
|
|
297
|
+
"cyclonedx-v1.6", // CycloneDX 1.6 SBOM
|
|
298
|
+
"spdx-v3.0", // SPDX 3.0 SBOM
|
|
299
|
+
"vex-csaf-2.1", // VEX via OASIS CSAF 2.1
|
|
300
|
+
]);
|
|
301
|
+
|
|
302
|
+
var STATE = { posture: null, setAt: null, fipsMode: false };
|
|
303
|
+
|
|
304
|
+
function _emitAudit(action, metadata, outcome) {
|
|
305
|
+
try {
|
|
306
|
+
audit().safeEmit({
|
|
307
|
+
action: action,
|
|
308
|
+
outcome: outcome || "success",
|
|
309
|
+
metadata: metadata,
|
|
310
|
+
});
|
|
311
|
+
} catch (_e) { /* audit best-effort */ }
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* @primitive b.compliance.set
|
|
316
|
+
* @signature b.compliance.set(posture)
|
|
317
|
+
* @since 0.7.27
|
|
318
|
+
* @status stable
|
|
319
|
+
* @related b.compliance.current, b.compliance.assert, b.compliance.clear, b.compliance.postureDefault
|
|
320
|
+
*
|
|
321
|
+
* Pin the deployment's compliance posture and cascade the matching
|
|
322
|
+
* defaults into every primitive that owns posture-conditioned state
|
|
323
|
+
* (`b.retention`, `b.audit`, `b.db`, `b.cryptoField`). Throws
|
|
324
|
+
* `compliance/unknown-posture` for names outside `KNOWN_POSTURES`,
|
|
325
|
+
* `compliance/already-set` if a different posture is already pinned
|
|
326
|
+
* (runtime switches are forbidden — they create half-set state across
|
|
327
|
+
* already-initialized primitives). Idempotent for the same posture:
|
|
328
|
+
* calling `set("hipaa")` a second time after `set("hipaa")` is a
|
|
329
|
+
* no-op, no audit row, no cascade.
|
|
330
|
+
*
|
|
331
|
+
* Operators wiring multiple regimes pick the strictest single posture
|
|
332
|
+
* here and read per-regime knobs via `postureDefault(posture, key)`
|
|
333
|
+
* for tenant-level overrides — see the @intro union-of-bars note.
|
|
334
|
+
*
|
|
335
|
+
* Emits `compliance.posture.set` (success), `compliance.posture.set_rejected`
|
|
336
|
+
* (unknown/already-set), `compliance.posture.cascade.applied`/`.skipped`
|
|
337
|
+
* per primitive, `compliance.posture.tz_warning` when `process.env.TZ`
|
|
338
|
+
* is set to a non-UTC value under a regulated posture (HIPAA / PCI-DSS /
|
|
339
|
+
* SOX / GDPR / SOC2 / FDA 21 CFR 11).
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* b.compliance.set("hipaa");
|
|
343
|
+
* b.compliance.current(); // → "hipaa"
|
|
344
|
+
*
|
|
345
|
+
* // Calling again with the same posture is idempotent:
|
|
346
|
+
* b.compliance.set("hipaa"); // no-op, no audit row
|
|
347
|
+
*
|
|
348
|
+
* // Switching to a different posture throws:
|
|
349
|
+
* try {
|
|
350
|
+
* b.compliance.set("pci-dss");
|
|
351
|
+
* } catch (e) {
|
|
352
|
+
* e.code; // → "compliance/already-set"
|
|
353
|
+
* }
|
|
354
|
+
*/
|
|
355
|
+
function set(posture) {
|
|
356
|
+
if (typeof posture !== "string" || posture.length === 0) {
|
|
357
|
+
throw new ComplianceError("compliance/bad-posture",
|
|
358
|
+
"compliance.set: posture must be a non-empty string, got " +
|
|
359
|
+
JSON.stringify(posture));
|
|
360
|
+
}
|
|
361
|
+
if (KNOWN_POSTURES.indexOf(posture) === -1) {
|
|
362
|
+
_emitAudit("compliance.posture.set_rejected",
|
|
363
|
+
{ reason: "unknown-posture", posture: posture }, "denied");
|
|
364
|
+
throw new ComplianceError("compliance/unknown-posture",
|
|
365
|
+
"compliance.set: unknown posture '" + posture + "'; expected one of " +
|
|
366
|
+
KNOWN_POSTURES.join(", "));
|
|
367
|
+
}
|
|
368
|
+
if (STATE.posture && STATE.posture !== posture) {
|
|
369
|
+
// Audit the rejection so an attacker (or operator misconfig) trying
|
|
370
|
+
// to downgrade an already-set posture produces a chain row
|
|
371
|
+
// operators can alert on.
|
|
372
|
+
_emitAudit("compliance.posture.set_rejected",
|
|
373
|
+
{ reason: "already-set", current: STATE.posture, attempted: posture },
|
|
374
|
+
"denied");
|
|
375
|
+
throw new ComplianceError("compliance/already-set",
|
|
376
|
+
"compliance.set: posture is already '" + STATE.posture + "' (set at " +
|
|
377
|
+
new Date(STATE.setAt).toISOString() + "). Runtime switches are " +
|
|
378
|
+
"forbidden — they create half-set state across already-initialized " +
|
|
379
|
+
"primitives. Set once at boot.");
|
|
380
|
+
}
|
|
381
|
+
STATE.posture = posture;
|
|
382
|
+
STATE.setAt = Date.now();
|
|
383
|
+
_emitAudit("compliance.posture.set", { posture: posture });
|
|
384
|
+
|
|
385
|
+
// SUPPLY-34 — emit a `format_as_regime` audit warning when an
|
|
386
|
+
// operator pins an artifact-standard format (cyclonedx-v1.6 /
|
|
387
|
+
// spdx-v3.0 / vex-csaf-2.1) as the regulatory posture. These names
|
|
388
|
+
// remain in KNOWN_POSTURES for back-compat but pinning them as the
|
|
389
|
+
// primary regime conflates "I emit this SBOM/VEX format" with "my
|
|
390
|
+
// regulatory floor is X". Operators should pin the regulatory
|
|
391
|
+
// regime (FedRAMP / SSDF / HIPAA / etc.) and surface artifact
|
|
392
|
+
// standards via b.compliance.artifactStandards.
|
|
393
|
+
if (ARTIFACT_STANDARDS.indexOf(posture) !== -1) {
|
|
394
|
+
_emitAudit("compliance.posture.format_as_regime",
|
|
395
|
+
{ posture: posture, artifactStandards: ARTIFACT_STANDARDS,
|
|
396
|
+
recommendation: "Artifact standards describe what SBOM/VEX format the deployment emits — not the regulatory floor. Pin the underlying regime (e.g. 'nist-800-218-ssdf', 'fedramp-rev5-moderate') and surface emitted formats via b.compliance.artifactStandards()." },
|
|
397
|
+
"warning");
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// SUPPLY-21 — emit `fips_conflict` audit warning when posture is
|
|
401
|
+
// FedRAMP / CMMC L3 AND the framework's PQC-first crypto defaults
|
|
402
|
+
// are active without an explicit fipsMode opt-in. Operators see
|
|
403
|
+
// this in the audit chain and either (a) document the deviation
|
|
404
|
+
// in their SSP or (b) set b.compliance.fipsMode(true) before set()
|
|
405
|
+
// to switch the audit-signing path to FIPS-validated AES-GCM +
|
|
406
|
+
// SHA-384.
|
|
407
|
+
var FIPS_BOUNDARY_POSTURES = ["fedramp-rev5-moderate", "cmmc-2.0-level-3"];
|
|
408
|
+
if (FIPS_BOUNDARY_POSTURES.indexOf(posture) !== -1 && !STATE.fipsMode) {
|
|
409
|
+
_emitAudit("compliance.posture.fips_conflict",
|
|
410
|
+
{ posture: posture,
|
|
411
|
+
cryptoDefaults: "PQC-first (ML-KEM-1024 / SLH-DSA-SHAKE-256f / XChaCha20-Poly1305 / SHA3-512)",
|
|
412
|
+
fipsMode: false,
|
|
413
|
+
recommendation: "Call b.compliance.fipsMode(true) BEFORE b.compliance.set() to switch b.audit.sign to FIPS-140-3 validated AES-GCM + SHA-384, or document the PQC-first deviation in the SSP." },
|
|
414
|
+
"warning");
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// F-POSTURE-1 — cascade the posture into every primitive that owns a
|
|
418
|
+
// posture-conditioned default. Each primitive exposes an
|
|
419
|
+
// `applyPosture(name)` that merges the POSTURE_DEFAULTS entry for the
|
|
420
|
+
// posture into its own state and emits
|
|
421
|
+
// `compliance.posture.cascade.applied` with { primitive, posture }
|
|
422
|
+
// metadata. Cascade is ATOMIC at the chain-emission level — every
|
|
423
|
+
// primitive emits success/skipped, and a single primitive's failure
|
|
424
|
+
// (DB not initialized, retention not wired) emits skipped without
|
|
425
|
+
// failing the cascade. Operators wire DB/retention before set();
|
|
426
|
+
// skipped rows surface in the audit chain so a forensic review can
|
|
427
|
+
// reconstruct the boot order.
|
|
428
|
+
_applyPostureCascade(posture);
|
|
429
|
+
// F-AUD-5 — TZ awareness. Auditors expect timestamps in UTC.
|
|
430
|
+
// process.env.TZ controls Node's local-time conversion for any
|
|
431
|
+
// operator code that uses non-UTC formatters; under regulated
|
|
432
|
+
// postures (hipaa / pci-dss / sox / gdpr / soc2) emit a boot
|
|
433
|
+
// warning if it's set to a non-UTC value or unset (which means
|
|
434
|
+
// host-default which on most cloud images IS UTC but isn't
|
|
435
|
+
// guaranteed). Pure signal — no behavior change.
|
|
436
|
+
var REGULATED = ["hipaa", "pci-dss", "sox", "gdpr", "soc2", "fda-21cfr11"];
|
|
437
|
+
if (REGULATED.indexOf(posture) !== -1) {
|
|
438
|
+
var tz = process.env.TZ; // allow:raw-process-env — bootstrap signal, no operator-supplied default needed
|
|
439
|
+
if (typeof tz === "string" && tz !== "UTC" && tz !== "Etc/UTC") {
|
|
440
|
+
_emitAudit("compliance.posture.tz_warning",
|
|
441
|
+
{ posture: posture, tz: tz, recommendation: "Set TZ=UTC under regulated postures so audit timestamps align with regulator expectations." },
|
|
442
|
+
"warning");
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// _applyPostureCascade — F-POSTURE-1. Walks every primitive that
|
|
448
|
+
// participates in posture-conditioned defaults and asks it to merge
|
|
449
|
+
// the named posture into its state. Each step is best-effort at the
|
|
450
|
+
// audit-emission level (a primitive that isn't loaded yet emits
|
|
451
|
+
// 'skipped'); each step's success/skipped emits its own audit row so
|
|
452
|
+
// operators can confirm the cascade landed without re-reading
|
|
453
|
+
// state.posture per primitive.
|
|
454
|
+
function _applyPostureCascade(posture) {
|
|
455
|
+
var steps = [
|
|
456
|
+
{ primitive: "retention", resolver: function () { return retentionMod(); } },
|
|
457
|
+
{ primitive: "audit", resolver: function () { return audit(); } },
|
|
458
|
+
{ primitive: "db", resolver: function () { return db(); } },
|
|
459
|
+
{ primitive: "cryptoField", resolver: function () { return cryptoField(); } },
|
|
460
|
+
];
|
|
461
|
+
for (var i = 0; i < steps.length; i += 1) {
|
|
462
|
+
var step = steps[i];
|
|
463
|
+
var mod;
|
|
464
|
+
try { mod = step.resolver(); }
|
|
465
|
+
catch (_loadErr) { mod = null; }
|
|
466
|
+
if (!mod || typeof mod.applyPosture !== "function") {
|
|
467
|
+
_emitAudit("compliance.posture.cascade.skipped",
|
|
468
|
+
{ primitive: step.primitive, posture: posture, reason: "not-loaded-or-no-applyPosture" });
|
|
469
|
+
continue;
|
|
470
|
+
}
|
|
471
|
+
var result;
|
|
472
|
+
try { result = mod.applyPosture(posture); }
|
|
473
|
+
catch (e) {
|
|
474
|
+
_emitAudit("compliance.posture.cascade.skipped",
|
|
475
|
+
{ primitive: step.primitive, posture: posture,
|
|
476
|
+
reason: (e && e.message) ? e.message : String(e) },
|
|
477
|
+
"warning");
|
|
478
|
+
continue;
|
|
479
|
+
}
|
|
480
|
+
_emitAudit("compliance.posture.cascade.applied",
|
|
481
|
+
{ primitive: step.primitive, posture: posture, applied: result || null });
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* @primitive b.compliance.current
|
|
487
|
+
* @signature b.compliance.current()
|
|
488
|
+
* @since 0.7.27
|
|
489
|
+
* @status stable
|
|
490
|
+
* @related b.compliance.set, b.compliance.assert, b.compliance.describe
|
|
491
|
+
*
|
|
492
|
+
* Read the currently-pinned posture, or `null` if `set()` has not yet
|
|
493
|
+
* run. Cheap; pure read of internal state. Operators rendering an
|
|
494
|
+
* admin-UI banner ("running under HIPAA posture") call this once per
|
|
495
|
+
* page render — no caching needed.
|
|
496
|
+
*
|
|
497
|
+
* @example
|
|
498
|
+
* b.compliance.current(); // → null
|
|
499
|
+
* b.compliance.set("hipaa");
|
|
500
|
+
* b.compliance.current(); // → "hipaa"
|
|
501
|
+
*/
|
|
502
|
+
function current() {
|
|
503
|
+
return STATE.posture;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/**
|
|
507
|
+
* @primitive b.compliance.assert
|
|
508
|
+
* @signature b.compliance.assert(posture)
|
|
509
|
+
* @since 0.7.27
|
|
510
|
+
* @status stable
|
|
511
|
+
* @related b.compliance.current, b.compliance.set
|
|
512
|
+
*
|
|
513
|
+
* Throw `compliance/assertion-failed` if the currently-pinned posture
|
|
514
|
+
* differs from `posture`. Use at the top of a request handler that is
|
|
515
|
+
* only safe to run under a specific regime — fails closed with a
|
|
516
|
+
* stack trace that names the mismatch instead of silently serving
|
|
517
|
+
* under the wrong posture.
|
|
518
|
+
*
|
|
519
|
+
* @example
|
|
520
|
+
* b.compliance.set("hipaa");
|
|
521
|
+
* b.compliance.assert("hipaa"); // → no throw
|
|
522
|
+
*
|
|
523
|
+
* try {
|
|
524
|
+
* b.compliance.assert("pci-dss");
|
|
525
|
+
* } catch (e) {
|
|
526
|
+
* e.code; // → "compliance/assertion-failed"
|
|
527
|
+
* }
|
|
528
|
+
*/
|
|
529
|
+
function assert(posture) {
|
|
530
|
+
if (STATE.posture !== posture) {
|
|
531
|
+
throw new ComplianceError("compliance/assertion-failed",
|
|
532
|
+
"compliance.assert('" + posture + "'): current posture is " +
|
|
533
|
+
JSON.stringify(STATE.posture));
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* @primitive b.compliance.clear
|
|
539
|
+
* @signature b.compliance.clear()
|
|
540
|
+
* @since 0.7.27
|
|
541
|
+
* @status stable
|
|
542
|
+
* @related b.compliance.set, b.compliance.current
|
|
543
|
+
*
|
|
544
|
+
* Reset the pinned posture to `null` and emit a
|
|
545
|
+
* `compliance.posture.cleared` audit row carrying the previous
|
|
546
|
+
* posture. Reserved for tests + operator-controlled tear-down — the
|
|
547
|
+
* primitives that were cascaded into do not roll back their merged
|
|
548
|
+
* defaults, so production code that called `set()` should not call
|
|
549
|
+
* `clear()` mid-life.
|
|
550
|
+
*
|
|
551
|
+
* @example
|
|
552
|
+
* b.compliance.set("hipaa");
|
|
553
|
+
* b.compliance.clear();
|
|
554
|
+
* b.compliance.current(); // → null
|
|
555
|
+
*/
|
|
556
|
+
function clear() {
|
|
557
|
+
// Reserved for tests + operator-controlled tear-down. Emits an audit
|
|
558
|
+
// row so the chain shows the posture was intentionally cleared.
|
|
559
|
+
if (STATE.posture) {
|
|
560
|
+
_emitAudit("compliance.posture.cleared", { previous: STATE.posture });
|
|
561
|
+
}
|
|
562
|
+
STATE.posture = null;
|
|
563
|
+
STATE.setAt = null;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
function _resetForTest() {
|
|
567
|
+
STATE.posture = null;
|
|
568
|
+
STATE.setAt = null;
|
|
569
|
+
STATE.fipsMode = false;
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// Posture → human-readable name + statutory citation + jurisdiction.
|
|
573
|
+
// Operators rendering the deployment posture in admin UI / audit logs
|
|
574
|
+
// reach for REGIME_MAP[posture] instead of hand-rolling a lookup
|
|
575
|
+
// table. The values track the regulatory text and update with the
|
|
576
|
+
// framework rather than going stale in operator code.
|
|
577
|
+
var REGIME_MAP = Object.freeze({
|
|
578
|
+
"hipaa": {
|
|
579
|
+
name: "Health Insurance Portability and Accountability Act",
|
|
580
|
+
citation: "Pub. L. 104-191; 45 CFR Parts 160, 162, 164",
|
|
581
|
+
jurisdiction: "US",
|
|
582
|
+
domain: "health",
|
|
583
|
+
},
|
|
584
|
+
"pci-dss": {
|
|
585
|
+
name: "Payment Card Industry Data Security Standard",
|
|
586
|
+
citation: "PCI Security Standards Council v4.0.1",
|
|
587
|
+
jurisdiction: "international",
|
|
588
|
+
domain: "payment",
|
|
589
|
+
},
|
|
590
|
+
"soc2": {
|
|
591
|
+
name: "System and Organization Controls 2",
|
|
592
|
+
citation: "AICPA Trust Services Criteria",
|
|
593
|
+
jurisdiction: "US",
|
|
594
|
+
domain: "audit-attestation",
|
|
595
|
+
},
|
|
596
|
+
"sox": {
|
|
597
|
+
name: "Sarbanes-Oxley Act",
|
|
598
|
+
citation: "Pub. L. 107-204; 15 U.S.C. §§7201-7266",
|
|
599
|
+
jurisdiction: "US",
|
|
600
|
+
domain: "financial-reporting",
|
|
601
|
+
},
|
|
602
|
+
"wmhmda": {
|
|
603
|
+
name: "Washington My Health My Data Act",
|
|
604
|
+
citation: "RCW 19.373",
|
|
605
|
+
jurisdiction: "US-WA",
|
|
606
|
+
domain: "health",
|
|
607
|
+
},
|
|
608
|
+
"bipa": {
|
|
609
|
+
name: "Illinois Biometric Information Privacy Act",
|
|
610
|
+
citation: "740 ILCS 14",
|
|
611
|
+
jurisdiction: "US-IL",
|
|
612
|
+
domain: "biometrics",
|
|
613
|
+
},
|
|
614
|
+
"ccpa": {
|
|
615
|
+
name: "California Consumer Privacy Act / California Privacy Rights Act",
|
|
616
|
+
citation: "Cal. Civ. Code §§1798.100-1798.199",
|
|
617
|
+
jurisdiction: "US-CA",
|
|
618
|
+
domain: "privacy",
|
|
619
|
+
},
|
|
620
|
+
"gdpr": {
|
|
621
|
+
name: "General Data Protection Regulation",
|
|
622
|
+
citation: "Regulation (EU) 2016/679",
|
|
623
|
+
jurisdiction: "EU",
|
|
624
|
+
domain: "privacy",
|
|
625
|
+
},
|
|
626
|
+
"dora": {
|
|
627
|
+
name: "Digital Operational Resilience Act",
|
|
628
|
+
citation: "Regulation (EU) 2022/2554",
|
|
629
|
+
jurisdiction: "EU",
|
|
630
|
+
domain: "financial-resilience",
|
|
631
|
+
},
|
|
632
|
+
"nis2": {
|
|
633
|
+
name: "Network and Information Security Directive 2",
|
|
634
|
+
citation: "Directive (EU) 2022/2555",
|
|
635
|
+
jurisdiction: "EU",
|
|
636
|
+
domain: "cybersecurity",
|
|
637
|
+
},
|
|
638
|
+
"cra": {
|
|
639
|
+
name: "Cyber Resilience Act",
|
|
640
|
+
citation: "Regulation (EU) 2024/2847",
|
|
641
|
+
jurisdiction: "EU",
|
|
642
|
+
domain: "product-cybersecurity",
|
|
643
|
+
},
|
|
644
|
+
"ai-act": {
|
|
645
|
+
name: "Artificial Intelligence Act",
|
|
646
|
+
citation: "Regulation (EU) 2024/1689",
|
|
647
|
+
jurisdiction: "EU",
|
|
648
|
+
domain: "ai-governance",
|
|
649
|
+
},
|
|
650
|
+
"lgpd-br": {
|
|
651
|
+
name: "Lei Geral de Proteção de Dados",
|
|
652
|
+
citation: "Lei nº 13.709/2018",
|
|
653
|
+
jurisdiction: "BR",
|
|
654
|
+
domain: "privacy",
|
|
655
|
+
},
|
|
656
|
+
"pipl-cn": {
|
|
657
|
+
name: "Personal Information Protection Law",
|
|
658
|
+
citation: "Adopted Aug 20, 2021; effective Nov 1, 2021",
|
|
659
|
+
jurisdiction: "CN",
|
|
660
|
+
domain: "privacy",
|
|
661
|
+
},
|
|
662
|
+
"appi-jp": {
|
|
663
|
+
name: "Act on Protection of Personal Information",
|
|
664
|
+
citation: "Act No. 57 of 2003 (most recent amendment 2022)",
|
|
665
|
+
jurisdiction: "JP",
|
|
666
|
+
domain: "privacy",
|
|
667
|
+
},
|
|
668
|
+
"pdpa-sg": {
|
|
669
|
+
name: "Personal Data Protection Act",
|
|
670
|
+
citation: "Act 26 of 2012",
|
|
671
|
+
jurisdiction: "SG",
|
|
672
|
+
domain: "privacy",
|
|
673
|
+
},
|
|
674
|
+
"pipeda-ca": {
|
|
675
|
+
name: "Personal Information Protection and Electronic Documents Act",
|
|
676
|
+
citation: "S.C. 2000, c. 5",
|
|
677
|
+
jurisdiction: "CA",
|
|
678
|
+
domain: "privacy",
|
|
679
|
+
},
|
|
680
|
+
"uk-gdpr": {
|
|
681
|
+
name: "UK General Data Protection Regulation",
|
|
682
|
+
citation: "Data Protection Act 2018 + retained EU GDPR",
|
|
683
|
+
jurisdiction: "UK",
|
|
684
|
+
domain: "privacy",
|
|
685
|
+
},
|
|
686
|
+
"fapi-2.0-message-signing": {
|
|
687
|
+
name: "FAPI 2.0 Message Signing Profile",
|
|
688
|
+
citation: "OpenID Foundation FAPI 2.0 Message Signing — Final",
|
|
689
|
+
jurisdiction: "INTL",
|
|
690
|
+
domain: "financial",
|
|
691
|
+
},
|
|
692
|
+
"modpa": {
|
|
693
|
+
name: "Maryland Online Data Privacy Act",
|
|
694
|
+
citation: "Md. Code Ann., Com. Law §§14-4601 et seq. (effective 2025-10-01)",
|
|
695
|
+
jurisdiction: "US-MD",
|
|
696
|
+
domain: "privacy",
|
|
697
|
+
},
|
|
698
|
+
"nydfs-500": {
|
|
699
|
+
name: "NYDFS 23 NYCRR 500 Amendment 2",
|
|
700
|
+
citation: "23 NYCRR Part 500 (Second Amendment, effective 2024-11-01 with rolling phase-in)",
|
|
701
|
+
jurisdiction: "US-NY",
|
|
702
|
+
domain: "financial",
|
|
703
|
+
},
|
|
704
|
+
"hipaa-2026": {
|
|
705
|
+
name: "HIPAA Security Rule (2026 Final)",
|
|
706
|
+
citation: "45 CFR Parts 160, 162, 164 — HHS Final Rule (effective 2026-Q4)",
|
|
707
|
+
jurisdiction: "US",
|
|
708
|
+
domain: "health",
|
|
709
|
+
},
|
|
710
|
+
"quebec-25": {
|
|
711
|
+
name: "Loi 25 (Quebec — final phase)",
|
|
712
|
+
citation: "An Act to modernize legislative provisions as regards the protection of personal information (Final phase 2026-09-22)",
|
|
713
|
+
jurisdiction: "CA-QC",
|
|
714
|
+
domain: "privacy",
|
|
715
|
+
},
|
|
716
|
+
// v0.8.77 — US state consumer-privacy postures
|
|
717
|
+
"vcdpa": { name: "Virginia Consumer Data Protection Act", citation: "Va. Code §59.1-575 et seq. (effective 2023-01-01)", jurisdiction: "US-VA", domain: "privacy" },
|
|
718
|
+
"co-cpa": { name: "Colorado Privacy Act", citation: "C.R.S. §6-1-1301 et seq. (effective 2023-07-01)", jurisdiction: "US-CO", domain: "privacy" },
|
|
719
|
+
"ctdpa": { name: "Connecticut Data Privacy Act", citation: "Conn. Gen. Stat. §42-515 et seq. (effective 2023-07-01)", jurisdiction: "US-CT", domain: "privacy" },
|
|
720
|
+
"ucpa": { name: "Utah Consumer Privacy Act", citation: "Utah Code §13-61-101 et seq. (effective 2023-12-31)", jurisdiction: "US-UT", domain: "privacy" },
|
|
721
|
+
"tdpsa": { name: "Texas Data Privacy and Security Act", citation: "Tex. Bus. & Com. Code §541.001 et seq. (effective 2024-07-01)", jurisdiction: "US-TX", domain: "privacy" },
|
|
722
|
+
"or-cpa": { name: "Oregon Consumer Privacy Act", citation: "Or. Rev. Stat. §646A.570 et seq. (effective 2024-07-01)", jurisdiction: "US-OR", domain: "privacy" },
|
|
723
|
+
"mt-cdpa": { name: "Montana Consumer Data Privacy Act", citation: "Mont. Code §30-14-2801 et seq. (effective 2024-10-01)", jurisdiction: "US-MT", domain: "privacy" },
|
|
724
|
+
"ia-icdpa": { name: "Iowa Consumer Data Protection Act", citation: "Iowa Code §715D (effective 2025-01-01)", jurisdiction: "US-IA", domain: "privacy" },
|
|
725
|
+
"in-indpa": { name: "Indiana Consumer Data Protection Act", citation: "Ind. Code §24-15 (effective 2026-01-01)", jurisdiction: "US-IN", domain: "privacy" },
|
|
726
|
+
"de-dpdpa": { name: "Delaware Personal Data Privacy Act", citation: "6 Del. Code Ch. 12D (effective 2026-01-01)", jurisdiction: "US-DE", domain: "privacy" },
|
|
727
|
+
"nh-nhpa": { name: "New Hampshire SB 255 Consumer Privacy Act", citation: "NH RSA Chapter 507-H (effective 2025-01-01)", jurisdiction: "US-NH", domain: "privacy" },
|
|
728
|
+
"nj-njdpa": { name: "New Jersey Data Privacy Act", citation: "N.J. Rev. Stat. §56:8-166.4 et seq. (effective 2025-01-15)", jurisdiction: "US-NJ", domain: "privacy" },
|
|
729
|
+
"ky-kcdpa": { name: "Kentucky Consumer Data Protection Act", citation: "Ky. Rev. Stat. §367.3611 et seq. (effective 2026-01-01)", jurisdiction: "US-KY", domain: "privacy" },
|
|
730
|
+
"tn-tipa": { name: "Tennessee Information Protection Act", citation: "Tenn. Code §47-18-3201 et seq. (effective 2025-07-01)", jurisdiction: "US-TN", domain: "privacy" },
|
|
731
|
+
"mn-mncdpa": { name: "Minnesota Consumer Data Privacy Act", citation: "Minn. Stat. §325O (effective 2025-07-31)", jurisdiction: "US-MN", domain: "privacy" },
|
|
732
|
+
"ri-ricpa": { name: "Rhode Island Consumer Privacy Act", citation: "R.I. Gen. Laws §6-48.1 (effective 2026-01-01)", jurisdiction: "US-RI", domain: "privacy" },
|
|
733
|
+
"ne-dpa": { name: "Nebraska Data Privacy Act", citation: "Neb. Rev. Stat. §87-1101 et seq. (effective 2025-01-01)", jurisdiction: "US-NE", domain: "privacy" },
|
|
734
|
+
"nv-sb370": { name: "Nevada SB 370 Consumer Health Data Privacy", citation: "Nev. Rev. Stat. §603A (consumer-health amendments, effective 2024-03-31)", jurisdiction: "US-NV", domain: "health" },
|
|
735
|
+
"ca-aadc": { name: "California Age-Appropriate Design Code Act", citation: "Cal. Civ. Code §1798.99.28 et seq. (partial preliminary injunction NetChoice v. Bonta)", jurisdiction: "US-CA", domain: "privacy" },
|
|
736
|
+
"ct-sb3": { name: "Connecticut SB 3 Consumer Health Data", citation: "Conn. P.A. 23-56 (effective 2023-07-01)", jurisdiction: "US-CT", domain: "health" },
|
|
737
|
+
"tx-cubi": { name: "Texas Capture or Use of Biometric Identifier", citation: "Tex. Bus. & Com. Code §503.001 (effective 2009-09-01)", jurisdiction: "US-TX", domain: "biometric" },
|
|
738
|
+
"fl-fdbr": { name: "Florida Digital Bill of Rights", citation: "Fla. Stat. §501.701 et seq. SB 262 (effective 2024-07-01)", jurisdiction: "US-FL", domain: "privacy" },
|
|
739
|
+
// ---- v0.8.81 — AI governance ----
|
|
740
|
+
"co-ai": { name: "Colorado AI Act", citation: "C.R.S. §6-1-1701 et seq. SB24-205 (postponed to 2026-06-30; enforcement stayed)", jurisdiction: "US-CO", domain: "ai-governance" },
|
|
741
|
+
"il-hb3773": { name: "Illinois HB 3773 — AI in Employment", citation: "775 ILCS 5 IHRA AI amendment (effective 2026-01-01)", jurisdiction: "US-IL", domain: "ai-governance" },
|
|
742
|
+
"tx-traiga": { name: "Texas Responsible AI Governance Act", citation: "Tex. Bus. & Com. Code Ch. 552 HB 149 (effective 2026-01-01)", jurisdiction: "US-TX", domain: "ai-governance" },
|
|
743
|
+
"ut-aipa": { name: "Utah AI Disclosure Act (UAIPA)", citation: "Utah Code §13-2-12 SB149 + 2025 amendments (sunset 2027-07-01)", jurisdiction: "US-UT", domain: "ai-governance" },
|
|
744
|
+
"nyc-ll144": { name: "NYC Automated Employment Decision Tools Law", citation: "NYC Admin. Code §20-870 et seq. Local Law 144 (in force 2023-07-05)", jurisdiction: "US-NY-NYC", domain: "ai-governance" },
|
|
745
|
+
"ca-tfaia": { name: "California Transparency in Frontier AI Act", citation: "Cal. Bus. & Prof. Code §22757.10 et seq. SB 53 (effective 2026-01-01)", jurisdiction: "US-CA", domain: "ai-governance" },
|
|
746
|
+
"kr-ai-basic": { name: "South Korea AI Basic Act", citation: "Framework Act on Development of AI (effective 2026-01-22)", jurisdiction: "KR", domain: "ai-governance" },
|
|
747
|
+
"cn-ai-label": { name: "China — Measures for Labelling AI-Generated Content", citation: "CAC + MIIT + Ministry of Public Security + NRTA Order (effective 2025-09-01)", jurisdiction: "CN", domain: "ai-governance" },
|
|
748
|
+
// ---- v0.8.81 — AI management cross-walks ----
|
|
749
|
+
"iso-42001": { name: "ISO/IEC 42001 — AI Management System", citation: "ISO/IEC 42001:2023", jurisdiction: "international", domain: "ai-governance" },
|
|
750
|
+
"iso-23894": { name: "ISO/IEC 23894 — AI Risk Management", citation: "ISO/IEC 23894:2023", jurisdiction: "international", domain: "ai-governance" },
|
|
751
|
+
// ---- v0.8.81 — content-credentials posture flags ----
|
|
752
|
+
"ca-sb942": { name: "California Gen-AI Provenance Disclosure", citation: "Cal. Bus. & Prof. Code §22757 SB-942 (effective 2026-08-02)", jurisdiction: "US-CA", domain: "content-credentials" },
|
|
753
|
+
"ca-ab853": { name: "California Platform Gen-AI Detection", citation: "Cal. Bus. & Prof. Code §22757 AB-853 (effective 2026-08-02)", jurisdiction: "US-CA", domain: "content-credentials" },
|
|
754
|
+
// ---- v0.8.81 — substrate-to-posture cleanup ----
|
|
755
|
+
"eaa": { name: "EU Accessibility Act", citation: "Directive (EU) 2019/882 (effective 2025-06-28)", jurisdiction: "EU", domain: "accessibility" },
|
|
756
|
+
"wcag-2-2": { name: "W3C Web Content Accessibility Guidelines 2.2", citation: "W3C Recommendation (Oct 2023)", jurisdiction: "international", domain: "accessibility" },
|
|
757
|
+
"eu-data-act": { name: "EU Data Act", citation: "Regulation (EU) 2023/2854 (effective 2025-09-12)", jurisdiction: "EU", domain: "data-sharing" },
|
|
758
|
+
"hitech": { name: "Health Information Technology for Economic and Clinical Health Act", citation: "Pub. L. 111-5, Title XIII, Subtitle D (2009)", jurisdiction: "US", domain: "health" },
|
|
759
|
+
"ferpa": { name: "Family Educational Rights and Privacy Act", citation: "20 U.S.C. §1232g; 34 CFR Part 99", jurisdiction: "US", domain: "student-records" },
|
|
760
|
+
"dpdp": { name: "Digital Personal Data Protection Act 2023", citation: "Act 22 of 2023 (India; rules pending)", jurisdiction: "IN", domain: "privacy" },
|
|
761
|
+
// ---- v0.8.82 — privacy 2026 sweep ----
|
|
762
|
+
// US federal
|
|
763
|
+
"coppa": { name: "Children's Online Privacy Protection Act", citation: "15 U.S.C. §§6501-6506; 16 CFR Part 312 (effective 2000-04-21)", jurisdiction: "US", domain: "child-privacy" },
|
|
764
|
+
"coppa-2025": { name: "COPPA 2025 Amendment", citation: "FTC final rule (2025-04-22; effective 2026-06-23) — biometric expansion + knowing-collection-13-and-under disclosure", jurisdiction: "US", domain: "child-privacy" },
|
|
765
|
+
"glba-safeguards": { name: "GLBA Safeguards Rule 2024 Amendment", citation: "16 CFR Part 314 (effective 2024-05-13)", jurisdiction: "US", domain: "financial-privacy" },
|
|
766
|
+
"gina": { name: "Genetic Information Nondiscrimination Act", citation: "Pub. L. 110-233; 42 U.S.C. §2000ff et seq. (effective 2009-11-21)", jurisdiction: "US", domain: "genetic-privacy" },
|
|
767
|
+
"vppa": { name: "Video Privacy Protection Act", citation: "18 U.S.C. §2710 (effective 1988-11-05)", jurisdiction: "US", domain: "consumer-privacy" },
|
|
768
|
+
"can-spam": { name: "CAN-SPAM Act", citation: "15 U.S.C. §§7701-7713; 16 CFR Part 316 (effective 2004-01-01)", jurisdiction: "US", domain: "consumer-privacy" },
|
|
769
|
+
"il-gipa": { name: "Illinois Genetic Information Privacy Act", citation: "410 ILCS 513 (private right of action post-2024 amendment)", jurisdiction: "US-IL", domain: "genetic-privacy" },
|
|
770
|
+
"hhs-repro-24": { name: "HHS Reproductive Health HIPAA Amendment 2024", citation: "45 CFR Parts 160, 164 — Final Rule (effective 2024-12-23)", jurisdiction: "US", domain: "health" },
|
|
771
|
+
// NIST cross-walk
|
|
772
|
+
"nist-pf-1.1": { name: "NIST Privacy Framework 1.1", citation: "NIST PF 1.1 (final 2025-04-14)", jurisdiction: "US", domain: "privacy" },
|
|
773
|
+
// UK
|
|
774
|
+
"uk-duaa": { name: "UK Data (Use and Access) Act 2025", citation: "DUAA c. 26 (Royal Assent 2025-06-19; replaces DPDI Bill)", jurisdiction: "UK", domain: "privacy" },
|
|
775
|
+
// Latin America
|
|
776
|
+
"cl-pdpa": { name: "Chile Ley 21.719 Protección de Datos Personales", citation: "Ley 21.719 (enacted 2024-12-13; effective 2026-12-01)", jurisdiction: "CL", domain: "privacy" },
|
|
777
|
+
"mx-lfpdppp": { name: "Mexico LFPDPPP + 2025 reform", citation: "Ley Federal de Protección de Datos Personales en Posesión de los Particulares (2010 + 2025 secondary reform)", jurisdiction: "MX", domain: "privacy" },
|
|
778
|
+
"ar-pdpa": { name: "Argentina Personal Data Protection Act", citation: "Ley 25.326 + 2024 modernization bill (pending)", jurisdiction: "AR", domain: "privacy" },
|
|
779
|
+
// APAC
|
|
780
|
+
"pipa-kr": { name: "South Korea Personal Information Protection Act", citation: "PIPA 2011 + 2023 major amendment (phased 2023-09-15 / 2024-03-15)", jurisdiction: "KR", domain: "privacy" },
|
|
781
|
+
"au-privacy": { name: "Australia Privacy Act + 2024 Amendment Act", citation: "Privacy Act 1988 + Privacy and Other Legislation Amendment Act 2024 (first tranche 2024-12-10; statutory tort 2025-06-10)", jurisdiction: "AU", domain: "privacy" },
|
|
782
|
+
"th-pdpa": { name: "Thailand Personal Data Protection Act", citation: "PDPA B.E. 2562 (2019; full effect 2022-06-01)", jurisdiction: "TH", domain: "privacy" },
|
|
783
|
+
"vn-pdp": { name: "Vietnam Personal Data Protection Law", citation: "Decree 13/2023 + PDP Law (effective 2026-01-01)", jurisdiction: "VN", domain: "privacy" },
|
|
784
|
+
"id-pdp": { name: "Indonesia Personal Data Protection Law", citation: "Law 27 of 2022 (effective 2024-10-17)", jurisdiction: "ID", domain: "privacy" },
|
|
785
|
+
"my-pdpa": { name: "Malaysia Personal Data Protection Act", citation: "PDPA 2010 + 2024 amendments (effective 2025-04-30)", jurisdiction: "MY", domain: "privacy" },
|
|
786
|
+
// US state child privacy
|
|
787
|
+
"ny-safe-kids": { name: "NY Child Data Protection Act / SAFE for Kids Act", citation: "N.Y. Gen. Bus. Law §899-ff et seq. (effective 2025-06-20)", jurisdiction: "US-NY", domain: "child-privacy" },
|
|
788
|
+
"ny-saffe": { name: "NY Stop Addictive Feeds Exploitation for Kids Act", citation: "N.Y. Gen. Bus. Law §1500 et seq. (effective 2025-06-20)", jurisdiction: "US-NY", domain: "child-privacy" },
|
|
789
|
+
"md-kids-code": { name: "Maryland Age-Appropriate Design Code", citation: "Md. Code Ann., Com. Law §14-4901 et seq. (enacted 2024)", jurisdiction: "US-MD", domain: "child-privacy" },
|
|
790
|
+
"vt-aadc": { name: "Vermont Age-Appropriate Design Code", citation: "Vt. Stat. Ann. tit. 9 §2447 et seq. (enacted 2024)", jurisdiction: "US-VT", domain: "child-privacy" },
|
|
791
|
+
// EU non-personal-data + adjacent
|
|
792
|
+
"dsa": { name: "EU Digital Services Act", citation: "Regulation (EU) 2022/2065 (fully applicable 2024-02-17)", jurisdiction: "EU", domain: "platform-governance" },
|
|
793
|
+
"dga": { name: "EU Data Governance Act", citation: "Regulation (EU) 2022/868 (applicable 2023-09-24)", jurisdiction: "EU", domain: "data-sharing" },
|
|
794
|
+
"eu-cer": { name: "EU Critical Entities Resilience Directive", citation: "Directive (EU) 2022/2557 (transposition 2024-10-17)", jurisdiction: "EU", domain: "cybersecurity" },
|
|
795
|
+
"eu-cyber-sol": { name: "EU Cyber Solidarity Act", citation: "Regulation (EU) 2025/38 (effective 2025-02-04)", jurisdiction: "EU", domain: "cybersecurity" },
|
|
796
|
+
"eidas-2": { name: "eIDAS 2 / EUDI Wallet", citation: "Regulation (EU) 2024/1183 (rollout 2026-2027)", jurisdiction: "EU", domain: "identity" },
|
|
797
|
+
// ---- v0.8.86 — sectoral + cybersecurity directives ----
|
|
798
|
+
"cmmc-2.0": { name: "Cybersecurity Maturity Model Certification 2.0", citation: "32 CFR Part 170 (DFARS rule effective 2025-Q1)", jurisdiction: "US", domain: "cybersecurity" },
|
|
799
|
+
"cjis-v6": { name: "FBI CJIS Security Policy v6.0", citation: "CJIS Security Policy v6.0 (effective 2024-12)", jurisdiction: "US", domain: "law-enforcement" },
|
|
800
|
+
"iso-27001-2022": { name: "ISO/IEC 27001:2022 Information Security Management System", citation: "ISO/IEC 27001:2022", jurisdiction: "international", domain: "cybersecurity" },
|
|
801
|
+
"iso-27002-2022": { name: "ISO/IEC 27002:2022 Information Security Controls", citation: "ISO/IEC 27002:2022", jurisdiction: "international", domain: "cybersecurity" },
|
|
802
|
+
"iso-27017": { name: "ISO/IEC 27017 Cloud Services Security Controls", citation: "ISO/IEC 27017:2015", jurisdiction: "international", domain: "cybersecurity" },
|
|
803
|
+
"iso-27018": { name: "ISO/IEC 27018 PII Protection in Public Cloud", citation: "ISO/IEC 27018:2019", jurisdiction: "international", domain: "privacy" },
|
|
804
|
+
"iso-27701": { name: "ISO/IEC 27701 Privacy Information Management System", citation: "ISO/IEC 27701:2019", jurisdiction: "international", domain: "privacy" },
|
|
805
|
+
"nist-800-66-r2": { name: "NIST SP 800-66 Rev 2 — HIPAA Security Rule Guidance", citation: "NIST SP 800-66 Rev 2 (Feb 2024)", jurisdiction: "US", domain: "health" },
|
|
806
|
+
"ehds": { name: "European Health Data Space", citation: "Regulation (EU) 2025/327 (phased 2027-2029)", jurisdiction: "EU", domain: "health" },
|
|
807
|
+
"circia": { name: "Cyber Incident Reporting for Critical Infrastructure Act", citation: "6 U.S.C. §681 et seq. (final rule pending)", jurisdiction: "US", domain: "cybersecurity" },
|
|
808
|
+
// ---- v0.12.1 — REGIME_MAP backfill for KNOWN_POSTURES without
|
|
809
|
+
// describe() coverage. Each entry resolves `b.compliance.describe
|
|
810
|
+
// (posture)` → { name, citation, jurisdiction, domain } so admin
|
|
811
|
+
// UI / generated audit reports rendering "running under <name>
|
|
812
|
+
// (<citation>)" stops getting null.
|
|
813
|
+
// ---- POSTURE_DEFAULTS-orphan postures promoted into KNOWN_POSTURES ----
|
|
814
|
+
"42-cfr-part-2": { name: "Confidentiality of Substance Use Disorder Patient Records", citation: "42 CFR Part 2 (HHS final rule effective 2024-02-08)", jurisdiction: "US", domain: "health" },
|
|
815
|
+
"hti-1": { name: "ONC HTI-1 Final Rule — Health IT Certification + Algorithm Transparency", citation: "45 CFR Part 170 / 89 FR 1192 (effective 2024-12-31)", jurisdiction: "US", domain: "health" },
|
|
816
|
+
"uscdi-v4": { name: "US Core Data for Interoperability v4", citation: "ONC USCDI v4 (Jan 2024)", jurisdiction: "US", domain: "health" },
|
|
817
|
+
"irs-1075": { name: "IRS Publication 1075 — Tax Information Security Guidelines", citation: "IRS Pub 1075 (Rev. 11-2023)", jurisdiction: "US", domain: "tax" },
|
|
818
|
+
"nist-800-172-r3": { name: "NIST SP 800-172 Rev 3 — Enhanced CUI Security Requirements", citation: "NIST SP 800-172 Rev 3", jurisdiction: "US", domain: "cybersecurity" },
|
|
819
|
+
"tlp-2.0": { name: "FIRST Traffic Light Protocol 2.0", citation: "FIRST TLP v2.0 (Aug 2022)", jurisdiction: "international", domain: "information-sharing" },
|
|
820
|
+
"soci-au": { name: "Australia Security of Critical Infrastructure Act", citation: "SOCI 2018 + 2022 amendments", jurisdiction: "AU", domain: "critical-infrastructure" },
|
|
821
|
+
"ffiec-cat-2": { name: "FFIEC Cybersecurity Assessment Tool 2.0", citation: "FFIEC CAT v2.0", jurisdiction: "US", domain: "financial" },
|
|
822
|
+
"cri-profile-v2.0":{ name: "Cyber Risk Institute Profile v2.0", citation: "CRI Profile v2.0 (financial-services NIST CSF cross-walk)", jurisdiction: "US", domain: "financial" },
|
|
823
|
+
"m-22-09": { name: "OMB M-22-09 — Federal Zero Trust Architecture Strategy", citation: "OMB Memorandum M-22-09 (2022-01-26)", jurisdiction: "US", domain: "cybersecurity" },
|
|
824
|
+
"m-22-18": { name: "OMB M-22-18 — Software Supply Chain Security", citation: "OMB Memorandum M-22-18 (2022-09-14)", jurisdiction: "US", domain: "supply-chain" },
|
|
825
|
+
"nist-800-53-r5-privacy": { name: "NIST SP 800-53 Rev 5 — Privacy Control Family", citation: "NIST SP 800-53 Rev 5 (Privacy overlay)", jurisdiction: "US", domain: "privacy" },
|
|
826
|
+
"nist-ai-600-1-genai": { name: "NIST AI 600-1 — Generative AI Profile", citation: "NIST AI 600-1 (Jul 2024) — companion to AI RMF 1.0", jurisdiction: "US", domain: "ai" },
|
|
827
|
+
"nist-csf-2.0": { name: "NIST Cybersecurity Framework 2.0", citation: "NIST CSF 2.0 (Feb 2024)", jurisdiction: "US", domain: "cybersecurity" },
|
|
828
|
+
"sb-53": { name: "California SB-53 — Transparency in Frontier AI Act", citation: "Cal. Health & Safety Code §22757 et seq. (effective 2025-09-29)", jurisdiction: "US-CA", domain: "ai" },
|
|
829
|
+
"nyc-ll144-2024": { name: "NYC Local Law 144 — Automated Employment Decision Tool Bias Audits", citation: "NYC Local Law 144 of 2021 + 2024 DCWP enforcement update", jurisdiction: "US-NY", domain: "ai" },
|
|
830
|
+
// ---- Pre-existing KNOWN_POSTURES that lacked REGIME_MAP records ----
|
|
831
|
+
"sox-404": { name: "Sarbanes-Oxley §404 — Internal Controls over Financial Reporting", citation: "15 U.S.C. §7262", jurisdiction: "US", domain: "financial-reporting" },
|
|
832
|
+
"soc2-cc1.3": { name: "SOC 2 Trust Services Criterion CC1.3 — Segregation of Duties", citation: "AICPA Trust Services Criteria CC1.3", jurisdiction: "US", domain: "audit-attestation" },
|
|
833
|
+
"fapi-2.0": { name: "Financial-grade API 2.0 Final", citation: "OpenID Foundation FAPI 2.0 Final (Feb 2025)", jurisdiction: "international", domain: "financial" },
|
|
834
|
+
"cfpb-1033": { name: "CFPB §1033 — Personal Financial Data Rights", citation: "12 CFR Part 1033 (Final Rule 2024-10-22; tiered effective dates from 2026-04-01)", jurisdiction: "US", domain: "financial" },
|
|
835
|
+
"iab-tcf-v2.3": { name: "IAB Transparency & Consent Framework v2.3", citation: "IAB Europe TCF v2.3 (Sep 2024)", jurisdiction: "EU", domain: "advertising" },
|
|
836
|
+
"iab-mspa": { name: "IAB Multi-State Privacy Agreement", citation: "IAB Tech Lab MSPA + Global Privacy Platform", jurisdiction: "US", domain: "privacy" },
|
|
837
|
+
"tcpa-10dlc": { name: "TCPA 10DLC Messaging Compliance", citation: "47 U.S.C. §227 + CTIA 10DLC + FCC 1:1 disclosure rule", jurisdiction: "US", domain: "telecommunications" },
|
|
838
|
+
"fda-21cfr11": { name: "FDA 21 CFR Part 11 — Electronic Records / Signatures", citation: "21 CFR Part 11", jurisdiction: "US", domain: "life-sciences" },
|
|
839
|
+
"fda-annex-11": { name: "EU GMP Annex 11 — Computerized Systems", citation: "EudraLex Vol. 4 Annex 11", jurisdiction: "EU", domain: "life-sciences" },
|
|
840
|
+
"sec-1.05": { name: "SEC Cybersecurity Risk Management — Item 1.05 Form 8-K", citation: "17 CFR §229.106 + Item 1.05 (effective 2023-12-18)", jurisdiction: "US", domain: "financial-reporting" },
|
|
841
|
+
"ny-2-d": { name: "NY Education Law §2-d — Student Privacy", citation: "N.Y. Educ. Law §2-d", jurisdiction: "US-NY", domain: "education" },
|
|
842
|
+
"il-soppa": { name: "Illinois Student Online Personal Protection Act", citation: "105 ILCS 85", jurisdiction: "US-IL", domain: "education" },
|
|
843
|
+
"ca-sopipa": { name: "California Student Online Personal Information Protection Act", citation: "Cal. Bus. & Prof. Code §22584", jurisdiction: "US-CA", domain: "education" },
|
|
844
|
+
"ct-pa-5-2": { name: "Connecticut Public Act 5-2 — Student Data Privacy", citation: "Conn. Public Act No. 16-189", jurisdiction: "US-CT", domain: "education" },
|
|
845
|
+
"tx-hb-4504": { name: "Texas HB 4504 — Student Data Privacy", citation: "Tex. Educ. Code §32.151", jurisdiction: "US-TX", domain: "education" },
|
|
846
|
+
"va-sb-1376": { name: "Virginia SB 1376 — Student Data Privacy", citation: "Va. Code §22.1-289.01", jurisdiction: "US-VA", domain: "education" },
|
|
847
|
+
"staterramp": { name: "StateRAMP / TX-RAMP / AZ-RAMP / GovRAMP Family", citation: "StateRAMP Program (FedRAMP-Moderate cross-walk)", jurisdiction: "US", domain: "cybersecurity" },
|
|
848
|
+
"irap": { name: "Australia Information Security Registered Assessors Program / Essential Eight / ISM", citation: "ASD IRAP + ISM", jurisdiction: "AU", domain: "cybersecurity" },
|
|
849
|
+
"bsi-c5": { name: "Germany BSI C5 — Cloud Computing Compliance Catalogue", citation: "BSI Cloud Computing Compliance Criteria Catalogue (C5:2020)", jurisdiction: "DE", domain: "cybersecurity" },
|
|
850
|
+
"ens-es": { name: "Spain Esquema Nacional de Seguridad", citation: "Real Decreto 311/2022", jurisdiction: "ES", domain: "cybersecurity" },
|
|
851
|
+
"uk-g-cloud": { name: "UK G-Cloud Framework", citation: "UK Crown Commercial Service G-Cloud 14", jurisdiction: "UK", domain: "cybersecurity" },
|
|
852
|
+
// ---- v0.9.6 expansion REGIME_MAP backfill (cybersecurity / AI / supply-chain frameworks) ----
|
|
853
|
+
"nist-800-53": { name: "NIST SP 800-53 Rev 5 — Security & Privacy Controls", citation: "NIST SP 800-53 Rev 5", jurisdiction: "US", domain: "cybersecurity" },
|
|
854
|
+
"nist-ai-rmf-1.0": { name: "NIST AI Risk Management Framework 1.0", citation: "NIST AI 100-1 (Jan 2023)", jurisdiction: "US", domain: "ai" },
|
|
855
|
+
"iso-42001-2023": { name: "ISO/IEC 42001:2023 — AI Management System", citation: "ISO/IEC 42001:2023", jurisdiction: "international", domain: "ai" },
|
|
856
|
+
"iso-23894-2023": { name: "ISO/IEC 23894:2023 — AI Risk Management", citation: "ISO/IEC 23894:2023", jurisdiction: "international", domain: "ai" },
|
|
857
|
+
"owasp-llm-top-10-2025": { name: "OWASP Top 10 for LLM Applications 2025", citation: "OWASP LLM Top 10 v2025", jurisdiction: "international", domain: "ai" },
|
|
858
|
+
"owasp-asvs-v5.0": { name: "OWASP Application Security Verification Standard v5.0", citation: "OWASP ASVS v5.0", jurisdiction: "international", domain: "cybersecurity" },
|
|
859
|
+
"nist-800-218-ssdf": { name: "NIST SP 800-218 — Secure Software Development Framework", citation: "NIST SP 800-218 v1.1", jurisdiction: "US", domain: "supply-chain" },
|
|
860
|
+
"nist-800-82-r3": { name: "NIST SP 800-82 Rev 3 — OT Security Guide", citation: "NIST SP 800-82 Rev 3", jurisdiction: "US", domain: "operational-technology" },
|
|
861
|
+
"nist-800-63b-rev4": { name: "NIST SP 800-63B Rev 4 — Digital Identity Authentication", citation: "NIST SP 800-63B Rev 4", jurisdiction: "US", domain: "identity" },
|
|
862
|
+
"iec-62443-3-3": { name: "IEC 62443-3-3 — IACS System Security", citation: "IEC 62443-3-3:2013", jurisdiction: "international", domain: "operational-technology" },
|
|
863
|
+
"fedramp-rev5-moderate": { name: "FedRAMP Rev 5 Moderate Baseline", citation: "GSA FedRAMP Rev 5 (Moderate baseline)", jurisdiction: "US", domain: "cybersecurity" },
|
|
864
|
+
"hipaa-security-rule": { name: "HIPAA Security Rule — Technical Safeguards", citation: "45 CFR §164.312", jurisdiction: "US", domain: "health" },
|
|
865
|
+
"hitrust-csf-v11.4": { name: "HITRUST Common Security Framework v11.4", citation: "HITRUST CSF v11.4", jurisdiction: "US", domain: "health" },
|
|
866
|
+
"nerc-cip-007-6": { name: "NERC CIP-007-6 — BES Cyber System Security Management", citation: "NERC CIP-007-6", jurisdiction: "US", domain: "energy" },
|
|
867
|
+
"psd2-rts-sca": { name: "EU PSD2 RTS on Strong Customer Authentication", citation: "Commission Delegated Regulation 2018/389", jurisdiction: "EU", domain: "financial" },
|
|
868
|
+
"swift-cscf-v2026": { name: "SWIFT Customer Security Controls Framework v2026", citation: "SWIFT CSCF v2026", jurisdiction: "international", domain: "financial" },
|
|
869
|
+
"slsa-v1.0-build-l3": { name: "SLSA v1.0 Build Track Level 3", citation: "SLSA Specification v1.0", jurisdiction: "international", domain: "supply-chain" },
|
|
870
|
+
"vex-csaf-2.1": { name: "OASIS CSAF 2.1 — VEX", citation: "OASIS CSAF 2.1", jurisdiction: "international", domain: "supply-chain" },
|
|
871
|
+
"cyclonedx-v1.6": { name: "CycloneDX v1.6 SBOM", citation: "OWASP CycloneDX v1.6", jurisdiction: "international", domain: "supply-chain" },
|
|
872
|
+
"spdx-v3.0": { name: "SPDX v3.0 SBOM", citation: "Linux Foundation SPDX v3.0", jurisdiction: "international", domain: "supply-chain" },
|
|
873
|
+
"owasp-wstg-v5": { name: "OWASP Web Security Testing Guide v5", citation: "OWASP WSTG v5", jurisdiction: "international", domain: "cybersecurity" },
|
|
874
|
+
"ptes": { name: "Penetration Testing Execution Standard", citation: "PTES (community standard)", jurisdiction: "international", domain: "cybersecurity" },
|
|
875
|
+
"nist-800-115": { name: "NIST SP 800-115 — Technical Guide to Information Security Testing", citation: "NIST SP 800-115", jurisdiction: "US", domain: "cybersecurity" },
|
|
876
|
+
"cwe-top-25-2024": { name: "CWE Top 25 Most Dangerous Software Weaknesses (2024)", citation: "MITRE CWE Top 25 (2024)", jurisdiction: "international", domain: "cybersecurity" },
|
|
877
|
+
"cis-controls-v8": { name: "CIS Controls v8", citation: "Center for Internet Security CIS Controls v8", jurisdiction: "international", domain: "cybersecurity" },
|
|
878
|
+
"cmmc-2.0-level-2": { name: "CMMC 2.0 Level 2 — Advanced", citation: "32 CFR Part 170 + NIST SP 800-171 Rev 2", jurisdiction: "US", domain: "cybersecurity" },
|
|
879
|
+
"cmmc-2.0-level-1": { name: "CMMC 2.0 Level 1 — Foundational", citation: "32 CFR Part 170 + FAR 52.204-21", jurisdiction: "US", domain: "cybersecurity" },
|
|
880
|
+
"cmmc-2.0-level-3": { name: "CMMC 2.0 Level 3 — Expert", citation: "32 CFR Part 170 + NIST SP 800-172 enhanced", jurisdiction: "US", domain: "cybersecurity" },
|
|
881
|
+
});
|
|
882
|
+
|
|
883
|
+
/**
|
|
884
|
+
* @primitive b.compliance.describe
|
|
885
|
+
* @signature b.compliance.describe(posture)
|
|
886
|
+
* @since 0.7.27
|
|
887
|
+
* @status stable
|
|
888
|
+
* @related b.compliance.list, b.compliance.posturesByJurisdiction, b.compliance.posturesByDomain
|
|
889
|
+
*
|
|
890
|
+
* Resolve a posture name to its human-readable record:
|
|
891
|
+
* `{ name, citation, jurisdiction, domain }`. Returns `null` for
|
|
892
|
+
* unknown postures. Operators rendering "we run under {name}
|
|
893
|
+
* ({citation})" in admin UI / generated audit reports reach for this
|
|
894
|
+
* instead of hand-rolling a lookup; the values track the regulatory
|
|
895
|
+
* text and update with the framework rather than going stale in
|
|
896
|
+
* operator code.
|
|
897
|
+
*
|
|
898
|
+
* @example
|
|
899
|
+
* var meta = b.compliance.describe("hipaa");
|
|
900
|
+
* meta.name; // → "Health Insurance Portability and Accountability Act"
|
|
901
|
+
* meta.citation; // → "Pub. L. 104-191; 45 CFR Parts 160, 162, 164"
|
|
902
|
+
* meta.jurisdiction; // → "US"
|
|
903
|
+
* meta.domain; // → "health"
|
|
904
|
+
*
|
|
905
|
+
* b.compliance.describe("not-a-real-posture"); // → null
|
|
906
|
+
*/
|
|
907
|
+
function describe(posture) {
|
|
908
|
+
return REGIME_MAP[posture] || null;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
// POSTURE_DEFAULTS — per-posture configuration knobs that primitives
|
|
912
|
+
// (b.backup, b.retention, b.audit, b.cryptoField, b.db, etc.) consult
|
|
913
|
+
// when the operator hasn't passed an explicit value. Not user-facing
|
|
914
|
+
// config — primitives look up here at boot to enforce regulatory
|
|
915
|
+
// floors.
|
|
916
|
+
//
|
|
917
|
+
// Keys per posture:
|
|
918
|
+
// backupEncryptionRequired — backup.create refuses encrypt:false (F-BUDR-4)
|
|
919
|
+
// auditChainSignedRequired — audit emissions MUST be ML-DSA-87 chain-signed
|
|
920
|
+
// tlsMinVersion — minimum TLS version (string e.g. "TLSv1.3")
|
|
921
|
+
// sessionAbsoluteTimeoutMs — hard session expiry ceiling
|
|
922
|
+
// requireVacuumAfterErase — F-RTBF-2: cryptoField.eraseRow must call
|
|
923
|
+
// b.db.vacuumAfterErase({ mode: "full" })
|
|
924
|
+
// so freed B-tree index pages don't linger
|
|
925
|
+
// with sealed-column ciphertext readable
|
|
926
|
+
// from a forensic disk image. GDPR Art. 17
|
|
927
|
+
// + DPDP §12 + LGPD-BR Art. 18 + PIPL-CN
|
|
928
|
+
// Art. 47 all require effective erasure;
|
|
929
|
+
// leftover index residue defeats it.
|
|
930
|
+
//
|
|
931
|
+
// This table is the single source-of-truth — duplicating values into
|
|
932
|
+
// per-primitive defaults would drift the moment a regulator updates.
|
|
933
|
+
var POSTURE_DEFAULTS = Object.freeze({
|
|
934
|
+
"hipaa": Object.freeze({
|
|
935
|
+
backupEncryptionRequired: true,
|
|
936
|
+
auditChainSignedRequired: true,
|
|
937
|
+
tlsMinVersion: "TLSv1.3",
|
|
938
|
+
requireVacuumAfterErase: true,
|
|
939
|
+
}),
|
|
940
|
+
"pci-dss": Object.freeze({
|
|
941
|
+
backupEncryptionRequired: true,
|
|
942
|
+
auditChainSignedRequired: true,
|
|
943
|
+
tlsMinVersion: "TLSv1.3",
|
|
944
|
+
requireVacuumAfterErase: false,
|
|
945
|
+
}),
|
|
946
|
+
"gdpr": Object.freeze({
|
|
947
|
+
backupEncryptionRequired: false, // GDPR Art. 32 says "appropriate" — not mandatory floor // allow:protocol-constant — regulatory article number in prose
|
|
948
|
+
auditChainSignedRequired: true,
|
|
949
|
+
tlsMinVersion: "TLSv1.3",
|
|
950
|
+
// GDPR Art. 17 — "right to erasure" includes residual indexes; B-tree
|
|
951
|
+
// pages holding sealed-column ciphertext after a row-erase defeat
|
|
952
|
+
// the right unless followed by a full vacuum.
|
|
953
|
+
requireVacuumAfterErase: true,
|
|
954
|
+
}),
|
|
955
|
+
"soc2": Object.freeze({
|
|
956
|
+
backupEncryptionRequired: false,
|
|
957
|
+
auditChainSignedRequired: true,
|
|
958
|
+
tlsMinVersion: "TLSv1.3",
|
|
959
|
+
requireVacuumAfterErase: false,
|
|
960
|
+
}),
|
|
961
|
+
"dora": Object.freeze({
|
|
962
|
+
backupEncryptionRequired: true,
|
|
963
|
+
auditChainSignedRequired: true,
|
|
964
|
+
tlsMinVersion: "TLSv1.3",
|
|
965
|
+
requireVacuumAfterErase: false,
|
|
966
|
+
}),
|
|
967
|
+
// LGPD-BR Art. 18 — equivalent right to deletion + residue cleanup.
|
|
968
|
+
"lgpd-br": Object.freeze({
|
|
969
|
+
backupEncryptionRequired: false,
|
|
970
|
+
auditChainSignedRequired: true,
|
|
971
|
+
tlsMinVersion: "TLSv1.3",
|
|
972
|
+
requireVacuumAfterErase: true,
|
|
973
|
+
}),
|
|
974
|
+
// PIPL-CN Art. 47 — deletion right; cross-border residue concerns.
|
|
975
|
+
"pipl-cn": Object.freeze({
|
|
976
|
+
backupEncryptionRequired: true,
|
|
977
|
+
auditChainSignedRequired: true,
|
|
978
|
+
tlsMinVersion: "TLSv1.3",
|
|
979
|
+
requireVacuumAfterErase: true,
|
|
980
|
+
}),
|
|
981
|
+
// India DPDP Act 2023 §12 — right to erasure with effectiveness floor.
|
|
982
|
+
"dpdp": Object.freeze({
|
|
983
|
+
backupEncryptionRequired: false,
|
|
984
|
+
auditChainSignedRequired: true,
|
|
985
|
+
tlsMinVersion: "TLSv1.3",
|
|
986
|
+
requireVacuumAfterErase: true,
|
|
987
|
+
}),
|
|
988
|
+
// v0.8.70 — 2026 effective deadlines
|
|
989
|
+
"modpa": Object.freeze({
|
|
990
|
+
// Maryland Online Data Privacy Act (effective 2026-10-01) —
|
|
991
|
+
// unique among US state privacy laws for its strict data-
|
|
992
|
+
// minimization standard ("reasonably necessary"). The cascade
|
|
993
|
+
// floors mirror GDPR-tier audit + at-rest encryption.
|
|
994
|
+
backupEncryptionRequired: true,
|
|
995
|
+
auditChainSignedRequired: true,
|
|
996
|
+
tlsMinVersion: "TLSv1.3",
|
|
997
|
+
requireVacuumAfterErase: true,
|
|
998
|
+
}),
|
|
999
|
+
"nydfs-500": Object.freeze({
|
|
1000
|
+
// NYDFS 23 NYCRR 500 Amendment 2 — financial cyber. Adds
|
|
1001
|
+
// mandatory MFA, annual penetration test, asset inventory,
|
|
1002
|
+
// governance reporting. Floor: encrypted backups + signed
|
|
1003
|
+
// audit chain (already true), TLS 1.3 minimum.
|
|
1004
|
+
backupEncryptionRequired: true,
|
|
1005
|
+
auditChainSignedRequired: true,
|
|
1006
|
+
tlsMinVersion: "TLSv1.3",
|
|
1007
|
+
requireVacuumAfterErase: true,
|
|
1008
|
+
}),
|
|
1009
|
+
"hipaa-2026": Object.freeze({
|
|
1010
|
+
// HHS HIPAA Security Rule final 2026-Q4 — extends hipaa with
|
|
1011
|
+
// mandatory MFA, asset inventory, 72h restoration testing,
|
|
1012
|
+
// expanded encryption-at-rest scope.
|
|
1013
|
+
backupEncryptionRequired: true,
|
|
1014
|
+
auditChainSignedRequired: true,
|
|
1015
|
+
tlsMinVersion: "TLSv1.3",
|
|
1016
|
+
requireVacuumAfterErase: true,
|
|
1017
|
+
}),
|
|
1018
|
+
"quebec-25": Object.freeze({
|
|
1019
|
+
// Quebec Law 25 final phase (effective 2026-09-22) — DPIA
|
|
1020
|
+
// mandatory for high-risk processing + automated-decision
|
|
1021
|
+
// explanation right. Cascade floor: encrypted backups + signed
|
|
1022
|
+
// audit chain.
|
|
1023
|
+
backupEncryptionRequired: true,
|
|
1024
|
+
auditChainSignedRequired: true,
|
|
1025
|
+
tlsMinVersion: "TLSv1.3",
|
|
1026
|
+
requireVacuumAfterErase: true,
|
|
1027
|
+
}),
|
|
1028
|
+
// v0.8.81 — Florida Digital Bill of Rights SB 262 (effective
|
|
1029
|
+
// 2024-07-01). Narrow scope ($1B+ revenue threshold); privacy-tier
|
|
1030
|
+
// floor matching peer state consumer-privacy postures.
|
|
1031
|
+
"fl-fdbr": Object.freeze({
|
|
1032
|
+
backupEncryptionRequired: false,
|
|
1033
|
+
auditChainSignedRequired: true,
|
|
1034
|
+
tlsMinVersion: "TLSv1.3",
|
|
1035
|
+
requireVacuumAfterErase: true,
|
|
1036
|
+
}),
|
|
1037
|
+
// v0.8.81 — HITECH Act extends HIPAA; treat as HIPAA-tier floor
|
|
1038
|
+
// (encrypted backups, signed audit chain, vacuum-after-erase).
|
|
1039
|
+
"hitech": Object.freeze({
|
|
1040
|
+
backupEncryptionRequired: true,
|
|
1041
|
+
auditChainSignedRequired: true,
|
|
1042
|
+
tlsMinVersion: "TLSv1.3",
|
|
1043
|
+
requireVacuumAfterErase: true,
|
|
1044
|
+
}),
|
|
1045
|
+
// v0.8.81 — FERPA covers student educational records; treat as
|
|
1046
|
+
// privacy-tier with full erasure-residue cleanup (record-purge
|
|
1047
|
+
// workflows for transferred students).
|
|
1048
|
+
"ferpa": Object.freeze({
|
|
1049
|
+
backupEncryptionRequired: false,
|
|
1050
|
+
auditChainSignedRequired: true,
|
|
1051
|
+
tlsMinVersion: "TLSv1.3",
|
|
1052
|
+
requireVacuumAfterErase: true,
|
|
1053
|
+
}),
|
|
1054
|
+
// v0.8.81 — AI-governance postures share an audit-chain-signed
|
|
1055
|
+
// floor so AI-decision audit trails survive forensic challenge
|
|
1056
|
+
// (NYC LL144 annual bias audit, IL HB 3773 employment notice
|
|
1057
|
+
// chain, Colorado AI Act impact-assessment records, Utah UAIPA
|
|
1058
|
+
// disclosure ledger). TLS-1.3 minimum + signed chain only; no
|
|
1059
|
+
// vacuum-after-erase mandate at this tier.
|
|
1060
|
+
"co-ai": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1061
|
+
"il-hb3773": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1062
|
+
"tx-traiga": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1063
|
+
"ut-aipa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1064
|
+
"nyc-ll144": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1065
|
+
"ca-tfaia": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }), // Frontier-AI critical-incident records: encrypted at rest, residue-clean on erasure
|
|
1066
|
+
"kr-ai-basic": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1067
|
+
"cn-ai-label": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1068
|
+
// v0.8.81 — ISO/IEC 42001 + 23894 — voluntary AI management
|
|
1069
|
+
// certifications. Cascade matches the strictest peer (audit-chain
|
|
1070
|
+
// signed + TLS 1.3); operators chasing ISO certification under a
|
|
1071
|
+
// base regulated posture get strict cumulative floors via
|
|
1072
|
+
// postureDefault() reads.
|
|
1073
|
+
"iso-42001": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1074
|
+
"iso-23894": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1075
|
+
// v0.8.81 — California SB-942 + AB-853 are content-credentials
|
|
1076
|
+
// posture flags, not data-floor regulations. Cascade leaves
|
|
1077
|
+
// operator-controlled defaults in place (no backup encryption
|
|
1078
|
+
// mandate, no residue-vacuum mandate); the meaningful effect rides
|
|
1079
|
+
// through b.contentCredentials manifest emission, not the data
|
|
1080
|
+
// tier. TLS 1.3 retained as the framework-wide floor.
|
|
1081
|
+
"ca-sb942": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1082
|
+
"ca-ab853": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1083
|
+
// v0.8.81 — EAA + WCAG 2.2 are accessibility postures; no data-
|
|
1084
|
+
// floor cascade. The meaningful effect rides through
|
|
1085
|
+
// b.guardHtml.wcag + b.compliance-eaa primitives.
|
|
1086
|
+
"eaa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1087
|
+
"wcag-2-2": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1088
|
+
// v0.8.81 — EU Data Act covers B2G + IoT-data sharing; cascade
|
|
1089
|
+
// floor matches GDPR-tier audit signing + TLS 1.3.
|
|
1090
|
+
"eu-data-act": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1091
|
+
// v0.8.82 — COPPA + 2025 Amendment: child-data deletion + age-verification
|
|
1092
|
+
// floor (operator-facing rule: when a covered child is identified, knowing-
|
|
1093
|
+
// collection beyond age 13 requires verifiable parental consent; on
|
|
1094
|
+
// withdrawal, full residue cleanup applies). Cascade: signed audit chain
|
|
1095
|
+
// + vacuum-after-erase + TLS 1.3.
|
|
1096
|
+
"coppa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1097
|
+
"coppa-2025": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1098
|
+
// v0.8.82 — GLBA Safeguards 2024 Amendment: financial-tier cascade
|
|
1099
|
+
// matching pci-dss + nydfs-500 floor (encrypted backups + signed audit +
|
|
1100
|
+
// TLS 1.3). No vacuum-after-erase mandate at this tier.
|
|
1101
|
+
"glba-safeguards": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1102
|
+
// v0.8.82 — UK DUAA 2025: privacy-tier with GDPR-equivalent floor
|
|
1103
|
+
// (signed audit + TLS 1.3 + vacuum-after-erase per UK GDPR Art. 17).
|
|
1104
|
+
"uk-duaa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1105
|
+
// v0.8.82 — Chile Ley 21.719: GDPR-equivalent privacy floor with
|
|
1106
|
+
// strict effective-erasure obligation under the right-to-erasure
|
|
1107
|
+
// article (Art. 8). Cascade mirrors gdpr.
|
|
1108
|
+
"cl-pdpa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1109
|
+
// v0.8.82 — Korea PIPA: privacy-tier with full erasure-residue cleanup
|
|
1110
|
+
// under the right-to-erasure article. Cascade matches gdpr/lgpd-br tier.
|
|
1111
|
+
"pipa-kr": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1112
|
+
// v0.8.82 — Australia Privacy Act 2024 Amendment: privacy-tier with
|
|
1113
|
+
// statutory-tort exposure. Encrypted backups + signed audit + vacuum-
|
|
1114
|
+
// after-erase per statutory right-to-erasure.
|
|
1115
|
+
"au-privacy": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1116
|
+
// v0.8.82 — Other LATAM + APAC postures share the GDPR-equivalent
|
|
1117
|
+
// privacy floor.
|
|
1118
|
+
"mx-lfpdppp": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1119
|
+
"ar-pdpa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1120
|
+
"th-pdpa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1121
|
+
"vn-pdp": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1122
|
+
"id-pdp": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1123
|
+
"my-pdpa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1124
|
+
// v0.8.82 — US state child-privacy + cross-cutting US statutes.
|
|
1125
|
+
"ny-safe-kids": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1126
|
+
"ny-saffe": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1127
|
+
"md-kids-code": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1128
|
+
"vt-aadc": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1129
|
+
"gina": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1130
|
+
"vppa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1131
|
+
"can-spam": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1132
|
+
"il-gipa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1133
|
+
"hhs-repro-24": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1134
|
+
// v0.8.82 — NIST Privacy Framework 1.1 cross-walk posture; cascade
|
|
1135
|
+
// matches gdpr-tier audit signing.
|
|
1136
|
+
"nist-pf-1.1": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1137
|
+
// v0.8.82 — EU platform/data/cyber adjacent: audit-chain signed,
|
|
1138
|
+
// TLS 1.3, no special data-tier mandate at this layer.
|
|
1139
|
+
"dsa": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1140
|
+
"dga": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1141
|
+
"eu-cer": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1142
|
+
"eu-cyber-sol": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1143
|
+
"eidas-2": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1144
|
+
// v0.8.86 — sectoral + cybersecurity directives. DoD CMMC + FBI
|
|
1145
|
+
// CJIS + healthcare regimes share an encrypted-at-rest + signed-
|
|
1146
|
+
// audit-chain floor; ISO 27001/27002 + ISO 27017/27018/27701 are
|
|
1147
|
+
// operator-adopted governance standards with the same baseline.
|
|
1148
|
+
"cmmc-2.0": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1149
|
+
"cjis-v6": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1150
|
+
"iso-27001-2022": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1151
|
+
"iso-27002-2022": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1152
|
+
"iso-27017": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1153
|
+
"iso-27018": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1154
|
+
"iso-27701": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1155
|
+
"nist-800-66-r2": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1156
|
+
"ehds": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1157
|
+
"circia": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1158
|
+
// ---- v0.9.6 — exceptd framework-control-gap closure cascade ----
|
|
1159
|
+
"nist-800-53": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1160
|
+
// SUPPLY-18 — NIST AI-RMF MANAGE.4.3 / ISO 23894 §6.5 / ISO 42001
|
|
1161
|
+
// §A.6 require encrypted backups for AI system state (model
|
|
1162
|
+
// weights, training data, prompt logs all contain regulated
|
|
1163
|
+
// payload). All AI-domain postures now enforce backupEncryption.
|
|
1164
|
+
"nist-ai-rmf-1.0": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1165
|
+
"iso-42001-2023": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1166
|
+
"iso-23894-2023": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1167
|
+
"owasp-llm-top-10-2025": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1168
|
+
// SUPPLY-19 — OWASP ASVS v5.0 §8.3.4 (sensitive-data deletion)
|
|
1169
|
+
// requires post-delete storage reclamation. Set requireVacuumAfterErase
|
|
1170
|
+
// so operators pinning ASVS v5.0 inherit the proper floor.
|
|
1171
|
+
"owasp-asvs-v5.0": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1172
|
+
"nist-800-218-ssdf": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1173
|
+
"nist-800-82-r3": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1174
|
+
"nist-800-63b-rev4": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1175
|
+
"iec-62443-3-3": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1176
|
+
// SUPPLY-21 — FedRAMP Rev 5 Moderate baseline references FIPS 140-3
|
|
1177
|
+
// validated cryptography for protect-against-disclosure controls
|
|
1178
|
+
// (SC-13, SC-28). The framework's PQC-first defaults (ML-KEM-1024,
|
|
1179
|
+
// XChaCha20-Poly1305, SHA3-512) are NOT FIPS-140-3 validated as of
|
|
1180
|
+
// the FedRAMP Rev 5 baseline publication — FIPS modules are still
|
|
1181
|
+
// being certified for the ML-KEM / ML-DSA primitives upstream.
|
|
1182
|
+
//
|
|
1183
|
+
// Conflict resolution: PQC-first remains the framework default
|
|
1184
|
+
// — the framework refuses to weaken security middleware to fit a
|
|
1185
|
+
// posture flag. Operators in a FedRAMP boundary opt into
|
|
1186
|
+
// `fipsMode: true` to
|
|
1187
|
+
// switch `b.audit.sign` from SLH-DSA-SHAKE-256f to FIPS-validated
|
|
1188
|
+
// AES-GCM + SHA-384 for the audit-chain signing path. The runtime
|
|
1189
|
+
// emits a `compliance.posture.fips_conflict` audit warning when
|
|
1190
|
+
// posture=fedramp-rev5-moderate AND fipsMode is NOT set so the
|
|
1191
|
+
// conflict is grep-able in the audit chain.
|
|
1192
|
+
//
|
|
1193
|
+
// Operators pinning this posture without setting fipsMode are
|
|
1194
|
+
// signaling "ship the PQC-first defaults and accept that the
|
|
1195
|
+
// FedRAMP boundary will need to document the deviation in their
|
|
1196
|
+
// SSP." The audit warning is the operator-visible signal.
|
|
1197
|
+
"fedramp-rev5-moderate": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true, fipsMode: false }),
|
|
1198
|
+
"hipaa-security-rule": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1199
|
+
"hitrust-csf-v11.4": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1200
|
+
"nerc-cip-007-6": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1201
|
+
"psd2-rts-sca": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1202
|
+
"swift-cscf-v2026": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1203
|
+
"slsa-v1.0-build-l3": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1204
|
+
"vex-csaf-2.1": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1205
|
+
"cyclonedx-v1.6": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1206
|
+
"spdx-v3.0": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1207
|
+
"owasp-wstg-v5": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1208
|
+
"ptes": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1209
|
+
"nist-800-115": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1210
|
+
"cwe-top-25-2024": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1211
|
+
"cis-controls-v8": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1212
|
+
// SUPPLY-20 — CMMC 2.0 levels differ in control mapping:
|
|
1213
|
+
// L1 (Foundational, 15 FAR controls, FCI data only) — encrypted
|
|
1214
|
+
// backups NOT mandated; audit-chain encouraged.
|
|
1215
|
+
// L2 (Advanced, 110 NIST 800-171 Rev 2 controls, CUI data) —
|
|
1216
|
+
// encrypted backups + signed audit + post-erase vacuum.
|
|
1217
|
+
// L3 (Expert, NIST 800-172 enhanced atop L2) — same control floor
|
|
1218
|
+
// as L2 plus operator-attested enhanced practices the
|
|
1219
|
+
// framework can't auto-cascade (FIPS 140-3 boundary,
|
|
1220
|
+
// continuous monitoring).
|
|
1221
|
+
"cmmc-2.0-level-1": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1222
|
+
"cmmc-2.0-level-2": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1223
|
+
"cmmc-2.0-level-3": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true, fipsMode: false }),
|
|
1224
|
+
// ---- v0.10.16 — sectoral catch-up ----
|
|
1225
|
+
// 42 CFR Part 2 — Substance Use Disorder records confidentiality
|
|
1226
|
+
// (HHS final rule 2024-04-16 aligns Part 2 with HIPAA but retains
|
|
1227
|
+
// a stricter consent floor; encrypted backups + signed audit chain
|
|
1228
|
+
// + post-erase vacuum because the rule narrows the consent window
|
|
1229
|
+
// and operators must demonstrate effective erasure on revocation).
|
|
1230
|
+
"42-cfr-part-2": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1231
|
+
// ONC HTI-1 final rule (45 CFR Part 170 / 89 FR 1192, effective
|
|
1232
|
+
// 2024-12-31) — health IT certification. Brings algorithmic
|
|
1233
|
+
// transparency / DSI (Decision Support Interventions) requirements.
|
|
1234
|
+
// Cascade: encrypted backups + signed audit + vacuum (PHI-tier).
|
|
1235
|
+
"hti-1": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1236
|
+
// USCDI v4 (ONC October 2023) — US Core Data for Interoperability
|
|
1237
|
+
// standard data classes for EHR exchange. PHI-tier cascade.
|
|
1238
|
+
"uscdi-v4": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1239
|
+
// IRS Publication 1075 — Federal Tax Information (FTI) safeguards.
|
|
1240
|
+
// FTI-tier: encrypted at rest, signed audit, vacuum after erasure
|
|
1241
|
+
// (Pub 1075 §4.3 requires sanitization on disposal).
|
|
1242
|
+
"irs-1075": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1243
|
+
// NIST 800-172 Rev 3 — Enhanced Security Requirements for Protecting
|
|
1244
|
+
// CUI. Layered atop 800-171 / CMMC-L2. FIPS-validated crypto
|
|
1245
|
+
// floor — same operator-opt-in flag pattern as fedramp-rev5-moderate.
|
|
1246
|
+
"nist-800-172-r3": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true, fipsMode: false }),
|
|
1247
|
+
// FIRST Traffic Light Protocol 2.0 (August 2022) — controls sharing
|
|
1248
|
+
// of cyber threat information. Cascade: signed audit chain (the
|
|
1249
|
+
// protocol's normative effect is on the audit + sharing surface,
|
|
1250
|
+
// not data-at-rest).
|
|
1251
|
+
"tlp-2.0": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1252
|
+
// Security of Critical Infrastructure Act 2018 (Australia, SOCI Act)
|
|
1253
|
+
// + 2021/2022 amendments — critical-infrastructure cyber + ENS
|
|
1254
|
+
// (Enhanced Cyber Security Obligations). Cascade: encrypted backups
|
|
1255
|
+
// + signed audit (ENS §30CT data-integrity obligation).
|
|
1256
|
+
"soci-au": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1257
|
+
// EU NIS 2 Directive (Directive (EU) 2022/2555) — transposition
|
|
1258
|
+
// deadline 2024-10-17. Cybersecurity for essential + important
|
|
1259
|
+
// entities. Encrypted backups + signed audit chain (Art. 21(2)(d)
|
|
1260
|
+
// requires backup management + crisis recovery).
|
|
1261
|
+
"nis2": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1262
|
+
// EU Cyber Resilience Act (Reg. (EU) 2024/2847) — product
|
|
1263
|
+
// cybersecurity; full applicability 2027-12-11 with reporting
|
|
1264
|
+
// obligations starting 2026-09-11. SUPPLY-tier cascade.
|
|
1265
|
+
"cra": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1266
|
+
// FFIEC Cybersecurity Assessment Tool 2.0 — financial-tier; aligns
|
|
1267
|
+
// with NIST CSF 2.0 + CRI Profile. Cascade matches glba-safeguards.
|
|
1268
|
+
"ffiec-cat-2": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1269
|
+
// CRI Profile v2.0 (Cyber Risk Institute, May 2024) — financial-tier
|
|
1270
|
+
// cyber risk + NIST CSF 2.0 cross-walk.
|
|
1271
|
+
"cri-profile-v2.0": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1272
|
+
// OMB M-22-09 — Moving to Zero Trust (US federal). Cascade: signed
|
|
1273
|
+
// audit + TLS 1.3 (the memorandum's normative effect rides through
|
|
1274
|
+
// the identity + segmentation surfaces).
|
|
1275
|
+
"m-22-09": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1276
|
+
// OMB M-22-18 — Enhancing the Security of the Software Supply Chain
|
|
1277
|
+
// (the SSDF / attestation requirement). SUPPLY-tier — audit-chain
|
|
1278
|
+
// signed for the attestation records.
|
|
1279
|
+
"m-22-18": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1280
|
+
// NIST 800-53 Rev 5 Privacy baseline — additive privacy controls
|
|
1281
|
+
// overlay. Cascade: vacuum-after-erase per PT-2(2) and SI-12.
|
|
1282
|
+
"nist-800-53-r5-privacy": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1283
|
+
// NIST AI-RMF Generative AI Profile (NIST AI 600-1, July 2024) —
|
|
1284
|
+
// generative AI risk management overlay. AI-tier cascade.
|
|
1285
|
+
"nist-ai-600-1-genai": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1286
|
+
// NIST CSF 2.0 (February 2024) — Cybersecurity Framework with the
|
|
1287
|
+
// GOVERN function added.
|
|
1288
|
+
"nist-csf-2.0": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1289
|
+
// SB 53 / California Frontier AI Disclosure (effective 2026 fiscal)
|
|
1290
|
+
// — frontier-model critical incident disclosure ledger.
|
|
1291
|
+
"sb-53": Object.freeze({ backupEncryptionRequired: true, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: true }),
|
|
1292
|
+
// NYC Local Law 144 (2023) — Automated Employment Decision Tools
|
|
1293
|
+
// (bias-audit + candidate notice) — bias-audit posture (already
|
|
1294
|
+
// present as "nyc-ll144"); 2024 amendment adds annual re-audit
|
|
1295
|
+
// signing.
|
|
1296
|
+
"nyc-ll144-2024": Object.freeze({ backupEncryptionRequired: false, auditChainSignedRequired: true, tlsMinVersion: "TLSv1.3", requireVacuumAfterErase: false }),
|
|
1297
|
+
});
|
|
1298
|
+
|
|
1299
|
+
/**
|
|
1300
|
+
* @primitive b.compliance.postureDefault
|
|
1301
|
+
* @signature b.compliance.postureDefault(posture, key)
|
|
1302
|
+
* @since 0.7.27
|
|
1303
|
+
* @status stable
|
|
1304
|
+
* @related b.compliance.set, b.compliance.list
|
|
1305
|
+
*
|
|
1306
|
+
* Look up a single posture-conditioned default without pinning the
|
|
1307
|
+
* posture globally. Returns `null` for unknown postures, unknown
|
|
1308
|
+
* keys, or empty/non-string inputs. Used by primitives that need to
|
|
1309
|
+
* read a regime's floor per-tenant in a multi-tenant deployment
|
|
1310
|
+
* where `set()` would over-pin the process.
|
|
1311
|
+
*
|
|
1312
|
+
* Recognised keys per posture include `backupEncryptionRequired`,
|
|
1313
|
+
* `auditChainSignedRequired`, `tlsMinVersion`, and
|
|
1314
|
+
* `requireVacuumAfterErase` — the floors enforced by `b.backup`,
|
|
1315
|
+
* `b.audit`, the TLS minimum-version gate, and `b.cryptoField`'s
|
|
1316
|
+
* residual-erasure pass.
|
|
1317
|
+
*
|
|
1318
|
+
* @example
|
|
1319
|
+
* b.compliance.postureDefault("hipaa", "tlsMinVersion");
|
|
1320
|
+
* // → "TLSv1.3"
|
|
1321
|
+
*
|
|
1322
|
+
* b.compliance.postureDefault("hipaa", "backupEncryptionRequired");
|
|
1323
|
+
* // → true
|
|
1324
|
+
*
|
|
1325
|
+
* b.compliance.postureDefault("soc2", "requireVacuumAfterErase");
|
|
1326
|
+
* // → false
|
|
1327
|
+
*
|
|
1328
|
+
* b.compliance.postureDefault("hipaa", "no-such-key");
|
|
1329
|
+
* // → null
|
|
1330
|
+
*
|
|
1331
|
+
* b.compliance.postureDefault("not-a-real-posture", "tlsMinVersion");
|
|
1332
|
+
* // → null
|
|
1333
|
+
*/
|
|
1334
|
+
function postureDefault(posture, key) {
|
|
1335
|
+
if (typeof posture !== "string" || posture.length === 0) return null;
|
|
1336
|
+
var d = POSTURE_DEFAULTS[posture];
|
|
1337
|
+
if (!d) return null;
|
|
1338
|
+
return Object.prototype.hasOwnProperty.call(d, key) ? d[key] : null;
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
// posturesByDomain — list every posture that maps to the named
|
|
1342
|
+
// domain (privacy / health / payment / cybersecurity / etc.).
|
|
1343
|
+
// Operators rendering compliance dashboards grouped by domain pull
|
|
1344
|
+
// the per-domain posture list with this; admin UIs that show "we
|
|
1345
|
+
// satisfy the privacy regimes for {users.country}" use it to pick
|
|
1346
|
+
// the right posture name without hand-rolling the lookup.
|
|
1347
|
+
/**
|
|
1348
|
+
* @primitive b.compliance.posturesByDomain
|
|
1349
|
+
* @signature b.compliance.posturesByDomain(domain)
|
|
1350
|
+
* @since 0.7.27
|
|
1351
|
+
* @status stable
|
|
1352
|
+
* @related b.compliance.posturesByJurisdiction, b.compliance.list, b.compliance.describe
|
|
1353
|
+
*
|
|
1354
|
+
* Return every posture name whose `REGIME_MAP[p].domain` equals
|
|
1355
|
+
* `domain`, in canonical `KNOWN_POSTURES` order. Returns `[]` for
|
|
1356
|
+
* empty/non-string inputs and for domains with no matches.
|
|
1357
|
+
* Operators rendering compliance dashboards grouped by domain
|
|
1358
|
+
* (privacy / health / payment / cybersecurity / etc.) iterate the
|
|
1359
|
+
* domain list once and read posture sets from here.
|
|
1360
|
+
*
|
|
1361
|
+
* @example
|
|
1362
|
+
* b.compliance.posturesByDomain("privacy");
|
|
1363
|
+
* // → ["ccpa", "gdpr", "lgpd-br", "pipl-cn", "appi-jp",
|
|
1364
|
+
* // "pdpa-sg", "pipeda-ca", "uk-gdpr"]
|
|
1365
|
+
*
|
|
1366
|
+
* b.compliance.posturesByDomain("health");
|
|
1367
|
+
* // → ["hipaa", "wmhmda"]
|
|
1368
|
+
*
|
|
1369
|
+
* b.compliance.posturesByDomain("payment");
|
|
1370
|
+
* // → ["pci-dss"]
|
|
1371
|
+
*
|
|
1372
|
+
* b.compliance.posturesByDomain("not-a-domain");
|
|
1373
|
+
* // → []
|
|
1374
|
+
*/
|
|
1375
|
+
function posturesByDomain(domain) {
|
|
1376
|
+
if (typeof domain !== "string" || domain.length === 0) return [];
|
|
1377
|
+
var out = [];
|
|
1378
|
+
var keys = Object.keys(REGIME_MAP);
|
|
1379
|
+
for (var i = 0; i < keys.length; i++) {
|
|
1380
|
+
if (REGIME_MAP[keys[i]].domain === domain) out.push(keys[i]);
|
|
1381
|
+
}
|
|
1382
|
+
return out;
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
// posturesByJurisdiction — same shape, keyed off the ISO 3166 alpha-2
|
|
1386
|
+
// code or `EU` / `international`. Operators handling a multi-region
|
|
1387
|
+
// deployment (e.g. one that serves users in EU + CA + JP) iterate
|
|
1388
|
+
// over jurisdiction codes and resolve to per-jurisdiction posture
|
|
1389
|
+
// configs without hand-rolling the lookup table.
|
|
1390
|
+
/**
|
|
1391
|
+
* @primitive b.compliance.posturesByJurisdiction
|
|
1392
|
+
* @signature b.compliance.posturesByJurisdiction(jurisdiction)
|
|
1393
|
+
* @since 0.7.27
|
|
1394
|
+
* @status stable
|
|
1395
|
+
* @related b.compliance.posturesByDomain, b.compliance.list, b.compliance.describe
|
|
1396
|
+
*
|
|
1397
|
+
* Return every posture whose `REGIME_MAP[p].jurisdiction` equals
|
|
1398
|
+
* `jurisdiction`, in canonical `KNOWN_POSTURES` order. Jurisdiction
|
|
1399
|
+
* values are ISO 3166 alpha-2 codes (`US`, `BR`, `CA`, `JP`, `CN`,
|
|
1400
|
+
* `SG`, `UK`) plus `EU` and `international`, and `US-`-prefixed
|
|
1401
|
+
* state codes (`US-CA`, `US-IL`, `US-WA`). Returns `[]` for
|
|
1402
|
+
* empty/non-string inputs and unknown jurisdictions.
|
|
1403
|
+
*
|
|
1404
|
+
* @example
|
|
1405
|
+
* b.compliance.posturesByJurisdiction("EU");
|
|
1406
|
+
* // → ["gdpr", "dora", "nis2", "cra", "ai-act"]
|
|
1407
|
+
*
|
|
1408
|
+
* b.compliance.posturesByJurisdiction("US");
|
|
1409
|
+
* // → ["hipaa", "soc2", "sox"]
|
|
1410
|
+
*
|
|
1411
|
+
* b.compliance.posturesByJurisdiction("US-CA");
|
|
1412
|
+
* // → ["ccpa"]
|
|
1413
|
+
*
|
|
1414
|
+
* b.compliance.posturesByJurisdiction("XX");
|
|
1415
|
+
* // → []
|
|
1416
|
+
*/
|
|
1417
|
+
function posturesByJurisdiction(jurisdiction) {
|
|
1418
|
+
if (typeof jurisdiction !== "string" || jurisdiction.length === 0) return [];
|
|
1419
|
+
var out = [];
|
|
1420
|
+
var keys = Object.keys(REGIME_MAP);
|
|
1421
|
+
for (var i = 0; i < keys.length; i++) {
|
|
1422
|
+
if (REGIME_MAP[keys[i]].jurisdiction === jurisdiction) out.push(keys[i]);
|
|
1423
|
+
}
|
|
1424
|
+
return out;
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
// list — returns every posture as a { name, ...regime-map-fields }
|
|
1428
|
+
// object array, in canonical KNOWN_POSTURES order. Useful for admin
|
|
1429
|
+
// UIs that render the full set as a dropdown / table.
|
|
1430
|
+
/**
|
|
1431
|
+
* @primitive b.compliance.list
|
|
1432
|
+
* @signature b.compliance.list()
|
|
1433
|
+
* @since 0.7.27
|
|
1434
|
+
* @status stable
|
|
1435
|
+
* @related b.compliance.describe, b.compliance.posturesByDomain, b.compliance.posturesByJurisdiction
|
|
1436
|
+
*
|
|
1437
|
+
* Return every documented posture as a
|
|
1438
|
+
* `{ posture, name, citation, jurisdiction, domain }` record array,
|
|
1439
|
+
* in canonical `KNOWN_POSTURES` order. Postures present in
|
|
1440
|
+
* `KNOWN_POSTURES` but missing from `REGIME_MAP` (sectoral identifiers
|
|
1441
|
+
* such as `fapi-2.0` or `ny-2-d`) are skipped — `list()` is the
|
|
1442
|
+
* "regimes with full metadata" view; full naming awaits the regime
|
|
1443
|
+
* map gaining those rows. Useful for admin UIs that render the full
|
|
1444
|
+
* set as a dropdown / table without hand-rolling iteration over
|
|
1445
|
+
* `REGIME_MAP`.
|
|
1446
|
+
*
|
|
1447
|
+
* @example
|
|
1448
|
+
* var rows = b.compliance.list();
|
|
1449
|
+
* rows[0].posture; // → "hipaa"
|
|
1450
|
+
* rows[0].jurisdiction; // → "US"
|
|
1451
|
+
* rows[0].domain; // → "health"
|
|
1452
|
+
*
|
|
1453
|
+
* // Render as a dropdown:
|
|
1454
|
+
* var options = rows.map(function (r) {
|
|
1455
|
+
* return { value: r.posture, label: r.name + " (" + r.jurisdiction + ")" };
|
|
1456
|
+
* });
|
|
1457
|
+
*/
|
|
1458
|
+
function list() {
|
|
1459
|
+
var out = [];
|
|
1460
|
+
for (var i = 0; i < KNOWN_POSTURES.length; i++) {
|
|
1461
|
+
var p = KNOWN_POSTURES[i];
|
|
1462
|
+
var meta = REGIME_MAP[p];
|
|
1463
|
+
if (!meta) continue;
|
|
1464
|
+
out.push({
|
|
1465
|
+
posture: p,
|
|
1466
|
+
name: meta.name,
|
|
1467
|
+
citation: meta.citation,
|
|
1468
|
+
jurisdiction: meta.jurisdiction,
|
|
1469
|
+
domain: meta.domain,
|
|
1470
|
+
});
|
|
1471
|
+
}
|
|
1472
|
+
return out;
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
/**
|
|
1476
|
+
* @primitive b.compliance.artifactStandards
|
|
1477
|
+
* @signature b.compliance.artifactStandards()
|
|
1478
|
+
* @since 0.9.57
|
|
1479
|
+
* @status stable
|
|
1480
|
+
*
|
|
1481
|
+
* Return the set of SBOM / VEX artifact standards the framework can
|
|
1482
|
+
* emit. These are FORMAT FAMILIES, not regulatory regimes — pinning
|
|
1483
|
+
* one of these names as the deployment's compliance posture conflates
|
|
1484
|
+
* "format I emit" with "regulatory floor I meet" (SUPPLY-34). Pin
|
|
1485
|
+
* the regulatory regime (FedRAMP / SSDF / HIPAA / etc.) via
|
|
1486
|
+
* `b.compliance.set()` and surface the emitted artifact standards via
|
|
1487
|
+
* this read-only catalog.
|
|
1488
|
+
*
|
|
1489
|
+
* @example
|
|
1490
|
+
* b.compliance.artifactStandards();
|
|
1491
|
+
* // → ["cyclonedx-v1.6", "spdx-v3.0", "vex-csaf-2.1"]
|
|
1492
|
+
*/
|
|
1493
|
+
function artifactStandards() {
|
|
1494
|
+
return ARTIFACT_STANDARDS.slice();
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
/**
|
|
1498
|
+
* @primitive b.compliance.fipsMode
|
|
1499
|
+
* @signature b.compliance.fipsMode(enable?)
|
|
1500
|
+
* @since 0.9.57
|
|
1501
|
+
* @status stable
|
|
1502
|
+
* @related b.compliance.set
|
|
1503
|
+
*
|
|
1504
|
+
* Get or set the FIPS-mode flag. When `enable === true`, the
|
|
1505
|
+
* framework's audit-chain signing path (b.audit.sign) switches from
|
|
1506
|
+
* the PQC-first default (SLH-DSA-SHAKE-256f) to a FIPS-140-3
|
|
1507
|
+
* validated AES-GCM + SHA-384 path so a FedRAMP / CMMC L3 boundary
|
|
1508
|
+
* can pin the audit signer to a validated module.
|
|
1509
|
+
*
|
|
1510
|
+
* Call BEFORE b.compliance.set() so the fips_conflict audit warning
|
|
1511
|
+
* doesn't fire at posture-set time. Cannot be toggled after posture
|
|
1512
|
+
* is pinned — runtime switches create half-set crypto state. Returns
|
|
1513
|
+
* the current flag value when called with no argument.
|
|
1514
|
+
*
|
|
1515
|
+
* @example
|
|
1516
|
+
* b.compliance.fipsMode(true); // opt into FIPS-validated path
|
|
1517
|
+
* b.compliance.set("fedramp-rev5-moderate");
|
|
1518
|
+
* b.compliance.fipsMode(); // → true
|
|
1519
|
+
*/
|
|
1520
|
+
function fipsMode(enable) {
|
|
1521
|
+
if (enable === undefined) return STATE.fipsMode === true;
|
|
1522
|
+
if (typeof enable !== "boolean") {
|
|
1523
|
+
throw new ComplianceError("compliance/bad-fips-mode",
|
|
1524
|
+
"compliance.fipsMode: argument must be boolean when supplied (got " +
|
|
1525
|
+
typeof enable + ")");
|
|
1526
|
+
}
|
|
1527
|
+
if (STATE.posture) {
|
|
1528
|
+
throw new ComplianceError("compliance/fips-after-set",
|
|
1529
|
+
"compliance.fipsMode: posture is already pinned ('" + STATE.posture +
|
|
1530
|
+
"'); FIPS-mode must be set BEFORE b.compliance.set() — runtime " +
|
|
1531
|
+
"switches create half-set crypto state.");
|
|
1532
|
+
}
|
|
1533
|
+
STATE.fipsMode = enable;
|
|
1534
|
+
_emitAudit("compliance.fips_mode.set", { fipsMode: enable });
|
|
1535
|
+
return STATE.fipsMode;
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
module.exports = {
|
|
1539
|
+
set: set,
|
|
1540
|
+
current: current,
|
|
1541
|
+
assert: assert,
|
|
1542
|
+
clear: clear,
|
|
1543
|
+
describe: describe,
|
|
1544
|
+
posturesByDomain: posturesByDomain,
|
|
1545
|
+
posturesByJurisdiction: posturesByJurisdiction,
|
|
1546
|
+
list: list,
|
|
1547
|
+
postureDefault: postureDefault,
|
|
1548
|
+
sanctions: sanctions,
|
|
1549
|
+
aiAct: aiAct,
|
|
1550
|
+
artifactStandards: artifactStandards,
|
|
1551
|
+
fipsMode: fipsMode,
|
|
1552
|
+
KNOWN_POSTURES: KNOWN_POSTURES,
|
|
1553
|
+
POSTURE_DEFAULTS: POSTURE_DEFAULTS,
|
|
1554
|
+
ARTIFACT_STANDARDS: ARTIFACT_STANDARDS,
|
|
1555
|
+
REGIME_MAP: REGIME_MAP,
|
|
1556
|
+
ComplianceError: ComplianceError,
|
|
1557
|
+
_resetForTest: _resetForTest,
|
|
1558
|
+
};
|