@adcp/sdk 5.23.0
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/.claude-plugin/marketplace.json +17 -0
- package/.claude-plugin/plugin.json +25 -0
- package/ADCP_VERSION +1 -0
- package/AGENTS.md +282 -0
- package/LICENSE +191 -0
- package/README.md +816 -0
- package/bin/adcp-async-handler.js +275 -0
- package/bin/adcp-config.js +240 -0
- package/bin/adcp-fuzz.js +391 -0
- package/bin/adcp-grade.js +505 -0
- package/bin/adcp-json-stdout.js +36 -0
- package/bin/adcp-registry.js +745 -0
- package/bin/adcp-signing.js +233 -0
- package/bin/adcp-step-hints.js +246 -0
- package/bin/adcp-version-check.js +150 -0
- package/bin/adcp.js +4821 -0
- package/compliance/cache/3.0.0/domains/brand/index.yaml +167 -0
- package/compliance/cache/3.0.0/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.0/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.0/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.0/domains/media-buy/index.yaml +742 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/delivery_reporting.yaml +180 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/governance_approved.yaml +186 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/governance_conditions.yaml +195 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/governance_denied.yaml +189 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/governance_denied_recovery.yaml +243 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/invalid_transitions.yaml +279 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/measurement_terms_rejected.yaml +194 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/proposal_finalize.yaml +242 -0
- package/compliance/cache/3.0.0/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.0/domains/media-buy/state-machine.yaml +437 -0
- package/compliance/cache/3.0.0/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.0/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.0/index.json +324 -0
- package/compliance/cache/3.0.0/protocols/brand/index.yaml +167 -0
- package/compliance/cache/3.0.0/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.0/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.0/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.0/protocols/media-buy/index.yaml +742 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/delivery_reporting.yaml +180 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/governance_approved.yaml +186 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/governance_conditions.yaml +195 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/governance_denied.yaml +189 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/governance_denied_recovery.yaml +243 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/invalid_transitions.yaml +279 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +194 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/proposal_finalize.yaml +242 -0
- package/compliance/cache/3.0.0/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.0/protocols/media-buy/state-machine.yaml +437 -0
- package/compliance/cache/3.0.0/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.0/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.0/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.0/specialisms/brand-rights/index.yaml +346 -0
- package/compliance/cache/3.0.0/specialisms/brand-rights/scenarios/governance_denied.yaml +203 -0
- package/compliance/cache/3.0.0/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.0/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.0/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.0/specialisms/creative-generative/generative-seller.yaml +733 -0
- package/compliance/cache/3.0.0/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.0/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.0/specialisms/governance-aware-seller/index.yaml +99 -0
- package/compliance/cache/3.0.0/specialisms/governance-delivery-monitor/index.yaml +419 -0
- package/compliance/cache/3.0.0/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.0/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.0/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.0/specialisms/sales-broadcast-tv/index.yaml +664 -0
- package/compliance/cache/3.0.0/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.0/specialisms/sales-guaranteed/index.yaml +479 -0
- package/compliance/cache/3.0.0/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.0/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.0/specialisms/sales-social/index.yaml +521 -0
- package/compliance/cache/3.0.0/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.0/specialisms/signal-marketplace/scenarios/governance_denied.yaml +195 -0
- package/compliance/cache/3.0.0/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.0/specialisms/signed-requests/index.yaml +192 -0
- package/compliance/cache/3.0.0/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.0/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.0/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.0/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.0/test-kits/signed-requests-runner.yaml +153 -0
- package/compliance/cache/3.0.0/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.0/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.0/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.0/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.0/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.0/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.0/universal/deterministic-testing.yaml +1318 -0
- package/compliance/cache/3.0.0/universal/error-compliance.yaml +468 -0
- package/compliance/cache/3.0.0/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.0/universal/idempotency.yaml +577 -0
- package/compliance/cache/3.0.0/universal/runner-output-contract.yaml +335 -0
- package/compliance/cache/3.0.0/universal/schema-validation.yaml +514 -0
- package/compliance/cache/3.0.0/universal/security.yaml +428 -0
- package/compliance/cache/3.0.0/universal/storyboard-schema.yaml +1010 -0
- package/compliance/cache/3.0.0/universal/webhook-emission.yaml +337 -0
- package/compliance/cache/3.0.0.previous/domains/brand/index.yaml +167 -0
- package/compliance/cache/3.0.0.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.0.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/index.yaml +742 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/delivery_reporting.yaml +180 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/governance_approved.yaml +186 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/governance_conditions.yaml +195 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/governance_denied.yaml +189 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +243 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/invalid_transitions.yaml +279 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +194 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/proposal_finalize.yaml +242 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.0.previous/domains/media-buy/state-machine.yaml +437 -0
- package/compliance/cache/3.0.0.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.0.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.0.previous/index.json +324 -0
- package/compliance/cache/3.0.0.previous/protocols/brand/index.yaml +167 -0
- package/compliance/cache/3.0.0.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.0.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/index.yaml +742 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +180 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/governance_approved.yaml +186 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/governance_conditions.yaml +195 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/governance_denied.yaml +189 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +243 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +279 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +194 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +242 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.0.previous/protocols/media-buy/state-machine.yaml +437 -0
- package/compliance/cache/3.0.0.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.0.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.0.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.0.previous/specialisms/brand-rights/index.yaml +346 -0
- package/compliance/cache/3.0.0.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +203 -0
- package/compliance/cache/3.0.0.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.0.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.0.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.0.previous/specialisms/creative-generative/generative-seller.yaml +733 -0
- package/compliance/cache/3.0.0.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.0.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.0.previous/specialisms/governance-aware-seller/index.yaml +99 -0
- package/compliance/cache/3.0.0.previous/specialisms/governance-delivery-monitor/index.yaml +419 -0
- package/compliance/cache/3.0.0.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.0.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.0.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.0.previous/specialisms/sales-broadcast-tv/index.yaml +664 -0
- package/compliance/cache/3.0.0.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.0.previous/specialisms/sales-guaranteed/index.yaml +479 -0
- package/compliance/cache/3.0.0.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.0.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.0.previous/specialisms/sales-social/index.yaml +521 -0
- package/compliance/cache/3.0.0.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.0.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +195 -0
- package/compliance/cache/3.0.0.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.0.previous/specialisms/signed-requests/index.yaml +192 -0
- package/compliance/cache/3.0.0.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.0.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.0.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.0.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.0.previous/test-kits/signed-requests-runner.yaml +153 -0
- package/compliance/cache/3.0.0.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.0.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.0.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.0.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.0.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.0.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.0.previous/universal/deterministic-testing.yaml +1318 -0
- package/compliance/cache/3.0.0.previous/universal/error-compliance.yaml +468 -0
- package/compliance/cache/3.0.0.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.0.previous/universal/idempotency.yaml +577 -0
- package/compliance/cache/3.0.0.previous/universal/runner-output-contract.yaml +335 -0
- package/compliance/cache/3.0.0.previous/universal/schema-validation.yaml +514 -0
- package/compliance/cache/3.0.0.previous/universal/security.yaml +428 -0
- package/compliance/cache/3.0.0.previous/universal/storyboard-schema.yaml +1010 -0
- package/compliance/cache/3.0.0.previous/universal/webhook-emission.yaml +337 -0
- package/compliance/cache/3.0.1/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.1/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.1/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.1/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.1/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.1/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.1/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.1/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.1/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.1/index.json +324 -0
- package/compliance/cache/3.0.1/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.1/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.1/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.1/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.1/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.1/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.1/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.1/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.1/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.1/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.1/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.1/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.1/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.1/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.1/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.1/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.1/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.1/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.1/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.1/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.1/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.1/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.1/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.1/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.1/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.1/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.1/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.1/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.1/specialisms/sales-social/index.yaml +577 -0
- package/compliance/cache/3.0.1/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.1/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.1/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.1/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.1/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.1/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.1/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.1/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.1/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.1/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.1/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.1/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.1/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.1/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.1/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.1/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.1/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.1/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.1/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.1/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.1/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.1/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.1/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.1/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.1/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.1/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.1/universal/runner-output-contract.yaml +339 -0
- package/compliance/cache/3.0.1/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.1/universal/security.yaml +431 -0
- package/compliance/cache/3.0.1/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.1/universal/storyboard-schema.yaml +1056 -0
- package/compliance/cache/3.0.1/universal/v3-envelope-integrity.yaml +104 -0
- package/compliance/cache/3.0.1/universal/webhook-emission.yaml +337 -0
- package/compliance/cache/3.0.1.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.1.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.1.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.1.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.1.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.1.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.1.previous/index.json +324 -0
- package/compliance/cache/3.0.1.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.1.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.1.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +266 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.1.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.1.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.1.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.1.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.1.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.1.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.1.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.1.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.1.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.1.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.1.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.1.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.1.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.1.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.1.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.1.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.1.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.1.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.1.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.1.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.1.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.1.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.1.previous/specialisms/sales-social/index.yaml +577 -0
- package/compliance/cache/3.0.1.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.1.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.1.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.1.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.1.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.1.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.1.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.1.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.1.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.1.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.1.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.1.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.1.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.1.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.1.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.1.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.1.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.1.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.1.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.1.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.1.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.1.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.1.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.1.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.1.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.1.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.1.previous/universal/runner-output-contract.yaml +339 -0
- package/compliance/cache/3.0.1.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.1.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.1.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.1.previous/universal/storyboard-schema.yaml +1056 -0
- package/compliance/cache/3.0.1.previous/universal/v3-envelope-integrity.yaml +104 -0
- package/compliance/cache/3.0.1.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/adapters/content-standards-adapter.d.ts +106 -0
- package/dist/lib/adapters/content-standards-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/content-standards-adapter.js +201 -0
- package/dist/lib/adapters/content-standards-adapter.js.map +1 -0
- package/dist/lib/adapters/governance-adapter.d.ts +88 -0
- package/dist/lib/adapters/governance-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/governance-adapter.js +93 -0
- package/dist/lib/adapters/governance-adapter.js.map +1 -0
- package/dist/lib/adapters/index.d.ts +19 -0
- package/dist/lib/adapters/index.d.ts.map +1 -0
- package/dist/lib/adapters/index.js +47 -0
- package/dist/lib/adapters/index.js.map +1 -0
- package/dist/lib/adapters/property-list-adapter.d.ts +123 -0
- package/dist/lib/adapters/property-list-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/property-list-adapter.js +231 -0
- package/dist/lib/adapters/property-list-adapter.js.map +1 -0
- package/dist/lib/adapters/proposal-manager.d.ts +142 -0
- package/dist/lib/adapters/proposal-manager.d.ts.map +1 -0
- package/dist/lib/adapters/proposal-manager.js +184 -0
- package/dist/lib/adapters/proposal-manager.js.map +1 -0
- package/dist/lib/adapters/si-session-manager.d.ts +164 -0
- package/dist/lib/adapters/si-session-manager.d.ts.map +1 -0
- package/dist/lib/adapters/si-session-manager.js +330 -0
- package/dist/lib/adapters/si-session-manager.js.map +1 -0
- package/dist/lib/advanced.d.ts +41 -0
- package/dist/lib/advanced.d.ts.map +1 -0
- package/dist/lib/advanced.js +49 -0
- package/dist/lib/advanced.js.map +1 -0
- package/dist/lib/agents/index.generated.d.ts +397 -0
- package/dist/lib/agents/index.generated.d.ts.map +1 -0
- package/dist/lib/agents/index.generated.js +624 -0
- package/dist/lib/agents/index.generated.js.map +1 -0
- package/dist/lib/auth/index.d.ts +39 -0
- package/dist/lib/auth/index.d.ts.map +1 -0
- package/dist/lib/auth/index.js +100 -0
- package/dist/lib/auth/index.js.map +1 -0
- package/dist/lib/auth/oauth/CLIFlowHandler.d.ts +61 -0
- package/dist/lib/auth/oauth/CLIFlowHandler.d.ts.map +1 -0
- package/dist/lib/auth/oauth/CLIFlowHandler.js +287 -0
- package/dist/lib/auth/oauth/CLIFlowHandler.js.map +1 -0
- package/dist/lib/auth/oauth/ClientCredentialsFlow.d.ts +134 -0
- package/dist/lib/auth/oauth/ClientCredentialsFlow.d.ts.map +1 -0
- package/dist/lib/auth/oauth/ClientCredentialsFlow.js +325 -0
- package/dist/lib/auth/oauth/ClientCredentialsFlow.js.map +1 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.d.ts +136 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.d.ts.map +1 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.js +255 -0
- package/dist/lib/auth/oauth/MCPOAuthProvider.js.map +1 -0
- package/dist/lib/auth/oauth/NonInteractiveFlowHandler.d.ts +37 -0
- package/dist/lib/auth/oauth/NonInteractiveFlowHandler.d.ts.map +1 -0
- package/dist/lib/auth/oauth/NonInteractiveFlowHandler.js +30 -0
- package/dist/lib/auth/oauth/NonInteractiveFlowHandler.js.map +1 -0
- package/dist/lib/auth/oauth/authorization-required.d.ts +112 -0
- package/dist/lib/auth/oauth/authorization-required.d.ts.map +1 -0
- package/dist/lib/auth/oauth/authorization-required.js +363 -0
- package/dist/lib/auth/oauth/authorization-required.js.map +1 -0
- package/dist/lib/auth/oauth/diagnose.d.ts +101 -0
- package/dist/lib/auth/oauth/diagnose.d.ts.map +1 -0
- package/dist/lib/auth/oauth/diagnose.js +630 -0
- package/dist/lib/auth/oauth/diagnose.js.map +1 -0
- package/dist/lib/auth/oauth/diagnostics.d.ts +129 -0
- package/dist/lib/auth/oauth/diagnostics.d.ts.map +1 -0
- package/dist/lib/auth/oauth/diagnostics.js +207 -0
- package/dist/lib/auth/oauth/diagnostics.js.map +1 -0
- package/dist/lib/auth/oauth/discovery.d.ts +96 -0
- package/dist/lib/auth/oauth/discovery.d.ts.map +1 -0
- package/dist/lib/auth/oauth/discovery.js +119 -0
- package/dist/lib/auth/oauth/discovery.js.map +1 -0
- package/dist/lib/auth/oauth/file-storage.d.ts +40 -0
- package/dist/lib/auth/oauth/file-storage.d.ts.map +1 -0
- package/dist/lib/auth/oauth/file-storage.js +112 -0
- package/dist/lib/auth/oauth/file-storage.js.map +1 -0
- package/dist/lib/auth/oauth/index.d.ts +133 -0
- package/dist/lib/auth/oauth/index.d.ts.map +1 -0
- package/dist/lib/auth/oauth/index.js +246 -0
- package/dist/lib/auth/oauth/index.js.map +1 -0
- package/dist/lib/auth/oauth/secret-resolver.d.ts +54 -0
- package/dist/lib/auth/oauth/secret-resolver.d.ts.map +1 -0
- package/dist/lib/auth/oauth/secret-resolver.js +96 -0
- package/dist/lib/auth/oauth/secret-resolver.js.map +1 -0
- package/dist/lib/auth/oauth/storage-registry.d.ts +44 -0
- package/dist/lib/auth/oauth/storage-registry.d.ts.map +1 -0
- package/dist/lib/auth/oauth/storage-registry.js +33 -0
- package/dist/lib/auth/oauth/storage-registry.js.map +1 -0
- package/dist/lib/auth/oauth/types.d.ts +114 -0
- package/dist/lib/auth/oauth/types.d.ts.map +1 -0
- package/dist/lib/auth/oauth/types.js +104 -0
- package/dist/lib/auth/oauth/types.js.map +1 -0
- package/dist/lib/client/index.d.ts +2 -0
- package/dist/lib/client/index.d.ts.map +1 -0
- package/dist/lib/client/index.js +26 -0
- package/dist/lib/client/index.js.map +1 -0
- package/dist/lib/compliance/index.d.ts +5 -0
- package/dist/lib/compliance/index.d.ts.map +1 -0
- package/dist/lib/compliance/index.js +52 -0
- package/dist/lib/compliance/index.js.map +1 -0
- package/dist/lib/compliance-fixtures/index.d.ts +167 -0
- package/dist/lib/compliance-fixtures/index.d.ts.map +1 -0
- package/dist/lib/compliance-fixtures/index.js +218 -0
- package/dist/lib/compliance-fixtures/index.js.map +1 -0
- package/dist/lib/compliance-fixtures/test-authorization-server.d.ts +88 -0
- package/dist/lib/compliance-fixtures/test-authorization-server.d.ts.map +1 -0
- package/dist/lib/compliance-fixtures/test-authorization-server.js +252 -0
- package/dist/lib/compliance-fixtures/test-authorization-server.js.map +1 -0
- package/dist/lib/conformance/index.d.ts +26 -0
- package/dist/lib/conformance/index.d.ts.map +1 -0
- package/dist/lib/conformance/index.js +34 -0
- package/dist/lib/conformance/index.js.map +1 -0
- package/dist/lib/conformance/invariants/uniformError.d.ts +45 -0
- package/dist/lib/conformance/invariants/uniformError.d.ts.map +1 -0
- package/dist/lib/conformance/invariants/uniformError.js +179 -0
- package/dist/lib/conformance/invariants/uniformError.js.map +1 -0
- package/dist/lib/conformance/invariants/uniformErrorComparator.d.ts +8 -0
- package/dist/lib/conformance/invariants/uniformErrorComparator.d.ts.map +1 -0
- package/dist/lib/conformance/invariants/uniformErrorComparator.js +488 -0
- package/dist/lib/conformance/invariants/uniformErrorComparator.js.map +1 -0
- package/dist/lib/conformance/oracle.d.ts +36 -0
- package/dist/lib/conformance/oracle.d.ts.map +1 -0
- package/dist/lib/conformance/oracle.js +267 -0
- package/dist/lib/conformance/oracle.js.map +1 -0
- package/dist/lib/conformance/runConformance.d.ts +17 -0
- package/dist/lib/conformance/runConformance.d.ts.map +1 -0
- package/dist/lib/conformance/runConformance.js +174 -0
- package/dist/lib/conformance/runConformance.js.map +1 -0
- package/dist/lib/conformance/runners.d.ts +27 -0
- package/dist/lib/conformance/runners.d.ts.map +1 -0
- package/dist/lib/conformance/runners.js +159 -0
- package/dist/lib/conformance/runners.js.map +1 -0
- package/dist/lib/conformance/schemaArbitrary.d.ts +39 -0
- package/dist/lib/conformance/schemaArbitrary.d.ts.map +1 -0
- package/dist/lib/conformance/schemaArbitrary.js +382 -0
- package/dist/lib/conformance/schemaArbitrary.js.map +1 -0
- package/dist/lib/conformance/schemaLoader.d.ts +12 -0
- package/dist/lib/conformance/schemaLoader.d.ts.map +1 -0
- package/dist/lib/conformance/schemaLoader.js +122 -0
- package/dist/lib/conformance/schemaLoader.js.map +1 -0
- package/dist/lib/conformance/seeder.d.ts +51 -0
- package/dist/lib/conformance/seeder.d.ts.map +1 -0
- package/dist/lib/conformance/seeder.js +341 -0
- package/dist/lib/conformance/seeder.js.map +1 -0
- package/dist/lib/conformance/types.d.ts +201 -0
- package/dist/lib/conformance/types.d.ts.map +1 -0
- package/dist/lib/conformance/types.js +56 -0
- package/dist/lib/conformance/types.js.map +1 -0
- package/dist/lib/core/ADCPMultiAgentClient.d.ts +624 -0
- package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -0
- package/dist/lib/core/ADCPMultiAgentClient.js +908 -0
- package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -0
- package/dist/lib/core/AgentClient.d.ts +517 -0
- package/dist/lib/core/AgentClient.d.ts.map +1 -0
- package/dist/lib/core/AgentClient.js +784 -0
- package/dist/lib/core/AgentClient.js.map +1 -0
- package/dist/lib/core/AsyncHandler.d.ts +210 -0
- package/dist/lib/core/AsyncHandler.d.ts.map +1 -0
- package/dist/lib/core/AsyncHandler.js +182 -0
- package/dist/lib/core/AsyncHandler.js.map +1 -0
- package/dist/lib/core/ConfigurationManager.d.ts +79 -0
- package/dist/lib/core/ConfigurationManager.d.ts.map +1 -0
- package/dist/lib/core/ConfigurationManager.js +249 -0
- package/dist/lib/core/ConfigurationManager.js.map +1 -0
- package/dist/lib/core/ConversationTypes.d.ts +422 -0
- package/dist/lib/core/ConversationTypes.d.ts.map +1 -0
- package/dist/lib/core/ConversationTypes.js +5 -0
- package/dist/lib/core/ConversationTypes.js.map +1 -0
- package/dist/lib/core/CreativeAgentClient.d.ts +144 -0
- package/dist/lib/core/CreativeAgentClient.d.ts.map +1 -0
- package/dist/lib/core/CreativeAgentClient.js +169 -0
- package/dist/lib/core/CreativeAgentClient.js.map +1 -0
- package/dist/lib/core/GovernanceMiddleware.d.ts +93 -0
- package/dist/lib/core/GovernanceMiddleware.d.ts.map +1 -0
- package/dist/lib/core/GovernanceMiddleware.js +306 -0
- package/dist/lib/core/GovernanceMiddleware.js.map +1 -0
- package/dist/lib/core/GovernanceTypes.d.ts +116 -0
- package/dist/lib/core/GovernanceTypes.d.ts.map +1 -0
- package/dist/lib/core/GovernanceTypes.js +60 -0
- package/dist/lib/core/GovernanceTypes.js.map +1 -0
- package/dist/lib/core/ProtocolResponseParser.d.ts +80 -0
- package/dist/lib/core/ProtocolResponseParser.d.ts.map +1 -0
- package/dist/lib/core/ProtocolResponseParser.js +367 -0
- package/dist/lib/core/ProtocolResponseParser.js.map +1 -0
- package/dist/lib/core/ResponseValidator.d.ts +68 -0
- package/dist/lib/core/ResponseValidator.d.ts.map +1 -0
- package/dist/lib/core/ResponseValidator.js +283 -0
- package/dist/lib/core/ResponseValidator.js.map +1 -0
- package/dist/lib/core/SingleAgentClient.d.ts +1065 -0
- package/dist/lib/core/SingleAgentClient.d.ts.map +1 -0
- package/dist/lib/core/SingleAgentClient.js +2134 -0
- package/dist/lib/core/SingleAgentClient.js.map +1 -0
- package/dist/lib/core/TaskEventTypes.d.ts +220 -0
- package/dist/lib/core/TaskEventTypes.d.ts.map +1 -0
- package/dist/lib/core/TaskEventTypes.js +80 -0
- package/dist/lib/core/TaskEventTypes.js.map +1 -0
- package/dist/lib/core/TaskExecutor.d.ts +245 -0
- package/dist/lib/core/TaskExecutor.d.ts.map +1 -0
- package/dist/lib/core/TaskExecutor.js +1452 -0
- package/dist/lib/core/TaskExecutor.js.map +1 -0
- package/dist/lib/core/match.d.ts +84 -0
- package/dist/lib/core/match.d.ts.map +1 -0
- package/dist/lib/core/match.js +47 -0
- package/dist/lib/core/match.js.map +1 -0
- package/dist/lib/discovery/network-consistency-checker.d.ts +111 -0
- package/dist/lib/discovery/network-consistency-checker.d.ts.map +1 -0
- package/dist/lib/discovery/network-consistency-checker.js +541 -0
- package/dist/lib/discovery/network-consistency-checker.js.map +1 -0
- package/dist/lib/discovery/property-crawler.d.ts +91 -0
- package/dist/lib/discovery/property-crawler.d.ts.map +1 -0
- package/dist/lib/discovery/property-crawler.js +290 -0
- package/dist/lib/discovery/property-crawler.js.map +1 -0
- package/dist/lib/discovery/property-index.d.ts +68 -0
- package/dist/lib/discovery/property-index.d.ts.map +1 -0
- package/dist/lib/discovery/property-index.js +163 -0
- package/dist/lib/discovery/property-index.js.map +1 -0
- package/dist/lib/discovery/types.d.ts +42 -0
- package/dist/lib/discovery/types.d.ts.map +1 -0
- package/dist/lib/discovery/types.js +7 -0
- package/dist/lib/discovery/types.js.map +1 -0
- package/dist/lib/errors/index.d.ts +284 -0
- package/dist/lib/errors/index.d.ts.map +1 -0
- package/dist/lib/errors/index.js +446 -0
- package/dist/lib/errors/index.js.map +1 -0
- package/dist/lib/express-mcp/index.d.ts +62 -0
- package/dist/lib/express-mcp/index.d.ts.map +1 -0
- package/dist/lib/express-mcp/index.js +118 -0
- package/dist/lib/express-mcp/index.js.map +1 -0
- package/dist/lib/governance/index.d.ts +149 -0
- package/dist/lib/governance/index.d.ts.map +1 -0
- package/dist/lib/governance/index.js +171 -0
- package/dist/lib/governance/index.js.map +1 -0
- package/dist/lib/handlers/types.d.ts +119 -0
- package/dist/lib/handlers/types.d.ts.map +1 -0
- package/dist/lib/handlers/types.js +239 -0
- package/dist/lib/handlers/types.js.map +1 -0
- package/dist/lib/index.d.ts +118 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +689 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/net/address-guards.d.ts +34 -0
- package/dist/lib/net/address-guards.d.ts.map +1 -0
- package/dist/lib/net/address-guards.js +132 -0
- package/dist/lib/net/address-guards.js.map +1 -0
- package/dist/lib/net/index.d.ts +8 -0
- package/dist/lib/net/index.d.ts.map +1 -0
- package/dist/lib/net/index.js +17 -0
- package/dist/lib/net/index.js.map +1 -0
- package/dist/lib/net/ssrf-fetch.d.ts +56 -0
- package/dist/lib/net/ssrf-fetch.d.ts.map +1 -0
- package/dist/lib/net/ssrf-fetch.js +199 -0
- package/dist/lib/net/ssrf-fetch.js.map +1 -0
- package/dist/lib/observability/index.d.ts +8 -0
- package/dist/lib/observability/index.d.ts.map +1 -0
- package/dist/lib/observability/index.js +17 -0
- package/dist/lib/observability/index.js.map +1 -0
- package/dist/lib/observability/tracing.d.ts +42 -0
- package/dist/lib/observability/tracing.d.ts.map +1 -0
- package/dist/lib/observability/tracing.js +126 -0
- package/dist/lib/observability/tracing.js.map +1 -0
- package/dist/lib/protocols/a2a.d.ts +23 -0
- package/dist/lib/protocols/a2a.d.ts.map +1 -0
- package/dist/lib/protocols/a2a.js +268 -0
- package/dist/lib/protocols/a2a.js.map +1 -0
- package/dist/lib/protocols/index.d.ts +43 -0
- package/dist/lib/protocols/index.d.ts.map +1 -0
- package/dist/lib/protocols/index.js +264 -0
- package/dist/lib/protocols/index.js.map +1 -0
- package/dist/lib/protocols/mcp-tasks.d.ts +79 -0
- package/dist/lib/protocols/mcp-tasks.d.ts.map +1 -0
- package/dist/lib/protocols/mcp-tasks.js +407 -0
- package/dist/lib/protocols/mcp-tasks.js.map +1 -0
- package/dist/lib/protocols/mcp.d.ts +124 -0
- package/dist/lib/protocols/mcp.d.ts.map +1 -0
- package/dist/lib/protocols/mcp.js +564 -0
- package/dist/lib/protocols/mcp.js.map +1 -0
- package/dist/lib/protocols/rawResponseCapture.d.ts +44 -0
- package/dist/lib/protocols/rawResponseCapture.d.ts.map +1 -0
- package/dist/lib/protocols/rawResponseCapture.js +147 -0
- package/dist/lib/protocols/rawResponseCapture.js.map +1 -0
- package/dist/lib/registry/cursor-store.d.ts +19 -0
- package/dist/lib/registry/cursor-store.d.ts.map +1 -0
- package/dist/lib/registry/cursor-store.js +44 -0
- package/dist/lib/registry/cursor-store.js.map +1 -0
- package/dist/lib/registry/index.d.ts +278 -0
- package/dist/lib/registry/index.d.ts.map +1 -0
- package/dist/lib/registry/index.js +652 -0
- package/dist/lib/registry/index.js.map +1 -0
- package/dist/lib/registry/property-registry.d.ts +57 -0
- package/dist/lib/registry/property-registry.d.ts.map +1 -0
- package/dist/lib/registry/property-registry.js +92 -0
- package/dist/lib/registry/property-registry.js.map +1 -0
- package/dist/lib/registry/sync.d.ts +139 -0
- package/dist/lib/registry/sync.d.ts.map +1 -0
- package/dist/lib/registry/sync.js +390 -0
- package/dist/lib/registry/sync.js.map +1 -0
- package/dist/lib/registry/types.d.ts +112 -0
- package/dist/lib/registry/types.d.ts.map +1 -0
- package/dist/lib/registry/types.generated.d.ts +5680 -0
- package/dist/lib/registry/types.generated.d.ts.map +1 -0
- package/dist/lib/registry/types.generated.js +8 -0
- package/dist/lib/registry/types.generated.js.map +1 -0
- package/dist/lib/registry/types.js +9 -0
- package/dist/lib/registry/types.js.map +1 -0
- package/dist/lib/schemas/index.d.ts +76 -0
- package/dist/lib/schemas/index.d.ts.map +1 -0
- package/dist/lib/schemas/index.js +133 -0
- package/dist/lib/schemas/index.js.map +1 -0
- package/dist/lib/schemas-data/3.0.1/a2ui/bound-value.json +81 -0
- package/dist/lib/schemas-data/3.0.1/a2ui/component.json +32 -0
- package/dist/lib/schemas-data/3.0.1/a2ui/si-catalog.json +427 -0
- package/dist/lib/schemas-data/3.0.1/a2ui/surface.json +39 -0
- package/dist/lib/schemas-data/3.0.1/a2ui/user-action.json +47 -0
- package/dist/lib/schemas-data/3.0.1/account/get-account-financials-request.json +70 -0
- package/dist/lib/schemas-data/3.0.1/account/get-account-financials-response.json +320 -0
- package/dist/lib/schemas-data/3.0.1/account/list-accounts-request.json +42 -0
- package/dist/lib/schemas-data/3.0.1/account/list-accounts-response.json +108 -0
- package/dist/lib/schemas-data/3.0.1/account/report-usage-request.json +168 -0
- package/dist/lib/schemas-data/3.0.1/account/report-usage-response.json +56 -0
- package/dist/lib/schemas-data/3.0.1/account/sync-accounts-request.json +201 -0
- package/dist/lib/schemas-data/3.0.1/account/sync-accounts-response.json +346 -0
- package/dist/lib/schemas-data/3.0.1/account/sync-governance-request.json +170 -0
- package/dist/lib/schemas-data/3.0.1/account/sync-governance-response.json +193 -0
- package/dist/lib/schemas-data/3.0.1/adagents.json +1225 -0
- package/dist/lib/schemas-data/3.0.1/brand/acquire-rights-request.json +114 -0
- package/dist/lib/schemas-data/3.0.1/brand/acquire-rights-response.json +220 -0
- package/dist/lib/schemas-data/3.0.1/brand/creative-approval-request.json +63 -0
- package/dist/lib/schemas-data/3.0.1/brand/creative-approval-response.json +189 -0
- package/dist/lib/schemas-data/3.0.1/brand/get-brand-identity-request.json +56 -0
- package/dist/lib/schemas-data/3.0.1/brand/get-brand-identity-response.json +585 -0
- package/dist/lib/schemas-data/3.0.1/brand/get-rights-request.json +70 -0
- package/dist/lib/schemas-data/3.0.1/brand/get-rights-response.json +220 -0
- package/dist/lib/schemas-data/3.0.1/brand/revocation-notification.json +57 -0
- package/dist/lib/schemas-data/3.0.1/brand/rights-pricing-option.json +65 -0
- package/dist/lib/schemas-data/3.0.1/brand/rights-terms.json +70 -0
- package/dist/lib/schemas-data/3.0.1/brand/update-rights-request.json +63 -0
- package/dist/lib/schemas-data/3.0.1/brand/update-rights-response.json +99 -0
- package/dist/lib/schemas-data/3.0.1/brand.json +2582 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/calibrate-content-request.json +1712 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/calibrate-content-response.json +180 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/create-content-standards-request.json +3622 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/create-content-standards-response.json +116 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/get-content-standards-request.json +38 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/get-content-standards-response.json +3851 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/get-media-buy-artifacts-request.json +234 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/get-media-buy-artifacts-response.json +1880 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/list-content-standards-request.json +121 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/list-content-standards-response.json +3880 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/update-content-standards-request.json +3611 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/update-content-standards-response.json +131 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/validate-content-delivery-request.json +1766 -0
- package/dist/lib/schemas-data/3.0.1/bundled/content-standards/validate-content-delivery-response.json +208 -0
- package/dist/lib/schemas-data/3.0.1/bundled/core/tasks-get-request.json +60 -0
- package/dist/lib/schemas-data/3.0.1/bundled/core/tasks-get-response.json +264 -0
- package/dist/lib/schemas-data/3.0.1/bundled/core/tasks-list-request.json +318 -0
- package/dist/lib/schemas-data/3.0.1/bundled/core/tasks-list-response.json +258 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/get-creative-delivery-request.json +245 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/get-creative-delivery-response.json +5967 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/get-creative-features-request.json +5091 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/get-creative-features-response.json +230 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/list-creative-formats-request.json +485 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/list-creative-formats-response.json +4076 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/list-creatives-request.json +687 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/list-creatives-response.json +5977 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/preview-creative-request.json +9624 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/preview-creative-response.json +5931 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/sync-creatives-request.json +5268 -0
- package/dist/lib/schemas-data/3.0.1/bundled/creative/sync-creatives-response.json +1146 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/build-creative-request.json +5369 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/build-creative-response.json +10286 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/create-media-buy-request.json +7893 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/create-media-buy-response.json +4170 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/get-media-buy-delivery-request.json +494 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/get-media-buy-delivery-response.json +4256 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/get-media-buys-request.json +261 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/get-media-buys-response.json +2357 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/get-products-request.json +2046 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/get-products-response.json +6809 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/list-creative-formats-request.json +311 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/list-creative-formats-response.json +4080 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/log-event-request.json +394 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/log-event-response.json +193 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/package-request.json +6923 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/provide-performance-feedback-request.json +119 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/provide-performance-feedback-response.json +142 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/sync-audiences-request.json +454 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/sync-audiences-response.json +335 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/sync-catalogs-request.json +836 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/sync-catalogs-response.json +344 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/sync-event-sources-request.json +299 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/sync-event-sources-response.json +461 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/update-media-buy-request.json +13548 -0
- package/dist/lib/schemas-data/3.0.1/bundled/media-buy/update-media-buy-response.json +2799 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/create-property-list-request.json +661 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/create-property-list-response.json +928 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/delete-property-list-request.json +198 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/delete-property-list-response.json +44 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/get-property-list-request.json +212 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/get-property-list-response.json +1001 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/list-property-lists-request.json +204 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/list-property-lists-response.json +946 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/update-property-list-request.json +670 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/update-property-list-response.json +923 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/validate-property-delivery-request.json +308 -0
- package/dist/lib/schemas-data/3.0.1/bundled/property/validate-property-delivery-response.json +418 -0
- package/dist/lib/schemas-data/3.0.1/bundled/protocol/get-adcp-capabilities-request.json +47 -0
- package/dist/lib/schemas-data/3.0.1/bundled/protocol/get-adcp-capabilities-response.json +1729 -0
- package/dist/lib/schemas-data/3.0.1/bundled/signals/activate-signal-request.json +269 -0
- package/dist/lib/schemas-data/3.0.1/bundled/signals/activate-signal-response.json +320 -0
- package/dist/lib/schemas-data/3.0.1/bundled/signals/get-signals-request.json +409 -0
- package/dist/lib/schemas-data/3.0.1/bundled/signals/get-signals-response.json +689 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-get-offering-request.json +57 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-get-offering-response.json +207 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-initiate-session-request.json +322 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-initiate-session-response.json +618 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-send-message-request.json +81 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-send-message-response.json +589 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-terminate-session-request.json +87 -0
- package/dist/lib/schemas-data/3.0.1/bundled/sponsored-intelligence/si-terminate-session-response.json +156 -0
- package/dist/lib/schemas-data/3.0.1/collection/base-collection-source.json +118 -0
- package/dist/lib/schemas-data/3.0.1/collection/collection-list-changed-webhook.json +74 -0
- package/dist/lib/schemas-data/3.0.1/collection/collection-list-filters.json +85 -0
- package/dist/lib/schemas-data/3.0.1/collection/collection-list.json +71 -0
- package/dist/lib/schemas-data/3.0.1/collection/create-collection-list-request.json +62 -0
- package/dist/lib/schemas-data/3.0.1/collection/create-collection-list-response.json +33 -0
- package/dist/lib/schemas-data/3.0.1/collection/delete-collection-list-request.json +43 -0
- package/dist/lib/schemas-data/3.0.1/collection/delete-collection-list-response.json +34 -0
- package/dist/lib/schemas-data/3.0.1/collection/get-collection-list-request.json +57 -0
- package/dist/lib/schemas-data/3.0.1/collection/get-collection-list-response.json +122 -0
- package/dist/lib/schemas-data/3.0.1/collection/list-collection-lists-request.json +33 -0
- package/dist/lib/schemas-data/3.0.1/collection/list-collection-lists-response.json +29 -0
- package/dist/lib/schemas-data/3.0.1/collection/update-collection-list-request.json +71 -0
- package/dist/lib/schemas-data/3.0.1/collection/update-collection-list-response.json +28 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/artifact-webhook-payload.json +88 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/artifact.json +407 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/calibrate-content-request.json +42 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/calibrate-content-response.json +93 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/content-standards.json +83 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/create-content-standards-request.json +177 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/create-content-standards-response.json +53 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/get-content-standards-request.json +28 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/get-content-standards-response.json +47 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/get-media-buy-artifacts-request.json +79 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/get-media-buy-artifacts-response.json +136 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/list-content-standards-request.json +49 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/list-content-standards-response.json +55 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/update-content-standards-request.json +166 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/update-content-standards-response.json +68 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/validate-content-delivery-request.json +96 -0
- package/dist/lib/schemas-data/3.0.1/content-standards/validate-content-delivery-response.json +121 -0
- package/dist/lib/schemas-data/3.0.1/core/account-ref.json +71 -0
- package/dist/lib/schemas-data/3.0.1/core/account.json +344 -0
- package/dist/lib/schemas-data/3.0.1/core/activation-key.json +50 -0
- package/dist/lib/schemas-data/3.0.1/core/ad-inventory-config.json +39 -0
- package/dist/lib/schemas-data/3.0.1/core/agent-encryption-key.json +41 -0
- package/dist/lib/schemas-data/3.0.1/core/agent-signing-key.json +55 -0
- package/dist/lib/schemas-data/3.0.1/core/app-item.json +170 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/audio-asset.json +82 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/brief-asset.json +22 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/catalog-asset.json +22 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/css-asset.json +31 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/daast-asset.json +88 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/html-asset.json +54 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/image-asset.json +49 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/javascript-asset.json +54 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/markdown-asset.json +37 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/text-asset.json +31 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/url-asset.json +36 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/vast-asset.json +94 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/video-asset.json +179 -0
- package/dist/lib/schemas-data/3.0.1/core/assets/webhook-asset.json +97 -0
- package/dist/lib/schemas-data/3.0.1/core/async-response-data.json +128 -0
- package/dist/lib/schemas-data/3.0.1/core/attribution-window.json +33 -0
- package/dist/lib/schemas-data/3.0.1/core/audience-member.json +70 -0
- package/dist/lib/schemas-data/3.0.1/core/audience-selector.json +134 -0
- package/dist/lib/schemas-data/3.0.1/core/brand-id.json +16 -0
- package/dist/lib/schemas-data/3.0.1/core/brand-ref.json +76 -0
- package/dist/lib/schemas-data/3.0.1/core/business-entity.json +207 -0
- package/dist/lib/schemas-data/3.0.1/core/cancellation-policy.json +49 -0
- package/dist/lib/schemas-data/3.0.1/core/catalog-field-mapping.json +144 -0
- package/dist/lib/schemas-data/3.0.1/core/catalog.json +222 -0
- package/dist/lib/schemas-data/3.0.1/core/catchment.json +221 -0
- package/dist/lib/schemas-data/3.0.1/core/collection-distribution.json +41 -0
- package/dist/lib/schemas-data/3.0.1/core/collection-list-ref.json +29 -0
- package/dist/lib/schemas-data/3.0.1/core/collection-selector.json +27 -0
- package/dist/lib/schemas-data/3.0.1/core/collection.json +116 -0
- package/dist/lib/schemas-data/3.0.1/core/content-rating.json +22 -0
- package/dist/lib/schemas-data/3.0.1/core/context.json +8 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-asset.json +150 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-assignment.json +32 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-brief.json +136 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-consumption.json +30 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-filters.json +119 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-item.json +79 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-manifest.json +96 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-policy.json +31 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-variable.json +47 -0
- package/dist/lib/schemas-data/3.0.1/core/creative-variant.json +60 -0
- package/dist/lib/schemas-data/3.0.1/core/data-provider-signal-selector.json +94 -0
- package/dist/lib/schemas-data/3.0.1/core/date-range.json +24 -0
- package/dist/lib/schemas-data/3.0.1/core/datetime-range.json +24 -0
- package/dist/lib/schemas-data/3.0.1/core/daypart-target.json +39 -0
- package/dist/lib/schemas-data/3.0.1/core/deadline-policy.json +58 -0
- package/dist/lib/schemas-data/3.0.1/core/delivery-forecast.json +86 -0
- package/dist/lib/schemas-data/3.0.1/core/delivery-metrics.json +327 -0
- package/dist/lib/schemas-data/3.0.1/core/deployment.json +93 -0
- package/dist/lib/schemas-data/3.0.1/core/destination-item.json +168 -0
- package/dist/lib/schemas-data/3.0.1/core/destination.json +53 -0
- package/dist/lib/schemas-data/3.0.1/core/diagnostic-issue.json +27 -0
- package/dist/lib/schemas-data/3.0.1/core/duration.json +30 -0
- package/dist/lib/schemas-data/3.0.1/core/education-item.json +168 -0
- package/dist/lib/schemas-data/3.0.1/core/error.json +52 -0
- package/dist/lib/schemas-data/3.0.1/core/event-custom-data.json +86 -0
- package/dist/lib/schemas-data/3.0.1/core/event-source-health.json +70 -0
- package/dist/lib/schemas-data/3.0.1/core/event.json +54 -0
- package/dist/lib/schemas-data/3.0.1/core/ext.json +8 -0
- package/dist/lib/schemas-data/3.0.1/core/feature-requirement.json +45 -0
- package/dist/lib/schemas-data/3.0.1/core/flight-item.json +159 -0
- package/dist/lib/schemas-data/3.0.1/core/forecast-point.json +85 -0
- package/dist/lib/schemas-data/3.0.1/core/forecast-range.json +38 -0
- package/dist/lib/schemas-data/3.0.1/core/format-id.json +48 -0
- package/dist/lib/schemas-data/3.0.1/core/format.json +904 -0
- package/dist/lib/schemas-data/3.0.1/core/frequency-cap.json +73 -0
- package/dist/lib/schemas-data/3.0.1/core/generation-credential.json +44 -0
- package/dist/lib/schemas-data/3.0.1/core/geo-breakdown-support.json +38 -0
- package/dist/lib/schemas-data/3.0.1/core/hotel-item.json +214 -0
- package/dist/lib/schemas-data/3.0.1/core/identifier.json +22 -0
- package/dist/lib/schemas-data/3.0.1/core/industry-identifier.json +22 -0
- package/dist/lib/schemas-data/3.0.1/core/insertion-order.json +91 -0
- package/dist/lib/schemas-data/3.0.1/core/installment-deadlines.json +29 -0
- package/dist/lib/schemas-data/3.0.1/core/installment.json +108 -0
- package/dist/lib/schemas-data/3.0.1/core/job-item.json +199 -0
- package/dist/lib/schemas-data/3.0.1/core/limited-series.json +28 -0
- package/dist/lib/schemas-data/3.0.1/core/material-deadline.json +31 -0
- package/dist/lib/schemas-data/3.0.1/core/mcp-webhook-payload.json +163 -0
- package/dist/lib/schemas-data/3.0.1/core/measurement-readiness.json +43 -0
- package/dist/lib/schemas-data/3.0.1/core/measurement-terms.json +63 -0
- package/dist/lib/schemas-data/3.0.1/core/measurement-window.json +54 -0
- package/dist/lib/schemas-data/3.0.1/core/media-buy-features.json +24 -0
- package/dist/lib/schemas-data/3.0.1/core/media-buy.json +101 -0
- package/dist/lib/schemas-data/3.0.1/core/offering-asset-group.json +118 -0
- package/dist/lib/schemas-data/3.0.1/core/offering.json +267 -0
- package/dist/lib/schemas-data/3.0.1/core/optimization-goal.json +285 -0
- package/dist/lib/schemas-data/3.0.1/core/outcome-measurement.json +48 -0
- package/dist/lib/schemas-data/3.0.1/core/overlay.json +89 -0
- package/dist/lib/schemas-data/3.0.1/core/package.json +170 -0
- package/dist/lib/schemas-data/3.0.1/core/pagination-request.json +21 -0
- package/dist/lib/schemas-data/3.0.1/core/pagination-response.json +26 -0
- package/dist/lib/schemas-data/3.0.1/core/performance-feedback.json +90 -0
- package/dist/lib/schemas-data/3.0.1/core/performance-standard.json +33 -0
- package/dist/lib/schemas-data/3.0.1/core/placement-definition.json +81 -0
- package/dist/lib/schemas-data/3.0.1/core/placement.json +42 -0
- package/dist/lib/schemas-data/3.0.1/core/planned-delivery.json +84 -0
- package/dist/lib/schemas-data/3.0.1/core/price.json +59 -0
- package/dist/lib/schemas-data/3.0.1/core/pricing-option.json +35 -0
- package/dist/lib/schemas-data/3.0.1/core/product-allocation.json +69 -0
- package/dist/lib/schemas-data/3.0.1/core/product-filters.json +435 -0
- package/dist/lib/schemas-data/3.0.1/core/product.json +493 -0
- package/dist/lib/schemas-data/3.0.1/core/property-id.json +15 -0
- package/dist/lib/schemas-data/3.0.1/core/property-list-ref.json +29 -0
- package/dist/lib/schemas-data/3.0.1/core/property-tag.json +16 -0
- package/dist/lib/schemas-data/3.0.1/core/property.json +70 -0
- package/dist/lib/schemas-data/3.0.1/core/proposal.json +89 -0
- package/dist/lib/schemas-data/3.0.1/core/protocol-envelope.json +186 -0
- package/dist/lib/schemas-data/3.0.1/core/provenance.json +234 -0
- package/dist/lib/schemas-data/3.0.1/core/publisher-property-selector.json +92 -0
- package/dist/lib/schemas-data/3.0.1/core/push-notification-config.json +47 -0
- package/dist/lib/schemas-data/3.0.1/core/real-estate-item.json +241 -0
- package/dist/lib/schemas-data/3.0.1/core/reference-asset.json +36 -0
- package/dist/lib/schemas-data/3.0.1/core/reporting-capabilities.json +118 -0
- package/dist/lib/schemas-data/3.0.1/core/reporting-webhook.json +67 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/asset-requirements.json +44 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/audio-asset-requirements.json +68 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/catalog-field-binding.json +172 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/catalog-requirements.json +68 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/css-asset-requirements.json +15 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/daast-asset-requirements.json +17 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/html-asset-requirements.json +38 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/image-asset-requirements.json +151 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/javascript-asset-requirements.json +40 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/markdown-asset-requirements.json +15 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/offering-asset-constraint.json +66 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/text-asset-requirements.json +41 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/url-asset-requirements.json +50 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/vast-asset-requirements.json +21 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/video-asset-requirements.json +172 -0
- package/dist/lib/schemas-data/3.0.1/core/requirements/webhook-asset-requirements.json +21 -0
- package/dist/lib/schemas-data/3.0.1/core/response.json +24 -0
- package/dist/lib/schemas-data/3.0.1/core/rights-constraint.json +98 -0
- package/dist/lib/schemas-data/3.0.1/core/seller-agent-ref.json +30 -0
- package/dist/lib/schemas-data/3.0.1/core/signal-definition.json +89 -0
- package/dist/lib/schemas-data/3.0.1/core/signal-filters.json +43 -0
- package/dist/lib/schemas-data/3.0.1/core/signal-id.json +66 -0
- package/dist/lib/schemas-data/3.0.1/core/signal-pricing-option.json +7 -0
- package/dist/lib/schemas-data/3.0.1/core/signal-pricing.json +194 -0
- package/dist/lib/schemas-data/3.0.1/core/signal-targeting.json +93 -0
- package/dist/lib/schemas-data/3.0.1/core/special.json +31 -0
- package/dist/lib/schemas-data/3.0.1/core/start-timing.json +18 -0
- package/dist/lib/schemas-data/3.0.1/core/store-item.json +259 -0
- package/dist/lib/schemas-data/3.0.1/core/talent.json +27 -0
- package/dist/lib/schemas-data/3.0.1/core/targeting.json +510 -0
- package/dist/lib/schemas-data/3.0.1/core/tasks-get-request.json +50 -0
- package/dist/lib/schemas-data/3.0.1/core/tasks-get-response.json +159 -0
- package/dist/lib/schemas-data/3.0.1/core/tasks-list-request.json +185 -0
- package/dist/lib/schemas-data/3.0.1/core/tasks-list-response.json +153 -0
- package/dist/lib/schemas-data/3.0.1/core/user-match.json +90 -0
- package/dist/lib/schemas-data/3.0.1/core/vehicle-item.json +231 -0
- package/dist/lib/schemas-data/3.0.1/core/vendor-pricing-option.json +24 -0
- package/dist/lib/schemas-data/3.0.1/core/x-entity-types.json +69 -0
- package/dist/lib/schemas-data/3.0.1/creative/asset-types/index.json +118 -0
- package/dist/lib/schemas-data/3.0.1/creative/creative-feature-result.json +69 -0
- package/dist/lib/schemas-data/3.0.1/creative/get-creative-delivery-request.json +75 -0
- package/dist/lib/schemas-data/3.0.1/creative/get-creative-delivery-response.json +143 -0
- package/dist/lib/schemas-data/3.0.1/creative/get-creative-features-request.json +41 -0
- package/dist/lib/schemas-data/3.0.1/creative/get-creative-features-response.json +76 -0
- package/dist/lib/schemas-data/3.0.1/creative/list-creative-formats-request.json +150 -0
- package/dist/lib/schemas-data/3.0.1/creative/list-creative-formats-response.json +64 -0
- package/dist/lib/schemas-data/3.0.1/creative/list-creatives-request.json +184 -0
- package/dist/lib/schemas-data/3.0.1/creative/list-creatives-response.json +445 -0
- package/dist/lib/schemas-data/3.0.1/creative/preview-creative-request.json +212 -0
- package/dist/lib/schemas-data/3.0.1/creative/preview-creative-response.json +307 -0
- package/dist/lib/schemas-data/3.0.1/creative/preview-render.json +225 -0
- package/dist/lib/schemas-data/3.0.1/creative/sync-creatives-async-response-input-required.json +25 -0
- package/dist/lib/schemas-data/3.0.1/creative/sync-creatives-async-response-submitted.json +16 -0
- package/dist/lib/schemas-data/3.0.1/creative/sync-creatives-async-response-working.json +46 -0
- package/dist/lib/schemas-data/3.0.1/creative/sync-creatives-request.json +242 -0
- package/dist/lib/schemas-data/3.0.1/creative/sync-creatives-response.json +270 -0
- package/dist/lib/schemas-data/3.0.1/enums/account-scope.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/account-status.json +23 -0
- package/dist/lib/schemas-data/3.0.1/enums/action-source.json +29 -0
- package/dist/lib/schemas-data/3.0.1/enums/adcp-protocol.json +23 -0
- package/dist/lib/schemas-data/3.0.1/enums/adjustment-kind.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/advertiser-industry.json +175 -0
- package/dist/lib/schemas-data/3.0.1/enums/age-verification-method.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/assessment-status.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/asset-content-type.json +23 -0
- package/dist/lib/schemas-data/3.0.1/enums/attribution-model.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/audience-source.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/audience-status.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/audio-channel-layout.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/auth-scheme.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/available-metric.json +31 -0
- package/dist/lib/schemas-data/3.0.1/enums/billing-party.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/binary-verdict.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/brand-agent-type.json +27 -0
- package/dist/lib/schemas-data/3.0.1/enums/canceled-by.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/catalog-action.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/catalog-item-status.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/catalog-type.json +22 -0
- package/dist/lib/schemas-data/3.0.1/enums/channels.json +51 -0
- package/dist/lib/schemas-data/3.0.1/enums/cloud-storage-protocol.json +12 -0
- package/dist/lib/schemas-data/3.0.1/enums/co-branding-requirement.json +12 -0
- package/dist/lib/schemas-data/3.0.1/enums/collection-cadence.json +23 -0
- package/dist/lib/schemas-data/3.0.1/enums/collection-kind.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/collection-relationship.json +21 -0
- package/dist/lib/schemas-data/3.0.1/enums/collection-status.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/consent-basis.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/content-id-type.json +21 -0
- package/dist/lib/schemas-data/3.0.1/enums/content-rating-system.json +33 -0
- package/dist/lib/schemas-data/3.0.1/enums/creative-action.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/creative-agent-capability.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/creative-approval-status.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/creative-identifier-type.json +22 -0
- package/dist/lib/schemas-data/3.0.1/enums/creative-quality.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/creative-sort-field.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/creative-status.json +21 -0
- package/dist/lib/schemas-data/3.0.1/enums/daast-tracking-event.json +32 -0
- package/dist/lib/schemas-data/3.0.1/enums/daast-version.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/day-of-week.json +16 -0
- package/dist/lib/schemas-data/3.0.1/enums/delegation-authority.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/delivery-type.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/demographic-system.json +23 -0
- package/dist/lib/schemas-data/3.0.1/enums/derivative-type.json +21 -0
- package/dist/lib/schemas-data/3.0.1/enums/device-platform.json +21 -0
- package/dist/lib/schemas-data/3.0.1/enums/device-type.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/digital-source-type.json +29 -0
- package/dist/lib/schemas-data/3.0.1/enums/dimension-unit.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/disclosure-persistence.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/disclosure-position.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/distance-unit.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/distribution-identifier-type.json +53 -0
- package/dist/lib/schemas-data/3.0.1/enums/error-code.json +101 -0
- package/dist/lib/schemas-data/3.0.1/enums/escalation-severity.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/event-type.json +67 -0
- package/dist/lib/schemas-data/3.0.1/enums/exclusivity.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/feature-check-status.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/feed-format.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/feedback-source.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/forecast-method.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/forecast-range-unit.json +27 -0
- package/dist/lib/schemas-data/3.0.1/enums/forecastable-metric.json +43 -0
- package/dist/lib/schemas-data/3.0.1/enums/format-id-parameter.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/frame-rate-type.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/frequency-cap-scope.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/genre-taxonomy.json +29 -0
- package/dist/lib/schemas-data/3.0.1/enums/geo-level.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/gop-type.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/governance-decision.json +18 -0
- package/dist/lib/schemas-data/3.0.1/enums/governance-domain.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/governance-mode.json +18 -0
- package/dist/lib/schemas-data/3.0.1/enums/governance-phase.json +12 -0
- package/dist/lib/schemas-data/3.0.1/enums/history-entry-type.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/http-method.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/identifier-types.json +61 -0
- package/dist/lib/schemas-data/3.0.1/enums/installment-status.json +25 -0
- package/dist/lib/schemas-data/3.0.1/enums/javascript-module-type.json +12 -0
- package/dist/lib/schemas-data/3.0.1/enums/landing-page-requirement.json +12 -0
- package/dist/lib/schemas-data/3.0.1/enums/makegood-remedy.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/markdown-flavor.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/match-id-type.json +29 -0
- package/dist/lib/schemas-data/3.0.1/enums/match-type.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/media-buy-status.json +25 -0
- package/dist/lib/schemas-data/3.0.1/enums/media-buy-valid-action.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/metric-type.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/metro-system.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/moov-atom-position.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/notification-type.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/outcome-type.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/pacing.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/payment-terms.json +23 -0
- package/dist/lib/schemas-data/3.0.1/enums/performance-standard-metric.json +21 -0
- package/dist/lib/schemas-data/3.0.1/enums/policy-category.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/policy-enforcement.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/postal-system.json +20 -0
- package/dist/lib/schemas-data/3.0.1/enums/preview-output-format.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/pricing-model.json +29 -0
- package/dist/lib/schemas-data/3.0.1/enums/production-quality.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/property-type.json +31 -0
- package/dist/lib/schemas-data/3.0.1/enums/proposal-status.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/publisher-identifier-types.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/purchase-type.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/reach-unit.json +23 -0
- package/dist/lib/schemas-data/3.0.1/enums/reporting-frequency.json +12 -0
- package/dist/lib/schemas-data/3.0.1/enums/response-type.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/restricted-attribute.json +31 -0
- package/dist/lib/schemas-data/3.0.1/enums/right-type.json +22 -0
- package/dist/lib/schemas-data/3.0.1/enums/right-use.json +36 -0
- package/dist/lib/schemas-data/3.0.1/enums/rights-billing-period.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/scan-type.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/si-session-status.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/signal-catalog-type.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/signal-source.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/signal-value-type.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/snapshot-unavailable-reason.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/sort-direction.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/sort-metric.json +31 -0
- package/dist/lib/schemas-data/3.0.1/enums/special-category.json +35 -0
- package/dist/lib/schemas-data/3.0.1/enums/specialism.json +55 -0
- package/dist/lib/schemas-data/3.0.1/enums/talent-role.json +29 -0
- package/dist/lib/schemas-data/3.0.1/enums/task-status.json +29 -0
- package/dist/lib/schemas-data/3.0.1/enums/task-type.json +57 -0
- package/dist/lib/schemas-data/3.0.1/enums/transport-mode.json +19 -0
- package/dist/lib/schemas-data/3.0.1/enums/travel-time-unit.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/uid-type.json +31 -0
- package/dist/lib/schemas-data/3.0.1/enums/universal-macro.json +149 -0
- package/dist/lib/schemas-data/3.0.1/enums/update-frequency.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/url-asset-type.json +12 -0
- package/dist/lib/schemas-data/3.0.1/enums/validation-mode.json +11 -0
- package/dist/lib/schemas-data/3.0.1/enums/vast-tracking-event.json +41 -0
- package/dist/lib/schemas-data/3.0.1/enums/vast-version.json +14 -0
- package/dist/lib/schemas-data/3.0.1/enums/viewability-standard.json +15 -0
- package/dist/lib/schemas-data/3.0.1/enums/wcag-level.json +17 -0
- package/dist/lib/schemas-data/3.0.1/enums/webhook-response-type.json +13 -0
- package/dist/lib/schemas-data/3.0.1/enums/webhook-security-method.json +12 -0
- package/dist/lib/schemas-data/3.0.1/error-details/account-setup-required.json +22 -0
- package/dist/lib/schemas-data/3.0.1/error-details/audience-too-small.json +18 -0
- package/dist/lib/schemas-data/3.0.1/error-details/budget-too-low.json +18 -0
- package/dist/lib/schemas-data/3.0.1/error-details/conflict.json +28 -0
- package/dist/lib/schemas-data/3.0.1/error-details/creative-rejected.json +27 -0
- package/dist/lib/schemas-data/3.0.1/error-details/policy-violation.json +27 -0
- package/dist/lib/schemas-data/3.0.1/error-details/rate-limited.json +31 -0
- package/dist/lib/schemas-data/3.0.1/error-details/vendor-error-codes.json +55 -0
- package/dist/lib/schemas-data/3.0.1/extensions/extension-meta.json +69 -0
- package/dist/lib/schemas-data/3.0.1/extensions/index.json +9 -0
- package/dist/lib/schemas-data/3.0.1/governance/attribute-definition.json +82 -0
- package/dist/lib/schemas-data/3.0.1/governance/audience-constraints.json +27 -0
- package/dist/lib/schemas-data/3.0.1/governance/check-governance-request.json +198 -0
- package/dist/lib/schemas-data/3.0.1/governance/check-governance-response.json +217 -0
- package/dist/lib/schemas-data/3.0.1/governance/get-plan-audit-logs-request.json +79 -0
- package/dist/lib/schemas-data/3.0.1/governance/get-plan-audit-logs-response.json +423 -0
- package/dist/lib/schemas-data/3.0.1/governance/policy-category-definition.json +95 -0
- package/dist/lib/schemas-data/3.0.1/governance/policy-entry.json +165 -0
- package/dist/lib/schemas-data/3.0.1/governance/policy-ref.json +27 -0
- package/dist/lib/schemas-data/3.0.1/governance/report-plan-outcome-request.json +165 -0
- package/dist/lib/schemas-data/3.0.1/governance/report-plan-outcome-response.json +89 -0
- package/dist/lib/schemas-data/3.0.1/governance/sync-plans-request.json +449 -0
- package/dist/lib/schemas-data/3.0.1/governance/sync-plans-response.json +119 -0
- package/dist/lib/schemas-data/3.0.1/index.json +1678 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/build-creative-async-response-input-required.json +32 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/build-creative-async-response-submitted.json +16 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/build-creative-async-response-working.json +36 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/build-creative-request.json +138 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/build-creative-response.json +293 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/create-media-buy-async-response-input-required.json +31 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/create-media-buy-async-response-submitted.json +16 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/create-media-buy-async-response-working.json +36 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/create-media-buy-request.json +221 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/create-media-buy-response.json +194 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-media-buy-delivery-request.json +205 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-media-buy-delivery-response.json +704 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-media-buys-request.json +66 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-media-buys-response.json +394 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-products-async-response-input-required.json +38 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-products-async-response-submitted.json +21 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-products-async-response-working.json +34 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-products-request.json +229 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/get-products-response.json +195 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/list-creative-formats-request.json +103 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/list-creative-formats-response.json +68 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/log-event-request.json +53 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/log-event-response.json +130 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/package-request.json +133 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/package-update.json +202 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/provide-performance-feedback-request.json +73 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/provide-performance-feedback-response.json +79 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-audiences-request.json +127 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-audiences-response.json +191 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-catalogs-async-response-input-required.json +26 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-catalogs-async-response-submitted.json +16 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-catalogs-async-response-working.json +56 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-catalogs-request.json +162 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-catalogs-response.json +213 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-event-sources-request.json +82 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/sync-event-sources-response.json +167 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/update-media-buy-async-response-input-required.json +24 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/update-media-buy-async-response-submitted.json +16 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/update-media-buy-async-response-working.json +36 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/update-media-buy-request.json +99 -0
- package/dist/lib/schemas-data/3.0.1/media-buy/update-media-buy-response.json +119 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/cpa-option.json +75 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/cpc-option.json +71 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/cpcv-option.json +71 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/cpm-option.json +71 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/cpp-option.json +90 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/cpv-option.json +107 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/flat-rate-option.json +116 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/price-breakdown.json +88 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/price-guidance.json +30 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/time-option.json +97 -0
- package/dist/lib/schemas-data/3.0.1/pricing-options/vcpm-option.json +71 -0
- package/dist/lib/schemas-data/3.0.1/property/authorization-result.json +50 -0
- package/dist/lib/schemas-data/3.0.1/property/base-property-source.json +98 -0
- package/dist/lib/schemas-data/3.0.1/property/create-property-list-request.json +62 -0
- package/dist/lib/schemas-data/3.0.1/property/create-property-list-response.json +33 -0
- package/dist/lib/schemas-data/3.0.1/property/delete-property-list-request.json +43 -0
- package/dist/lib/schemas-data/3.0.1/property/delete-property-list-response.json +34 -0
- package/dist/lib/schemas-data/3.0.1/property/delivery-record.json +35 -0
- package/dist/lib/schemas-data/3.0.1/property/get-property-list-request.json +57 -0
- package/dist/lib/schemas-data/3.0.1/property/get-property-list-response.json +53 -0
- package/dist/lib/schemas-data/3.0.1/property/list-property-lists-request.json +33 -0
- package/dist/lib/schemas-data/3.0.1/property/list-property-lists-response.json +29 -0
- package/dist/lib/schemas-data/3.0.1/property/property-error.json +34 -0
- package/dist/lib/schemas-data/3.0.1/property/property-feature-definition.json +96 -0
- package/dist/lib/schemas-data/3.0.1/property/property-feature-result.json +50 -0
- package/dist/lib/schemas-data/3.0.1/property/property-feature-value.json +59 -0
- package/dist/lib/schemas-data/3.0.1/property/property-feature.json +26 -0
- package/dist/lib/schemas-data/3.0.1/property/property-list-changed-webhook.json +74 -0
- package/dist/lib/schemas-data/3.0.1/property/property-list-filters.json +51 -0
- package/dist/lib/schemas-data/3.0.1/property/property-list.json +79 -0
- package/dist/lib/schemas-data/3.0.1/property/update-property-list-request.json +71 -0
- package/dist/lib/schemas-data/3.0.1/property/update-property-list-response.json +28 -0
- package/dist/lib/schemas-data/3.0.1/property/validate-property-delivery-request.json +49 -0
- package/dist/lib/schemas-data/3.0.1/property/validate-property-delivery-response.json +180 -0
- package/dist/lib/schemas-data/3.0.1/property/validation-result.json +101 -0
- package/dist/lib/schemas-data/3.0.1/protocol/get-adcp-capabilities-request.json +37 -0
- package/dist/lib/schemas-data/3.0.1/protocol/get-adcp-capabilities-response.json +1108 -0
- package/dist/lib/schemas-data/3.0.1/signals/activate-signal-request.json +66 -0
- package/dist/lib/schemas-data/3.0.1/signals/activate-signal-response.json +81 -0
- package/dist/lib/schemas-data/3.0.1/signals/get-signals-request.json +80 -0
- package/dist/lib/schemas-data/3.0.1/signals/get-signals-response.json +130 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-capabilities.json +154 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-get-offering-request.json +47 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-get-offering-response.json +150 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-identity.json +104 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-initiate-session-request.json +65 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-initiate-session-response.json +64 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-send-message-request.json +71 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-send-message-response.json +123 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-terminate-session-request.json +77 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-terminate-session-response.json +86 -0
- package/dist/lib/schemas-data/3.0.1/sponsored-intelligence/si-ui-element.json +341 -0
- package/dist/lib/server/a2a-adapter.d.ts +234 -0
- package/dist/lib/server/a2a-adapter.d.ts.map +1 -0
- package/dist/lib/server/a2a-adapter.js +503 -0
- package/dist/lib/server/a2a-adapter.js.map +1 -0
- package/dist/lib/server/adcp-server.d.ts +265 -0
- package/dist/lib/server/adcp-server.d.ts.map +1 -0
- package/dist/lib/server/adcp-server.js +187 -0
- package/dist/lib/server/adcp-server.js.map +1 -0
- package/dist/lib/server/auth-introspection.d.ts +83 -0
- package/dist/lib/server/auth-introspection.d.ts.map +1 -0
- package/dist/lib/server/auth-introspection.js +297 -0
- package/dist/lib/server/auth-introspection.js.map +1 -0
- package/dist/lib/server/auth-signature.d.ts +322 -0
- package/dist/lib/server/auth-signature.d.ts.map +1 -0
- package/dist/lib/server/auth-signature.js +310 -0
- package/dist/lib/server/auth-signature.js.map +1 -0
- package/dist/lib/server/auth.d.ts +303 -0
- package/dist/lib/server/auth.d.ts.map +1 -0
- package/dist/lib/server/auth.js +387 -0
- package/dist/lib/server/auth.js.map +1 -0
- package/dist/lib/server/create-adcp-server.d.ts +968 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -0
- package/dist/lib/server/create-adcp-server.js +1831 -0
- package/dist/lib/server/create-adcp-server.js.map +1 -0
- package/dist/lib/server/envelope-allowlist.d.ts +109 -0
- package/dist/lib/server/envelope-allowlist.d.ts.map +1 -0
- package/dist/lib/server/envelope-allowlist.js +155 -0
- package/dist/lib/server/envelope-allowlist.js.map +1 -0
- package/dist/lib/server/errors.d.ts +129 -0
- package/dist/lib/server/errors.d.ts.map +1 -0
- package/dist/lib/server/errors.js +85 -0
- package/dist/lib/server/errors.js.map +1 -0
- package/dist/lib/server/express-adapter.d.ts +169 -0
- package/dist/lib/server/express-adapter.d.ts.map +1 -0
- package/dist/lib/server/express-adapter.js +271 -0
- package/dist/lib/server/express-adapter.js.map +1 -0
- package/dist/lib/server/governance.d.ts +122 -0
- package/dist/lib/server/governance.d.ts.map +1 -0
- package/dist/lib/server/governance.js +189 -0
- package/dist/lib/server/governance.js.map +1 -0
- package/dist/lib/server/idempotency/backends/memory.d.ts +22 -0
- package/dist/lib/server/idempotency/backends/memory.d.ts.map +1 -0
- package/dist/lib/server/idempotency/backends/memory.js +78 -0
- package/dist/lib/server/idempotency/backends/memory.js.map +1 -0
- package/dist/lib/server/idempotency/backends/pg.d.ts +76 -0
- package/dist/lib/server/idempotency/backends/pg.d.ts.map +1 -0
- package/dist/lib/server/idempotency/backends/pg.js +163 -0
- package/dist/lib/server/idempotency/backends/pg.js.map +1 -0
- package/dist/lib/server/idempotency/index.d.ts +7 -0
- package/dist/lib/server/idempotency/index.d.ts.map +1 -0
- package/dist/lib/server/idempotency/index.js +15 -0
- package/dist/lib/server/idempotency/index.js.map +1 -0
- package/dist/lib/server/idempotency/store.d.ts +302 -0
- package/dist/lib/server/idempotency/store.d.ts.map +1 -0
- package/dist/lib/server/idempotency/store.js +272 -0
- package/dist/lib/server/idempotency/store.js.map +1 -0
- package/dist/lib/server/index.d.ts +50 -0
- package/dist/lib/server/index.d.ts.map +1 -0
- package/dist/lib/server/index.js +164 -0
- package/dist/lib/server/index.js.map +1 -0
- package/dist/lib/server/media-buy-helpers.d.ts +47 -0
- package/dist/lib/server/media-buy-helpers.d.ts.map +1 -0
- package/dist/lib/server/media-buy-helpers.js +43 -0
- package/dist/lib/server/media-buy-helpers.js.map +1 -0
- package/dist/lib/server/pin-and-bind-fetch.d.ts +115 -0
- package/dist/lib/server/pin-and-bind-fetch.d.ts.map +1 -0
- package/dist/lib/server/pin-and-bind-fetch.js +244 -0
- package/dist/lib/server/pin-and-bind-fetch.js.map +1 -0
- package/dist/lib/server/postgres-state-store.d.ts +76 -0
- package/dist/lib/server/postgres-state-store.d.ts.map +1 -0
- package/dist/lib/server/postgres-state-store.js +218 -0
- package/dist/lib/server/postgres-state-store.js.map +1 -0
- package/dist/lib/server/postgres-task-store.d.ts +121 -0
- package/dist/lib/server/postgres-task-store.d.ts.map +1 -0
- package/dist/lib/server/postgres-task-store.js +298 -0
- package/dist/lib/server/postgres-task-store.js.map +1 -0
- package/dist/lib/server/product-defaults.d.ts +16 -0
- package/dist/lib/server/product-defaults.d.ts.map +1 -0
- package/dist/lib/server/product-defaults.js +25 -0
- package/dist/lib/server/product-defaults.js.map +1 -0
- package/dist/lib/server/responses.d.ts +257 -0
- package/dist/lib/server/responses.d.ts.map +1 -0
- package/dist/lib/server/responses.js +542 -0
- package/dist/lib/server/responses.js.map +1 -0
- package/dist/lib/server/serve.d.ts +308 -0
- package/dist/lib/server/serve.d.ts.map +1 -0
- package/dist/lib/server/serve.js +663 -0
- package/dist/lib/server/serve.js.map +1 -0
- package/dist/lib/server/state-store.d.ts +296 -0
- package/dist/lib/server/state-store.d.ts.map +1 -0
- package/dist/lib/server/state-store.js +459 -0
- package/dist/lib/server/state-store.js.map +1 -0
- package/dist/lib/server/structured-serialize.d.ts +30 -0
- package/dist/lib/server/structured-serialize.d.ts.map +1 -0
- package/dist/lib/server/structured-serialize.js +109 -0
- package/dist/lib/server/structured-serialize.js.map +1 -0
- package/dist/lib/server/targeting-helpers.d.ts +90 -0
- package/dist/lib/server/targeting-helpers.d.ts.map +1 -0
- package/dist/lib/server/targeting-helpers.js +144 -0
- package/dist/lib/server/targeting-helpers.js.map +1 -0
- package/dist/lib/server/tasks.d.ts +91 -0
- package/dist/lib/server/tasks.d.ts.map +1 -0
- package/dist/lib/server/tasks.js +116 -0
- package/dist/lib/server/tasks.js.map +1 -0
- package/dist/lib/server/test-controller-bridge.d.ts +192 -0
- package/dist/lib/server/test-controller-bridge.d.ts.map +1 -0
- package/dist/lib/server/test-controller-bridge.js +207 -0
- package/dist/lib/server/test-controller-bridge.js.map +1 -0
- package/dist/lib/server/test-controller.d.ts +388 -0
- package/dist/lib/server/test-controller.d.ts.map +1 -0
- package/dist/lib/server/test-controller.js +735 -0
- package/dist/lib/server/test-controller.js.map +1 -0
- package/dist/lib/server/webhook-emitter.d.ts +192 -0
- package/dist/lib/server/webhook-emitter.d.ts.map +1 -0
- package/dist/lib/server/webhook-emitter.js +316 -0
- package/dist/lib/server/webhook-emitter.js.map +1 -0
- package/dist/lib/server/wrap-envelope.d.ts +162 -0
- package/dist/lib/server/wrap-envelope.d.ts.map +1 -0
- package/dist/lib/server/wrap-envelope.js +145 -0
- package/dist/lib/server/wrap-envelope.js.map +1 -0
- package/dist/lib/signing/agent-context.d.ts +73 -0
- package/dist/lib/signing/agent-context.d.ts.map +1 -0
- package/dist/lib/signing/agent-context.js +104 -0
- package/dist/lib/signing/agent-context.js.map +1 -0
- package/dist/lib/signing/agent-fetch.d.ts +177 -0
- package/dist/lib/signing/agent-fetch.d.ts.map +1 -0
- package/dist/lib/signing/agent-fetch.js +271 -0
- package/dist/lib/signing/agent-fetch.js.map +1 -0
- package/dist/lib/signing/brand-jwks.d.ts +102 -0
- package/dist/lib/signing/brand-jwks.d.ts.map +1 -0
- package/dist/lib/signing/brand-jwks.js +433 -0
- package/dist/lib/signing/brand-jwks.js.map +1 -0
- package/dist/lib/signing/canonicalize.d.ts +39 -0
- package/dist/lib/signing/canonicalize.d.ts.map +1 -0
- package/dist/lib/signing/canonicalize.js +149 -0
- package/dist/lib/signing/canonicalize.js.map +1 -0
- package/dist/lib/signing/capability-cache.d.ts +70 -0
- package/dist/lib/signing/capability-cache.d.ts.map +1 -0
- package/dist/lib/signing/capability-cache.js +90 -0
- package/dist/lib/signing/capability-cache.js.map +1 -0
- package/dist/lib/signing/capability-priming.d.ts +30 -0
- package/dist/lib/signing/capability-priming.d.ts.map +1 -0
- package/dist/lib/signing/capability-priming.js +145 -0
- package/dist/lib/signing/capability-priming.js.map +1 -0
- package/dist/lib/signing/client.d.ts +25 -0
- package/dist/lib/signing/client.d.ts.map +1 -0
- package/dist/lib/signing/client.js +70 -0
- package/dist/lib/signing/client.js.map +1 -0
- package/dist/lib/signing/content-digest.d.ts +9 -0
- package/dist/lib/signing/content-digest.d.ts.map +1 -0
- package/dist/lib/signing/content-digest.js +48 -0
- package/dist/lib/signing/content-digest.js.map +1 -0
- package/dist/lib/signing/crypto.d.ts +5 -0
- package/dist/lib/signing/crypto.d.ts.map +1 -0
- package/dist/lib/signing/crypto.js +35 -0
- package/dist/lib/signing/crypto.js.map +1 -0
- package/dist/lib/signing/ecdsa-encoding.d.ts +20 -0
- package/dist/lib/signing/ecdsa-encoding.d.ts.map +1 -0
- package/dist/lib/signing/ecdsa-encoding.js +91 -0
- package/dist/lib/signing/ecdsa-encoding.js.map +1 -0
- package/dist/lib/signing/errors.d.ts +49 -0
- package/dist/lib/signing/errors.d.ts.map +1 -0
- package/dist/lib/signing/errors.js +48 -0
- package/dist/lib/signing/errors.js.map +1 -0
- package/dist/lib/signing/fetch-async.d.ts +23 -0
- package/dist/lib/signing/fetch-async.d.ts.map +1 -0
- package/dist/lib/signing/fetch-async.js +96 -0
- package/dist/lib/signing/fetch-async.js.map +1 -0
- package/dist/lib/signing/fetch.d.ts +17 -0
- package/dist/lib/signing/fetch.d.ts.map +1 -0
- package/dist/lib/signing/fetch.js +89 -0
- package/dist/lib/signing/fetch.js.map +1 -0
- package/dist/lib/signing/index.d.ts +16 -0
- package/dist/lib/signing/index.d.ts.map +1 -0
- package/dist/lib/signing/index.js +32 -0
- package/dist/lib/signing/index.js.map +1 -0
- package/dist/lib/signing/jwks-helpers.d.ts +48 -0
- package/dist/lib/signing/jwks-helpers.d.ts.map +1 -0
- package/dist/lib/signing/jwks-helpers.js +87 -0
- package/dist/lib/signing/jwks-helpers.js.map +1 -0
- package/dist/lib/signing/jwks-https.d.ts +61 -0
- package/dist/lib/signing/jwks-https.d.ts.map +1 -0
- package/dist/lib/signing/jwks-https.js +165 -0
- package/dist/lib/signing/jwks-https.js.map +1 -0
- package/dist/lib/signing/jwks.d.ts +10 -0
- package/dist/lib/signing/jwks.d.ts.map +1 -0
- package/dist/lib/signing/jwks.js +15 -0
- package/dist/lib/signing/jwks.js.map +1 -0
- package/dist/lib/signing/middleware.d.ts +77 -0
- package/dist/lib/signing/middleware.d.ts.map +1 -0
- package/dist/lib/signing/middleware.js +77 -0
- package/dist/lib/signing/middleware.js.map +1 -0
- package/dist/lib/signing/parser.d.ts +35 -0
- package/dist/lib/signing/parser.d.ts.map +1 -0
- package/dist/lib/signing/parser.js +244 -0
- package/dist/lib/signing/parser.js.map +1 -0
- package/dist/lib/signing/postgres-replay-store.d.ts +138 -0
- package/dist/lib/signing/postgres-replay-store.d.ts.map +1 -0
- package/dist/lib/signing/postgres-replay-store.js +236 -0
- package/dist/lib/signing/postgres-replay-store.js.map +1 -0
- package/dist/lib/signing/provider.d.ts +81 -0
- package/dist/lib/signing/provider.d.ts.map +1 -0
- package/dist/lib/signing/provider.js +3 -0
- package/dist/lib/signing/provider.js.map +1 -0
- package/dist/lib/signing/replay.d.ts +62 -0
- package/dist/lib/signing/replay.d.ts.map +1 -0
- package/dist/lib/signing/replay.js +106 -0
- package/dist/lib/signing/replay.js.map +1 -0
- package/dist/lib/signing/revocation-https.d.ts +79 -0
- package/dist/lib/signing/revocation-https.d.ts.map +1 -0
- package/dist/lib/signing/revocation-https.js +144 -0
- package/dist/lib/signing/revocation-https.js.map +1 -0
- package/dist/lib/signing/revocation.d.ts +11 -0
- package/dist/lib/signing/revocation.d.ts.map +1 -0
- package/dist/lib/signing/revocation.js +18 -0
- package/dist/lib/signing/revocation.js.map +1 -0
- package/dist/lib/signing/server.d.ts +27 -0
- package/dist/lib/signing/server.d.ts.map +1 -0
- package/dist/lib/signing/server.js +67 -0
- package/dist/lib/signing/server.js.map +1 -0
- package/dist/lib/signing/signer-async.d.ts +24 -0
- package/dist/lib/signing/signer-async.d.ts.map +1 -0
- package/dist/lib/signing/signer-async.js +34 -0
- package/dist/lib/signing/signer-async.js.map +1 -0
- package/dist/lib/signing/signer.d.ts +94 -0
- package/dist/lib/signing/signer.d.ts.map +1 -0
- package/dist/lib/signing/signer.js +131 -0
- package/dist/lib/signing/signer.js.map +1 -0
- package/dist/lib/signing/testing.d.ts +45 -0
- package/dist/lib/signing/testing.d.ts.map +1 -0
- package/dist/lib/signing/testing.js +81 -0
- package/dist/lib/signing/testing.js.map +1 -0
- package/dist/lib/signing/types.d.ts +90 -0
- package/dist/lib/signing/types.d.ts.map +1 -0
- package/dist/lib/signing/types.js +9 -0
- package/dist/lib/signing/types.js.map +1 -0
- package/dist/lib/signing/verifier.d.ts +23 -0
- package/dist/lib/signing/verifier.d.ts.map +1 -0
- package/dist/lib/signing/verifier.js +386 -0
- package/dist/lib/signing/verifier.js.map +1 -0
- package/dist/lib/signing/webhook-verifier.d.ts +119 -0
- package/dist/lib/signing/webhook-verifier.d.ts.map +1 -0
- package/dist/lib/signing/webhook-verifier.js +292 -0
- package/dist/lib/signing/webhook-verifier.js.map +1 -0
- package/dist/lib/storage/MemoryStorage.d.ts +93 -0
- package/dist/lib/storage/MemoryStorage.d.ts.map +1 -0
- package/dist/lib/storage/MemoryStorage.js +219 -0
- package/dist/lib/storage/MemoryStorage.js.map +1 -0
- package/dist/lib/storage/interfaces.d.ts +195 -0
- package/dist/lib/storage/interfaces.d.ts.map +1 -0
- package/dist/lib/storage/interfaces.js +5 -0
- package/dist/lib/storage/interfaces.js.map +1 -0
- package/dist/lib/substitution/encoder/SubstitutionEncoder.d.ts +45 -0
- package/dist/lib/substitution/encoder/SubstitutionEncoder.d.ts.map +1 -0
- package/dist/lib/substitution/encoder/SubstitutionEncoder.js +73 -0
- package/dist/lib/substitution/encoder/SubstitutionEncoder.js.map +1 -0
- package/dist/lib/substitution/encoder/index.d.ts +2 -0
- package/dist/lib/substitution/encoder/index.d.ts.map +1 -0
- package/dist/lib/substitution/encoder/index.js +7 -0
- package/dist/lib/substitution/encoder/index.js.map +1 -0
- package/dist/lib/substitution/index.d.ts +36 -0
- package/dist/lib/substitution/index.d.ts.map +1 -0
- package/dist/lib/substitution/index.js +56 -0
- package/dist/lib/substitution/index.js.map +1 -0
- package/dist/lib/substitution/observer/SubstitutionObserver.d.ts +91 -0
- package/dist/lib/substitution/observer/SubstitutionObserver.d.ts.map +1 -0
- package/dist/lib/substitution/observer/SubstitutionObserver.js +248 -0
- package/dist/lib/substitution/observer/SubstitutionObserver.js.map +1 -0
- package/dist/lib/substitution/observer/alignment.d.ts +24 -0
- package/dist/lib/substitution/observer/alignment.d.ts.map +1 -0
- package/dist/lib/substitution/observer/alignment.js +279 -0
- package/dist/lib/substitution/observer/alignment.js.map +1 -0
- package/dist/lib/substitution/observer/assertions.d.ts +48 -0
- package/dist/lib/substitution/observer/assertions.d.ts.map +1 -0
- package/dist/lib/substitution/observer/assertions.js +145 -0
- package/dist/lib/substitution/observer/assertions.js.map +1 -0
- package/dist/lib/substitution/observer/html-parser.d.ts +29 -0
- package/dist/lib/substitution/observer/html-parser.d.ts.map +1 -0
- package/dist/lib/substitution/observer/html-parser.js +308 -0
- package/dist/lib/substitution/observer/html-parser.js.map +1 -0
- package/dist/lib/substitution/observer/index.d.ts +7 -0
- package/dist/lib/substitution/observer/index.d.ts.map +1 -0
- package/dist/lib/substitution/observer/index.js +21 -0
- package/dist/lib/substitution/observer/index.js.map +1 -0
- package/dist/lib/substitution/observer/ssrf.d.ts +29 -0
- package/dist/lib/substitution/observer/ssrf.d.ts.map +1 -0
- package/dist/lib/substitution/observer/ssrf.js +226 -0
- package/dist/lib/substitution/observer/ssrf.js.map +1 -0
- package/dist/lib/substitution/rfc3986.d.ts +51 -0
- package/dist/lib/substitution/rfc3986.d.ts.map +1 -0
- package/dist/lib/substitution/rfc3986.js +139 -0
- package/dist/lib/substitution/rfc3986.js.map +1 -0
- package/dist/lib/substitution/types.d.ts +147 -0
- package/dist/lib/substitution/types.d.ts.map +1 -0
- package/dist/lib/substitution/types.js +8 -0
- package/dist/lib/substitution/types.js.map +1 -0
- package/dist/lib/substitution/vectors.d.ts +18 -0
- package/dist/lib/substitution/vectors.d.ts.map +1 -0
- package/dist/lib/substitution/vectors.js +79 -0
- package/dist/lib/substitution/vectors.js.map +1 -0
- package/dist/lib/testing/agent-tester.d.ts +34 -0
- package/dist/lib/testing/agent-tester.d.ts.map +1 -0
- package/dist/lib/testing/agent-tester.js +421 -0
- package/dist/lib/testing/agent-tester.js.map +1 -0
- package/dist/lib/testing/client.d.ts +104 -0
- package/dist/lib/testing/client.d.ts.map +1 -0
- package/dist/lib/testing/client.js +487 -0
- package/dist/lib/testing/client.js.map +1 -0
- package/dist/lib/testing/compliance/briefs.d.ts +11 -0
- package/dist/lib/testing/compliance/briefs.d.ts.map +1 -0
- package/dist/lib/testing/compliance/briefs.js +156 -0
- package/dist/lib/testing/compliance/briefs.js.map +1 -0
- package/dist/lib/testing/compliance/comply.d.ts +83 -0
- package/dist/lib/testing/compliance/comply.d.ts.map +1 -0
- package/dist/lib/testing/compliance/comply.js +1275 -0
- package/dist/lib/testing/compliance/comply.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +10 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -0
- package/dist/lib/testing/compliance/index.js +18 -0
- package/dist/lib/testing/compliance/index.js.map +1 -0
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts +17 -0
- package/dist/lib/testing/compliance/storyboard-tracks.d.ts.map +1 -0
- package/dist/lib/testing/compliance/storyboard-tracks.js +147 -0
- package/dist/lib/testing/compliance/storyboard-tracks.js.map +1 -0
- package/dist/lib/testing/compliance/types.d.ts +145 -0
- package/dist/lib/testing/compliance/types.d.ts.map +1 -0
- package/dist/lib/testing/compliance/types.js +6 -0
- package/dist/lib/testing/compliance/types.js.map +1 -0
- package/dist/lib/testing/comply-controller.d.ts +193 -0
- package/dist/lib/testing/comply-controller.d.ts.map +1 -0
- package/dist/lib/testing/comply-controller.js +199 -0
- package/dist/lib/testing/comply-controller.js.map +1 -0
- package/dist/lib/testing/controller-assertions.d.ts +67 -0
- package/dist/lib/testing/controller-assertions.d.ts.map +1 -0
- package/dist/lib/testing/controller-assertions.js +60 -0
- package/dist/lib/testing/controller-assertions.js.map +1 -0
- package/dist/lib/testing/formatter.d.ts +17 -0
- package/dist/lib/testing/formatter.d.ts.map +1 -0
- package/dist/lib/testing/formatter.js +92 -0
- package/dist/lib/testing/formatter.js.map +1 -0
- package/dist/lib/testing/index.d.ts +19 -0
- package/dist/lib/testing/index.d.ts.map +1 -0
- package/dist/lib/testing/index.js +185 -0
- package/dist/lib/testing/index.js.map +1 -0
- package/dist/lib/testing/local-agent-runner.d.ts +189 -0
- package/dist/lib/testing/local-agent-runner.d.ts.map +1 -0
- package/dist/lib/testing/local-agent-runner.js +290 -0
- package/dist/lib/testing/local-agent-runner.js.map +1 -0
- package/dist/lib/testing/orchestrator.d.ts +70 -0
- package/dist/lib/testing/orchestrator.d.ts.map +1 -0
- package/dist/lib/testing/orchestrator.js +278 -0
- package/dist/lib/testing/orchestrator.js.map +1 -0
- package/dist/lib/testing/scenarios/brand-rights.d.ts +41 -0
- package/dist/lib/testing/scenarios/brand-rights.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/brand-rights.js +278 -0
- package/dist/lib/testing/scenarios/brand-rights.js.map +1 -0
- package/dist/lib/testing/scenarios/capabilities.d.ts +27 -0
- package/dist/lib/testing/scenarios/capabilities.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/capabilities.js +332 -0
- package/dist/lib/testing/scenarios/capabilities.js.map +1 -0
- package/dist/lib/testing/scenarios/creative.d.ts +38 -0
- package/dist/lib/testing/scenarios/creative.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/creative.js +429 -0
- package/dist/lib/testing/scenarios/creative.js.map +1 -0
- package/dist/lib/testing/scenarios/deterministic.d.ts +37 -0
- package/dist/lib/testing/scenarios/deterministic.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/deterministic.js +705 -0
- package/dist/lib/testing/scenarios/deterministic.js.map +1 -0
- package/dist/lib/testing/scenarios/discovery.d.ts +15 -0
- package/dist/lib/testing/scenarios/discovery.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/discovery.js +68 -0
- package/dist/lib/testing/scenarios/discovery.js.map +1 -0
- package/dist/lib/testing/scenarios/edge-cases.d.ts +64 -0
- package/dist/lib/testing/scenarios/edge-cases.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/edge-cases.js +569 -0
- package/dist/lib/testing/scenarios/edge-cases.js.map +1 -0
- package/dist/lib/testing/scenarios/error-compliance.d.ts +30 -0
- package/dist/lib/testing/scenarios/error-compliance.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/error-compliance.js +372 -0
- package/dist/lib/testing/scenarios/error-compliance.js.map +1 -0
- package/dist/lib/testing/scenarios/governance.d.ts +114 -0
- package/dist/lib/testing/scenarios/governance.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/governance.js +1619 -0
- package/dist/lib/testing/scenarios/governance.js.map +1 -0
- package/dist/lib/testing/scenarios/health.d.ts +12 -0
- package/dist/lib/testing/scenarios/health.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/health.js +21 -0
- package/dist/lib/testing/scenarios/health.js.map +1 -0
- package/dist/lib/testing/scenarios/index.d.ts +20 -0
- package/dist/lib/testing/scenarios/index.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/index.js +96 -0
- package/dist/lib/testing/scenarios/index.js.map +1 -0
- package/dist/lib/testing/scenarios/media-buy.d.ts +128 -0
- package/dist/lib/testing/scenarios/media-buy.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/media-buy.js +1655 -0
- package/dist/lib/testing/scenarios/media-buy.js.map +1 -0
- package/dist/lib/testing/scenarios/schema-compliance.d.ts +17 -0
- package/dist/lib/testing/scenarios/schema-compliance.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/schema-compliance.js +194 -0
- package/dist/lib/testing/scenarios/schema-compliance.js.map +1 -0
- package/dist/lib/testing/scenarios/signals.d.ts +22 -0
- package/dist/lib/testing/scenarios/signals.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/signals.js +221 -0
- package/dist/lib/testing/scenarios/signals.js.map +1 -0
- package/dist/lib/testing/scenarios/sponsored-intelligence.d.ts +45 -0
- package/dist/lib/testing/scenarios/sponsored-intelligence.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/sponsored-intelligence.js +554 -0
- package/dist/lib/testing/scenarios/sponsored-intelligence.js.map +1 -0
- package/dist/lib/testing/scenarios/trusted-match.d.ts +22 -0
- package/dist/lib/testing/scenarios/trusted-match.d.ts.map +1 -0
- package/dist/lib/testing/scenarios/trusted-match.js +128 -0
- package/dist/lib/testing/scenarios/trusted-match.js.map +1 -0
- package/dist/lib/testing/seed-merge.d.ts +150 -0
- package/dist/lib/testing/seed-merge.d.ts.map +1 -0
- package/dist/lib/testing/seed-merge.js +315 -0
- package/dist/lib/testing/seed-merge.js.map +1 -0
- package/dist/lib/testing/storyboard/assertions.d.ts +148 -0
- package/dist/lib/testing/storyboard/assertions.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/assertions.js +270 -0
- package/dist/lib/testing/storyboard/assertions.js.map +1 -0
- package/dist/lib/testing/storyboard/compliance.d.ts +166 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/compliance.js +434 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -0
- package/dist/lib/testing/storyboard/context.d.ts +124 -0
- package/dist/lib/testing/storyboard/context.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/context.js +560 -0
- package/dist/lib/testing/storyboard/context.js.map +1 -0
- package/dist/lib/testing/storyboard/default-invariants.d.ts +36 -0
- package/dist/lib/testing/storyboard/default-invariants.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/default-invariants.js +882 -0
- package/dist/lib/testing/storyboard/default-invariants.js.map +1 -0
- package/dist/lib/testing/storyboard/index.d.ts +34 -0
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/index.js +110 -0
- package/dist/lib/testing/storyboard/index.js.map +1 -0
- package/dist/lib/testing/storyboard/junit.d.ts +2 -0
- package/dist/lib/testing/storyboard/junit.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/junit.js +104 -0
- package/dist/lib/testing/storyboard/junit.js.map +1 -0
- package/dist/lib/testing/storyboard/loader.d.ts +28 -0
- package/dist/lib/testing/storyboard/loader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/loader.js +194 -0
- package/dist/lib/testing/storyboard/loader.js.map +1 -0
- package/dist/lib/testing/storyboard/path.d.ts +76 -0
- package/dist/lib/testing/storyboard/path.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/path.js +258 -0
- package/dist/lib/testing/storyboard/path.js.map +1 -0
- package/dist/lib/testing/storyboard/probes.d.ts +148 -0
- package/dist/lib/testing/storyboard/probes.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/probes.js +402 -0
- package/dist/lib/testing/storyboard/probes.js.map +1 -0
- package/dist/lib/testing/storyboard/rejection-hints.d.ts +41 -0
- package/dist/lib/testing/storyboard/rejection-hints.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/rejection-hints.js +344 -0
- package/dist/lib/testing/storyboard/rejection-hints.js.map +1 -0
- package/dist/lib/testing/storyboard/request-builder.d.ts +35 -0
- package/dist/lib/testing/storyboard/request-builder.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-builder.js +845 -0
- package/dist/lib/testing/storyboard/request-builder.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/builder.d.ts +60 -0
- package/dist/lib/testing/storyboard/request-signing/builder.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/builder.js +462 -0
- package/dist/lib/testing/storyboard/request-signing/builder.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/grader.d.ts +166 -0
- package/dist/lib/testing/storyboard/request-signing/grader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/grader.js +517 -0
- package/dist/lib/testing/storyboard/request-signing/grader.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/index.d.ts +38 -0
- package/dist/lib/testing/storyboard/request-signing/index.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/index.js +62 -0
- package/dist/lib/testing/storyboard/request-signing/index.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts +10 -0
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js +81 -0
- package/dist/lib/testing/storyboard/request-signing/probe-dispatch.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/probe.d.ts +41 -0
- package/dist/lib/testing/storyboard/request-signing/probe.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/probe.js +220 -0
- package/dist/lib/testing/storyboard/request-signing/probe.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/synthesize.d.ts +28 -0
- package/dist/lib/testing/storyboard/request-signing/synthesize.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/synthesize.js +79 -0
- package/dist/lib/testing/storyboard/request-signing/synthesize.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.d.ts +42 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.js +101 -0
- package/dist/lib/testing/storyboard/request-signing/test-kit.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/types.d.ts +72 -0
- package/dist/lib/testing/storyboard/request-signing/types.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/types.js +6 -0
- package/dist/lib/testing/storyboard/request-signing/types.js.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts +16 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.js +242 -0
- package/dist/lib/testing/storyboard/request-signing/vector-loader.js.map +1 -0
- package/dist/lib/testing/storyboard/runner.d.ts +141 -0
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/runner.js +2349 -0
- package/dist/lib/testing/storyboard/runner.js.map +1 -0
- package/dist/lib/testing/storyboard/sandbox-entities.d.ts +56 -0
- package/dist/lib/testing/storyboard/sandbox-entities.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/sandbox-entities.js +222 -0
- package/dist/lib/testing/storyboard/sandbox-entities.js.map +1 -0
- package/dist/lib/testing/storyboard/seeding.d.ts +72 -0
- package/dist/lib/testing/storyboard/seeding.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/seeding.js +282 -0
- package/dist/lib/testing/storyboard/seeding.js.map +1 -0
- package/dist/lib/testing/storyboard/shape-drift-hints.d.ts +54 -0
- package/dist/lib/testing/storyboard/shape-drift-hints.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/shape-drift-hints.js +200 -0
- package/dist/lib/testing/storyboard/shape-drift-hints.js.map +1 -0
- package/dist/lib/testing/storyboard/signer-grader/grader.d.ts +56 -0
- package/dist/lib/testing/storyboard/signer-grader/grader.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/signer-grader/grader.js +270 -0
- package/dist/lib/testing/storyboard/signer-grader/grader.js.map +1 -0
- package/dist/lib/testing/storyboard/signer-grader/index.d.ts +3 -0
- package/dist/lib/testing/storyboard/signer-grader/index.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/signer-grader/index.js +6 -0
- package/dist/lib/testing/storyboard/signer-grader/index.js.map +1 -0
- package/dist/lib/testing/storyboard/signer-grader/types.d.ts +62 -0
- package/dist/lib/testing/storyboard/signer-grader/types.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/signer-grader/types.js +3 -0
- package/dist/lib/testing/storyboard/signer-grader/types.js.map +1 -0
- package/dist/lib/testing/storyboard/strict-validation-hints.d.ts +28 -0
- package/dist/lib/testing/storyboard/strict-validation-hints.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/strict-validation-hints.js +128 -0
- package/dist/lib/testing/storyboard/strict-validation-hints.js.map +1 -0
- package/dist/lib/testing/storyboard/task-map.d.ts +25 -0
- package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/task-map.js +130 -0
- package/dist/lib/testing/storyboard/task-map.js.map +1 -0
- package/dist/lib/testing/storyboard/test-kit.d.ts +52 -0
- package/dist/lib/testing/storyboard/test-kit.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/test-kit.js +93 -0
- package/dist/lib/testing/storyboard/test-kit.js.map +1 -0
- package/dist/lib/testing/storyboard/types.d.ts +1404 -0
- package/dist/lib/testing/storyboard/types.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/types.js +35 -0
- package/dist/lib/testing/storyboard/types.js.map +1 -0
- package/dist/lib/testing/storyboard/validations.d.ts +103 -0
- package/dist/lib/testing/storyboard/validations.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/validations.js +1729 -0
- package/dist/lib/testing/storyboard/validations.js.map +1 -0
- package/dist/lib/testing/storyboard/webhook-assertions.d.ts +62 -0
- package/dist/lib/testing/storyboard/webhook-assertions.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/webhook-assertions.js +538 -0
- package/dist/lib/testing/storyboard/webhook-assertions.js.map +1 -0
- package/dist/lib/testing/storyboard/webhook-receiver.d.ts +104 -0
- package/dist/lib/testing/storyboard/webhook-receiver.d.ts.map +1 -0
- package/dist/lib/testing/storyboard/webhook-receiver.js +402 -0
- package/dist/lib/testing/storyboard/webhook-receiver.js.map +1 -0
- package/dist/lib/testing/stubs/governance-agent-stub.d.ts +72 -0
- package/dist/lib/testing/stubs/governance-agent-stub.d.ts.map +1 -0
- package/dist/lib/testing/stubs/governance-agent-stub.js +297 -0
- package/dist/lib/testing/stubs/governance-agent-stub.js.map +1 -0
- package/dist/lib/testing/stubs/index.d.ts +3 -0
- package/dist/lib/testing/stubs/index.d.ts.map +1 -0
- package/dist/lib/testing/stubs/index.js +6 -0
- package/dist/lib/testing/stubs/index.js.map +1 -0
- package/dist/lib/testing/test-controller.d.ts +46 -0
- package/dist/lib/testing/test-controller.d.ts.map +1 -0
- package/dist/lib/testing/test-controller.js +143 -0
- package/dist/lib/testing/test-controller.js.map +1 -0
- package/dist/lib/testing/test-helpers.d.ts +213 -0
- package/dist/lib/testing/test-helpers.d.ts.map +1 -0
- package/dist/lib/testing/test-helpers.js +250 -0
- package/dist/lib/testing/test-helpers.js.map +1 -0
- package/dist/lib/testing/types.d.ts +222 -0
- package/dist/lib/testing/types.d.ts.map +1 -0
- package/dist/lib/testing/types.js +6 -0
- package/dist/lib/testing/types.js.map +1 -0
- package/dist/lib/types/adcp.d.ts +625 -0
- package/dist/lib/types/adcp.d.ts.map +1 -0
- package/dist/lib/types/adcp.js +20 -0
- package/dist/lib/types/adcp.js.map +1 -0
- package/dist/lib/types/asset-instances.d.ts +32 -0
- package/dist/lib/types/asset-instances.d.ts.map +1 -0
- package/dist/lib/types/asset-instances.js +24 -0
- package/dist/lib/types/asset-instances.js.map +1 -0
- package/dist/lib/types/compat.d.ts +105 -0
- package/dist/lib/types/compat.d.ts.map +1 -0
- package/dist/lib/types/compat.js +52 -0
- package/dist/lib/types/compat.js.map +1 -0
- package/dist/lib/types/core.generated.d.ts +15973 -0
- package/dist/lib/types/core.generated.d.ts.map +1 -0
- package/dist/lib/types/core.generated.js +5 -0
- package/dist/lib/types/core.generated.js.map +1 -0
- package/dist/lib/types/enums.generated.d.ts +139 -0
- package/dist/lib/types/enums.generated.d.ts.map +1 -0
- package/dist/lib/types/enums.generated.js +158 -0
- package/dist/lib/types/enums.generated.js.map +1 -0
- package/dist/lib/types/error-codes.d.ts +32 -0
- package/dist/lib/types/error-codes.d.ts.map +1 -0
- package/dist/lib/types/error-codes.js +146 -0
- package/dist/lib/types/error-codes.js.map +1 -0
- package/dist/lib/types/format-asset-slots.d.ts +117 -0
- package/dist/lib/types/format-asset-slots.d.ts.map +1 -0
- package/dist/lib/types/format-asset-slots.js +20 -0
- package/dist/lib/types/format-asset-slots.js.map +1 -0
- package/dist/lib/types/index.d.ts +20 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/types/index.js +48 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/types/inline-enums.aliases.d.ts +53 -0
- package/dist/lib/types/inline-enums.aliases.d.ts.map +1 -0
- package/dist/lib/types/inline-enums.aliases.js +73 -0
- package/dist/lib/types/inline-enums.aliases.js.map +1 -0
- package/dist/lib/types/inline-enums.generated.d.ts +157 -0
- package/dist/lib/types/inline-enums.generated.d.ts.map +1 -0
- package/dist/lib/types/inline-enums.generated.js +239 -0
- package/dist/lib/types/inline-enums.generated.js.map +1 -0
- package/dist/lib/types/schemas.generated.d.ts +46531 -0
- package/dist/lib/types/schemas.generated.d.ts.map +1 -0
- package/dist/lib/types/schemas.generated.js +5867 -0
- package/dist/lib/types/schemas.generated.js.map +1 -0
- package/dist/lib/types/sync-rows.d.ts +37 -0
- package/dist/lib/types/sync-rows.d.ts.map +1 -0
- package/dist/lib/types/sync-rows.js +21 -0
- package/dist/lib/types/sync-rows.js.map +1 -0
- package/dist/lib/types/tools.generated.d.ts +13423 -0
- package/dist/lib/types/tools.generated.d.ts.map +1 -0
- package/dist/lib/types/tools.generated.js +5 -0
- package/dist/lib/types/tools.generated.js.map +1 -0
- package/dist/lib/types/wellknown-schemas.generated.d.ts +1363 -0
- package/dist/lib/types/wellknown-schemas.generated.d.ts.map +1 -0
- package/dist/lib/types/wellknown-schemas.generated.js +14 -0
- package/dist/lib/types/wellknown-schemas.generated.js.map +1 -0
- package/dist/lib/utils/a2a-discovery.d.ts +42 -0
- package/dist/lib/utils/a2a-discovery.d.ts.map +1 -0
- package/dist/lib/utils/a2a-discovery.js +68 -0
- package/dist/lib/utils/a2a-discovery.js.map +1 -0
- package/dist/lib/utils/adcp-version-config.d.ts +11 -0
- package/dist/lib/utils/adcp-version-config.d.ts.map +1 -0
- package/dist/lib/utils/adcp-version-config.js +44 -0
- package/dist/lib/utils/adcp-version-config.js.map +1 -0
- package/dist/lib/utils/asset-builders.d.ts +44 -0
- package/dist/lib/utils/asset-builders.d.ts.map +1 -0
- package/dist/lib/utils/asset-builders.js +84 -0
- package/dist/lib/utils/asset-builders.js.map +1 -0
- package/dist/lib/utils/capabilities.d.ts +259 -0
- package/dist/lib/utils/capabilities.d.ts.map +1 -0
- package/dist/lib/utils/capabilities.js +463 -0
- package/dist/lib/utils/capabilities.js.map +1 -0
- package/dist/lib/utils/creative-adapter.d.ts +91 -0
- package/dist/lib/utils/creative-adapter.d.ts.map +1 -0
- package/dist/lib/utils/creative-adapter.js +156 -0
- package/dist/lib/utils/creative-adapter.js.map +1 -0
- package/dist/lib/utils/deprecation.d.ts +11 -0
- package/dist/lib/utils/deprecation.d.ts.map +1 -0
- package/dist/lib/utils/deprecation.js +23 -0
- package/dist/lib/utils/deprecation.js.map +1 -0
- package/dist/lib/utils/error-extraction.d.ts +43 -0
- package/dist/lib/utils/error-extraction.d.ts.map +1 -0
- package/dist/lib/utils/error-extraction.js +225 -0
- package/dist/lib/utils/error-extraction.js.map +1 -0
- package/dist/lib/utils/extract-result.d.ts +45 -0
- package/dist/lib/utils/extract-result.d.ts.map +1 -0
- package/dist/lib/utils/extract-result.js +27 -0
- package/dist/lib/utils/extract-result.js.map +1 -0
- package/dist/lib/utils/format-asset-slot-builders.d.ts +76 -0
- package/dist/lib/utils/format-asset-slot-builders.d.ts.map +1 -0
- package/dist/lib/utils/format-asset-slot-builders.js +174 -0
- package/dist/lib/utils/format-asset-slot-builders.js.map +1 -0
- package/dist/lib/utils/format-assets.d.ts +100 -0
- package/dist/lib/utils/format-assets.d.ts.map +1 -0
- package/dist/lib/utils/format-assets.js +147 -0
- package/dist/lib/utils/format-assets.js.map +1 -0
- package/dist/lib/utils/format-render-builders.d.ts +76 -0
- package/dist/lib/utils/format-render-builders.d.ts.map +1 -0
- package/dist/lib/utils/format-render-builders.js +76 -0
- package/dist/lib/utils/format-render-builders.js.map +1 -0
- package/dist/lib/utils/format-renders.d.ts +96 -0
- package/dist/lib/utils/format-renders.d.ts.map +1 -0
- package/dist/lib/utils/format-renders.js +141 -0
- package/dist/lib/utils/format-renders.js.map +1 -0
- package/dist/lib/utils/idempotency.d.ts +96 -0
- package/dist/lib/utils/idempotency.d.ts.map +1 -0
- package/dist/lib/utils/idempotency.js +156 -0
- package/dist/lib/utils/idempotency.js.map +1 -0
- package/dist/lib/utils/index.d.ts +39 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +196 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/utils/jcs.d.ts +30 -0
- package/dist/lib/utils/jcs.d.ts.map +1 -0
- package/dist/lib/utils/jcs.js +167 -0
- package/dist/lib/utils/jcs.js.map +1 -0
- package/dist/lib/utils/logger.d.ts +55 -0
- package/dist/lib/utils/logger.d.ts.map +1 -0
- package/dist/lib/utils/logger.js +100 -0
- package/dist/lib/utils/logger.js.map +1 -0
- package/dist/lib/utils/pagination.d.ts +31 -0
- package/dist/lib/utils/pagination.d.ts.map +1 -0
- package/dist/lib/utils/pagination.js +51 -0
- package/dist/lib/utils/pagination.js.map +1 -0
- package/dist/lib/utils/preview-normalizer.d.ts +109 -0
- package/dist/lib/utils/preview-normalizer.d.ts.map +1 -0
- package/dist/lib/utils/preview-normalizer.js +122 -0
- package/dist/lib/utils/preview-normalizer.js.map +1 -0
- package/dist/lib/utils/preview-utils.d.ts +87 -0
- package/dist/lib/utils/preview-utils.d.ts.map +1 -0
- package/dist/lib/utils/preview-utils.js +340 -0
- package/dist/lib/utils/preview-utils.js.map +1 -0
- package/dist/lib/utils/pricing-adapter.d.ts +144 -0
- package/dist/lib/utils/pricing-adapter.d.ts.map +1 -0
- package/dist/lib/utils/pricing-adapter.js +322 -0
- package/dist/lib/utils/pricing-adapter.js.map +1 -0
- package/dist/lib/utils/protocol-detection.d.ts +26 -0
- package/dist/lib/utils/protocol-detection.d.ts.map +1 -0
- package/dist/lib/utils/protocol-detection.js +62 -0
- package/dist/lib/utils/protocol-detection.js.map +1 -0
- package/dist/lib/utils/render-builders.d.ts +41 -0
- package/dist/lib/utils/render-builders.d.ts.map +1 -0
- package/dist/lib/utils/render-builders.js +52 -0
- package/dist/lib/utils/render-builders.js.map +1 -0
- package/dist/lib/utils/request-normalizer.d.ts +26 -0
- package/dist/lib/utils/request-normalizer.d.ts.map +1 -0
- package/dist/lib/utils/request-normalizer.js +175 -0
- package/dist/lib/utils/request-normalizer.js.map +1 -0
- package/dist/lib/utils/response-schemas.d.ts +9 -0
- package/dist/lib/utils/response-schemas.d.ts.map +1 -0
- package/dist/lib/utils/response-schemas.js +129 -0
- package/dist/lib/utils/response-schemas.js.map +1 -0
- package/dist/lib/utils/response-unwrapper.d.ts +54 -0
- package/dist/lib/utils/response-unwrapper.d.ts.map +1 -0
- package/dist/lib/utils/response-unwrapper.js +406 -0
- package/dist/lib/utils/response-unwrapper.js.map +1 -0
- package/dist/lib/utils/retry.d.ts +15 -0
- package/dist/lib/utils/retry.d.ts.map +1 -0
- package/dist/lib/utils/retry.js +22 -0
- package/dist/lib/utils/retry.js.map +1 -0
- package/dist/lib/utils/sync-creatives-adapter.d.ts +18 -0
- package/dist/lib/utils/sync-creatives-adapter.d.ts.map +1 -0
- package/dist/lib/utils/sync-creatives-adapter.js +46 -0
- package/dist/lib/utils/sync-creatives-adapter.js.map +1 -0
- package/dist/lib/utils/tool-request-schemas.d.ts +15 -0
- package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -0
- package/dist/lib/utils/tool-request-schemas.js +129 -0
- package/dist/lib/utils/tool-request-schemas.js.map +1 -0
- package/dist/lib/utils/typeGuards.d.ts +147 -0
- package/dist/lib/utils/typeGuards.d.ts.map +1 -0
- package/dist/lib/utils/typeGuards.js +240 -0
- package/dist/lib/utils/typeGuards.js.map +1 -0
- package/dist/lib/utils/union-errors.d.ts +20 -0
- package/dist/lib/utils/union-errors.d.ts.map +1 -0
- package/dist/lib/utils/union-errors.js +38 -0
- package/dist/lib/utils/union-errors.js.map +1 -0
- package/dist/lib/utils/validate-user-agent.d.ts +8 -0
- package/dist/lib/utils/validate-user-agent.d.ts.map +1 -0
- package/dist/lib/utils/validate-user-agent.js +15 -0
- package/dist/lib/utils/validate-user-agent.js.map +1 -0
- package/dist/lib/validation/client-hooks.d.ts +49 -0
- package/dist/lib/validation/client-hooks.d.ts.map +1 -0
- package/dist/lib/validation/client-hooks.js +82 -0
- package/dist/lib/validation/client-hooks.js.map +1 -0
- package/dist/lib/validation/index.d.ts +37 -0
- package/dist/lib/validation/index.d.ts.map +1 -0
- package/dist/lib/validation/index.js +202 -0
- package/dist/lib/validation/index.js.map +1 -0
- package/dist/lib/validation/schema-errors.d.ts +67 -0
- package/dist/lib/validation/schema-errors.d.ts.map +1 -0
- package/dist/lib/validation/schema-errors.js +75 -0
- package/dist/lib/validation/schema-errors.js.map +1 -0
- package/dist/lib/validation/schema-loader.d.ts +24 -0
- package/dist/lib/validation/schema-loader.d.ts.map +1 -0
- package/dist/lib/validation/schema-loader.js +315 -0
- package/dist/lib/validation/schema-loader.js.map +1 -0
- package/dist/lib/validation/schema-validator.d.ts +83 -0
- package/dist/lib/validation/schema-validator.d.ts.map +1 -0
- package/dist/lib/validation/schema-validator.js +142 -0
- package/dist/lib/validation/schema-validator.js.map +1 -0
- package/dist/lib/validation/sync-creatives.d.ts +327 -0
- package/dist/lib/validation/sync-creatives.d.ts.map +1 -0
- package/dist/lib/validation/sync-creatives.js +72 -0
- package/dist/lib/validation/sync-creatives.js.map +1 -0
- package/dist/lib/version.d.ts +63 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +85 -0
- package/dist/lib/version.js.map +1 -0
- package/docs/README.md +42 -0
- package/docs/guides/BUILD-AN-AGENT.md +632 -0
- package/docs/llms.txt +1197 -0
- package/examples/README.md +117 -0
- package/examples/adcp.config.json +30 -0
- package/examples/basic-a2a.ts +76 -0
- package/examples/basic-mcp.ts +50 -0
- package/examples/batch-preview-test.ts +266 -0
- package/examples/comply-controller-seller.ts +146 -0
- package/examples/conversation-client.ts +291 -0
- package/examples/debug-preview-response.ts +73 -0
- package/examples/debug-preview-with-logging.ts +50 -0
- package/examples/easy-config-demo.ts +242 -0
- package/examples/env-config.ts +51 -0
- package/examples/error-compliant-server.ts +241 -0
- package/examples/gcp-kms-signing-provider.ts +281 -0
- package/examples/generative-creative-demo.ts +196 -0
- package/examples/inspect-card-formats.ts +161 -0
- package/examples/logger-usage.ts +165 -0
- package/examples/oauth-cli-example.ts +154 -0
- package/examples/pr78-async-patterns-demo.ts +247 -0
- package/examples/seller-test-controller.ts +320 -0
- package/examples/signals-agent.ts +201 -0
- package/examples/simple-getting-started.ts +225 -0
- package/examples/simple-protocol-demo.ts +75 -0
- package/examples/test-helpers-demo.ts +239 -0
- package/examples/zod-validation-example.ts +126 -0
- package/package.json +313 -0
- package/skills/adcp/SKILL.md +326 -0
- package/skills/adcp-brand/SKILL.md +202 -0
- package/skills/adcp-brand.previous/SKILL.md +202 -0
- package/skills/adcp-creative/SKILL.md +301 -0
- package/skills/adcp-creative.previous/SKILL.md +301 -0
- package/skills/adcp-governance/SKILL.md +566 -0
- package/skills/adcp-governance.previous/SKILL.md +566 -0
- package/skills/adcp-media-buy/SKILL.md +446 -0
- package/skills/adcp-media-buy.previous/SKILL.md +446 -0
- package/skills/adcp-si/SKILL.md +206 -0
- package/skills/adcp-si.previous/SKILL.md +206 -0
- package/skills/adcp-signals/SKILL.md +204 -0
- package/skills/adcp-signals.previous/SKILL.md +204 -0
- package/skills/build-brand-rights-agent/SKILL.md +528 -0
- package/skills/build-creative-agent/SKILL.md +824 -0
- package/skills/build-generative-seller-agent/SKILL.md +579 -0
- package/skills/build-governance-agent/SKILL.md +966 -0
- package/skills/build-retail-media-agent/SKILL.md +488 -0
- package/skills/build-seller-agent/SKILL.md +1407 -0
- package/skills/build-seller-agent/deployment.md +407 -0
- package/skills/build-seller-agent/specialisms/audience-sync.md +63 -0
- package/skills/build-seller-agent/specialisms/sales-broadcast-tv.md +71 -0
- package/skills/build-seller-agent/specialisms/sales-guaranteed.md +67 -0
- package/skills/build-seller-agent/specialisms/sales-non-guaranteed.md +39 -0
- package/skills/build-seller-agent/specialisms/sales-proposal-mode.md +51 -0
- package/skills/build-seller-agent/specialisms/sales-social.md +30 -0
- package/skills/build-seller-agent/specialisms/signed-requests.md +89 -0
- package/skills/build-si-agent/SKILL.md +347 -0
- package/skills/build-signals-agent/SKILL.md +527 -0
- package/skills/call-adcp-agent/SKILL.md +255 -0
- package/skills/call-adcp-agent.previous/SKILL.md +255 -0
|
@@ -0,0 +1,1831 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Declarative AdCP server builder.
|
|
4
|
+
*
|
|
5
|
+
* `createAdcpServer` wires domain-grouped handler functions to Zod input
|
|
6
|
+
* schemas, response builders, and account resolution.
|
|
7
|
+
* Handlers only run when preconditions pass. `get_adcp_capabilities` is
|
|
8
|
+
* auto-generated from the tools you register.
|
|
9
|
+
*
|
|
10
|
+
* For governance on financial tools (create_media_buy, update_media_buy,
|
|
11
|
+
* activate_signal), use the composable `checkGovernance()` helper inside
|
|
12
|
+
* your handler — see `governance.ts`.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { createAdcpServer, serve } from '@adcp/sdk/server';
|
|
17
|
+
*
|
|
18
|
+
* serve(() => createAdcpServer({
|
|
19
|
+
* name: 'My Publisher',
|
|
20
|
+
* version: '1.0.0',
|
|
21
|
+
*
|
|
22
|
+
* // Second argument carries `toolName` and (when `authenticate` is wired
|
|
23
|
+
* // on `serve()`) the caller's `authInfo`. Adapters that front an
|
|
24
|
+
* // upstream platform API can use the caller's token here to resolve
|
|
25
|
+
* // the platform account in one pass.
|
|
26
|
+
* resolveAccount: async (ref, { authInfo }) => db.findAccount(ref, authInfo),
|
|
27
|
+
*
|
|
28
|
+
* mediaBuy: {
|
|
29
|
+
* getProducts: async (params, ctx) => ({ products: catalog.search(params) }),
|
|
30
|
+
* createMediaBuy: async (params, ctx) => ({
|
|
31
|
+
* media_buy_id: `mb_${Date.now()}`,
|
|
32
|
+
* packages: [],
|
|
33
|
+
* }),
|
|
34
|
+
* },
|
|
35
|
+
* }));
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ADCP_SIGNED_REQUESTS_STATE = exports.ADCP_PRE_TRANSPORT = void 0;
|
|
40
|
+
exports.requireSessionKey = requireSessionKey;
|
|
41
|
+
exports.createAdcpServer = createAdcpServer;
|
|
42
|
+
const zod_1 = require("zod");
|
|
43
|
+
const adcp_version_config_1 = require("../utils/adcp-version-config");
|
|
44
|
+
const adcp_server_1 = require("./adcp-server");
|
|
45
|
+
const tasks_1 = require("./tasks");
|
|
46
|
+
const errors_1 = require("./errors");
|
|
47
|
+
const envelope_allowlist_1 = require("./envelope-allowlist");
|
|
48
|
+
const state_store_1 = require("./state-store");
|
|
49
|
+
const responses_1 = require("./responses");
|
|
50
|
+
const tool_request_schemas_1 = require("../utils/tool-request-schemas");
|
|
51
|
+
// NOTE on `outputSchema`: the MCP SDK's client-side `callTool` validates
|
|
52
|
+
// `result.structuredContent` against the registered `outputSchema`
|
|
53
|
+
// whenever structuredContent is present — regardless of `isError`. See
|
|
54
|
+
// `node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js` line
|
|
55
|
+
// 504. AdCP's `adcpError()` envelope carries
|
|
56
|
+
// `structuredContent: { adcp_error: {...} }` with `isError: true`, which
|
|
57
|
+
// would fail every client-side outputSchema check (the error shape
|
|
58
|
+
// doesn't match the success schema). Until the SDK gates that client
|
|
59
|
+
// check on `!isError` too, we do not declare `outputSchema` on
|
|
60
|
+
// framework-registered tools — response drift is caught by the
|
|
61
|
+
// dispatcher's AJV validator (#727) instead, and custom tools opt in
|
|
62
|
+
// explicitly via `customTools[*].outputSchema`.
|
|
63
|
+
function hasIdempotencyClearAll(store) {
|
|
64
|
+
// `clearAll` is optional on `IdempotencyStore` — only present when the
|
|
65
|
+
// configured backend opts in (memory backend does; pg backend does not).
|
|
66
|
+
return typeof store.clearAll === 'function';
|
|
67
|
+
}
|
|
68
|
+
const idempotency_1 = require("../utils/idempotency");
|
|
69
|
+
const schema_validator_1 = require("../validation/schema-validator");
|
|
70
|
+
const schema_errors_1 = require("../validation/schema-errors");
|
|
71
|
+
const webhook_emitter_1 = require("./webhook-emitter");
|
|
72
|
+
const middleware_1 = require("../signing/middleware");
|
|
73
|
+
const test_controller_bridge_1 = require("./test-controller-bridge");
|
|
74
|
+
const version_1 = require("../version");
|
|
75
|
+
const capabilities_1 = require("../utils/capabilities");
|
|
76
|
+
const noopLogger = {
|
|
77
|
+
debug() { },
|
|
78
|
+
info() { },
|
|
79
|
+
warn() { },
|
|
80
|
+
error() { },
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Narrow `ctx.sessionKey` from `string | undefined` to `string`. Use this in
|
|
84
|
+
* handlers that require session scoping so you don't litter `!` assertions:
|
|
85
|
+
*
|
|
86
|
+
* ```ts
|
|
87
|
+
* const sessionKey = requireSessionKey(ctx);
|
|
88
|
+
* const sessionStore = scopedStore(ctx.store, sessionKey);
|
|
89
|
+
* ```
|
|
90
|
+
*
|
|
91
|
+
* Throws a `SERVICE_UNAVAILABLE`-style error if `sessionKey` is missing — typically
|
|
92
|
+
* meaning `resolveSessionKey` isn't configured or returned `undefined` for this tool.
|
|
93
|
+
*/
|
|
94
|
+
function requireSessionKey(ctx) {
|
|
95
|
+
if (ctx.sessionKey == null) {
|
|
96
|
+
throw new Error('ctx.sessionKey is undefined. Configure resolveSessionKey on createAdcpServer, or guard per-tool before calling requireSessionKey.');
|
|
97
|
+
}
|
|
98
|
+
return ctx.sessionKey;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Symbol under which `createAdcpServer` attaches the auto-wired `preTransport`
|
|
102
|
+
* function to the returned `McpServer`. `serve()` reads this symbol to mount
|
|
103
|
+
* the verifier. Consumers typically don't need to touch it; it's exported for
|
|
104
|
+
* tests and for downstream frameworks that want the same wiring.
|
|
105
|
+
*/
|
|
106
|
+
exports.ADCP_PRE_TRANSPORT = Symbol.for('@adcp/client.preTransport');
|
|
107
|
+
/**
|
|
108
|
+
* Symbol under which `createAdcpServer` attaches the `AdcpSignedRequestsState`
|
|
109
|
+
* snapshot. Use `server[ADCP_SIGNED_REQUESTS_STATE]` to inspect wiring from
|
|
110
|
+
* tests or boot diagnostics.
|
|
111
|
+
*/
|
|
112
|
+
exports.ADCP_SIGNED_REQUESTS_STATE = Symbol.for('@adcp/client.signedRequestsState');
|
|
113
|
+
/**
|
|
114
|
+
* Clamp idempotency replay TTL to spec bounds (1h–7d).
|
|
115
|
+
*/
|
|
116
|
+
function clampReplayTtl(seconds) {
|
|
117
|
+
const MIN = 3600;
|
|
118
|
+
const MAX = 604800;
|
|
119
|
+
if (!Number.isFinite(seconds) || seconds < MIN)
|
|
120
|
+
return MIN;
|
|
121
|
+
if (seconds > MAX)
|
|
122
|
+
return MAX;
|
|
123
|
+
return Math.floor(seconds);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Deep-merge the per-domain blocks from `overrides` onto `target`. Nested
|
|
127
|
+
* objects merge recursively; arrays and primitives replace. `null` at the
|
|
128
|
+
* top-level field explicitly drops the block; `undefined` is a no-op.
|
|
129
|
+
*/
|
|
130
|
+
function applyCapabilityOverrides(target, overrides) {
|
|
131
|
+
const targetAny = target;
|
|
132
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
133
|
+
if (value === undefined)
|
|
134
|
+
continue;
|
|
135
|
+
if (value === null) {
|
|
136
|
+
delete targetAny[key];
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
targetAny[key] = deepMergePlainObjects(targetAny[key], value);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function isPlainObject(v) {
|
|
143
|
+
if (v === null || typeof v !== 'object')
|
|
144
|
+
return false;
|
|
145
|
+
if (Array.isArray(v))
|
|
146
|
+
return false;
|
|
147
|
+
const proto = Object.getPrototypeOf(v);
|
|
148
|
+
return proto === Object.prototype || proto === null;
|
|
149
|
+
}
|
|
150
|
+
function deepMergePlainObjects(target, source) {
|
|
151
|
+
if (source === undefined)
|
|
152
|
+
return target;
|
|
153
|
+
if (source === null)
|
|
154
|
+
return null;
|
|
155
|
+
if (!isPlainObject(source))
|
|
156
|
+
return source;
|
|
157
|
+
if (!isPlainObject(target))
|
|
158
|
+
return { ...source };
|
|
159
|
+
const out = { ...target };
|
|
160
|
+
for (const [k, v] of Object.entries(source)) {
|
|
161
|
+
if (v === undefined)
|
|
162
|
+
continue;
|
|
163
|
+
if (v === null) {
|
|
164
|
+
delete out[k];
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
out[k] = deepMergePlainObjects(out[k], v);
|
|
168
|
+
}
|
|
169
|
+
return out;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Stamp `replayed: true` on the response envelope for replay paths only.
|
|
173
|
+
* `protocol-envelope.json` permits the field to be "omitted when the
|
|
174
|
+
* request was executed fresh" — fresh-path responses therefore carry no
|
|
175
|
+
* `replayed` field, and the field's presence implies `true`. Buyers read
|
|
176
|
+
* the field to distinguish cached replays from new executions for billing
|
|
177
|
+
* and audit.
|
|
178
|
+
*
|
|
179
|
+
* Mirrors the marker into both L3 `structuredContent` and the L2
|
|
180
|
+
* `content[0].text` JSON fallback so A2A/REST adapters that consume the
|
|
181
|
+
* text body see the same envelope MCP does — matching the lockstep
|
|
182
|
+
* pattern in `injectContextIntoResponse` / `sanitizeAdcpErrorEnvelope`.
|
|
183
|
+
*/
|
|
184
|
+
function stampReplayed(response) {
|
|
185
|
+
if (!response.structuredContent || typeof response.structuredContent !== 'object')
|
|
186
|
+
return;
|
|
187
|
+
const sc = response.structuredContent;
|
|
188
|
+
sc.replayed = true;
|
|
189
|
+
if (Array.isArray(response.content)) {
|
|
190
|
+
const first = response.content[0];
|
|
191
|
+
if (first && first.type === 'text' && typeof first.text === 'string') {
|
|
192
|
+
try {
|
|
193
|
+
const parsed = JSON.parse(first.text);
|
|
194
|
+
if (parsed && typeof parsed === 'object') {
|
|
195
|
+
parsed.replayed = true;
|
|
196
|
+
first.text = JSON.stringify(parsed);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// Text isn't JSON — leave it alone (implausible for AdCP responses).
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Remove per-request echo fields (`context`) from a formatted MCP response
|
|
207
|
+
* before caching. The buyer's `correlation_id` is scoped to the individual
|
|
208
|
+
* retry attempt and must not be baked into the cached envelope — replays
|
|
209
|
+
* need to echo back the CURRENT retry's context, not the first caller's.
|
|
210
|
+
* Other fields (media_buy_id, status, timestamps) are part of the pinned
|
|
211
|
+
* response and stay put.
|
|
212
|
+
*/
|
|
213
|
+
function stripEnvelopeEcho(response) {
|
|
214
|
+
const cloned = cloneFormattedResponse(response);
|
|
215
|
+
if (cloned.structuredContent && typeof cloned.structuredContent === 'object') {
|
|
216
|
+
const sc = cloned.structuredContent;
|
|
217
|
+
delete sc.context;
|
|
218
|
+
}
|
|
219
|
+
if (Array.isArray(cloned.content)) {
|
|
220
|
+
for (const item of cloned.content) {
|
|
221
|
+
if (item && item.type === 'text' && typeof item.text === 'string') {
|
|
222
|
+
try {
|
|
223
|
+
const parsed = JSON.parse(item.text);
|
|
224
|
+
if (parsed && typeof parsed === 'object') {
|
|
225
|
+
delete parsed.context;
|
|
226
|
+
item.text = JSON.stringify(parsed);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Text isn't JSON — leave it alone
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return cloned;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Shallow-clone a formatted MCP response so callers can mutate envelope
|
|
239
|
+
* fields (`replayed`, echo-back `context`) without stomping on the cache
|
|
240
|
+
* entry. The backend returns a fresh object (memory clones, pg
|
|
241
|
+
* serializes) but re-wrapping via `wrap()` can still alias pieces of the
|
|
242
|
+
* handler's return value — belt-and-suspenders against mutation leaks.
|
|
243
|
+
*/
|
|
244
|
+
function cloneFormattedResponse(response) {
|
|
245
|
+
const cloned = { ...response };
|
|
246
|
+
if (cloned.structuredContent && typeof cloned.structuredContent === 'object') {
|
|
247
|
+
cloned.structuredContent = { ...cloned.structuredContent };
|
|
248
|
+
}
|
|
249
|
+
if (Array.isArray(cloned.content)) {
|
|
250
|
+
cloned.content = cloned.content.map(item => ({ ...item }));
|
|
251
|
+
}
|
|
252
|
+
return cloned;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Detect whether a formatted MCP response represents a failure. Failures
|
|
256
|
+
* are NOT cached — a retry should re-execute rather than replay a
|
|
257
|
+
* transient error. Checks all three shapes the framework emits:
|
|
258
|
+
* `isError: true`, `structuredContent.adcp_error`, or envelope
|
|
259
|
+
* `status: 'failed'` (the envelope example in the spec for failed async
|
|
260
|
+
* tasks doesn't always include `adcp_error`).
|
|
261
|
+
*/
|
|
262
|
+
function isErrorResponse(response) {
|
|
263
|
+
if (response.isError === true)
|
|
264
|
+
return true;
|
|
265
|
+
const sc = response.structuredContent;
|
|
266
|
+
if (sc && typeof sc === 'object') {
|
|
267
|
+
if ('adcp_error' in sc)
|
|
268
|
+
return true;
|
|
269
|
+
const status = sc.status;
|
|
270
|
+
if (status === 'failed' || status === 'canceled' || status === 'rejected')
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
return false;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Detect a thrown `adcpError(...)` envelope. Handlers that `throw` an
|
|
277
|
+
* envelope (instead of `return`-ing it) would otherwise surface as
|
|
278
|
+
* `[object Object]` inside a SERVICE_UNAVAILABLE wrapper — the dispatcher
|
|
279
|
+
* unwraps and returns the envelope directly when the shape matches.
|
|
280
|
+
*/
|
|
281
|
+
function isThrownAdcpError(value) {
|
|
282
|
+
if (!value || typeof value !== 'object')
|
|
283
|
+
return false;
|
|
284
|
+
const sc = value.structuredContent;
|
|
285
|
+
if (!sc || typeof sc !== 'object')
|
|
286
|
+
return false;
|
|
287
|
+
const env = sc.adcp_error;
|
|
288
|
+
if (!env || typeof env !== 'object')
|
|
289
|
+
return false;
|
|
290
|
+
// `adcpError()` guarantees both `code` and `message` as strings — assert
|
|
291
|
+
// both so a malformed envelope throw doesn't produce a half-formed
|
|
292
|
+
// response. Also rules out MCP SDK `McpError` (numeric `code`) and any
|
|
293
|
+
// other thrown object with a coincidentally-shaped sub-tree.
|
|
294
|
+
if (typeof env.code !== 'string')
|
|
295
|
+
return false;
|
|
296
|
+
if (typeof env.message !== 'string')
|
|
297
|
+
return false;
|
|
298
|
+
return Array.isArray(value.content) && value.isError === true;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Resolve the extra scope segment for tools with per-session semantics.
|
|
302
|
+
*
|
|
303
|
+
* For `si_send_message`, the request `session_id` enters the scope so
|
|
304
|
+
* the same idempotency_key used across two sessions doesn't false-replay
|
|
305
|
+
* (or false-conflict) across them. Other tools return `undefined` and
|
|
306
|
+
* use the default `(principal, key)` scope.
|
|
307
|
+
*/
|
|
308
|
+
function resolveExtraScope(toolName, params) {
|
|
309
|
+
if (toolName === 'si_send_message') {
|
|
310
|
+
const sessionId = params.session_id;
|
|
311
|
+
return typeof sessionId === 'string' && sessionId.length > 0 ? sessionId : undefined;
|
|
312
|
+
}
|
|
313
|
+
return undefined;
|
|
314
|
+
}
|
|
315
|
+
function genericResponse(toolName, data, summary) {
|
|
316
|
+
return {
|
|
317
|
+
content: [{ type: 'text', text: summary ?? `${toolName} completed` }],
|
|
318
|
+
structuredContent: (0, responses_1.toStructuredContent)(data),
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
function wrapBuildCreative(data, summary) {
|
|
322
|
+
if ('creative_manifests' in data) {
|
|
323
|
+
return (0, responses_1.buildCreativeMultiResponse)(data, summary);
|
|
324
|
+
}
|
|
325
|
+
return (0, responses_1.buildCreativeResponse)(data, summary);
|
|
326
|
+
}
|
|
327
|
+
// Shorthand annotation constants
|
|
328
|
+
const RO = { readOnlyHint: true };
|
|
329
|
+
const MUT = { readOnlyHint: false, destructiveHint: false };
|
|
330
|
+
const DEST = { readOnlyHint: false, destructiveHint: true };
|
|
331
|
+
const IDEMP = { readOnlyHint: false, idempotentHint: true };
|
|
332
|
+
// Passthrough schema for every framework-registered tool (#909). See
|
|
333
|
+
// the comment at the registerTool call sites for rationale — short
|
|
334
|
+
// version: makes our AJV validator authoritative on both transports
|
|
335
|
+
// without destroying args on MCP when the SDK's tool dispatcher would
|
|
336
|
+
// otherwise coerce `undefined` into the handler for schemaless tools.
|
|
337
|
+
// This also keeps `tools/list` payloads small for LLM consumers (full
|
|
338
|
+
// schemas live in `docs/llms.txt`, SKILL.md files, and `schemas/cache/`).
|
|
339
|
+
const PASSTHROUGH_INPUT_SCHEMA = zod_1.z.object({}).passthrough();
|
|
340
|
+
const TOOL_META = {
|
|
341
|
+
// Media Buy
|
|
342
|
+
get_products: { wrap: responses_1.productsResponse, annotations: RO },
|
|
343
|
+
create_media_buy: { wrap: responses_1.mediaBuyResponse, annotations: MUT },
|
|
344
|
+
update_media_buy: { wrap: responses_1.updateMediaBuyResponse, annotations: MUT },
|
|
345
|
+
get_media_buys: { wrap: responses_1.getMediaBuysResponse, annotations: RO },
|
|
346
|
+
get_media_buy_delivery: { wrap: responses_1.deliveryResponse, annotations: RO },
|
|
347
|
+
provide_performance_feedback: { wrap: responses_1.performanceFeedbackResponse, annotations: MUT },
|
|
348
|
+
// Creative
|
|
349
|
+
list_creative_formats: { wrap: responses_1.listCreativeFormatsResponse, annotations: RO },
|
|
350
|
+
build_creative: { wrap: wrapBuildCreative, annotations: MUT },
|
|
351
|
+
preview_creative: { wrap: null, annotations: RO },
|
|
352
|
+
get_creative_delivery: { wrap: responses_1.creativeDeliveryResponse, annotations: RO },
|
|
353
|
+
list_creatives: { wrap: responses_1.listCreativesResponse, annotations: RO },
|
|
354
|
+
sync_creatives: { wrap: responses_1.syncCreativesResponse, annotations: IDEMP },
|
|
355
|
+
// Signals
|
|
356
|
+
get_signals: { wrap: responses_1.getSignalsResponse, annotations: RO },
|
|
357
|
+
activate_signal: { wrap: responses_1.activateSignalResponse, annotations: MUT },
|
|
358
|
+
// Accounts
|
|
359
|
+
list_accounts: { wrap: responses_1.listAccountsResponse, annotations: RO },
|
|
360
|
+
sync_accounts: { wrap: responses_1.syncAccountsResponse, annotations: IDEMP },
|
|
361
|
+
sync_governance: { wrap: responses_1.syncGovernanceResponse, annotations: IDEMP },
|
|
362
|
+
get_account_financials: { wrap: null, annotations: RO },
|
|
363
|
+
report_usage: { wrap: responses_1.reportUsageResponse, annotations: MUT },
|
|
364
|
+
// Event Tracking
|
|
365
|
+
sync_event_sources: { wrap: null, annotations: IDEMP },
|
|
366
|
+
log_event: { wrap: null, annotations: MUT },
|
|
367
|
+
// Audiences & Catalogs
|
|
368
|
+
sync_audiences: { wrap: null, annotations: IDEMP },
|
|
369
|
+
sync_catalogs: { wrap: null, annotations: IDEMP },
|
|
370
|
+
// Governance - Property Lists
|
|
371
|
+
create_property_list: { wrap: null, annotations: MUT },
|
|
372
|
+
update_property_list: { wrap: null, annotations: MUT },
|
|
373
|
+
get_property_list: { wrap: null, annotations: RO },
|
|
374
|
+
list_property_lists: { wrap: null, annotations: RO },
|
|
375
|
+
delete_property_list: { wrap: null, annotations: DEST },
|
|
376
|
+
// Governance - Content Standards
|
|
377
|
+
list_content_standards: { wrap: null, annotations: RO },
|
|
378
|
+
get_content_standards: { wrap: null, annotations: RO },
|
|
379
|
+
create_content_standards: { wrap: null, annotations: MUT },
|
|
380
|
+
update_content_standards: { wrap: null, annotations: MUT },
|
|
381
|
+
calibrate_content: { wrap: null, annotations: MUT },
|
|
382
|
+
validate_content_delivery: { wrap: null, annotations: RO },
|
|
383
|
+
get_media_buy_artifacts: { wrap: null, annotations: RO },
|
|
384
|
+
// Governance - Campaign
|
|
385
|
+
get_creative_features: { wrap: null, annotations: RO },
|
|
386
|
+
sync_plans: { wrap: null, annotations: IDEMP },
|
|
387
|
+
check_governance: { wrap: null, annotations: RO },
|
|
388
|
+
report_plan_outcome: { wrap: null, annotations: MUT },
|
|
389
|
+
get_plan_audit_logs: { wrap: null, annotations: RO },
|
|
390
|
+
// Sponsored Intelligence
|
|
391
|
+
si_get_offering: { wrap: null, annotations: RO },
|
|
392
|
+
si_initiate_session: { wrap: null, annotations: MUT },
|
|
393
|
+
si_send_message: { wrap: null, annotations: MUT },
|
|
394
|
+
si_terminate_session: { wrap: null, annotations: DEST },
|
|
395
|
+
// Brand Rights
|
|
396
|
+
get_brand_identity: { wrap: null, annotations: RO },
|
|
397
|
+
get_rights: { wrap: null, annotations: RO },
|
|
398
|
+
acquire_rights: { wrap: responses_1.acquireRightsResponse, annotations: MUT },
|
|
399
|
+
};
|
|
400
|
+
const MEDIA_BUY_ENTRIES = [
|
|
401
|
+
{ handlerKey: 'getProducts', toolName: 'get_products' },
|
|
402
|
+
{ handlerKey: 'createMediaBuy', toolName: 'create_media_buy' },
|
|
403
|
+
{ handlerKey: 'updateMediaBuy', toolName: 'update_media_buy' },
|
|
404
|
+
{ handlerKey: 'getMediaBuys', toolName: 'get_media_buys' },
|
|
405
|
+
{ handlerKey: 'getMediaBuyDelivery', toolName: 'get_media_buy_delivery' },
|
|
406
|
+
{ handlerKey: 'providePerformanceFeedback', toolName: 'provide_performance_feedback' },
|
|
407
|
+
{ handlerKey: 'listCreativeFormats', toolName: 'list_creative_formats' },
|
|
408
|
+
{ handlerKey: 'syncCreatives', toolName: 'sync_creatives' },
|
|
409
|
+
{ handlerKey: 'listCreatives', toolName: 'list_creatives' },
|
|
410
|
+
];
|
|
411
|
+
const EVENT_TRACKING_ENTRIES = [
|
|
412
|
+
{ handlerKey: 'syncEventSources', toolName: 'sync_event_sources' },
|
|
413
|
+
{ handlerKey: 'logEvent', toolName: 'log_event' },
|
|
414
|
+
{ handlerKey: 'syncAudiences', toolName: 'sync_audiences' },
|
|
415
|
+
{ handlerKey: 'syncCatalogs', toolName: 'sync_catalogs' },
|
|
416
|
+
];
|
|
417
|
+
const SIGNALS_ENTRIES = [
|
|
418
|
+
{ handlerKey: 'getSignals', toolName: 'get_signals' },
|
|
419
|
+
{ handlerKey: 'activateSignal', toolName: 'activate_signal' },
|
|
420
|
+
];
|
|
421
|
+
const CREATIVE_ENTRIES = [
|
|
422
|
+
{ handlerKey: 'listCreativeFormats', toolName: 'list_creative_formats' },
|
|
423
|
+
{ handlerKey: 'buildCreative', toolName: 'build_creative' },
|
|
424
|
+
{ handlerKey: 'previewCreative', toolName: 'preview_creative' },
|
|
425
|
+
{ handlerKey: 'listCreatives', toolName: 'list_creatives' },
|
|
426
|
+
{ handlerKey: 'syncCreatives', toolName: 'sync_creatives' },
|
|
427
|
+
{ handlerKey: 'getCreativeDelivery', toolName: 'get_creative_delivery' },
|
|
428
|
+
];
|
|
429
|
+
const GOVERNANCE_ENTRIES = [
|
|
430
|
+
{ handlerKey: 'createPropertyList', toolName: 'create_property_list' },
|
|
431
|
+
{ handlerKey: 'updatePropertyList', toolName: 'update_property_list' },
|
|
432
|
+
{ handlerKey: 'getPropertyList', toolName: 'get_property_list' },
|
|
433
|
+
{ handlerKey: 'listPropertyLists', toolName: 'list_property_lists' },
|
|
434
|
+
{ handlerKey: 'deletePropertyList', toolName: 'delete_property_list' },
|
|
435
|
+
{ handlerKey: 'listContentStandards', toolName: 'list_content_standards' },
|
|
436
|
+
{ handlerKey: 'getContentStandards', toolName: 'get_content_standards' },
|
|
437
|
+
{ handlerKey: 'createContentStandards', toolName: 'create_content_standards' },
|
|
438
|
+
{ handlerKey: 'updateContentStandards', toolName: 'update_content_standards' },
|
|
439
|
+
{ handlerKey: 'calibrateContent', toolName: 'calibrate_content' },
|
|
440
|
+
{ handlerKey: 'validateContentDelivery', toolName: 'validate_content_delivery' },
|
|
441
|
+
{ handlerKey: 'getMediaBuyArtifacts', toolName: 'get_media_buy_artifacts' },
|
|
442
|
+
{ handlerKey: 'getCreativeFeatures', toolName: 'get_creative_features' },
|
|
443
|
+
{ handlerKey: 'syncPlans', toolName: 'sync_plans' },
|
|
444
|
+
{ handlerKey: 'checkGovernance', toolName: 'check_governance' },
|
|
445
|
+
{ handlerKey: 'reportPlanOutcome', toolName: 'report_plan_outcome' },
|
|
446
|
+
{ handlerKey: 'getPlanAuditLogs', toolName: 'get_plan_audit_logs' },
|
|
447
|
+
];
|
|
448
|
+
const ACCOUNT_ENTRIES = [
|
|
449
|
+
{ handlerKey: 'listAccounts', toolName: 'list_accounts' },
|
|
450
|
+
{ handlerKey: 'syncAccounts', toolName: 'sync_accounts' },
|
|
451
|
+
{ handlerKey: 'syncGovernance', toolName: 'sync_governance' },
|
|
452
|
+
{ handlerKey: 'getAccountFinancials', toolName: 'get_account_financials' },
|
|
453
|
+
{ handlerKey: 'reportUsage', toolName: 'report_usage' },
|
|
454
|
+
];
|
|
455
|
+
const SI_ENTRIES = [
|
|
456
|
+
{ handlerKey: 'getOffering', toolName: 'si_get_offering' },
|
|
457
|
+
{ handlerKey: 'initiateSession', toolName: 'si_initiate_session' },
|
|
458
|
+
{ handlerKey: 'sendMessage', toolName: 'si_send_message' },
|
|
459
|
+
{ handlerKey: 'terminateSession', toolName: 'si_terminate_session' },
|
|
460
|
+
];
|
|
461
|
+
const BRAND_RIGHTS_ENTRIES = [
|
|
462
|
+
{ handlerKey: 'getBrandIdentity', toolName: 'get_brand_identity' },
|
|
463
|
+
{ handlerKey: 'getRights', toolName: 'get_rights' },
|
|
464
|
+
{ handlerKey: 'acquireRights', toolName: 'acquire_rights' },
|
|
465
|
+
];
|
|
466
|
+
// ---------------------------------------------------------------------------
|
|
467
|
+
// Protocol detection
|
|
468
|
+
// ---------------------------------------------------------------------------
|
|
469
|
+
const TOOL_PROTOCOL_MAP = [
|
|
470
|
+
[capabilities_1.MEDIA_BUY_TOOLS, 'media_buy'],
|
|
471
|
+
[capabilities_1.SIGNALS_TOOLS, 'signals'],
|
|
472
|
+
[capabilities_1.GOVERNANCE_TOOLS, 'governance'],
|
|
473
|
+
[capabilities_1.CREATIVE_TOOLS, 'creative'],
|
|
474
|
+
[capabilities_1.SPONSORED_INTELLIGENCE_TOOLS, 'sponsored_intelligence'],
|
|
475
|
+
[capabilities_1.BRAND_RIGHTS_TOOLS, 'brand'],
|
|
476
|
+
];
|
|
477
|
+
function detectProtocols(toolNames) {
|
|
478
|
+
const nameSet = new Set(toolNames);
|
|
479
|
+
const protocols = [];
|
|
480
|
+
for (const [tools, protocol] of TOOL_PROTOCOL_MAP) {
|
|
481
|
+
if (tools.some(t => nameSet.has(t))) {
|
|
482
|
+
protocols.push(protocol);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
return protocols;
|
|
486
|
+
}
|
|
487
|
+
// ---------------------------------------------------------------------------
|
|
488
|
+
// Tool coherence warnings
|
|
489
|
+
// ---------------------------------------------------------------------------
|
|
490
|
+
const COHERENCE_RULES = [
|
|
491
|
+
[
|
|
492
|
+
'create_media_buy',
|
|
493
|
+
'get_products',
|
|
494
|
+
'create_media_buy without get_products — buyers cannot discover products before purchasing',
|
|
495
|
+
],
|
|
496
|
+
[
|
|
497
|
+
'update_media_buy',
|
|
498
|
+
'get_media_buys',
|
|
499
|
+
'update_media_buy without get_media_buys — buyers cannot look up what to modify',
|
|
500
|
+
],
|
|
501
|
+
[
|
|
502
|
+
'activate_signal',
|
|
503
|
+
'get_signals',
|
|
504
|
+
'activate_signal without get_signals — buyers cannot discover signals before activating',
|
|
505
|
+
],
|
|
506
|
+
[
|
|
507
|
+
'sync_creatives',
|
|
508
|
+
'list_creative_formats',
|
|
509
|
+
'sync_creatives without list_creative_formats — buyers cannot discover valid formats',
|
|
510
|
+
],
|
|
511
|
+
];
|
|
512
|
+
function checkCoherence(toolNames, logger) {
|
|
513
|
+
for (const [tool, requires, message] of COHERENCE_RULES) {
|
|
514
|
+
if (toolNames.has(tool) && !toolNames.has(requires)) {
|
|
515
|
+
logger.warn(message);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// ---------------------------------------------------------------------------
|
|
520
|
+
// Response detection
|
|
521
|
+
// ---------------------------------------------------------------------------
|
|
522
|
+
function isFormattedResponse(value) {
|
|
523
|
+
if (value == null || typeof value !== 'object')
|
|
524
|
+
return false;
|
|
525
|
+
const obj = value;
|
|
526
|
+
return Array.isArray(obj.content) && 'structuredContent' in obj;
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Detect an AdCP Submitted envelope (async task acknowledgement).
|
|
530
|
+
*
|
|
531
|
+
* Every *Submitted arm in the generated types has `status: 'submitted'`
|
|
532
|
+
* plus a required `task_id: string`. The discriminant is stable enough
|
|
533
|
+
* to use for routing at dispatch time without per-tool knowledge.
|
|
534
|
+
*/
|
|
535
|
+
function isSubmittedEnvelope(value) {
|
|
536
|
+
if (value == null || typeof value !== 'object')
|
|
537
|
+
return false;
|
|
538
|
+
const obj = value;
|
|
539
|
+
return obj.status === 'submitted' && typeof obj.task_id === 'string';
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Detect an AdCP *Error arm (union member, not the framework `adcp_error`
|
|
543
|
+
* envelope). Every *Error interface in the generated types carries a
|
|
544
|
+
* required `errors: Error[]` and a narrow set of allowed siblings
|
|
545
|
+
* (`context`, `ext`, plus a couple of tool-specific extras). Success
|
|
546
|
+
* arms may have optional advisory fields but never a required `errors`
|
|
547
|
+
* array — the `status === 'submitted'` exclusion keeps us from
|
|
548
|
+
* confusing a Submitted envelope that advisory-echoes errors as an
|
|
549
|
+
* Error arm. The set of allowed sibling keys is intentionally narrow:
|
|
550
|
+
* any other top-level key means the payload carries Success-only fields
|
|
551
|
+
* (`media_buy_id`, `creatives`, `signal_id`, ...) and should fall
|
|
552
|
+
* through to the response builder.
|
|
553
|
+
*/
|
|
554
|
+
const ERROR_ARM_ALLOWED_KEYS = new Set(['errors', 'context', 'ext', 'success', 'conflicting_standards_id']);
|
|
555
|
+
function isErrorArm(value) {
|
|
556
|
+
if (value == null || typeof value !== 'object')
|
|
557
|
+
return false;
|
|
558
|
+
const obj = value;
|
|
559
|
+
if (!Array.isArray(obj.errors))
|
|
560
|
+
return false;
|
|
561
|
+
if ('status' in obj)
|
|
562
|
+
return false;
|
|
563
|
+
for (const key of Object.keys(obj)) {
|
|
564
|
+
if (!ERROR_ARM_ALLOWED_KEYS.has(key))
|
|
565
|
+
return false;
|
|
566
|
+
}
|
|
567
|
+
return true;
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Wrap a Submitted envelope returned directly by a handler. Skips the
|
|
571
|
+
* Success-builder defaults (`revision`, `confirmed_at`, `valid_actions`)
|
|
572
|
+
* — those fields are specific to `CreateMediaBuySuccess` and would
|
|
573
|
+
* corrupt the async-task shape if applied.
|
|
574
|
+
*/
|
|
575
|
+
function wrapSubmittedEnvelope(value) {
|
|
576
|
+
const summary = value.message ?? `Task ${value.task_id} submitted`;
|
|
577
|
+
return {
|
|
578
|
+
content: [{ type: 'text', text: summary }],
|
|
579
|
+
structuredContent: value,
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Wrap an *Error arm returned directly by a handler. Preserves the
|
|
584
|
+
* generated-type shape (`errors: Error[]`) on `structuredContent` so
|
|
585
|
+
* buyers reading the typed response union see the exact branch the
|
|
586
|
+
* spec defines; also sets `isError: true` so the MCP-level signal
|
|
587
|
+
* matches `adcp_error` envelopes, which keeps `isErrorResponse()` and
|
|
588
|
+
* `response-validation: strict` consistent across both error paths.
|
|
589
|
+
*/
|
|
590
|
+
function wrapErrorArm(value) {
|
|
591
|
+
const firstError = value.errors[0];
|
|
592
|
+
const summary = firstError && typeof firstError === 'object'
|
|
593
|
+
? `${typeof firstError.code === 'string' ? firstError.code : 'ERROR'}: ${typeof firstError.message === 'string' ? firstError.message : 'operation failed'}`
|
|
594
|
+
: 'operation failed';
|
|
595
|
+
return {
|
|
596
|
+
content: [{ type: 'text', text: summary }],
|
|
597
|
+
isError: true,
|
|
598
|
+
structuredContent: value,
|
|
599
|
+
};
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Defence-in-depth sanitizer for handler-returned error envelopes.
|
|
603
|
+
*
|
|
604
|
+
* `adcpError()` filters its own output against `ADCP_ERROR_FIELD_ALLOWLIST`,
|
|
605
|
+
* but a handler that hand-rolls `{ isError: true, structuredContent: {
|
|
606
|
+
* adcp_error: {...} } }` (or constructs the envelope through a different
|
|
607
|
+
* builder) bypasses that sanitizer. The storyboard invariant
|
|
608
|
+
* `idempotency.conflict_no_payload_leak` catches this at conformance-test
|
|
609
|
+
* time, but production traffic would be unprotected — so we re-apply the
|
|
610
|
+
* allowlist here too. Silent no-op when the code has no registered entry,
|
|
611
|
+
* or when `structuredContent.adcp_error` is missing its `code` field.
|
|
612
|
+
*
|
|
613
|
+
* Keeps L2 (`content[0].text`) and L3 (`structuredContent`) in lockstep —
|
|
614
|
+
* both transport layers get the same filtered payload.
|
|
615
|
+
*/
|
|
616
|
+
function sanitizeAdcpErrorEnvelope(response) {
|
|
617
|
+
const sc = response.structuredContent;
|
|
618
|
+
if (!sc || typeof sc !== 'object')
|
|
619
|
+
return;
|
|
620
|
+
const err = sc.adcp_error;
|
|
621
|
+
if (!err || typeof err !== 'object')
|
|
622
|
+
return;
|
|
623
|
+
const code = err.code;
|
|
624
|
+
if (typeof code !== 'string')
|
|
625
|
+
return;
|
|
626
|
+
const allow = envelope_allowlist_1.ADCP_ERROR_FIELD_ALLOWLIST[code];
|
|
627
|
+
if (!allow)
|
|
628
|
+
return;
|
|
629
|
+
const filtered = {};
|
|
630
|
+
let droppedAny = false;
|
|
631
|
+
for (const [k, v] of Object.entries(err)) {
|
|
632
|
+
if (allow.has(k)) {
|
|
633
|
+
filtered[k] = v;
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
droppedAny = true;
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
if (!droppedAny)
|
|
640
|
+
return;
|
|
641
|
+
sc.adcp_error = filtered;
|
|
642
|
+
if (Array.isArray(response.content)) {
|
|
643
|
+
const first = response.content[0];
|
|
644
|
+
if (first && first.type === 'text' && typeof first.text === 'string') {
|
|
645
|
+
try {
|
|
646
|
+
const parsed = JSON.parse(first.text);
|
|
647
|
+
if (parsed && typeof parsed === 'object') {
|
|
648
|
+
parsed.adcp_error = filtered;
|
|
649
|
+
first.text = JSON.stringify(parsed);
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
catch {
|
|
653
|
+
// Text isn't JSON — leave it alone. adcpError()-emitted envelopes
|
|
654
|
+
// always serialize to JSON, so the only hit here would be a seller
|
|
655
|
+
// who hand-rolled a non-JSON content[0] (implausible for AdCP).
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
// Echo the request context into a formatted MCP tool response so buyers can
|
|
661
|
+
// trace correlation_id across both success and error responses. Only plain
|
|
662
|
+
// objects are echoed: `si_get_offering` and `si_initiate_session` override
|
|
663
|
+
// the request schema's `context` to a domain-specific string, while the
|
|
664
|
+
// response schema still requires the protocol echo object — copying a
|
|
665
|
+
// string there would fail response validation.
|
|
666
|
+
function injectContextIntoResponse(response, context) {
|
|
667
|
+
if (context === null || typeof context !== 'object' || Array.isArray(context))
|
|
668
|
+
return;
|
|
669
|
+
const sc = response.structuredContent;
|
|
670
|
+
if (sc && typeof sc === 'object' && !('context' in sc)) {
|
|
671
|
+
sc.context = context;
|
|
672
|
+
// Keep the L2 text fallback (JSON body) in sync with structuredContent
|
|
673
|
+
if (Array.isArray(response.content)) {
|
|
674
|
+
const first = response.content[0];
|
|
675
|
+
if (first && first.type === 'text' && typeof first.text === 'string') {
|
|
676
|
+
try {
|
|
677
|
+
const parsed = JSON.parse(first.text);
|
|
678
|
+
if (parsed && typeof parsed === 'object' && !('context' in parsed)) {
|
|
679
|
+
parsed.context = context;
|
|
680
|
+
first.text = JSON.stringify(parsed);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
catch {
|
|
684
|
+
// Text isn't JSON — leave it alone
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
// ---------------------------------------------------------------------------
|
|
691
|
+
// Signed-requests preTransport builder
|
|
692
|
+
// ---------------------------------------------------------------------------
|
|
693
|
+
/**
|
|
694
|
+
* Build a `preTransport` middleware that runs `createExpressVerifier` against
|
|
695
|
+
* the incoming Node request/response. The returned function matches the shape
|
|
696
|
+
* `serve({ preTransport })` expects: it resolves to `true` when the verifier
|
|
697
|
+
* has already written a 401 (headers sent), `false` otherwise.
|
|
698
|
+
*
|
|
699
|
+
* `serve()` buffers the request body into `req.rawBody` before invoking the
|
|
700
|
+
* preTransport hook, so the verifier sees the exact bytes the signer hashed
|
|
701
|
+
* for Content-Digest. For MCP the operation name comes from the JSON-RPC
|
|
702
|
+
* `params.name`; the resolver below falls back to `undefined` for non-JSON or
|
|
703
|
+
* non-`tools/call` bodies, which makes the verifier treat them as not-in-
|
|
704
|
+
* `required_for` rather than rejecting (discovery probes, health checks).
|
|
705
|
+
*/
|
|
706
|
+
function buildSignedRequestsPreTransport(signedRequests, capabilityRequiredFor) {
|
|
707
|
+
// Precedence: explicit signedRequests.required_for > capabilities.request_signing.required_for
|
|
708
|
+
// > fallback to every mutating task. Buyers read required_for from
|
|
709
|
+
// get_adcp_capabilities to decide which calls to sign — defaulting to
|
|
710
|
+
// MUTATING_TASKS when the seller advertised a narrower list would cause
|
|
711
|
+
// buyers to get request_signature_required on tools they had no contractual
|
|
712
|
+
// duty to sign.
|
|
713
|
+
const requiredFor = signedRequests.required_for ?? capabilityRequiredFor ?? [...idempotency_1.MUTATING_TASKS];
|
|
714
|
+
const verifier = (0, middleware_1.createExpressVerifier)({
|
|
715
|
+
capability: {
|
|
716
|
+
supported: true,
|
|
717
|
+
covers_content_digest: signedRequests.covers_content_digest ?? 'either',
|
|
718
|
+
required_for: requiredFor,
|
|
719
|
+
},
|
|
720
|
+
jwks: signedRequests.jwks,
|
|
721
|
+
replayStore: signedRequests.replayStore,
|
|
722
|
+
revocationStore: signedRequests.revocationStore,
|
|
723
|
+
...(signedRequests.agentUrlForKeyid ? { agentUrlForKeyid: signedRequests.agentUrlForKeyid } : {}),
|
|
724
|
+
resolveOperation: req => {
|
|
725
|
+
const raw = req.rawBody;
|
|
726
|
+
if (!raw)
|
|
727
|
+
return undefined;
|
|
728
|
+
try {
|
|
729
|
+
const parsed = JSON.parse(raw);
|
|
730
|
+
if (parsed.method === 'tools/call' && typeof parsed.params?.name === 'string') {
|
|
731
|
+
return parsed.params.name;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
catch {
|
|
735
|
+
// Non-JSON or malformed body — let transport handle rejection.
|
|
736
|
+
}
|
|
737
|
+
return undefined;
|
|
738
|
+
},
|
|
739
|
+
});
|
|
740
|
+
return async function adcpPreTransport(req, res) {
|
|
741
|
+
const reqShim = {
|
|
742
|
+
method: req.method ?? 'POST',
|
|
743
|
+
url: req.url ?? '/mcp',
|
|
744
|
+
originalUrl: req.url ?? '/mcp',
|
|
745
|
+
headers: req.headers,
|
|
746
|
+
rawBody: req.rawBody ?? '',
|
|
747
|
+
protocol: 'http',
|
|
748
|
+
get(name) {
|
|
749
|
+
const v = req.headers[name.toLowerCase()];
|
|
750
|
+
return Array.isArray(v) ? v.join(', ') : v;
|
|
751
|
+
},
|
|
752
|
+
};
|
|
753
|
+
const resShim = {
|
|
754
|
+
status(code) {
|
|
755
|
+
res.statusCode = code;
|
|
756
|
+
return {
|
|
757
|
+
set(k, v) {
|
|
758
|
+
res.setHeader(k, v);
|
|
759
|
+
return {
|
|
760
|
+
json(body) {
|
|
761
|
+
res.setHeader('Content-Type', 'application/json');
|
|
762
|
+
res.end(JSON.stringify(body));
|
|
763
|
+
},
|
|
764
|
+
};
|
|
765
|
+
},
|
|
766
|
+
};
|
|
767
|
+
},
|
|
768
|
+
};
|
|
769
|
+
let handled = false;
|
|
770
|
+
let verifierCompleted = false;
|
|
771
|
+
// The verifier calls `next(err?)` in the success / error path, but the
|
|
772
|
+
// 401 RequestSignatureError path writes the response and returns WITHOUT
|
|
773
|
+
// calling next. Race the next-callback against the response's 'finish' /
|
|
774
|
+
// 'close' events so a terminal 401 resolves the promise; otherwise the
|
|
775
|
+
// wrapper hangs forever and the agent server leaks (one McpServer per
|
|
776
|
+
// unsigned request under attack).
|
|
777
|
+
//
|
|
778
|
+
// Security: if 'close' fires before the verifier completes (client
|
|
779
|
+
// aborted the TCP connection mid-JWKS-fetch), we MUST NOT fall through
|
|
780
|
+
// to the MCP transport — doing so would execute the tool handler
|
|
781
|
+
// without a verified signature on an attacker-dropped connection. Mark
|
|
782
|
+
// handled=true so serve.ts skips dispatch.
|
|
783
|
+
await new Promise(resolve => {
|
|
784
|
+
let resolved = false;
|
|
785
|
+
const done = () => {
|
|
786
|
+
if (resolved)
|
|
787
|
+
return;
|
|
788
|
+
resolved = true;
|
|
789
|
+
resolve();
|
|
790
|
+
};
|
|
791
|
+
res.once('finish', () => {
|
|
792
|
+
if (res.writableEnded)
|
|
793
|
+
handled = true;
|
|
794
|
+
done();
|
|
795
|
+
});
|
|
796
|
+
res.once('close', () => {
|
|
797
|
+
if (!verifierCompleted)
|
|
798
|
+
handled = true;
|
|
799
|
+
done();
|
|
800
|
+
});
|
|
801
|
+
verifier(reqShim, resShim, err => {
|
|
802
|
+
verifierCompleted = true;
|
|
803
|
+
if (err) {
|
|
804
|
+
// Log internally; a leaked stack trace to the caller would
|
|
805
|
+
// enumerate the verifier pipeline (js/stack-trace-exposure).
|
|
806
|
+
// Narrow to name+code only — full error stringification can embed
|
|
807
|
+
// JWKS URLs from transport failures, which leaks counterparty
|
|
808
|
+
// key-discovery topology on shared log aggregators.
|
|
809
|
+
const errName = err.name || 'Error';
|
|
810
|
+
const errCode = err.code ?? 'unknown';
|
|
811
|
+
console.error(`[adcp/signed-requests] verifier middleware error: ${errName} (${errCode})`);
|
|
812
|
+
if (!res.writableEnded) {
|
|
813
|
+
res.statusCode = 500;
|
|
814
|
+
res.setHeader('Content-Type', 'application/json');
|
|
815
|
+
res.end(JSON.stringify({ error: 'verifier_error' }));
|
|
816
|
+
}
|
|
817
|
+
handled = true;
|
|
818
|
+
}
|
|
819
|
+
if (res.writableEnded)
|
|
820
|
+
handled = true;
|
|
821
|
+
done();
|
|
822
|
+
});
|
|
823
|
+
});
|
|
824
|
+
return handled;
|
|
825
|
+
};
|
|
826
|
+
}
|
|
827
|
+
// ---------------------------------------------------------------------------
|
|
828
|
+
// createAdcpServer
|
|
829
|
+
// ---------------------------------------------------------------------------
|
|
830
|
+
/**
|
|
831
|
+
* Create an AdCP-compliant MCP server from domain-grouped handler functions.
|
|
832
|
+
*
|
|
833
|
+
* Before each handler runs, the framework:
|
|
834
|
+
* 1. Validates the request against the tool's Zod schema (MCP SDK)
|
|
835
|
+
* 2. Resolves the account (if the tool has an `account` field and `resolveAccount` is configured)
|
|
836
|
+
*
|
|
837
|
+
* The handler only runs when all preconditions pass. It receives the validated
|
|
838
|
+
* params and a context with the resolved account and state store.
|
|
839
|
+
*
|
|
840
|
+
* `get_adcp_capabilities` is auto-generated from registered tools.
|
|
841
|
+
*/
|
|
842
|
+
function createAdcpServer(config) {
|
|
843
|
+
const { name, version, adcpVersion: configuredAdcpVersion, resolveAccount, resolveSessionKey, exposeErrorDetails = process.env.NODE_ENV !== 'production', stateStore = new state_store_1.InMemoryStateStore(), logger = noopLogger, capabilities: capConfig, idempotency: idempotencyConfig, resolveIdempotencyPrincipal, instructions, taskStore, taskMessageQueue, webhooks, signedRequests, validation: validationConfig, testController: testControllerBridge, } = config;
|
|
844
|
+
// Defaults gated on `process.env.NODE_ENV`:
|
|
845
|
+
// - Production → both sides `'off'` (zero AJV overhead; trust the
|
|
846
|
+
// handler after its test suite has exercised it).
|
|
847
|
+
// - Dev/test/CI → BOTH sides `'strict'`. Request validation is now
|
|
848
|
+
// authoritative on both transports (#909) — we dropped the SDK
|
|
849
|
+
// Zod from `registerTool` inputSchema, so if our framework validator
|
|
850
|
+
// doesn't reject malformed payloads they reach the handler
|
|
851
|
+
// unchecked over A2A. Matching responses' existing `'strict'`
|
|
852
|
+
// default keeps behavior consistent across the wire in both
|
|
853
|
+
// directions.
|
|
854
|
+
// Explicit `validation: { requests, responses }` on the config always
|
|
855
|
+
// wins. `process.env.NODE_ENV` matches the convention every other SDK
|
|
856
|
+
// consumer already tunes (Express, React, etc.); containers/CI that
|
|
857
|
+
// want prod-like behavior set NODE_ENV=production before start.
|
|
858
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
859
|
+
const requestValidationMode = validationConfig?.requests ?? (isProduction ? 'off' : 'strict');
|
|
860
|
+
const responseValidationMode = validationConfig?.responses ?? (isProduction ? 'off' : 'strict');
|
|
861
|
+
// Split the `idempotency` config field into "the active store" and
|
|
862
|
+
// "explicitly opted out" so existing call sites keep working with a
|
|
863
|
+
// single nullable variable while the disabled-mode branches stay
|
|
864
|
+
// surgical. `idempotencyDisabled` gates: schema-level missing-key
|
|
865
|
+
// tolerance, the missing-store guardrail log, the capability
|
|
866
|
+
// declaration shift to `IdempotencyUnsupported`, and the runtime
|
|
867
|
+
// production check below.
|
|
868
|
+
const idempotencyDisabled = idempotencyConfig === 'disabled';
|
|
869
|
+
const idempotency = idempotencyDisabled ? undefined : idempotencyConfig;
|
|
870
|
+
if (idempotencyDisabled) {
|
|
871
|
+
// Allowlist gate. The earlier draft refused the flag only when
|
|
872
|
+
// NODE_ENV === 'production', which is a footgun: NODE_ENV defaults to
|
|
873
|
+
// unset in raw Lambda, custom containers, and many K8s deployments,
|
|
874
|
+
// so the strict equality returned `false` in exactly the
|
|
875
|
+
// hard-to-debug environments where disabled mode is most dangerous.
|
|
876
|
+
// Inverted to an allowlist of dev/test environments; any other value
|
|
877
|
+
// (unset, 'production', 'staging', 'qa', custom names) requires the
|
|
878
|
+
// operator to explicitly acknowledge the risk via
|
|
879
|
+
// `ADCP_IDEMPOTENCY_DISABLED_ACK=1`. Hard to set by accident, makes
|
|
880
|
+
// the choice deliberate, and turns a missing-NODE_ENV config into a
|
|
881
|
+
// startup crash instead of a silent money-flow incident on retry.
|
|
882
|
+
const env = process.env.NODE_ENV;
|
|
883
|
+
const acknowledged = process.env.ADCP_IDEMPOTENCY_DISABLED_ACK === '1';
|
|
884
|
+
const isAllowlistedDevEnv = env === 'test' || env === 'development';
|
|
885
|
+
if (!isAllowlistedDevEnv && !acknowledged) {
|
|
886
|
+
throw new Error("createAdcpServer: idempotency: 'disabled' refuses to start with NODE_ENV=" +
|
|
887
|
+
(env === undefined ? '<unset>' : JSON.stringify(env)) +
|
|
888
|
+
'. Disabled mode skips replay enforcement and silently double-executes mutating handlers on retry, ' +
|
|
889
|
+
'so the SDK only allows it under NODE_ENV=test or NODE_ENV=development by default. ' +
|
|
890
|
+
'Either: (a) wire a real store via `createIdempotencyStore({ backend, ttlSeconds })`, ' +
|
|
891
|
+
'(b) set NODE_ENV=test or NODE_ENV=development if this is a dev-only environment, or ' +
|
|
892
|
+
'(c) set ADCP_IDEMPOTENCY_DISABLED_ACK=1 to explicitly acknowledge the risk for non-standard environments.');
|
|
893
|
+
}
|
|
894
|
+
logger.warn("createAdcpServer: idempotency: 'disabled' is set. Mutating requests will not be replay-checked and " +
|
|
895
|
+
'`get_adcp_capabilities` will declare `idempotency.supported: false`. Use only in non-production test fleets.');
|
|
896
|
+
}
|
|
897
|
+
// Enforce lock-step between the `signed-requests` specialism claim and the
|
|
898
|
+
// verifier config for the auto-wiring path. When `signedRequests` is set
|
|
899
|
+
// but the specialism isn't declared, buyers can't discover the signing
|
|
900
|
+
// requirement from `get_adcp_capabilities` — they won't sign, the
|
|
901
|
+
// verifier rejects every mutating call, and the agent is dead on arrival.
|
|
902
|
+
// That's unambiguously wrong, so we throw.
|
|
903
|
+
//
|
|
904
|
+
// The opposite direction — claiming the specialism without a
|
|
905
|
+
// `signedRequests` config — is only wrong when the agent also doesn't
|
|
906
|
+
// wire a verifier via `serve({ preTransport })`. Legacy servers that
|
|
907
|
+
// hand-build the middleware fall into this case and are still conformant.
|
|
908
|
+
// We log a loud error so operators notice (matching the idempotency
|
|
909
|
+
// guardrail precedent) but don't throw, leaving the manual path working.
|
|
910
|
+
const specialismsClaimed = capConfig?.specialisms ?? [];
|
|
911
|
+
const claimsSignedRequests = specialismsClaimed.includes('signed-requests');
|
|
912
|
+
if (signedRequests && !claimsSignedRequests) {
|
|
913
|
+
throw new Error('createAdcpServer: `signedRequests` is configured but `capabilities.specialisms` does not include "signed-requests". ' +
|
|
914
|
+
'Add "signed-requests" to the specialisms list — buyers discover the signing requirement from get_adcp_capabilities, ' +
|
|
915
|
+
"and omitting the claim means they won't sign their requests.");
|
|
916
|
+
}
|
|
917
|
+
if (claimsSignedRequests && !signedRequests) {
|
|
918
|
+
logger.error('createAdcpServer: `capabilities.specialisms` claims "signed-requests" but no `signedRequests` config was provided. ' +
|
|
919
|
+
'Either pass `signedRequests: { jwks, replayStore, revocationStore }` to auto-wire the verifier, or ensure you wire ' +
|
|
920
|
+
'one manually via `serve({ preTransport })`. Claiming the specialism without verifying signatures is a spec violation.');
|
|
921
|
+
}
|
|
922
|
+
// The specialism is only meaningful when `capabilities.request_signing.supported`
|
|
923
|
+
// is true — the compliance storyboard treats a missing or false `supported`
|
|
924
|
+
// flag as "not opted in" and silently skips the whole conformance run. Claim
|
|
925
|
+
// + supported:false is the worst failure mode: the claim advertises
|
|
926
|
+
// signature enforcement while the capability block tells buyers the agent
|
|
927
|
+
// doesn't verify. Fail fast so the mismatch is caught at construction.
|
|
928
|
+
if (claimsSignedRequests && capConfig?.request_signing?.supported !== true) {
|
|
929
|
+
throw new Error('createAdcpServer: `capabilities.specialisms` claims "signed-requests" but `capabilities.request_signing.supported` is not true. ' +
|
|
930
|
+
'Set `capabilities.request_signing = { supported: true, ... }` — the compliance storyboard skips conformance entirely when ' +
|
|
931
|
+
'`supported` is falsy, and buyers cannot discover the signing requirement without the capability block.');
|
|
932
|
+
}
|
|
933
|
+
// Cross-domain specialism declaration check. When a domain handler group
|
|
934
|
+
// is wired, `capabilities.specialisms` SHOULD include at least one of that
|
|
935
|
+
// domain's specialisms — otherwise the conformance runner grades the agent
|
|
936
|
+
// as "No applicable tracks found for this agent" silently, even when every
|
|
937
|
+
// tool works. The matrix v18 run (issue #785) had this drift class account
|
|
938
|
+
// for ~30% of "agent built every tool but storyboard reports no applicable
|
|
939
|
+
// tracks" cases.
|
|
940
|
+
//
|
|
941
|
+
// Logged via `logger.error` (matching the idempotency-disabled precedent)
|
|
942
|
+
// rather than thrown because middleware-only test harnesses legitimately
|
|
943
|
+
// wire handlers without declaring specialisms — production agents will see
|
|
944
|
+
// the warning and conformance fail loudly, but tests stay passing.
|
|
945
|
+
//
|
|
946
|
+
// mediaBuy is intentionally excluded — its specialism choices
|
|
947
|
+
// (sales-non-guaranteed vs sales-guaranteed vs sales-broadcast-tv vs
|
|
948
|
+
// sales-social etc.) are commercially significant and an agent wiring
|
|
949
|
+
// `mediaBuy.getProducts` may legitimately defer the specialism
|
|
950
|
+
// declaration to a follow-up. The skill examples in build-seller-agent
|
|
951
|
+
// already cover the right declaration; the runtime guardrail floor is
|
|
952
|
+
// set at "if you wire creative/signals/brand/governance handlers,
|
|
953
|
+
// you SHOULD claim a specialism."
|
|
954
|
+
//
|
|
955
|
+
// governance is intentionally COARSE: any governance specialism
|
|
956
|
+
// satisfies the check even though individual handlers map to specific
|
|
957
|
+
// specialisms (createPropertyList → property-lists, calibrateContent →
|
|
958
|
+
// content-standards, etc.). Per-handler-subgroup mapping is a
|
|
959
|
+
// follow-up; the coarse rule catches the drift class (governance
|
|
960
|
+
// handlers wired, no claim at all) without false-positives on
|
|
961
|
+
// legitimate cross-cutting reads (e.g., a sales agent that calls
|
|
962
|
+
// getPropertyList for read-only joins and claims its sales specialism).
|
|
963
|
+
const isWired = (handlers) => {
|
|
964
|
+
// Filter to function-valued keys so `{ listCreativeFormats: undefined }`
|
|
965
|
+
// (a key set to undefined, e.g. via `{ ...maybeHandlers }` spread) is
|
|
966
|
+
// treated as not wired. `Object.keys` would otherwise count the key.
|
|
967
|
+
if (!handlers)
|
|
968
|
+
return false;
|
|
969
|
+
return Object.values(handlers).some(v => typeof v === 'function');
|
|
970
|
+
};
|
|
971
|
+
const DOMAIN_SPECIALISM_REQUIREMENTS = [
|
|
972
|
+
{
|
|
973
|
+
domain: 'creative',
|
|
974
|
+
wired: isWired(config.creative),
|
|
975
|
+
specialisms: ['creative-ad-server', 'creative-generative', 'creative-template'],
|
|
976
|
+
},
|
|
977
|
+
{
|
|
978
|
+
domain: 'signals',
|
|
979
|
+
wired: isWired(config.signals),
|
|
980
|
+
specialisms: ['signal-marketplace', 'signal-owned'],
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
domain: 'brandRights',
|
|
984
|
+
wired: isWired(config.brandRights),
|
|
985
|
+
specialisms: ['brand-rights'],
|
|
986
|
+
},
|
|
987
|
+
{
|
|
988
|
+
domain: 'governance',
|
|
989
|
+
wired: isWired(config.governance),
|
|
990
|
+
specialisms: [
|
|
991
|
+
'governance-spend-authority',
|
|
992
|
+
'governance-delivery-monitor',
|
|
993
|
+
'property-lists',
|
|
994
|
+
'collection-lists',
|
|
995
|
+
'content-standards',
|
|
996
|
+
],
|
|
997
|
+
},
|
|
998
|
+
];
|
|
999
|
+
for (const req of DOMAIN_SPECIALISM_REQUIREMENTS) {
|
|
1000
|
+
if (!req.wired)
|
|
1001
|
+
continue;
|
|
1002
|
+
const claimedFromDomain = req.specialisms.filter(s => specialismsClaimed.includes(s));
|
|
1003
|
+
if (claimedFromDomain.length === 0) {
|
|
1004
|
+
logger.error(`createAdcpServer: ${req.domain} handlers are wired but capabilities.specialisms ` +
|
|
1005
|
+
`does not include any ${req.domain} specialism. Add at least one of ` +
|
|
1006
|
+
`${req.specialisms.map(s => `'${s}'`).join(', ')} to capabilities.specialisms — ` +
|
|
1007
|
+
`without it, the conformance runner reports "No applicable tracks found" and ` +
|
|
1008
|
+
`the agent grades as failing despite working tools.`);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
// Instantiate the emitter once — handler contexts expose its `emit`
|
|
1012
|
+
// bound method so per-request code calls `ctx.emitWebhook(...)` without
|
|
1013
|
+
// knowing about the emitter's construction or options.
|
|
1014
|
+
const webhookEmitter = webhooks ? (0, webhook_emitter_1.createWebhookEmitter)(webhooks) : undefined;
|
|
1015
|
+
const server = (0, tasks_1.createTaskCapableServer)(name, version, {
|
|
1016
|
+
taskStore,
|
|
1017
|
+
taskMessageQueue,
|
|
1018
|
+
instructions,
|
|
1019
|
+
});
|
|
1020
|
+
const registeredToolNames = new Set();
|
|
1021
|
+
// Collect all domain handlers into a flat toolName → handler map
|
|
1022
|
+
const domainGroups = [
|
|
1023
|
+
[config.mediaBuy, MEDIA_BUY_ENTRIES],
|
|
1024
|
+
[config.signals, SIGNALS_ENTRIES],
|
|
1025
|
+
[config.creative, CREATIVE_ENTRIES],
|
|
1026
|
+
[config.governance, GOVERNANCE_ENTRIES],
|
|
1027
|
+
[config.accounts, ACCOUNT_ENTRIES],
|
|
1028
|
+
[config.eventTracking, EVENT_TRACKING_ENTRIES],
|
|
1029
|
+
[config.sponsoredIntelligence, SI_ENTRIES],
|
|
1030
|
+
[config.brandRights, BRAND_RIGHTS_ENTRIES],
|
|
1031
|
+
];
|
|
1032
|
+
for (const [handlers, entries] of domainGroups) {
|
|
1033
|
+
if (!handlers)
|
|
1034
|
+
continue;
|
|
1035
|
+
// Warn on unrecognized handler keys (likely typos)
|
|
1036
|
+
const knownKeys = new Set(entries.map(e => e.handlerKey));
|
|
1037
|
+
for (const key of Object.keys(handlers)) {
|
|
1038
|
+
if (typeof handlers[key] === 'function' && !knownKeys.has(key)) {
|
|
1039
|
+
logger.warn(`Unknown handler key "${key}" — will not be registered. Check for typos.`);
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
for (const { handlerKey, toolName } of entries) {
|
|
1043
|
+
const handler = handlers[handlerKey];
|
|
1044
|
+
if (!handler)
|
|
1045
|
+
continue;
|
|
1046
|
+
if (registeredToolNames.has(toolName)) {
|
|
1047
|
+
// Tool already registered by another domain (e.g., list_creative_formats
|
|
1048
|
+
// in both mediaBuy and creative). First domain wins.
|
|
1049
|
+
logger.warn(`Tool "${toolName}" already registered by another domain, skipping`);
|
|
1050
|
+
continue;
|
|
1051
|
+
}
|
|
1052
|
+
const meta = TOOL_META[toolName];
|
|
1053
|
+
const schema = tool_request_schemas_1.TOOL_REQUEST_SCHEMAS[toolName];
|
|
1054
|
+
if (!schema?.shape) {
|
|
1055
|
+
logger.warn(`No schema found for tool "${toolName}" in TOOL_REQUEST_SCHEMAS, skipping`);
|
|
1056
|
+
continue;
|
|
1057
|
+
}
|
|
1058
|
+
const hasAccount = 'account' in schema.shape;
|
|
1059
|
+
const wrap = meta?.wrap ?? ((data, summary) => genericResponse(toolName, data, summary));
|
|
1060
|
+
const toolHandler = async (params, extra) => {
|
|
1061
|
+
const ctx = { store: stateStore };
|
|
1062
|
+
if (extra?.authInfo)
|
|
1063
|
+
ctx.authInfo = extra.authInfo;
|
|
1064
|
+
if (webhookEmitter)
|
|
1065
|
+
ctx.emitWebhook = webhookEmitter.emit.bind(webhookEmitter);
|
|
1066
|
+
// Echo params.context into any response (success or error) so buyers
|
|
1067
|
+
// can trace correlation_id end-to-end. Framework-generated errors
|
|
1068
|
+
// (ACCOUNT_NOT_FOUND, SERVICE_UNAVAILABLE) go through this too.
|
|
1069
|
+
// `injectContextIntoResponse` skips non-object values so SI tools
|
|
1070
|
+
// that override `context` as a string on the request don't leak the
|
|
1071
|
+
// string into the response envelope.
|
|
1072
|
+
//
|
|
1073
|
+
// `sanitizeAdcpErrorEnvelope` re-applies `ADCP_ERROR_FIELD_ALLOWLIST`
|
|
1074
|
+
// as a runtime belt-and-suspenders for handlers that build an error
|
|
1075
|
+
// envelope outside `adcpError()` — `adcpError()` already filters its
|
|
1076
|
+
// own output, but a hand-rolled `{ isError, structuredContent:
|
|
1077
|
+
// { adcp_error: ... } }` would otherwise ship unfiltered.
|
|
1078
|
+
const finalize = (response) => {
|
|
1079
|
+
sanitizeAdcpErrorEnvelope(response);
|
|
1080
|
+
injectContextIntoResponse(response, params.context);
|
|
1081
|
+
return response;
|
|
1082
|
+
};
|
|
1083
|
+
const toolIsMutating = (0, idempotency_1.isMutatingTask)(toolName);
|
|
1084
|
+
// --- Request schema validation (opt-in) ---
|
|
1085
|
+
// Runs before idempotency so drifted payloads never touch the
|
|
1086
|
+
// replay cache. `off` short-circuits without calling AJV.
|
|
1087
|
+
if (requestValidationMode !== 'off') {
|
|
1088
|
+
const outcome = (0, schema_validator_1.validateRequest)(toolName, params);
|
|
1089
|
+
if (!outcome.valid) {
|
|
1090
|
+
// When `idempotency: 'disabled'` is set, drop the synthetic
|
|
1091
|
+
// "missing idempotency_key" failure on mutating tools — the
|
|
1092
|
+
// operator has explicitly opted out of enforcement and would
|
|
1093
|
+
// otherwise need to UUID-inject every test payload to satisfy
|
|
1094
|
+
// the spec-required field. All other schema issues still fail.
|
|
1095
|
+
//
|
|
1096
|
+
// The exact-match `pointer === '/idempotency_key'` is
|
|
1097
|
+
// load-bearing: AJV builds the pointer from `instancePath +
|
|
1098
|
+
// /missingProperty`, so today every mutating tool's
|
|
1099
|
+
// idempotency_key sits at the top level (instancePath = '',
|
|
1100
|
+
// pointer = '/idempotency_key'). If a future spec revision
|
|
1101
|
+
// ever nests this field under another object, the new pointer
|
|
1102
|
+
// (`/foo/idempotency_key`) won't match this filter and the
|
|
1103
|
+
// strict-mode failure will correctly bubble up — drift is
|
|
1104
|
+
// surfaced rather than silently swallowed.
|
|
1105
|
+
const issues = idempotencyDisabled && toolIsMutating
|
|
1106
|
+
? outcome.issues.filter(i => !(i.keyword === 'required' && i.pointer === '/idempotency_key'))
|
|
1107
|
+
: outcome.issues;
|
|
1108
|
+
if (issues.length > 0) {
|
|
1109
|
+
if (requestValidationMode === 'strict') {
|
|
1110
|
+
// Thread `exposeSchemaPath` the same way response-side does
|
|
1111
|
+
// so request-side schemaPath also ships in dev and stays
|
|
1112
|
+
// gated in production. Prior to this, request-side silently
|
|
1113
|
+
// stripped schemaPath even in dev — asymmetric with response-side.
|
|
1114
|
+
const payload = (0, schema_errors_1.buildAdcpValidationErrorPayload)(toolName, 'request', issues, {
|
|
1115
|
+
exposeSchemaPath: exposeErrorDetails,
|
|
1116
|
+
});
|
|
1117
|
+
return finalize((0, errors_1.adcpError)('VALIDATION_ERROR', payload));
|
|
1118
|
+
}
|
|
1119
|
+
logger.warn(`Schema validation warning (request) for ${toolName}: ${(0, schema_validator_1.formatIssues)(issues)}`, {
|
|
1120
|
+
tool: toolName,
|
|
1121
|
+
issues,
|
|
1122
|
+
});
|
|
1123
|
+
}
|
|
1124
|
+
}
|
|
1125
|
+
}
|
|
1126
|
+
// --- Account resolution ---
|
|
1127
|
+
if (hasAccount && params.account != null && resolveAccount) {
|
|
1128
|
+
try {
|
|
1129
|
+
const account = await resolveAccount(params.account, {
|
|
1130
|
+
toolName: toolName,
|
|
1131
|
+
authInfo: ctx.authInfo,
|
|
1132
|
+
});
|
|
1133
|
+
if (account == null) {
|
|
1134
|
+
logger.warn('Account not found', { tool: toolName, account: params.account });
|
|
1135
|
+
return finalize((0, errors_1.adcpError)('ACCOUNT_NOT_FOUND', {
|
|
1136
|
+
message: 'The specified account does not exist',
|
|
1137
|
+
field: 'account',
|
|
1138
|
+
suggestion: 'Use list_accounts to discover available accounts, or sync_accounts to create one',
|
|
1139
|
+
}));
|
|
1140
|
+
}
|
|
1141
|
+
ctx.account = account;
|
|
1142
|
+
}
|
|
1143
|
+
catch (err) {
|
|
1144
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1145
|
+
logger.error('Account resolution failed', { tool: toolName, error: reason });
|
|
1146
|
+
return finalize((0, errors_1.adcpError)('SERVICE_UNAVAILABLE', {
|
|
1147
|
+
message: 'Account resolution failed',
|
|
1148
|
+
...(exposeErrorDetails && { details: { reason } }),
|
|
1149
|
+
}));
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
// --- Session key resolution ---
|
|
1153
|
+
if (resolveSessionKey) {
|
|
1154
|
+
try {
|
|
1155
|
+
const sessionKey = await resolveSessionKey({
|
|
1156
|
+
toolName: toolName,
|
|
1157
|
+
params,
|
|
1158
|
+
account: ctx.account,
|
|
1159
|
+
});
|
|
1160
|
+
if (sessionKey !== undefined)
|
|
1161
|
+
ctx.sessionKey = sessionKey;
|
|
1162
|
+
}
|
|
1163
|
+
catch (err) {
|
|
1164
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1165
|
+
logger.error('Session key resolution failed', { tool: toolName, error: reason });
|
|
1166
|
+
return finalize((0, errors_1.adcpError)('SERVICE_UNAVAILABLE', {
|
|
1167
|
+
message: 'Session key resolution failed',
|
|
1168
|
+
...(exposeErrorDetails && { details: { reason } }),
|
|
1169
|
+
}));
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
// --- idempotency_key shape gate (runs even in disabled mode) ---
|
|
1173
|
+
// Defense-in-depth against buyers that bypass MCP schema
|
|
1174
|
+
// validation (different transport, bespoke client) AND against
|
|
1175
|
+
// disabled-mode environments where the replay middleware below is
|
|
1176
|
+
// skipped. Low-entropy keys pollute the cache and enable
|
|
1177
|
+
// enumeration; keys containing the internal scope-separator byte
|
|
1178
|
+
// would collide with the cache's scope tuple. Even in disabled
|
|
1179
|
+
// mode (no cache, no enforcement) a malformed key flowing into
|
|
1180
|
+
// handler logs is a debuggability hazard — so we reject the
|
|
1181
|
+
// shape whenever a key was supplied, regardless of whether the
|
|
1182
|
+
// replay middleware will execute. Missing-key enforcement
|
|
1183
|
+
// remains scoped to the middleware below (gated on `idempotency`),
|
|
1184
|
+
// so disabled mode tolerates absence per the schema-filter
|
|
1185
|
+
// contract earlier in this dispatcher.
|
|
1186
|
+
if (toolIsMutating &&
|
|
1187
|
+
typeof params.idempotency_key === 'string' &&
|
|
1188
|
+
!idempotency_1.IDEMPOTENCY_KEY_PATTERN.test(params.idempotency_key)) {
|
|
1189
|
+
return finalize((0, errors_1.adcpError)('INVALID_REQUEST', {
|
|
1190
|
+
message: 'idempotency_key must match the spec pattern ^[A-Za-z0-9_.:-]{16,255}$',
|
|
1191
|
+
field: 'idempotency_key',
|
|
1192
|
+
}));
|
|
1193
|
+
}
|
|
1194
|
+
// --- Idempotency (mutating tools only) ---
|
|
1195
|
+
let idempotencyCheck;
|
|
1196
|
+
if (idempotency && toolIsMutating) {
|
|
1197
|
+
const key = typeof params.idempotency_key === 'string' ? params.idempotency_key : undefined;
|
|
1198
|
+
if (!key) {
|
|
1199
|
+
return finalize((0, errors_1.adcpError)('INVALID_REQUEST', {
|
|
1200
|
+
message: 'idempotency_key is required on mutating requests',
|
|
1201
|
+
field: 'idempotency_key',
|
|
1202
|
+
}));
|
|
1203
|
+
}
|
|
1204
|
+
// Pattern check already ran in the shape gate above. By this
|
|
1205
|
+
// point `key` is guaranteed to match IDEMPOTENCY_KEY_PATTERN.
|
|
1206
|
+
const principal = (resolveIdempotencyPrincipal
|
|
1207
|
+
? resolveIdempotencyPrincipal(ctx, params, toolName)
|
|
1208
|
+
: ctx.sessionKey) ?? '';
|
|
1209
|
+
if (!principal) {
|
|
1210
|
+
logger.error('Idempotency principal unresolved', { tool: toolName });
|
|
1211
|
+
return finalize((0, errors_1.adcpError)('SERVICE_UNAVAILABLE', {
|
|
1212
|
+
message: 'Idempotency principal could not be resolved — configure resolveSessionKey or resolveIdempotencyPrincipal',
|
|
1213
|
+
}));
|
|
1214
|
+
}
|
|
1215
|
+
// SI `si_send_message` is scoped per-session — the same key under
|
|
1216
|
+
// two different sessions must not replay into each other. The
|
|
1217
|
+
// caller's session_id enters the scope tuple so each session has
|
|
1218
|
+
// its own idempotency namespace.
|
|
1219
|
+
const extraScope = resolveExtraScope(toolName, params);
|
|
1220
|
+
try {
|
|
1221
|
+
const checkResult = await idempotency.check({ principal, key, payload: params, extraScope });
|
|
1222
|
+
if (checkResult.kind === 'replay') {
|
|
1223
|
+
// The cache stores the already-formatted envelope (so
|
|
1224
|
+
// non-deterministic wrap fields like `confirmed_at` are
|
|
1225
|
+
// pinned to the first execution's values). Clone before
|
|
1226
|
+
// mutating so envelope stamps (replayed, echo-back context)
|
|
1227
|
+
// don't leak into the cache — the backend also clones on
|
|
1228
|
+
// read, but belt-and-suspenders: handler-returned objects
|
|
1229
|
+
// can alias pieces of the formatted envelope.
|
|
1230
|
+
const cachedFormatted = cloneFormattedResponse(checkResult.response);
|
|
1231
|
+
// Only stamp `replayed: true` on success envelopes — the
|
|
1232
|
+
// field is defined for successful replays, and transient
|
|
1233
|
+
// error cache entries (VALIDATION_ERROR from strict-mode
|
|
1234
|
+
// drift) are retry-storm guards, not spec replays.
|
|
1235
|
+
if (!isErrorResponse(cachedFormatted)) {
|
|
1236
|
+
stampReplayed(cachedFormatted);
|
|
1237
|
+
}
|
|
1238
|
+
return finalize(cachedFormatted);
|
|
1239
|
+
}
|
|
1240
|
+
if (checkResult.kind === 'conflict') {
|
|
1241
|
+
return finalize((0, errors_1.adcpError)('IDEMPOTENCY_CONFLICT', {
|
|
1242
|
+
message: 'idempotency_key was used earlier with a different canonical payload. Use a fresh UUID v4, or resend the exact original payload.',
|
|
1243
|
+
}));
|
|
1244
|
+
}
|
|
1245
|
+
if (checkResult.kind === 'expired') {
|
|
1246
|
+
return finalize((0, errors_1.adcpError)('IDEMPOTENCY_EXPIRED', {
|
|
1247
|
+
message: `idempotency_key is past the seller's replay window (${idempotency.ttlSeconds}s). Use a fresh UUID v4, or look up the resource by natural key if the prior call succeeded.`,
|
|
1248
|
+
}));
|
|
1249
|
+
}
|
|
1250
|
+
if (checkResult.kind === 'in-flight') {
|
|
1251
|
+
// A parallel request is currently executing this same key.
|
|
1252
|
+
// Tell the client to retry — returning SERVICE_UNAVAILABLE
|
|
1253
|
+
// with a short retry_after is transient-classified and the
|
|
1254
|
+
// buyer SDK auto-retries. Eventually the other request
|
|
1255
|
+
// completes and this retry either replays the cached
|
|
1256
|
+
// response or hits IDEMPOTENCY_CONFLICT.
|
|
1257
|
+
return finalize((0, errors_1.adcpError)('SERVICE_UNAVAILABLE', {
|
|
1258
|
+
message: 'A parallel request with the same idempotency_key is still in flight. Retry shortly.',
|
|
1259
|
+
retry_after: 1,
|
|
1260
|
+
}));
|
|
1261
|
+
}
|
|
1262
|
+
idempotencyCheck = { key, principal, payloadHash: checkResult.payloadHash, extraScope };
|
|
1263
|
+
}
|
|
1264
|
+
catch (err) {
|
|
1265
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1266
|
+
logger.error('Idempotency check failed', { tool: toolName, error: reason });
|
|
1267
|
+
return finalize((0, errors_1.adcpError)('SERVICE_UNAVAILABLE', {
|
|
1268
|
+
message: 'Idempotency check failed',
|
|
1269
|
+
...(exposeErrorDetails && { details: { reason } }),
|
|
1270
|
+
}));
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
// --- Handler ---
|
|
1274
|
+
try {
|
|
1275
|
+
const result = await handler(params, ctx);
|
|
1276
|
+
// Narrow Error / Submitted arms of the *Response union before
|
|
1277
|
+
// reaching the success-arm builder: wrap() on an Error payload
|
|
1278
|
+
// would still serialize it but apply success-shaped defaults
|
|
1279
|
+
// (revision, confirmed_at, 'Media buy undefined created') to
|
|
1280
|
+
// a shape that doesn't have those fields. Routing here keeps
|
|
1281
|
+
// the wire shape correct regardless of which arm the handler
|
|
1282
|
+
// chose to return.
|
|
1283
|
+
let formatted;
|
|
1284
|
+
if (isFormattedResponse(result)) {
|
|
1285
|
+
formatted = result;
|
|
1286
|
+
}
|
|
1287
|
+
else if (isSubmittedEnvelope(result)) {
|
|
1288
|
+
formatted = wrapSubmittedEnvelope(result);
|
|
1289
|
+
}
|
|
1290
|
+
else if (isErrorArm(result)) {
|
|
1291
|
+
// Log-warn (always) on spec-violating Error items — required
|
|
1292
|
+
// `code`/`message` are spec-mandatory on core/error.json. We
|
|
1293
|
+
// don't fail the response: response-schema validation is
|
|
1294
|
+
// already skipped for `isError: true` envelopes and flipping
|
|
1295
|
+
// a handler-returned Error arm into a framework VALIDATION_ERROR
|
|
1296
|
+
// would obscure the seller's intended error. A steady-state
|
|
1297
|
+
// warn is enough to surface drift in dev/test logs.
|
|
1298
|
+
const malformed = result.errors.some(e => e == null ||
|
|
1299
|
+
typeof e !== 'object' ||
|
|
1300
|
+
typeof e.code !== 'string' ||
|
|
1301
|
+
typeof e.message !== 'string');
|
|
1302
|
+
if (malformed) {
|
|
1303
|
+
logger.warn(`Handler returned ${toolName} Error arm with spec-violating errors[]`, {
|
|
1304
|
+
tool: toolName,
|
|
1305
|
+
errors: result.errors,
|
|
1306
|
+
});
|
|
1307
|
+
}
|
|
1308
|
+
formatted = wrapErrorArm(result);
|
|
1309
|
+
}
|
|
1310
|
+
else {
|
|
1311
|
+
formatted = wrap(result);
|
|
1312
|
+
}
|
|
1313
|
+
// --- Test-controller bridge: augment get_products with seeded fixtures. ---
|
|
1314
|
+
// Only runs when the seller opted in via `testController.getSeededProducts`
|
|
1315
|
+
// AND the request carries a sandbox marker (account.sandbox === true or
|
|
1316
|
+
// context.sandbox === true). When `resolveAccount` returned a concrete
|
|
1317
|
+
// account, we additionally require `ctx.account.sandbox === true` so a
|
|
1318
|
+
// request that happens to include `account.sandbox: true` can't leak
|
|
1319
|
+
// fixtures into a non-sandbox resolved account (belt-and-suspenders).
|
|
1320
|
+
// Seeded products append to whatever the handler returned; `product_id`
|
|
1321
|
+
// collisions resolve with the seeded entry winning, so storyboards that
|
|
1322
|
+
// override default inventory see their fixture.
|
|
1323
|
+
if (toolName === 'get_products' &&
|
|
1324
|
+
testControllerBridge?.getSeededProducts &&
|
|
1325
|
+
!isErrorResponse(formatted) &&
|
|
1326
|
+
(0, test_controller_bridge_1.isSandboxRequest)(params) &&
|
|
1327
|
+
// If resolveAccount produced a record, require it to be flagged
|
|
1328
|
+
// sandbox too. If no account was resolved, the request-signal
|
|
1329
|
+
// check above is the only line of defense — keep that contract.
|
|
1330
|
+
(ctx.account === undefined ||
|
|
1331
|
+
(typeof ctx.account === 'object' &&
|
|
1332
|
+
ctx.account !== null &&
|
|
1333
|
+
ctx.account.sandbox === true))) {
|
|
1334
|
+
try {
|
|
1335
|
+
const bridgeCtx = { input: params };
|
|
1336
|
+
if (ctx.account !== undefined)
|
|
1337
|
+
bridgeCtx.account = ctx.account;
|
|
1338
|
+
const rawSeeded = await testControllerBridge.getSeededProducts(bridgeCtx);
|
|
1339
|
+
const seeded = (0, test_controller_bridge_1.filterValidSeededProducts)(rawSeeded, logger);
|
|
1340
|
+
if (seeded.length > 0) {
|
|
1341
|
+
const sc = formatted.structuredContent;
|
|
1342
|
+
if (sc && typeof sc === 'object') {
|
|
1343
|
+
const merged = (0, test_controller_bridge_1.mergeSeededProductsIntoResponse)(sc, seeded);
|
|
1344
|
+
formatted = wrap(merged);
|
|
1345
|
+
}
|
|
1346
|
+
}
|
|
1347
|
+
}
|
|
1348
|
+
catch (err) {
|
|
1349
|
+
// Bridge failures are sandbox-only by construction, so logging +
|
|
1350
|
+
// returning the handler's response is the right default — a broken
|
|
1351
|
+
// test fixture shouldn't tank the request under test.
|
|
1352
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1353
|
+
logger.warn('testController.getSeededProducts failed; returning handler response unchanged', {
|
|
1354
|
+
tool: toolName,
|
|
1355
|
+
error: reason,
|
|
1356
|
+
});
|
|
1357
|
+
}
|
|
1358
|
+
}
|
|
1359
|
+
// --- Response schema validation (opt-in) ---
|
|
1360
|
+
// Runs on the structured payload the handler produced. Errors
|
|
1361
|
+
// have their own envelope (`adcp_error`) and are skipped here —
|
|
1362
|
+
// their shape is enforced by the adcpError() builder.
|
|
1363
|
+
if (responseValidationMode !== 'off' && !isErrorResponse(formatted)) {
|
|
1364
|
+
const payload = formatted.structuredContent;
|
|
1365
|
+
const outcome = (0, schema_validator_1.validateResponse)(toolName, payload);
|
|
1366
|
+
if (!outcome.valid) {
|
|
1367
|
+
logger.warn(`Schema validation warning (response) for ${toolName}: ${(0, schema_validator_1.formatIssues)(outcome.issues)}`, {
|
|
1368
|
+
tool: toolName,
|
|
1369
|
+
issues: outcome.issues,
|
|
1370
|
+
variant: outcome.variant,
|
|
1371
|
+
});
|
|
1372
|
+
if (responseValidationMode === 'strict') {
|
|
1373
|
+
const errPayload = (0, schema_errors_1.buildAdcpValidationErrorPayload)(toolName, 'response', outcome.issues, {
|
|
1374
|
+
exposeSchemaPath: exposeErrorDetails,
|
|
1375
|
+
});
|
|
1376
|
+
const errEnvelope = (0, errors_1.adcpError)('VALIDATION_ERROR', errPayload);
|
|
1377
|
+
if (idempotencyCheck && idempotency) {
|
|
1378
|
+
// Cache the VALIDATION_ERROR briefly so a buyer SDK
|
|
1379
|
+
// retrying on the same key doesn't trigger unbounded
|
|
1380
|
+
// re-execution — strict-mode drift is deterministic,
|
|
1381
|
+
// the next handler call would return the same error.
|
|
1382
|
+
// Short TTL (10s) absorbs a typical retry burst.
|
|
1383
|
+
//
|
|
1384
|
+
// Stores that pre-date #758 may not implement
|
|
1385
|
+
// `saveTransientError`; fall back to `release` so the
|
|
1386
|
+
// claim is at least freed for a fresh retry.
|
|
1387
|
+
try {
|
|
1388
|
+
if (idempotency.saveTransientError) {
|
|
1389
|
+
await idempotency.saveTransientError({
|
|
1390
|
+
principal: idempotencyCheck.principal,
|
|
1391
|
+
key: idempotencyCheck.key,
|
|
1392
|
+
payloadHash: idempotencyCheck.payloadHash,
|
|
1393
|
+
response: errEnvelope,
|
|
1394
|
+
extraScope: idempotencyCheck.extraScope,
|
|
1395
|
+
});
|
|
1396
|
+
}
|
|
1397
|
+
else {
|
|
1398
|
+
await idempotency.release({
|
|
1399
|
+
principal: idempotencyCheck.principal,
|
|
1400
|
+
key: idempotencyCheck.key,
|
|
1401
|
+
extraScope: idempotencyCheck.extraScope,
|
|
1402
|
+
});
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
catch (err) {
|
|
1406
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1407
|
+
logger.warn('Idempotency transient-error cache failed — retry storm may re-execute handler', {
|
|
1408
|
+
tool: toolName,
|
|
1409
|
+
error: reason,
|
|
1410
|
+
});
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
return finalize(errEnvelope);
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
}
|
|
1417
|
+
// Cache successful mutations for replay. Errors re-execute on
|
|
1418
|
+
// retry, not replayed — only cache when the wrapped response is
|
|
1419
|
+
// not an error shape. Release the in-flight claim on error so a
|
|
1420
|
+
// retry can re-execute rather than replay the transient failure.
|
|
1421
|
+
//
|
|
1422
|
+
// Cache the FORMATTED envelope, not the raw handler return:
|
|
1423
|
+
// some wrap functions inject non-deterministic fields
|
|
1424
|
+
// (`confirmed_at = new Date().toISOString()`) when the handler
|
|
1425
|
+
// omits them. Re-wrapping on replay would produce a different
|
|
1426
|
+
// `confirmed_at` each time, breaking the "same response on
|
|
1427
|
+
// replay" contract. Caching the formatted envelope pins those
|
|
1428
|
+
// fields to their first-execution values.
|
|
1429
|
+
if (idempotencyCheck && idempotency) {
|
|
1430
|
+
if (!isErrorResponse(formatted)) {
|
|
1431
|
+
try {
|
|
1432
|
+
// Strip `context` before caching — it's a per-request echo
|
|
1433
|
+
// field (buyer's correlation_id), not part of the cached
|
|
1434
|
+
// payload. If we cached it, replays would return the
|
|
1435
|
+
// FIRST caller's correlation_id to every subsequent
|
|
1436
|
+
// retry, breaking end-to-end request tracing. On replay,
|
|
1437
|
+
// `finalize()` re-injects the current request's context.
|
|
1438
|
+
const cacheable = stripEnvelopeEcho(formatted);
|
|
1439
|
+
await idempotency.save({
|
|
1440
|
+
principal: idempotencyCheck.principal,
|
|
1441
|
+
key: idempotencyCheck.key,
|
|
1442
|
+
payloadHash: idempotencyCheck.payloadHash,
|
|
1443
|
+
response: cacheable,
|
|
1444
|
+
extraScope: idempotencyCheck.extraScope,
|
|
1445
|
+
});
|
|
1446
|
+
}
|
|
1447
|
+
catch (err) {
|
|
1448
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1449
|
+
logger.warn('Idempotency save failed — response will not be cached', {
|
|
1450
|
+
tool: toolName,
|
|
1451
|
+
error: reason,
|
|
1452
|
+
});
|
|
1453
|
+
}
|
|
1454
|
+
// Fresh-path responses omit `replayed` — per envelope spec,
|
|
1455
|
+
// absence signals fresh execution. The replay path stamps
|
|
1456
|
+
// `replayed: true` on the cached copy at retrieval.
|
|
1457
|
+
}
|
|
1458
|
+
else {
|
|
1459
|
+
try {
|
|
1460
|
+
await idempotency.release({
|
|
1461
|
+
principal: idempotencyCheck.principal,
|
|
1462
|
+
key: idempotencyCheck.key,
|
|
1463
|
+
extraScope: idempotencyCheck.extraScope,
|
|
1464
|
+
});
|
|
1465
|
+
}
|
|
1466
|
+
catch (err) {
|
|
1467
|
+
// Best-effort release; if it fails the claim TTL will
|
|
1468
|
+
// eventually evict. Log and move on.
|
|
1469
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1470
|
+
logger.warn('Idempotency release failed — in-flight claim will expire on TTL', {
|
|
1471
|
+
tool: toolName,
|
|
1472
|
+
error: reason,
|
|
1473
|
+
});
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
return finalize(formatted);
|
|
1478
|
+
}
|
|
1479
|
+
catch (err) {
|
|
1480
|
+
// Release the idempotency claim on any thrown path — whether
|
|
1481
|
+
// we unwrap a typed envelope or fall through to SERVICE_UNAVAILABLE,
|
|
1482
|
+
// the handler did not produce a cached response and the next retry
|
|
1483
|
+
// should proceed normally.
|
|
1484
|
+
if (idempotencyCheck && idempotency) {
|
|
1485
|
+
try {
|
|
1486
|
+
await idempotency.release({
|
|
1487
|
+
principal: idempotencyCheck.principal,
|
|
1488
|
+
key: idempotencyCheck.key,
|
|
1489
|
+
extraScope: idempotencyCheck.extraScope,
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
catch (releaseErr) {
|
|
1493
|
+
const releaseReason = releaseErr instanceof Error ? releaseErr.message : String(releaseErr);
|
|
1494
|
+
logger.warn('Idempotency release failed — in-flight claim will expire on TTL', {
|
|
1495
|
+
tool: toolName,
|
|
1496
|
+
error: releaseReason,
|
|
1497
|
+
});
|
|
1498
|
+
}
|
|
1499
|
+
}
|
|
1500
|
+
// Auto-unwrap `throw adcpError(...)`. Handlers that throw an
|
|
1501
|
+
// envelope (instead of returning it) should behave identically —
|
|
1502
|
+
// otherwise the envelope surfaces as `[object Object]` inside
|
|
1503
|
+
// SERVICE_UNAVAILABLE and the buyer loses the typed domain code.
|
|
1504
|
+
// Matrix harnesses and fresh-built agents consistently get this
|
|
1505
|
+
// wrong; unwrapping at the dispatcher closes the class of bugs
|
|
1506
|
+
// instead of relying on every skill to show `return` over `throw`.
|
|
1507
|
+
if (isThrownAdcpError(err)) {
|
|
1508
|
+
const env = err.structuredContent.adcp_error;
|
|
1509
|
+
// Log message + stack so forensic review sees what was thrown
|
|
1510
|
+
// (not just the code). The thrown envelope is a plain object so
|
|
1511
|
+
// `.stack` is typically absent, but authors sometimes subclass
|
|
1512
|
+
// `Error` and attach envelope fields; capture it defensively.
|
|
1513
|
+
logger.warn('Handler threw an adcpError envelope — prefer `return` over `throw` for typed errors', {
|
|
1514
|
+
tool: toolName,
|
|
1515
|
+
handler: handlerKey,
|
|
1516
|
+
code: env.code,
|
|
1517
|
+
message: env.message,
|
|
1518
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
1519
|
+
});
|
|
1520
|
+
return finalize(err);
|
|
1521
|
+
}
|
|
1522
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1523
|
+
// Log the full stack — `logger.error` with just the message turned
|
|
1524
|
+
// every "Handler failed" into a guessing game for agent authors.
|
|
1525
|
+
// Stack tells you which import/typo/access chain blew up.
|
|
1526
|
+
logger.error('Handler failed', {
|
|
1527
|
+
tool: toolName,
|
|
1528
|
+
handler: handlerKey,
|
|
1529
|
+
error: reason,
|
|
1530
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
1531
|
+
});
|
|
1532
|
+
return finalize((0, errors_1.adcpError)('SERVICE_UNAVAILABLE', {
|
|
1533
|
+
// Include the cause message directly in the response text when
|
|
1534
|
+
// `exposeErrorDetails` is on. The opaque
|
|
1535
|
+
// "Tool X encountered an internal error" string cost us weeks
|
|
1536
|
+
// of diagnostic time on the matrix harness — dev callers want
|
|
1537
|
+
// the real reason at the call site, not hidden in server logs.
|
|
1538
|
+
message: exposeErrorDetails
|
|
1539
|
+
? `Tool ${toolName} handler threw: ${reason}`
|
|
1540
|
+
: `Tool ${toolName} encountered an internal error`,
|
|
1541
|
+
...(exposeErrorDetails && { details: { reason, handler: handlerKey } }),
|
|
1542
|
+
}));
|
|
1543
|
+
}
|
|
1544
|
+
};
|
|
1545
|
+
// Register a PASSTHROUGH input schema (#909). The MCP SDK's Zod
|
|
1546
|
+
// validator only fires on the MCP transport — A2A calls the
|
|
1547
|
+
// handler via AdcpServer.invoke(), bypassing it. Registering the
|
|
1548
|
+
// real per-tool Zod schema meant MCP and A2A produced different
|
|
1549
|
+
// verdicts and different error shapes for the same malformed
|
|
1550
|
+
// request. Our framework request validator (AJV, loaded from
|
|
1551
|
+
// schemas/cache/<version>/) runs inside the handler closure on
|
|
1552
|
+
// BOTH transports and produces a structured adcp_error envelope;
|
|
1553
|
+
// make it authoritative.
|
|
1554
|
+
//
|
|
1555
|
+
// Passthrough (not omit): the SDK's `validateToolInput` returns
|
|
1556
|
+
// `undefined` when `inputSchema` is absent (see @modelcontextprotocol/sdk
|
|
1557
|
+
// server/mcp.js), and passes that `undefined` verbatim to the
|
|
1558
|
+
// handler — destroying the actual arguments. `z.object({}).passthrough()`
|
|
1559
|
+
// keeps every key intact, so args still reach the closure.
|
|
1560
|
+
//
|
|
1561
|
+
// Trade-off: MCP `tools/list` publishes `{ type: 'object' }` for
|
|
1562
|
+
// every tool (no per-tool parameter schema). This is intentional,
|
|
1563
|
+
// not a wiring gap — inlining ~50 full request schemas in
|
|
1564
|
+
// `tools/list` would balloon the context window for LLM consumers,
|
|
1565
|
+
// who are the primary readers of MCP discovery. Tool shapes live
|
|
1566
|
+
// in `docs/llms.txt`, the SKILL.md files, and `schemas/cache/`,
|
|
1567
|
+
// which curated agents read on demand instead of paying the cost
|
|
1568
|
+
// every connection. AdCP-native discovery via `get_adcp_capabilities`
|
|
1569
|
+
// already works over both transports; upstream #3057 proposes a
|
|
1570
|
+
// `get_schema` capability tool for programmatic per-tool shape
|
|
1571
|
+
// discovery.
|
|
1572
|
+
//
|
|
1573
|
+
// Implication for downstream consumers: if you need a tool's shape
|
|
1574
|
+
// (cross-version field-stripping, gating, validation), read raw
|
|
1575
|
+
// JSON from `schemas/cache/{version}/` via `schema-loader.ts` —
|
|
1576
|
+
// see `schemaAllowsTopLevelField` for the canonical pattern (#940).
|
|
1577
|
+
// Don't try to recover the shape from `tools/list`; it's empty by
|
|
1578
|
+
// design and will fail open.
|
|
1579
|
+
server.registerTool(toolName, {
|
|
1580
|
+
inputSchema: PASSTHROUGH_INPUT_SCHEMA,
|
|
1581
|
+
...(meta?.annotations != null && { annotations: meta.annotations }),
|
|
1582
|
+
}, toolHandler);
|
|
1583
|
+
registeredToolNames.add(toolName);
|
|
1584
|
+
}
|
|
1585
|
+
}
|
|
1586
|
+
// ─── Custom tools ──────────────────────────────────────────
|
|
1587
|
+
// Seller extensions outside AdcpToolMap. No idempotency / governance /
|
|
1588
|
+
// response-wrapping — handlers own those concerns directly. Registered
|
|
1589
|
+
// after spec tools so the collision check can authoritatively block
|
|
1590
|
+
// overlap with framework-owned names.
|
|
1591
|
+
if (config.customTools) {
|
|
1592
|
+
const customNames = Object.keys(config.customTools);
|
|
1593
|
+
for (const customName of customNames) {
|
|
1594
|
+
if (registeredToolNames.has(customName)) {
|
|
1595
|
+
throw new Error(`createAdcpServer: customTools["${customName}"] collides with a framework-registered tool. ` +
|
|
1596
|
+
`Rename the custom tool or remove the handler from the conflicting domain group.`);
|
|
1597
|
+
}
|
|
1598
|
+
if (customName === 'get_adcp_capabilities') {
|
|
1599
|
+
throw new Error(`createAdcpServer: customTools["get_adcp_capabilities"] is not allowed. ` +
|
|
1600
|
+
`The framework auto-generates this tool from registered handlers and capability config.`);
|
|
1601
|
+
}
|
|
1602
|
+
const custom = config.customTools[customName];
|
|
1603
|
+
if (!custom)
|
|
1604
|
+
continue;
|
|
1605
|
+
const { description, title, inputSchema, outputSchema, annotations, handler } = custom;
|
|
1606
|
+
server.registerTool(customName, {
|
|
1607
|
+
...(description != null && { description }),
|
|
1608
|
+
...(title != null && { title }),
|
|
1609
|
+
...(inputSchema != null && { inputSchema }),
|
|
1610
|
+
...(outputSchema != null && { outputSchema }),
|
|
1611
|
+
...(annotations != null && { annotations }),
|
|
1612
|
+
}, handler);
|
|
1613
|
+
registeredToolNames.add(customName);
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
// Tool coherence warnings
|
|
1617
|
+
checkCoherence(registeredToolNames, logger);
|
|
1618
|
+
// --- Idempotency configuration guardrails ---
|
|
1619
|
+
//
|
|
1620
|
+
// A seller that registers mutating handlers but doesn't supply an
|
|
1621
|
+
// `idempotency` store cannot honor the v3 retry contract: buyer
|
|
1622
|
+
// retries will double-book because there's no replay cache. The
|
|
1623
|
+
// framework logs a loud error at server-creation time so operators
|
|
1624
|
+
// notice before shipping to production, but doesn't throw — that
|
|
1625
|
+
// would make the framework unusable in testing contexts where
|
|
1626
|
+
// idempotency isn't the unit-under-test. Operators who've thought
|
|
1627
|
+
// about it can suppress the error by setting
|
|
1628
|
+
// `capabilities.idempotency.replay_ttl_seconds` directly.
|
|
1629
|
+
const registeredMutatingTools = [...registeredToolNames].filter(t => idempotency_1.MUTATING_TASKS.has(t));
|
|
1630
|
+
if (registeredMutatingTools.length > 0 &&
|
|
1631
|
+
!idempotency &&
|
|
1632
|
+
!idempotencyDisabled &&
|
|
1633
|
+
!capConfig?.idempotency?.replay_ttl_seconds) {
|
|
1634
|
+
logger.error(`createAdcpServer: ${registeredMutatingTools.length} mutating tools registered ` +
|
|
1635
|
+
`(${registeredMutatingTools.slice(0, 3).join(', ')}${registeredMutatingTools.length > 3 ? ', ...' : ''}) without an idempotency store. AdCP v3 requires sellers to support idempotent replay ` +
|
|
1636
|
+
`on mutating requests — buyer retries will double-book without it. ` +
|
|
1637
|
+
`Pass \`idempotency: createIdempotencyStore({ backend, ttlSeconds })\`, ` +
|
|
1638
|
+
`or set \`capabilities.idempotency.replay_ttl_seconds\` to acknowledge the non-compliance.`);
|
|
1639
|
+
}
|
|
1640
|
+
// MUTATING_TASKS is derived at module load by introspecting Zod
|
|
1641
|
+
// schemas. If Zod's internals change or the tool-request-schemas map
|
|
1642
|
+
// shifts, the derivation can silently return an empty set — which
|
|
1643
|
+
// would make every mutating request bypass idempotency enforcement.
|
|
1644
|
+
// Fail loud at server startup if the introspection produced
|
|
1645
|
+
// surprisingly few results.
|
|
1646
|
+
if (idempotency_1.MUTATING_TASKS.size < 20) {
|
|
1647
|
+
throw new Error(`createAdcpServer: MUTATING_TASKS set has only ${idempotency_1.MUTATING_TASKS.size} entries — expected at least 20. ` +
|
|
1648
|
+
`Schema introspection likely broke (Zod upgrade? tool-request-schemas change?). ` +
|
|
1649
|
+
`Check \`src/lib/utils/idempotency.ts:deriveMutatingTasks\`.`);
|
|
1650
|
+
}
|
|
1651
|
+
// --- Auto-register get_adcp_capabilities ---
|
|
1652
|
+
const protocols = detectProtocols([...registeredToolNames]);
|
|
1653
|
+
// Idempotency capability declaration. Spec defines a discriminated
|
|
1654
|
+
// union (`get-adcp-capabilities-response.json` `adcp.idempotency.oneOf`):
|
|
1655
|
+
// - `IdempotencySupported` → `{ supported: true, replay_ttl_seconds: N }`
|
|
1656
|
+
// - `IdempotencyUnsupported` → `{ supported: false }` (replay_ttl_seconds MUST be absent)
|
|
1657
|
+
// Disabled mode flips to `IdempotencyUnsupported` so the wire contract
|
|
1658
|
+
// matches actual behavior — buyers reading capabilities can fall back to
|
|
1659
|
+
// natural-key dedup before retrying spend-committing operations. Lying
|
|
1660
|
+
// here (declaring `supported: true` while skipping replay) is a
|
|
1661
|
+
// money-flow footgun: a 504-retry under the same key double-books.
|
|
1662
|
+
const idempotencyCapability = idempotencyDisabled
|
|
1663
|
+
? { supported: false }
|
|
1664
|
+
: {
|
|
1665
|
+
supported: true,
|
|
1666
|
+
replay_ttl_seconds: clampReplayTtl(capConfig?.idempotency?.replay_ttl_seconds ?? idempotency?.ttlSeconds ?? 86400),
|
|
1667
|
+
};
|
|
1668
|
+
const capabilitiesData = {
|
|
1669
|
+
adcp: {
|
|
1670
|
+
major_versions: capConfig?.major_versions ?? [3],
|
|
1671
|
+
idempotency: idempotencyCapability,
|
|
1672
|
+
},
|
|
1673
|
+
supported_protocols: protocols,
|
|
1674
|
+
};
|
|
1675
|
+
if (protocols.includes('media_buy') || capConfig?.features) {
|
|
1676
|
+
capabilitiesData.media_buy = {
|
|
1677
|
+
features: {
|
|
1678
|
+
inline_creative_management: capConfig?.features?.inlineCreativeManagement ?? false,
|
|
1679
|
+
property_list_filtering: capConfig?.features?.propertyListFiltering ?? false,
|
|
1680
|
+
content_standards: capConfig?.features?.contentStandards ?? false,
|
|
1681
|
+
conversion_tracking: capConfig?.features?.conversionTracking ?? false,
|
|
1682
|
+
audience_targeting: capConfig?.features?.audienceTargeting ?? false,
|
|
1683
|
+
},
|
|
1684
|
+
...(capConfig?.portfolio && { portfolio: capConfig.portfolio }),
|
|
1685
|
+
};
|
|
1686
|
+
}
|
|
1687
|
+
if (capConfig?.account) {
|
|
1688
|
+
capabilitiesData.account = {
|
|
1689
|
+
require_operator_auth: capConfig.account.requireOperatorAuth ?? false,
|
|
1690
|
+
...(capConfig.account.authorizationEndpoint && {
|
|
1691
|
+
authorization_endpoint: capConfig.account.authorizationEndpoint,
|
|
1692
|
+
}),
|
|
1693
|
+
supported_billing: capConfig.account.supportedBilling ?? [],
|
|
1694
|
+
...(capConfig.account.defaultBilling && { default_billing: capConfig.account.defaultBilling }),
|
|
1695
|
+
required_for_products: capConfig.account.requiredForProducts ?? false,
|
|
1696
|
+
sandbox: capConfig.account.sandbox ?? false,
|
|
1697
|
+
};
|
|
1698
|
+
}
|
|
1699
|
+
if (capConfig?.creative) {
|
|
1700
|
+
capabilitiesData.creative = {
|
|
1701
|
+
supports_compliance: capConfig.creative.supportsCompliance ?? false,
|
|
1702
|
+
has_creative_library: capConfig.creative.hasCreativeLibrary ?? false,
|
|
1703
|
+
supports_generation: capConfig.creative.supportsGeneration ?? false,
|
|
1704
|
+
supports_transformation: capConfig.creative.supportsTransformation ?? false,
|
|
1705
|
+
};
|
|
1706
|
+
}
|
|
1707
|
+
if (capConfig?.extensions_supported?.length) {
|
|
1708
|
+
capabilitiesData.extensions_supported = capConfig.extensions_supported;
|
|
1709
|
+
}
|
|
1710
|
+
if (capConfig?.request_signing) {
|
|
1711
|
+
capabilitiesData.request_signing = capConfig.request_signing;
|
|
1712
|
+
}
|
|
1713
|
+
if (capConfig?.specialisms?.length) {
|
|
1714
|
+
capabilitiesData.specialisms = capConfig.specialisms;
|
|
1715
|
+
}
|
|
1716
|
+
if (capConfig?.overrides) {
|
|
1717
|
+
applyCapabilityOverrides(capabilitiesData, capConfig.overrides);
|
|
1718
|
+
}
|
|
1719
|
+
// Stamp the SDK version so conformance tooling can surface version-staleness
|
|
1720
|
+
// hints when the agent's reported version predates recommended helpers.
|
|
1721
|
+
// Cast needed because GetAdCPCapabilitiesResponse is generated and lacks
|
|
1722
|
+
// this field; it remains a forward-compatible extension until the spec
|
|
1723
|
+
// formally defines library_version in a future AdCP minor.
|
|
1724
|
+
capabilitiesData.library_version = `@adcp/client@${version_1.LIBRARY_VERSION}`;
|
|
1725
|
+
// Passthrough inputSchema — framework validation is authoritative on
|
|
1726
|
+
// both transports (#909). Same rationale as the domain-tool loop above.
|
|
1727
|
+
server.registerTool('get_adcp_capabilities', {
|
|
1728
|
+
inputSchema: PASSTHROUGH_INPUT_SCHEMA,
|
|
1729
|
+
annotations: { readOnlyHint: true },
|
|
1730
|
+
}, (async (params) => {
|
|
1731
|
+
const data = { ...capabilitiesData };
|
|
1732
|
+
const ctx = params?.context;
|
|
1733
|
+
if (ctx !== null && typeof ctx === 'object' && !Array.isArray(ctx)) {
|
|
1734
|
+
data.context = ctx;
|
|
1735
|
+
}
|
|
1736
|
+
return (0, responses_1.capabilitiesResponse)(data);
|
|
1737
|
+
}));
|
|
1738
|
+
const compliance = {
|
|
1739
|
+
async reset({ force = false, allowProduction = false, } = {}) {
|
|
1740
|
+
// Check NODE_ENV BEFORE store-shape probes: the environment guard
|
|
1741
|
+
// is the strongest signal that "this is not a test harness." An
|
|
1742
|
+
// operator who reached this call in production by mistake hits the
|
|
1743
|
+
// env gate regardless of which backend they wired.
|
|
1744
|
+
if (!allowProduction && process.env.NODE_ENV === 'production') {
|
|
1745
|
+
throw new Error('AdcpServer.compliance.reset: refused to run with NODE_ENV=production. ' +
|
|
1746
|
+
'Pass `{ allowProduction: true }` if you deliberately set NODE_ENV=production in a test environment, ' +
|
|
1747
|
+
'or unset NODE_ENV before running storyboards.');
|
|
1748
|
+
}
|
|
1749
|
+
// Positive allowlist for stores, not method-presence. A
|
|
1750
|
+
// PostgresStateStore might expose `.clear()` for its own test
|
|
1751
|
+
// utility needs — we don't want method-existence alone to permit
|
|
1752
|
+
// a flush that would take out a shared test cluster. `force: true`
|
|
1753
|
+
// is the documented opt-in for non-memory backends.
|
|
1754
|
+
const stateStoreIsMemory = stateStore instanceof state_store_1.InMemoryStateStore;
|
|
1755
|
+
const idempotencyIsFlushable = !idempotency || hasIdempotencyClearAll(idempotency);
|
|
1756
|
+
if (!force) {
|
|
1757
|
+
if (!stateStoreIsMemory) {
|
|
1758
|
+
throw new Error('AdcpServer.compliance.reset: configured stateStore is not InMemoryStateStore. ' +
|
|
1759
|
+
'Pass `{ force: true }` to acknowledge that flushing the configured backend is safe for this environment ' +
|
|
1760
|
+
'(e.g., a disposable test Postgres).');
|
|
1761
|
+
}
|
|
1762
|
+
if (!idempotencyIsFlushable) {
|
|
1763
|
+
throw new Error('AdcpServer.compliance.reset: configured idempotency backend does not expose `clearAll()`. ' +
|
|
1764
|
+
'Use `memoryBackend()` for test harnesses, or pass `{ force: true }` to skip idempotency flush.');
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1767
|
+
// `force` bypasses the allowlist checks but never the flush
|
|
1768
|
+
// itself — if we reached here, the caller wants the flush to
|
|
1769
|
+
// happen. `clear()` is only called when the store exposes it;
|
|
1770
|
+
// a store without `clear()` reaching here under `force: true`
|
|
1771
|
+
// is a no-op for the state side, which matches the shape the
|
|
1772
|
+
// caller opted into.
|
|
1773
|
+
const storeWithClear = stateStore;
|
|
1774
|
+
if (typeof storeWithClear.clear === 'function')
|
|
1775
|
+
storeWithClear.clear();
|
|
1776
|
+
if (idempotency && idempotency.clearAll)
|
|
1777
|
+
await idempotency.clearAll();
|
|
1778
|
+
},
|
|
1779
|
+
};
|
|
1780
|
+
// Throws ConfigurationError on cross-major pin. See utils/adcp-version-config.ts.
|
|
1781
|
+
const adcpVersion = (0, adcp_version_config_1.resolveAdcpVersion)(configuredAdcpVersion);
|
|
1782
|
+
const wrapped = (0, adcp_server_1.wrapMcpServer)(server, compliance, adcpVersion);
|
|
1783
|
+
// Attach the auto-wired preTransport so `serve()` mounts the verifier
|
|
1784
|
+
// on the HTTP transport. Stashed under a non-enumerable symbol property
|
|
1785
|
+
// on the wrapper — it's a private contract between this function and
|
|
1786
|
+
// `serve()` for wiring, not part of the AdcpServer public API.
|
|
1787
|
+
if (signedRequests) {
|
|
1788
|
+
const preTransport = buildSignedRequestsPreTransport(signedRequests, capConfig?.request_signing?.required_for);
|
|
1789
|
+
Object.defineProperty(wrapped, exports.ADCP_PRE_TRANSPORT, {
|
|
1790
|
+
value: preTransport,
|
|
1791
|
+
enumerable: false,
|
|
1792
|
+
writable: false,
|
|
1793
|
+
configurable: true,
|
|
1794
|
+
});
|
|
1795
|
+
}
|
|
1796
|
+
const signedRequestsState = {
|
|
1797
|
+
autoWired: Boolean(signedRequests),
|
|
1798
|
+
specialismClaimed: claimsSignedRequests,
|
|
1799
|
+
capabilitySupported: capConfig?.request_signing?.supported === true,
|
|
1800
|
+
mismatch: claimsSignedRequests && !signedRequests ? 'claim_without_config' : 'ok',
|
|
1801
|
+
};
|
|
1802
|
+
Object.defineProperty(wrapped, exports.ADCP_SIGNED_REQUESTS_STATE, {
|
|
1803
|
+
value: signedRequestsState,
|
|
1804
|
+
enumerable: false,
|
|
1805
|
+
configurable: true,
|
|
1806
|
+
writable: false,
|
|
1807
|
+
});
|
|
1808
|
+
Object.defineProperty(wrapped, adcp_server_1.ADCP_STATE_STORE, {
|
|
1809
|
+
value: stateStore,
|
|
1810
|
+
enumerable: false,
|
|
1811
|
+
configurable: true,
|
|
1812
|
+
writable: false,
|
|
1813
|
+
});
|
|
1814
|
+
// Expose the capabilitiesData object so post-registration helpers
|
|
1815
|
+
// (registerTestController) can add spec-defined capability blocks
|
|
1816
|
+
// — comply_test_controller is registered AFTER createAdcpServer,
|
|
1817
|
+
// so the compliance_testing block can't be emitted eagerly.
|
|
1818
|
+
Object.defineProperty(wrapped, adcp_server_1.ADCP_CAPABILITIES, {
|
|
1819
|
+
value: capabilitiesData,
|
|
1820
|
+
enumerable: false,
|
|
1821
|
+
configurable: true,
|
|
1822
|
+
writable: false,
|
|
1823
|
+
});
|
|
1824
|
+
logger.info('AdCP server created', {
|
|
1825
|
+
tools: [...registeredToolNames],
|
|
1826
|
+
protocols,
|
|
1827
|
+
signedRequests: signedRequestsState,
|
|
1828
|
+
});
|
|
1829
|
+
return wrapped;
|
|
1830
|
+
}
|
|
1831
|
+
//# sourceMappingURL=create-adcp-server.js.map
|