@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,1407 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: build-seller-agent
|
|
3
|
+
description: Use when building an AdCP seller agent — a publisher, SSP, or retail media network that sells advertising inventory to buyer agents.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Build a Seller Agent
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
A seller agent receives briefs from buyers, returns products with pricing, accepts media buys, manages creatives, and reports delivery. The business model — what you sell, how you price it, and whether humans approve deals — shapes every implementation decision. Determine that first.
|
|
11
|
+
|
|
12
|
+
## When to Use
|
|
13
|
+
|
|
14
|
+
- User wants to build an agent that sells ad inventory
|
|
15
|
+
- User mentions publisher, SSP, retail media, or media network in the context of AdCP
|
|
16
|
+
- User references `get_products`, `create_media_buy`, or the media buy protocol
|
|
17
|
+
|
|
18
|
+
**Not this skill:**
|
|
19
|
+
|
|
20
|
+
- Buying ad inventory → that's a buyer/DSP agent (see `docs/getting-started.md`)
|
|
21
|
+
- Serving audience segments → `skills/build-signals-agent/`
|
|
22
|
+
- Rendering creatives from briefs → that's a creative agent
|
|
23
|
+
|
|
24
|
+
## <a name="the-baseline-what-every-sales--agent-must-implement"></a>The baseline: what every sales-\* agent MUST implement
|
|
25
|
+
|
|
26
|
+
Every sales-_ specialism (including `sales-social`, `sales-broadcast-tv`, `sales-retail-media`, `sales-catalog-driven`, etc.) is **additive on top of this baseline**. If you claim any `sales-_` specialism, you implement these tools regardless of the specialism-specific deltas below.
|
|
27
|
+
|
|
28
|
+
**Required tools** (tested by the `media_buy_seller` storyboard bundle at `compliance/cache/3.0.0/protocols/media-buy/`):
|
|
29
|
+
|
|
30
|
+
| Tool | Purpose | `createAdcpServer` group |
|
|
31
|
+
| ------------------------ | ---------------------------------------------------------------------------------- | ------------------------ |
|
|
32
|
+
| `get_adcp_capabilities` | Declare protocols + specialisms + features | auto (framework) |
|
|
33
|
+
| `sync_accounts` | Advertiser onboarding, per-tenant account creation | `accounts` |
|
|
34
|
+
| `list_accounts` | Account lookup by brand/operator; buyers listing their accounts on your platform | `accounts` |
|
|
35
|
+
| `get_products` | Product catalog discovery from a brief; returns `{ products: [...] }` | `mediaBuy` |
|
|
36
|
+
| `list_creative_formats` | Formats your agent accepts | `mediaBuy` |
|
|
37
|
+
| `create_media_buy` | Accept a campaign with packages, budget, flight dates | `mediaBuy` |
|
|
38
|
+
| `update_media_buy` | Bid, budget, status, package mutations over the campaign lifecycle | `mediaBuy` |
|
|
39
|
+
| `get_media_buys` | Read campaigns back with full state (status, budget, packages, targeting overlays) | `mediaBuy` |
|
|
40
|
+
| `sync_creatives` | Accept creative assets and return per-asset status | `mediaBuy` |
|
|
41
|
+
| `list_creatives` | Read the creative library back with pagination | `mediaBuy` |
|
|
42
|
+
| `get_media_buy_delivery` | Delivery + spend reporting with `reporting_period`, per-package billing rows | `mediaBuy` |
|
|
43
|
+
|
|
44
|
+
**Minimum handler skeleton** — every sales-\* seller starts here, then adds specialism-specific behavior on top:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
createAdcpServer({
|
|
48
|
+
name: 'my-seller',
|
|
49
|
+
version: '1.0.0',
|
|
50
|
+
stateStore,
|
|
51
|
+
idempotency: createIdempotencyStore({ backend: memoryBackend() }),
|
|
52
|
+
resolveSessionKey: ctx => ctx.account?.account_id,
|
|
53
|
+
accounts: {
|
|
54
|
+
syncAccounts: async (params, ctx) => { /* … */ },
|
|
55
|
+
listAccounts: async (params, ctx) => { /* … */ },
|
|
56
|
+
},
|
|
57
|
+
mediaBuy: {
|
|
58
|
+
getProducts: async (params, ctx) => { /* … */ },
|
|
59
|
+
listCreativeFormats: async () => ({ formats: [...] }),
|
|
60
|
+
createMediaBuy: async (params, ctx) => { /* … */ },
|
|
61
|
+
updateMediaBuy: async (params, ctx) => { /* … */ },
|
|
62
|
+
getMediaBuys: async (params, ctx) => { /* … */ },
|
|
63
|
+
syncCreatives: async (params, ctx) => { /* … */ },
|
|
64
|
+
listCreatives: async (params, ctx) => { /* … */ },
|
|
65
|
+
getMediaBuyDelivery: async (params, ctx) => { /* … */ },
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
If a specialism's storyboard doesn't exercise one of these tools, the tool is **not optional** — the storyboard is just focused elsewhere (e.g. `sales-social` covers audience sync + DPA + events; the media buy flow itself is covered by `sales-non-guaranteed` or `sales-guaranteed` which you also claim). See § [Tools and Required Response Shapes](#tools-and-required-response-shapes) below for the exact response shape each tool must return.
|
|
71
|
+
|
|
72
|
+
## Specialisms This Skill Covers
|
|
73
|
+
|
|
74
|
+
Your compliance obligations come from the specialisms you claim in `get_adcp_capabilities`. Each specialism has a storyboard bundle at `compliance/cache/latest/specialisms/<id>/` that the AAO compliance runner executes. Pick one or more.
|
|
75
|
+
|
|
76
|
+
**Specialisms are additive on top of [the baseline](#the-baseline-what-every-sales--agent-must-implement).** A specialism's storyboard exercises the ADDITIONAL behaviors it requires; it does not displace the baseline 11-tool surface above. If the storyboard skips a baseline tool (because that tool is already covered by `sales-non-guaranteed` / `sales-guaranteed`), that doesn't mean the tool is optional for your agent — it means the test is focused elsewhere. Check the storyboard's `agent.capabilities` — if it lists `sells_media` / `accepts_briefs`, the baseline still applies.
|
|
77
|
+
|
|
78
|
+
**Claim multiple specialisms.** A typical social seller claims `sales-non-guaranteed` + `sales-social`. A typical broadcast seller claims `sales-guaranteed` + `sales-broadcast-tv`. A typical social seller doing audience sync claims `sales-non-guaranteed` + `sales-social` + `audience-sync`.
|
|
79
|
+
|
|
80
|
+
| Specialism | Status | Delta from baseline | See |
|
|
81
|
+
| ---------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
|
|
82
|
+
| `sales-guaranteed` | stable | IO approval is **task-layer**, not MediaBuy-layer. Return a task envelope (MCP Tasks SDK) with `status: 'submitted'` + `task_id` + `message`. Do NOT return `media_buy_id` or `packages` yet — those land on the final artifact when the task completes. There is no `pending_approval` MediaBuy status. | [§ sales-guaranteed](#specialism-sales-guaranteed) |
|
|
83
|
+
| `sales-non-guaranteed` | stable | Instant `status: 'active'` with `confirmed_at`; accept `bid_price` on packages; expose `update_media_buy` for bid/budget changes | [§ sales-non-guaranteed](#specialism-sales-non-guaranteed) |
|
|
84
|
+
| `sales-broadcast-tv` | stable | Top-level `agency_estimate_number`; per-package `measurement_terms.billing_measurement`; Ad-ID `industry_identifiers` on creatives; `measurement_windows` (Live/C3/C7) on delivery | [§ sales-broadcast-tv](#specialism-sales-broadcast-tv) |
|
|
85
|
+
| `sales-streaming-tv` | preview | v3.1 placeholder (empty `phases`) — ship the baseline, declare `channels: ['ctv'] as const` on products | Baseline only |
|
|
86
|
+
| `sales-social` | stable | **Additive**: baseline `get_products` + `create_media_buy` still apply (Snap/Meta/TikTok all have product catalogs and campaigns). Adds `sync_audiences` (audience push), `sync_creatives` (native formats), `sync_catalogs` (dynamic product ads), `log_event` (conversion tracking), `get_account_financials` (prepaid-balance monitoring), and `sync_accounts` with `account_scope`/`payment_terms`/`setup` for advertiser onboarding. Declare `sales-social` **alongside** `sales-non-guaranteed` (or `-guaranteed`) — don't replace it. | [§ sales-social](#specialism-sales-social) |
|
|
87
|
+
| `sales-exchange` | preview | v3.1 placeholder — target `sales-non-guaranteed` baseline; PMP / deal IDs / auction transparency pending | Baseline only |
|
|
88
|
+
| `sales-proposal-mode` | stable | `get_products` returns `proposals[]` with `budget_allocations`; handle `buying_mode: 'refine'`; accept via `create_media_buy` with `proposal_id` + `total_budget` and no `packages` | [§ sales-proposal-mode](#specialism-sales-proposal-mode) |
|
|
89
|
+
| `audience-sync` | stable | Track: `audiences`. Implement `sync_audiences` (handles discovery, add, and delete) and `list_accounts`. Hashed identifiers (SHA-256 lowercased+trimmed). Match-rate telemetry on response. | [§ audience-sync](#specialism-audience-sync) |
|
|
90
|
+
| `signed-requests` | preview | RFC 9421 HTTP Signature verification on mutating requests. Advertise `request_signing.supported: true` in capabilities; graded against conformance vectors — positive vectors must produce non-4xx; negative vectors must return `401` with `WWW-Authenticate: Signature error="<code>"` matching the vector's `expected_outcome.error_code` byte-for-byte. | [§ signed-requests](#specialism-signed-requests) |
|
|
91
|
+
|
|
92
|
+
**Not in this skill:** `sales-catalog-driven` and `sales-retail-media` (both in `skills/build-retail-media-agent/` — catalog-driven applies to restaurants, travel, and local commerce too, not only retail).
|
|
93
|
+
|
|
94
|
+
Specialism ID (kebab-case) = storyboard directory. The storyboard's `id:` field (snake_case, e.g. `media_buy_broadcast_seller`) is the category name, not the specialism name. One specialism can apply to multiple product lines — a seller with both CTV inventory and broadcast TV inventory can claim `sales-streaming-tv` and `sales-broadcast-tv` simultaneously.
|
|
95
|
+
|
|
96
|
+
## Protocol-Wide Requirements (AdCP 3.0 GA)
|
|
97
|
+
|
|
98
|
+
Three requirements apply to **every** production seller, regardless of which specialism you claim. Don't reinvent any of them — the SDK provides helpers for each.
|
|
99
|
+
|
|
100
|
+
### `idempotency_key` is required on every mutating request
|
|
101
|
+
|
|
102
|
+
`create_media_buy`, `update_media_buy`, `sync_accounts`, `sync_creatives`, `sync_audiences`, `sync_catalogs`, `sync_event_sources`, `provide_performance_feedback` — every mutating call carries a client-supplied `idempotency_key`. Wire `createIdempotencyStore` into `createAdcpServer({ idempotency })` and the framework handles replay detection, payload-hash conflict (`IDEMPOTENCY_CONFLICT`), expiry (`IDEMPOTENCY_EXPIRED`), and in-flight parallelism. Don't implement this in handler code. See [§ Idempotency](#idempotency) below for the full wire-up.
|
|
103
|
+
|
|
104
|
+
### Authentication is mandatory
|
|
105
|
+
|
|
106
|
+
An agent that accepts unauthenticated requests is non-compliant — the universal `security_baseline` storyboard enforces this. Wire `serve({ authenticate })` with `verifyApiKey`, `verifyBearer`, or `anyOf(...)` before you claim any specialism. See [§ Protecting your agent](#protecting-your-agent) below.
|
|
107
|
+
|
|
108
|
+
### Don't break when RFC 9421 Signature headers arrive
|
|
109
|
+
|
|
110
|
+
Even if you don't claim `signed-requests`, a buyer may send `Signature-Input` / `Signature` headers. Your MCP transport must pass the request through without rejecting it. If you do claim the specialism, verify per [§ signed-requests](#specialism-signed-requests) below.
|
|
111
|
+
|
|
112
|
+
### Resolve-then-authorize — uniform errors for not-found / not-yours
|
|
113
|
+
|
|
114
|
+
AdCP spec § error-handling MUSTs that you return **byte-equivalent responses** for "the id exists but the caller lacks access" vs "the id does not exist." Distinguishing the two leaks cross-tenant existence information — an attacker who learns that `mb_0x1234` returns `PERMISSION_DENIED` while `mb_0xabcd` returns `REFERENCE_NOT_FOUND` can enumerate every live id across every tenant you host.
|
|
115
|
+
|
|
116
|
+
The rule applies to every observable channel: `error.code` / `message` / `field` / `details`, HTTP status, A2A `task.status.state`, MCP `isError`, response headers (`ETag`, `Cache-Control`, rate-limit, CDN tags), webhook/audit dispatch, logs with tenant correlation, same work on both paths.
|
|
117
|
+
|
|
118
|
+
**How to get it right:**
|
|
119
|
+
|
|
120
|
+
- Both paths return `REFERENCE_NOT_FOUND` (or the domain-specific `*_NOT_FOUND` code). Never `PERMISSION_DENIED` or `FORBIDDEN` on an id lookup.
|
|
121
|
+
- Don't echo the probed id in `error.details` — or echo it in both paths identically.
|
|
122
|
+
- Route both paths through the same response constructor so headers (including `ETag`, `Cache-Control`) are set identically.
|
|
123
|
+
- Do the same work on both paths: don't short-circuit on "id format invalid" with a faster path — an attacker will measure latency and notice.
|
|
124
|
+
|
|
125
|
+
`adcp fuzz` runs a paired-probe invariant that enforces this automatically. Pass two test tenants via `--auth-token` + `--auth-token-cross-tenant` for full coverage (see [VALIDATE-YOUR-AGENT.md § Uniform-error-response invariant](../../docs/guides/VALIDATE-YOUR-AGENT.md#uniform-error-response-invariant-paired-probe)). The invariant fails loudly with a byte-level diff pointing at the offending channel.
|
|
126
|
+
|
|
127
|
+
<a name="composing-oauth-signing-and-idempotency"></a>
|
|
128
|
+
|
|
129
|
+
### Composing OAuth, signing, and idempotency
|
|
130
|
+
|
|
131
|
+
Each concern above is straightforward in isolation. The pitfalls are at their boundaries. A production seller that claims both `sales-guaranteed` and `signed-requests` and sits behind OAuth wires them through `serve()`'s composition hooks — not external Express middleware.
|
|
132
|
+
|
|
133
|
+
**The pipeline.** `serve({ authenticate, preTransport })` runs steps in this order and buffers the request body into `req.rawBody` so the signature verifier can hash it without racing the MCP transport:
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { serve } from '@adcp/sdk';
|
|
137
|
+
// verifyBearer / verifyApiKey / anyOf live on the server subpath, not the root barrel:
|
|
138
|
+
import { verifyBearer } from '@adcp/sdk/server';
|
|
139
|
+
// Low-level verifier is preTransport-shaped: use it instead of createExpressVerifier
|
|
140
|
+
// (which is Express (req, res, next) middleware and won't type-check against preTransport):
|
|
141
|
+
import {
|
|
142
|
+
verifyRequestSignature,
|
|
143
|
+
RequestSignatureError,
|
|
144
|
+
StaticJwksResolver,
|
|
145
|
+
InMemoryReplayStore,
|
|
146
|
+
InMemoryRevocationStore,
|
|
147
|
+
type VerifierCapability,
|
|
148
|
+
} from '@adcp/sdk/signing/server';
|
|
149
|
+
|
|
150
|
+
const capability: VerifierCapability = {
|
|
151
|
+
supported: true,
|
|
152
|
+
required_for: ['create_media_buy', 'update_media_buy', 'acquire_rights'],
|
|
153
|
+
supported_for: ['sync_creatives', 'sync_audiences', 'sync_accounts'],
|
|
154
|
+
covers_content_digest: 'required',
|
|
155
|
+
};
|
|
156
|
+
const jwks = new StaticJwksResolver([
|
|
157
|
+
// JWKs array — each must carry its own `kid`.
|
|
158
|
+
]);
|
|
159
|
+
const replayStore = new InMemoryReplayStore();
|
|
160
|
+
const revocationStore = new InMemoryRevocationStore({
|
|
161
|
+
issuer: 'https://seller.example.com/mcp',
|
|
162
|
+
updated: new Date().toISOString(),
|
|
163
|
+
next_update: new Date(Date.now() + 24 * 3600_000).toISOString(),
|
|
164
|
+
revoked_kids: [],
|
|
165
|
+
revoked_jtis: [],
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
serve(createAgent, {
|
|
169
|
+
publicUrl: 'https://seller.example.com/mcp',
|
|
170
|
+
|
|
171
|
+
// 1. authenticate runs first. Bad/missing bearer → 401 Bearer challenge.
|
|
172
|
+
// serve() populates extra.authInfo, which createAdcpServer surfaces as ctx.authInfo.
|
|
173
|
+
authenticate: verifyBearer({
|
|
174
|
+
jwksUri: 'https://auth.example.com/.well-known/jwks.json',
|
|
175
|
+
issuer: 'https://auth.example.com',
|
|
176
|
+
audience: 'https://seller.example.com/mcp',
|
|
177
|
+
requiredScopes: ['adcp:seller'],
|
|
178
|
+
}),
|
|
179
|
+
protectedResource: { authorization_servers: ['https://auth.example.com'] },
|
|
180
|
+
|
|
181
|
+
// 2. preTransport: raw http (req, res) => Promise<boolean>. Verify the
|
|
182
|
+
// RFC 9421 signature here, using req.rawBody pre-buffered by serve().
|
|
183
|
+
// Return true only if you wrote the response yourself; return false to
|
|
184
|
+
// continue into MCP dispatch. Throwing produces a generic 500.
|
|
185
|
+
preTransport: async (req, res) => {
|
|
186
|
+
try {
|
|
187
|
+
await verifyRequestSignature(
|
|
188
|
+
{ method: req.method!, url: req.url!, headers: req.headers, body: req.rawBody ?? '' },
|
|
189
|
+
{
|
|
190
|
+
capability,
|
|
191
|
+
jwks,
|
|
192
|
+
replayStore,
|
|
193
|
+
revocationStore,
|
|
194
|
+
operation: resolveOperation(req), // your function: extract the AdCP operation name from the request
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
} catch (err) {
|
|
198
|
+
if (err instanceof RequestSignatureError) {
|
|
199
|
+
res.statusCode = 401;
|
|
200
|
+
res.setHeader('WWW-Authenticate', `Signature error="${err.code}"`);
|
|
201
|
+
res.end();
|
|
202
|
+
return true; // handled
|
|
203
|
+
}
|
|
204
|
+
throw err;
|
|
205
|
+
}
|
|
206
|
+
return false; // continue to MCP dispatch
|
|
207
|
+
},
|
|
208
|
+
|
|
209
|
+
// 3. MCP transport parses JSON and dispatches to createAdcpServer.
|
|
210
|
+
// 4. Framework applies the idempotency store per handler — you don't mount it.
|
|
211
|
+
});
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Principal threading.** `resolveSessionKey(ctx)` receives only `{toolName, params, account}` — no auth info. To compose the OAuth subject into the idempotency key you need `resolveIdempotencyPrincipal`, which receives the full `HandlerContext` including `ctx.authInfo` (populated by `verifyBearer` through MCP's `extra.authInfo`):
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
createAdcpServer({
|
|
218
|
+
// ...
|
|
219
|
+
// SessionKeyContext has no authInfo — use this for coarse per-account scoping:
|
|
220
|
+
resolveSessionKey: ctx => ctx.account?.id,
|
|
221
|
+
|
|
222
|
+
// HandlerContext has authInfo — use this when the idempotency namespace must
|
|
223
|
+
// be scoped to the authenticated principal:
|
|
224
|
+
resolveIdempotencyPrincipal: ctx => {
|
|
225
|
+
const clientId = ctx.authInfo?.clientId;
|
|
226
|
+
if (!clientId)
|
|
227
|
+
throw new Error('unauthenticated request reached idempotency scope — check authenticate is configured');
|
|
228
|
+
// Multi-tenant AS: if the JWT carries a tenant claim, verifyBearer surfaces
|
|
229
|
+
// it in ctx.authInfo.extra. Compose so sub collisions across tenants don't
|
|
230
|
+
// share a replay namespace:
|
|
231
|
+
const tenant = ctx.authInfo?.extra?.tenant_id as string | undefined;
|
|
232
|
+
return tenant ? `${tenant}:${clientId}` : clientId;
|
|
233
|
+
},
|
|
234
|
+
});
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
Composing the verified signing `keyid` in is possible but lives outside the handler context: the signing middleware stashes it on `req.verifiedSigner.keyid` (raw HTTP request), which doesn't flow into `HandlerContext` by default. Either accept that the idempotency namespace is OAuth-principal-only (most setups), or write a custom `authenticate` that promotes the verified keyid into `authInfo.extra` so your `resolveIdempotencyPrincipal` can read it uniformly.
|
|
238
|
+
|
|
239
|
+
**401 disambiguation.** A request can fail both OAuth and signature verification. Per RFC 7235 you can emit multiple `WWW-Authenticate` challenges — order them so the client's most promising next step is first. OAuth's Bearer challenge always fires first (the client can't sign correctly until it has a valid identity); Signature challenge only fires when the request is authenticated but signed wrong.
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
// Inside preTransport, after a RequestSignatureError is raised on an authenticated request:
|
|
243
|
+
res.statusCode = 401;
|
|
244
|
+
res.setHeader(
|
|
245
|
+
'WWW-Authenticate',
|
|
246
|
+
[
|
|
247
|
+
// If the bearer also failed, the Bearer challenge would have been emitted by `authenticate`
|
|
248
|
+
// before preTransport ran — you only reach this branch on authenticated-but-bad-signature.
|
|
249
|
+
`Signature error="${err.code}"`,
|
|
250
|
+
// If you want to emit both (e.g., you implement your own authenticator that doesn't
|
|
251
|
+
// short-circuit on missing bearer), the Bearer challenge goes first:
|
|
252
|
+
// 'Bearer error="invalid_token", resource_metadata="https://seller.example.com/.well-known/oauth-protected-resource"',
|
|
253
|
+
].join(', ')
|
|
254
|
+
);
|
|
255
|
+
res.end();
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Matrix:
|
|
259
|
+
|
|
260
|
+
- No/expired bearer → framework emits `Bearer error="invalid_token", resource_metadata=...`. Request never reaches `preTransport`.
|
|
261
|
+
- Valid bearer, signature invalid → your `preTransport` emits `Signature error="<code>"` byte-matching the test vector's `expected_outcome.error_code`.
|
|
262
|
+
- Valid bearer, signature absent on a `supported_for`-only operation → accept; signature is advisory on `supported_for`. Only `required_for` rejects unsigned.
|
|
263
|
+
|
|
264
|
+
**Idempotency semantics for `submitted` responses.** The framework caches **every successful mutation** including async `submitted` envelopes — not only terminal ones. A replay of the same key within the TTL returns the cached `submitted` response with `replayed: true` injected. A second IO is **not** created. Parallel calls with the same key within the 120-second in-flight window get `adcpError('SERVICE_UNAVAILABLE', { retry_after: 1 })` and should retry — buyer SDKs auto-retry on the `transient` class. The framework emits this for you; you don't handle it in handler code.
|
|
265
|
+
|
|
266
|
+
This means: the `task_id` you return on a `sales-guaranteed` `create_media_buy` is stable under replay. The buyer polls (or gets webhooks on) the same task handle on any retry within the replay window — you don't create a second IO.
|
|
267
|
+
|
|
268
|
+
**The three idempotency error codes the framework emits:**
|
|
269
|
+
|
|
270
|
+
| Code | When | Buyer's next step |
|
|
271
|
+
| ---------------------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
|
|
272
|
+
| `SERVICE_UNAVAILABLE` (`retry_after: 1`) | Parallel call with the same key, still within the 120s in-flight window | Wait the `retry_after` seconds and retry — eventually replays the cached response or hits CONFLICT |
|
|
273
|
+
| `IDEMPOTENCY_CONFLICT` | Same key, different payload hash | Don't retry — buyer has a client bug generating the same key for different requests |
|
|
274
|
+
| `IDEMPOTENCY_EXPIRED` | Key replayed after the TTL (default 24h, configurable 1h–7d) | Mint a new key and retry |
|
|
275
|
+
|
|
276
|
+
<a name="webhooks-async-completion-signed-outbound"></a>
|
|
277
|
+
|
|
278
|
+
## Webhooks (async completion, signed outbound)
|
|
279
|
+
|
|
280
|
+
Most seller flows need outbound webhooks — `sales-guaranteed` fires on IO completion, `sales-broadcast-tv` fires `window_update` deliveries as C3/C7 data matures, `update_media_buy` fires on bid/budget application. **Don't hand-roll `fetch` with HMAC**. Wire `createAdcpServer({ webhooks: { signerKey } })` and call `ctx.emitWebhook(...)` from any handler — the framework handles RFC 9421 signing, nonce minting, stable `idempotency_key` across retries, 5xx/429 backoff, byte-identical JSON serialization, and the "don't retry on signature failures" terminal behavior.
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
import { createAdcpServer, serve } from '@adcp/sdk';
|
|
284
|
+
|
|
285
|
+
// Dev: generate a signer JWK once at boot. Production: load from KMS/env with a stable `kid`,
|
|
286
|
+
// and publish the public half at your `jwks_uri` so buyers can verify without OOB exchange.
|
|
287
|
+
import { generateKeyPairSync, randomUUID } from 'node:crypto';
|
|
288
|
+
const { privateKey } = generateKeyPairSync('ed25519');
|
|
289
|
+
const signerJwk = {
|
|
290
|
+
...privateKey.export({ format: 'jwk' }),
|
|
291
|
+
kid: 'seller-webhook-kid-2026',
|
|
292
|
+
alg: 'EdDSA',
|
|
293
|
+
adcp_use: 'webhook-signing',
|
|
294
|
+
key_ops: ['sign'],
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
serve(() =>
|
|
298
|
+
createAdcpServer({
|
|
299
|
+
name: 'My Seller',
|
|
300
|
+
version: '1.0.0',
|
|
301
|
+
webhooks: {
|
|
302
|
+
signerKey: { keyid: signerJwk.kid, alg: 'ed25519', privateKey: signerJwk },
|
|
303
|
+
// Optional: retries, idempotencyKeyStore (swap memory → pg for multi-replica)
|
|
304
|
+
},
|
|
305
|
+
mediaBuy: {
|
|
306
|
+
createMediaBuy: async (params, ctx) => {
|
|
307
|
+
// sales-guaranteed: IO signing completes async. Emit the final result on completion.
|
|
308
|
+
const taskId = `task_${randomUUID()}`;
|
|
309
|
+
|
|
310
|
+
// Capture ctx.emitWebhook into a local BEFORE scheduling — the handler returns
|
|
311
|
+
// immediately, but the closure outlives the request; ctx may be recycled.
|
|
312
|
+
const emit = ctx.emitWebhook!; // non-null: guaranteed populated when webhooks config is set
|
|
313
|
+
|
|
314
|
+
queueIoReview(params, async outcome => {
|
|
315
|
+
await emit({
|
|
316
|
+
url: (params as { push_notification_config?: { url: string } }).push_notification_config!.url,
|
|
317
|
+
payload: {
|
|
318
|
+
task: {
|
|
319
|
+
task_id: taskId,
|
|
320
|
+
status: outcome.approved ? 'completed' : 'rejected',
|
|
321
|
+
result: outcome.approved
|
|
322
|
+
? { media_buy_id: outcome.media_buy_id, packages: outcome.packages }
|
|
323
|
+
: undefined,
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
operation_id: `create_media_buy.${taskId}`, // stable across retries — framework reuses same idempotency_key
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
return { status: 'submitted', task_id: taskId }; // synchronous response is the task envelope
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
})
|
|
333
|
+
);
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**`ctx.emitWebhook` is typed optional** (`emitWebhook?:`) even when you configure `webhooks` on the server. The framework populates it on every handler once `webhooks.signerKey` is set; use `ctx.emitWebhook!` or a local guard. Strict-mode assert-once-at-boot works too.
|
|
337
|
+
|
|
338
|
+
**Return envelope — use `taskToolResponse`, not the default `mediaBuyResponse` wrap.** The framework auto-wraps `createMediaBuy` returns with `mediaBuyResponse`, which stamps `revision`/`confirmed_at`/`valid_actions` onto the response — semantically wrong on a `submitted` envelope. For submitted returns, import `taskToolResponse` from `@adcp/sdk/server` and wrap explicitly (see [§ sales-guaranteed](#specialism-sales-guaranteed) for the full pattern).
|
|
339
|
+
|
|
340
|
+
**`operation_id` must be stable across retries.** The emitter hashes `operation_id` into the outbound `idempotency_key` so receivers can dedupe retried deliveries. Regenerating `operation_id` on retry is the top at-least-once-delivery bug the webhook conformance runner catches — use an ID derived from the logical event (the task_id, media_buy_id, or report batch), not a timestamp or fresh UUID.
|
|
341
|
+
|
|
342
|
+
**Terminal errors.** The emitter stops retrying on 4xx and on 401 responses carrying `WWW-Authenticate: Signature error="webhook_signature_*"` — signature failures are deterministic and retrying produces identical rejection. 5xx and 429 retry with exponential backoff.
|
|
343
|
+
|
|
344
|
+
**Legacy buyers.** If a buyer registered `push_notification_config.authentication` with HMAC-SHA256 or Bearer credentials, the emitter honors that mode automatically (deprecated in 4.0 but supported for backward compatibility). Omit `authentication` to opt into the RFC 9421 webhook profile by default.
|
|
345
|
+
|
|
346
|
+
**Revocation webhooks (brand-rights).** When your agent revokes a rights grant, `ctx.emitWebhook` against the buyer's `revocation_webhook` URL — see `skills/build-brand-rights-agent/SKILL.md` for the payload shape.
|
|
347
|
+
|
|
348
|
+
## Before Writing Code
|
|
349
|
+
|
|
350
|
+
Determine these five things. Ask the user — don't guess.
|
|
351
|
+
|
|
352
|
+
### 1. What Kind of Seller?
|
|
353
|
+
|
|
354
|
+
- **Premium publisher** — guaranteed inventory, fixed pricing, IO approval (ESPN, NYT)
|
|
355
|
+
- **SSP / Exchange** — non-guaranteed, auction-based, instant activation
|
|
356
|
+
- **Retail media network** — both guaranteed and non-guaranteed, proposals, catalog-driven creative, conversion tracking
|
|
357
|
+
|
|
358
|
+
### 2. Guaranteed or Non-Guaranteed?
|
|
359
|
+
|
|
360
|
+
- **Guaranteed** — `delivery_type: "guaranteed"`, may require async approval (`submitted` → `pending_approval` → `confirmed`)
|
|
361
|
+
- **Non-guaranteed** — `delivery_type: "non_guaranteed"`, buyer sets `bid_price`, instant activation
|
|
362
|
+
|
|
363
|
+
Many sellers support both — different products can have different delivery types.
|
|
364
|
+
|
|
365
|
+
### 3. Products and Pricing
|
|
366
|
+
|
|
367
|
+
Get specific inventory. Each product needs:
|
|
368
|
+
|
|
369
|
+
- `product_id`, `name`, `description`
|
|
370
|
+
- `publisher_properties` — at least one `{ publisher_domain: 'example.com', selection_type: 'all' }` (discriminated union: `'all'` | `'by_id'` with `property_ids` | `'by_tag'` with `tags`)
|
|
371
|
+
- `format_ids` — array of `{ agent_url: string, id: string }` referencing creative formats
|
|
372
|
+
- `delivery_type` — `'guaranteed'` or `'non_guaranteed'`
|
|
373
|
+
- `pricing_options` — at least one (see below)
|
|
374
|
+
- `reporting_capabilities` — `{ available_reporting_frequencies: ['daily'], expected_delay_minutes: 240, timezone: 'UTC', supports_webhooks: false, available_metrics: ['impressions', 'spend', 'clicks'], date_range_support: 'date_range' }`
|
|
375
|
+
- Optional: `channels` — use `as const` to avoid `string[]` inference: `channels: ['display', 'olv'] as const`
|
|
376
|
+
|
|
377
|
+
Pricing models (all require `pricing_option_id` and `currency`):
|
|
378
|
+
|
|
379
|
+
- `cpm` — `{ pricing_option_id: 'cpm-1', pricing_model: "cpm", fixed_price: 12.00, currency: "USD" }`
|
|
380
|
+
- `cpc` — `{ pricing_option_id: 'cpc-1', pricing_model: "cpc", fixed_price: 1.50, currency: "USD" }`
|
|
381
|
+
- Auction — `{ pricing_option_id: 'auction-1', pricing_model: "cpm", floor_price: 5.00, currency: "USD" }` (buyer bids above floor)
|
|
382
|
+
|
|
383
|
+
Each pricing option can set `min_spend_per_package` to enforce minimum budgets.
|
|
384
|
+
|
|
385
|
+
For all `PricingOption` variants and `Product` required fields, see [`docs/TYPE-SUMMARY.md`](../../docs/TYPE-SUMMARY.md).
|
|
386
|
+
|
|
387
|
+
### 4. Approval Workflow
|
|
388
|
+
|
|
389
|
+
For guaranteed buys, choose one:
|
|
390
|
+
|
|
391
|
+
- **Instant confirmation** — `create_media_buy` returns completed with confirmed status. Simplest.
|
|
392
|
+
- **Async approval** — returns `submitted`, buyer polls `get_media_buys`. Use `registerAdcpTaskTool`.
|
|
393
|
+
- **Human-in-the-loop** — returns `input-required` with a setup URL for IO signing.
|
|
394
|
+
|
|
395
|
+
Non-guaranteed buys are always instant confirmation.
|
|
396
|
+
|
|
397
|
+
### 5. Creative Management
|
|
398
|
+
|
|
399
|
+
- **Standard** — `list_creative_formats` + `sync_creatives`. Buyer uploads assets, seller validates.
|
|
400
|
+
- **Catalog-driven** — buyer syncs product catalog via `sync_catalogs`. Common for retail media.
|
|
401
|
+
- **None** — creative handled out-of-band. Omit creative tools.
|
|
402
|
+
|
|
403
|
+
## <a name="tools-and-required-response-shapes"></a>Tools and Required Response Shapes
|
|
404
|
+
|
|
405
|
+
> **Before writing any handler's return statement, fetch [`docs/llms.txt`](../../docs/llms.txt) and grep for `#### \`<tool_name>\``(e.g.`#### \`create_media_buy\``) to read the exact required + optional field list.** The schema-derived contract lives there; this skill covers patterns, gotchas, and domain-specific examples. Strict response validation is on by default in dev — it will tell you the exact field path if you drift, so write the obvious thing and trust the contract.
|
|
406
|
+
>
|
|
407
|
+
> **Cross-cutting pitfalls matrix runs keep catching:**
|
|
408
|
+
>
|
|
409
|
+
> - **Declare `capabilities: { specialisms: ['sales-guaranteed'] }` (or your actual specialism) on `createAdcpServer`.** Value is `string[]` of enum ids (not `[{id, version}]`). Agents that don't declare their specialism fail the grader with "No applicable tracks found" even if every tool works — tracks are gated on the specialism claim.
|
|
410
|
+
> - `get_media_buy_delivery` response requires **top-level `currency: string`** (ISO 4217) — per-row `spend.currency` is NOT enough.
|
|
411
|
+
> - `get_media_buy_delivery /media_buy_deliveries[i]/by_package[j]` rows are strict: each requires `package_id`, `spend` (number), `pricing_model`, `rate` (number), and `currency`. A mock that returns `{package_id, impressions, clicks}` fails validation — include the billing quintet on every package row.
|
|
412
|
+
> - `get_media_buy_delivery /reporting_period/start` and `/end` are ISO 8601 **date-time** strings (`YYYY-MM-DDTHH:MM:SS.sssZ` via `new Date().toISOString()`), not date-only. A mock that returns `'2026-04-21'` fails the format check in GA.
|
|
413
|
+
> - `get_media_buys /media_buys[i]` rows require **`media_buy_id`, `status`, `currency`, `total_budget`, `packages`**. When you persist a buy in `create_media_buy`, save `currency` and `total_budget` so the `get_media_buys` response can echo them verbatim — reconstructing later drops one of the required fields in ~every Claude build we've tested.
|
|
414
|
+
> - `sync_accounts` response: each row in `accounts[]` requires **`action: 'created' | 'updated' | 'unchanged' | 'failed'`** (not just `account_id`, `status`). Compare to sync_creatives — same pattern. Omitting `action` fails schema validation at `/accounts/0/action` and blocks every downstream stateful step in the storyboard. Type your row array as `SyncAccountsResponseRow[]` (exported from `@adcp/sdk`) to catch the missing-`action` drift at compile time instead of runtime.
|
|
415
|
+
|
|
416
|
+
**`get_adcp_capabilities`** — register first, empty `{}` schema
|
|
417
|
+
|
|
418
|
+
```
|
|
419
|
+
capabilitiesResponse({
|
|
420
|
+
adcp: { major_versions: [3] },
|
|
421
|
+
supported_protocols: ['media_buy'],
|
|
422
|
+
})
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**`sync_accounts`** — `SyncAccountsRequestSchema.shape`
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
taskToolResponse({
|
|
429
|
+
accounts: [{
|
|
430
|
+
account_id: string, // required - your platform's ID
|
|
431
|
+
brand: { domain: string },// required - echo back from request
|
|
432
|
+
operator: string, // required - echo back from request
|
|
433
|
+
action: 'created' | 'updated', // required
|
|
434
|
+
status: 'active' | 'pending_approval', // required
|
|
435
|
+
}]
|
|
436
|
+
})
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
**`sync_governance`** — `SyncGovernanceRequestSchema.shape`
|
|
440
|
+
|
|
441
|
+
```
|
|
442
|
+
taskToolResponse({
|
|
443
|
+
accounts: [{
|
|
444
|
+
account: { brand: {...}, operator: string }, // required - echo back
|
|
445
|
+
status: 'synced', // required
|
|
446
|
+
governance_agents: [{ url: string, categories?: string[] }], // required
|
|
447
|
+
}]
|
|
448
|
+
})
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
**`get_products`** — `GetProductsRequestSchema.shape`
|
|
452
|
+
|
|
453
|
+
```
|
|
454
|
+
productsResponse({
|
|
455
|
+
products: [{
|
|
456
|
+
product_id: 'prod-1',
|
|
457
|
+
name: 'Homepage Display',
|
|
458
|
+
description: 'Premium display ads on homepage',
|
|
459
|
+
publisher_properties: [{ publisher_domain: 'example.com', selection_type: 'all' }],
|
|
460
|
+
format_ids: [{ agent_url: 'https://creative.example.com/mcp', id: 'display-300x250' }],
|
|
461
|
+
delivery_type: 'guaranteed',
|
|
462
|
+
pricing_options: [{
|
|
463
|
+
pricing_option_id: 'cpm-standard',
|
|
464
|
+
pricing_model: 'cpm',
|
|
465
|
+
fixed_price: 12.00,
|
|
466
|
+
currency: 'USD',
|
|
467
|
+
}],
|
|
468
|
+
reporting_capabilities: DEFAULT_REPORTING_CAPABILITIES, // from @adcp/sdk/server — stays in sync with schema
|
|
469
|
+
}],
|
|
470
|
+
sandbox: true, // for mock data
|
|
471
|
+
})
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
`DEFAULT_REPORTING_CAPABILITIES` is the SDK-provided default. Hand-rolling this object is an ongoing drift tax — the spec adds required fields (most recently `date_range_support`) and every copy of the literal gets stale. Reach for the constant unless you have a concrete reason to override a field.
|
|
475
|
+
|
|
476
|
+
**`create_media_buy`** — `CreateMediaBuyRequestSchema.shape`
|
|
477
|
+
|
|
478
|
+
Validate the request before creating the buy. Return an error response (not `adcpError`) when business validation fails:
|
|
479
|
+
|
|
480
|
+
```
|
|
481
|
+
// Success — revision, confirmed_at, and valid_actions are auto-set:
|
|
482
|
+
mediaBuyResponse({
|
|
483
|
+
media_buy_id: string, // required
|
|
484
|
+
status: 'pending_creatives',// triggers valid_actions auto-population
|
|
485
|
+
packages: [{ // required
|
|
486
|
+
package_id: string,
|
|
487
|
+
product_id: string,
|
|
488
|
+
pricing_option_id: string,
|
|
489
|
+
budget: number,
|
|
490
|
+
}],
|
|
491
|
+
})
|
|
492
|
+
|
|
493
|
+
// Validation failure (reversed dates, budget too low, unknown product):
|
|
494
|
+
adcpError('INVALID_REQUEST', { message: 'start_time must be before end_time' })
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
**`get_media_buys`** — `GetMediaBuysRequestSchema.shape`
|
|
498
|
+
|
|
499
|
+
```
|
|
500
|
+
getMediaBuysResponse({
|
|
501
|
+
media_buys: [{
|
|
502
|
+
media_buy_id: string, // required
|
|
503
|
+
status: 'active' | 'pending_start' | 'pending_creatives' | ..., // required
|
|
504
|
+
currency: 'USD', // required
|
|
505
|
+
total_budget: 5000, // required — numeric, same currency as `currency`
|
|
506
|
+
confirmed_at: string, // required for guaranteed approval — ISO timestamp
|
|
507
|
+
packages: [{
|
|
508
|
+
package_id: string, // required
|
|
509
|
+
}],
|
|
510
|
+
}]
|
|
511
|
+
})
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
When you persist a media buy, save `currency` + `total_budget` from the `create_media_buy` request (budgets sum across packages) so subsequent `get_media_buys` calls can return them verbatim. Missing either field on any row fails schema validation and every subsequent step depending on that media_buy's history.
|
|
515
|
+
|
|
516
|
+
**`list_creative_formats`** — `ListCreativeFormatsRequestSchema.shape`
|
|
517
|
+
|
|
518
|
+
```
|
|
519
|
+
listCreativeFormatsResponse({
|
|
520
|
+
formats: [{
|
|
521
|
+
format_id: { agent_url: string, id: string }, // required
|
|
522
|
+
name: string, // required
|
|
523
|
+
renders: [{ // required — at least one render
|
|
524
|
+
role: 'primary', // required
|
|
525
|
+
// oneOf: specify dimensions OR parameters_from_format_id, not both
|
|
526
|
+
dimensions: { width: 300, height: 250 }, // object — defaults to px
|
|
527
|
+
// parameters_from_format_id: true, // alternative: parameters come from format_id
|
|
528
|
+
}],
|
|
529
|
+
}]
|
|
530
|
+
})
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
#### Format asset slots — translating platform-native constraints to AdCP
|
|
534
|
+
|
|
535
|
+
Social and retail-media sellers translate platform-native format catalogs (Meta, Pinterest, TikTok, Criteo, CitrusAd, UniversalAds) into AdCP's `Format.assets[]`. Four recurring footguns fail strict response validation even when the data is "there":
|
|
536
|
+
|
|
537
|
+
1. **Wrong field name for file types.** The spec uses `formats` on image requirements and `containers` on video requirements — NOT `file_types`. Platforms commonly carry `file_types: ['mp4']`; remap to `containers: ['mp4']` for video, `formats: ['jpg', 'png']` for image.
|
|
538
|
+
2. **Wrong unit on duration.** AdCP uses `min_duration_ms` / `max_duration_ms` (milliseconds). Platforms often carry `min_duration_seconds`. Multiply by 1000 on translation.
|
|
539
|
+
3. **Aspect ratios are single-valued per format.** Image pattern `^\d+(\.\d+)?:\d+(\.\d+)?$` allows decimals (`1.91:1`); video is integer-only `^\d+:\d+$`. Comma-joined values (`"1:1,16:9"`) fail — emit separate format variants per ratio.
|
|
540
|
+
4. **`min_count` / `max_count` live on the repeatable_group wrapper.** Carousels, collections, story-pin frames, product showcases are `repeatable_group` assets with `assets[]` inside. Putting counts on an individual asset slot is a spec violation that strict validation rejects.
|
|
541
|
+
|
|
542
|
+
Retail-media sponsored-products formats often reach for `asset_type: 'promoted_offerings'`. That value isn't in the AdCP enum — the correct choice is `asset_type: 'catalog'` with a `CatalogRequirements` object declaring `catalog_type: 'product'` (or `offering`, etc.), `min_items`, `max_items`, and the expected `feed_formats`.
|
|
543
|
+
|
|
544
|
+
Use the typed slot builders — they inject `item_type` and `asset_type`, and the `requirements` object is strictly typed per asset_type, so `file_types`, `min_duration_seconds`, and `min_count` on an individual asset all fail at compile time:
|
|
545
|
+
|
|
546
|
+
```typescript
|
|
547
|
+
import {
|
|
548
|
+
imageAssetSlot,
|
|
549
|
+
videoAssetSlot,
|
|
550
|
+
catalogAssetSlot,
|
|
551
|
+
repeatableGroup,
|
|
552
|
+
imageGroupAsset,
|
|
553
|
+
textGroupAsset,
|
|
554
|
+
} from '@adcp/sdk';
|
|
555
|
+
|
|
556
|
+
// Single image asset slot
|
|
557
|
+
imageAssetSlot({
|
|
558
|
+
asset_id: 'hero_image',
|
|
559
|
+
required: true,
|
|
560
|
+
requirements: { aspect_ratio: '1:1', formats: ['jpg', 'png', 'webp'], max_file_size_kb: 5120 },
|
|
561
|
+
});
|
|
562
|
+
|
|
563
|
+
// Carousel: 2–5 images. Counts on the GROUP, not the individual image.
|
|
564
|
+
repeatableGroup({
|
|
565
|
+
asset_group_id: 'carousel_items',
|
|
566
|
+
required: true,
|
|
567
|
+
min_count: 2,
|
|
568
|
+
max_count: 5,
|
|
569
|
+
selection_mode: 'sequential',
|
|
570
|
+
assets: [
|
|
571
|
+
imageGroupAsset({
|
|
572
|
+
asset_id: 'card_image',
|
|
573
|
+
required: true,
|
|
574
|
+
requirements: { aspect_ratio: '1:1', formats: ['jpg', 'png'] },
|
|
575
|
+
}),
|
|
576
|
+
textGroupAsset({ asset_id: 'card_headline', required: true, requirements: { max_length: 40 } }),
|
|
577
|
+
],
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
// Sponsored-products: catalog slot, not 'promoted_offerings'
|
|
581
|
+
catalogAssetSlot({
|
|
582
|
+
asset_id: 'products',
|
|
583
|
+
required: true,
|
|
584
|
+
requirements: {
|
|
585
|
+
catalog_type: 'product',
|
|
586
|
+
min_items: 3,
|
|
587
|
+
max_items: 10,
|
|
588
|
+
feed_formats: ['google_merchant_center'],
|
|
589
|
+
},
|
|
590
|
+
});
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
Grouped namespace `FormatAsset.image(...)`, `FormatAsset.group(...)`, etc. is available when constructing several slot types together.
|
|
594
|
+
|
|
595
|
+
**`sync_creatives`** — `SyncCreativesRequestSchema.shape`
|
|
596
|
+
|
|
597
|
+
```
|
|
598
|
+
syncCreativesResponse({
|
|
599
|
+
creatives: [{
|
|
600
|
+
creative_id: string, // required - echo from request
|
|
601
|
+
action: 'created' | 'updated', // required
|
|
602
|
+
}]
|
|
603
|
+
})
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
**`get_media_buy_delivery`** — `GetMediaBuyDeliveryRequestSchema.shape`
|
|
607
|
+
|
|
608
|
+
```
|
|
609
|
+
deliveryResponse({
|
|
610
|
+
reporting_period: { start: string, end: string }, // required - ISO timestamps
|
|
611
|
+
currency: 'USD', // required — top-level currency for all totals
|
|
612
|
+
media_buy_deliveries: [{
|
|
613
|
+
media_buy_id: string, // required
|
|
614
|
+
status: 'active', // required
|
|
615
|
+
totals: { impressions: number, spend: number }, // required
|
|
616
|
+
by_package: [], // required (can be empty)
|
|
617
|
+
}]
|
|
618
|
+
})
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
Top-level `currency` is **required** per `get-media-buy-delivery-response.json`. Pull it from the persisted media buy (see `createMediaBuy` above — we flatten request `total_budget.currency` into the buy's top-level `currency` field for this reason). `get_creative_delivery` has the same top-level `currency` requirement.
|
|
622
|
+
|
|
623
|
+
### Context and Ext Passthrough
|
|
624
|
+
|
|
625
|
+
`createAdcpServer` auto-echoes the request's `context` into every response — **do not set `context` yourself in your handler return values.** The framework injects it post-handler only when the field isn't already present.
|
|
626
|
+
|
|
627
|
+
**Crucial:** `context` is schema-typed as an object. If your handler hand-sets a string or narrative description (e.g., "E2E test run", a scenario label, `campaign_context` from the request body), validation fails with `/context: must be object` and the framework does not overwrite. Leave the field out entirely; the framework handles it.
|
|
628
|
+
|
|
629
|
+
Some schemas also define an `ext` field for vendor-namespaced extensions. If your request schema includes `ext`, accept it without error. Tools with explicit `ext` support: `sync_governance`, `provide_performance_feedback`, `sync_event_sources`.
|
|
630
|
+
|
|
631
|
+
## Compliance Testing (Required for deterministic_testing storyboard)
|
|
632
|
+
|
|
633
|
+
To pass the `deterministic_testing` storyboard — and the rejection-branch steps in most other storyboards (`governance_denied`, `invalid_transitions`, `measurement_terms_rejected`, etc.) — your agent must expose the `comply_test_controller` tool. Without it, the grader can only observe the happy path; forced state transitions, error-condition seeding, and simulation all silently degrade to skips or fail with `controller_detected: false`.
|
|
634
|
+
|
|
635
|
+
**Pick by state shape — not by helper quality.** Both helpers below call the same underlying primitives; the split is about the shape of the state you're mutating, not a gradient of abstraction.
|
|
636
|
+
|
|
637
|
+
| Your domain state is… | Use | Worked example |
|
|
638
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
|
|
639
|
+
| Simple — each scenario maps cleanly to one repository method (`seed_creative` → `creativeRepo.upsert`) | `createComplyController` | [`examples/comply-controller-seller.ts`](../../examples/comply-controller-seller.ts) |
|
|
640
|
+
| Typed — media buys with packages / revision / history, creatives with format*id / manifest, seed must populate the same records `get*\*` reads | `registerTestController` + hand-rolled `TestControllerStore` | [`examples/seller-test-controller.ts`](../../examples/seller-test-controller.ts) |
|
|
641
|
+
|
|
642
|
+
### Option A: `createComplyController` (adapter surface)
|
|
643
|
+
|
|
644
|
+
Handles dispatch + validation + re-seed idempotency + sandbox gating for you. Your adapter bodies run; the helper routes:
|
|
645
|
+
|
|
646
|
+
```ts
|
|
647
|
+
import { createComplyController } from '@adcp/sdk/testing';
|
|
648
|
+
|
|
649
|
+
const controller = createComplyController({
|
|
650
|
+
sandboxGate: input => input.auth?.sandbox === true,
|
|
651
|
+
seed: {
|
|
652
|
+
product: params => productRepo.upsert(params.product_id, params.fixture),
|
|
653
|
+
creative: params => creativeRepo.upsert(params.creative_id, params.fixture),
|
|
654
|
+
plan: params => planRepo.upsert(params.plan_id, params.fixture),
|
|
655
|
+
media_buy: params => mediaBuyRepo.upsert(params.media_buy_id, params.fixture),
|
|
656
|
+
},
|
|
657
|
+
force: {
|
|
658
|
+
creative_status: params => creativeRepo.transition(params.creative_id, params.status),
|
|
659
|
+
media_buy_status: params => mediaBuyRepo.transition(params.media_buy_id, params.status),
|
|
660
|
+
account_status: params => accountRepo.setStatus(params.account_id, params.status),
|
|
661
|
+
},
|
|
662
|
+
simulate: {
|
|
663
|
+
delivery: params => deliveryRepo.simulate(params),
|
|
664
|
+
budget_spend: params => budgetRepo.spendPercentage(params),
|
|
665
|
+
},
|
|
666
|
+
});
|
|
667
|
+
|
|
668
|
+
controller.register(server);
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
Omit adapters you don't support — they auto-return `UNKNOWN_SCENARIO` (not schema errors). Throw `TestControllerError('INVALID_TRANSITION', msg, currentState)` from an adapter when the state machine disallows the transition; the helper emits the typed error envelope.
|
|
672
|
+
|
|
673
|
+
Registration auto-emits the `capabilities.compliance_testing.scenarios` block per AdCP 3.0 — `controller.register(server)` wires the tool AND declares capability. Don't add `compliance_testing` to `supported_protocols`; per spec it's a capability block, not a protocol.
|
|
674
|
+
|
|
675
|
+
Validate with: `adcp storyboard run <agent> deterministic_testing --auth $TOKEN`.
|
|
676
|
+
|
|
677
|
+
### Seeding fixtures for compliance
|
|
678
|
+
|
|
679
|
+
Group A storyboards call `comply_test_controller.seed_product` (and `seed_pricing_option`, `seed_creative`, `seed_plan`, `seed_media_buy`) to install a storyboard-specific fixture before hitting the spec tools. Two SDK pieces make this round-trip work without hand-rolling the merge + lookup plumbing.
|
|
680
|
+
|
|
681
|
+
**1. `mergeSeed*` helpers** — permissive merge over your seller defaults. Storyboard fixtures declare only the fields they want to override; everything else (delivery type, channels, reporting capabilities, ...) comes from your baseline. Arrays replace by default; id-keyed lists (`pricing_options`, `publisher_properties`, `packages`, `assets`, plan `findings`) overlay by their id so seeding one entry doesn't wipe the rest.
|
|
682
|
+
|
|
683
|
+
```ts
|
|
684
|
+
import { mergeSeedProduct } from '@adcp/sdk/testing';
|
|
685
|
+
|
|
686
|
+
const baseline: Partial<Product> = {
|
|
687
|
+
delivery_type: 'guaranteed',
|
|
688
|
+
channels: ['display'],
|
|
689
|
+
reporting_capabilities: DEFAULT_REPORTING_CAPABILITIES,
|
|
690
|
+
};
|
|
691
|
+
|
|
692
|
+
// Storyboard seeds sparse fixture: { product_id: 'prd-1', name: 'Homepage' }
|
|
693
|
+
const merged = mergeSeedProduct(baseline, fixture);
|
|
694
|
+
productRepo.upsert(merged.product_id, merged);
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
**2. `bridgeFromTestControllerStore`** — wires your seeded `Map` into `get_products` responses automatically. Sandbox requests see seeded + handler products merged (with seeded winning collisions); production traffic (no sandbox marker, or resolved non-sandbox account) skips the bridge entirely.
|
|
698
|
+
|
|
699
|
+
```ts
|
|
700
|
+
import { createAdcpServer } from '@adcp/sdk';
|
|
701
|
+
import { bridgeFromTestControllerStore } from '@adcp/sdk/server';
|
|
702
|
+
|
|
703
|
+
const seedStore = new Map<string, unknown>();
|
|
704
|
+
|
|
705
|
+
const server = createAdcpServer({
|
|
706
|
+
mediaBuy: { getProducts: handleGetProducts },
|
|
707
|
+
testController: bridgeFromTestControllerStore(seedStore, {
|
|
708
|
+
delivery_type: 'guaranteed',
|
|
709
|
+
channels: ['display'],
|
|
710
|
+
reporting_capabilities: DEFAULT_REPORTING_CAPABILITIES,
|
|
711
|
+
}),
|
|
712
|
+
});
|
|
713
|
+
|
|
714
|
+
// Wire your createComplyController seed.product adapter to populate seedStore.
|
|
715
|
+
```
|
|
716
|
+
|
|
717
|
+
Your `getSeededProducts` callback — whether you write it by hand or get it via `bridgeFromTestControllerStore` — MUST re-verify that `ctx.account` (or an equivalent scope) is a sandbox account. The framework's sandbox check is a namespace selector, not an authority boundary.
|
|
718
|
+
|
|
719
|
+
### Option B: `registerTestController` (flat store surface)
|
|
720
|
+
|
|
721
|
+
Pick this when your seed and force handlers must mutate typed domain records (`MediaBuyState` with packages / revision / history) that your production tools already read. Session-scoped store factories close over a loaded session so every mutation lands in the same records `get_media_buy` / `sync_creatives` return — the drift class the flat store prevents.
|
|
722
|
+
|
|
723
|
+
See [`examples/seller-test-controller.ts`](../../examples/seller-test-controller.ts) for the end-to-end pattern (typed `MediaBuyState` + `CreativeState`, per-request factory, `enforceMapCap` + `createSeedFixtureCache`, transition guards shared with production code). Sketch:
|
|
724
|
+
|
|
725
|
+
```
|
|
726
|
+
import { registerTestController, type TestControllerStore } from '@adcp/sdk/testing';
|
|
727
|
+
|
|
728
|
+
const store: TestControllerStore = {
|
|
729
|
+
async forceAccountStatus(accountId, status) {
|
|
730
|
+
const prev = accounts.get(accountId);
|
|
731
|
+
if (!prev) throw new TestControllerError('NOT_FOUND', `Account ${accountId} not found`);
|
|
732
|
+
accounts.set(accountId, status);
|
|
733
|
+
return { success: true, previous_state: prev, current_state: status };
|
|
734
|
+
},
|
|
735
|
+
async forceMediaBuyStatus(mediaBuyId, status) {
|
|
736
|
+
const prev = mediaBuys.get(mediaBuyId);
|
|
737
|
+
if (!prev) throw new TestControllerError('NOT_FOUND', `Media buy ${mediaBuyId} not found`);
|
|
738
|
+
const terminal = ['completed', 'rejected', 'canceled'];
|
|
739
|
+
if (terminal.includes(prev))
|
|
740
|
+
throw new TestControllerError('INVALID_TRANSITION', `Cannot transition from ${prev}`, prev);
|
|
741
|
+
mediaBuys.set(mediaBuyId, status);
|
|
742
|
+
return { success: true, previous_state: prev, current_state: status };
|
|
743
|
+
},
|
|
744
|
+
async forceCreativeStatus(creativeId, status, rejectionReason) {
|
|
745
|
+
const prev = creatives.get(creativeId);
|
|
746
|
+
if (!prev) throw new TestControllerError('NOT_FOUND', `Creative ${creativeId} not found`);
|
|
747
|
+
// archived blocks transitions to active states, but archived → rejected is valid (compliance override)
|
|
748
|
+
const activeStatuses = ['processing', 'pending_review', 'approved'];
|
|
749
|
+
if (prev === 'archived' && activeStatuses.includes(status))
|
|
750
|
+
throw new TestControllerError('INVALID_TRANSITION', `Cannot transition from archived to ${status}`, prev);
|
|
751
|
+
creatives.set(creativeId, status);
|
|
752
|
+
return { success: true, previous_state: prev, current_state: status };
|
|
753
|
+
},
|
|
754
|
+
async simulateDelivery(mediaBuyId, params) {
|
|
755
|
+
// params: { impressions?: number, clicks?: number, reported_spend?: { amount, currency }, conversions?: number }
|
|
756
|
+
return { success: true, simulated: { ...params }, cumulative: { ...params } };
|
|
757
|
+
},
|
|
758
|
+
async simulateBudgetSpend(params) {
|
|
759
|
+
return { success: true, simulated: { spend_percentage: params.spend_percentage } };
|
|
760
|
+
},
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
registerTestController(server, store);
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
`registerTestController` auto-emits the `capabilities.compliance_testing.scenarios` block per AdCP 3.0 — scenarios come from the factory's static list or are inferred from the plain store's method presence. Don't add `compliance_testing` to `supported_protocols`; per spec it's a capability block, not a protocol. Unimplemented methods are excluded from `list_scenarios` automatically.
|
|
767
|
+
|
|
768
|
+
The storyboard tests state machine correctness:
|
|
769
|
+
|
|
770
|
+
- `NOT_FOUND` when forcing transitions on unknown entities
|
|
771
|
+
- `INVALID_TRANSITION` when transitioning from terminal states (completed, rejected, canceled for media buys; archived blocks active states like processing/pending_review/approved, but archived → rejected is valid)
|
|
772
|
+
- Successful transitions between valid states
|
|
773
|
+
|
|
774
|
+
Throw `TestControllerError` from store methods for typed errors. The SDK validates status enum values before calling your store.
|
|
775
|
+
|
|
776
|
+
Validate with: `adcp storyboard run <agent> deterministic_testing --json`
|
|
777
|
+
|
|
778
|
+
### Advanced patterns (session-backed stores, map caps, custom wrappers)
|
|
779
|
+
|
|
780
|
+
For production test controllers with persisted-session state (Postgres/Redis/JSONB), the per-session factory shape, `enforceMapCap` for bounded session maps, and custom MCP wrappers with `AsyncLocalStorage` or sandbox gating — see [`docs/guides/BUILD-AN-AGENT.md`](../../docs/guides/BUILD-AN-AGENT.md) § createTaskCapableServer.
|
|
781
|
+
|
|
782
|
+
Key SDK pieces you'll import from `@adcp/sdk`: `CONTROLLER_SCENARIOS`, `enforceMapCap`, `SESSION_ENTRY_CAP`, `handleTestControllerRequest`, `toMcpResponse`, `TOOL_INPUT_SHAPE`.
|
|
783
|
+
|
|
784
|
+
## SDK Quick Reference
|
|
785
|
+
|
|
786
|
+
| SDK piece | Usage |
|
|
787
|
+
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
|
|
788
|
+
| `createAdcpServer(config)` | Domain-grouped server — auto-wires schemas, response builders, capabilities |
|
|
789
|
+
| `serve(() => createAdcpServer(config))` | Start HTTP server on `:3001/mcp` |
|
|
790
|
+
| `ctx.store` | State store in every handler — `get`, `put`, `patch`, `delete`, `list` |
|
|
791
|
+
| `InMemoryStateStore` | Default state store (dev/testing) |
|
|
792
|
+
| `PostgresStateStore` | Production state store (shared across instances) |
|
|
793
|
+
| `DEFAULT_REPORTING_CAPABILITIES` | Use as `reporting_capabilities: DEFAULT_REPORTING_CAPABILITIES` on products |
|
|
794
|
+
| `checkGovernance(options)` | Call governance agent before financial commits |
|
|
795
|
+
| `governanceDeniedError(result)` | Convert governance denial to GOVERNANCE_DENIED error |
|
|
796
|
+
| `mediaBuyResponse(data)` | Auto-applied for `createMediaBuy` (sets revision, confirmed_at, valid_actions) |
|
|
797
|
+
| `adcpError(code, { message })` | Structured error (e.g., `BUDGET_TOO_LOW`, `PRODUCT_NOT_FOUND`) |
|
|
798
|
+
| `registerTestController(server, store \| { scenarios, createStore })` | Add `comply_test_controller`. Plain store or per-request factory. |
|
|
799
|
+
| `TestControllerError(code, message)` | Typed error from store methods |
|
|
800
|
+
| `handleTestControllerRequest(store, input)` | Low-level dispatch for custom MCP wrappers |
|
|
801
|
+
| `toMcpResponse(response)` / `TOOL_INPUT_SHAPE` | MCP envelope + Zod input schema for custom wrappers |
|
|
802
|
+
| `enforceMapCap(map, key, label, cap?)` | Reject net-new keys once a session Map hits `SESSION_ENTRY_CAP` (1000) |
|
|
803
|
+
| `expectControllerError(result, code)` / `expectControllerSuccess(result)` | Unit-test assertions — narrow responses to error or success arms |
|
|
804
|
+
|
|
805
|
+
Response builders (`productsResponse`, `mediaBuyResponse`, `deliveryResponse`, etc.) are auto-applied by `createAdcpServer` — you return the data, the framework wraps it. You only need to call them directly for tools without a dedicated builder.
|
|
806
|
+
|
|
807
|
+
Import everything from `@adcp/sdk`. Types from `@adcp/sdk` with `import type`.
|
|
808
|
+
|
|
809
|
+
## Setup
|
|
810
|
+
|
|
811
|
+
```bash
|
|
812
|
+
npm init -y
|
|
813
|
+
npm install @adcp/sdk
|
|
814
|
+
npm install -D typescript @types/node
|
|
815
|
+
```
|
|
816
|
+
|
|
817
|
+
Minimal `tsconfig.json`:
|
|
818
|
+
|
|
819
|
+
```json
|
|
820
|
+
{
|
|
821
|
+
"compilerOptions": {
|
|
822
|
+
"target": "ES2022",
|
|
823
|
+
"module": "Node16",
|
|
824
|
+
"moduleResolution": "Node16",
|
|
825
|
+
"strict": true,
|
|
826
|
+
"skipLibCheck": true,
|
|
827
|
+
"outDir": "dist"
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
```
|
|
831
|
+
|
|
832
|
+
`skipLibCheck: true` avoids false-positive errors from transitive `.d.ts` files (e.g., `@opentelemetry/api`).
|
|
833
|
+
|
|
834
|
+
## Implementation
|
|
835
|
+
|
|
836
|
+
Use `createAdcpServer` — it auto-wires schemas, response builders, and `get_adcp_capabilities` from the handlers you provide. Handlers receive `(params, ctx)` where `ctx.store` persists state and `ctx.account` is the resolved account.
|
|
837
|
+
|
|
838
|
+
**Imports**: most things live at `@adcp/sdk`. The idempotency store helpers (`createIdempotencyStore`, `memoryBackend`, `pgBackend`) live at the narrower `@adcp/sdk/server` subpath. Both are re-exported from the root — either works — but splitting them makes intent obvious.
|
|
839
|
+
|
|
840
|
+
```typescript
|
|
841
|
+
import { randomUUID } from 'node:crypto';
|
|
842
|
+
import {
|
|
843
|
+
createAdcpServer,
|
|
844
|
+
serve,
|
|
845
|
+
adcpError,
|
|
846
|
+
InMemoryStateStore,
|
|
847
|
+
checkGovernance,
|
|
848
|
+
governanceDeniedError,
|
|
849
|
+
} from '@adcp/sdk';
|
|
850
|
+
import { createIdempotencyStore, memoryBackend } from '@adcp/sdk/server';
|
|
851
|
+
import type { ServeContext } from '@adcp/sdk';
|
|
852
|
+
|
|
853
|
+
const stateStore = new InMemoryStateStore(); // shared across requests
|
|
854
|
+
|
|
855
|
+
// Idempotency — required for any v3-compliant seller that accepts mutating
|
|
856
|
+
// requests. `createIdempotencyStore` throws if `ttlSeconds` is outside the
|
|
857
|
+
// spec bounds (3600–604800).
|
|
858
|
+
const idempotency = createIdempotencyStore({
|
|
859
|
+
backend: memoryBackend(), // pgBackend(pool) for production
|
|
860
|
+
ttlSeconds: 86400, // 24 hours
|
|
861
|
+
});
|
|
862
|
+
|
|
863
|
+
function createAgent({ taskStore }: ServeContext) {
|
|
864
|
+
return createAdcpServer({
|
|
865
|
+
name: 'My Seller Agent',
|
|
866
|
+
version: '1.0.0',
|
|
867
|
+
taskStore,
|
|
868
|
+
stateStore,
|
|
869
|
+
idempotency,
|
|
870
|
+
|
|
871
|
+
// Principal scoping for idempotency. MUST never return undefined — or
|
|
872
|
+
// every mutating request rejects as SERVICE_UNAVAILABLE. A constant is
|
|
873
|
+
// fine for a demo; for multi-tenant production use ctx.account typed
|
|
874
|
+
// via `createAdcpServer<MyAccount>({...})`.
|
|
875
|
+
resolveSessionKey: () => 'default-principal',
|
|
876
|
+
|
|
877
|
+
// resolveAccount runs BEFORE idempotency / handler dispatch. If it
|
|
878
|
+
// returns null for a valid-shape reference, every mutating request
|
|
879
|
+
// short-circuits as ACCOUNT_NOT_FOUND — which masks idempotency
|
|
880
|
+
// conformance (missing-key / replay tests fail with the wrong code).
|
|
881
|
+
// Handle BOTH branches of AccountReference:
|
|
882
|
+
// { account_id } — your own persisted accounts.
|
|
883
|
+
// { brand: { domain }, operator } — the canonical spec shape.
|
|
884
|
+
// Conformance storyboards use this by default (e.g. brand.domain
|
|
885
|
+
// "acmeoutdoor.example", operator "pinnacle-agency.example").
|
|
886
|
+
resolveAccount: async ref => {
|
|
887
|
+
if ('account_id' in ref) return stateStore.get('accounts', ref.account_id);
|
|
888
|
+
if ('brand' in ref && ref.brand?.domain && ref.operator) {
|
|
889
|
+
// In dev/compliance mode, auto-materialize an account for any
|
|
890
|
+
// valid brand+operator so conformance tests reach the handler.
|
|
891
|
+
// In production, replace with a real lookup against your tenant
|
|
892
|
+
// registry — returning null here for unknown tenants is correct
|
|
893
|
+
// and will (correctly) surface ACCOUNT_NOT_FOUND to the buyer.
|
|
894
|
+
return { brand: ref.brand.domain, operator: ref.operator };
|
|
895
|
+
}
|
|
896
|
+
return null;
|
|
897
|
+
},
|
|
898
|
+
|
|
899
|
+
accounts: {
|
|
900
|
+
syncAccounts: async (params, ctx) => {
|
|
901
|
+
/* ... */
|
|
902
|
+
},
|
|
903
|
+
},
|
|
904
|
+
mediaBuy: {
|
|
905
|
+
getProducts: async (params, ctx) => {
|
|
906
|
+
return { products: PRODUCTS, sandbox: true };
|
|
907
|
+
// productsResponse() auto-applied by framework
|
|
908
|
+
},
|
|
909
|
+
createMediaBuy: async (params, ctx) => {
|
|
910
|
+
// Governance check for financial commitment
|
|
911
|
+
if (ctx.account?.governanceUrl) {
|
|
912
|
+
const gov = await checkGovernance({
|
|
913
|
+
agentUrl: ctx.account.governanceUrl,
|
|
914
|
+
planId: params.plan_id ?? 'default',
|
|
915
|
+
caller: 'https://my-agent.com/mcp',
|
|
916
|
+
tool: 'create_media_buy',
|
|
917
|
+
payload: params,
|
|
918
|
+
});
|
|
919
|
+
if (!gov.approved) return governanceDeniedError(gov);
|
|
920
|
+
}
|
|
921
|
+
// Use randomUUID (not Date.now) so ids are unguessable — a guessable
|
|
922
|
+
// media_buy_id lets another buyer probe or cancel. Same applies to
|
|
923
|
+
// any seller-issued id (package_id, creative_id, etc.).
|
|
924
|
+
// `currency` + `total_budget` are REQUIRED on get_media_buys response rows.
|
|
925
|
+
// The request carries them under `total_budget: { amount, currency }` (object).
|
|
926
|
+
// Flatten to top-level fields at create time — storing only `packages[].budget`
|
|
927
|
+
// and reconstructing later fails schema validation in get_media_buys/update_media_buy.
|
|
928
|
+
const currency = params.total_budget?.currency ?? 'USD';
|
|
929
|
+
const totalBudget =
|
|
930
|
+
params.total_budget?.amount ?? (params.packages ?? []).reduce((a, p) => a + (p.budget ?? 0), 0);
|
|
931
|
+
const buy = {
|
|
932
|
+
media_buy_id: `mb_${randomUUID()}`,
|
|
933
|
+
status: 'pending_creatives' as const,
|
|
934
|
+
currency,
|
|
935
|
+
total_budget: totalBudget,
|
|
936
|
+
packages:
|
|
937
|
+
params.packages?.map(pkg => ({
|
|
938
|
+
package_id: `pkg_${randomUUID()}`,
|
|
939
|
+
product_id: pkg.product_id,
|
|
940
|
+
pricing_option_id: pkg.pricing_option_id,
|
|
941
|
+
budget: pkg.budget,
|
|
942
|
+
})) ?? [],
|
|
943
|
+
};
|
|
944
|
+
await ctx.store.put('media_buys', buy.media_buy_id, buy);
|
|
945
|
+
return buy; // mediaBuyResponse() auto-applied (sets revision, confirmed_at, valid_actions)
|
|
946
|
+
},
|
|
947
|
+
updateMediaBuy: async (params, ctx) => {
|
|
948
|
+
const existing = await ctx.store.get('media_buys', params.media_buy_id);
|
|
949
|
+
if (!existing) {
|
|
950
|
+
return adcpError('MEDIA_BUY_NOT_FOUND', {
|
|
951
|
+
message: `No media buy with id ${params.media_buy_id}`,
|
|
952
|
+
field: 'media_buy_id',
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
// Only merge the fields you want to persist — do NOT spread `params`
|
|
956
|
+
// wholesale. `params` carries envelope fields (idempotency_key,
|
|
957
|
+
// context) that have no business in your domain state. Spreading
|
|
958
|
+
// them pollutes `get_media_buys` responses and breaks dedup.
|
|
959
|
+
const updated = { ...existing, status: params.active === false ? 'paused' : 'active' };
|
|
960
|
+
await ctx.store.put('media_buys', params.media_buy_id, updated);
|
|
961
|
+
return {
|
|
962
|
+
media_buy_id: params.media_buy_id,
|
|
963
|
+
status: updated.status as 'paused' | 'active',
|
|
964
|
+
// `affected_packages` is `Package[]` (per `/schemas/latest/core/package.json`)
|
|
965
|
+
// — objects with at minimum `package_id`. Don't return bare strings;
|
|
966
|
+
// the update-media-buy-response oneOf discriminates against them and
|
|
967
|
+
// the error looks like `/affected_packages/0: must be object`.
|
|
968
|
+
affected_packages: (existing.packages ?? []).map((p: { package_id: string }) => ({
|
|
969
|
+
package_id: p.package_id,
|
|
970
|
+
})),
|
|
971
|
+
};
|
|
972
|
+
},
|
|
973
|
+
getMediaBuys: async (params, ctx) => {
|
|
974
|
+
const result = await ctx.store.list('media_buys');
|
|
975
|
+
return { media_buys: result.items };
|
|
976
|
+
},
|
|
977
|
+
getMediaBuyDelivery: async (params, ctx) => {
|
|
978
|
+
/* ... */
|
|
979
|
+
},
|
|
980
|
+
listCreativeFormats: async (params, ctx) => {
|
|
981
|
+
/* ... */
|
|
982
|
+
},
|
|
983
|
+
syncCreatives: async (params, ctx) => {
|
|
984
|
+
return {
|
|
985
|
+
// Response shape is `creatives: [{ creative_id, action }]` per the
|
|
986
|
+
// sync_creatives response schema — NOT `synced_creatives`.
|
|
987
|
+
creatives:
|
|
988
|
+
params.creatives?.map(c => ({
|
|
989
|
+
creative_id: c.creative_id ?? `cr_${randomUUID()}`,
|
|
990
|
+
action: 'created' as const,
|
|
991
|
+
})) ?? [],
|
|
992
|
+
};
|
|
993
|
+
},
|
|
994
|
+
},
|
|
995
|
+
capabilities: {
|
|
996
|
+
features: { inlineCreativeManagement: false },
|
|
997
|
+
},
|
|
998
|
+
});
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
serve(createAgent);
|
|
1002
|
+
```
|
|
1003
|
+
|
|
1004
|
+
Key points:
|
|
1005
|
+
|
|
1006
|
+
1. Single `.ts` file — all domain handlers in one `createAdcpServer` call
|
|
1007
|
+
2. `get_adcp_capabilities` is auto-generated from your handlers — don't register it manually (idempotency capability is auto-declared too)
|
|
1008
|
+
3. Response builders are auto-applied — just return the data
|
|
1009
|
+
4. Use `ctx.store` for state — persists across stateless HTTP requests
|
|
1010
|
+
5. Set `sandbox: true` on all mock/demo responses
|
|
1011
|
+
6. Use `adcpError()` for business validation failures
|
|
1012
|
+
7. Use `as const` on string literal arrays and union-typed fields in product definitions — TypeScript infers `string[]` from `['display', 'olv']` but the SDK requires specific union types like `MediaChannel[]`. Apply `as const` to `channels`, `delivery_type`, `selection_type`, and `pricing_model` values.
|
|
1013
|
+
|
|
1014
|
+
## Governance
|
|
1015
|
+
|
|
1016
|
+
The Implementation example above already shows the baseline `checkGovernance()` call on `create_media_buy`. This section covers the regulated-category flow: when a buyer's governance plan marks a media buy as requiring human review, you MUST route it to a human approver before committing spend.
|
|
1017
|
+
|
|
1018
|
+
### GDPR Art 22 / EU AI Act — when to require human review
|
|
1019
|
+
|
|
1020
|
+
**Why.** GDPR Article 22 bars fully automated decisions with legal or similarly significant effect on the data subject in certain contexts. The EU AI Act classifies some advertising use cases as Annex III high-risk — employment ads, credit offers, housing, insurance, education. For regulated verticals, fully automated media buys are non-compliant; the seller must put a human in the loop and preserve the decision record.
|
|
1021
|
+
|
|
1022
|
+
The buyer signals this by setting `plan.human_review_required: true` on the governance plan. AdCP 3.0 GA made this the canonical field — replacing `budget.authority_level: 'human_required'` from earlier drafts.
|
|
1023
|
+
|
|
1024
|
+
**Seller obligation.** On `create_media_buy`:
|
|
1025
|
+
|
|
1026
|
+
1. Read `plan.human_review_required` from the buyer's governance plan (which you already fetched / synced via `sync_plans` or the inbound governance check).
|
|
1027
|
+
2. If `true` — enqueue the buy for human approval and return `status: 'submitted'` with a `task_id` the buyer can poll. Do NOT execute the buy until an approver signs off.
|
|
1028
|
+
3. On approval, construct the override artifact with `buildHumanOverride({ reason, approver, approvedAt })` and persist it alongside the completed buy. The override is the compliance evidence that a human authorized the automated path.
|
|
1029
|
+
4. If `false` — proceed with the normal `checkGovernance()` flow and commit.
|
|
1030
|
+
|
|
1031
|
+
### Worked example
|
|
1032
|
+
|
|
1033
|
+
```typescript
|
|
1034
|
+
import {
|
|
1035
|
+
createAdcpServer,
|
|
1036
|
+
serve,
|
|
1037
|
+
adcpError,
|
|
1038
|
+
buildHumanOverride,
|
|
1039
|
+
checkGovernance,
|
|
1040
|
+
governanceDeniedError,
|
|
1041
|
+
} from '@adcp/sdk';
|
|
1042
|
+
import { taskToolResponse, type AdcpStateStore } from '@adcp/sdk/server';
|
|
1043
|
+
import { randomUUID } from 'node:crypto';
|
|
1044
|
+
|
|
1045
|
+
serve(() =>
|
|
1046
|
+
createAdcpServer({
|
|
1047
|
+
name: 'Regulated Publisher',
|
|
1048
|
+
version: '1.0.0',
|
|
1049
|
+
resolveAccount: async ref => db.findAccount(ref),
|
|
1050
|
+
mediaBuy: {
|
|
1051
|
+
createMediaBuy: async (params, ctx) => {
|
|
1052
|
+
if (!ctx.account) {
|
|
1053
|
+
return adcpError('ACCOUNT_NOT_FOUND', { field: 'account' });
|
|
1054
|
+
}
|
|
1055
|
+
const plan = await ctx.store.get('governance_plans', params.plan_id ?? '');
|
|
1056
|
+
if (!plan) return adcpError('PLAN_NOT_FOUND', { field: 'plan_id' });
|
|
1057
|
+
|
|
1058
|
+
// Human-review gate — GDPR Art 22 / EU AI Act Annex III.
|
|
1059
|
+
if (plan.human_review_required === true) {
|
|
1060
|
+
const taskId = `task_${randomUUID()}`;
|
|
1061
|
+
await ctx.store.put('pending_reviews', taskId, {
|
|
1062
|
+
plan_id: params.plan_id,
|
|
1063
|
+
params,
|
|
1064
|
+
enqueued_at: new Date().toISOString(),
|
|
1065
|
+
account_id: ctx.account.id,
|
|
1066
|
+
// Buyer's webhook target for async completion, if they supplied one.
|
|
1067
|
+
webhook_url: params.push_notification_config?.url,
|
|
1068
|
+
});
|
|
1069
|
+
// Route this task_id to your human-review queue (Slack approval,
|
|
1070
|
+
// ops ticket, internal UI — whatever your reviewers use).
|
|
1071
|
+
await humanReviewQueue.enqueue(taskId);
|
|
1072
|
+
// Submitted envelope per CreateMediaBuySubmitted. Do NOT return a
|
|
1073
|
+
// populated MediaBuy here — media_buy_id and packages land on the
|
|
1074
|
+
// completion artifact once a human approves. taskToolResponse bypasses
|
|
1075
|
+
// the default mediaBuyResponse wrap, which would stamp revision /
|
|
1076
|
+
// confirmed_at / valid_actions — fields that don't belong on a task
|
|
1077
|
+
// envelope.
|
|
1078
|
+
return taskToolResponse({ status: 'submitted', task_id: taskId });
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
// Non-regulated path — normal governance check, commit synchronously.
|
|
1082
|
+
if (ctx.account.governanceUrl) {
|
|
1083
|
+
const gov = await checkGovernance({
|
|
1084
|
+
agentUrl: ctx.account.governanceUrl,
|
|
1085
|
+
planId: params.plan_id ?? 'default',
|
|
1086
|
+
caller: 'https://my-publisher.com/mcp',
|
|
1087
|
+
tool: 'create_media_buy',
|
|
1088
|
+
payload: params,
|
|
1089
|
+
});
|
|
1090
|
+
if (!gov.approved) return governanceDeniedError(gov);
|
|
1091
|
+
}
|
|
1092
|
+
return executeBuy(params, ctx.store);
|
|
1093
|
+
},
|
|
1094
|
+
},
|
|
1095
|
+
})
|
|
1096
|
+
);
|
|
1097
|
+
|
|
1098
|
+
// Called by the human-review UI when a reviewer signs off. Lives outside any
|
|
1099
|
+
// request handler, so it takes its own AdcpStateStore — the same instance you
|
|
1100
|
+
// passed to createAdcpServer via `stateStore`. No ctx in scope here.
|
|
1101
|
+
async function onHumanApproval(store: AdcpStateStore, taskId: string, approver: string, reason: string): Promise<void> {
|
|
1102
|
+
const pending = await store.get('pending_reviews', taskId);
|
|
1103
|
+
if (!pending) throw new Error(`No pending review with id ${taskId}`);
|
|
1104
|
+
|
|
1105
|
+
// Validates reason ≥ 20 chars, approver as email, no control chars,
|
|
1106
|
+
// ISO 8601 approved_at.
|
|
1107
|
+
const override = buildHumanOverride({
|
|
1108
|
+
reason,
|
|
1109
|
+
approver,
|
|
1110
|
+
approvedAt: new Date(),
|
|
1111
|
+
});
|
|
1112
|
+
|
|
1113
|
+
const buy = await executeBuy(pending.params, store);
|
|
1114
|
+
await store.put('media_buys', buy.media_buy_id, {
|
|
1115
|
+
...buy,
|
|
1116
|
+
human_override: override,
|
|
1117
|
+
plan_id: pending.plan_id,
|
|
1118
|
+
account_id: pending.account_id,
|
|
1119
|
+
});
|
|
1120
|
+
await store.delete('pending_reviews', taskId);
|
|
1121
|
+
|
|
1122
|
+
// Notify the buyer. Two options, pick based on what your server wires up:
|
|
1123
|
+
// 1. If you configured `webhooks` on createAdcpServer and the buyer sent
|
|
1124
|
+
// push_notification_config.url, POST the completion event from the
|
|
1125
|
+
// emitter built at boot (hoisted outside createAdcpServer so it's
|
|
1126
|
+
// reachable here). See § Guaranteed delivery / IO signing for the
|
|
1127
|
+
// emitter construction.
|
|
1128
|
+
// 2. Otherwise the buyer polls — they already have the task_id and will
|
|
1129
|
+
// discover the committed buy via get_media_buys once it lands in
|
|
1130
|
+
// 'media_buys'.
|
|
1131
|
+
}
|
|
1132
|
+
```
|
|
1133
|
+
|
|
1134
|
+
### Decision table
|
|
1135
|
+
|
|
1136
|
+
| Plan shape | `human_review_required` | Who approves | Artifact required |
|
|
1137
|
+
| -------------------------------------------------------------------------- | ----------------------- | -------------------- | ----------------------------------------------- |
|
|
1138
|
+
| General consumer CPG, travel, retail | `false` (or absent) | Automated governance | `governance_context` echoed through lifecycle |
|
|
1139
|
+
| Employment, credit, housing, insurance, education (Annex III high-risk) | `true` (required) | Human reviewer | `human_override` built via `buildHumanOverride` |
|
|
1140
|
+
| Fair-housing, fair-lending, fair-employment, pharmaceutical (US regulated) | `true` (required) | Human reviewer | `human_override` built via `buildHumanOverride` |
|
|
1141
|
+
| Explicit `policy_ids: ['eu_ai_act_annex_iii']` | `true` (required) | Human reviewer | `human_override` built via `buildHumanOverride` |
|
|
1142
|
+
|
|
1143
|
+
`REGULATED_HUMAN_REVIEW_CATEGORIES` (exported from `@adcp/sdk`) is the client-side minimum: `['fair_housing', 'fair_lending', 'fair_employment', 'pharmaceutical_advertising']`. `ANNEX_III_POLICY_IDS` is `['eu_ai_act_annex_iii']`. Governance agents resolve synonyms and per-publisher extensions server-side; these constants exist so pre-submit validation doesn't round-trip. Extend with your own vertical list if needed.
|
|
1144
|
+
|
|
1145
|
+
### Pitfalls
|
|
1146
|
+
|
|
1147
|
+
- Don't silently flip `human_review_required: true → false` on re-sync without `buildHumanOverride`. That's a compliance violation — the whole point of the field is that downgrades require documented human authorization.
|
|
1148
|
+
- `buildHumanOverride` throws if `reason` trims to fewer than 20 characters, if `approver` fails the email regex, if either has control characters, or if `approvedAt` isn't a `Date` / parseable ISO 8601 string. Validate your UI's approval form against the same rules.
|
|
1149
|
+
- Thread `governance_context` through `create_media_buy` → `update_media_buy` → delivery / lifecycle events. Dropping it breaks the audit chain — downstream governance checks need the opaque token to reconcile decisions.
|
|
1150
|
+
|
|
1151
|
+
<a name="idempotency"></a>
|
|
1152
|
+
|
|
1153
|
+
## Idempotency
|
|
1154
|
+
|
|
1155
|
+
AdCP v3 requires an `idempotency_key` on every mutating request. For sellers, that's `create_media_buy`, `update_media_buy`, `sync_creatives`, and any `sync_*` tools you implement. Idempotency is wired in the Implementation example above — this section explains what the framework does for you and the subtleties to know.
|
|
1156
|
+
|
|
1157
|
+
**What the framework handles when you pass `idempotency` to `createAdcpServer`:**
|
|
1158
|
+
|
|
1159
|
+
- Rejects missing or malformed `idempotency_key` with `INVALID_REQUEST`. The spec pattern is `^[A-Za-z0-9_.:-]{16,255}$` — a test key like `"key1"` will be rejected for length, not idempotency logic. **Ordering gotcha**: idempotency runs AFTER `resolveAccount`. If your `resolveAccount` returns null for a valid-shape reference, the buyer gets `ACCOUNT_NOT_FOUND` — NOT the missing-key error they expected — and conformance tests fail with the wrong code. Either handle both AccountReference branches (see Implementation above) or accept dev-mode brand+operator wildcards so compliance graders reach the idempotency layer.
|
|
1160
|
+
- Hashes the request payload with RFC 8785 JCS. The emitted error codes and their semantics are in the table at [§ Composing OAuth, signing, and idempotency](#composing-oauth-signing-and-idempotency).
|
|
1161
|
+
- Injects `replayed: true` on `result.structuredContent.replayed` when returning a cached response; fresh executions omit the field.
|
|
1162
|
+
- Auto-declares `adcp.idempotency.replay_ttl_seconds` on `get_adcp_capabilities`.
|
|
1163
|
+
- Only caches successful responses — errors re-execute on retry so transient failures don't lock into the cache. This applies to every `recovery` class including `terminal`: the AdCP terminal catalog (`ACCOUNT_SUSPENDED`, `BUDGET_EXHAUSTED`, `ACCOUNT_PAYMENT_REQUIRED`, `ACCOUNT_SETUP_REQUIRED`) is mostly state-dependent, and caching would return stale errors after the buyer remediates. Only `UNSUPPORTED_FEATURE` and `ACCOUNT_NOT_FOUND` are truly immutable, and re-executing them is cheap.
|
|
1164
|
+
- Atomic claim on `check()` so concurrent retries with a fresh key don't all race to execute side effects.
|
|
1165
|
+
|
|
1166
|
+
**Handler contract: mutate last.** The framework releases the idempotency claim on ANY error path — `return adcpError(...)`, `throw adcpError(...)` (auto-unwrapped by the dispatcher), and uncaught exceptions all release. A handler that writes state then errors will double-write on retry:
|
|
1167
|
+
|
|
1168
|
+
```typescript
|
|
1169
|
+
// BROKEN: write happens, error releases claim, retry re-writes
|
|
1170
|
+
await db.insert(mediaBuy);
|
|
1171
|
+
if (!budgetApproved) return adcpError('BUDGET_EXHAUSTED', { ... }); // claim released, insert already persisted
|
|
1172
|
+
|
|
1173
|
+
// CORRECT: validate first, write last
|
|
1174
|
+
if (!budgetApproved) return adcpError('BUDGET_EXHAUSTED', { ... }); // no write yet, safe to release
|
|
1175
|
+
await db.insert(mediaBuy);
|
|
1176
|
+
return mediaBuyResponse({ ... });
|
|
1177
|
+
```
|
|
1178
|
+
|
|
1179
|
+
If the validation can only run after a partial write (rare), make the write itself idempotent — natural-key upsert or the `ctx.store.get` → merge pattern — so re-execution converges on the same state.
|
|
1180
|
+
|
|
1181
|
+
**Scoping**: the principal comes from `resolveSessionKey` (or override with `resolveIdempotencyPrincipal(ctx, params, toolName)` for per-tool custom scopes). Two callers with the same principal share a cache namespace; different principals are isolated.
|
|
1182
|
+
|
|
1183
|
+
**Two things to know**:
|
|
1184
|
+
|
|
1185
|
+
1. `ttlSeconds` must be `3600` (1h) to `604800` (7d) — out of range throws at `createIdempotencyStore` construction. Don't pass minutes thinking they're seconds.
|
|
1186
|
+
2. If you register mutating handlers without passing `idempotency`, the framework logs an error at server-creation time (v3 non-compliance). Silence it by either wiring idempotency or setting `capabilities.idempotency.replay_ttl_seconds` in your config (declares non-compliance to buyers).
|
|
1187
|
+
|
|
1188
|
+
**Buyer-side crash recovery.** When your buyers' processes die mid-retry they need to know whether to re-send. Point them at [`docs/guides/idempotency-crash-recovery.md`](../../docs/guides/idempotency-crash-recovery.md) — worked recipe for natural-key lookup, `IdempotencyConflictError` / `IdempotencyExpiredError`, and `metadata.replayed` as the side-effect gate.
|
|
1189
|
+
|
|
1190
|
+
**Known grader limitation (tracked upstream as [#678](https://github.com/adcontextprotocol/adcp-client/issues/678)).** The `idempotency` storyboard's missing-key step probes your agent with a raw HTTP POST (bypassing the SDK's `idempotency_key` auto-injection) but may not negotiate the MCP Streamable HTTP `Accept` header correctly, returning `Not Acceptable: Client must accept both application/json and text/event-stream` instead of the expected `INVALID_REQUEST`. This is a grader-side issue — your framework wiring is still correct, it'll pass once #678 lands. Ignore this specific sub-step failure in the interim.
|
|
1191
|
+
|
|
1192
|
+
## Going to Production
|
|
1193
|
+
|
|
1194
|
+
The quick-start uses `memoryBackend()` + `InMemoryStateStore` — both reset on process restart and don't scale across replicas. Production swaps three pieces: `createIdempotencyStore({ backend: pgBackend(pool) })`, `PostgresStateStore(pool)`, `PostgresTaskStore(pool)`. Run the three migrations at boot (`getIdempotencyMigration()`, `getAdcpStateMigration()`, `MCP_TASKS_MIGRATION`), wire `cleanupExpiredIdempotency(pool)` on an hourly cron, and set `resolveAccount` to hit your real DB instead of `InMemoryStateStore`. Full worked example with Pool sizing and multi-tenant principal resolution lives in [`docs/guides/BUILD-AN-AGENT.md`](../../docs/guides/BUILD-AN-AGENT.md) § Going to Production.
|
|
1195
|
+
|
|
1196
|
+
**Critical: probe the pool at boot.** `pg.Pool` is lazy — `new Pool({ connectionString })` does not validate the URL. A bad `DATABASE_URL` lets the server start, advertise `IdempotencySupported`, and then silently fail every mutating call. Wire `readinessCheck` on `serve()` so the server never accepts traffic with a broken pool:
|
|
1197
|
+
|
|
1198
|
+
```ts
|
|
1199
|
+
const store = createIdempotencyStore({ backend: pgBackend(pool), ttlSeconds: 86400 });
|
|
1200
|
+
pool.on('error', (err) => console.error('pg pool error', err)); // prevent crash on idle-client errors
|
|
1201
|
+
serve(createAgent, {
|
|
1202
|
+
readinessCheck: () => store.probe(), // throws with a descriptive error if pool/table is broken
|
|
1203
|
+
});
|
|
1204
|
+
```
|
|
1205
|
+
|
|
1206
|
+
Auth is not wired in the example — see [§ Protecting your agent](#protecting-your-agent) below.
|
|
1207
|
+
|
|
1208
|
+
## Deployment beyond single-host HTTP
|
|
1209
|
+
|
|
1210
|
+
`serve(createAgent, { port, authenticate })` is sufficient for single-host HTTP — including every compliance storyboard. For other deployment shapes (multi-host, Express composition with OAuth Authorization Server routes, stdio, per-host OAuth), see [`deployment.md`](./deployment.md) — covers `createExpressAdapter`, multi-host dispatch, `resolveHost`, per-host OAuth providers, and the stdio transport.
|
|
1211
|
+
|
|
1212
|
+
<a name="protecting-your-agent"></a>
|
|
1213
|
+
|
|
1214
|
+
## Protecting your agent
|
|
1215
|
+
|
|
1216
|
+
**An AdCP agent that accepts unauthenticated requests is non-compliant.** The compliance runner enforces this via the `security_baseline` storyboard (every agent regardless of specialism). You MUST pick at least one of:
|
|
1217
|
+
|
|
1218
|
+
- **API key** — static bearer tokens looked up in your database or a constant map. Best for B2B integrations with a known counterparty.
|
|
1219
|
+
- **OAuth 2.0** — JWTs signed by an IdP (WorkOS, Auth0, Clerk, Okta, a self-hosted authorization server). Best when buyers authenticate as themselves.
|
|
1220
|
+
- **Both** — accept either at runtime via `anyOf(verifyApiKey(...), verifyBearer(...))`.
|
|
1221
|
+
|
|
1222
|
+
Ask the operator which mechanism they want before generating code. "API key, OAuth, or both?" is the first question.
|
|
1223
|
+
|
|
1224
|
+
### API key
|
|
1225
|
+
|
|
1226
|
+
```typescript
|
|
1227
|
+
import { serve } from '@adcp/sdk';
|
|
1228
|
+
import { verifyApiKey } from '@adcp/sdk/server';
|
|
1229
|
+
|
|
1230
|
+
serve(createAgent, {
|
|
1231
|
+
authenticate: verifyApiKey({
|
|
1232
|
+
verify: async token => {
|
|
1233
|
+
const row = await db.api_keys.findUnique({ where: { token } });
|
|
1234
|
+
if (!row) return null; // framework replies 401 with WWW-Authenticate
|
|
1235
|
+
return { principal: row.account_id };
|
|
1236
|
+
},
|
|
1237
|
+
}),
|
|
1238
|
+
});
|
|
1239
|
+
```
|
|
1240
|
+
|
|
1241
|
+
For local development use the static `keys` map: `verifyApiKey({ keys: { sk_test: { principal: 'dev' } } })`.
|
|
1242
|
+
|
|
1243
|
+
### OAuth
|
|
1244
|
+
|
|
1245
|
+
```typescript
|
|
1246
|
+
import { serve } from '@adcp/sdk';
|
|
1247
|
+
import { verifyBearer } from '@adcp/sdk/server';
|
|
1248
|
+
|
|
1249
|
+
const AGENT_URL = 'https://my-agent.example.com/mcp';
|
|
1250
|
+
|
|
1251
|
+
serve(createAgent, {
|
|
1252
|
+
publicUrl: AGENT_URL, // canonical RFC 8707 audience
|
|
1253
|
+
authenticate: verifyBearer({
|
|
1254
|
+
jwksUri: 'https://auth.example.com/.well-known/jwks.json',
|
|
1255
|
+
issuer: 'https://auth.example.com',
|
|
1256
|
+
audience: AGENT_URL, // MUST equal publicUrl
|
|
1257
|
+
}),
|
|
1258
|
+
protectedResource: {
|
|
1259
|
+
authorization_servers: ['https://auth.example.com'],
|
|
1260
|
+
scopes_supported: ['read', 'write'],
|
|
1261
|
+
},
|
|
1262
|
+
});
|
|
1263
|
+
```
|
|
1264
|
+
|
|
1265
|
+
Set `publicUrl` to the canonical https:// URL clients use — the framework serves `/.well-known/oauth-protected-resource/mcp` with that exact `resource` value, and the JWT `audience` check rejects tokens minted for any other URL. Deriving the resource URL from `publicUrl` (not the incoming `Host` header) is what stops a phishing attacker from making your server advertise `https://evil.example/mcp` as the audience.
|
|
1266
|
+
|
|
1267
|
+
### Both
|
|
1268
|
+
|
|
1269
|
+
```typescript
|
|
1270
|
+
import { serve } from '@adcp/sdk';
|
|
1271
|
+
import { verifyApiKey, verifyBearer, anyOf } from '@adcp/sdk/server';
|
|
1272
|
+
|
|
1273
|
+
serve(createAgent, {
|
|
1274
|
+
publicUrl: AGENT_URL,
|
|
1275
|
+
authenticate: anyOf(verifyApiKey({ verify: lookupApiKey }), verifyBearer({ jwksUri, issuer, audience: AGENT_URL })),
|
|
1276
|
+
protectedResource: { authorization_servers: [issuer] },
|
|
1277
|
+
});
|
|
1278
|
+
```
|
|
1279
|
+
|
|
1280
|
+
### Compliance checklist
|
|
1281
|
+
|
|
1282
|
+
The `security_baseline` storyboard verifies:
|
|
1283
|
+
|
|
1284
|
+
1. Unauthenticated request → MUST return 401 (or 403) with a `WWW-Authenticate: Bearer ...` header. The framework does this for you when `authenticate` returns `null` or throws.
|
|
1285
|
+
2. At least one of API-key or OAuth discovery must succeed.
|
|
1286
|
+
3. If OAuth is advertised, the `resource` field in `/.well-known/oauth-protected-resource` MUST match the URL being called. Set `publicUrl` once — the framework enforces this automatically.
|
|
1287
|
+
|
|
1288
|
+
## Validate Locally
|
|
1289
|
+
|
|
1290
|
+
**Full validation checklist:** [docs/guides/VALIDATE-YOUR-AGENT.md](../../docs/guides/VALIDATE-YOUR-AGENT.md). The commands below cover what a seller agent specifically needs.
|
|
1291
|
+
|
|
1292
|
+
**Boot the agent:**
|
|
1293
|
+
|
|
1294
|
+
```bash
|
|
1295
|
+
npx tsx agent.ts &
|
|
1296
|
+
```
|
|
1297
|
+
|
|
1298
|
+
**Happy-path conformance (storyboard runner):**
|
|
1299
|
+
|
|
1300
|
+
```bash
|
|
1301
|
+
# Full seller lifecycle
|
|
1302
|
+
npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp media_buy_seller --auth $TOKEN
|
|
1303
|
+
|
|
1304
|
+
# Your specialism bundle (one of: sales_guaranteed, sales_non_guaranteed,
|
|
1305
|
+
# sales_broadcast_tv, sales_streaming_tv, sales_social, sales_proposal_mode)
|
|
1306
|
+
npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp sales_guaranteed --auth $TOKEN
|
|
1307
|
+
|
|
1308
|
+
# Cross-cutting obligations — every seller must pass these
|
|
1309
|
+
npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp \
|
|
1310
|
+
--storyboards idempotency,security_baseline,schema_validation,error_compliance --auth $TOKEN
|
|
1311
|
+
|
|
1312
|
+
# Webhook conformance (if you claim async task lifecycles)
|
|
1313
|
+
npx @adcp/sdk@latest storyboard run http://localhost:3001/mcp webhook_emission \
|
|
1314
|
+
--webhook-receiver --auth $TOKEN
|
|
1315
|
+
```
|
|
1316
|
+
|
|
1317
|
+
**Rejection-surface conformance (property-based fuzzer — catches crashes on edge inputs):**
|
|
1318
|
+
|
|
1319
|
+
```bash
|
|
1320
|
+
npx @adcp/sdk@latest fuzz http://localhost:3001/mcp \
|
|
1321
|
+
--tools get_products,get_media_buys,list_creative_formats \
|
|
1322
|
+
--auth-token $TOKEN
|
|
1323
|
+
```
|
|
1324
|
+
|
|
1325
|
+
**Request signing (if you claim `signed-requests`):** point `adcp grade request-signing` at your sandbox — see [VALIDATE-YOUR-AGENT.md § Request signing](../../docs/guides/VALIDATE-YOUR-AGENT.md#request-signing--adcp-grade-request-signing).
|
|
1326
|
+
|
|
1327
|
+
**Multi-instance (before production):** run with two `--url` flags to catch `(brand, account)`-scoped state that lives per-process. See [VALIDATE-YOUR-AGENT.md § Multi-instance](../../docs/guides/VALIDATE-YOUR-AGENT.md#multi-instance-testing).
|
|
1328
|
+
|
|
1329
|
+
Common failure decoder:
|
|
1330
|
+
|
|
1331
|
+
- `response_schema` → response doesn't match Zod schema
|
|
1332
|
+
- `field_present` → required field missing
|
|
1333
|
+
- `mcp_error` → check tool registration (schema, name)
|
|
1334
|
+
- `authority_level` / `human_review_required` mismatch → check governance plan shape — schema moved in AdCP 3.0 GA
|
|
1335
|
+
|
|
1336
|
+
**Keep iterating until all steps pass.** If you can't bind ports locally, skip `tsx agent.ts` and run `npm run compliance:skill-matrix -- --filter seller` — it builds an isolated sandbox and grades end-to-end.
|
|
1337
|
+
|
|
1338
|
+
## Storyboards
|
|
1339
|
+
|
|
1340
|
+
| Storyboard | Use case |
|
|
1341
|
+
| ------------------------------- | ------------------------------------------------------ |
|
|
1342
|
+
| `media_buy_seller` | Full lifecycle — every seller should pass this |
|
|
1343
|
+
| `media_buy_non_guaranteed` | Auction flow with bid adjustment |
|
|
1344
|
+
| `media_buy_guaranteed_approval` | IO approval workflow |
|
|
1345
|
+
| `media_buy_proposal_mode` | AI-generated proposals |
|
|
1346
|
+
| `media_buy_catalog_creative` | Catalog sync + conversions |
|
|
1347
|
+
| `schema_validation` | Schema compliance + date validation errors |
|
|
1348
|
+
| `deterministic_testing` | State machine correctness via `comply_test_controller` |
|
|
1349
|
+
|
|
1350
|
+
## Common Mistakes
|
|
1351
|
+
|
|
1352
|
+
| Mistake | Fix |
|
|
1353
|
+
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1354
|
+
| Using `createTaskCapableServer` + `server.tool()` | Use `createAdcpServer` — handles schemas, response builders, capabilities |
|
|
1355
|
+
| Using module-level Maps for state | Use `ctx.store` — persists across HTTP requests, swappable for postgres |
|
|
1356
|
+
| Return raw JSON without response builders | `createAdcpServer` auto-applies response builders — just return the data |
|
|
1357
|
+
| Missing `brand`/`operator` in sync_accounts response | Echo them back from the request — they're required |
|
|
1358
|
+
| sync_governance returns wrong shape | Must include `status: 'synced'` and `governance_agents` array |
|
|
1359
|
+
| `sandbox: false` on mock data | Buyers may treat mock data as real |
|
|
1360
|
+
| Returns raw JSON for validation failures | Use `adcpError('INVALID_REQUEST', { message })` — storyboards validate the `adcp_error` structure |
|
|
1361
|
+
| IO-signing setup URL at top level of media buy response | Nest it in `account.setup`: `{ account: { setup: { url, message } } }`. Response builders reject a top-level `setup` at runtime. |
|
|
1362
|
+
| Bypassing response builders and forgetting `valid_actions` | `mediaBuyResponse` and `updateMediaBuyResponse` auto-populate `valid_actions` from `status` — use them. For `get_media_buys`, populate each buy with `validActionsForStatus(status)`. |
|
|
1363
|
+
| Missing `publisher_properties` or `format_ids` on Product | Both are required — see product example in `get_products` section |
|
|
1364
|
+
| format_ids in products don't match list_creative_formats | Buyers echo format_ids from products into sync_creatives — if your validation rejects your own format_ids, the buyer can't fulfill creative requirements |
|
|
1365
|
+
| Missing `@types/node` in devDependencies | `process.env` doesn't resolve without it — see Setup section |
|
|
1366
|
+
| Dropping `context` from responses | Echo `args.context` back unchanged in every response — buyers use it for correlation |
|
|
1367
|
+
| `channels` typed as `string[]` instead of `MediaChannel[]` | Use `as const` on channel arrays: `channels: ['display', 'olv'] as const`. TypeScript infers `string[]` from array literals, but the SDK requires the `MediaChannel` union type. |
|
|
1368
|
+
|
|
1369
|
+
### Translating storyboard runner output
|
|
1370
|
+
|
|
1371
|
+
When `adcp storyboard run <url> <storyboard> --json` reports a failure, the `details` / `error` strings fall into these categories:
|
|
1372
|
+
|
|
1373
|
+
| Storyboard signal | What it means | Fix |
|
|
1374
|
+
| ------------------------------------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
1375
|
+
| `✗ Response matches <tool>-response.json schema` | Your return shape doesn't match the spec response schema | Return fields the schema requires; don't add top-level fields the schema rejects |
|
|
1376
|
+
| `✗ field_present` (path: …) | Required field missing or at the wrong path | Check the spec's `*-response.json` for the field; common miss: `context.correlation_id` not echoed back |
|
|
1377
|
+
| `✗ field_value` expected X got Y | Value mismatch on a specific path | Most often `context.correlation_id` drift or a status enum value that's stale |
|
|
1378
|
+
| `mcp_error -32602: Input validation error` | SDK Zod schema rejected the **incoming** request — your handler never ran | Drift between the SDK schema and the storyboard yaml. File upstream if the storyboard is authoritative |
|
|
1379
|
+
| `Agent did not advertise tool "X"` (as a warning) | Storyboard expects a tool you haven't registered | Register the tool; if it lives in another agent (e.g., governance tools from a seller), ignore the warning |
|
|
1380
|
+
| Missing `idempotency_key` → handler never runs | Mutating request without an idempotency key | SDK rejects at the idempotency layer. File runner bug if the storyboard yaml's `sample_request` omits it |
|
|
1381
|
+
|
|
1382
|
+
## Specialism Details
|
|
1383
|
+
|
|
1384
|
+
Each specialism below has a companion file with its delta on top of the baseline. Fetch only the one you are building.
|
|
1385
|
+
|
|
1386
|
+
| Specialism | Status | Companion file |
|
|
1387
|
+
| ---------------------- | ------- | --------------------------------------------------------------------------------------------------------------------- |
|
|
1388
|
+
| `sales-guaranteed` | stable | [`specialisms/sales-guaranteed.md`](./specialisms/sales-guaranteed.md) |
|
|
1389
|
+
| `sales-non-guaranteed` | stable | [`specialisms/sales-non-guaranteed.md`](./specialisms/sales-non-guaranteed.md) |
|
|
1390
|
+
| `sales-broadcast-tv` | stable | [`specialisms/sales-broadcast-tv.md`](./specialisms/sales-broadcast-tv.md) |
|
|
1391
|
+
| `sales-streaming-tv` | preview | baseline only |
|
|
1392
|
+
| `sales-social` | stable | [`specialisms/sales-social.md`](./specialisms/sales-social.md) |
|
|
1393
|
+
| `sales-exchange` | preview | baseline only |
|
|
1394
|
+
| `sales-proposal-mode` | stable | [`specialisms/sales-proposal-mode.md`](./specialisms/sales-proposal-mode.md) |
|
|
1395
|
+
| `audience-sync` | stable | [`specialisms/audience-sync.md`](./specialisms/audience-sync.md) |
|
|
1396
|
+
| `signed-requests` | preview | [`specialisms/signed-requests.md`](./specialisms/signed-requests.md) — cross-cutting; applies to every mutating agent |
|
|
1397
|
+
|
|
1398
|
+
Claim exactly the specialisms your agent actually implements in `capabilities.specialisms`. Don't claim a specialism you only partially support — the compliance storyboard for that specialism will fail hard.
|
|
1399
|
+
|
|
1400
|
+
## Reference
|
|
1401
|
+
|
|
1402
|
+
- `docs/guides/BUILD-AN-AGENT.md` — createAdcpServer patterns, async tools, state persistence
|
|
1403
|
+
- `docs/llms.txt` — full protocol reference
|
|
1404
|
+
- `docs/TYPE-SUMMARY.md` — curated type signatures
|
|
1405
|
+
- `storyboards/media_buy_seller.yaml` — full buyer interaction sequence
|
|
1406
|
+
- `examples/error-compliant-server.ts` — seller with error handling
|
|
1407
|
+
- `src/lib/server/create-adcp-server.ts` — framework source (for TypeScript autocomplete exploration)
|