@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
|
@@ -786,6 +786,257 @@ function testVerifyLoadableWithoutHttpClient() {
|
|
|
786
786
|
code === 0);
|
|
787
787
|
}
|
|
788
788
|
|
|
789
|
+
// A signature's authenticated timestamp is `t=<seconds>` — the canonical
|
|
790
|
+
// decimal integer the signer emits (Math.floor(now/1000) String'd). The
|
|
791
|
+
// verifier re-composes the signed string from Number(parsed.t), so validating
|
|
792
|
+
// only the post-coercion value (isNonNegativeFiniteInt) let every
|
|
793
|
+
// Number()-equivalent encoding through — a trailing ".0", scientific
|
|
794
|
+
// ("1.7e9"), hex ("0x..."), a leading "0"/"+"/whitespace — each of which
|
|
795
|
+
// re-canonicalizes into the signed string and RE-VERIFIES, making the
|
|
796
|
+
// authenticated t= field malleable (one captured header mutates into many
|
|
797
|
+
// distinct-but-valid headers, desyncing any dedup/audit layer keyed on the
|
|
798
|
+
// raw header or raw t value from the verifier's parsed timestamp). Every
|
|
799
|
+
// non-canonical form must be refused BAD_TIMESTAMP; the canonical form must
|
|
800
|
+
// still verify (guards against over-strict rejection breaking the round-trip).
|
|
801
|
+
async function testTimestampNonCanonicalRejected() {
|
|
802
|
+
var s = b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: "s" } });
|
|
803
|
+
var v = b.webhook.verifier({ algo: "hmac-sha3-512", keys: { v1: "s" } });
|
|
804
|
+
var signed = s.sign("body");
|
|
805
|
+
var tsCanon = String(signed.timestamp);
|
|
806
|
+
var id = signed.id, sig = signed.signature;
|
|
807
|
+
|
|
808
|
+
function hdr(tStr) { return "t=" + tStr + ",id=" + id + ",v1=" + sig; }
|
|
809
|
+
async function codeFor(tStr) {
|
|
810
|
+
try {
|
|
811
|
+
await v.verify({ body: "body", headers: { "Webhook-Signature": hdr(tStr) } });
|
|
812
|
+
return "ACCEPTED";
|
|
813
|
+
} catch (e) { return e && e.code; }
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
var okInfo = await v.verify({ body: "body", headers: { "Webhook-Signature": hdr(tsCanon) } });
|
|
817
|
+
check("canonical t= still verifies", okInfo && okInfo.kid === "v1");
|
|
818
|
+
|
|
819
|
+
// Non-whitespace Number()-coercion forms only. Whitespace AROUND the
|
|
820
|
+
// comma-delimited segment is legitimately normalized by the header parser
|
|
821
|
+
// (RFC-style list whitespace tolerance), so it is a header-framing concern,
|
|
822
|
+
// not authenticated-field malleability.
|
|
823
|
+
var forms = [
|
|
824
|
+
["trailing .0", tsCanon + ".0"],
|
|
825
|
+
["decimal zeros", tsCanon + ".00000"],
|
|
826
|
+
["scientific", Number(tsCanon).toExponential()],
|
|
827
|
+
["hex 0x", "0x" + Number(tsCanon).toString(16)],
|
|
828
|
+
["leading zero", "0" + tsCanon],
|
|
829
|
+
["leading plus", "+" + tsCanon],
|
|
830
|
+
];
|
|
831
|
+
for (var i = 0; i < forms.length; i++) {
|
|
832
|
+
var code = await codeFor(forms[i][1]);
|
|
833
|
+
check("non-canonical t (" + forms[i][0] + ") -> BAD_TIMESTAMP (got " + code + ")",
|
|
834
|
+
code === "BAD_TIMESTAMP");
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
// pqcAlgorithm pin is a config-time guard that a key rotation didn't
|
|
839
|
+
// silently swap the underlying PQC algorithm. A matching pin constructs; a
|
|
840
|
+
// mismatched pin, an out-of-catalog value, or a pin paired with a non-pqc
|
|
841
|
+
// algo are all refused BAD_OPT. Covers _assertPqcAlgorithmMatches (both
|
|
842
|
+
// sides) + the algo-guard branch.
|
|
843
|
+
async function testPqcAlgorithmPin() {
|
|
844
|
+
var pair = b.crypto.generateSigningKeyPair("ml-dsa-87");
|
|
845
|
+
function expectThrow(label, fn) {
|
|
846
|
+
var threw = null; try { fn(); } catch (e) { threw = e; }
|
|
847
|
+
check(label, threw && threw.code === "BAD_OPT");
|
|
848
|
+
}
|
|
849
|
+
var sOk = b.webhook.signer({ algo: "pqc-pem",
|
|
850
|
+
keys: { v1: { privateKey: pair.privateKey, publicKey: pair.publicKey } }, pqcAlgorithm: "ml-dsa-87" });
|
|
851
|
+
check("signer: matching pqcAlgorithm pin constructs", typeof sOk.sign === "function");
|
|
852
|
+
var vOk = b.webhook.verifier({ algo: "pqc-pem", keys: { v1: pair.publicKey }, pqcAlgorithm: "ml-dsa-87" });
|
|
853
|
+
check("verifier: matching pqcAlgorithm pin constructs", typeof vOk.verify === "function");
|
|
854
|
+
|
|
855
|
+
expectThrow("signer: pqcAlgorithm mismatch -> BAD_OPT",
|
|
856
|
+
function () { b.webhook.signer({ algo: "pqc-pem",
|
|
857
|
+
keys: { v1: { privateKey: pair.privateKey, publicKey: pair.publicKey } }, pqcAlgorithm: "ml-dsa-65" }); });
|
|
858
|
+
expectThrow("verifier: pqcAlgorithm mismatch -> BAD_OPT",
|
|
859
|
+
function () { b.webhook.verifier({ algo: "pqc-pem", keys: { v1: pair.publicKey }, pqcAlgorithm: "ml-dsa-65" }); });
|
|
860
|
+
expectThrow("verifier: out-of-catalog pqcAlgorithm -> BAD_OPT",
|
|
861
|
+
function () { b.webhook.verifier({ algo: "pqc-pem", keys: { v1: pair.publicKey }, pqcAlgorithm: "rsa-2048" }); });
|
|
862
|
+
expectThrow("hmac algo + pqcAlgorithm -> BAD_OPT",
|
|
863
|
+
function () { b.webhook.verifier({ algo: "hmac-sha3-512", keys: { v1: "s" }, pqcAlgorithm: "ml-dsa-87" }); });
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
// Key-shape validation across both algos: PQC verifier key must be a PEM
|
|
867
|
+
// string/Buffer (not a number); PQC signer key must be { privateKey,
|
|
868
|
+
// publicKey } (not a partial object, not an array); HMAC key must be a
|
|
869
|
+
// non-empty Buffer/string. All refuse BAD_OPT.
|
|
870
|
+
function testKeyShapeErrors() {
|
|
871
|
+
var pair = b.crypto.generateSigningKeyPair("ml-dsa-87");
|
|
872
|
+
function expectThrow(label, fn) {
|
|
873
|
+
var threw = null; try { fn(); } catch (e) { threw = e; }
|
|
874
|
+
check(label, threw && threw.code === "BAD_OPT");
|
|
875
|
+
}
|
|
876
|
+
expectThrow("PQC verifier key as number -> BAD_OPT",
|
|
877
|
+
function () { b.webhook.verifier({ algo: "pqc-pem", keys: { v1: 123 } }); });
|
|
878
|
+
expectThrow("PQC signer key missing publicKey -> BAD_OPT",
|
|
879
|
+
function () { b.webhook.signer({ algo: "pqc-pem", keys: { v1: { privateKey: pair.privateKey } } }); });
|
|
880
|
+
expectThrow("PQC signer key as array -> BAD_OPT",
|
|
881
|
+
function () { b.webhook.signer({ algo: "pqc-pem", keys: { v1: [pair.privateKey, pair.publicKey] } }); });
|
|
882
|
+
expectThrow("HMAC empty-string key -> BAD_OPT",
|
|
883
|
+
function () { b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: "" } }); });
|
|
884
|
+
expectThrow("HMAC key as number -> BAD_OPT",
|
|
885
|
+
function () { b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: 123 } }); });
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
// Signer call-site guards: signing with an unknown per-call kid, or an
|
|
889
|
+
// idGenerator that returns a header-unsafe / empty / non-string id, all
|
|
890
|
+
// refuse BAD_OPT (a comma/equals/whitespace id would corrupt the header
|
|
891
|
+
// grammar, so it fails closed).
|
|
892
|
+
function testSignerCallSiteErrors() {
|
|
893
|
+
function expectThrow(label, fn) {
|
|
894
|
+
var threw = null; try { fn(); } catch (e) { threw = e; }
|
|
895
|
+
check(label, threw && threw.code === "BAD_OPT");
|
|
896
|
+
}
|
|
897
|
+
var s = b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: "s" } });
|
|
898
|
+
expectThrow("sign unknown per-call kid -> BAD_OPT", function () { s.sign("body", { kid: "ghost" }); });
|
|
899
|
+
expectThrow("idGenerator returns comma id -> BAD_OPT",
|
|
900
|
+
function () { b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: "s" }, idGenerator: function () { return "bad,id"; } }).sign("x"); });
|
|
901
|
+
expectThrow("idGenerator returns empty id -> BAD_OPT",
|
|
902
|
+
function () { b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: "s" }, idGenerator: function () { return ""; } }).sign("x"); });
|
|
903
|
+
expectThrow("idGenerator returns non-string -> BAD_OPT",
|
|
904
|
+
function () { b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: "s" }, idGenerator: function () { return 42; } }).sign("x"); });
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
// verify() defensive input-shape guards (before any crypto): non-object
|
|
908
|
+
// input, non-object headers, missing headers, and a non-string/Buffer body
|
|
909
|
+
// each throw the typed refusal.
|
|
910
|
+
async function testVerifyInputShapes() {
|
|
911
|
+
var v = b.webhook.verifier({ algo: "hmac-sha3-512", keys: { v1: "s" } });
|
|
912
|
+
async function expectCode(label, input, code) {
|
|
913
|
+
var t = null; try { await v.verify(input); } catch (e) { t = e; }
|
|
914
|
+
check(label, t && t.code === code);
|
|
915
|
+
}
|
|
916
|
+
await expectCode("verify(null) -> BAD_OPT", null, "BAD_OPT");
|
|
917
|
+
await expectCode("verify(non-object) -> BAD_OPT", "nope", "BAD_OPT");
|
|
918
|
+
await expectCode("verify headers not object -> BAD_OPT", { body: "b", headers: "x" }, "BAD_OPT");
|
|
919
|
+
await expectCode("verify missing headers -> BAD_OPT", { body: "b" }, "BAD_OPT");
|
|
920
|
+
await expectCode("verify object body -> BAD_BODY",
|
|
921
|
+
{ body: { a: 1 }, headers: { "Webhook-Signature": "t=1,id=2,v1=ff" } }, "BAD_BODY");
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
// Advertised: the PQC verifier accepts EITHER base64url (current) OR hex
|
|
925
|
+
// (legacy) signature encodings for a transition window. New signatures emit
|
|
926
|
+
// base64url; an old hex-encoded signature must still verify.
|
|
927
|
+
async function testPqcHexTransitionWindow() {
|
|
928
|
+
var pair = b.crypto.generateSigningKeyPair("ml-dsa-87");
|
|
929
|
+
var s = b.webhook.signer({ algo: "pqc-pem",
|
|
930
|
+
keys: { v1: { privateKey: pair.privateKey, publicKey: pair.publicKey } } });
|
|
931
|
+
var v = b.webhook.verifier({ algo: "pqc-pem", keys: { v1: pair.publicKey } });
|
|
932
|
+
var signed = s.sign("payload");
|
|
933
|
+
var m = /v1=([^,]+)$/.exec(signed.headers["Webhook-Signature"]);
|
|
934
|
+
var hexSig = Buffer.from(m[1], "base64url").toString("hex");
|
|
935
|
+
var hexHeader = "t=" + signed.timestamp + ",id=" + signed.id + ",v1=" + hexSig;
|
|
936
|
+
var info = await v.verify({ body: "payload", headers: { "Webhook-Signature": hexHeader } });
|
|
937
|
+
check("PQC hex-encoded signature still verifies (transition window)", info && info.kid === "v1");
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
// b.webhook.verify (Stripe) rejects malformed opts before the MAC compare:
|
|
941
|
+
// non-object input, tolerance below the 30s floor, a non-string/Buffer or
|
|
942
|
+
// empty secret, a non-string/Buffer body, an empty header, and a header past
|
|
943
|
+
// the 4096-byte anti-DoS cap.
|
|
944
|
+
async function testStripeVerifyBadInputs() {
|
|
945
|
+
var ts = Math.floor(Date.now() / 1000);
|
|
946
|
+
var sig64 = "a".repeat(64);
|
|
947
|
+
async function expectCode(label, input, code) {
|
|
948
|
+
var t = null; try { await b.webhook.verify(input); } catch (e) { t = e; }
|
|
949
|
+
check(label, t && t.code === code);
|
|
950
|
+
}
|
|
951
|
+
await expectCode("stripe verify(null) -> bad-opts", null, "webhook/bad-opts");
|
|
952
|
+
await expectCode("stripe verify below-min tolerance -> bad-tolerance",
|
|
953
|
+
{ alg: "hmac-sha256-stripe", secret: "whsec_x", header: "t=" + ts + ",v1=" + sig64, body: "{}", toleranceMs: 1000 },
|
|
954
|
+
"webhook/bad-tolerance");
|
|
955
|
+
await expectCode("stripe verify non-string/Buffer secret -> bad-secret",
|
|
956
|
+
{ alg: "hmac-sha256-stripe", secret: 123, header: "t=" + ts + ",v1=" + sig64, body: "{}" }, "webhook/bad-secret");
|
|
957
|
+
await expectCode("stripe verify empty secret -> bad-secret",
|
|
958
|
+
{ alg: "hmac-sha256-stripe", secret: "", header: "t=" + ts + ",v1=" + sig64, body: "{}" }, "webhook/bad-secret");
|
|
959
|
+
await expectCode("stripe verify object body -> bad-body",
|
|
960
|
+
{ alg: "hmac-sha256-stripe", secret: "whsec_x", header: "t=" + ts + ",v1=" + sig64, body: { a: 1 } }, "webhook/bad-body");
|
|
961
|
+
await expectCode("stripe verify empty header -> bad-stripe-header",
|
|
962
|
+
{ alg: "hmac-sha256-stripe", secret: "whsec_x", header: "", body: "{}" }, "webhook/bad-stripe-header");
|
|
963
|
+
await expectCode("stripe verify header > 4096 -> bad-stripe-header",
|
|
964
|
+
{ alg: "hmac-sha256-stripe", secret: "whsec_x", header: "t=" + ts + ",v1=" + sig64 + "," + "z=1,".repeat(1100), body: "{}" },
|
|
965
|
+
"webhook/bad-stripe-header");
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
// b.webhook.sign (Stripe) mirrors verify's opt guards: non-object input,
|
|
969
|
+
// wrong alg, non-string/empty secret, non-string/Buffer body, negative
|
|
970
|
+
// timestamp all throw their typed codes.
|
|
971
|
+
function testStripeSignBadInputs() {
|
|
972
|
+
function expectCode(label, fn, code) {
|
|
973
|
+
var t = null; try { fn(); } catch (e) { t = e; }
|
|
974
|
+
check(label, t && t.code === code);
|
|
975
|
+
}
|
|
976
|
+
expectCode("stripe sign(null) -> bad-opts", function () { b.webhook.sign(null); }, "webhook/bad-opts");
|
|
977
|
+
expectCode("stripe sign bad alg -> bad-alg", function () { b.webhook.sign({ alg: "x", secret: "s", body: "{}" }); }, "webhook/bad-alg");
|
|
978
|
+
expectCode("stripe sign non-string secret -> bad-secret",
|
|
979
|
+
function () { b.webhook.sign({ alg: "hmac-sha256-stripe", secret: 1, body: "{}" }); }, "webhook/bad-secret");
|
|
980
|
+
expectCode("stripe sign empty secret -> bad-secret",
|
|
981
|
+
function () { b.webhook.sign({ alg: "hmac-sha256-stripe", secret: "", body: "{}" }); }, "webhook/bad-secret");
|
|
982
|
+
expectCode("stripe sign object body -> bad-body",
|
|
983
|
+
function () { b.webhook.sign({ alg: "hmac-sha256-stripe", secret: "s", body: {} }); }, "webhook/bad-body");
|
|
984
|
+
expectCode("stripe sign negative timestamp -> bad-timestamp",
|
|
985
|
+
function () { b.webhook.sign({ alg: "hmac-sha256-stripe", secret: "s", body: "{}", timestamp: -5 }); }, "webhook/bad-timestamp");
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
// A non-WebhookError thrown DURING verify (here: the nonce store faults after
|
|
989
|
+
// a valid MAC) must surface as HTTP 500 VERIFY_ERROR from the middleware —
|
|
990
|
+
// distinct from the 401 WebhookError path, and it must never call next().
|
|
991
|
+
async function testMiddlewareVerifyError() {
|
|
992
|
+
var ns = { checkAndInsert: function () { throw new Error("store fault"); } };
|
|
993
|
+
var s = b.webhook.signer({ algo: "hmac-sha3-512", keys: { v1: "s" } });
|
|
994
|
+
var v = b.webhook.verifier({ algo: "hmac-sha3-512", keys: { v1: "s" }, nonceStore: ns });
|
|
995
|
+
var mw = v.middleware();
|
|
996
|
+
var body = "hello";
|
|
997
|
+
var signed = s.sign(body);
|
|
998
|
+
var req = { bodyRaw: Buffer.from(body, "utf8"), headers: signed.headers };
|
|
999
|
+
var res = _bodyRes();
|
|
1000
|
+
var nextCalled = false;
|
|
1001
|
+
await new Promise(function (resolve) {
|
|
1002
|
+
mw(req, res, function () { nextCalled = true; resolve(); });
|
|
1003
|
+
helpers.passiveObserve(100, "webhook verify-error: middleware 500 window").then(resolve);
|
|
1004
|
+
});
|
|
1005
|
+
check("middleware: 500 on non-WebhookError verify fault", res._endedStatus === 500);
|
|
1006
|
+
check("middleware: VERIFY_ERROR in body", /VERIFY_ERROR/.test(res._captured || ""));
|
|
1007
|
+
check("middleware: next() not called on fault", nextCalled === false);
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
// A resolved non-2xx delivery emits a FAILURE audit event (auditFailures
|
|
1011
|
+
// default ON) and resolves with the response — the send() success-path
|
|
1012
|
+
// failure-audit branch (distinct from the transport-error catch). The
|
|
1013
|
+
// transport resolves rather than throws on the 500 via responseMode
|
|
1014
|
+
// "always-resolve", so withRetry returns it without retrying.
|
|
1015
|
+
async function testSendFailureAudit() {
|
|
1016
|
+
var events = [];
|
|
1017
|
+
var audit = { safeEmit: function (e) { events.push(e); } };
|
|
1018
|
+
var server = http.createServer(function (req, res) {
|
|
1019
|
+
var chunks = [];
|
|
1020
|
+
req.on("data", function (c) { chunks.push(c); });
|
|
1021
|
+
req.on("end", function () { res.statusCode = 500; res.end("nope"); });
|
|
1022
|
+
});
|
|
1023
|
+
await new Promise(function (r) { server.listen(0, "127.0.0.1", r); });
|
|
1024
|
+
var port = server.address().port;
|
|
1025
|
+
try {
|
|
1026
|
+
var signer = b.webhook.signer({
|
|
1027
|
+
algo: "hmac-sha3-512", keys: { v1: "s" }, audit: audit,
|
|
1028
|
+
http: { allowedProtocols: b.safeUrl.ALLOW_HTTP_ALL, allowInternal: true, responseMode: "always-resolve" },
|
|
1029
|
+
retry: { maxAttempts: 1 },
|
|
1030
|
+
});
|
|
1031
|
+
var res = await signer.send({ url: "http://127.0.0.1:" + port + "/hook", body: "{}" });
|
|
1032
|
+
check("send: resolves with non-2xx status", (res.status || res.statusCode) === 500);
|
|
1033
|
+
var failed = events.some(function (e) { return e.action === "webhook.send" && e.outcome === "failure"; });
|
|
1034
|
+
check("send: non-2xx emits failure audit", failed);
|
|
1035
|
+
} finally {
|
|
1036
|
+
await new Promise(function (r) { server.close(r); });
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
|
|
789
1040
|
// signer.send dispatches through the shared httpClient keep-alive transport
|
|
790
1041
|
// pool; a cached client socket finalizes its destroy on a later event-loop
|
|
791
1042
|
// turn, past the forked worker's grace window. Reset the pool, then poll until
|
|
@@ -835,6 +1086,15 @@ async function _runTests() {
|
|
|
835
1086
|
await testSendEndToEnd();
|
|
836
1087
|
testRejectsBadOpts();
|
|
837
1088
|
await testSendBadUrl();
|
|
1089
|
+
// Authenticated-timestamp canonicalization + verify/signer config guards.
|
|
1090
|
+
await testTimestampNonCanonicalRejected();
|
|
1091
|
+
await testPqcAlgorithmPin();
|
|
1092
|
+
testKeyShapeErrors();
|
|
1093
|
+
testSignerCallSiteErrors();
|
|
1094
|
+
await testVerifyInputShapes();
|
|
1095
|
+
await testPqcHexTransitionWindow();
|
|
1096
|
+
await testMiddlewareVerifyError();
|
|
1097
|
+
await testSendFailureAudit();
|
|
838
1098
|
// v0.11.25 — Stripe HMAC-SHA-256 inbound verifier.
|
|
839
1099
|
await testStripeHappyPath();
|
|
840
1100
|
await testStripeWrongSecret();
|
|
@@ -851,6 +1111,8 @@ async function _runTests() {
|
|
|
851
1111
|
await testStripeNonceStoreFromPrimitive();
|
|
852
1112
|
await testStripeNonceStoreBadShapeRefused();
|
|
853
1113
|
await testStripeNonceStoreConcurrentAtomic();
|
|
1114
|
+
testStripeSignBadInputs();
|
|
1115
|
+
await testStripeVerifyBadInputs();
|
|
854
1116
|
// #378 — verify path must stay free of the Node networking chain.
|
|
855
1117
|
testVerifyLoadableWithoutHttpClient();
|
|
856
1118
|
}
|