@blamejs/blamejs-shop 0.5.12 → 0.5.14
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 +4 -0
- package/lib/asset-manifest.json +1 -1
- package/lib/sales-tax-filings.js +143 -0
- package/lib/vendor/MANIFEST.json +632 -416
- package/lib/vendor/blamejs/.clusterfuzzlite/Dockerfile +21 -10
- package/lib/vendor/blamejs/.clusterfuzzlite/build.sh +30 -9
- package/lib/vendor/blamejs/.github/dependabot.yml +8 -0
- package/lib/vendor/blamejs/.github/workflows/actions-lint.yml +3 -3
- package/lib/vendor/blamejs/.github/workflows/cflite_batch.yml +7 -2
- package/lib/vendor/blamejs/.github/workflows/cflite_pr.yml +7 -2
- package/lib/vendor/blamejs/.github/workflows/ci.yml +21 -21
- package/lib/vendor/blamejs/.github/workflows/codeql.yml +3 -3
- package/lib/vendor/blamejs/.github/workflows/npm-publish.yml +4 -4
- package/lib/vendor/blamejs/.github/workflows/release-container.yml +7 -7
- package/lib/vendor/blamejs/.github/workflows/scorecard.yml +3 -3
- package/lib/vendor/blamejs/.github/workflows/sha-to-tag-verify.yml +1 -1
- package/lib/vendor/blamejs/.gitignore +2 -0
- package/lib/vendor/blamejs/CHANGELOG.md +122 -0
- package/lib/vendor/blamejs/NOTICE +26 -1
- package/lib/vendor/blamejs/SECURITY.md +1 -1
- package/lib/vendor/blamejs/api-snapshot.json +207 -5
- package/lib/vendor/blamejs/docker/keycloak/realm-blamejs-test.json +29 -0
- package/lib/vendor/blamejs/examples/wiki/DEPLOY.md +1 -0
- package/lib/vendor/blamejs/examples/wiki/lib/build-app.js +31 -0
- package/lib/vendor/blamejs/examples/wiki/lib/source-comment-block-validator.js +109 -0
- package/lib/vendor/blamejs/examples/wiki/nginx.conf +106 -0
- package/lib/vendor/blamejs/examples/wiki/package-lock.json +1 -1
- package/lib/vendor/blamejs/examples/wiki/test/e2e.js +92 -0
- package/lib/vendor/blamejs/fuzz/asn1-der.fuzz.js +28 -0
- package/lib/vendor/blamejs/fuzz/cms-codec.fuzz.js +17 -0
- package/lib/vendor/blamejs/fuzz/link-header.fuzz.js +18 -0
- package/lib/vendor/blamejs/index.js +6 -0
- package/lib/vendor/blamejs/lib/a2a.js +4 -4
- package/lib/vendor/blamejs/lib/agent-idempotency.js +18 -2
- package/lib/vendor/blamejs/lib/agent-saga.js +36 -8
- package/lib/vendor/blamejs/lib/agent-snapshot.js +63 -6
- package/lib/vendor/blamejs/lib/app-shutdown.js +23 -20
- package/lib/vendor/blamejs/lib/archive-read.js +8 -0
- package/lib/vendor/blamejs/lib/archive-tar.js +12 -2
- package/lib/vendor/blamejs/lib/arg-parser.js +49 -5
- package/lib/vendor/blamejs/lib/asn1-der.js +12 -0
- package/lib/vendor/blamejs/lib/audit-sign.js +47 -1
- package/lib/vendor/blamejs/lib/audit.js +71 -8
- package/lib/vendor/blamejs/lib/auth/ciba.js +14 -2
- package/lib/vendor/blamejs/lib/auth/fido-mds3.js +58 -47
- package/lib/vendor/blamejs/lib/auth/jwt.js +34 -0
- package/lib/vendor/blamejs/lib/auth/oauth.js +90 -13
- package/lib/vendor/blamejs/lib/auth/oid4vci.js +20 -17
- package/lib/vendor/blamejs/lib/auth/openid-federation.js +214 -23
- package/lib/vendor/blamejs/lib/auth/saml.js +38 -20
- package/lib/vendor/blamejs/lib/auth/sd-jwt-vc.js +10 -4
- package/lib/vendor/blamejs/lib/backup/bundle.js +13 -3
- package/lib/vendor/blamejs/lib/backup/index.js +16 -5
- package/lib/vendor/blamejs/lib/backup/manifest.js +18 -5
- package/lib/vendor/blamejs/lib/base32.js +21 -0
- package/lib/vendor/blamejs/lib/break-glass.js +19 -10
- package/lib/vendor/blamejs/lib/bundler.js +5 -1
- package/lib/vendor/blamejs/lib/cache-status.js +3 -7
- package/lib/vendor/blamejs/lib/calendar.js +21 -1
- package/lib/vendor/blamejs/lib/cbor.js +12 -1
- package/lib/vendor/blamejs/lib/cert.js +29 -11
- package/lib/vendor/blamejs/lib/cli.js +94 -24
- package/lib/vendor/blamejs/lib/cloud-events.js +2 -2
- package/lib/vendor/blamejs/lib/cluster-provider-db.js +13 -3
- package/lib/vendor/blamejs/lib/codepoint-class.js +85 -0
- package/lib/vendor/blamejs/lib/compliance-ai-act-prohibited.js +8 -4
- package/lib/vendor/blamejs/lib/compliance-ai-act-transparency.js +19 -4
- package/lib/vendor/blamejs/lib/compliance-ai-act.js +6 -8
- package/lib/vendor/blamejs/lib/content-credentials.js +1 -1
- package/lib/vendor/blamejs/lib/content-digest.js +2 -1
- package/lib/vendor/blamejs/lib/cookies.js +13 -3
- package/lib/vendor/blamejs/lib/cose.js +31 -16
- package/lib/vendor/blamejs/lib/crypto-field.js +32 -0
- package/lib/vendor/blamejs/lib/crypto-oprf.js +11 -2
- package/lib/vendor/blamejs/lib/crypto-xwing.js +22 -4
- package/lib/vendor/blamejs/lib/crypto.js +314 -19
- package/lib/vendor/blamejs/lib/csp.js +11 -3
- package/lib/vendor/blamejs/lib/daemon.js +270 -24
- package/lib/vendor/blamejs/lib/dark-patterns.js +5 -2
- package/lib/vendor/blamejs/lib/db-declare-view.js +2 -2
- package/lib/vendor/blamejs/lib/db-query.js +34 -7
- package/lib/vendor/blamejs/lib/db.js +18 -6
- package/lib/vendor/blamejs/lib/dbsc.js +17 -0
- package/lib/vendor/blamejs/lib/dev.js +21 -2
- package/lib/vendor/blamejs/lib/dsr.js +157 -102
- package/lib/vendor/blamejs/lib/external-db.js +41 -2
- package/lib/vendor/blamejs/lib/file-upload.js +25 -7
- package/lib/vendor/blamejs/lib/flag-providers.js +27 -15
- package/lib/vendor/blamejs/lib/forms.js +113 -27
- package/lib/vendor/blamejs/lib/gate-contract.js +23 -10
- package/lib/vendor/blamejs/lib/gdpr-ropa.js +8 -1
- package/lib/vendor/blamejs/lib/guard-agent-registry.js +1 -1
- package/lib/vendor/blamejs/lib/guard-archive.js +2 -2
- package/lib/vendor/blamejs/lib/guard-cidr.js +27 -1
- package/lib/vendor/blamejs/lib/guard-graphql.js +30 -11
- package/lib/vendor/blamejs/lib/guard-html.js +26 -53
- package/lib/vendor/blamejs/lib/guard-image.js +24 -5
- package/lib/vendor/blamejs/lib/guard-imap-command.js +10 -2
- package/lib/vendor/blamejs/lib/guard-jmap.js +19 -3
- package/lib/vendor/blamejs/lib/guard-jwt.js +18 -2
- package/lib/vendor/blamejs/lib/guard-list-unsubscribe.js +2 -2
- package/lib/vendor/blamejs/lib/guard-managesieve-command.js +10 -2
- package/lib/vendor/blamejs/lib/guard-markdown.js +11 -24
- package/lib/vendor/blamejs/lib/guard-pdf.js +18 -2
- package/lib/vendor/blamejs/lib/guard-pop3-command.js +10 -2
- package/lib/vendor/blamejs/lib/guard-regex.js +8 -5
- package/lib/vendor/blamejs/lib/guard-svg.js +31 -32
- package/lib/vendor/blamejs/lib/guard-time.js +1 -1
- package/lib/vendor/blamejs/lib/guard-uuid.js +2 -2
- package/lib/vendor/blamejs/lib/html-balance.js +3 -3
- package/lib/vendor/blamejs/lib/http-client-cache.js +82 -4
- package/lib/vendor/blamejs/lib/http-client-cookie-jar.js +16 -1
- package/lib/vendor/blamejs/lib/http-client.js +39 -7
- package/lib/vendor/blamejs/lib/http-message-signature.js +35 -1
- package/lib/vendor/blamejs/lib/i18n-messageformat.js +31 -6
- package/lib/vendor/blamejs/lib/i18n.js +35 -21
- package/lib/vendor/blamejs/lib/incident-report.js +8 -1
- package/lib/vendor/blamejs/lib/ip-utils.js +11 -1
- package/lib/vendor/blamejs/lib/json-path.js +23 -1
- package/lib/vendor/blamejs/lib/jwk.js +20 -3
- package/lib/vendor/blamejs/lib/link-header.js +2 -1
- package/lib/vendor/blamejs/lib/log-stream-otlp-grpc.js +5 -1
- package/lib/vendor/blamejs/lib/log-stream-otlp.js +5 -1
- package/lib/vendor/blamejs/lib/log-stream.js +8 -3
- package/lib/vendor/blamejs/lib/mail-auth.js +123 -22
- package/lib/vendor/blamejs/lib/mail-bimi.js +1 -1
- package/lib/vendor/blamejs/lib/mail-bounce.js +8 -0
- package/lib/vendor/blamejs/lib/mail-crypto-pgp.js +46 -10
- package/lib/vendor/blamejs/lib/mail-dav.js +22 -3
- package/lib/vendor/blamejs/lib/mail-dkim.js +96 -30
- package/lib/vendor/blamejs/lib/mail-helo.js +6 -1
- package/lib/vendor/blamejs/lib/mail-scan.js +23 -16
- package/lib/vendor/blamejs/lib/mail-send-deliver.js +34 -8
- package/lib/vendor/blamejs/lib/mail-server-imap.js +3 -4
- package/lib/vendor/blamejs/lib/mail-server-managesieve.js +7 -11
- package/lib/vendor/blamejs/lib/mail-server-mx.js +93 -7
- package/lib/vendor/blamejs/lib/mail-server-registry.js +8 -2
- package/lib/vendor/blamejs/lib/mail.js +15 -5
- package/lib/vendor/blamejs/lib/metrics.js +268 -63
- package/lib/vendor/blamejs/lib/middleware/age-gate.js +7 -1
- package/lib/vendor/blamejs/lib/middleware/asyncapi-serve.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/body-parser.js +19 -4
- package/lib/vendor/blamejs/lib/middleware/bot-guard.js +5 -9
- package/lib/vendor/blamejs/lib/middleware/csp-report.js +40 -8
- package/lib/vendor/blamejs/lib/middleware/csrf-protect.js +24 -10
- package/lib/vendor/blamejs/lib/middleware/dpop.js +10 -5
- package/lib/vendor/blamejs/lib/middleware/index.js +6 -1
- package/lib/vendor/blamejs/lib/middleware/nel.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/openapi-serve.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/rate-limit.js +12 -1
- package/lib/vendor/blamejs/lib/middleware/require-bound-key.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/scim-server.js +1 -1
- package/lib/vendor/blamejs/lib/middleware/tus-upload.js +6 -2
- package/lib/vendor/blamejs/lib/mtls-ca.js +18 -2
- package/lib/vendor/blamejs/lib/network-dns-resolver.js +11 -1
- package/lib/vendor/blamejs/lib/network-dns.js +21 -2
- package/lib/vendor/blamejs/lib/network-tls.js +69 -7
- package/lib/vendor/blamejs/lib/nonce-store.js +9 -1
- package/lib/vendor/blamejs/lib/object-store/gcs.js +7 -0
- package/lib/vendor/blamejs/lib/object-store/sigv4.js +31 -0
- package/lib/vendor/blamejs/lib/observability-otlp-exporter.js +1 -1
- package/lib/vendor/blamejs/lib/outbox.js +1 -1
- package/lib/vendor/blamejs/lib/parsers/safe-ini.js +9 -1
- package/lib/vendor/blamejs/lib/parsers/safe-toml.js +10 -1
- package/lib/vendor/blamejs/lib/permissions.js +6 -3
- package/lib/vendor/blamejs/lib/pid-probe.js +55 -0
- package/lib/vendor/blamejs/lib/pqc-agent.js +8 -1
- package/lib/vendor/blamejs/lib/pqc-software.js +3 -3
- package/lib/vendor/blamejs/lib/pubsub.js +20 -9
- package/lib/vendor/blamejs/lib/queue-local.js +8 -1
- package/lib/vendor/blamejs/lib/queue-redis.js +5 -0
- package/lib/vendor/blamejs/lib/redact.js +54 -0
- package/lib/vendor/blamejs/lib/restore-bundle.js +10 -2
- package/lib/vendor/blamejs/lib/restore.js +19 -0
- package/lib/vendor/blamejs/lib/retention.js +12 -4
- package/lib/vendor/blamejs/lib/router.js +60 -6
- package/lib/vendor/blamejs/lib/safe-buffer.js +69 -0
- package/lib/vendor/blamejs/lib/safe-decompress.js +8 -2
- package/lib/vendor/blamejs/lib/safe-dns.js +25 -20
- package/lib/vendor/blamejs/lib/safe-ical.js +7 -3
- package/lib/vendor/blamejs/lib/safe-mime.js +12 -1
- package/lib/vendor/blamejs/lib/safe-object.js +80 -0
- package/lib/vendor/blamejs/lib/safe-path.js +52 -4
- package/lib/vendor/blamejs/lib/safe-redirect.js +10 -2
- package/lib/vendor/blamejs/lib/safe-schema.js +4 -1
- package/lib/vendor/blamejs/lib/safe-sieve.js +33 -1
- package/lib/vendor/blamejs/lib/safe-sql.js +88 -0
- package/lib/vendor/blamejs/lib/safe-vcard.js +7 -3
- package/lib/vendor/blamejs/lib/scheduler.js +8 -1
- package/lib/vendor/blamejs/lib/security-assert.js +6 -6
- package/lib/vendor/blamejs/lib/self-update-standalone-verifier.js +74 -27
- package/lib/vendor/blamejs/lib/self-update.js +517 -87
- package/lib/vendor/blamejs/lib/server-timing.js +2 -4
- package/lib/vendor/blamejs/lib/session.js +34 -12
- package/lib/vendor/blamejs/lib/sql.js +15 -1
- package/lib/vendor/blamejs/lib/ssrf-guard.js +52 -0
- package/lib/vendor/blamejs/lib/static.js +55 -13
- package/lib/vendor/blamejs/lib/storage.js +8 -2
- package/lib/vendor/blamejs/lib/subject.js +6 -1
- package/lib/vendor/blamejs/lib/tenant-quota.js +52 -13
- package/lib/vendor/blamejs/lib/tls-exporter.js +3 -3
- package/lib/vendor/blamejs/lib/tsa.js +34 -13
- package/lib/vendor/blamejs/lib/uri-template.js +8 -1
- package/lib/vendor/blamejs/lib/vault/index.js +13 -0
- package/lib/vendor/blamejs/lib/vc.js +44 -5
- package/lib/vendor/blamejs/lib/vendor/MANIFEST.json +26 -26
- package/lib/vendor/blamejs/lib/vendor/noble-ciphers.cjs +792 -1
- package/lib/vendor/blamejs/lib/vendor/noble-curves.cjs +3443 -1
- package/lib/vendor/blamejs/lib/vendor/noble-post-quantum.cjs +2737 -1
- package/lib/vendor/blamejs/lib/vendor/pki.cjs +39550 -13
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.dat +55 -53
- package/lib/vendor/blamejs/lib/vendor/public-suffix-list.data.js +5551 -5554
- package/lib/vendor/blamejs/lib/vendor/simplewebauthn-server.cjs +22459 -32
- package/lib/vendor/blamejs/lib/watcher.js +89 -17
- package/lib/vendor/blamejs/lib/webhook-dispatcher.js +25 -3
- package/lib/vendor/blamejs/lib/webhook.js +12 -2
- package/lib/vendor/blamejs/lib/ws-client.js +32 -1
- package/lib/vendor/blamejs/lib/xml-c14n.js +29 -1
- package/lib/vendor/blamejs/oss-fuzz/projects/blamejs/Dockerfile +1 -1
- package/lib/vendor/blamejs/package-lock.json +2 -2
- package/lib/vendor/blamejs/package.json +1 -1
- package/lib/vendor/blamejs/release-notes/v0.16.x.json +1462 -0
- package/lib/vendor/blamejs/release-notes/v0.17.0.json +31 -0
- package/lib/vendor/blamejs/release-notes/v0.17.1.json +31 -0
- package/lib/vendor/blamejs/release-notes/v0.17.10.json +30 -0
- package/lib/vendor/blamejs/release-notes/v0.17.11.json +22 -0
- package/lib/vendor/blamejs/release-notes/v0.17.12.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.13.json +77 -0
- package/lib/vendor/blamejs/release-notes/v0.17.14.json +40 -0
- package/lib/vendor/blamejs/release-notes/v0.17.15.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.16.json +27 -0
- package/lib/vendor/blamejs/release-notes/v0.17.17.json +31 -0
- package/lib/vendor/blamejs/release-notes/v0.17.18.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.19.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.2.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.20.json +43 -0
- package/lib/vendor/blamejs/release-notes/v0.17.21.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.22.json +18 -0
- package/lib/vendor/blamejs/release-notes/v0.17.3.json +43 -0
- package/lib/vendor/blamejs/release-notes/v0.17.4.json +35 -0
- package/lib/vendor/blamejs/release-notes/v0.17.5.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.6.json +26 -0
- package/lib/vendor/blamejs/release-notes/v0.17.7.json +35 -0
- package/lib/vendor/blamejs/release-notes/v0.17.8.json +22 -0
- package/lib/vendor/blamejs/release-notes/v0.17.9.json +26 -0
- package/lib/vendor/blamejs/scripts/validate-source-comment-blocks.js +4 -0
- package/lib/vendor/blamejs/scripts/vendor-update.sh +293 -9
- package/lib/vendor/blamejs/socket.yml +94 -0
- package/lib/vendor/blamejs/test/00-primitives.js +605 -0
- package/lib/vendor/blamejs/test/helpers/drivers.js +12 -9
- package/lib/vendor/blamejs/test/integration/audit-stack-mysql.test.js +90 -1
- package/lib/vendor/blamejs/test/integration/audit-stack-postgres.test.js +122 -1
- package/lib/vendor/blamejs/test/integration/data-layer-mysql.test.js +30 -0
- package/lib/vendor/blamejs/test/integration/data-layer-pg.test.js +29 -0
- package/lib/vendor/blamejs/test/integration/dsr-cluster-mysql.test.js +479 -0
- package/lib/vendor/blamejs/test/integration/dsr-cluster-pg.test.js +487 -0
- package/lib/vendor/blamejs/test/integration/federation-auth.test.js +313 -5
- package/lib/vendor/blamejs/test/integration/mail-dkim.test.js +80 -0
- package/lib/vendor/blamejs/test/integration/openid-federation-chain.test.js +275 -0
- package/lib/vendor/blamejs/test/integration/webhook-dispatcher-pg.test.js +96 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/a2a-tasks.test.js +401 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/acme.test.js +1649 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/age-gate.test.js +33 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-idempotency.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-saga.test.js +60 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/agent-snapshot.test.js +524 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/api-encrypt.test.js +891 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/app-shutdown.test.js +128 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-adapters.test.js +271 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-read.test.js +628 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-tar-read.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/archive-wrap.test.js +227 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/arg-parser.test.js +15 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/asn1-der.test.js +73 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/atomic-file.test.js +114 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-anchor.test.js +141 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit-tools.test.js +624 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/audit.test.js +769 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-jwt-defenses.test.js +436 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth.test.js +1697 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-oid4vp.test.js +495 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-password.test.js +500 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml.test.js +1809 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-status-list.test.js +243 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-index.test.js +2226 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-manifest-signature.test.js +183 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/base32.test.js +105 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/break-glass.test.js +693 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cache.test.js +603 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/calendar.test.js +557 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/case-insensitive-security-token-guard.test.js +214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cbor.test.js +25 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cert.test.js +843 -6
- package/lib/vendor/blamejs/test/layer-0-primitives/ciba-authreqid-binding.test.js +77 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/ciba.test.js +866 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/clear-site-data.test.js +18 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-erase.test.js +19 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cli.test.js +2790 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cluster-lease-renewal-ttl.test.js +114 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cluster.test.js +1032 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cms-codec.test.js +575 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +739 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/codepoint-class.test.js +8 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-ai-act.test.js +194 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-lifecycle-proto-key.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/compliance-sanctions.test.js +254 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +613 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/cookies.test.js +140 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/cose.test.js +407 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-adversarial.test.js +352 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field-derived-hash.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-field.test.js +575 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-files-parallel.test.js +10 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-hash-stream.test.js +24 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-oprf.test.js +17 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-spki-pin.test.js +183 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto-xwing.test.js +48 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/crypto.test.js +345 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csp-report.test.js +58 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/csv.test.js +48 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/daemon.test.js +459 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +19 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-query.test.js +1019 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db-raw-residency-gate.test.js +77 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/db.test.js +1621 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ddl-change-control.test.js +462 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/dnssec.test.js +323 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dpop-middleware-verify.test.js +562 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/dsr.test.js +901 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/dual-control.test.js +249 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db-migrate.test.js +561 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/external-db.test.js +1214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fal.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/fedcm-dbsc.test.js +46 -20
- package/lib/vendor/blamejs/test/layer-0-primitives/federation-vc-suite.test.js +147 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/fido-mds3.test.js +907 -38
- package/lib/vendor/blamejs/test/layer-0-primitives/file-upload-content-safety-skip-audit.test.js +29 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/file-upload.test.js +1135 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/flag.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/forms.test.js +747 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gate-contract.test.js +1855 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/gdpr-ropa.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-archive.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-auth.test.js +117 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-cidr.test.js +151 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-domain.test.js +422 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-filename.test.js +424 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{guard-gate-disposition-coverage.test.js → guard-gate-disposition.test.js} +1 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-graphql.test.js +340 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-html.test.js +29 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-idempotency-key.test.js +28 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-image.test.js +519 -45
- 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 +51 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-jsonpath.test.js +66 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-jwt.test.js +436 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-managesieve-command.test.js +25 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-markdown.test.js +16 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-mime.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-oauth.test.js +140 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-pdf.test.js +80 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-pop3-command.test.js +27 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-regex.test.js +99 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-shell.test.js +76 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{guard-sql-coverage.test.js → guard-sql.test.js} +3 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-svg.test.js +524 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-template.test.js +71 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-time.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/guard-uuid.test.js +86 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/html-balance.test.js +38 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache-authorization.test.js +347 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client-cache.test.js +908 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-client.test.js +2874 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/http-message-signature.test.js +643 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n-messageformat.test.js +38 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/i18n.test.js +1153 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/idempotency-key.test.js +494 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ip-utils.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jsdoc-example-execution.test.js +177 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-path.test.js +103 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/json-schema.test.js +214 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jwk.test.js +41 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/jwt-external.test.js +276 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/keychain.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log-stream.test.js +241 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/log.test.js +106 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-agent.test.js +441 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth.test.js +2136 -4
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bimi.test.js +759 -12
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-bounce.test.js +811 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp-experimental.test.js +401 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-pgp.test.js +751 -8
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto-smime.test.js +864 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-crypto.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dav.test.js +830 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-deploy.test.js +635 -86
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-dkim.test.js +818 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-helo.test.js +27 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-scan.test.js +199 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-send-deliver.test.js +686 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-imap.test.js +778 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-jmap.test.js +1438 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-managesieve.test.js +449 -6
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-mx.test.js +773 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-pop3.test.js +623 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-rate-limit.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-registry.test.js +13 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-server-submission.test.js +877 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-sieve.test.js +326 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store-fts.test.js +55 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-store.test.js +242 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail.test.js +1596 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +440 -4
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-snapshot.test.js +89 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics.test.js +1230 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-assetlinks.test.js +113 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-body-parser.test.js +1169 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-bot-disclose.test.js +123 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-cookies.test.js +108 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-gpc.test.js +121 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-headers.test.js +163 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-host-allowlist.test.js +154 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-require-content-type.test.js +127 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{middleware-tus-upload-coverage.test.js → middleware-tus-upload.test.js} +45 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/middleware-web-app-manifest.test.js +132 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mtls-ca-crl-fingerprint-only.test.js +92 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns-resolver.test.js +65 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-dns.test.js +1727 -1
- package/lib/vendor/blamejs/test/layer-0-primitives/network-nts.test.js +699 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy.test.js +1181 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/network-tls.test.js +1876 -3
- package/lib/vendor/blamejs/test/layer-0-primitives/network.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/nonce-store-enforce-replay-nonboolean.test.js +81 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ntp-check.test.js +122 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability-tracing.test.js +378 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/observability.test.js +77 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/oid4vci.test.js +1016 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/openid-federation.test.js +946 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/outbox.test.js +818 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/own-property-membership-guards.test.js +109 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/parsers-safe-toml.test.js +543 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/{parsers-safe-yaml-coverage.test.js → parsers-safe-yaml.test.js} +2 -2
- package/lib/vendor/blamejs/test/layer-0-primitives/parsers-standalone.test.js +73 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/passkey.test.js +649 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/permissions.test.js +524 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pqc-agent-curve.test.js +22 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/pubsub.test.js +295 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue-flow-repeat.test.js +36 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/queue.test.js +83 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/rate-limit-xff-spoofing.test.js +34 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/redact.test.js +1031 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/request-helpers.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/require-bound-key.test.js +401 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/restore-empty-manifest-wipe.test.js +154 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/retention.test.js +600 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-host-path-injection.test.js +231 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router-tls0rtt.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/router.test.js +1277 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-async.test.js +133 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer-linear-scans.test.js +14 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-buffer.test.js +80 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-decompress.test.js +28 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-dns.test.js +245 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-ical.test.js +32 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-ini.test.js +376 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-json.test.js +175 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-mime.test.js +518 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-object.test.js +62 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-path.test.js +30 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-schema.test.js +104 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-sql.test.js +142 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-url.test.js +112 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/safe-vcard.test.js +26 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scheduler.test.js +157 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/scim-server.test.js +396 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sd-jwt-vc.test.js +930 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/security-assert.test.js +755 -82
- package/lib/vendor/blamejs/test/layer-0-primitives/self-update.test.js +1053 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-device-binding.test.js +200 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/session-strict-binding-missing-failclosed.test.js +110 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sigv4-bucket-ops.test.js +636 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sql-offset-without-limit.test.js +94 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/sql.test.js +1190 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ssrf-guard.test.js +21 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/static.test.js +850 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage-presigned-url.test.js +146 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/storage.test.js +621 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/subject.test.js +47 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/template.test.js +582 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +587 -25
- package/lib/vendor/blamejs/test/layer-0-primitives/time.test.js +11 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/tsa.test.js +524 -63
- package/lib/vendor/blamejs/test/layer-0-primitives/uri-template.test.js +27 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault-rotate.test.js +866 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vault.test.js +74 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/vc.test.js +215 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/watcher.test.js +550 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/webhook-dispatcher.test.js +388 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/webhook.test.js +262 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/websocket.test.js +1294 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/ws-client.test.js +629 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/xml-c14n-attr-normalization.test.js +164 -0
- package/lib/vendor/blamejs/test/smoke.js +2 -0
- package/package.json +1 -1
- package/lib/vendor/blamejs/release-notes/v0.16.0.json +0 -44
- package/lib/vendor/blamejs/release-notes/v0.16.1.json +0 -36
- package/lib/vendor/blamejs/release-notes/v0.16.2.json +0 -71
- package/lib/vendor/blamejs/release-notes/v0.16.3.json +0 -71
- package/lib/vendor/blamejs/test/layer-0-primitives/acme-coverage.test.js +0 -441
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-oauth-coverage.test.js +0 -482
- package/lib/vendor/blamejs/test/layer-0-primitives/auth-saml-coverage.test.js +0 -671
- package/lib/vendor/blamejs/test/layer-0-primitives/backup-index-coverage.test.js +0 -690
- package/lib/vendor/blamejs/test/layer-0-primitives/cli-coverage.test.js +0 -238
- package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials-coverage.test.js +0 -319
- package/lib/vendor/blamejs/test/layer-0-primitives/keychain-coverage.test.js +0 -0
- package/lib/vendor/blamejs/test/layer-0-primitives/mail-auth-coverage.test.js +0 -437
- package/lib/vendor/blamejs/test/layer-0-primitives/mcp-coverage.test.js +0 -443
- package/lib/vendor/blamejs/test/layer-0-primitives/metrics-coverage.test.js +0 -395
- package/lib/vendor/blamejs/test/layer-0-primitives/network-smtp-policy-coverage.test.js +0 -565
- package/lib/vendor/blamejs/test/layer-0-primitives/router-coverage.test.js +0 -592
- package/lib/vendor/blamejs/test/layer-0-primitives/sql-coverage.test.js +0 -422
- package/lib/vendor/blamejs/test/layer-0-primitives/test-coverage.test.js +0 -573
|
@@ -36,6 +36,36 @@ function run() {
|
|
|
36
36
|
ropa.update("crm", { retentionPeriod: "5y" });
|
|
37
37
|
check("ropa.update merges patch", ropa.get("crm").retentionPeriod === "5y");
|
|
38
38
|
|
|
39
|
+
// update() must validate legalBasis with the SAME rigor as register().
|
|
40
|
+
// register() rejects a falsy-but-invalid legalBasis (""/0/false/undefined);
|
|
41
|
+
// update() must too — otherwise a required Article 30 field can be silently
|
|
42
|
+
// corrupted to a value the VALID_LEGAL_BASES enum would reject. A truthiness
|
|
43
|
+
// guard (`if (patch.legalBasis && ...)`) skipped validation whenever the
|
|
44
|
+
// incoming value was falsy, so an empty string sailed through where the enum
|
|
45
|
+
// check would have caught "made-up".
|
|
46
|
+
var basisRopa = b.gdpr.ropa.create({
|
|
47
|
+
audit: false, controller: { name: "Acme", contact: "dpo@acme.example" },
|
|
48
|
+
});
|
|
49
|
+
basisRopa.register({ id: "a1", name: "A1", purposes: ["p"], legalBasis: "consent", dataCategories: ["c"] });
|
|
50
|
+
|
|
51
|
+
var updEmptyRejected = false;
|
|
52
|
+
try { basisRopa.update("a1", { legalBasis: "" }); }
|
|
53
|
+
catch (e) { updEmptyRejected = e.code === "gdpr-ropa/bad-legal-basis"; }
|
|
54
|
+
check("ropa.update rejects empty-string legalBasis (parity with register)", updEmptyRejected);
|
|
55
|
+
check("ropa.update leaves legalBasis intact after rejecting empty",
|
|
56
|
+
basisRopa.get("a1").legalBasis === "consent");
|
|
57
|
+
|
|
58
|
+
var updZeroRejected = false;
|
|
59
|
+
try { basisRopa.update("a1", { legalBasis: 0 }); }
|
|
60
|
+
catch (e) { updZeroRejected = e.code === "gdpr-ropa/bad-legal-basis"; }
|
|
61
|
+
check("ropa.update rejects falsy numeric legalBasis", updZeroRejected);
|
|
62
|
+
check("ropa.update leaves legalBasis intact after rejecting 0",
|
|
63
|
+
basisRopa.get("a1").legalBasis === "consent");
|
|
64
|
+
|
|
65
|
+
// A valid legalBasis update still succeeds (fix must not over-reject).
|
|
66
|
+
basisRopa.update("a1", { legalBasis: "contract" });
|
|
67
|
+
check("ropa.update accepts a valid legalBasis change", basisRopa.get("a1").legalBasis === "contract");
|
|
68
|
+
|
|
39
69
|
ropa.remove("crm", { reason: "deprecated", actor: "dpo" });
|
|
40
70
|
check("ropa.remove deletes", ropa.list().length === 0);
|
|
41
71
|
|
|
@@ -313,6 +313,90 @@ function testGuardArchiveBadProfile() {
|
|
|
313
313
|
threw && /unknown profile/i.test(threw.message));
|
|
314
314
|
}
|
|
315
315
|
|
|
316
|
+
// ---- buildProfile — resolve a named profile to its merged caps ----
|
|
317
|
+
// The gate-contract ABI (makeProfileBuilder → buildProfile) reads the
|
|
318
|
+
// base profile name from `baseProfile` OR `extends` (string or array),
|
|
319
|
+
// plus `overrides` / `removes`.
|
|
320
|
+
function testGuardArchiveBuildProfile() {
|
|
321
|
+
var strict = b.guardArchive.buildProfile({ baseProfile: "strict" });
|
|
322
|
+
check("buildProfile(strict): maxEntries === 100", strict.maxEntries === 100);
|
|
323
|
+
check("buildProfile(strict): symlinkPolicy === reject", strict.symlinkPolicy === "reject");
|
|
324
|
+
check("buildProfile(strict): maxCompressionRatio === 100",
|
|
325
|
+
strict.maxCompressionRatio === 100);
|
|
326
|
+
|
|
327
|
+
// The documented @example form `{ extends: "strict" }` — a single base
|
|
328
|
+
// as a bare string — resolves the same caps as baseProfile (buildProfile
|
|
329
|
+
// normalizes a string `extends` to a one-element list).
|
|
330
|
+
var strictExt = b.guardArchive.buildProfile({ extends: "strict" });
|
|
331
|
+
check("buildProfile({extends:'strict'}): maxEntries === 100", strictExt.maxEntries === 100);
|
|
332
|
+
check("buildProfile({extends:'strict'}): symlinkPolicy === reject",
|
|
333
|
+
strictExt.symlinkPolicy === "reject");
|
|
334
|
+
var strictExtArr = b.guardArchive.buildProfile({ extends: ["strict"] });
|
|
335
|
+
check("buildProfile({extends:['strict']}): array form resolves the same",
|
|
336
|
+
strictExtArr.maxEntries === 100);
|
|
337
|
+
|
|
338
|
+
var perm = b.guardArchive.buildProfile({ baseProfile: "permissive" });
|
|
339
|
+
check("buildProfile(permissive): maxEntries === 100000", perm.maxEntries === 100000);
|
|
340
|
+
check("buildProfile(permissive): symlinkPolicy === audit", perm.symlinkPolicy === "audit");
|
|
341
|
+
check("buildProfile(permissive): maxNestedDepth === 4", perm.maxNestedDepth === 4);
|
|
342
|
+
|
|
343
|
+
// Inline overrides win over the resolved base.
|
|
344
|
+
var custom = b.guardArchive.buildProfile({
|
|
345
|
+
baseProfile: "strict",
|
|
346
|
+
overrides: { maxEntries: 7 },
|
|
347
|
+
});
|
|
348
|
+
check("buildProfile: overrides win (maxEntries)", custom.maxEntries === 7);
|
|
349
|
+
check("buildProfile: base survives under override (symlinkPolicy)",
|
|
350
|
+
custom.symlinkPolicy === "reject");
|
|
351
|
+
|
|
352
|
+
// Unknown profile name throws.
|
|
353
|
+
var threw = null;
|
|
354
|
+
try { b.guardArchive.buildProfile({ baseProfile: "nope" }); }
|
|
355
|
+
catch (e) { threw = e; }
|
|
356
|
+
check("buildProfile: unknown baseProfile throws",
|
|
357
|
+
threw && /unknown profile/i.test(threw.message));
|
|
358
|
+
|
|
359
|
+
// An unrecognized key (`profile` — the shape gate() takes, not buildProfile)
|
|
360
|
+
// resolves no base and yields no caps, rather than silently resolving one.
|
|
361
|
+
var byProfileKey = b.guardArchive.buildProfile({ profile: "strict" });
|
|
362
|
+
check("buildProfile: unrecognized `profile` key resolves no caps",
|
|
363
|
+
byProfileKey.maxEntries === undefined);
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// ---- loadRulePack — register an operator rule pack, id-validated ----
|
|
367
|
+
function testGuardArchiveLoadRulePack() {
|
|
368
|
+
var pack = {
|
|
369
|
+
id: "kb-2026-archive",
|
|
370
|
+
extraReservedNames: ["system32"],
|
|
371
|
+
rules: [{ id: "no-windows-system", severity: "critical",
|
|
372
|
+
reason: "entry name targets Windows system directory" }],
|
|
373
|
+
};
|
|
374
|
+
var returned = b.guardArchive.loadRulePack(pack);
|
|
375
|
+
check("loadRulePack: returns the pack unchanged", returned === pack);
|
|
376
|
+
check("loadRulePack: pack.id preserved", returned.id === "kb-2026-archive");
|
|
377
|
+
|
|
378
|
+
// Missing pack.id → archive.bad-opt.
|
|
379
|
+
var noId = null;
|
|
380
|
+
try { b.guardArchive.loadRulePack({ rules: [] }); }
|
|
381
|
+
catch (e) { noId = e; }
|
|
382
|
+
check("loadRulePack: missing id throws archive.bad-opt",
|
|
383
|
+
noId && noId.code === "archive.bad-opt");
|
|
384
|
+
|
|
385
|
+
// Empty-string id is likewise rejected.
|
|
386
|
+
var emptyId = null;
|
|
387
|
+
try { b.guardArchive.loadRulePack({ id: "" }); }
|
|
388
|
+
catch (e) { emptyId = e; }
|
|
389
|
+
check("loadRulePack: empty id throws archive.bad-opt",
|
|
390
|
+
emptyId && emptyId.code === "archive.bad-opt");
|
|
391
|
+
|
|
392
|
+
// Non-object pack throws a GuardArchiveError (proto-safe requireObject).
|
|
393
|
+
var notObj = null;
|
|
394
|
+
try { b.guardArchive.loadRulePack(null); }
|
|
395
|
+
catch (e) { notObj = e; }
|
|
396
|
+
check("loadRulePack: null pack throws GuardArchiveError",
|
|
397
|
+
notObj instanceof b.guardArchive.GuardArchiveError);
|
|
398
|
+
}
|
|
399
|
+
|
|
316
400
|
async function run() {
|
|
317
401
|
testGuardArchiveSurface();
|
|
318
402
|
testGuardArchiveRegistryParity();
|
|
@@ -335,6 +419,8 @@ async function run() {
|
|
|
335
419
|
testGuardArchiveCleanArchive();
|
|
336
420
|
testGuardArchiveCompliancePosture();
|
|
337
421
|
testGuardArchiveBadProfile();
|
|
422
|
+
testGuardArchiveBuildProfile();
|
|
423
|
+
testGuardArchiveLoadRulePack();
|
|
338
424
|
await testGuardArchiveGate();
|
|
339
425
|
}
|
|
340
426
|
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) blamejs contributors
|
|
3
|
+
"use strict";
|
|
4
|
+
|
|
5
|
+
var helpers = require("../helpers");
|
|
6
|
+
var b = helpers.b;
|
|
7
|
+
var check = helpers.check;
|
|
8
|
+
|
|
9
|
+
// A well-formed structural JWT (ES256 header, future exp/iat/iss) — passes
|
|
10
|
+
// guardJwt's structural validation. Not a real signature; validate is a
|
|
11
|
+
// pure inspection of shape, not a cryptographic verify.
|
|
12
|
+
var BENIGN_JWT =
|
|
13
|
+
"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9." +
|
|
14
|
+
"eyJpc3MiOiJleGFtcGxlIiwiZXhwIjo5OTk5OTk5OTk5LCJpYXQiOjE3MDAwMDAwMDB9.sig";
|
|
15
|
+
|
|
16
|
+
// alg=none JWT — RFC 7518 §3.6 explicit-no-signature, the canonical
|
|
17
|
+
// bearer-token forgery class guardAuth advertises routing through guardJwt.
|
|
18
|
+
var ALG_NONE_JWT = "eyJhbGciOiJub25lIn0.eyJzdWIiOiJ4In0.";
|
|
19
|
+
|
|
20
|
+
function expectThrows(label, fn, codeMatch) {
|
|
21
|
+
var threw = null;
|
|
22
|
+
try { fn(); } catch (e) { threw = e; }
|
|
23
|
+
check(label, !!threw && (threw.code || "") === codeMatch);
|
|
24
|
+
return threw;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function testValidate() {
|
|
28
|
+
// Benign bundle (bearer token + cookie header) is clean under balanced.
|
|
29
|
+
var okRv = b.guardAuth.validate(
|
|
30
|
+
{ jwtToken: BENIGN_JWT, cookieHeader: "sid=abc123; theme=dark" },
|
|
31
|
+
{ profile: "balanced" });
|
|
32
|
+
check("guardAuth.validate benign ok", okRv.ok === true);
|
|
33
|
+
check("guardAuth.validate benign no issues", okRv.issues.length === 0);
|
|
34
|
+
|
|
35
|
+
// Hostile: alg=none token routed to guardJwt, tagged source="jwt".
|
|
36
|
+
var jwtRv = b.guardAuth.validate({ jwtToken: ALG_NONE_JWT }, { profile: "strict" });
|
|
37
|
+
check("guardAuth.validate alg=none refused", jwtRv.ok === false);
|
|
38
|
+
check("guardAuth.validate alg=none source=jwt",
|
|
39
|
+
jwtRv.issues.some(function (i) { return i.source === "jwt"; }));
|
|
40
|
+
check("guardAuth.validate alg=none alg-none rule",
|
|
41
|
+
jwtRv.issues.some(function (i) { return i.ruleId === "jwt.alg-none"; }));
|
|
42
|
+
|
|
43
|
+
// Strict requireAtLeastOne — an empty bundle is refused so an operator
|
|
44
|
+
// can't wire a gate onto a credential-less request.
|
|
45
|
+
var emptyRv = b.guardAuth.validate({}, { profile: "strict" });
|
|
46
|
+
check("guardAuth.validate empty strict refused", emptyRv.ok === false);
|
|
47
|
+
check("guardAuth.validate empty no-auth-input",
|
|
48
|
+
emptyRv.issues.some(function (i) { return i.ruleId === "auth.no-auth-input"; }));
|
|
49
|
+
|
|
50
|
+
// CL+TE request-header smuggling (RFC 9112 §6.1), source="headers".
|
|
51
|
+
var smugRv = b.guardAuth.validate(
|
|
52
|
+
{ requestHeaders: { "content-length": "10", "transfer-encoding": "chunked" } },
|
|
53
|
+
{ profile: "strict" });
|
|
54
|
+
check("guardAuth.validate smuggling refused", smugRv.ok === false);
|
|
55
|
+
check("guardAuth.validate smuggling source=headers",
|
|
56
|
+
smugRv.issues.some(function (i) {
|
|
57
|
+
return i.source === "headers" && i.ruleId === "auth.header-smuggling-cl-te";
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function testSanitize() {
|
|
62
|
+
// Clean bundle passes through unchanged (identity transform), and the
|
|
63
|
+
// returned bundle re-validates clean.
|
|
64
|
+
var input = { jwtToken: BENIGN_JWT, cookieHeader: "sid=abc123; theme=dark" };
|
|
65
|
+
var clean = b.guardAuth.sanitize(input, { profile: "balanced" });
|
|
66
|
+
check("guardAuth.sanitize benign returns bundle", clean === input);
|
|
67
|
+
check("guardAuth.sanitize benign revalidates ok",
|
|
68
|
+
b.guardAuth.validate(clean, { profile: "balanced" }).ok === true);
|
|
69
|
+
|
|
70
|
+
// Hostile: a CL+TE smuggling bundle is REFUSED (thrown), never returned —
|
|
71
|
+
// the auth bundle can't be repaired in transit, so neutralization is
|
|
72
|
+
// refusal, not a silently-mutated pass-through.
|
|
73
|
+
var attack = { requestHeaders: { "content-length": "10", "transfer-encoding": "chunked" } };
|
|
74
|
+
var err = expectThrows("guardAuth.sanitize smuggling throws",
|
|
75
|
+
function () { b.guardAuth.sanitize(attack, { profile: "strict" }); },
|
|
76
|
+
"auth.header-smuggling-cl-te");
|
|
77
|
+
check("guardAuth.sanitize smuggling GuardAuthError",
|
|
78
|
+
err instanceof b.guardAuth.GuardAuthError);
|
|
79
|
+
|
|
80
|
+
// Hostile: alg=none bearer token refuses at sanitize too.
|
|
81
|
+
expectThrows("guardAuth.sanitize alg=none throws",
|
|
82
|
+
function () { b.guardAuth.sanitize({ jwtToken: ALG_NONE_JWT }, { profile: "strict" }); },
|
|
83
|
+
"jwt.alg-none");
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function testGate() {
|
|
87
|
+
var authGate = b.guardAuth.gate({ profile: "strict" });
|
|
88
|
+
|
|
89
|
+
// Hostile alg=none bundle → refuse.
|
|
90
|
+
var refuse = await authGate.check({ authBundle: { jwtToken: ALG_NONE_JWT } });
|
|
91
|
+
check("guardAuth.gate alg=none action=refuse", refuse.action === "refuse");
|
|
92
|
+
check("guardAuth.gate alg=none ok=false", refuse.ok === false);
|
|
93
|
+
check("guardAuth.gate alg=none issue source=jwt",
|
|
94
|
+
refuse.issues.some(function (i) { return i.source === "jwt"; }));
|
|
95
|
+
|
|
96
|
+
// Benign bearer token → serve.
|
|
97
|
+
var serve = await authGate.check({ authBundle: { jwtToken: BENIGN_JWT } });
|
|
98
|
+
check("guardAuth.gate benign action=serve", serve.action === "serve");
|
|
99
|
+
check("guardAuth.gate benign ok=true", serve.ok === true);
|
|
100
|
+
|
|
101
|
+
// No bundle on ctx → serve (nothing to gate; other middleware owns the
|
|
102
|
+
// absent-credential decision).
|
|
103
|
+
var none = await authGate.check({});
|
|
104
|
+
check("guardAuth.gate no-bundle action=serve", none.action === "serve");
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async function run() {
|
|
108
|
+
testValidate();
|
|
109
|
+
testSanitize();
|
|
110
|
+
await testGate();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
module.exports = { run: run };
|
|
114
|
+
if (require.main === module) {
|
|
115
|
+
run().then(function () { console.log("OK"); })
|
|
116
|
+
.catch(function (e) { console.error(e); process.exit(1); });
|
|
117
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (c) blamejs contributors
|
|
3
|
+
"use strict";
|
|
4
|
+
|
|
5
|
+
var helpers = require("../helpers");
|
|
6
|
+
var b = helpers.b;
|
|
7
|
+
var check = helpers.check;
|
|
8
|
+
|
|
9
|
+
function expectThrows(label, fn, codeMatch) {
|
|
10
|
+
var threw = null;
|
|
11
|
+
try { fn(); } catch (e) { threw = e; }
|
|
12
|
+
check(label, !!threw && (threw.code || "") === codeMatch);
|
|
13
|
+
return threw;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function _kinds(rv) {
|
|
17
|
+
return rv.issues.map(function (i) { return i.kind; });
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function testValidate() {
|
|
21
|
+
// Benign: a public /24 with zero host bits is clean under strict.
|
|
22
|
+
var okRv = b.guardCidr.validate("8.8.8.0/24", { profile: "strict" });
|
|
23
|
+
check("guardCidr.validate benign ok", okRv.ok === true);
|
|
24
|
+
check("guardCidr.validate benign no issues", okRv.issues.length === 0);
|
|
25
|
+
|
|
26
|
+
// Hostile: RFC 1918 private range — refused as reserved-range under strict.
|
|
27
|
+
var reserved = b.guardCidr.validate("10.0.0.0/8", { profile: "strict" });
|
|
28
|
+
check("guardCidr.validate reserved refused", reserved.ok === false);
|
|
29
|
+
check("guardCidr.validate reserved-range kind",
|
|
30
|
+
_kinds(reserved).indexOf("reserved-range") !== -1);
|
|
31
|
+
|
|
32
|
+
// Mask out of range for IPv4 (>32) — mask-cap high.
|
|
33
|
+
var maskCap = b.guardCidr.validate("8.8.8.0/40", { profile: "strict" });
|
|
34
|
+
check("guardCidr.validate mask-cap refused", maskCap.ok === false);
|
|
35
|
+
check("guardCidr.validate mask-cap kind",
|
|
36
|
+
_kinds(maskCap).indexOf("mask-cap") !== -1);
|
|
37
|
+
|
|
38
|
+
// Not a valid IPv4 dotted-decimal or IPv6 hex-group form — address-shape.
|
|
39
|
+
var badShape = b.guardCidr.validate("not.an.ip/24", { profile: "strict" });
|
|
40
|
+
check("guardCidr.validate address-shape refused", badShape.ok === false);
|
|
41
|
+
check("guardCidr.validate address-shape kind",
|
|
42
|
+
_kinds(badShape).indexOf("address-shape") !== -1);
|
|
43
|
+
|
|
44
|
+
// RFC 4291 §2.2 — a "::" adjacent to a full 8 explicit groups compresses zero
|
|
45
|
+
// groups and is malformed IPv6 (net.isIP rejects it). The parser must not
|
|
46
|
+
// admit the non-canonical spelling into CIDR matching as a valid address.
|
|
47
|
+
["1:2:3:4:5:6:7:8::/64", "::1:2:3:4:5:6:7:8/64", "1:2:3:4:5:6:7::8/64"]
|
|
48
|
+
.forEach(function (c) {
|
|
49
|
+
var zc = b.guardCidr.validate(c, { profile: "strict" });
|
|
50
|
+
check("guardCidr.validate rejects zero-group '::' " + c, zc.ok === false);
|
|
51
|
+
check("guardCidr.validate zero-group '::' is address-shape " + c,
|
|
52
|
+
_kinds(zc).indexOf("address-shape") !== -1);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Host bits set under the mask — network-misaligned (common typo class).
|
|
56
|
+
var misaligned = b.guardCidr.validate("10.0.0.1/24", { profile: "strict" });
|
|
57
|
+
check("guardCidr.validate misaligned refused", misaligned.ok === false);
|
|
58
|
+
check("guardCidr.validate network-misaligned kind",
|
|
59
|
+
_kinds(misaligned).indexOf("network-misaligned") !== -1);
|
|
60
|
+
|
|
61
|
+
// IPv4-mapped IPv6 — dual-stack allowlist confusion (CVE-2021-22931 class).
|
|
62
|
+
var mapped = b.guardCidr.validate("::ffff:0:0/96", { profile: "strict" });
|
|
63
|
+
check("guardCidr.validate ipv4-mapped refused", mapped.ok === false);
|
|
64
|
+
check("guardCidr.validate ipv4-mapped-ipv6 kind",
|
|
65
|
+
_kinds(mapped).indexOf("ipv4-mapped-ipv6") !== -1);
|
|
66
|
+
|
|
67
|
+
// Bare IP with no /mask — refused under strict (reject-bare-ip).
|
|
68
|
+
var bare = b.guardCidr.validate("8.8.8.8", { profile: "strict" });
|
|
69
|
+
check("guardCidr.validate bare-ip refused", bare.ok === false);
|
|
70
|
+
check("guardCidr.validate bare-ip kind",
|
|
71
|
+
_kinds(bare).indexOf("bare-ip") !== -1);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function testSanitize() {
|
|
75
|
+
// Benign IPv6 with uppercase hex groups — permissive allows the
|
|
76
|
+
// documentation range; sanitize lowercases the hex so a case-varying
|
|
77
|
+
// allowlist key can't slip a duplicate past a case-sensitive matcher.
|
|
78
|
+
var lowered = b.guardCidr.sanitize("2001:DB8::/32", { profile: "permissive" });
|
|
79
|
+
check("guardCidr.sanitize lowercases IPv6", lowered === "2001:db8::/32");
|
|
80
|
+
check("guardCidr.sanitize output neutralized", lowered !== "2001:DB8::/32");
|
|
81
|
+
check("guardCidr.sanitize output revalidates ok",
|
|
82
|
+
b.guardCidr.validate(lowered, { profile: "permissive" }).ok === true);
|
|
83
|
+
|
|
84
|
+
// IPv4 has no canonical casing — returned unchanged when clean.
|
|
85
|
+
var v4 = b.guardCidr.sanitize("8.8.8.0/24", { profile: "strict" });
|
|
86
|
+
check("guardCidr.sanitize IPv4 unchanged", v4 === "8.8.8.0/24");
|
|
87
|
+
|
|
88
|
+
// Hostile: reserved private range REFUSED (thrown), never returned — an
|
|
89
|
+
// allowlist gate must not silently normalize a reserved range into place.
|
|
90
|
+
var err = expectThrows("guardCidr.sanitize reserved throws",
|
|
91
|
+
function () { b.guardCidr.sanitize("10.0.0.0/8", { profile: "strict" }); },
|
|
92
|
+
"cidr.reserved-range");
|
|
93
|
+
check("guardCidr.sanitize reserved GuardCidrError",
|
|
94
|
+
err instanceof b.guardCidr.GuardCidrError);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function testIpv6ReservedNibbleMisaligned() {
|
|
98
|
+
// IPv6 reserved-range membership is a bit-prefix relation, not a hex-nibble
|
|
99
|
+
// one. ULA fc00::/7 (7 bits) and link-local fe80::/10 (10 bits) do not fall
|
|
100
|
+
// on a 4-bit nibble boundary, so a hex-string startsWith("fc") / ("fe8")
|
|
101
|
+
// match silently misses every reserved address whose partial nibble differs
|
|
102
|
+
// — most importantly fd00::/8, the HALF of fc00::/7 that real deployments
|
|
103
|
+
// actually assign (RFC 4193 L=1). Under strict, reservedRangesPolicy is
|
|
104
|
+
// "reject", so a missed reserved range fails OPEN: a private/link-local
|
|
105
|
+
// range validates as clean and can be added to an allowlist as if public.
|
|
106
|
+
var strict = { profile: "strict" };
|
|
107
|
+
|
|
108
|
+
// fc00::/7 ULA — BOTH halves must be caught. fd00::/8 is the assigned one.
|
|
109
|
+
["fc00::/8", "fd00::/8", "fdab:cd12::/32"].forEach(function (c) {
|
|
110
|
+
var rv = b.guardCidr.validate(c, strict);
|
|
111
|
+
check("guardCidr ULA " + c + " refused", rv.ok === false);
|
|
112
|
+
check("guardCidr ULA " + c + " reserved-range kind",
|
|
113
|
+
_kinds(rv).indexOf("reserved-range") !== -1);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
// fe80::/10 link-local — the whole /10 must be caught, not just fe8x.
|
|
117
|
+
["fe80::/16", "fe90::/16", "fea0::/16", "feb0::/16"].forEach(function (c) {
|
|
118
|
+
var rv = b.guardCidr.validate(c, strict);
|
|
119
|
+
check("guardCidr link-local " + c + " refused", rv.ok === false);
|
|
120
|
+
check("guardCidr link-local " + c + " reserved-range kind",
|
|
121
|
+
_kinds(rv).indexOf("reserved-range") !== -1);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// Regression — the fix must not OVER-match. fec0::/10 (deprecated site-local)
|
|
125
|
+
// is NOT in the reserved table and shares only the fe8x visual prefix's
|
|
126
|
+
// sibling nibble; it must stay clean, as must genuine public space.
|
|
127
|
+
["fec0::/16", "2606:4700::/32", "2001:4860::/32"].forEach(function (c) {
|
|
128
|
+
var rv = b.guardCidr.validate(c, strict);
|
|
129
|
+
check("guardCidr public/site-local " + c + " clean", rv.ok === true);
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Regression — nibble-aligned reserved prefixes stay caught.
|
|
133
|
+
["ff02::1/128", "2001:db8::/32", "::1/128"].forEach(function (c) {
|
|
134
|
+
var rv = b.guardCidr.validate(c, strict);
|
|
135
|
+
check("guardCidr aligned-reserved " + c + " refused", rv.ok === false);
|
|
136
|
+
check("guardCidr aligned-reserved " + c + " reserved-range kind",
|
|
137
|
+
_kinds(rv).indexOf("reserved-range") !== -1);
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
async function run() {
|
|
142
|
+
testValidate();
|
|
143
|
+
testSanitize();
|
|
144
|
+
testIpv6ReservedNibbleMisaligned();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
module.exports = { run: run };
|
|
148
|
+
if (require.main === module) {
|
|
149
|
+
run().then(function () { console.log("OK"); })
|
|
150
|
+
.catch(function (e) { console.error(e); process.exit(1); });
|
|
151
|
+
}
|