@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,316 @@
|
|
|
1
|
+
id: signal_owned
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Owned signal agent"
|
|
4
|
+
protocol: signals
|
|
5
|
+
category: signal_owned
|
|
6
|
+
summary: "Signal agent serving first-party or proprietary audience data without external catalog verification."
|
|
7
|
+
track: signals
|
|
8
|
+
required_tools:
|
|
9
|
+
- get_signals
|
|
10
|
+
|
|
11
|
+
narrative: |
|
|
12
|
+
You operate a first-party data platform — a retailer CDP, publisher contextual data
|
|
13
|
+
provider, or proprietary audience platform. Your signals are agent-native: they come
|
|
14
|
+
from your own data, not from third-party catalogs.
|
|
15
|
+
|
|
16
|
+
Buyers trust your agent directly. There's no external adagents.json to verify against —
|
|
17
|
+
provenance is the agent itself. This simplifies the flow: discovery and activation,
|
|
18
|
+
without the verification step that marketplace agents require.
|
|
19
|
+
|
|
20
|
+
Owned signal agents often have richer signal types. A retailer might expose purchase
|
|
21
|
+
frequency as a numeric signal (0-30 visits/month) or loyalty tier as categorical
|
|
22
|
+
(platinum/gold/silver/bronze). A publisher might expose content category, subscriber
|
|
23
|
+
tenure, or engagement scores.
|
|
24
|
+
|
|
25
|
+
This storyboard walks through discovery and both activation patterns.
|
|
26
|
+
|
|
27
|
+
Pricing is hard-required here for the same reason as signal marketplaces: signals
|
|
28
|
+
are rate-carded goods. Buyers cannot activate without a pricing_option_id to anchor
|
|
29
|
+
billing. Agents distributing first-party signals without commercial terms belong on
|
|
30
|
+
list_authorized_properties or a different specialism, not this one.
|
|
31
|
+
|
|
32
|
+
agent:
|
|
33
|
+
interaction_model: owned_signals
|
|
34
|
+
capabilities: []
|
|
35
|
+
examples:
|
|
36
|
+
- "Retailer CDPs (e.g., loyalty and purchase data)"
|
|
37
|
+
- "Publisher contextual platforms (e.g., content category, subscriber data)"
|
|
38
|
+
- "First-party audience platforms (e.g., CRM-derived segments)"
|
|
39
|
+
|
|
40
|
+
caller:
|
|
41
|
+
role: buyer_agent
|
|
42
|
+
example: "Scope3 (DSP)"
|
|
43
|
+
|
|
44
|
+
prerequisites:
|
|
45
|
+
description: |
|
|
46
|
+
The buyer has a campaign brief with targeting objectives. The test kit provides
|
|
47
|
+
sample owned signal definitions with various value types (binary, categorical,
|
|
48
|
+
numeric) and pricing models.
|
|
49
|
+
test_kit: "test-kits/nova-motors.yaml"
|
|
50
|
+
|
|
51
|
+
phases:
|
|
52
|
+
- id: capability_discovery
|
|
53
|
+
title: "Capability discovery"
|
|
54
|
+
narrative: |
|
|
55
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports signals before discovering or activating audience data.
|
|
56
|
+
|
|
57
|
+
steps:
|
|
58
|
+
- id: get_capabilities
|
|
59
|
+
title: "Check agent capabilities"
|
|
60
|
+
narrative: |
|
|
61
|
+
Verify that the agent declares the expected protocol support before
|
|
62
|
+
proceeding with domain-specific operations.
|
|
63
|
+
task: get_adcp_capabilities
|
|
64
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
65
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
66
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
67
|
+
comply_scenario: capability_discovery
|
|
68
|
+
stateful: false
|
|
69
|
+
expected: |
|
|
70
|
+
Return capabilities declaring signals in supported_protocols, confirming the agent serves audience signals.
|
|
71
|
+
sample_request:
|
|
72
|
+
context:
|
|
73
|
+
correlation_id: "signal_owned--get_capabilities"
|
|
74
|
+
validations:
|
|
75
|
+
- check: response_schema
|
|
76
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
77
|
+
- check: field_present
|
|
78
|
+
path: "supported_protocols"
|
|
79
|
+
description: "Agent declares supported protocols"
|
|
80
|
+
|
|
81
|
+
- check: field_present
|
|
82
|
+
path: "context"
|
|
83
|
+
description: "Response echoes back the context object"
|
|
84
|
+
- check: field_value
|
|
85
|
+
path: "context.correlation_id"
|
|
86
|
+
value: "signal_owned--get_capabilities"
|
|
87
|
+
description: "Context correlation_id returned unchanged"
|
|
88
|
+
- id: discovery
|
|
89
|
+
title: "Signal discovery"
|
|
90
|
+
narrative: |
|
|
91
|
+
The buyer describes targeting objectives and your agent returns matching signals
|
|
92
|
+
from your proprietary data. Unlike marketplace agents, these signals have
|
|
93
|
+
signal_type "owned" — provenance is the agent itself.
|
|
94
|
+
|
|
95
|
+
Owned signals often include richer value types. A retailer can expose loyalty
|
|
96
|
+
tiers as categorical signals and purchase frequency as numeric signals, giving
|
|
97
|
+
buyers more precise targeting than binary include/exclude.
|
|
98
|
+
|
|
99
|
+
steps:
|
|
100
|
+
- id: search_owned_signals
|
|
101
|
+
title: "Discover owned signals"
|
|
102
|
+
narrative: |
|
|
103
|
+
The buyer searches for audience segments using a natural language description.
|
|
104
|
+
Your agent returns signals from your proprietary data — loyalty tiers, purchase
|
|
105
|
+
history, engagement scores, contextual categories.
|
|
106
|
+
task: get_signals
|
|
107
|
+
schema_ref: "signals/get-signals-request.json"
|
|
108
|
+
response_schema_ref: "signals/get-signals-response.json"
|
|
109
|
+
doc_ref: "/signals/tasks/get_signals"
|
|
110
|
+
comply_scenario: signals_flow
|
|
111
|
+
stateful: false
|
|
112
|
+
expected: |
|
|
113
|
+
Return matching signals from your proprietary data. Each signal must include:
|
|
114
|
+
- signal_agent_segment_id for activation
|
|
115
|
+
- signal_id with source: "agent_native"
|
|
116
|
+
- name, description, and value_type
|
|
117
|
+
- coverage_percentage
|
|
118
|
+
- pricing_options
|
|
119
|
+
- signal_type: "owned"
|
|
120
|
+
|
|
121
|
+
For categorical signals, include the allowed_values.
|
|
122
|
+
For numeric signals, include the range (min/max).
|
|
123
|
+
|
|
124
|
+
sample_request:
|
|
125
|
+
account:
|
|
126
|
+
brand:
|
|
127
|
+
domain: "novamotors.example"
|
|
128
|
+
operator: "pinnacle-agency.example"
|
|
129
|
+
signal_spec: "High-value customers likely to purchase electronics, with loyalty program data"
|
|
130
|
+
|
|
131
|
+
context:
|
|
132
|
+
correlation_id: "signal_owned--search_owned_signals"
|
|
133
|
+
validations:
|
|
134
|
+
- check: response_schema
|
|
135
|
+
description: "Response matches get-signals-response.json schema"
|
|
136
|
+
- check: field_present
|
|
137
|
+
path: "signals[0].signal_agent_segment_id"
|
|
138
|
+
description: "Each signal has a signal_agent_segment_id"
|
|
139
|
+
- check: field_present
|
|
140
|
+
path: "signals[0].pricing_options"
|
|
141
|
+
description: "Each signal has pricing options"
|
|
142
|
+
|
|
143
|
+
- check: field_present
|
|
144
|
+
path: "context"
|
|
145
|
+
description: "Response echoes back the context object"
|
|
146
|
+
- check: field_value
|
|
147
|
+
path: "context.correlation_id"
|
|
148
|
+
value: "signal_owned--search_owned_signals"
|
|
149
|
+
description: "Context correlation_id returned unchanged"
|
|
150
|
+
- check: field_present
|
|
151
|
+
path: "signals[0].signal_id.source"
|
|
152
|
+
description: "Signal ID includes source discriminator"
|
|
153
|
+
- id: filter_by_criteria
|
|
154
|
+
title: "Filter signals by criteria"
|
|
155
|
+
narrative: |
|
|
156
|
+
The buyer narrows the search using filters — maximum CPM, specific signal
|
|
157
|
+
types, or coverage thresholds. This tests that your agent handles filter
|
|
158
|
+
parameters correctly and returns only matching signals.
|
|
159
|
+
task: get_signals
|
|
160
|
+
schema_ref: "signals/get-signals-request.json"
|
|
161
|
+
response_schema_ref: "signals/get-signals-response.json"
|
|
162
|
+
doc_ref: "/signals/tasks/get_signals"
|
|
163
|
+
comply_scenario: signals_flow
|
|
164
|
+
stateful: false
|
|
165
|
+
expected: |
|
|
166
|
+
Return only signals matching the filter criteria. If no signals match,
|
|
167
|
+
return an empty signals array — not an error.
|
|
168
|
+
|
|
169
|
+
sample_request:
|
|
170
|
+
account:
|
|
171
|
+
brand:
|
|
172
|
+
domain: "novamotors.example"
|
|
173
|
+
operator: "pinnacle-agency.example"
|
|
174
|
+
signal_spec: "Purchase behavior signals"
|
|
175
|
+
filters:
|
|
176
|
+
max_cpm: 5.00
|
|
177
|
+
|
|
178
|
+
context:
|
|
179
|
+
correlation_id: "signal_owned--filter_by_criteria"
|
|
180
|
+
validations:
|
|
181
|
+
- check: response_schema
|
|
182
|
+
description: "Response matches schema"
|
|
183
|
+
- check: field_present
|
|
184
|
+
path: "signals"
|
|
185
|
+
description: "Response contains a signals array"
|
|
186
|
+
|
|
187
|
+
- check: field_present
|
|
188
|
+
path: "context"
|
|
189
|
+
description: "Response echoes back the context object"
|
|
190
|
+
- check: field_value
|
|
191
|
+
path: "context.correlation_id"
|
|
192
|
+
value: "signal_owned--filter_by_criteria"
|
|
193
|
+
description: "Context correlation_id returned unchanged"
|
|
194
|
+
- id: platform_activation
|
|
195
|
+
title: "Activate on a DSP"
|
|
196
|
+
narrative: |
|
|
197
|
+
The buyer activates a signal directly on a DSP. Your agent pushes the segment
|
|
198
|
+
to the platform and returns a segment_id the buyer uses for campaign targeting.
|
|
199
|
+
|
|
200
|
+
Use platform destinations when the buyer manages DSP campaigns directly.
|
|
201
|
+
|
|
202
|
+
steps:
|
|
203
|
+
- id: activate_on_platform
|
|
204
|
+
title: "Activate owned signal on a DSP"
|
|
205
|
+
narrative: |
|
|
206
|
+
The buyer selects a signal and activates it on a DSP. For owned signals,
|
|
207
|
+
this means your platform pushes first-party segment data to the DSP. The
|
|
208
|
+
buyer gets back a segment_id for targeting.
|
|
209
|
+
task: activate_signal
|
|
210
|
+
schema_ref: "signals/activate-signal-request.json"
|
|
211
|
+
response_schema_ref: "signals/activate-signal-response.json"
|
|
212
|
+
doc_ref: "/signals/tasks/activate_signal"
|
|
213
|
+
comply_scenario: signals_flow
|
|
214
|
+
stateful: true
|
|
215
|
+
expected: |
|
|
216
|
+
Return a deployment with:
|
|
217
|
+
- type: "platform"
|
|
218
|
+
- is_live status (may be async)
|
|
219
|
+
- activation_key with type: "segment_id" when live
|
|
220
|
+
- estimated_activation_duration_minutes if not immediately live
|
|
221
|
+
|
|
222
|
+
sample_request:
|
|
223
|
+
account:
|
|
224
|
+
brand:
|
|
225
|
+
domain: "novamotors.example"
|
|
226
|
+
operator: "pinnacle-agency.example"
|
|
227
|
+
signal_agent_segment_id: "prism_high_ltv"
|
|
228
|
+
pricing_option_id: "po_prism_flat_monthly"
|
|
229
|
+
destinations:
|
|
230
|
+
- type: "platform"
|
|
231
|
+
platform: "the-trade-desk"
|
|
232
|
+
account: "agency-123-ttd"
|
|
233
|
+
idempotency_key: "$generate:uuid_v4#signal_owned_activate_platform"
|
|
234
|
+
context:
|
|
235
|
+
correlation_id: "signal_owned--activate_on_platform"
|
|
236
|
+
ext:
|
|
237
|
+
test_platform:
|
|
238
|
+
test_run: true
|
|
239
|
+
validations:
|
|
240
|
+
- check: response_schema
|
|
241
|
+
description: "Response matches activate-signal-response.json schema"
|
|
242
|
+
- check: field_present
|
|
243
|
+
path: "deployments[0].type"
|
|
244
|
+
description: "Deployment includes type"
|
|
245
|
+
|
|
246
|
+
- check: field_present
|
|
247
|
+
path: "context"
|
|
248
|
+
description: "Response echoes back the context object"
|
|
249
|
+
- check: field_value
|
|
250
|
+
path: "context.correlation_id"
|
|
251
|
+
value: "signal_owned--activate_on_platform"
|
|
252
|
+
description: "Context correlation_id returned unchanged"
|
|
253
|
+
- id: agent_activation
|
|
254
|
+
title: "Activate on a sales agent"
|
|
255
|
+
narrative: |
|
|
256
|
+
The buyer activates a signal on a sales agent. The SA records the activation
|
|
257
|
+
and handles downstream DSP coordination — the buyer doesn't need to know which
|
|
258
|
+
platform the SA uses.
|
|
259
|
+
|
|
260
|
+
This is the right pattern when buying media through a sales agent.
|
|
261
|
+
|
|
262
|
+
steps:
|
|
263
|
+
- id: activate_on_agent
|
|
264
|
+
title: "Activate owned signal on a sales agent"
|
|
265
|
+
narrative: |
|
|
266
|
+
The buyer activates a signal with the SA's URL as the destination. The
|
|
267
|
+
activation is typically synchronous. The SA records it internally and
|
|
268
|
+
applies the targeting when the buyer later calls create_media_buy.
|
|
269
|
+
task: activate_signal
|
|
270
|
+
schema_ref: "signals/activate-signal-request.json"
|
|
271
|
+
response_schema_ref: "signals/activate-signal-response.json"
|
|
272
|
+
doc_ref: "/signals/tasks/activate_signal"
|
|
273
|
+
comply_scenario: signals_flow
|
|
274
|
+
stateful: true
|
|
275
|
+
expected: |
|
|
276
|
+
Return a deployment with:
|
|
277
|
+
- type: "agent"
|
|
278
|
+
- agent_url matching the SA
|
|
279
|
+
- is_live: true (sync activation)
|
|
280
|
+
- activation_key with type: "key_value"
|
|
281
|
+
- deployed_at timestamp
|
|
282
|
+
|
|
283
|
+
sample_request:
|
|
284
|
+
account:
|
|
285
|
+
brand:
|
|
286
|
+
domain: "novamotors.example"
|
|
287
|
+
operator: "pinnacle-agency.example"
|
|
288
|
+
signal_agent_segment_id: "prism_cart_abandoner"
|
|
289
|
+
pricing_option_id: "po_prism_abandoner_cpm"
|
|
290
|
+
destinations:
|
|
291
|
+
- type: "agent"
|
|
292
|
+
agent_url: "https://wonderstruck.salesagents.example"
|
|
293
|
+
idempotency_key: "$generate:uuid_v4#signal_owned_activate_agent"
|
|
294
|
+
context:
|
|
295
|
+
correlation_id: "signal_owned--activate_on_agent"
|
|
296
|
+
ext:
|
|
297
|
+
test_platform:
|
|
298
|
+
test_run: true
|
|
299
|
+
validations:
|
|
300
|
+
- check: response_schema
|
|
301
|
+
description: "Response matches activate-signal-response.json schema"
|
|
302
|
+
- check: field_present
|
|
303
|
+
path: "deployments[0].activation_key"
|
|
304
|
+
description: "Deployment includes activation key"
|
|
305
|
+
- check: field_value
|
|
306
|
+
path: "deployments[0].type"
|
|
307
|
+
value: "agent"
|
|
308
|
+
description: "Deployment type is 'agent'"
|
|
309
|
+
|
|
310
|
+
- check: field_present
|
|
311
|
+
path: "context"
|
|
312
|
+
description: "Response echoes back the context object"
|
|
313
|
+
- check: field_value
|
|
314
|
+
path: "context.correlation_id"
|
|
315
|
+
value: "signal_owned--activate_on_agent"
|
|
316
|
+
description: "Context correlation_id returned unchanged"
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Acme Outdoor — Sample Advertiser Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Entity definition: fictional-entities.yaml → advertisers[acme_outdoor]
|
|
4
|
+
#
|
|
5
|
+
# Provides the "ingredients" needed to test creative agent storyboards:
|
|
6
|
+
# a brand identity, sample assets at common dimensions, and sample text.
|
|
7
|
+
#
|
|
8
|
+
# This brand is registered as a sandbox brand in AgenticAdvertising.org (AAO).
|
|
9
|
+
# Agents resolve acmeoutdoor.example via the standard AAO brand resolution path.
|
|
10
|
+
# AAO returns the brand.json below but excludes sandbox brands from production
|
|
11
|
+
# brand discovery results.
|
|
12
|
+
|
|
13
|
+
id: acme_outdoor
|
|
14
|
+
name: "Acme Outdoor"
|
|
15
|
+
description: "Fictional outdoor gear brand for storyboard testing"
|
|
16
|
+
sandbox: true
|
|
17
|
+
|
|
18
|
+
# Authentication fixture for the universal security_baseline storyboard
|
|
19
|
+
# (universal/security.yaml). Declares:
|
|
20
|
+
# - api_key: the demo Bearer the runner sends on the positive api-key
|
|
21
|
+
# probe. The conformance handle is the `demo-<kit>-` prefix — agents
|
|
22
|
+
# SHOULD accept any Bearer matching that prefix (not this literal
|
|
23
|
+
# value) so the suffix can rotate across spec versions without
|
|
24
|
+
# breaking previously-conformant agents.
|
|
25
|
+
# - probe_task: the protected, auth-required read the runner calls under
|
|
26
|
+
# `auth: none` and with a random-invalid key. Default is list_creatives;
|
|
27
|
+
# declare explicitly so the api_key phase runs instead of being skipped
|
|
28
|
+
# via `skip_if: "!test_kit.auth.api_key"`.
|
|
29
|
+
auth:
|
|
30
|
+
api_key: "demo-acme-outdoor-v1"
|
|
31
|
+
probe_task: list_creatives
|
|
32
|
+
|
|
33
|
+
brand:
|
|
34
|
+
house:
|
|
35
|
+
domain: "acmeoutdoor.example"
|
|
36
|
+
name: "Acme Outdoor"
|
|
37
|
+
brand_id: "acme_outdoor"
|
|
38
|
+
names:
|
|
39
|
+
- en: "Acme Outdoor"
|
|
40
|
+
description: "Premium outdoor gear for every adventure. From trail to summit, we make gear that performs."
|
|
41
|
+
industry: "retail"
|
|
42
|
+
keller_type: "master"
|
|
43
|
+
logos:
|
|
44
|
+
- url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-primary.png"
|
|
45
|
+
orientation: "horizontal"
|
|
46
|
+
background: "light-bg"
|
|
47
|
+
variant: "primary"
|
|
48
|
+
width: 400
|
|
49
|
+
height: 100
|
|
50
|
+
- url: "https://test-assets.adcontextprotocol.org/acme-outdoor/logo-icon.png"
|
|
51
|
+
orientation: "square"
|
|
52
|
+
background: "transparent-bg"
|
|
53
|
+
variant: "icon"
|
|
54
|
+
width: 200
|
|
55
|
+
height: 200
|
|
56
|
+
colors:
|
|
57
|
+
primary: "#1B5E20"
|
|
58
|
+
secondary: "#FF6F00"
|
|
59
|
+
accent: "#FDD835"
|
|
60
|
+
background: "#FAFAFA"
|
|
61
|
+
text: "#212121"
|
|
62
|
+
fonts:
|
|
63
|
+
heading:
|
|
64
|
+
family: "Montserrat"
|
|
65
|
+
weight: 700
|
|
66
|
+
url: "https://fonts.googleapis.com/css2?family=Montserrat:wght@700"
|
|
67
|
+
body:
|
|
68
|
+
family: "Open Sans"
|
|
69
|
+
weight: 400
|
|
70
|
+
url: "https://fonts.googleapis.com/css2?family=Open+Sans"
|
|
71
|
+
tone:
|
|
72
|
+
voice: "Confident and adventurous, but never pretentious. We talk to people who do things, not people who buy things."
|
|
73
|
+
attributes:
|
|
74
|
+
- "active"
|
|
75
|
+
- "direct"
|
|
76
|
+
- "warm"
|
|
77
|
+
dos:
|
|
78
|
+
- "Use action verbs"
|
|
79
|
+
- "Reference real outdoor activities"
|
|
80
|
+
- "Keep it short"
|
|
81
|
+
donts:
|
|
82
|
+
- "Use superlatives without evidence"
|
|
83
|
+
- "Talk down to the reader"
|
|
84
|
+
- "Use corporate jargon"
|
|
85
|
+
|
|
86
|
+
# Sample assets at common ad dimensions.
|
|
87
|
+
# These are placeholder URLs — in production, these would point to actual hosted test images.
|
|
88
|
+
assets:
|
|
89
|
+
images:
|
|
90
|
+
- id: "hero_300x250"
|
|
91
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-300x250.jpg"
|
|
92
|
+
width: 300
|
|
93
|
+
height: 250
|
|
94
|
+
mime_type: "image/jpeg"
|
|
95
|
+
description: "Medium rectangle hero — hiker on mountain trail"
|
|
96
|
+
|
|
97
|
+
- id: "hero_728x90"
|
|
98
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-728x90.jpg"
|
|
99
|
+
width: 728
|
|
100
|
+
height: 90
|
|
101
|
+
mime_type: "image/jpeg"
|
|
102
|
+
description: "Leaderboard hero — panoramic mountain vista"
|
|
103
|
+
|
|
104
|
+
- id: "hero_320x50"
|
|
105
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-320x50.jpg"
|
|
106
|
+
width: 320
|
|
107
|
+
height: 50
|
|
108
|
+
mime_type: "image/jpeg"
|
|
109
|
+
description: "Mobile banner hero — trail gear close-up"
|
|
110
|
+
|
|
111
|
+
- id: "hero_160x600"
|
|
112
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-160x600.jpg"
|
|
113
|
+
width: 160
|
|
114
|
+
height: 600
|
|
115
|
+
mime_type: "image/jpeg"
|
|
116
|
+
description: "Wide skyscraper hero — vertical trail scene"
|
|
117
|
+
|
|
118
|
+
- id: "hero_master"
|
|
119
|
+
url: "https://test-assets.adcontextprotocol.org/acme-outdoor/hero-master.jpg"
|
|
120
|
+
width: 1200
|
|
121
|
+
height: 628
|
|
122
|
+
mime_type: "image/jpeg"
|
|
123
|
+
description: "Master hero image — high-res source for any size"
|
|
124
|
+
|
|
125
|
+
text:
|
|
126
|
+
headlines:
|
|
127
|
+
- "Summer Sale — 40% Off All Gear"
|
|
128
|
+
- "Built for the Trail"
|
|
129
|
+
- "Adventure Starts Here"
|
|
130
|
+
descriptions:
|
|
131
|
+
- "Premium outdoor gear tested on the world's toughest trails. Shop the summer collection."
|
|
132
|
+
- "From daypacks to expedition tents, gear that performs when it matters."
|
|
133
|
+
cta:
|
|
134
|
+
- "Shop Now"
|
|
135
|
+
- "Explore the Collection"
|
|
136
|
+
- "Find Your Gear"
|
|
137
|
+
|
|
138
|
+
click_url: "https://acmeoutdoor.example/summer-sale"
|
|
139
|
+
|
|
140
|
+
# Inventory list fixtures for property_list / collection_list targeting tests.
|
|
141
|
+
#
|
|
142
|
+
# These reference lists a fictional governance/inventory agent would publish.
|
|
143
|
+
# They let storyboards exercise the full PropertyListReference / CollectionListReference
|
|
144
|
+
# contract without needing a live list server: scenarios point at list_id values
|
|
145
|
+
# and the seller's test engine returns canned contents.
|
|
146
|
+
#
|
|
147
|
+
# Both matching and non-matching sets are provided so a single test fixture
|
|
148
|
+
# covers targeting (buy should include listed inventory) and no-match behaviour
|
|
149
|
+
# (buy references a list that resolves to zero matches in this seller's catalog).
|
|
150
|
+
inventory_targets:
|
|
151
|
+
# --- Matching sets (Acme Outdoor's intended audience) ---
|
|
152
|
+
matching_properties:
|
|
153
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
154
|
+
list_id: "acme_outdoor_allowlist_v1"
|
|
155
|
+
description: "Outdoor lifestyle properties relevant to Acme Outdoor campaigns."
|
|
156
|
+
# Expected contents when the list is fetched via get_property_list.
|
|
157
|
+
expected_identifiers:
|
|
158
|
+
- type: domain
|
|
159
|
+
value: "outdoormagazine.example"
|
|
160
|
+
- type: domain
|
|
161
|
+
value: "hikingtrails.example"
|
|
162
|
+
- type: domain
|
|
163
|
+
value: "campinggear.example"
|
|
164
|
+
- type: domain
|
|
165
|
+
value: "mountaineering.example"
|
|
166
|
+
|
|
167
|
+
matching_collections:
|
|
168
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
169
|
+
list_id: "acme_outdoor_collections_v1"
|
|
170
|
+
description: "Outdoor programming the buyer wants to run alongside."
|
|
171
|
+
# Expected collection entries when fetched via get_collection_list.
|
|
172
|
+
expected_collections:
|
|
173
|
+
- collection_rid: "rid:outdoor:trail_life"
|
|
174
|
+
name: "Trail Life"
|
|
175
|
+
kind: "series"
|
|
176
|
+
genre: "outdoor"
|
|
177
|
+
distribution_ids:
|
|
178
|
+
- type: imdb_id
|
|
179
|
+
value: "tt9100001"
|
|
180
|
+
- collection_rid: "rid:outdoor:summit_stories"
|
|
181
|
+
name: "Summit Stories"
|
|
182
|
+
kind: "series"
|
|
183
|
+
genre: "outdoor"
|
|
184
|
+
distribution_ids:
|
|
185
|
+
- type: imdb_id
|
|
186
|
+
value: "tt9100002"
|
|
187
|
+
|
|
188
|
+
# --- No-match sets (nothing in this seller's catalog matches) ---
|
|
189
|
+
no_match_properties:
|
|
190
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
191
|
+
list_id: "acme_outdoor_no_match_v1"
|
|
192
|
+
description: "Properties outside this seller's inventory — should yield zero matches."
|
|
193
|
+
expected_identifiers:
|
|
194
|
+
- type: domain
|
|
195
|
+
value: "never-sold-here.example"
|
|
196
|
+
- type: domain
|
|
197
|
+
value: "also-not-indexed.example"
|
|
198
|
+
|
|
199
|
+
no_match_collections:
|
|
200
|
+
agent_url: "https://governance.pinnacle-agency.example"
|
|
201
|
+
list_id: "acme_outdoor_no_match_collections_v1"
|
|
202
|
+
description: "Collections not carried by this seller — should yield zero matches."
|
|
203
|
+
expected_collections:
|
|
204
|
+
- collection_rid: "rid:food:bistro_kitchen"
|
|
205
|
+
name: "Bistro Kitchen"
|
|
206
|
+
kind: "series"
|
|
207
|
+
genre: "food"
|
|
208
|
+
distribution_ids:
|
|
209
|
+
- type: imdb_id
|
|
210
|
+
value: "tt9200001"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Bistro Oranje — Hospitality Advertiser Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Entity definition: fictional-entities.yaml → advertisers[bistro_oranje]
|
|
4
|
+
#
|
|
5
|
+
# Dutch restaurant chain used in rights licensing scenarios.
|
|
6
|
+
#
|
|
7
|
+
# This brand is registered as a sandbox brand in AgenticAdvertising.org (AAO).
|
|
8
|
+
# Agents resolve bistro-oranje.example via the standard AAO brand resolution path.
|
|
9
|
+
# AAO returns the brand.json below but excludes sandbox brands from production
|
|
10
|
+
# brand discovery results.
|
|
11
|
+
|
|
12
|
+
id: bistro_oranje
|
|
13
|
+
name: "Bistro Oranje"
|
|
14
|
+
description: "Dutch restaurant chain for rights licensing storyboard testing"
|
|
15
|
+
sandbox: true
|
|
16
|
+
|
|
17
|
+
# security_baseline auth fixture — see acme-outdoor.yaml for semantics.
|
|
18
|
+
auth:
|
|
19
|
+
api_key: "demo-bistro-oranje-v1"
|
|
20
|
+
probe_task: list_creatives
|
|
21
|
+
|
|
22
|
+
brand:
|
|
23
|
+
house:
|
|
24
|
+
domain: "bistro-oranje.example"
|
|
25
|
+
name: "Bistro Oranje"
|
|
26
|
+
brand_id: "bistro_oranje"
|
|
27
|
+
names:
|
|
28
|
+
- en: "Bistro Oranje"
|
|
29
|
+
- nl: "Bistro Oranje"
|
|
30
|
+
description: "Modern Dutch dining — seasonal menus inspired by the Netherlands, served with warmth."
|
|
31
|
+
industry: "hospitality"
|
|
32
|
+
keller_type: "master"
|
|
33
|
+
logos:
|
|
34
|
+
- url: "https://test-assets.adcontextprotocol.org/bistro-oranje/logo-primary.png"
|
|
35
|
+
orientation: "horizontal"
|
|
36
|
+
background: "light-bg"
|
|
37
|
+
variant: "primary"
|
|
38
|
+
width: 400
|
|
39
|
+
height: 100
|
|
40
|
+
- url: "https://test-assets.adcontextprotocol.org/bistro-oranje/logo-icon.png"
|
|
41
|
+
orientation: "square"
|
|
42
|
+
background: "transparent-bg"
|
|
43
|
+
variant: "icon"
|
|
44
|
+
width: 200
|
|
45
|
+
height: 200
|
|
46
|
+
colors:
|
|
47
|
+
primary: "#E65100"
|
|
48
|
+
secondary: "#1B5E20"
|
|
49
|
+
accent: "#FFC107"
|
|
50
|
+
background: "#FFF8E1"
|
|
51
|
+
text: "#212121"
|
|
52
|
+
fonts:
|
|
53
|
+
heading:
|
|
54
|
+
family: "Playfair Display"
|
|
55
|
+
weight: 700
|
|
56
|
+
url: "https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700"
|
|
57
|
+
body:
|
|
58
|
+
family: "Source Sans Pro"
|
|
59
|
+
weight: 400
|
|
60
|
+
url: "https://fonts.googleapis.com/css2?family=Source+Sans+Pro"
|
|
61
|
+
tone:
|
|
62
|
+
voice: "Warm and inviting, with understated confidence. We let the food speak — no excess, no pretension."
|
|
63
|
+
attributes:
|
|
64
|
+
- "welcoming"
|
|
65
|
+
- "seasonal"
|
|
66
|
+
- "unpretentious"
|
|
67
|
+
dos:
|
|
68
|
+
- "Mention seasonal ingredients by name"
|
|
69
|
+
- "Reference Dutch culinary traditions"
|
|
70
|
+
- "Keep descriptions sensory and specific"
|
|
71
|
+
donts:
|
|
72
|
+
- "Use fine-dining jargon"
|
|
73
|
+
- "Overuse superlatives"
|
|
74
|
+
- "Promise exclusivity — Bistro Oranje is for everyone"
|
|
75
|
+
|
|
76
|
+
assets:
|
|
77
|
+
images:
|
|
78
|
+
- id: "hero_300x250"
|
|
79
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-300x250.jpg"
|
|
80
|
+
width: 300
|
|
81
|
+
height: 250
|
|
82
|
+
mime_type: "image/jpeg"
|
|
83
|
+
description: "Medium rectangle hero — seasonal dish on rustic table"
|
|
84
|
+
|
|
85
|
+
- id: "hero_728x90"
|
|
86
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-728x90.jpg"
|
|
87
|
+
width: 728
|
|
88
|
+
height: 90
|
|
89
|
+
mime_type: "image/jpeg"
|
|
90
|
+
description: "Leaderboard hero — bistro exterior with canal backdrop"
|
|
91
|
+
|
|
92
|
+
- id: "hero_320x50"
|
|
93
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-320x50.jpg"
|
|
94
|
+
width: 320
|
|
95
|
+
height: 50
|
|
96
|
+
mime_type: "image/jpeg"
|
|
97
|
+
description: "Mobile banner hero — close-up of signature stamppot"
|
|
98
|
+
|
|
99
|
+
- id: "hero_160x600"
|
|
100
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-160x600.jpg"
|
|
101
|
+
width: 160
|
|
102
|
+
height: 600
|
|
103
|
+
mime_type: "image/jpeg"
|
|
104
|
+
description: "Wide skyscraper hero — vertical dining room scene"
|
|
105
|
+
|
|
106
|
+
- id: "hero_master"
|
|
107
|
+
url: "https://test-assets.adcontextprotocol.org/bistro-oranje/hero-master.jpg"
|
|
108
|
+
width: 1200
|
|
109
|
+
height: 628
|
|
110
|
+
mime_type: "image/jpeg"
|
|
111
|
+
description: "Master hero image — high-res chef plating seasonal dish"
|
|
112
|
+
|
|
113
|
+
text:
|
|
114
|
+
headlines:
|
|
115
|
+
- "Taste the Season at Bistro Oranje"
|
|
116
|
+
- "Dutch Comfort, Modern Kitchen"
|
|
117
|
+
- "Reserve Your Table Tonight"
|
|
118
|
+
descriptions:
|
|
119
|
+
- "Seasonal menus inspired by Dutch tradition, made with ingredients sourced within 50km. Bistro Oranje — Amsterdam, Rotterdam, Utrecht."
|
|
120
|
+
- "From stamppot to stroopwafel, every dish tells a story. Book your table at Bistro Oranje."
|
|
121
|
+
cta:
|
|
122
|
+
- "Reserve a Table"
|
|
123
|
+
- "View the Menu"
|
|
124
|
+
- "Find a Location"
|
|
125
|
+
|
|
126
|
+
click_url: "https://bistro-oranje.example/reservations"
|