@blamejs/blamejs-shop 0.5.12 → 0.5.13
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 +2 -0
- package/lib/asset-manifest.json +1 -1
- 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
|
@@ -14,12 +14,25 @@
|
|
|
14
14
|
//
|
|
15
15
|
// Also the first dedicated behavioral coverage for the primitive (was only an
|
|
16
16
|
// export-presence check), driving the real create -> toJwt -> fromJwt path.
|
|
17
|
+
//
|
|
18
|
+
// This file additionally exercises the primitive's adversarial branches — the
|
|
19
|
+
// lowest-branch-coverage verifier in the tree. Every read path (create().get,
|
|
20
|
+
// fromJwt().get) MUST fail closed; every claim/compression/signature failure
|
|
21
|
+
// on the receive side MUST throw (never read as status 0 / valid). The signed
|
|
22
|
+
// adversarial tokens are minted with the framework's own b.auth.jwt.sign so
|
|
23
|
+
// they carry a PASSING signature — the refusal comes from the status-list
|
|
24
|
+
// claim/compression checks, not a parse failure.
|
|
17
25
|
|
|
18
|
-
var nodeCrypto = require("node:crypto");
|
|
19
26
|
var helpers = require("../helpers");
|
|
20
27
|
var b = helpers.b;
|
|
21
28
|
var check = helpers.check;
|
|
22
29
|
|
|
30
|
+
var nodeCrypto = require("node:crypto");
|
|
31
|
+
var zlib = require("node:zlib");
|
|
32
|
+
|
|
33
|
+
var C = require("../../lib/constants");
|
|
34
|
+
var bCrypto = require("../../lib/crypto");
|
|
35
|
+
|
|
23
36
|
async function run() {
|
|
24
37
|
check("b.auth.statusList.create is a function", typeof b.auth.statusList.create === "function");
|
|
25
38
|
check("b.auth.statusList.fromJwt is a function", typeof b.auth.statusList.fromJwt === "function");
|
|
@@ -27,6 +40,24 @@ async function run() {
|
|
|
27
40
|
// ML-DSA-87 is available on the Node 24 CI floor (SLH-DSA keygen is Node-26+).
|
|
28
41
|
var kp = nodeCrypto.generateKeyPairSync("ml-dsa-87");
|
|
29
42
|
|
|
43
|
+
// ---- error-capture helpers (avoid a try/catch pyramid) ----
|
|
44
|
+
function syncCode(fn) { try { fn(); return "NO-THROW"; } catch (e) { return e && e.code; } }
|
|
45
|
+
async function asyncCode(fn) { try { await fn(); return "NO-THROW"; } catch (e) { return e && e.code; } }
|
|
46
|
+
|
|
47
|
+
// Mint a status-list token with an operator-crafted status_list claim, signed
|
|
48
|
+
// with the issuer key + the "statuslist+jwt" typ (so fromJwt's typ bind and
|
|
49
|
+
// signature check pass, and the refusal is on the crafted claim body).
|
|
50
|
+
async function signSL(statusListClaim) {
|
|
51
|
+
var claims = { iss: "https://issuer.example", sub: "https://issuer.example/sl/1" };
|
|
52
|
+
if (statusListClaim !== undefined) claims.status_list = statusListClaim;
|
|
53
|
+
return await b.auth.jwt.sign(claims, {
|
|
54
|
+
privateKey: kp.privateKey, algorithm: "ML-DSA-87", typ: "statuslist+jwt",
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
var verifyOpts = {
|
|
58
|
+
publicKey: kp.publicKey, algorithms: ["ML-DSA-87"], expectedIssuer: "https://issuer.example",
|
|
59
|
+
};
|
|
60
|
+
|
|
30
61
|
var list = b.auth.statusList.create({ size: 64, bits: 1 });
|
|
31
62
|
list.set(5, 1); // revoke index 5
|
|
32
63
|
|
|
@@ -82,6 +113,217 @@ async function run() {
|
|
|
82
113
|
try { parsed.list.get(3.5); } catch (e) { fracThrew = e.code; }
|
|
83
114
|
check("fromJwt().get fails closed on a non-integer index", fracThrew === "status-list/bad-index");
|
|
84
115
|
|
|
116
|
+
// ---- exported status-value constants (draft §4.2 semantics) ----
|
|
117
|
+
var SL = b.auth.statusList;
|
|
118
|
+
check("STATUS_VALID constant is 0", SL.STATUS_VALID === 0);
|
|
119
|
+
check("STATUS_INVALID constant is 1", SL.STATUS_INVALID === 1);
|
|
120
|
+
check("STATUS_SUSPENDED constant is 2", SL.STATUS_SUSPENDED === 2);
|
|
121
|
+
check("STATUS_APPLICATION_SPECIFIC constant is 3", SL.STATUS_APPLICATION_SPECIFIC === 3);
|
|
122
|
+
|
|
123
|
+
// ---- bit-width round trips (1/2/4/8) drive both _setAt/_getAt paths ----
|
|
124
|
+
// bits=2/4 exercise the sub-byte packing; bits=8 exercises the byte fast path.
|
|
125
|
+
var widths = [1, 2, 4, 8];
|
|
126
|
+
for (var wi = 0; wi < widths.length; wi += 1) {
|
|
127
|
+
var wbits = widths[wi];
|
|
128
|
+
var wmax = (1 << wbits) - 1;
|
|
129
|
+
var wlist = b.auth.statusList.create({ size: 40, bits: wbits });
|
|
130
|
+
wlist.set(1, 1); // a set-but-not-max status at a sub-byte offset
|
|
131
|
+
wlist.set(9, wmax); // the ceiling status for this width
|
|
132
|
+
check("create().get reads back the set status (bits=" + wbits + ")",
|
|
133
|
+
wlist.get(1) === 1 && wlist.get(9) === wmax && wlist.get(0) === 0);
|
|
134
|
+
check("create().bits reports the chosen width (bits=" + wbits + ")", wlist.bits === wbits);
|
|
135
|
+
|
|
136
|
+
var wtok = await wlist.toJwt({
|
|
137
|
+
issuer: "https://issuer.example", subject: "https://issuer.example/sl/1",
|
|
138
|
+
privateKey: kp.privateKey, algorithm: "ML-DSA-87",
|
|
139
|
+
});
|
|
140
|
+
var wparsed = await b.auth.statusList.fromJwt(wtok, verifyOpts);
|
|
141
|
+
check("fromJwt round-trips every status across the byte boundary (bits=" + wbits + ")",
|
|
142
|
+
wparsed.list.get(1) === 1 && wparsed.list.get(9) === wmax && wparsed.list.get(0) === 0);
|
|
143
|
+
check("fromJwt reports the token-declared bit width (bits=" + wbits + ")",
|
|
144
|
+
wparsed.list.bits === wbits);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Status semantics: a 2-bit list stores VALID/INVALID/SUSPENDED/APPLICATION_SPECIFIC.
|
|
148
|
+
var semList = b.auth.statusList.create({ size: 8, bits: 2 });
|
|
149
|
+
semList.set(0, SL.STATUS_VALID);
|
|
150
|
+
semList.set(1, SL.STATUS_INVALID);
|
|
151
|
+
semList.set(2, SL.STATUS_SUSPENDED);
|
|
152
|
+
semList.set(3, SL.STATUS_APPLICATION_SPECIFIC);
|
|
153
|
+
var semParsed = await b.auth.statusList.fromJwt(await semList.toJwt({
|
|
154
|
+
issuer: "https://issuer.example", subject: "https://issuer.example/sl/1",
|
|
155
|
+
privateKey: kp.privateKey, algorithm: "ML-DSA-87",
|
|
156
|
+
}), verifyOpts);
|
|
157
|
+
check("2-bit list round-trips all four status values (0/1/2/3)",
|
|
158
|
+
semParsed.list.get(0) === 0 && semParsed.list.get(1) === 1 &&
|
|
159
|
+
semParsed.list.get(2) === 2 && semParsed.list.get(3) === 3);
|
|
160
|
+
|
|
161
|
+
// 8-bit list holds arbitrary application-specific status bytes (draft allows
|
|
162
|
+
// an operator-defined status space when bits=8).
|
|
163
|
+
var byteList = b.auth.statusList.create({ size: 4, bits: 8 });
|
|
164
|
+
byteList.set(0, 200);
|
|
165
|
+
byteList.set(1, 255); // the 8-bit ceiling
|
|
166
|
+
var byteParsed = await b.auth.statusList.fromJwt(await byteList.toJwt({
|
|
167
|
+
issuer: "https://issuer.example", subject: "https://issuer.example/sl/1",
|
|
168
|
+
privateKey: kp.privateKey, algorithm: "ML-DSA-87",
|
|
169
|
+
}), verifyOpts);
|
|
170
|
+
check("8-bit list round-trips arbitrary status bytes",
|
|
171
|
+
byteParsed.list.get(0) === 200 && byteParsed.list.get(1) === 255);
|
|
172
|
+
|
|
173
|
+
// ---- fill: prebuild every entry to a non-zero status ----
|
|
174
|
+
var filled = b.auth.statusList.create({ size: 12, bits: 2, fill: SL.STATUS_SUSPENDED });
|
|
175
|
+
check("create(fill) sets every entry to the fill status",
|
|
176
|
+
filled.get(0) === 2 && filled.get(11) === 2);
|
|
177
|
+
var fillZero = b.auth.statusList.create({ size: 4, bits: 1, fill: 0 }); // fill=0 is the no-op branch
|
|
178
|
+
check("create(fill=0) leaves every entry valid", fillZero.get(0) === 0 && fillZero.get(3) === 0);
|
|
179
|
+
|
|
180
|
+
// ---- snapshot() on both the issuer and relying-party list objects ----
|
|
181
|
+
var issuerSnap = list.snapshot();
|
|
182
|
+
check("create().snapshot() returns { size, bits, bytes-copy }",
|
|
183
|
+
issuerSnap.size === 64 && issuerSnap.bits === 1 &&
|
|
184
|
+
Buffer.isBuffer(issuerSnap.bytes) && issuerSnap.bytes.length === 8);
|
|
185
|
+
issuerSnap.bytes[0] = 0xff; // snapshot is a copy — mutating it must not corrupt the list
|
|
186
|
+
check("create().snapshot() bytes are a defensive copy", list.get(0) === 0);
|
|
187
|
+
var rpSnap = parsed.list.snapshot();
|
|
188
|
+
check("fromJwt().snapshot() returns { size, bits, bytes-copy }",
|
|
189
|
+
rpSnap.size === 64 && rpSnap.bits === 1 && Buffer.isBuffer(rpSnap.bytes));
|
|
190
|
+
|
|
191
|
+
// ---- create() input validation (config-time: THROW) ----
|
|
192
|
+
check("create rejects a non-object opts", syncCode(function () { b.auth.statusList.create(null); }) === "BAD_OPT");
|
|
193
|
+
check("create rejects size=0", syncCode(function () { b.auth.statusList.create({ size: 0 }); }) === "status-list/bad-size");
|
|
194
|
+
check("create rejects a negative size", syncCode(function () { b.auth.statusList.create({ size: -8 }); }) === "status-list/bad-size");
|
|
195
|
+
check("create rejects a fractional size", syncCode(function () { b.auth.statusList.create({ size: 3.5 }); }) === "status-list/bad-size");
|
|
196
|
+
check("create rejects a non-number size", syncCode(function () { b.auth.statusList.create({ size: "8" }); }) === "status-list/bad-size");
|
|
197
|
+
check("create rejects a non-finite size", syncCode(function () { b.auth.statusList.create({ size: Infinity }); }) === "status-list/bad-size");
|
|
198
|
+
check("create rejects an unsupported bit width", syncCode(function () { b.auth.statusList.create({ size: 8, bits: 3 }); }) === "status-list/bad-bits");
|
|
199
|
+
check("create rejects a fill above the bit ceiling", syncCode(function () { b.auth.statusList.create({ size: 8, bits: 1, fill: 2 }); }) === "status-list/bad-status");
|
|
200
|
+
var unknownOptErr = null;
|
|
201
|
+
try { b.auth.statusList.create({ size: 8, boom: 1 }); } catch (e) { unknownOptErr = e; }
|
|
202
|
+
check("create rejects an unknown option key",
|
|
203
|
+
unknownOptErr !== null && /unknown option 'boom'/.test(unknownOptErr.message));
|
|
204
|
+
|
|
205
|
+
// ---- set() input validation (idx bounds + status ceiling) ----
|
|
206
|
+
var setList = b.auth.statusList.create({ size: 8, bits: 1 });
|
|
207
|
+
check("set rejects idx >= size", syncCode(function () { setList.set(8, 1); }) === "status-list/bad-index");
|
|
208
|
+
check("set rejects a negative idx", syncCode(function () { setList.set(-1, 1); }) === "status-list/bad-index");
|
|
209
|
+
check("set rejects a fractional idx", syncCode(function () { setList.set(2.5, 1); }) === "status-list/bad-index");
|
|
210
|
+
check("set rejects a status above the ceiling", syncCode(function () { setList.set(0, 2); }) === "status-list/bad-status");
|
|
211
|
+
check("set rejects a negative status", syncCode(function () { setList.set(0, -1); }) === "status-list/bad-status");
|
|
212
|
+
check("set rejects a fractional status", syncCode(function () { setList.set(0, 1.5); }) === "status-list/bad-status");
|
|
213
|
+
check("set rejects a NaN status", syncCode(function () { setList.set(0, NaN); }) === "status-list/bad-status");
|
|
214
|
+
check("set rejects a non-number status", syncCode(function () { setList.set(0, "1"); }) === "status-list/bad-status");
|
|
215
|
+
check("get rejects a non-number idx", syncCode(function () { setList.get("0"); }) === "status-list/bad-index");
|
|
216
|
+
|
|
217
|
+
// ---- toJwt() input validation ----
|
|
218
|
+
check("toJwt rejects a non-object opts", await asyncCode(function () { return setList.toJwt(null); }) === "BAD_OPT");
|
|
219
|
+
check("toJwt rejects a missing issuer", await asyncCode(function () { return setList.toJwt({ subject: "s", privateKey: kp.privateKey, algorithm: "ML-DSA-87" }); }) === "status-list/bad-issuer");
|
|
220
|
+
check("toJwt rejects an empty issuer", await asyncCode(function () { return setList.toJwt({ issuer: "", subject: "s", privateKey: kp.privateKey, algorithm: "ML-DSA-87" }); }) === "status-list/bad-issuer");
|
|
221
|
+
check("toJwt rejects a missing subject", await asyncCode(function () { return setList.toJwt({ issuer: "i", privateKey: kp.privateKey, algorithm: "ML-DSA-87" }); }) === "status-list/bad-subject");
|
|
222
|
+
|
|
223
|
+
// toJwt stamps the optional ttl cache hint only when it is a number.
|
|
224
|
+
var ttlToken = await setList.toJwt({
|
|
225
|
+
issuer: "https://issuer.example", subject: "s",
|
|
226
|
+
privateKey: kp.privateKey, algorithm: "ML-DSA-87", ttl: 300,
|
|
227
|
+
});
|
|
228
|
+
var ttlClaims = JSON.parse(Buffer.from(ttlToken.split(".")[1], "base64url").toString("utf8"));
|
|
229
|
+
check("toJwt(ttl) writes the ttl claim", ttlClaims.ttl === 300);
|
|
230
|
+
var noTtlClaims = JSON.parse(Buffer.from(token.split(".")[1], "base64url").toString("utf8"));
|
|
231
|
+
check("toJwt without ttl omits the ttl claim", noTtlClaims.ttl === undefined);
|
|
232
|
+
|
|
233
|
+
// toJwt fails closed when the issuer's own compressed list exceeds the 1 MiB
|
|
234
|
+
// on-the-wire cap (draft expects large lists to shard). Random bytes are
|
|
235
|
+
// incompressible, so a >1 MiB 8-bit list deflates to >1 MiB.
|
|
236
|
+
var oversize = C.BYTES.mib(1) + 512;
|
|
237
|
+
var bigList = b.auth.statusList.create({ size: oversize, bits: 8 });
|
|
238
|
+
var rnd = nodeCrypto.randomBytes(oversize);
|
|
239
|
+
for (var bi = 0; bi < oversize; bi += 1) { if (rnd[bi] !== 0) bigList.set(bi, rnd[bi]); }
|
|
240
|
+
check("toJwt refuses a compressed list larger than the wire cap",
|
|
241
|
+
await asyncCode(function () {
|
|
242
|
+
return bigList.toJwt({ issuer: "i", subject: "s", privateKey: kp.privateKey, algorithm: "ML-DSA-87" });
|
|
243
|
+
}) === "status-list/too-large");
|
|
244
|
+
|
|
245
|
+
// ---- fromJwt() input validation ----
|
|
246
|
+
check("fromJwt rejects a non-object opts", await asyncCode(function () { return b.auth.statusList.fromJwt(token, null); }) === "BAD_OPT");
|
|
247
|
+
check("fromJwt rejects an empty-string token", await asyncCode(function () { return b.auth.statusList.fromJwt("", verifyOpts); }) === "status-list/bad-token");
|
|
248
|
+
check("fromJwt rejects a non-string token", await asyncCode(function () { return b.auth.statusList.fromJwt(12345, verifyOpts); }) === "status-list/bad-token");
|
|
249
|
+
|
|
250
|
+
// ---- fromJwt() adversarial (signature-PASSING) claim + compression bodies ----
|
|
251
|
+
// Every token below carries a valid issuer signature + the correct typ; the
|
|
252
|
+
// refusal comes from the status-list claim/compression check, not a parse or
|
|
253
|
+
// signature failure — a status read that fails OPEN here is a revocation bypass.
|
|
254
|
+
var noStatusListToken = await signSL(undefined);
|
|
255
|
+
var lstNotStringToken = await signSL({ bits: 1, lst: 123 });
|
|
256
|
+
var badBitsToken = await signSL({ bits: 3, lst: bCrypto.toBase64Url(zlib.deflateRawSync(Buffer.alloc(4))) });
|
|
257
|
+
var badBase64Token = await signSL({ bits: 1, lst: "@@@not-base64@@@" });
|
|
258
|
+
// A DETERMINISTIC non-deflate payload: an all-0xFF buffer's first byte has
|
|
259
|
+
// deflate BTYPE=3 (the reserved/invalid block type), so inflateRawSync always
|
|
260
|
+
// rejects it. (Random bytes are NOT safe here — ~0.5% of random 64-byte
|
|
261
|
+
// sequences are a valid-enough raw-deflate stream to inflate, which flaked
|
|
262
|
+
// this check on CI.)
|
|
263
|
+
var garbageInflateToken = await signSL({ bits: 1, lst: bCrypto.toBase64Url(Buffer.alloc(64, 0xff)) });
|
|
264
|
+
// Decompression bomb: a tiny compressed payload that inflates past the 8x cap
|
|
265
|
+
// (MAX_LIST_BYTES * 8) — zeros compress to a few KB but inflate to >8 MiB.
|
|
266
|
+
var bombToken = await signSL({
|
|
267
|
+
bits: 1, lst: bCrypto.toBase64Url(zlib.deflateRawSync(Buffer.alloc(C.BYTES.mib(1) * 8 + 64))),
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
check("fromJwt rejects a token with no status_list claim",
|
|
271
|
+
await asyncCode(function () { return b.auth.statusList.fromJwt(noStatusListToken, verifyOpts); }) === "status-list/bad-claims");
|
|
272
|
+
check("fromJwt rejects a status_list whose lst is not a string",
|
|
273
|
+
await asyncCode(function () { return b.auth.statusList.fromJwt(lstNotStringToken, verifyOpts); }) === "status-list/bad-claims");
|
|
274
|
+
check("fromJwt rejects a status_list with an unsupported bit width",
|
|
275
|
+
await asyncCode(function () { return b.auth.statusList.fromJwt(badBitsToken, verifyOpts); }) === "status-list/bad-bits");
|
|
276
|
+
check("fromJwt rejects an lst that is not valid base64url",
|
|
277
|
+
await asyncCode(function () { return b.auth.statusList.fromJwt(badBase64Token, verifyOpts); }) === "status-list/bad-base64");
|
|
278
|
+
check("fromJwt rejects an lst that base64-decodes to non-deflate garbage",
|
|
279
|
+
await asyncCode(function () { return b.auth.statusList.fromJwt(garbageInflateToken, verifyOpts); }) === "status-list/inflate-failed");
|
|
280
|
+
// The bomb must be refused, not expanded — inflateRawSync's maxOutputLength
|
|
281
|
+
// fails closed. (fromJwt's own >1 MiB compressed-size check is unreachable
|
|
282
|
+
// through this path: jwt.verify caps the JWT payload at 1 MiB via safeJson
|
|
283
|
+
// before status-list decodes the lst, so the base64 lst can never carry
|
|
284
|
+
// >1 MiB of compressed bytes. The inflate output cap below is the live guard.)
|
|
285
|
+
check("fromJwt refuses a decompression bomb (inflate output cap fails closed)",
|
|
286
|
+
await asyncCode(function () { return b.auth.statusList.fromJwt(bombToken, verifyOpts); }) === "status-list/inflate-failed");
|
|
287
|
+
|
|
288
|
+
// ---- fromJwt() signature / clock failures propagate from the JWT verifier ----
|
|
289
|
+
var otherKp = nodeCrypto.generateKeyPairSync("ml-dsa-87");
|
|
290
|
+
check("fromJwt rejects a token signed by the wrong key",
|
|
291
|
+
await asyncCode(function () {
|
|
292
|
+
return b.auth.statusList.fromJwt(token, { publicKey: otherKp.publicKey, algorithms: ["ML-DSA-87"] });
|
|
293
|
+
}) === "auth-jwt/invalid-signature");
|
|
294
|
+
|
|
295
|
+
var tamperedPayload = Buffer.from(JSON.stringify({
|
|
296
|
+
iss: "https://attacker.example", sub: "s",
|
|
297
|
+
status_list: { bits: 1, lst: bCrypto.toBase64Url(zlib.deflateRawSync(Buffer.alloc(1))) },
|
|
298
|
+
})).toString("base64url");
|
|
299
|
+
var tokenParts = token.split(".");
|
|
300
|
+
var tamperedToken = tokenParts[0] + "." + tamperedPayload + "." + tokenParts[2];
|
|
301
|
+
check("fromJwt rejects a token whose payload was tampered after signing",
|
|
302
|
+
await asyncCode(function () { return b.auth.statusList.fromJwt(tamperedToken, verifyOpts); }) === "auth-jwt/invalid-signature");
|
|
303
|
+
|
|
304
|
+
var clock0 = 1700000000000;
|
|
305
|
+
var expiredToken = await setList.toJwt({
|
|
306
|
+
issuer: "https://issuer.example", subject: "s",
|
|
307
|
+
privateKey: kp.privateKey, algorithm: "ML-DSA-87", expiresInSec: 60, now: clock0,
|
|
308
|
+
});
|
|
309
|
+
check("fromJwt rejects an expired status-list token",
|
|
310
|
+
await asyncCode(function () {
|
|
311
|
+
return b.auth.statusList.fromJwt(expiredToken, {
|
|
312
|
+
publicKey: kp.publicKey, algorithms: ["ML-DSA-87"], now: clock0 + C.TIME.hours(1),
|
|
313
|
+
});
|
|
314
|
+
}) === "auth-jwt/expired");
|
|
315
|
+
|
|
316
|
+
var notYetToken = await setList.toJwt({
|
|
317
|
+
issuer: "https://issuer.example", subject: "s",
|
|
318
|
+
privateKey: kp.privateKey, algorithm: "ML-DSA-87", notBeforeSec: 3600, now: clock0,
|
|
319
|
+
});
|
|
320
|
+
check("fromJwt rejects a not-yet-valid status-list token",
|
|
321
|
+
await asyncCode(function () {
|
|
322
|
+
return b.auth.statusList.fromJwt(notYetToken, {
|
|
323
|
+
publicKey: kp.publicKey, algorithms: ["ML-DSA-87"], now: clock0,
|
|
324
|
+
});
|
|
325
|
+
}) === "auth-jwt/not-yet-valid");
|
|
326
|
+
|
|
85
327
|
console.log("OK — auth status-list (" + helpers.getChecks() + " checks)");
|
|
86
328
|
}
|
|
87
329
|
|