@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
|
@@ -153,6 +153,255 @@ async function run() {
|
|
|
153
153
|
try { b.dualControl.create({ namespace: "x", cache: cache, minApprovers: 1 }); }
|
|
154
154
|
catch (e) { threwBadMin = e; }
|
|
155
155
|
check("create: rejects minApprovers < 2", threwBadMin && /BAD_OPT/.test(threwBadMin.code || ""));
|
|
156
|
+
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Adversarial / error-branch coverage — every path must FAIL CLOSED.
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
|
|
161
|
+
// ---- request(): argument validation (typed refusal, never a crash) ----
|
|
162
|
+
var reqThrewNoArgs = null;
|
|
163
|
+
try { await approvals.request(); } catch (e) { reqThrewNoArgs = e; }
|
|
164
|
+
check("request: no args → typed BAD_ARG", reqThrewNoArgs && /BAD_ARG/.test(reqThrewNoArgs.code || ""));
|
|
165
|
+
|
|
166
|
+
var reqThrewNoAction = null;
|
|
167
|
+
try { await approvals.request({ requestedBy: { id: "alice" } }); } catch (e) { reqThrewNoAction = e; }
|
|
168
|
+
check("request: missing action → typed BAD_ARG", reqThrewNoAction && /BAD_ARG/.test(reqThrewNoAction.code || ""));
|
|
169
|
+
|
|
170
|
+
var reqThrewNoActor = null;
|
|
171
|
+
try { await approvals.request({ action: "x", requestedBy: {} }); } catch (e) { reqThrewNoActor = e; }
|
|
172
|
+
check("request: requestedBy without stable id → typed BAD_ARG",
|
|
173
|
+
reqThrewNoActor && /BAD_ARG/.test(reqThrewNoActor.code || ""));
|
|
174
|
+
|
|
175
|
+
var reqThrewNullActor = null;
|
|
176
|
+
try { await approvals.request({ action: "x", requestedBy: null }); } catch (e) { reqThrewNullActor = e; }
|
|
177
|
+
check("request: null requestedBy → typed BAD_ARG",
|
|
178
|
+
reqThrewNullActor && /BAD_ARG/.test(reqThrewNullActor.code || ""));
|
|
179
|
+
|
|
180
|
+
// ---- _actorIdOf(): every id-resolution fallback drives a real request ----
|
|
181
|
+
var reqUnderId = await approvals.request({ action: "<test>.uid", requestedBy: { _id: "svc-1" } });
|
|
182
|
+
check("actorId: resolves from _id", reqUnderId.status === "pending");
|
|
183
|
+
var stUnderId = await approvals.status(reqUnderId.grantId);
|
|
184
|
+
check("actorId: _id recorded as requestedBy", stUnderId.requestedBy === "svc-1");
|
|
185
|
+
|
|
186
|
+
var reqUserId = await approvals.request({ action: "<test>.uid2", requestedBy: { userId: "u-9" } });
|
|
187
|
+
var stUserId = await approvals.status(reqUserId.grantId);
|
|
188
|
+
check("actorId: resolves from userId", stUserId.requestedBy === "u-9");
|
|
189
|
+
|
|
190
|
+
var reqEmail = await approvals.request({ action: "<test>.uid3", requestedBy: { email: "eve@example.test" } });
|
|
191
|
+
var stEmail = await approvals.status(reqEmail.grantId);
|
|
192
|
+
check("actorId: email actor prefixed 'email:'", stEmail.requestedBy === "email:eve@example.test");
|
|
193
|
+
|
|
194
|
+
// ---- approve(): argument validation ----
|
|
195
|
+
var apThrewNoArgs = null;
|
|
196
|
+
try { await approvals.approve(); } catch (e) { apThrewNoArgs = e; }
|
|
197
|
+
check("approve: no args → typed BAD_ARG", apThrewNoArgs && /BAD_ARG/.test(apThrewNoArgs.code || ""));
|
|
198
|
+
|
|
199
|
+
var apThrewNoApprover = null;
|
|
200
|
+
try { await approvals.approve({ grantId: reqUserId.grantId, approver: {} }); }
|
|
201
|
+
catch (e) { apThrewNoApprover = e; }
|
|
202
|
+
check("approve: approver without stable id → typed BAD_ARG",
|
|
203
|
+
apThrewNoApprover && /BAD_ARG/.test(apThrewNoApprover.code || ""));
|
|
204
|
+
|
|
205
|
+
// ---- approve() on a grant that does not exist → fail closed ----
|
|
206
|
+
var apMissing = await approvals.approve({ grantId: "dc-doesnotexist", approver: { id: "bob" } });
|
|
207
|
+
check("approve: unknown grant → grant-not-found (no fabricated approval)",
|
|
208
|
+
apMissing.error === "grant-not-found");
|
|
209
|
+
|
|
210
|
+
// ---- revoke(): argument validation + edge branches ----
|
|
211
|
+
var rvThrewNoArgs = null;
|
|
212
|
+
try { await approvals.revoke(); } catch (e) { rvThrewNoArgs = e; }
|
|
213
|
+
check("revoke: no args → typed BAD_ARG", rvThrewNoArgs && /BAD_ARG/.test(rvThrewNoArgs.code || ""));
|
|
214
|
+
|
|
215
|
+
var rvMissing = await approvals.revoke({ grantId: "dc-nope", revokedBy: { id: "admin" } });
|
|
216
|
+
check("revoke: unknown grant → grant-not-found", rvMissing.error === "grant-not-found");
|
|
217
|
+
|
|
218
|
+
// revoke with no revokedBy actor still succeeds (admin-deny path; revokedById null)
|
|
219
|
+
var reqRvNull = await approvals.request({ action: "<test>.rvnull", requestedBy: { id: "alice" } });
|
|
220
|
+
var rvNull = await approvals.revoke({ grantId: reqRvNull.grantId });
|
|
221
|
+
check("revoke: succeeds even without a named revoker", rvNull.status === "revoked");
|
|
222
|
+
|
|
223
|
+
// revoke of an already-consumed grant → grant-already-consumed
|
|
224
|
+
var reqRvConsumed = await approvals.request({ action: "<test>.rvcon", requestedBy: { id: "alice" } });
|
|
225
|
+
await approvals.approve({ grantId: reqRvConsumed.grantId, approver: { id: "bob" } });
|
|
226
|
+
await approvals.approve({ grantId: reqRvConsumed.grantId, approver: { id: "carol" } });
|
|
227
|
+
await approvals.consume(reqRvConsumed.grantId);
|
|
228
|
+
// consume() single-uses AND deletes the grant, so a later revoke sees no
|
|
229
|
+
// record → grant-not-found (still fail closed; the destructive op already ran
|
|
230
|
+
// exactly once and can never run again through this grant).
|
|
231
|
+
var rvConsumed = await approvals.revoke({ grantId: reqRvConsumed.grantId, revokedBy: { id: "admin" } });
|
|
232
|
+
check("revoke: consumed grant is gone → grant-not-found", rvConsumed.error === "grant-not-found");
|
|
233
|
+
|
|
234
|
+
// ---- SECURITY-CRITICAL: consume() refuses UNDER-QUORUM (fail closed) ----
|
|
235
|
+
var reqUnder = await approvals.request({ action: "<test>.underquorum", requestedBy: { id: "alice" } });
|
|
236
|
+
await approvals.approve({ grantId: reqUnder.grantId, approver: { id: "bob" } }); // 1 of 2 only
|
|
237
|
+
var consumeUnder = await approvals.consume(reqUnder.grantId);
|
|
238
|
+
check("consume: UNDER-QUORUM refused (fail closed)",
|
|
239
|
+
consumeUnder.ready === false && consumeUnder.reason === "not-enough-approvers");
|
|
240
|
+
check("consume: under-quorum reports needs + current approvers",
|
|
241
|
+
consumeUnder.needs === 2 && consumeUnder.approvedBy.length === 1);
|
|
242
|
+
// The under-quorum grant is NOT consumed — a later legitimate second approval
|
|
243
|
+
// still reaches quorum (refusal did not corrupt the grant).
|
|
244
|
+
var underSecond = await approvals.approve({ grantId: reqUnder.grantId, approver: { id: "carol" } });
|
|
245
|
+
check("consume: refusal left grant intact for legit quorum", underSecond.status === "approved");
|
|
246
|
+
var consumeAfter = await approvals.consume(reqUnder.grantId);
|
|
247
|
+
check("consume: proceeds once quorum truly reached", consumeAfter.ready === true);
|
|
248
|
+
|
|
249
|
+
// ---- cancel(): full lifecycle (was entirely untested) ----
|
|
250
|
+
var cxThrewNoArgs = null;
|
|
251
|
+
try { await approvals.cancel(); } catch (e) { cxThrewNoArgs = e; }
|
|
252
|
+
check("cancel: no args → typed BAD_ARG", cxThrewNoArgs && /BAD_ARG/.test(cxThrewNoArgs.code || ""));
|
|
253
|
+
|
|
254
|
+
var cxMissing = await approvals.cancel({ grantId: "dc-none", cancelledBy: { id: "alice" } });
|
|
255
|
+
check("cancel: unknown grant → grant-not-found", cxMissing.error === "grant-not-found");
|
|
256
|
+
|
|
257
|
+
// only the requester may cancel — a stranger is refused
|
|
258
|
+
var reqCancel = await approvals.request({ action: "<test>.cancel", requestedBy: { id: "alice" } });
|
|
259
|
+
var cxStranger = await approvals.cancel({ grantId: reqCancel.grantId, cancelledBy: { id: "mallory" } });
|
|
260
|
+
check("cancel: non-requester refused (only-requester-can-cancel)",
|
|
261
|
+
cxStranger.error === "only-requester-can-cancel");
|
|
262
|
+
// a missing cancelledBy actor is likewise not the requester → refused
|
|
263
|
+
var cxNoActor = await approvals.cancel({ grantId: reqCancel.grantId });
|
|
264
|
+
check("cancel: absent actor is not the requester → refused",
|
|
265
|
+
cxNoActor.error === "only-requester-can-cancel");
|
|
266
|
+
|
|
267
|
+
// the requester cancels successfully
|
|
268
|
+
var cxOk = await approvals.cancel({ grantId: reqCancel.grantId, cancelledBy: { id: "alice" }, reason: "withdrawn" });
|
|
269
|
+
check("cancel: requester cancels → cancelled", cxOk.status === "cancelled");
|
|
270
|
+
// double cancel → grant-already-cancelled
|
|
271
|
+
var cxAgain = await approvals.cancel({ grantId: reqCancel.grantId, cancelledBy: { id: "alice" } });
|
|
272
|
+
check("cancel: second cancel → grant-already-cancelled", cxAgain.error === "grant-already-cancelled");
|
|
273
|
+
// approve / consume a cancelled grant → fail closed
|
|
274
|
+
var apCancelled = await approvals.approve({ grantId: reqCancel.grantId, approver: { id: "bob" } });
|
|
275
|
+
check("approve: cancelled grant rejected", apCancelled.error === "grant-cancelled");
|
|
276
|
+
var consumeCancelled = await approvals.consume(reqCancel.grantId);
|
|
277
|
+
check("consume: cancelled grant → not-ready", consumeCancelled.ready === false && consumeCancelled.reason === "cancelled");
|
|
278
|
+
|
|
279
|
+
// cancel a consumed grant → grant-already-consumed
|
|
280
|
+
var reqCxCon = await approvals.request({ action: "<test>.cxcon", requestedBy: { id: "alice" } });
|
|
281
|
+
await approvals.approve({ grantId: reqCxCon.grantId, approver: { id: "bob" } });
|
|
282
|
+
await approvals.approve({ grantId: reqCxCon.grantId, approver: { id: "carol" } });
|
|
283
|
+
await approvals.consume(reqCxCon.grantId);
|
|
284
|
+
// As with revoke: the consumed grant was deleted, so cancel → grant-not-found.
|
|
285
|
+
var cxConsumed = await approvals.cancel({ grantId: reqCxCon.grantId, cancelledBy: { id: "alice" } });
|
|
286
|
+
check("cancel: consumed grant is gone → grant-not-found", cxConsumed.error === "grant-not-found");
|
|
287
|
+
|
|
288
|
+
// cancel a revoked grant → grant-revoked
|
|
289
|
+
var reqCxRev = await approvals.request({ action: "<test>.cxrev", requestedBy: { id: "alice" } });
|
|
290
|
+
await approvals.revoke({ grantId: reqCxRev.grantId, revokedBy: { id: "admin" } });
|
|
291
|
+
var cxRevoked = await approvals.cancel({ grantId: reqCxRev.grantId, cancelledBy: { id: "alice" } });
|
|
292
|
+
check("cancel: revoked grant → grant-revoked", cxRevoked.error === "grant-revoked");
|
|
293
|
+
|
|
294
|
+
// ---- status(): missing grant + every terminal state ----
|
|
295
|
+
var stMissing = await approvals.status("dc-absent");
|
|
296
|
+
check("status: unknown grant → null", stMissing === null);
|
|
297
|
+
|
|
298
|
+
var stThrew = null;
|
|
299
|
+
try { await approvals.status(""); } catch (e) { stThrew = e; }
|
|
300
|
+
check("status: empty grantId → typed BAD_ARG", stThrew && /BAD_ARG/.test(stThrew.code || ""));
|
|
301
|
+
|
|
302
|
+
var stRevoked = await approvals.status(reqCxRev.grantId);
|
|
303
|
+
check("status: revoked state", stRevoked.status === "revoked");
|
|
304
|
+
var stCancelled = await approvals.status(reqCancel.grantId);
|
|
305
|
+
check("status: cancelled state", stCancelled.status === "cancelled");
|
|
306
|
+
var stConsumedGone = await approvals.status(reqCxCon.grantId);
|
|
307
|
+
check("status: consumed+single-use grant is gone → null", stConsumedGone === null);
|
|
308
|
+
|
|
309
|
+
// ---- minReasonLength gate on request() AND approve() ----
|
|
310
|
+
var reasonApprovals = b.dualControl.create({
|
|
311
|
+
namespace: "test.reason",
|
|
312
|
+
cache: b.cache.create({ namespace: "dual-reason" }),
|
|
313
|
+
audit: b.audit,
|
|
314
|
+
minReasonLength: 12,
|
|
315
|
+
});
|
|
316
|
+
var rShort = await reasonApprovals.request({ action: "<test>.r", requestedBy: { id: "alice" }, reason: "too short" });
|
|
317
|
+
check("request: reason below minReasonLength refused", rShort.error === "reason-too-short" && rShort.grantId === null);
|
|
318
|
+
var rMissingReason = await reasonApprovals.request({ action: "<test>.r", requestedBy: { id: "alice" } });
|
|
319
|
+
check("request: absent reason refused when minReasonLength set", rMissingReason.error === "reason-too-short");
|
|
320
|
+
var rOk = await reasonApprovals.request({
|
|
321
|
+
action: "<test>.r", requestedBy: { id: "alice" }, reason: "a properly long compliance reason",
|
|
322
|
+
});
|
|
323
|
+
check("request: adequate reason accepted", rOk.status === "pending");
|
|
324
|
+
var rApShort = await reasonApprovals.approve({ grantId: rOk.grantId, approver: { id: "bob" }, reason: "nope" });
|
|
325
|
+
check("approve: reason below minReasonLength refused", rApShort.error === "reason-too-short");
|
|
326
|
+
|
|
327
|
+
// ---- approverRoles: an approver with NO qualifying role fails CLOSED ----
|
|
328
|
+
var rNoRole = await roleApprovals.request({ action: "<test>.norole", requestedBy: { id: "alice" } });
|
|
329
|
+
var apNoRole = await roleApprovals.approve({ grantId: rNoRole.grantId, approver: { id: "dave" } });
|
|
330
|
+
check("approve: approver lacking required role → fail closed",
|
|
331
|
+
apNoRole.error === "approver-role-required");
|
|
332
|
+
var apEmptyRoles = await roleApprovals.approve({ grantId: rNoRole.grantId, approver: { id: "dave", roles: [] } });
|
|
333
|
+
check("approve: approver with empty roles list → fail closed",
|
|
334
|
+
apEmptyRoles.error === "approver-role-required");
|
|
335
|
+
|
|
336
|
+
// ---- consumeLockMs cooling-off: quorum-reached grant blocks immediate consume ----
|
|
337
|
+
var lockApprovals = b.dualControl.create({
|
|
338
|
+
namespace: "test.lock",
|
|
339
|
+
cache: b.cache.create({ namespace: "dual-lock" }),
|
|
340
|
+
audit: b.audit,
|
|
341
|
+
consumeLockMs: 120,
|
|
342
|
+
});
|
|
343
|
+
var lReq = await lockApprovals.request({ action: "<test>.lock", requestedBy: { id: "alice" } });
|
|
344
|
+
await lockApprovals.approve({ grantId: lReq.grantId, approver: { id: "bob" } });
|
|
345
|
+
var lQuorum = await lockApprovals.approve({ grantId: lReq.grantId, approver: { id: "carol" } });
|
|
346
|
+
check("consume-lock: approve reports a consumeUnlockAt", typeof lQuorum.consumeUnlockAt === "number");
|
|
347
|
+
var lLocked = await lockApprovals.consume(lReq.grantId);
|
|
348
|
+
check("consume-lock: immediate consume blocked (fail closed)",
|
|
349
|
+
lLocked.ready === false && lLocked.reason === "consume-locked" && lLocked.waitMs > 0);
|
|
350
|
+
// Poll (never sleep) until the cooling-off window elapses; each locked
|
|
351
|
+
// attempt returns without consuming, so re-polling consume is safe.
|
|
352
|
+
var lUnlocked = null;
|
|
353
|
+
await helpers.waitUntil(async function () {
|
|
354
|
+
var r = await lockApprovals.consume(lReq.grantId);
|
|
355
|
+
if (r.ready) { lUnlocked = r; return true; }
|
|
356
|
+
return false;
|
|
357
|
+
}, { timeoutMs: 5000, label: "dual-control: consume unlocks after cooling-off" });
|
|
358
|
+
check("consume-lock: consume proceeds once cooling-off elapses", lUnlocked && lUnlocked.ready === true);
|
|
359
|
+
|
|
360
|
+
// ---- Expired grant: fail closed on approve AND consume ----
|
|
361
|
+
// The lib couples the cache-entry TTL to the grant's logical expiry, so a
|
|
362
|
+
// naturally-expired grant is evicted (grant-not-found) rather than surfacing
|
|
363
|
+
// the grant-expired branch. That branch only fires under clock skew / a
|
|
364
|
+
// sliding cache TTL where the entry outlives the grant's expiresAt — reproduce
|
|
365
|
+
// that here by driving the real cache to push expiresAt into the past while
|
|
366
|
+
// keeping the entry alive. Both outcomes fail closed.
|
|
367
|
+
var expCache = b.cache.create({ namespace: "dual-exp" });
|
|
368
|
+
var expApprovals = b.dualControl.create({ namespace: "test.exp", cache: expCache, audit: b.audit });
|
|
369
|
+
function _stale(grantId) {
|
|
370
|
+
return expCache.update("test.exp:" + grantId, function (rec) {
|
|
371
|
+
rec.expiresAt = Date.now() - 1000;
|
|
372
|
+
return { value: rec, ttlMs: 60 * 1000 };
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
var expReq = await expApprovals.request({ action: "<test>.exp", requestedBy: { id: "alice" } });
|
|
376
|
+
await _stale(expReq.grantId);
|
|
377
|
+
var expApprove = await expApprovals.approve({ grantId: expReq.grantId, approver: { id: "bob" } });
|
|
378
|
+
check("approve: expired grant refused (fail closed)", expApprove.error === "grant-expired");
|
|
379
|
+
var expStatus = await expApprovals.status(expReq.grantId);
|
|
380
|
+
check("status: expired grant reports 'expired'", expStatus.status === "expired");
|
|
381
|
+
|
|
382
|
+
var expReq2 = await expApprovals.request({ action: "<test>.exp2", requestedBy: { id: "alice" } });
|
|
383
|
+
await expApprovals.approve({ grantId: expReq2.grantId, approver: { id: "bob" } });
|
|
384
|
+
await expApprovals.approve({ grantId: expReq2.grantId, approver: { id: "carol" } });
|
|
385
|
+
await _stale(expReq2.grantId);
|
|
386
|
+
var expConsume = await expApprovals.consume(expReq2.grantId);
|
|
387
|
+
check("consume: expired (even quorum-reached) grant refused (fail closed)",
|
|
388
|
+
expConsume.ready === false && expConsume.reason === "expired");
|
|
389
|
+
|
|
390
|
+
// ---- notify hook fires on every transition; a throwing hook is swallowed ----
|
|
391
|
+
var events = [];
|
|
392
|
+
var notifyApprovals = b.dualControl.create({
|
|
393
|
+
namespace: "test.notify",
|
|
394
|
+
cache: b.cache.create({ namespace: "dual-notify" }),
|
|
395
|
+
notify: function (e) { events.push(e.action); throw new Error("notify boom (must be swallowed)"); },
|
|
396
|
+
});
|
|
397
|
+
var nReq = await notifyApprovals.request({ action: "<test>.notify", requestedBy: { id: "alice" } });
|
|
398
|
+
check("notify: request transition delivered", events.indexOf("dual.grant.requested") !== -1);
|
|
399
|
+
await notifyApprovals.approve({ grantId: nReq.grantId, approver: { id: "bob" } });
|
|
400
|
+
await notifyApprovals.approve({ grantId: nReq.grantId, approver: { id: "carol" } });
|
|
401
|
+
check("notify: approve transition delivered", events.indexOf("dual.grant.approved") !== -1);
|
|
402
|
+
var nConsume = await notifyApprovals.consume(nReq.grantId);
|
|
403
|
+
check("notify: consume proceeds despite throwing hook (best-effort)", nConsume.ready === true);
|
|
404
|
+
check("notify: consume transition delivered", events.indexOf("dual.grant.consumed") !== -1);
|
|
156
405
|
}
|
|
157
406
|
|
|
158
407
|
module.exports = { run: run };
|