@adcp/sdk 6.9.0 → 6.10.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/bin/adcp.js +285 -5
- package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/index.json +324 -0
- package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
- package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
- package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
- package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +33 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +127 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/credential-policy.d.ts +221 -0
- package/dist/lib/server/credential-policy.d.ts.map +1 -0
- package/dist/lib/server/credential-policy.js +260 -0
- package/dist/lib/server/credential-policy.js.map +1 -0
- package/dist/lib/server/dynamic-registry.d.ts +219 -0
- package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
- package/dist/lib/server/dynamic-registry.js +245 -0
- package/dist/lib/server/dynamic-registry.js.map +1 -0
- package/dist/lib/server/index.d.ts +8 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +15 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +239 -0
- package/dist/lib/server/operational-platform.d.ts.map +1 -0
- package/dist/lib/server/operational-platform.js +94 -0
- package/dist/lib/server/operational-platform.js.map +1 -0
- package/dist/lib/server/wire-safe.d.ts +211 -0
- package/dist/lib/server/wire-safe.d.ts.map +1 -0
- package/dist/lib/server/wire-safe.js +231 -0
- package/dist/lib/server/wire-safe.js.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.js +172 -0
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +2 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +77 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
- package/dist/lib/testing/compliance/summary.js +176 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -0
- package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +51 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -2
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +4 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +58 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
id: media_buy_seller/invalid_transitions
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller rejects illegal state transitions and unknown references"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Validates that the seller returns structured AdCP errors (MEDIA_BUY_NOT_FOUND, PACKAGE_NOT_FOUND, NOT_CANCELLABLE) rather than 500s or undefined behavior when the buyer references missing entities or attempts forbidden state transitions."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- get_products
|
|
9
|
+
- create_media_buy
|
|
10
|
+
- update_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
Error-code coverage is the most common compliance gap: sellers accept malformed input
|
|
14
|
+
silently or return generic 500s rather than the specific AdCP codes the spec defines.
|
|
15
|
+
This scenario forces three of the most-referenced media_buy error codes with
|
|
16
|
+
deterministic input:
|
|
17
|
+
|
|
18
|
+
- MEDIA_BUY_NOT_FOUND — buyer references a media_buy_id that does not exist.
|
|
19
|
+
- PACKAGE_NOT_FOUND — media_buy_id is valid but package_id inside it is not.
|
|
20
|
+
- NOT_CANCELLABLE — buyer cancels the same media buy twice; the second cancel must
|
|
21
|
+
be rejected because canceled is terminal.
|
|
22
|
+
|
|
23
|
+
All three probes use hard `check: error_code` assertions so a seller that returns
|
|
24
|
+
a 500 or swallows the error fails the scenario outright. Recovery hints, correlation
|
|
25
|
+
echo, and context preservation are also checked on every error response.
|
|
26
|
+
|
|
27
|
+
agent:
|
|
28
|
+
interaction_model: media_buy_seller
|
|
29
|
+
capabilities:
|
|
30
|
+
- sells_media
|
|
31
|
+
examples:
|
|
32
|
+
- "Any media buy seller"
|
|
33
|
+
|
|
34
|
+
caller:
|
|
35
|
+
role: buyer_agent
|
|
36
|
+
example: "Pinnacle Agency (buyer)"
|
|
37
|
+
|
|
38
|
+
prerequisites:
|
|
39
|
+
description: |
|
|
40
|
+
Seller supports create_media_buy and update_media_buy with cancellation via
|
|
41
|
+
the canceled field.
|
|
42
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
43
|
+
|
|
44
|
+
phases:
|
|
45
|
+
- id: unknown_media_buy
|
|
46
|
+
title: "Reference an unknown media_buy_id"
|
|
47
|
+
narrative: |
|
|
48
|
+
Before any state is set up, call update_media_buy with a fabricated media_buy_id.
|
|
49
|
+
The seller must return MEDIA_BUY_NOT_FOUND with a correctable recovery hint — not
|
|
50
|
+
a 500 and not a silent success.
|
|
51
|
+
|
|
52
|
+
steps:
|
|
53
|
+
- id: update_unknown_media_buy
|
|
54
|
+
title: "update_media_buy with bogus media_buy_id"
|
|
55
|
+
task: update_media_buy
|
|
56
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
57
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
58
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
59
|
+
comply_scenario: media_buy_lifecycle
|
|
60
|
+
expect_error: true
|
|
61
|
+
negative_path: payload_well_formed
|
|
62
|
+
stateful: false
|
|
63
|
+
expected: |
|
|
64
|
+
Reject with:
|
|
65
|
+
- code: MEDIA_BUY_NOT_FOUND
|
|
66
|
+
- recovery: correctable
|
|
67
|
+
- context echoed unchanged
|
|
68
|
+
|
|
69
|
+
sample_request:
|
|
70
|
+
account:
|
|
71
|
+
brand:
|
|
72
|
+
domain: "acmeoutdoor.example"
|
|
73
|
+
operator: "pinnacle-agency.example"
|
|
74
|
+
media_buy_id: "does-not-exist-invalid-transitions-v1"
|
|
75
|
+
paused: true
|
|
76
|
+
idempotency_key: "$generate:uuid_v4#update_unknown_media_buy"
|
|
77
|
+
context:
|
|
78
|
+
correlation_id: "invalid_transitions--update_unknown_media_buy"
|
|
79
|
+
validations:
|
|
80
|
+
- check: error_code
|
|
81
|
+
value: "MEDIA_BUY_NOT_FOUND"
|
|
82
|
+
description: "Error code is MEDIA_BUY_NOT_FOUND"
|
|
83
|
+
- check: field_present
|
|
84
|
+
path: "context"
|
|
85
|
+
description: "Response echoes back the context object even on errors"
|
|
86
|
+
- check: field_value
|
|
87
|
+
path: "context.correlation_id"
|
|
88
|
+
value: "invalid_transitions--update_unknown_media_buy"
|
|
89
|
+
description: "Context correlation_id returned unchanged"
|
|
90
|
+
|
|
91
|
+
- id: setup
|
|
92
|
+
title: "Create a real media buy for follow-up probes"
|
|
93
|
+
narrative: |
|
|
94
|
+
The remaining probes need a real media_buy_id and package_id. Discover a product
|
|
95
|
+
and create a plain buy — no targeting tricks, no governance — so we have known-good
|
|
96
|
+
IDs for the error cases.
|
|
97
|
+
|
|
98
|
+
steps:
|
|
99
|
+
- id: get_products_brief
|
|
100
|
+
title: "Discover a product"
|
|
101
|
+
task: get_products
|
|
102
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
103
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
104
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
105
|
+
comply_scenario: full_sales_flow
|
|
106
|
+
stateful: false
|
|
107
|
+
expected: |
|
|
108
|
+
Return at least one product with pricing.
|
|
109
|
+
sample_request:
|
|
110
|
+
buying_mode: "brief"
|
|
111
|
+
brief: "Display inventory on outdoor lifestyle content. Q3 flight."
|
|
112
|
+
account:
|
|
113
|
+
brand:
|
|
114
|
+
domain: "acmeoutdoor.example"
|
|
115
|
+
operator: "pinnacle-agency.example"
|
|
116
|
+
context_outputs:
|
|
117
|
+
- path: "products[0].product_id"
|
|
118
|
+
key: "product_id"
|
|
119
|
+
- path: "products[0].pricing_options[0].pricing_option_id"
|
|
120
|
+
key: "pricing_option_id"
|
|
121
|
+
validations:
|
|
122
|
+
- check: response_schema
|
|
123
|
+
description: "Response matches get-products-response.json schema"
|
|
124
|
+
|
|
125
|
+
- id: create_buy
|
|
126
|
+
title: "Create a buy for the error probes"
|
|
127
|
+
task: create_media_buy
|
|
128
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
129
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
130
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
131
|
+
comply_scenario: create_media_buy
|
|
132
|
+
stateful: true
|
|
133
|
+
expected: |
|
|
134
|
+
Media buy created with media_buy_id and at least one package.
|
|
135
|
+
|
|
136
|
+
sample_request:
|
|
137
|
+
brand:
|
|
138
|
+
domain: "acmeoutdoor.example"
|
|
139
|
+
account:
|
|
140
|
+
brand:
|
|
141
|
+
domain: "acmeoutdoor.example"
|
|
142
|
+
operator: "pinnacle-agency.example"
|
|
143
|
+
idempotency_key: "invalid-transitions-setup-v1"
|
|
144
|
+
start_time: "2026-08-01T00:00:00Z"
|
|
145
|
+
end_time: "2026-08-31T23:59:59Z"
|
|
146
|
+
packages:
|
|
147
|
+
- product_id: "$context.product_id"
|
|
148
|
+
budget: 5000
|
|
149
|
+
pricing_option_id: "$context.pricing_option_id"
|
|
150
|
+
context:
|
|
151
|
+
correlation_id: "invalid_transitions--create_buy"
|
|
152
|
+
context_outputs:
|
|
153
|
+
- path: "media_buy_id"
|
|
154
|
+
key: "media_buy_id"
|
|
155
|
+
- path: "packages[0].package_id"
|
|
156
|
+
key: "package_id"
|
|
157
|
+
validations:
|
|
158
|
+
- check: response_schema
|
|
159
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
160
|
+
- check: field_present
|
|
161
|
+
path: "media_buy_id"
|
|
162
|
+
description: "Seller returns media_buy_id"
|
|
163
|
+
|
|
164
|
+
- id: unknown_package
|
|
165
|
+
title: "Reference an unknown package_id on a real buy"
|
|
166
|
+
narrative: |
|
|
167
|
+
The media_buy_id is real, but the package_id is fabricated. The seller must
|
|
168
|
+
return PACKAGE_NOT_FOUND — distinct from MEDIA_BUY_NOT_FOUND — because the
|
|
169
|
+
lookup succeeds at the buy level and only fails at the package lookup.
|
|
170
|
+
|
|
171
|
+
steps:
|
|
172
|
+
- id: update_unknown_package
|
|
173
|
+
title: "update_media_buy with bogus package_id"
|
|
174
|
+
task: update_media_buy
|
|
175
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
176
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
177
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
178
|
+
comply_scenario: media_buy_lifecycle
|
|
179
|
+
expect_error: true
|
|
180
|
+
negative_path: payload_well_formed
|
|
181
|
+
stateful: true
|
|
182
|
+
expected: |
|
|
183
|
+
Reject with:
|
|
184
|
+
- code: PACKAGE_NOT_FOUND
|
|
185
|
+
- recovery: correctable
|
|
186
|
+
- context echoed unchanged
|
|
187
|
+
|
|
188
|
+
sample_request:
|
|
189
|
+
account:
|
|
190
|
+
brand:
|
|
191
|
+
domain: "acmeoutdoor.example"
|
|
192
|
+
operator: "pinnacle-agency.example"
|
|
193
|
+
media_buy_id: "$context.media_buy_id"
|
|
194
|
+
idempotency_key: "$generate:uuid_v4#update_unknown_package"
|
|
195
|
+
packages:
|
|
196
|
+
- package_id: "does-not-exist-package-invalid-transitions-v1"
|
|
197
|
+
paused: true
|
|
198
|
+
context:
|
|
199
|
+
correlation_id: "invalid_transitions--update_unknown_package"
|
|
200
|
+
validations:
|
|
201
|
+
- check: error_code
|
|
202
|
+
value: "PACKAGE_NOT_FOUND"
|
|
203
|
+
description: "Error code is PACKAGE_NOT_FOUND"
|
|
204
|
+
- check: field_present
|
|
205
|
+
path: "context"
|
|
206
|
+
description: "Response echoes back the context object even on errors"
|
|
207
|
+
- check: field_value
|
|
208
|
+
path: "context.correlation_id"
|
|
209
|
+
value: "invalid_transitions--update_unknown_package"
|
|
210
|
+
description: "Context correlation_id returned unchanged"
|
|
211
|
+
|
|
212
|
+
- id: double_cancel
|
|
213
|
+
title: "Cancel twice — second cancel is not valid"
|
|
214
|
+
narrative: |
|
|
215
|
+
Cancel the buy (success), then try to cancel the same buy again. canceled is
|
|
216
|
+
terminal per the AdCP spec, so the second cancel cannot succeed. The seller
|
|
217
|
+
must return NOT_CANCELLABLE — the schema specifically reserves this code for
|
|
218
|
+
"media buy cannot be canceled in its current state."
|
|
219
|
+
|
|
220
|
+
steps:
|
|
221
|
+
- id: first_cancel
|
|
222
|
+
title: "Cancel the media buy"
|
|
223
|
+
task: update_media_buy
|
|
224
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
225
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
226
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
227
|
+
comply_scenario: media_buy_lifecycle
|
|
228
|
+
stateful: true
|
|
229
|
+
expected: |
|
|
230
|
+
Seller acknowledges the cancellation and transitions the buy to canceled.
|
|
231
|
+
|
|
232
|
+
sample_request:
|
|
233
|
+
account:
|
|
234
|
+
brand:
|
|
235
|
+
domain: "acmeoutdoor.example"
|
|
236
|
+
operator: "pinnacle-agency.example"
|
|
237
|
+
media_buy_id: "$context.media_buy_id"
|
|
238
|
+
canceled: true
|
|
239
|
+
cancellation_reason: "Testing NOT_CANCELLABLE on re-cancel"
|
|
240
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_invalid_transitions_double_cancel_first_cancel"
|
|
241
|
+
context:
|
|
242
|
+
correlation_id: "invalid_transitions--first_cancel"
|
|
243
|
+
validations:
|
|
244
|
+
- check: response_schema
|
|
245
|
+
description: "Response matches update-media-buy-response.json schema"
|
|
246
|
+
|
|
247
|
+
- id: second_cancel
|
|
248
|
+
title: "Re-cancel the canceled buy"
|
|
249
|
+
task: update_media_buy
|
|
250
|
+
schema_ref: "media-buy/update-media-buy-request.json"
|
|
251
|
+
response_schema_ref: "media-buy/update-media-buy-response.json"
|
|
252
|
+
doc_ref: "/media-buy/task-reference/update_media_buy"
|
|
253
|
+
comply_scenario: media_buy_lifecycle
|
|
254
|
+
expect_error: true
|
|
255
|
+
negative_path: payload_well_formed
|
|
256
|
+
stateful: true
|
|
257
|
+
expected: |
|
|
258
|
+
Reject with:
|
|
259
|
+
- code: NOT_CANCELLABLE
|
|
260
|
+
- recovery: correctable
|
|
261
|
+
- context echoed unchanged
|
|
262
|
+
|
|
263
|
+
sample_request:
|
|
264
|
+
account:
|
|
265
|
+
brand:
|
|
266
|
+
domain: "acmeoutdoor.example"
|
|
267
|
+
operator: "pinnacle-agency.example"
|
|
268
|
+
media_buy_id: "$context.media_buy_id"
|
|
269
|
+
canceled: true
|
|
270
|
+
cancellation_reason: "Deliberate re-cancel to force NOT_CANCELLABLE"
|
|
271
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_invalid_transitions_double_cancel_second_cancel"
|
|
272
|
+
context:
|
|
273
|
+
correlation_id: "invalid_transitions--second_cancel"
|
|
274
|
+
validations:
|
|
275
|
+
- check: error_code
|
|
276
|
+
value: "NOT_CANCELLABLE"
|
|
277
|
+
description: "Error code is NOT_CANCELLABLE on re-cancel of canceled buy"
|
|
278
|
+
- check: field_present
|
|
279
|
+
path: "context"
|
|
280
|
+
description: "Response echoes back the context object even on errors"
|
|
281
|
+
- check: field_value
|
|
282
|
+
path: "context.correlation_id"
|
|
283
|
+
value: "invalid_transitions--second_cancel"
|
|
284
|
+
description: "Context correlation_id returned unchanged"
|
package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml
ADDED
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
id: media_buy_seller/inventory_list_no_match
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller handles property_list / collection_list references that match zero inventory"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies a seller returns a zero-forecast product or a clear error — not a crash — when a buyer references inventory lists that resolve to nothing in the seller's catalog."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- get_products
|
|
9
|
+
- create_media_buy
|
|
10
|
+
|
|
11
|
+
narrative: |
|
|
12
|
+
Not every buyer list matches every seller's inventory. A buyer may point at a
|
|
13
|
+
property_list of domains this seller does not carry, or a collection_list of
|
|
14
|
+
programs this seller does not syndicate. The seller must handle that gracefully:
|
|
15
|
+
|
|
16
|
+
- Return a product with a zero forecast and explain the mismatch, OR
|
|
17
|
+
- Return an informative error on create_media_buy (INSUFFICIENT_INVENTORY or
|
|
18
|
+
similar) with findings the buyer can act on.
|
|
19
|
+
|
|
20
|
+
What the seller must NOT do: crash, return a misleading non-zero forecast, or
|
|
21
|
+
silently drop the targeting and deliver against unintended inventory. Each of
|
|
22
|
+
those is a real failure mode we've seen in adapter integrations.
|
|
23
|
+
|
|
24
|
+
This scenario exercises the no-match path using the test kit's pre-populated
|
|
25
|
+
no_match_properties and no_match_collections lists.
|
|
26
|
+
|
|
27
|
+
agent:
|
|
28
|
+
interaction_model: media_buy_seller
|
|
29
|
+
capabilities:
|
|
30
|
+
- sells_media
|
|
31
|
+
- supports_property_list_targeting
|
|
32
|
+
- supports_collection_list_targeting
|
|
33
|
+
examples:
|
|
34
|
+
- "Sellers that validate inventory against buyer-supplied lists"
|
|
35
|
+
|
|
36
|
+
caller:
|
|
37
|
+
role: buyer_agent
|
|
38
|
+
example: "Pinnacle Agency (buyer)"
|
|
39
|
+
|
|
40
|
+
prerequisites:
|
|
41
|
+
description: |
|
|
42
|
+
The seller must resolve PropertyListReference / CollectionListReference against
|
|
43
|
+
its own inventory and report a truthful outcome when nothing matches.
|
|
44
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
45
|
+
|
|
46
|
+
phases:
|
|
47
|
+
- id: discover
|
|
48
|
+
title: "Discover products"
|
|
49
|
+
steps:
|
|
50
|
+
- id: get_products_brief
|
|
51
|
+
title: "Discover products"
|
|
52
|
+
task: get_products
|
|
53
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
54
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
55
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
56
|
+
comply_scenario: full_sales_flow
|
|
57
|
+
stateful: false
|
|
58
|
+
expected: |
|
|
59
|
+
Return products the seller carries.
|
|
60
|
+
sample_request:
|
|
61
|
+
buying_mode: "brief"
|
|
62
|
+
brief: "Video inventory on outdoor lifestyle programming. Q3 flight."
|
|
63
|
+
account:
|
|
64
|
+
brand:
|
|
65
|
+
domain: "acmeoutdoor.example"
|
|
66
|
+
operator: "pinnacle-agency.example"
|
|
67
|
+
|
|
68
|
+
context:
|
|
69
|
+
correlation_id: "inventory_list_no_match--get_products_brief"
|
|
70
|
+
context_outputs:
|
|
71
|
+
- path: "products[0].product_id"
|
|
72
|
+
key: "product_id"
|
|
73
|
+
- path: "products[0].pricing_options[0].pricing_option_id"
|
|
74
|
+
key: "pricing_option_id"
|
|
75
|
+
validations:
|
|
76
|
+
- check: response_schema
|
|
77
|
+
description: "Response matches get-products-response.json schema"
|
|
78
|
+
|
|
79
|
+
- id: no_match_attempt
|
|
80
|
+
title: "Create buy with lists that match no inventory"
|
|
81
|
+
narrative: |
|
|
82
|
+
The buyer references the no-match property list and the no-match collection
|
|
83
|
+
list. Neither list resolves to anything in the seller's catalog. The seller
|
|
84
|
+
must either (a) accept the buy and surface a zero-delivery expectation, or
|
|
85
|
+
(b) reject it with an informative error. Silent success with undefined
|
|
86
|
+
delivery behaviour is not acceptable.
|
|
87
|
+
|
|
88
|
+
steps:
|
|
89
|
+
- id: create_buy_no_match
|
|
90
|
+
title: "create_media_buy against empty intersections"
|
|
91
|
+
task: create_media_buy
|
|
92
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
93
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
94
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
95
|
+
comply_scenario: create_media_buy
|
|
96
|
+
stateful: true
|
|
97
|
+
expected: |
|
|
98
|
+
One of two acceptable outcomes:
|
|
99
|
+
|
|
100
|
+
1. Buy accepted with zero-forecast reporting — status may be
|
|
101
|
+
pending_creatives/pending_start/active, but the seller returns
|
|
102
|
+
packages with forecast indicating zero deliverable inventory and
|
|
103
|
+
a message explaining the list mismatch.
|
|
104
|
+
|
|
105
|
+
2. Buy rejected with an informative error — typically
|
|
106
|
+
INSUFFICIENT_INVENTORY or INVALID_TARGETING — including findings
|
|
107
|
+
that identify which list(s) matched nothing.
|
|
108
|
+
|
|
109
|
+
What is NOT acceptable: a silently-successful buy with normal forecast
|
|
110
|
+
numbers, or a crash / non-AdCP error shape.
|
|
111
|
+
|
|
112
|
+
sample_request:
|
|
113
|
+
brand:
|
|
114
|
+
domain: "acmeoutdoor.example"
|
|
115
|
+
account:
|
|
116
|
+
brand:
|
|
117
|
+
domain: "acmeoutdoor.example"
|
|
118
|
+
operator: "pinnacle-agency.example"
|
|
119
|
+
idempotency_key: "inventory-list-no-match-v1"
|
|
120
|
+
start_time: "2026-07-01T00:00:00Z"
|
|
121
|
+
end_time: "2026-09-30T23:59:59Z"
|
|
122
|
+
packages:
|
|
123
|
+
- product_id: "$context.product_id"
|
|
124
|
+
budget: 10000
|
|
125
|
+
pricing_option_id: "$context.pricing_option_id"
|
|
126
|
+
targeting_overlay:
|
|
127
|
+
property_list:
|
|
128
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
129
|
+
list_id: "acme_outdoor_no_match_v1"
|
|
130
|
+
collection_list:
|
|
131
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
132
|
+
list_id: "acme_outdoor_no_match_collections_v1"
|
|
133
|
+
|
|
134
|
+
context:
|
|
135
|
+
correlation_id: "inventory_list_no_match--create_buy_no_match"
|
|
136
|
+
validations:
|
|
137
|
+
- check: field_present
|
|
138
|
+
path: "context"
|
|
139
|
+
description: "Response echoes back the context object (success or error)"
|
|
140
|
+
- check: field_value
|
|
141
|
+
path: "context.correlation_id"
|
|
142
|
+
value: "inventory_list_no_match--create_buy_no_match"
|
|
143
|
+
description: "Context correlation_id returned unchanged"
|