@adcp/sdk 6.9.0 → 6.11.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/decisioning/async-outcome.d.ts +17 -0
- package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -1
- package/dist/lib/server/decisioning/async-outcome.js +23 -18
- package/dist/lib/server/decisioning/async-outcome.js.map +1 -1
- package/dist/lib/server/decisioning/context.d.ts +8 -2
- package/dist/lib/server/decisioning/context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.d.ts +1 -0
- package/dist/lib/server/decisioning/index.d.ts.map +1 -1
- package/dist/lib/server/decisioning/index.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/from-platform.js +6 -4
- package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +5 -2
- package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts +5 -0
- package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js +4 -1
- package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
- package/dist/lib/server/decisioning/runtime/to-context.js +10 -2
- package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
- 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/test-controller.d.ts +2 -0
- package/dist/lib/server/test-controller.d.ts.map +1 -1
- package/dist/lib/server/test-controller.js +6 -11
- package/dist/lib/server/test-controller.js.map +1 -1
- 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/comply-controller.d.ts +2 -0
- package/dist/lib/testing/comply-controller.d.ts.map +1 -1
- package/dist/lib/testing/comply-controller.js.map +1 -1
- 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
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
id: media_buy_seller/governance_denied
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller rejects buy when governance denies"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that the seller rejects a media buy and propagates the denial when governance denies the transaction."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_products
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
This is a multi-agent test. The test harness sets up a governance plan on a governance
|
|
14
|
+
agent with a strict $10K budget, then registers that agent with the seller. The buyer
|
|
15
|
+
attempts a $50K media buy which exceeds the plan's budget.
|
|
16
|
+
|
|
17
|
+
When the seller calls check_governance, the governance agent denies because the
|
|
18
|
+
requested budget exceeds the plan total. The seller must reject the buy and propagate
|
|
19
|
+
the denial back to the buyer.
|
|
20
|
+
|
|
21
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
22
|
+
Override with --governance-agent-url to use a custom governance agent.
|
|
23
|
+
|
|
24
|
+
agent:
|
|
25
|
+
interaction_model: media_buy_seller
|
|
26
|
+
capabilities:
|
|
27
|
+
- sells_media
|
|
28
|
+
- governance_aware
|
|
29
|
+
examples:
|
|
30
|
+
- "Any media buy seller with governance support"
|
|
31
|
+
|
|
32
|
+
caller:
|
|
33
|
+
role: buyer_agent
|
|
34
|
+
example: "Pinnacle Agency (buyer)"
|
|
35
|
+
|
|
36
|
+
prerequisites:
|
|
37
|
+
description: |
|
|
38
|
+
A governance agent that supports sync_plans and check_governance.
|
|
39
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
40
|
+
|
|
41
|
+
phases:
|
|
42
|
+
- id: governance_plan_setup
|
|
43
|
+
title: "Set up strict governance plan"
|
|
44
|
+
narrative: |
|
|
45
|
+
Create a governance plan on the governance agent with a strict $10K budget
|
|
46
|
+
and agent_limited authority. The subsequent $50K buy will exceed the plan
|
|
47
|
+
budget and should be denied.
|
|
48
|
+
|
|
49
|
+
steps:
|
|
50
|
+
- id: sync_plans
|
|
51
|
+
title: "Create strict governance plan"
|
|
52
|
+
task: sync_plans
|
|
53
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
54
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
55
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
56
|
+
stateful: true
|
|
57
|
+
expected: |
|
|
58
|
+
The governance agent acknowledges the plan with a plan_id.
|
|
59
|
+
sample_request:
|
|
60
|
+
idempotency_key: "comply-gov-denied-sync-plans-v1"
|
|
61
|
+
plans:
|
|
62
|
+
- plan_id: "comply-gov-denied-plan"
|
|
63
|
+
brand:
|
|
64
|
+
domain: "acmeoutdoor.example"
|
|
65
|
+
objectives: "Small test campaign — limited budget authority"
|
|
66
|
+
budget:
|
|
67
|
+
total: 10000
|
|
68
|
+
currency: "USD"
|
|
69
|
+
reallocation_threshold: 5000
|
|
70
|
+
flight:
|
|
71
|
+
start: "2026-04-01T00:00:00Z"
|
|
72
|
+
end: "2026-06-30T23:59:59Z"
|
|
73
|
+
countries: ["US"]
|
|
74
|
+
validations:
|
|
75
|
+
- check: response_schema
|
|
76
|
+
description: "Response matches sync-plans-response.json schema"
|
|
77
|
+
|
|
78
|
+
- id: seller_setup
|
|
79
|
+
title: "Account and governance registration on seller"
|
|
80
|
+
steps:
|
|
81
|
+
- id: sync_accounts
|
|
82
|
+
title: "Establish account with seller"
|
|
83
|
+
task: sync_accounts
|
|
84
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
85
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
86
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
87
|
+
stateful: true
|
|
88
|
+
expected: |
|
|
89
|
+
Return the account with account_id and status active.
|
|
90
|
+
sample_request:
|
|
91
|
+
accounts:
|
|
92
|
+
- brand:
|
|
93
|
+
domain: "acmeoutdoor.example"
|
|
94
|
+
operator: "pinnacle-agency.example"
|
|
95
|
+
billing: "operator"
|
|
96
|
+
payment_terms: "net_30"
|
|
97
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_seller_setup_sync_accounts"
|
|
98
|
+
validations:
|
|
99
|
+
- check: response_schema
|
|
100
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
101
|
+
- check: field_present
|
|
102
|
+
path: "accounts[0].account_id"
|
|
103
|
+
description: "Account has a platform-assigned ID"
|
|
104
|
+
|
|
105
|
+
- id: sync_governance
|
|
106
|
+
title: "Register governance agent with seller"
|
|
107
|
+
task: sync_governance
|
|
108
|
+
schema_ref: "account/sync-governance-request.json"
|
|
109
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
110
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
111
|
+
stateful: true
|
|
112
|
+
expected: |
|
|
113
|
+
Acknowledge the governance agent registration.
|
|
114
|
+
sample_request:
|
|
115
|
+
accounts:
|
|
116
|
+
- account:
|
|
117
|
+
brand:
|
|
118
|
+
domain: "acmeoutdoor.example"
|
|
119
|
+
operator: "pinnacle-agency.example"
|
|
120
|
+
governance_agents:
|
|
121
|
+
- url: "$context.governance_agent_url"
|
|
122
|
+
authentication:
|
|
123
|
+
schemes: ["Bearer"]
|
|
124
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
125
|
+
categories: ["budget_authority", "brand_policy"]
|
|
126
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_seller_setup_sync_governance"
|
|
127
|
+
validations:
|
|
128
|
+
- check: response_schema
|
|
129
|
+
description: "Response matches sync-governance-response.json schema"
|
|
130
|
+
|
|
131
|
+
- id: buy_denied
|
|
132
|
+
title: "Create buy exceeding governance limits"
|
|
133
|
+
steps:
|
|
134
|
+
- id: get_products_brief
|
|
135
|
+
title: "Discover products"
|
|
136
|
+
task: get_products
|
|
137
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
138
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
139
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
140
|
+
comply_scenario: full_sales_flow
|
|
141
|
+
stateful: false
|
|
142
|
+
expected: |
|
|
143
|
+
Return products matching the brief.
|
|
144
|
+
sample_request:
|
|
145
|
+
buying_mode: "brief"
|
|
146
|
+
brief: "Premium video and display on outdoor lifestyle. Q2 flight, $50K budget. Adults 25-54, US."
|
|
147
|
+
account:
|
|
148
|
+
brand:
|
|
149
|
+
domain: "acmeoutdoor.example"
|
|
150
|
+
operator: "pinnacle-agency.example"
|
|
151
|
+
validations:
|
|
152
|
+
- check: response_schema
|
|
153
|
+
description: "Response matches get-products-response.json schema"
|
|
154
|
+
- check: field_present
|
|
155
|
+
path: "products"
|
|
156
|
+
description: "Response contains products"
|
|
157
|
+
|
|
158
|
+
- id: create_media_buy_denied
|
|
159
|
+
title: "Create buy (governance denies — should fail)"
|
|
160
|
+
task: create_media_buy
|
|
161
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
162
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
163
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
164
|
+
comply_scenario: create_media_buy
|
|
165
|
+
stateful: true
|
|
166
|
+
expect_error: true
|
|
167
|
+
negative_path: payload_well_formed
|
|
168
|
+
expected: |
|
|
169
|
+
The buy is rejected because governance denied — the $50K buy exceeds
|
|
170
|
+
the plan's $10K budget. The seller propagates the denial with findings.
|
|
171
|
+
sample_request:
|
|
172
|
+
brand:
|
|
173
|
+
domain: "acmeoutdoor.example"
|
|
174
|
+
account:
|
|
175
|
+
brand:
|
|
176
|
+
domain: "acmeoutdoor.example"
|
|
177
|
+
operator: "pinnacle-agency.example"
|
|
178
|
+
sandbox: true
|
|
179
|
+
idempotency_key: "$generate:uuid_v4#governance_denied_create_media_buy"
|
|
180
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
181
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
182
|
+
packages:
|
|
183
|
+
- product_id: "outdoor_display_q2"
|
|
184
|
+
budget: 30000
|
|
185
|
+
pricing_option_id: "cpm_standard"
|
|
186
|
+
- product_id: "outdoor_video_q2"
|
|
187
|
+
budget: 20000
|
|
188
|
+
pricing_option_id: "cpm_standard"
|
|
189
|
+
validations:
|
|
190
|
+
- check: error_code
|
|
191
|
+
value: "GOVERNANCE_DENIED"
|
|
192
|
+
description: "Error code indicates governance denial"
|
package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
id: media_buy_seller/governance_denied_recovery
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Seller accepts corrected buy after governance denial"
|
|
4
|
+
category: media_buy_seller
|
|
5
|
+
summary: "Verifies that a buyer can recover from GOVERNANCE_DENIED by shrinking the buy to within plan limits and retrying."
|
|
6
|
+
track: media_buy
|
|
7
|
+
required_tools:
|
|
8
|
+
- sync_governance
|
|
9
|
+
- get_products
|
|
10
|
+
- create_media_buy
|
|
11
|
+
|
|
12
|
+
narrative: |
|
|
13
|
+
GOVERNANCE_DENIED is a correctable error, not a dead end. The buyer must be able to
|
|
14
|
+
read the denial findings, adjust the media buy, and retry. This scenario exercises the
|
|
15
|
+
full loop: strict governance plan ($10K), failed $50K buy that is denied, then a
|
|
16
|
+
corrected $8K buy that fits within the plan and is approved.
|
|
17
|
+
|
|
18
|
+
The seller must propagate the governance findings unchanged so the buyer can identify
|
|
19
|
+
exactly which constraint was violated (budget authority, brand policy, etc.) and
|
|
20
|
+
correct it.
|
|
21
|
+
|
|
22
|
+
By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
|
|
23
|
+
Override with --governance-agent-url to use a custom governance agent.
|
|
24
|
+
|
|
25
|
+
agent:
|
|
26
|
+
interaction_model: media_buy_seller
|
|
27
|
+
capabilities:
|
|
28
|
+
- sells_media
|
|
29
|
+
- governance_aware
|
|
30
|
+
examples:
|
|
31
|
+
- "Any media buy seller with governance support"
|
|
32
|
+
|
|
33
|
+
caller:
|
|
34
|
+
role: buyer_agent
|
|
35
|
+
example: "Pinnacle Agency (buyer)"
|
|
36
|
+
|
|
37
|
+
prerequisites:
|
|
38
|
+
description: |
|
|
39
|
+
A governance agent that supports sync_plans and check_governance.
|
|
40
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
41
|
+
|
|
42
|
+
phases:
|
|
43
|
+
- id: governance_plan_setup
|
|
44
|
+
title: "Set up strict governance plan"
|
|
45
|
+
narrative: |
|
|
46
|
+
Create a governance plan with a $10K budget. The initial $50K buy will exceed this
|
|
47
|
+
limit; the retry at $8K will fit.
|
|
48
|
+
|
|
49
|
+
steps:
|
|
50
|
+
- id: sync_plans
|
|
51
|
+
title: "Create strict governance plan"
|
|
52
|
+
task: sync_plans
|
|
53
|
+
schema_ref: "governance/sync-plans-request.json"
|
|
54
|
+
response_schema_ref: "governance/sync-plans-response.json"
|
|
55
|
+
doc_ref: "/governance/campaign/tasks/sync_plans"
|
|
56
|
+
stateful: true
|
|
57
|
+
expected: |
|
|
58
|
+
The governance agent acknowledges the plan.
|
|
59
|
+
sample_request:
|
|
60
|
+
idempotency_key: "comply-gov-recovery-sync-plans-v1"
|
|
61
|
+
plans:
|
|
62
|
+
- plan_id: "comply-gov-recovery-plan"
|
|
63
|
+
brand:
|
|
64
|
+
domain: "acmeoutdoor.example"
|
|
65
|
+
objectives: "Strict-budget plan for denial + recovery validation"
|
|
66
|
+
budget:
|
|
67
|
+
total: 10000
|
|
68
|
+
currency: "USD"
|
|
69
|
+
reallocation_threshold: 5000
|
|
70
|
+
flight:
|
|
71
|
+
start: "2026-04-01T00:00:00Z"
|
|
72
|
+
end: "2026-06-30T23:59:59Z"
|
|
73
|
+
countries: ["US"]
|
|
74
|
+
validations:
|
|
75
|
+
- check: response_schema
|
|
76
|
+
description: "Response matches sync-plans-response.json schema"
|
|
77
|
+
|
|
78
|
+
- id: seller_setup
|
|
79
|
+
title: "Account and governance registration on seller"
|
|
80
|
+
steps:
|
|
81
|
+
- id: sync_accounts
|
|
82
|
+
title: "Establish account with seller"
|
|
83
|
+
task: sync_accounts
|
|
84
|
+
schema_ref: "account/sync-accounts-request.json"
|
|
85
|
+
response_schema_ref: "account/sync-accounts-response.json"
|
|
86
|
+
doc_ref: "/accounts/tasks/sync_accounts"
|
|
87
|
+
stateful: true
|
|
88
|
+
expected: |
|
|
89
|
+
Return the account with account_id active.
|
|
90
|
+
sample_request:
|
|
91
|
+
accounts:
|
|
92
|
+
- brand:
|
|
93
|
+
domain: "acmeoutdoor.example"
|
|
94
|
+
operator: "pinnacle-agency.example"
|
|
95
|
+
billing: "operator"
|
|
96
|
+
payment_terms: "net_30"
|
|
97
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_recovery_seller_setup_sync_accounts"
|
|
98
|
+
validations:
|
|
99
|
+
- check: response_schema
|
|
100
|
+
description: "Response matches sync-accounts-response.json schema"
|
|
101
|
+
- check: field_present
|
|
102
|
+
path: "accounts[0].account_id"
|
|
103
|
+
description: "Account has a platform-assigned ID"
|
|
104
|
+
|
|
105
|
+
- id: sync_governance
|
|
106
|
+
title: "Register governance agent with seller"
|
|
107
|
+
task: sync_governance
|
|
108
|
+
schema_ref: "account/sync-governance-request.json"
|
|
109
|
+
response_schema_ref: "account/sync-governance-response.json"
|
|
110
|
+
doc_ref: "/accounts/tasks/sync_governance"
|
|
111
|
+
stateful: true
|
|
112
|
+
expected: |
|
|
113
|
+
Acknowledge the governance agent registration.
|
|
114
|
+
sample_request:
|
|
115
|
+
accounts:
|
|
116
|
+
- account:
|
|
117
|
+
brand:
|
|
118
|
+
domain: "acmeoutdoor.example"
|
|
119
|
+
operator: "pinnacle-agency.example"
|
|
120
|
+
governance_agents:
|
|
121
|
+
- url: "$context.governance_agent_url"
|
|
122
|
+
authentication:
|
|
123
|
+
schemes: ["Bearer"]
|
|
124
|
+
credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
125
|
+
categories: ["budget_authority"]
|
|
126
|
+
idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_denied_recovery_seller_setup_sync_governance"
|
|
127
|
+
validations:
|
|
128
|
+
- check: response_schema
|
|
129
|
+
description: "Response matches sync-governance-response.json schema"
|
|
130
|
+
|
|
131
|
+
- id: buy_denied
|
|
132
|
+
title: "Initial buy exceeds plan — governance denies"
|
|
133
|
+
steps:
|
|
134
|
+
- id: get_products_brief
|
|
135
|
+
title: "Discover products"
|
|
136
|
+
task: get_products
|
|
137
|
+
schema_ref: "media-buy/get-products-request.json"
|
|
138
|
+
response_schema_ref: "media-buy/get-products-response.json"
|
|
139
|
+
doc_ref: "/media-buy/task-reference/get_products"
|
|
140
|
+
comply_scenario: full_sales_flow
|
|
141
|
+
stateful: false
|
|
142
|
+
expected: |
|
|
143
|
+
Return products matching the brief.
|
|
144
|
+
sample_request:
|
|
145
|
+
buying_mode: "brief"
|
|
146
|
+
brief: "Display inventory on outdoor lifestyle content. Q2 flight."
|
|
147
|
+
account:
|
|
148
|
+
brand:
|
|
149
|
+
domain: "acmeoutdoor.example"
|
|
150
|
+
operator: "pinnacle-agency.example"
|
|
151
|
+
context_outputs:
|
|
152
|
+
- path: "products[0].product_id"
|
|
153
|
+
key: "product_id"
|
|
154
|
+
- path: "products[0].pricing_options[0].pricing_option_id"
|
|
155
|
+
key: "pricing_option_id"
|
|
156
|
+
validations:
|
|
157
|
+
- check: response_schema
|
|
158
|
+
description: "Response matches get-products-response.json schema"
|
|
159
|
+
- check: field_present
|
|
160
|
+
path: "products"
|
|
161
|
+
description: "Response contains products"
|
|
162
|
+
|
|
163
|
+
- id: create_media_buy_denied
|
|
164
|
+
title: "Attempt $50K buy — denied"
|
|
165
|
+
task: create_media_buy
|
|
166
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
167
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
168
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
169
|
+
comply_scenario: create_media_buy
|
|
170
|
+
expect_error: true
|
|
171
|
+
negative_path: payload_well_formed
|
|
172
|
+
stateful: true
|
|
173
|
+
expected: |
|
|
174
|
+
The buy is rejected with GOVERNANCE_DENIED. The response includes findings
|
|
175
|
+
from the governance agent explaining which constraint was exceeded.
|
|
176
|
+
|
|
177
|
+
sample_request:
|
|
178
|
+
brand:
|
|
179
|
+
domain: "acmeoutdoor.example"
|
|
180
|
+
account:
|
|
181
|
+
brand:
|
|
182
|
+
domain: "acmeoutdoor.example"
|
|
183
|
+
operator: "pinnacle-agency.example"
|
|
184
|
+
idempotency_key: "gov-recovery-initial-denied-v1"
|
|
185
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
186
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
187
|
+
packages:
|
|
188
|
+
- product_id: "$context.product_id"
|
|
189
|
+
budget: 50000
|
|
190
|
+
pricing_option_id: "$context.pricing_option_id"
|
|
191
|
+
context:
|
|
192
|
+
correlation_id: "governance_denied_recovery--create_media_buy_denied"
|
|
193
|
+
validations:
|
|
194
|
+
- check: error_code
|
|
195
|
+
value: "GOVERNANCE_DENIED"
|
|
196
|
+
description: "Error code is GOVERNANCE_DENIED"
|
|
197
|
+
- check: field_value
|
|
198
|
+
path: "context.correlation_id"
|
|
199
|
+
value: "governance_denied_recovery--create_media_buy_denied"
|
|
200
|
+
description: "Response echoes context.correlation_id verbatim on error responses (echo contract applies to both success and failure)"
|
|
201
|
+
|
|
202
|
+
- id: buy_retried
|
|
203
|
+
title: "Corrected buy within plan — governance approves"
|
|
204
|
+
narrative: |
|
|
205
|
+
The buyer reads the denial findings, shrinks the budget to $8K (within the $10K
|
|
206
|
+
plan), and retries with a fresh idempotency_key. The seller consults governance
|
|
207
|
+
again, which now approves.
|
|
208
|
+
|
|
209
|
+
steps:
|
|
210
|
+
- id: create_media_buy_retry
|
|
211
|
+
title: "Retry with $8K — approved"
|
|
212
|
+
task: create_media_buy
|
|
213
|
+
schema_ref: "media-buy/create-media-buy-request.json"
|
|
214
|
+
response_schema_ref: "media-buy/create-media-buy-response.json"
|
|
215
|
+
doc_ref: "/media-buy/task-reference/create_media_buy"
|
|
216
|
+
comply_scenario: create_media_buy
|
|
217
|
+
stateful: true
|
|
218
|
+
expected: |
|
|
219
|
+
The buy succeeds. Governance approves because $8K fits within the $10K plan
|
|
220
|
+
budget. The seller returns a media_buy_id.
|
|
221
|
+
|
|
222
|
+
sample_request:
|
|
223
|
+
brand:
|
|
224
|
+
domain: "acmeoutdoor.example"
|
|
225
|
+
account:
|
|
226
|
+
brand:
|
|
227
|
+
domain: "acmeoutdoor.example"
|
|
228
|
+
operator: "pinnacle-agency.example"
|
|
229
|
+
idempotency_key: "gov-recovery-retry-approved-v1"
|
|
230
|
+
start_time: "2026-04-01T00:00:00Z"
|
|
231
|
+
end_time: "2026-06-30T23:59:59Z"
|
|
232
|
+
packages:
|
|
233
|
+
- product_id: "$context.product_id"
|
|
234
|
+
budget: 8000
|
|
235
|
+
pricing_option_id: "$context.pricing_option_id"
|
|
236
|
+
context_outputs:
|
|
237
|
+
- name: media_buy_id
|
|
238
|
+
path: "media_buy_id"
|
|
239
|
+
validations:
|
|
240
|
+
- check: response_schema
|
|
241
|
+
description: "Response matches create-media-buy-response.json schema"
|
|
242
|
+
- check: field_present
|
|
243
|
+
path: "media_buy_id"
|
|
244
|
+
description: "Seller returns a media_buy_id after governance approves"
|