@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
|
@@ -394,6 +394,435 @@ async function testGuardsExposed() {
|
|
|
394
394
|
check("guards.messageId", b.mail.agent.guards.messageId === b.guardMessageId);
|
|
395
395
|
}
|
|
396
396
|
|
|
397
|
+
// A grammar-valid RFC 5228 script (fileinto is a known capability) — the
|
|
398
|
+
// happy path through b.safeSieve's parser under agent.sieve.put.
|
|
399
|
+
var VALID_SIEVE =
|
|
400
|
+
'require ["fileinto"];\r\n' +
|
|
401
|
+
'if header :contains "Subject" "[bug]" { fileinto "bugs"; }\r\n';
|
|
402
|
+
|
|
403
|
+
async function testCreateErrorBranches() {
|
|
404
|
+
// create() entry-point validation THROWS (config-time tier) on every
|
|
405
|
+
// malformed opts shape before an agent is ever built.
|
|
406
|
+
var fx = await _setup("create-err");
|
|
407
|
+
try {
|
|
408
|
+
var e1 = null;
|
|
409
|
+
try { b.mail.agent.create(); } catch (e) { e1 = e; }
|
|
410
|
+
check("create: null opts refused",
|
|
411
|
+
e1 instanceof b.mail.agent.MailAgentError && (e1.code || "").indexOf("mail-agent/bad-opts") !== -1);
|
|
412
|
+
|
|
413
|
+
var e1b = null;
|
|
414
|
+
try { b.mail.agent.create("nope"); } catch (e) { e1b = e; }
|
|
415
|
+
check("create: non-object opts refused",
|
|
416
|
+
e1b && (e1b.code || "").indexOf("mail-agent/bad-opts") !== -1);
|
|
417
|
+
|
|
418
|
+
// A store object that lacks the b.mailStore fingerprint method.
|
|
419
|
+
var e2 = null;
|
|
420
|
+
try { b.mail.agent.create({ store: { notAStore: true } }); } catch (e) { e2 = e; }
|
|
421
|
+
check("create: store without fetchByObjectId refused",
|
|
422
|
+
e2 && (e2.code || "").indexOf("mail-agent/bad-store") !== -1);
|
|
423
|
+
|
|
424
|
+
// A real store but an unknown compliance posture.
|
|
425
|
+
var e3 = null;
|
|
426
|
+
try { b.mail.agent.create({ store: fx.store, posture: "not-a-posture" }); } catch (e) { e3 = e; }
|
|
427
|
+
check("create: unknown posture refused",
|
|
428
|
+
e3 && (e3.code || "").indexOf("mail-agent/bad-posture") !== -1);
|
|
429
|
+
} finally { _teardown(fx); }
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
async function testDispatchOptionValidation() {
|
|
433
|
+
// _validateDispatch THROWS on each malformed dispatch field, and
|
|
434
|
+
// ACCEPTS the well-formed values that exercise the positive branch of
|
|
435
|
+
// every typeof/range guard.
|
|
436
|
+
var fx = await _setup("dispatch-opts");
|
|
437
|
+
try {
|
|
438
|
+
var eWp = null;
|
|
439
|
+
try { b.mail.agent.create({ store: fx.store, dispatch: { workerPool: {} } }); } catch (e) { eWp = e; }
|
|
440
|
+
check("dispatch: workerPool without .run() refused",
|
|
441
|
+
eWp && (eWp.code || "").indexOf("mail-agent/bad-worker-pool") !== -1);
|
|
442
|
+
|
|
443
|
+
var eTtNeg = null;
|
|
444
|
+
try { b.mail.agent.create({ store: fx.store, dispatch: { taskTimeoutMs: -5 } }); } catch (e) { eTtNeg = e; }
|
|
445
|
+
check("dispatch: negative taskTimeoutMs refused",
|
|
446
|
+
eTtNeg && (eTtNeg.code || "").indexOf("mail-agent/bad-task-timeout") !== -1);
|
|
447
|
+
|
|
448
|
+
var eTtNaN = null;
|
|
449
|
+
try { b.mail.agent.create({ store: fx.store, dispatch: { taskTimeoutMs: NaN } }); } catch (e) { eTtNaN = e; }
|
|
450
|
+
check("dispatch: non-finite taskTimeoutMs refused",
|
|
451
|
+
eTtNaN && (eTtNaN.code || "").indexOf("mail-agent/bad-task-timeout") !== -1);
|
|
452
|
+
|
|
453
|
+
var eDc = null;
|
|
454
|
+
try { b.mail.agent.create({ store: fx.store, dispatch: { queueDepthCap: -1 } }); } catch (e) { eDc = e; }
|
|
455
|
+
check("dispatch: negative queueDepthCap refused",
|
|
456
|
+
eDc && (eDc.code || "").indexOf("mail-agent/bad-queue-depth-cap") !== -1);
|
|
457
|
+
|
|
458
|
+
var eVk = null;
|
|
459
|
+
try { b.mail.agent.create({ store: fx.store, dispatch: { vaultKeyDelivery: "sideband" } }); } catch (e) { eVk = e; }
|
|
460
|
+
check("dispatch: unknown vaultKeyDelivery refused",
|
|
461
|
+
eVk && (eVk.code || "").indexOf("mail-agent/bad-vault-key-delivery") !== -1);
|
|
462
|
+
|
|
463
|
+
// Positive branch: every explicit value well-formed → agent builds.
|
|
464
|
+
var agentOk = b.mail.agent.create({
|
|
465
|
+
store: fx.store,
|
|
466
|
+
dispatch: {
|
|
467
|
+
mode: "local",
|
|
468
|
+
workerPool: { run: function () { return null; } },
|
|
469
|
+
taskTimeoutMs: 5000,
|
|
470
|
+
queueDepthCap: 16,
|
|
471
|
+
vaultKeyDelivery: "main-only",
|
|
472
|
+
queueTopic: "custom.topic",
|
|
473
|
+
},
|
|
474
|
+
});
|
|
475
|
+
check("dispatch: well-formed explicit fields accepted",
|
|
476
|
+
typeof agentOk.folders === "function" &&
|
|
477
|
+
agentOk._ctx.dispatch.vaultKeyDelivery === "main-only" &&
|
|
478
|
+
agentOk._ctx.dispatch.queueDepthCap === 16 &&
|
|
479
|
+
agentOk._ctx.dispatch.queueTopic === "custom.topic");
|
|
480
|
+
} finally { _teardown(fx); }
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
async function testIdentityResolver() {
|
|
484
|
+
// opts.identity accepts a resolver function OR a plain object map; a
|
|
485
|
+
// missing/garbage value yields a null-returning resolver. Only the
|
|
486
|
+
// create() path exercises _identityResolver.
|
|
487
|
+
var fx = await _setup("identity");
|
|
488
|
+
try {
|
|
489
|
+
var agentFn = b.mail.agent.create({
|
|
490
|
+
store: fx.store,
|
|
491
|
+
identity: function (actorId) { return { email: actorId + "@x.example", name: actorId }; },
|
|
492
|
+
});
|
|
493
|
+
check("identity: function resolver stored",
|
|
494
|
+
typeof agentFn._ctx.identity === "function" &&
|
|
495
|
+
agentFn._ctx.identity("u1").email === "u1@x.example");
|
|
496
|
+
|
|
497
|
+
var agentMap = b.mail.agent.create({
|
|
498
|
+
store: fx.store,
|
|
499
|
+
identity: { u1: { email: "u1@x.example", name: "One" } },
|
|
500
|
+
});
|
|
501
|
+
check("identity: object map resolver looks up by id",
|
|
502
|
+
agentMap._ctx.identity("u1").name === "One" && agentMap._ctx.identity("nobody") === null);
|
|
503
|
+
|
|
504
|
+
var agentNone = b.mail.agent.create({ store: fx.store, identity: 42 });
|
|
505
|
+
check("identity: garbage spec yields null resolver",
|
|
506
|
+
agentNone._ctx.identity("u1") === null);
|
|
507
|
+
} finally { _teardown(fx); }
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
async function testAuditOverride() {
|
|
511
|
+
// When opts.audit exposes safeEmit, the agent routes every audit
|
|
512
|
+
// event through it (not the default b.audit). The outcome field flips
|
|
513
|
+
// to "failure" for denied/not_implemented events.
|
|
514
|
+
var fx = await _setup("audit-override");
|
|
515
|
+
try {
|
|
516
|
+
var seen = [];
|
|
517
|
+
var agent = b.mail.agent.create({
|
|
518
|
+
store: fx.store,
|
|
519
|
+
audit: { safeEmit: function (rec) { seen.push(rec); } },
|
|
520
|
+
});
|
|
521
|
+
var actor = { id: "u1", roles: ["clinician"] };
|
|
522
|
+
await agent.folders({ actor: actor });
|
|
523
|
+
check("audit-override: success event routed to override",
|
|
524
|
+
seen.length === 1 && seen[0].action === "mail.agent.folders.success" &&
|
|
525
|
+
seen[0].outcome === "success" && seen[0].actor.id === "u1");
|
|
526
|
+
|
|
527
|
+
await expectRejection("audit-override: not-implemented rejects",
|
|
528
|
+
agent.compose({ actor: actor }), "mail-agent/not-implemented");
|
|
529
|
+
var last = seen[seen.length - 1];
|
|
530
|
+
check("audit-override: not_implemented event marked failure",
|
|
531
|
+
last.action === "mail.agent.not_implemented" && last.outcome === "failure");
|
|
532
|
+
|
|
533
|
+
// A permission_denied event routed through the override marks the
|
|
534
|
+
// "denied" branch of the outcome selector.
|
|
535
|
+
var deniedSeen = [];
|
|
536
|
+
var perms = b.permissions.create({
|
|
537
|
+
roles: { reader: { permissions: ["mail:read"] } },
|
|
538
|
+
auditFailures: false, auditSuccess: false,
|
|
539
|
+
});
|
|
540
|
+
var denyAgent = b.mail.agent.create({
|
|
541
|
+
store: fx.store, permissions: perms,
|
|
542
|
+
audit: { safeEmit: function (rec) { deniedSeen.push(rec); } },
|
|
543
|
+
});
|
|
544
|
+
var reader = { id: "r1", roles: ["reader"] };
|
|
545
|
+
await expectRejection("audit-override: denied move rejects permission-denied",
|
|
546
|
+
denyAgent.move({ actor: reader, fromFolder: "INBOX", toFolder: "Archive", objectIds: [] }),
|
|
547
|
+
"mail-agent/permission-denied");
|
|
548
|
+
var denyEvt = deniedSeen[deniedSeen.length - 1];
|
|
549
|
+
check("audit-override: permission_denied event marked failure",
|
|
550
|
+
denyEvt && denyEvt.action === "mail.agent.permission_denied" && denyEvt.outcome === "failure");
|
|
551
|
+
} finally { _teardown(fx); }
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
async function testMethodBadArgs() {
|
|
555
|
+
// Defensive per-method arg-shape guards return a rejected promise with
|
|
556
|
+
// mail-agent/bad-args for each malformed consumer call.
|
|
557
|
+
var fx = await _setup("bad-args");
|
|
558
|
+
try {
|
|
559
|
+
var agent = b.mail.agent.create({ store: fx.store });
|
|
560
|
+
var actor = { id: "u1" };
|
|
561
|
+
|
|
562
|
+
await expectRejection("fetch: non-string folder refused",
|
|
563
|
+
agent.fetch({ actor: actor, folder: 123, objectId: "x" }), "mail-agent/bad-args");
|
|
564
|
+
await expectRejection("fetch: non-string objectId refused",
|
|
565
|
+
agent.fetch({ actor: actor, folder: "INBOX", objectId: 7 }), "mail-agent/bad-args");
|
|
566
|
+
await expectRejection("thread: non-string objectId refused",
|
|
567
|
+
agent.thread({ actor: actor, objectId: 7 }), "mail-agent/bad-args");
|
|
568
|
+
await expectRejection("flag: non-array objectIds refused",
|
|
569
|
+
agent.flag({ actor: actor, folder: "INBOX", objectIds: "not-array" }), "mail-agent/bad-args");
|
|
570
|
+
await expectRejection("flag: non-string folder refused",
|
|
571
|
+
agent.flag({ actor: actor, folder: 5, objectIds: [] }), "mail-agent/bad-args");
|
|
572
|
+
await expectRejection("delete: non-string folder refused",
|
|
573
|
+
agent.delete({ actor: actor, folder: 5, objectIds: [] }), "mail-agent/bad-args");
|
|
574
|
+
await expectRejection("expunge: non-array objectIds refused",
|
|
575
|
+
agent.expunge({ actor: actor, folder: "Trash", objectIds: "x" }), "mail-agent/bad-args");
|
|
576
|
+
|
|
577
|
+
// _entry itself refuses a missing args object (drives every method).
|
|
578
|
+
await expectRejection("folders: missing args object refused",
|
|
579
|
+
agent.folders(), "mail-agent/bad-args");
|
|
580
|
+
|
|
581
|
+
// Missing-actor audit path exercises _actorShape's <unknown> fallback:
|
|
582
|
+
// a not-implemented call with no actor and no permissions still emits
|
|
583
|
+
// the audit event with a synthesized actor id.
|
|
584
|
+
await expectRejection("compose: missing actor still rejects not-implemented",
|
|
585
|
+
agent.compose({}), "mail-agent/not-implemented");
|
|
586
|
+
} finally { _teardown(fx); }
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
async function testDeleteInTrash() {
|
|
590
|
+
// delete() of a message already in Trash short-circuits to a
|
|
591
|
+
// \Deleted flag-set (no re-move); the message stays in Trash flagged.
|
|
592
|
+
var fx = await _setup("delete-trash");
|
|
593
|
+
try {
|
|
594
|
+
var agent = b.mail.agent.create({ store: fx.store });
|
|
595
|
+
var actor = { id: "u1" };
|
|
596
|
+
var meta = fx.store.appendMessage("INBOX", _msg([
|
|
597
|
+
"From: a@x", "To: b@y", "Subject: bin-me", "Message-Id: <t@x>",
|
|
598
|
+
"Date: Wed, 14 May 2026 12:00:00 +0000",
|
|
599
|
+
], "x"));
|
|
600
|
+
fx.store.moveMessages("INBOX", "Trash", [meta.objectid]);
|
|
601
|
+
|
|
602
|
+
var r = await agent.delete({ actor: actor, folder: "Trash", objectIds: [meta.objectid] });
|
|
603
|
+
check("delete-in-Trash: flags without re-move", r.changed === 1);
|
|
604
|
+
var still = fx.store.fetchByObjectId("Trash", meta.objectid);
|
|
605
|
+
check("delete-in-Trash: message remains in Trash, flagged \\Deleted",
|
|
606
|
+
still !== null && still.flags.indexOf("\\Deleted") !== -1);
|
|
607
|
+
} finally { _teardown(fx); }
|
|
608
|
+
}
|
|
609
|
+
|
|
610
|
+
async function testSievePut() {
|
|
611
|
+
// sieve.put runs a two-stage validation: the agent shape guard, then
|
|
612
|
+
// the full b.safeSieve RFC 5228 grammar parse. A grammar-valid script
|
|
613
|
+
// returns { ok, requiredCaps }; an unknown capability is refused with
|
|
614
|
+
// mail-agent/sieve-parse-error. Run under HIPAA posture so _profileFor
|
|
615
|
+
// resolves against a set posture too.
|
|
616
|
+
var fx = await _setup("sieve-put");
|
|
617
|
+
try {
|
|
618
|
+
var agent = b.mail.agent.create({ store: fx.store, posture: "hipaa" });
|
|
619
|
+
var actor = { id: "u1", purposeOfUse: "TREATMENT" };
|
|
620
|
+
|
|
621
|
+
var ok = await agent.sieve.put({
|
|
622
|
+
actor: actor, name: "my-filter", script: VALID_SIEVE, ownedNames: ["my-filter"],
|
|
623
|
+
});
|
|
624
|
+
check("sieve.put: valid script accepted with requiredCaps",
|
|
625
|
+
ok.ok === true && Array.isArray(ok.requiredCaps) && ok.requiredCaps.indexOf("fileinto") !== -1);
|
|
626
|
+
|
|
627
|
+
// Grammar-valid shape but an unknown capability — b.safeSieve
|
|
628
|
+
// refuses at require-time, surfaced as sieve-parse-error.
|
|
629
|
+
await expectRejection("sieve.put: unknown capability refused at parse",
|
|
630
|
+
agent.sieve.put({
|
|
631
|
+
actor: actor, name: "bad-filter",
|
|
632
|
+
script: 'require ["nonsense-capability"];\r\nkeep;\r\n',
|
|
633
|
+
ownedNames: ["bad-filter"],
|
|
634
|
+
}), "mail-agent/sieve-parse-error");
|
|
635
|
+
} finally { _teardown(fx); }
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
async function testCheckPermissionNoActor() {
|
|
639
|
+
// With a permissions instance but NO posture, a not-implemented method
|
|
640
|
+
// whose args omit actor reaches _checkPermission's no-actor guard
|
|
641
|
+
// (validateActor is skipped when posture is null).
|
|
642
|
+
var fx = await _setup("perm-noactor");
|
|
643
|
+
try {
|
|
644
|
+
var perms = b.permissions.create({
|
|
645
|
+
roles: { writer: { permissions: ["mail:write"] } },
|
|
646
|
+
auditFailures: false, auditSuccess: false,
|
|
647
|
+
});
|
|
648
|
+
var agent = b.mail.agent.create({ store: fx.store, permissions: perms });
|
|
649
|
+
// _checkPermission runs at the entry (config-time tier) and THROWS
|
|
650
|
+
// synchronously — the facade method never returns its promise here.
|
|
651
|
+
var threw = null;
|
|
652
|
+
try { agent.compose({}); } catch (e) { threw = e; }
|
|
653
|
+
check("checkPermission: missing actor refused with no-actor",
|
|
654
|
+
threw && (threw.code || "").indexOf("mail-agent/no-actor") !== -1);
|
|
655
|
+
} finally { _teardown(fx); }
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
async function testDefaultsAndFilters() {
|
|
659
|
+
// Cover the option-default branches: quota without a folder falls back
|
|
660
|
+
// to INBOX; flag without set/unset defaults both to []; search with a
|
|
661
|
+
// text + modseq filter drives the FTS path and the hasText audit flag.
|
|
662
|
+
var fx = await _setup("defaults");
|
|
663
|
+
try {
|
|
664
|
+
var agent = b.mail.agent.create({ store: fx.store });
|
|
665
|
+
var actor = { id: "u1" };
|
|
666
|
+
|
|
667
|
+
var q = await agent.quota({ actor: actor });
|
|
668
|
+
check("quota: folder defaults to INBOX", typeof q.usedBytes === "number");
|
|
669
|
+
|
|
670
|
+
var meta = fx.store.appendMessage("INBOX", _msg([
|
|
671
|
+
"From: a@x", "To: b@y", "Subject: needle-subject", "Message-Id: <d@x>",
|
|
672
|
+
"Date: Wed, 14 May 2026 12:00:00 +0000",
|
|
673
|
+
], "findme body"));
|
|
674
|
+
|
|
675
|
+
var f = await agent.flag({ actor: actor, folder: "INBOX", objectIds: [meta.objectid] });
|
|
676
|
+
check("flag: absent set/unset default to empty", f.changed === 0 || typeof f.changed === "number");
|
|
677
|
+
|
|
678
|
+
var r = await agent.search({
|
|
679
|
+
actor: actor, folder: "INBOX",
|
|
680
|
+
filter: { text: "needle", modseq: { gt: 0 } },
|
|
681
|
+
});
|
|
682
|
+
check("search: text+modseq filter returns the matching row",
|
|
683
|
+
Array.isArray(r.rows) && r.rows.length >= 1);
|
|
684
|
+
|
|
685
|
+
// No folder → defaults to INBOX (the `args.folder || "INBOX"` branch).
|
|
686
|
+
var r2 = await agent.search({ actor: actor });
|
|
687
|
+
check("search: folder defaults to INBOX", Array.isArray(r2.rows) && r2.rows.length >= 1);
|
|
688
|
+
} finally { _teardown(fx); }
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
async function testPostureNotImplementedAndFloorMiss() {
|
|
692
|
+
// Under a set posture, a not-implemented method still runs the
|
|
693
|
+
// posture actor-field validation at entry before rejecting. And an
|
|
694
|
+
// expunge under a posture with no regulator-mandated retention floor
|
|
695
|
+
// (GDPR carries no fixed mail-retention minimum here) applies floorMs=0
|
|
696
|
+
// so eligible messages are hard-deleted.
|
|
697
|
+
var fx = await _setup("posture-notimpl");
|
|
698
|
+
try {
|
|
699
|
+
var agent = b.mail.agent.create({ store: fx.store, posture: "hipaa" });
|
|
700
|
+
|
|
701
|
+
// Posture set + actor MISSING the required field → validateActor
|
|
702
|
+
// throws the posture-field error (not the not-implemented reject).
|
|
703
|
+
var eMissing = null;
|
|
704
|
+
try { await agent.compose({ actor: { id: "u1" } }); } catch (e) { eMissing = e; }
|
|
705
|
+
check("not-implemented under posture: missing field refused first",
|
|
706
|
+
eMissing && (eMissing.code || "").indexOf("mail-query/missing-posture-field") !== -1);
|
|
707
|
+
|
|
708
|
+
// Posture set + complete actor → passes validateActor, then rejects
|
|
709
|
+
// not-implemented (the posture-truthy branch of _notImplemented).
|
|
710
|
+
await expectRejection("not-implemented under posture: complete actor rejects not-implemented",
|
|
711
|
+
agent.compose({ actor: { id: "u1", purposeOfUse: "TREATMENT" } }), "mail-agent/not-implemented");
|
|
712
|
+
|
|
713
|
+
// GDPR posture: valid for create, absent from the retention floor
|
|
714
|
+
// table → floorMs resolves to 0, so a young message is expungeable.
|
|
715
|
+
var gdprAgent = b.mail.agent.create({ store: fx.store, posture: "gdpr" });
|
|
716
|
+
var gdprActor = { id: "u1", lawfulBasis: "consent" };
|
|
717
|
+
var meta = fx.store.appendMessage("INBOX", _msg([
|
|
718
|
+
"From: a@x", "To: b@y", "Subject: gdpr-erase", "Message-Id: <g@x>",
|
|
719
|
+
"Date: Wed, 14 May 2026 12:00:00 +0000",
|
|
720
|
+
], "x"));
|
|
721
|
+
fx.store.moveMessages("INBOX", "Trash", [meta.objectid]);
|
|
722
|
+
var rv = await gdprAgent.expunge({ actor: gdprActor, folder: "Trash", objectIds: [meta.objectid] });
|
|
723
|
+
check("expunge under GDPR (no floor): message hard-deleted",
|
|
724
|
+
rv.deleted.length === 1 && rv.refused.length === 0 &&
|
|
725
|
+
fx.store.fetchByObjectId("Trash", meta.objectid) === null);
|
|
726
|
+
} finally { _teardown(fx); }
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
async function testConsumerErrorBranches() {
|
|
730
|
+
// consumer() entry validation THROWS on every malformed opts shape.
|
|
731
|
+
var fx = await _setup("consumer-err");
|
|
732
|
+
try {
|
|
733
|
+
var innerAgent = b.mail.agent.create({ store: fx.store });
|
|
734
|
+
|
|
735
|
+
var eNull = null;
|
|
736
|
+
try { b.mail.agent.consumer(null); } catch (e) { eNull = e; }
|
|
737
|
+
check("consumer: null opts refused",
|
|
738
|
+
eNull && (eNull.code || "").indexOf("mail-agent/bad-opts") !== -1);
|
|
739
|
+
|
|
740
|
+
var eQ = null;
|
|
741
|
+
try { b.mail.agent.consumer({ agent: innerAgent, queue: { notAQueue: true } }); } catch (e) { eQ = e; }
|
|
742
|
+
check("consumer: queue without consume refused",
|
|
743
|
+
eQ && (eQ.code || "").indexOf("mail-agent/bad-queue") !== -1);
|
|
744
|
+
|
|
745
|
+
var fakeQueue = { consume: function () {}, enqueue: function () {} };
|
|
746
|
+
var eMc0 = null;
|
|
747
|
+
try { b.mail.agent.consumer({ agent: innerAgent, queue: fakeQueue, maxConcurrency: 0 }); } catch (e) { eMc0 = e; }
|
|
748
|
+
check("consumer: zero maxConcurrency refused",
|
|
749
|
+
eMc0 && (eMc0.code || "").indexOf("mail-agent/bad-max-concurrency") !== -1);
|
|
750
|
+
|
|
751
|
+
var eMcNaN = null;
|
|
752
|
+
try { b.mail.agent.consumer({ agent: innerAgent, queue: fakeQueue, maxConcurrency: NaN }); } catch (e) { eMcNaN = e; }
|
|
753
|
+
check("consumer: non-finite maxConcurrency refused",
|
|
754
|
+
eMcNaN && (eMcNaN.code || "").indexOf("mail-agent/bad-max-concurrency") !== -1);
|
|
755
|
+
|
|
756
|
+
// Explicit numeric maxConcurrency accepted (positive branch of the
|
|
757
|
+
// typeof ternary) — build only, no start.
|
|
758
|
+
var consExplicit = b.mail.agent.consumer({ agent: innerAgent, queue: fakeQueue, maxConcurrency: 3 });
|
|
759
|
+
check("consumer: explicit maxConcurrency accepted", typeof consExplicit.start === "function");
|
|
760
|
+
} finally { _teardown(fx); }
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
async function testConsumerDispatch() {
|
|
764
|
+
// Drive the consumer's real subscribe → dispatch → stop loop against a
|
|
765
|
+
// fake queue that captures the envelope handler. Covers direct-method
|
|
766
|
+
// routing, dotted-method routing, unknown-method refusal, double-start
|
|
767
|
+
// refusal, and the stopped-drop guard.
|
|
768
|
+
var fx = await _setup("consumer-dispatch");
|
|
769
|
+
try {
|
|
770
|
+
var innerAgent = b.mail.agent.create({ store: fx.store });
|
|
771
|
+
var actor = { id: "u1" };
|
|
772
|
+
|
|
773
|
+
var handler = null;
|
|
774
|
+
var subscribeCount = 0;
|
|
775
|
+
var unsubscribed = false;
|
|
776
|
+
var fakeQueue = {
|
|
777
|
+
consume: async function (topic, fn, subOpts) {
|
|
778
|
+
subscribeCount += 1;
|
|
779
|
+
handler = fn;
|
|
780
|
+
check("consumer: consume receives maxConcurrency opt",
|
|
781
|
+
subOpts && subOpts.maxConcurrency === 4 && topic === "mail.agent.tasks");
|
|
782
|
+
return { unsubscribe: async function () { unsubscribed = true; } };
|
|
783
|
+
},
|
|
784
|
+
enqueue: async function () { return { jobId: "j1" }; },
|
|
785
|
+
};
|
|
786
|
+
|
|
787
|
+
// maxConcurrency omitted → default 4 (negative branch of the ternary).
|
|
788
|
+
var cons = b.mail.agent.consumer({ agent: innerAgent, queue: fakeQueue });
|
|
789
|
+
await cons.start();
|
|
790
|
+
check("consumer: start subscribes once", subscribeCount === 1 && typeof handler === "function");
|
|
791
|
+
|
|
792
|
+
await expectRejection("consumer: double start refused",
|
|
793
|
+
cons.start(), "mail-agent/already-started");
|
|
794
|
+
|
|
795
|
+
// Direct-method routing → agent.folders.
|
|
796
|
+
var fres = await handler({ method: "folders", args: { actor: actor } });
|
|
797
|
+
check("consumer: direct method routes to agent.folders", Array.isArray(fres.folders));
|
|
798
|
+
|
|
799
|
+
// Dotted-method routing → agent.sieve.put.
|
|
800
|
+
var sres = await handler({
|
|
801
|
+
method: "sieve.put",
|
|
802
|
+
args: { actor: actor, name: "cf", script: VALID_SIEVE, ownedNames: ["cf"] },
|
|
803
|
+
});
|
|
804
|
+
check("consumer: dotted method routes to agent.sieve.put", sres.ok === true);
|
|
805
|
+
|
|
806
|
+
// Unknown flat method refused.
|
|
807
|
+
await expectRejection("consumer: unknown method refused",
|
|
808
|
+
handler({ method: "bogus", args: {} }), "mail-agent/unknown-method");
|
|
809
|
+
|
|
810
|
+
// Missing method refused (falls through to the unknown-method throw).
|
|
811
|
+
await expectRejection("consumer: missing method refused",
|
|
812
|
+
handler({ args: {} }), "mail-agent/unknown-method");
|
|
813
|
+
|
|
814
|
+
// Dotted method whose namespace/leaf is unknown refused.
|
|
815
|
+
await expectRejection("consumer: unknown dotted method refused",
|
|
816
|
+
handler({ method: "sieve.nope", args: {} }), "mail-agent/unknown-method");
|
|
817
|
+
|
|
818
|
+
// stop() unsubscribes; a post-stop envelope is dropped silently.
|
|
819
|
+
await cons.stop();
|
|
820
|
+
check("consumer: stop unsubscribes", unsubscribed === true);
|
|
821
|
+
var dropped = await handler({ method: "folders", args: { actor: actor } });
|
|
822
|
+
check("consumer: stopped consumer drops the envelope", dropped === undefined);
|
|
823
|
+
} finally { _teardown(fx); }
|
|
824
|
+
}
|
|
825
|
+
|
|
397
826
|
async function run() {
|
|
398
827
|
testSurface();
|
|
399
828
|
await testCreateRequiresStore();
|
|
@@ -410,6 +839,18 @@ async function run() {
|
|
|
410
839
|
await testDispatchRouting();
|
|
411
840
|
await testConsumerSurface();
|
|
412
841
|
await testGuardsExposed();
|
|
842
|
+
await testCreateErrorBranches();
|
|
843
|
+
await testDispatchOptionValidation();
|
|
844
|
+
await testIdentityResolver();
|
|
845
|
+
await testAuditOverride();
|
|
846
|
+
await testMethodBadArgs();
|
|
847
|
+
await testDeleteInTrash();
|
|
848
|
+
await testSievePut();
|
|
849
|
+
await testCheckPermissionNoActor();
|
|
850
|
+
await testDefaultsAndFilters();
|
|
851
|
+
await testPostureNotImplementedAndFloorMiss();
|
|
852
|
+
await testConsumerErrorBranches();
|
|
853
|
+
await testConsumerDispatch();
|
|
413
854
|
}
|
|
414
855
|
|
|
415
856
|
module.exports = { run: run };
|