@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
|
@@ -9,6 +9,40 @@ var helpers = require("../helpers");
|
|
|
9
9
|
var b = helpers.b;
|
|
10
10
|
var check = helpers.check;
|
|
11
11
|
|
|
12
|
+
// The client dispatchers (send/get/cancel) reach the peer through the shared
|
|
13
|
+
// lib/http-client module (a module-level lazyRequire inside lib/a2a-tasks.js).
|
|
14
|
+
// The framework's http-client is https-only + SSRF-blocks loopback by default,
|
|
15
|
+
// so a real localhost listener is unreachable through the a2a dispatchers
|
|
16
|
+
// without weakening a security default. Instead we inject a transport stub by
|
|
17
|
+
// swapping http-client's `request` for the duration of one scenario (restored
|
|
18
|
+
// in a finally) — no real network, exercising the REAL _jsonRpc response
|
|
19
|
+
// handling (status classes, JSON parse, envelope validation, rpc-error
|
|
20
|
+
// extraction, audit emission) against controlled peer responses.
|
|
21
|
+
var httpClientMod = require("../../lib/http-client");
|
|
22
|
+
|
|
23
|
+
function withTransport(responder, run) {
|
|
24
|
+
var orig = httpClientMod.request;
|
|
25
|
+
httpClientMod.request = responder;
|
|
26
|
+
return Promise.resolve().then(run).finally(function () {
|
|
27
|
+
httpClientMod.request = orig;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// respond(obj, statusCode?, asBuffer?) — build an http-client response stub.
|
|
32
|
+
// `obj` may be a string (sent verbatim, e.g. non-JSON) or an object (JSON
|
|
33
|
+
// serialized). `asBuffer` returns the body as a Buffer to exercise the
|
|
34
|
+
// `rsp.body.toString("utf8")` branch.
|
|
35
|
+
function respond(obj, statusCode, asBuffer) {
|
|
36
|
+
var s = typeof obj === "string" ? obj : JSON.stringify(obj);
|
|
37
|
+
return function () {
|
|
38
|
+
return Promise.resolve({ statusCode: statusCode || 200, body: asBuffer ? Buffer.from(s, "utf8") : s });
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function rejectTransport(message) {
|
|
43
|
+
return function () { return Promise.reject(new Error(message)); };
|
|
44
|
+
}
|
|
45
|
+
|
|
12
46
|
function _mockReq(method, contentType, bodyBytes, scopes) {
|
|
13
47
|
var listeners = {};
|
|
14
48
|
var req = {
|
|
@@ -232,19 +266,386 @@ async function testAgentCardMiddleware() {
|
|
|
232
266
|
check("agentCard: POST → 405", res2._statusCode() === 405);
|
|
233
267
|
}
|
|
234
268
|
|
|
269
|
+
// ---- Client dispatcher validation branches (no network) ----
|
|
270
|
+
|
|
271
|
+
async function testClientRefusesBadTaskShapes() {
|
|
272
|
+
function expectCode(label, p, code) {
|
|
273
|
+
return p.then(function () { check(label, false); }, function (e) {
|
|
274
|
+
check(label, (e.code || "") === code);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
await Promise.all([
|
|
278
|
+
// send: task must be a non-null, non-array object.
|
|
279
|
+
expectCode("send: null task", b.a2a.tasks.send({ peerUrl: "https://x", task: null }), "a2a-tasks/bad-task"),
|
|
280
|
+
expectCode("send: array task", b.a2a.tasks.send({ peerUrl: "https://x", task: [] }), "a2a-tasks/bad-task"),
|
|
281
|
+
expectCode("send: string task", b.a2a.tasks.send({ peerUrl: "https://x", task: "x" }), "a2a-tasks/bad-task"),
|
|
282
|
+
// send: task.input must be an object when provided (string / null both refused).
|
|
283
|
+
expectCode("send: string input", b.a2a.tasks.send({ peerUrl: "https://x", task: { skill: "summarize", input: "nope" } }), "a2a-tasks/bad-input"),
|
|
284
|
+
expectCode("send: null input", b.a2a.tasks.send({ peerUrl: "https://x", task: { skill: "summarize", input: null } }), "a2a-tasks/bad-input"),
|
|
285
|
+
// get / cancel: opts required (undefined opts → bad-opts, not a crash).
|
|
286
|
+
expectCode("get: no opts", b.a2a.tasks.get(), "a2a-tasks/bad-opts"),
|
|
287
|
+
expectCode("cancel: no opts", b.a2a.tasks.cancel(), "a2a-tasks/bad-opts"),
|
|
288
|
+
// get: missing taskId → requireNonEmptyString path.
|
|
289
|
+
expectCode("get: missing taskId", b.a2a.tasks.get({ peerUrl: "https://x" }), "a2a-tasks/bad-task-id"),
|
|
290
|
+
// cancel: non-empty but invalid taskId → the regex/length gate (distinct
|
|
291
|
+
// from the empty-string requireNonEmptyString path the existing test drives).
|
|
292
|
+
expectCode("cancel: metachar taskId", b.a2a.tasks.cancel({ peerUrl: "https://x", taskId: "a/b" }), "a2a-tasks/bad-task-id"),
|
|
293
|
+
expectCode("cancel: oversized taskId", b.a2a.tasks.cancel({ peerUrl: "https://x", taskId: "z".repeat(65) }), "a2a-tasks/bad-task-id"),
|
|
294
|
+
]);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// ---- Client dispatcher transport paths (stubbed http-client) ----
|
|
298
|
+
|
|
299
|
+
async function testClientTransportSuccess() {
|
|
300
|
+
// tasks/get: string body → JSON-RPC result envelope unwrapped to .result.
|
|
301
|
+
await withTransport(respond({ jsonrpc: "2.0", id: "x", result: { taskId: "t1", status: "completed" } }), async function () {
|
|
302
|
+
var r = await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123" });
|
|
303
|
+
check("client get: result envelope unwrapped", r && r.taskId === "t1" && r.status === "completed");
|
|
304
|
+
});
|
|
305
|
+
// Buffer body + explicit timeoutMs + headers (exercises rsp.body.toString
|
|
306
|
+
// and the provided-timeout / provided-headers branches).
|
|
307
|
+
await withTransport(respond({ jsonrpc: "2.0", id: "x", result: { ok: true } }, 200, true), async function () {
|
|
308
|
+
var r = await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123", timeoutMs: 8000, headers: { "X-Trace": "1" } });
|
|
309
|
+
check("client get: Buffer body parsed", r && r.ok === true);
|
|
310
|
+
});
|
|
311
|
+
// tasks/send: explicit timeoutMs + headers + audit:false (skips the ok audit emit).
|
|
312
|
+
await withTransport(respond({ jsonrpc: "2.0", id: "x", result: { taskId: "s1", status: "queued" } }), async function () {
|
|
313
|
+
var r = await b.a2a.tasks.send({
|
|
314
|
+
peerUrl: "https://peer.example/a2a",
|
|
315
|
+
task: { skill: "summarize", input: { url: "https://doc" } },
|
|
316
|
+
timeoutMs: 5000,
|
|
317
|
+
headers: { "X-Sig": "abc" },
|
|
318
|
+
audit: false,
|
|
319
|
+
});
|
|
320
|
+
check("client send: result returned on audit-disabled path", r && r.taskId === "s1" && r.status === "queued");
|
|
321
|
+
});
|
|
322
|
+
// tasks/cancel: explicit timeoutMs + provided headers.
|
|
323
|
+
await withTransport(respond({ jsonrpc: "2.0", id: "x", result: { taskId: "c1", status: "canceled" } }), async function () {
|
|
324
|
+
var r = await b.a2a.tasks.cancel({ peerUrl: "https://peer.example/a2a", taskId: "abc-123", timeoutMs: 9000, headers: { "X-H": "y" } });
|
|
325
|
+
check("client cancel: result envelope unwrapped", r && r.status === "canceled");
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
async function testClientTransportErrors() {
|
|
330
|
+
// Transport failure with audit on (default) → a2a-tasks/transport.
|
|
331
|
+
await withTransport(rejectTransport("ECONNREFUSED"), async function () {
|
|
332
|
+
var caught = null;
|
|
333
|
+
try { await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123" }); }
|
|
334
|
+
catch (e) { caught = e; }
|
|
335
|
+
check("client get: transport failure mapped (audit on)", caught && caught.code === "a2a-tasks/transport");
|
|
336
|
+
});
|
|
337
|
+
// Transport failure with audit:false (skips the transport_failed audit emit).
|
|
338
|
+
await withTransport(rejectTransport("ETIMEDOUT"), async function () {
|
|
339
|
+
var caught = null;
|
|
340
|
+
try { await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123", audit: false }); }
|
|
341
|
+
catch (e) { caught = e; }
|
|
342
|
+
check("client get: transport failure still throws (audit off)", caught && caught.code === "a2a-tasks/transport");
|
|
343
|
+
});
|
|
344
|
+
// Transport failure rejecting with a NON-Error value (no `.message`) →
|
|
345
|
+
// the `err.message || err` stringify fallback is exercised.
|
|
346
|
+
await withTransport(function () { return Promise.reject("raw-string-failure"); }, async function () {
|
|
347
|
+
var caught = null;
|
|
348
|
+
try { await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123" }); }
|
|
349
|
+
catch (e) { caught = e; }
|
|
350
|
+
check("client get: non-Error transport reject stringified",
|
|
351
|
+
caught && caught.code === "a2a-tasks/transport" && /raw-string-failure/.test(caught.message));
|
|
352
|
+
});
|
|
353
|
+
// HTTP non-2xx (>= 300) → a2a-tasks/http-error.
|
|
354
|
+
await withTransport(respond("upstream boom", 500), async function () {
|
|
355
|
+
var caught = null;
|
|
356
|
+
try { await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123" }); }
|
|
357
|
+
catch (e) { caught = e; }
|
|
358
|
+
check("client get: HTTP 500 → http-error", caught && caught.code === "a2a-tasks/http-error" && /HTTP 500/.test(caught.message));
|
|
359
|
+
});
|
|
360
|
+
// HTTP < 200 (informational) with audit:false → still http-error.
|
|
361
|
+
await withTransport(respond("early", 100), async function () {
|
|
362
|
+
var caught = null;
|
|
363
|
+
try { await b.a2a.tasks.cancel({ peerUrl: "https://peer.example/a2a", taskId: "abc-123", audit: false }); }
|
|
364
|
+
catch (e) { caught = e; }
|
|
365
|
+
check("client cancel: HTTP 100 → http-error", caught && caught.code === "a2a-tasks/http-error");
|
|
366
|
+
});
|
|
367
|
+
// Response body is not JSON → a2a-tasks/bad-response.
|
|
368
|
+
await withTransport(respond("<html>not json</html>", 200), async function () {
|
|
369
|
+
var caught = null;
|
|
370
|
+
try { await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123" }); }
|
|
371
|
+
catch (e) { caught = e; }
|
|
372
|
+
check("client get: non-JSON body → bad-response", caught && caught.code === "a2a-tasks/bad-response" && /not valid JSON/.test(caught.message));
|
|
373
|
+
});
|
|
374
|
+
// Valid JSON that is NOT a JSON-RPC 2.0 envelope → a2a-tasks/bad-response.
|
|
375
|
+
await withTransport(respond({ foo: "bar" }, 200), async function () {
|
|
376
|
+
var caught = null;
|
|
377
|
+
try { await b.a2a.tasks.get({ peerUrl: "https://peer.example/a2a", taskId: "abc-123" }); }
|
|
378
|
+
catch (e) { caught = e; }
|
|
379
|
+
check("client get: non-envelope JSON → bad-response", caught && caught.code === "a2a-tasks/bad-response" && /JSON-RPC 2\.0 envelope/.test(caught.message));
|
|
380
|
+
});
|
|
381
|
+
// JSON-RPC error envelope (audit on) → rpc-error carrying rpcCode + rpcData.
|
|
382
|
+
await withTransport(respond({ jsonrpc: "2.0", id: "x", error: { code: -32003, message: "not cancelable", data: { taskId: "abc" } } }), async function () {
|
|
383
|
+
var caught = null;
|
|
384
|
+
try { await b.a2a.tasks.cancel({ peerUrl: "https://peer.example/a2a", taskId: "abc-123" }); }
|
|
385
|
+
catch (e) { caught = e; }
|
|
386
|
+
check("client cancel: rpc error surfaces rpcCode + rpcData",
|
|
387
|
+
caught && caught.code === "a2a-tasks/rpc-error" && caught.rpcCode === -32003 && caught.rpcData && caught.rpcData.taskId === "abc");
|
|
388
|
+
});
|
|
389
|
+
// JSON-RPC error with no message + audit:false → default "rpc error" text.
|
|
390
|
+
await withTransport(respond({ jsonrpc: "2.0", id: "x", error: { code: -32001 } }), async function () {
|
|
391
|
+
var caught = null;
|
|
392
|
+
try { await b.a2a.tasks.send({ peerUrl: "https://peer.example/a2a", task: { skill: "summarize" }, audit: false }); }
|
|
393
|
+
catch (e) { caught = e; }
|
|
394
|
+
check("client send: message-less rpc error → default text (audit off)",
|
|
395
|
+
caught && caught.code === "a2a-tasks/rpc-error" && caught.rpcCode === -32001 && /rpc error/.test(caught.message));
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// ---- Middleware factory bad-opts (boot-time throws) ----
|
|
400
|
+
|
|
401
|
+
function testMiddlewareBadFactoryOpts() {
|
|
402
|
+
function expectThrow(label, fn, code) {
|
|
403
|
+
var threw = null;
|
|
404
|
+
try { fn(); } catch (e) { threw = e; }
|
|
405
|
+
check(label, threw && threw.code === code);
|
|
406
|
+
}
|
|
407
|
+
expectThrow("mw.tasks: no opts", function () { b.a2a.middleware.tasks(); }, "a2a-tasks/bad-mw-opts");
|
|
408
|
+
expectThrow("mw.tasks: opts not object", function () { b.a2a.middleware.tasks("nope"); }, "a2a-tasks/bad-mw-opts");
|
|
409
|
+
expectThrow("mw.tasks: missing handler", function () { b.a2a.middleware.tasks({}); }, "a2a-tasks/bad-mw-opts");
|
|
410
|
+
expectThrow("mw.tasks: handler not fn", function () { b.a2a.middleware.tasks({ handler: 123 }); }, "a2a-tasks/bad-mw-opts");
|
|
411
|
+
expectThrow("mw.tasks: scopes not object", function () { b.a2a.middleware.tasks({ handler: function () {}, scopes: "s" }); }, "a2a-tasks/bad-mw-opts");
|
|
412
|
+
expectThrow("mw.tasks: scopes array", function () { b.a2a.middleware.tasks({ handler: function () {}, scopes: [] }); }, "a2a-tasks/bad-mw-opts");
|
|
413
|
+
// Non-string scope VALUE (a number, not just the array case the sibling
|
|
414
|
+
// test drives) refused at construction — else the runtime string-check
|
|
415
|
+
// gate silently skips (fail-open authz bypass on the gated skill).
|
|
416
|
+
expectThrow("mw.tasks: numeric scope value", function () { b.a2a.middleware.tasks({ handler: function () {}, scopes: { transfer: 5 } }); }, "a2a-tasks/bad-mw-opts");
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
function testAgentCardBadOpts() {
|
|
420
|
+
function expectThrow(label, fn, code) {
|
|
421
|
+
var threw = null;
|
|
422
|
+
try { fn(); } catch (e) { threw = e; }
|
|
423
|
+
check(label, threw && threw.code === code);
|
|
424
|
+
}
|
|
425
|
+
expectThrow("agentCard: no opts", function () { b.a2a.middleware.agentCard(); }, "a2a-tasks/bad-mw-opts");
|
|
426
|
+
expectThrow("agentCard: opts not object", function () { b.a2a.middleware.agentCard("x"); }, "a2a-tasks/bad-mw-opts");
|
|
427
|
+
expectThrow("agentCard: card missing", function () { b.a2a.middleware.agentCard({}); }, "a2a-tasks/bad-mw-opts");
|
|
428
|
+
expectThrow("agentCard: card not object", function () { b.a2a.middleware.agentCard({ card: "not-an-object" }); }, "a2a-tasks/bad-mw-opts");
|
|
429
|
+
// A present-but-invalid maxAgeSec (negative) is refused by the numeric-bounds gate.
|
|
430
|
+
expectThrow("agentCard: negative maxAgeSec", function () { b.a2a.middleware.agentCard({ card: { x: 1 }, maxAgeSec: -5 }); }, "a2a-tasks/bad-max-age");
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// ---- Middleware request-path branches ----
|
|
434
|
+
|
|
435
|
+
async function testMiddlewareInvalidEnvelope() {
|
|
436
|
+
// Valid JSON, but not a JSON-RPC 2.0 envelope (no jsonrpc / method) → 400 -32600.
|
|
437
|
+
var handlerRan = false;
|
|
438
|
+
var mw = b.a2a.middleware.tasks({ handler: function () { handlerRan = true; } });
|
|
439
|
+
var req = _mockReq("POST", "application/json", Buffer.from('{"id":7,"foo":"bar"}'), []);
|
|
440
|
+
var res = _mockRes();
|
|
441
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
442
|
+
check("middleware: non-envelope JSON → 400 invalid-request, handler not run",
|
|
443
|
+
res._statusCode() === 400 && body && body.error && body.error.code === -32600 && handlerRan === false);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
async function testMiddlewareMissingParams() {
|
|
447
|
+
// tasks/send with NO params → params defaults to {} → task undefined → -32602.
|
|
448
|
+
var handlerRan = false;
|
|
449
|
+
var mw = b.a2a.middleware.tasks({ handler: function () { handlerRan = true; return null; } });
|
|
450
|
+
var req = _mockReq("POST", "application/json", Buffer.from('{"jsonrpc":"2.0","id":1,"method":"tasks/send"}'), []);
|
|
451
|
+
var res = _mockRes();
|
|
452
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
453
|
+
check("middleware: tasks/send missing params → -32602, handler not run",
|
|
454
|
+
body && body.error && body.error.code === -32602 && handlerRan === false);
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
async function testMiddlewareNoId() {
|
|
458
|
+
// A request without an id → the response id is null (id-defaulting branch).
|
|
459
|
+
var mw = b.a2a.middleware.tasks({ handler: function () { return { taskId: "t0", status: "queued" }; } });
|
|
460
|
+
var req = _mockReq("POST", "application/json",
|
|
461
|
+
Buffer.from('{"jsonrpc":"2.0","method":"tasks/send","params":{"task":{"skill":"summarize"}}}'), []);
|
|
462
|
+
var res = _mockRes();
|
|
463
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
464
|
+
check("middleware: request without id → response id null",
|
|
465
|
+
body && body.result && body.result.taskId === "t0" && body.id === null);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
async function testMiddlewareCancelSuccess() {
|
|
469
|
+
// Exercises the tasks/cancel identifier-validation operand + a cancel handler success.
|
|
470
|
+
var captured = null;
|
|
471
|
+
var mw = b.a2a.middleware.tasks({ handler: function (ctx) { captured = ctx; return { taskId: ctx.taskId, status: "canceled" }; } });
|
|
472
|
+
var req = _mockReq("POST", "application/json",
|
|
473
|
+
Buffer.from('{"jsonrpc":"2.0","id":9,"method":"tasks/cancel","params":{"taskId":"abc-123"}}'), []);
|
|
474
|
+
var res = _mockRes();
|
|
475
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
476
|
+
check("middleware: tasks/cancel routes to handler",
|
|
477
|
+
body && body.result && body.result.status === "canceled" &&
|
|
478
|
+
captured && captured.method === "tasks/cancel" && captured.taskId === "abc-123");
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
async function testMiddlewareScopeDeniedNoGrantedArray() {
|
|
482
|
+
// A gated skill whose request carries NO a2aScopes array at all (the operator
|
|
483
|
+
// auth layer never populated it) → grantedScopes defaults to [] → denied.
|
|
484
|
+
var handlerRan = false;
|
|
485
|
+
var mw = b.a2a.middleware.tasks({
|
|
486
|
+
scopes: { summarize: "a2a:summarize" },
|
|
487
|
+
handler: function () { handlerRan = true; return null; },
|
|
488
|
+
});
|
|
489
|
+
// Pass `undefined` for the a2aScopes arg → req.a2aScopes is not an array.
|
|
490
|
+
var req = _mockReq("POST", "application/json",
|
|
491
|
+
Buffer.from('{"jsonrpc":"2.0","id":1,"method":"tasks/send","params":{"task":{"skill":"summarize"}}}'),
|
|
492
|
+
undefined);
|
|
493
|
+
var res = _mockRes();
|
|
494
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
495
|
+
check("middleware: gated skill with no granted-scopes array → -32001, handler not run",
|
|
496
|
+
body && body.error && body.error.code === -32001 && handlerRan === false);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
async function testMiddlewareScopeGranted() {
|
|
500
|
+
// Granted scope present in req.a2aScopes → handler runs (scope check passes).
|
|
501
|
+
var handlerRan = false;
|
|
502
|
+
var mw = b.a2a.middleware.tasks({
|
|
503
|
+
scopes: { summarize: "a2a:summarize" },
|
|
504
|
+
handler: function () { handlerRan = true; return { taskId: "t9", status: "queued" }; },
|
|
505
|
+
});
|
|
506
|
+
var req = _mockReq("POST", "application/json",
|
|
507
|
+
Buffer.from('{"jsonrpc":"2.0","id":1,"method":"tasks/send","params":{"task":{"skill":"summarize"}}}'),
|
|
508
|
+
["a2a:summarize"]);
|
|
509
|
+
var res = _mockRes();
|
|
510
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
511
|
+
check("middleware: granted scope → handler runs",
|
|
512
|
+
handlerRan === true && body && body.result && body.result.taskId === "t9");
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
async function testMiddlewareUngatedSkill() {
|
|
516
|
+
// A scopes map is present, but the requested skill isn't in it → un-gated,
|
|
517
|
+
// proceeds to the handler (requiredScope resolves to undefined).
|
|
518
|
+
var handlerRan = false;
|
|
519
|
+
var mw = b.a2a.middleware.tasks({
|
|
520
|
+
scopes: { transfer: "a2a:transfer" },
|
|
521
|
+
handler: function () { handlerRan = true; return { taskId: "t8", status: "queued" }; },
|
|
522
|
+
});
|
|
523
|
+
var req = _mockReq("POST", "application/json",
|
|
524
|
+
Buffer.from('{"jsonrpc":"2.0","id":1,"method":"tasks/send","params":{"task":{"skill":"summarize"}}}'),
|
|
525
|
+
[]);
|
|
526
|
+
var res = _mockRes();
|
|
527
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
528
|
+
check("middleware: un-gated skill bypasses scope check → handler runs",
|
|
529
|
+
handlerRan === true && body && body.result && body.result.taskId === "t8");
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
async function testMiddlewareProtoShadowSkill() {
|
|
533
|
+
// An attacker skill colliding with an Object.prototype member ("constructor")
|
|
534
|
+
// must NOT resolve an inherited scope — own-property lookup only, so it is
|
|
535
|
+
// treated as un-gated and reaches the handler rather than dereferencing a
|
|
536
|
+
// prototype member as its required scope.
|
|
537
|
+
var handlerRan = false;
|
|
538
|
+
var mw = b.a2a.middleware.tasks({
|
|
539
|
+
scopes: { summarize: "a2a:summarize" },
|
|
540
|
+
handler: function () { handlerRan = true; return { taskId: "t7", status: "queued" }; },
|
|
541
|
+
});
|
|
542
|
+
var req = _mockReq("POST", "application/json",
|
|
543
|
+
Buffer.from('{"jsonrpc":"2.0","id":1,"method":"tasks/send","params":{"task":{"skill":"constructor"}}}'),
|
|
544
|
+
[]);
|
|
545
|
+
var res = _mockRes();
|
|
546
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
547
|
+
check("middleware: proto-shadow skill 'constructor' not gated by inherited member",
|
|
548
|
+
handlerRan === true && body && body.result && body.result.taskId === "t7");
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
async function testMiddlewareHandlerError() {
|
|
552
|
+
// Handler throws a plain error → -32603 internal-error envelope, id echoed.
|
|
553
|
+
var mw = b.a2a.middleware.tasks({ handler: function () { throw new Error("boom in handler"); } });
|
|
554
|
+
var req = _mockReq("POST", "application/json",
|
|
555
|
+
Buffer.from('{"jsonrpc":"2.0","id":5,"method":"tasks/send","params":{"task":{"skill":"summarize"}}}'), []);
|
|
556
|
+
var res = _mockRes();
|
|
557
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
558
|
+
check("middleware: handler throw → -32603 with message",
|
|
559
|
+
body && body.error && body.error.code === -32603 && /boom in handler/.test(body.error.message));
|
|
560
|
+
check("middleware: handler-error id echoed", body && body.id === 5);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
async function testMiddlewareHandlerErrorRpcCode() {
|
|
564
|
+
// Handler throws an error carrying rpcCode → that code is surfaced (audit off path).
|
|
565
|
+
var mw = b.a2a.middleware.tasks({
|
|
566
|
+
audit: false,
|
|
567
|
+
handler: function () { var e = new Error("not cancelable"); e.rpcCode = -32003; throw e; },
|
|
568
|
+
});
|
|
569
|
+
var req = _mockReq("POST", "application/json",
|
|
570
|
+
Buffer.from('{"jsonrpc":"2.0","id":6,"method":"tasks/cancel","params":{"taskId":"abc-123"}}'), []);
|
|
571
|
+
var res = _mockRes();
|
|
572
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
573
|
+
check("middleware: handler rpcCode surfaced",
|
|
574
|
+
body && body.error && body.error.code === -32003 && body.id === 6);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
async function testMiddlewareHandlerFalsyThrow() {
|
|
578
|
+
// A handler that rejects with a FALSY value (no rpcCode, no message) →
|
|
579
|
+
// defaults to -32603 + "handler error" text (both fallback operands).
|
|
580
|
+
var mw = b.a2a.middleware.tasks({ handler: function () { return Promise.reject(null); } });
|
|
581
|
+
var req = _mockReq("POST", "application/json",
|
|
582
|
+
Buffer.from('{"jsonrpc":"2.0","id":8,"method":"tasks/send","params":{"task":{"skill":"summarize"}}}'), []);
|
|
583
|
+
var res = _mockRes();
|
|
584
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
585
|
+
check("middleware: falsy handler rejection → -32603 + default text",
|
|
586
|
+
body && body.error && body.error.code === -32603 && body.error.message === "handler error");
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
async function testMiddlewareBodyTooLarge() {
|
|
590
|
+
// A body exceeding maxBytes rejects inside _readBody → outer catch → 400 parse-error.
|
|
591
|
+
var handlerRan = false;
|
|
592
|
+
var mw = b.a2a.middleware.tasks({ handler: function () { handlerRan = true; }, maxBytes: 16 });
|
|
593
|
+
var big = Buffer.from(JSON.stringify({
|
|
594
|
+
jsonrpc: "2.0", id: 1, method: "tasks/send",
|
|
595
|
+
params: { task: { skill: "summarize", input: { pad: "x".repeat(200) } } },
|
|
596
|
+
}));
|
|
597
|
+
var req = _mockReq("POST", "application/json", big, []);
|
|
598
|
+
var res = _mockRes();
|
|
599
|
+
var body = await _runMwAndDecode(mw, req, res);
|
|
600
|
+
check("middleware: oversized body → 400 parse-error, handler not run",
|
|
601
|
+
res._statusCode() === 400 && body && body.error && body.error.code === -32700 &&
|
|
602
|
+
/could not read request body/.test(body.error.message) && handlerRan === false);
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
async function testAgentCardMaxAge() {
|
|
606
|
+
// Explicit positive maxAgeSec is honored (Math.floor path) in Cache-Control.
|
|
607
|
+
var mw = b.a2a.middleware.agentCard({ card: { agent: "a", signature: "sig" }, maxAgeSec: 60 });
|
|
608
|
+
var req = _mockReq("GET", null, null, []);
|
|
609
|
+
var res = _mockRes();
|
|
610
|
+
await new Promise(function (resolve) {
|
|
611
|
+
var origEnd = res.end.bind(res);
|
|
612
|
+
res.end = function (chunk) { origEnd(chunk); helpers.passiveObserve(5, "a2a-tasks: post-res.end tick").then(resolve); };
|
|
613
|
+
mw(req, res);
|
|
614
|
+
});
|
|
615
|
+
check("agentCard: explicit maxAgeSec honored", res._getHeaders()["cache-control"] === "public, max-age=60");
|
|
616
|
+
}
|
|
617
|
+
|
|
235
618
|
async function run() {
|
|
236
619
|
testTasksSurface();
|
|
237
620
|
await testClientRefusesBadOpts();
|
|
621
|
+
await testClientRefusesBadTaskShapes();
|
|
622
|
+
await testClientTransportSuccess();
|
|
623
|
+
await testClientTransportErrors();
|
|
238
624
|
await testMiddlewareMethodNotAllowed();
|
|
239
625
|
await testMiddlewareBadContentType();
|
|
240
626
|
await testMiddlewareInvalidJson();
|
|
241
627
|
await testMiddlewareMethodNotFound();
|
|
628
|
+
await testMiddlewareBadFactoryOpts();
|
|
629
|
+
await testMiddlewareInvalidEnvelope();
|
|
630
|
+
await testMiddlewareMissingParams();
|
|
631
|
+
await testMiddlewareNoId();
|
|
632
|
+
await testMiddlewareCancelSuccess();
|
|
242
633
|
await testMiddlewareScopeDenied();
|
|
634
|
+
await testMiddlewareScopeDeniedNoGrantedArray();
|
|
635
|
+
await testMiddlewareScopeGranted();
|
|
636
|
+
await testMiddlewareUngatedSkill();
|
|
637
|
+
await testMiddlewareProtoShadowSkill();
|
|
243
638
|
await testMiddlewareScopeNonStringThrows();
|
|
244
639
|
await testMiddlewareRejectsHostileSkill();
|
|
245
640
|
await testMiddlewareRejectsHostileTaskId();
|
|
246
641
|
await testMiddlewareSuccessSend();
|
|
642
|
+
await testMiddlewareHandlerError();
|
|
643
|
+
await testMiddlewareHandlerErrorRpcCode();
|
|
644
|
+
await testMiddlewareHandlerFalsyThrow();
|
|
645
|
+
await testMiddlewareBodyTooLarge();
|
|
646
|
+
await testAgentCardBadOpts();
|
|
247
647
|
await testAgentCardMiddleware();
|
|
648
|
+
await testAgentCardMaxAge();
|
|
248
649
|
}
|
|
249
650
|
|
|
250
651
|
module.exports = { run: run };
|