@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,383 @@
|
|
|
1
|
+
id: creative_ad_server
|
|
2
|
+
version: "1.1.0"
|
|
3
|
+
title: "Creative ad server"
|
|
4
|
+
protocol: creative
|
|
5
|
+
category: creative_ad_server
|
|
6
|
+
summary: "Stateful ad server with pre-loaded creatives. Generates serving tags per media buy. Optionally bills through AdCP."
|
|
7
|
+
track: creative
|
|
8
|
+
required_tools:
|
|
9
|
+
- build_creative
|
|
10
|
+
|
|
11
|
+
# Cross-step assertion (adcp#2664). status.monotonic rejects resource
|
|
12
|
+
# status transitions observed across steps that aren't on the spec
|
|
13
|
+
# lifecycle graph — e.g. approved → processing on a creative asset.
|
|
14
|
+
invariants:
|
|
15
|
+
- status.monotonic
|
|
16
|
+
|
|
17
|
+
narrative: |
|
|
18
|
+
You run a creative ad server — think Innovid, Flashtalking, or CM360. Your clients
|
|
19
|
+
have already uploaded their creatives through your UI. Buyers connect to browse your
|
|
20
|
+
creative library and request serving tags for their media buys.
|
|
21
|
+
|
|
22
|
+
Your agent is stateful: creatives already exist in your system. The buyer never pushes
|
|
23
|
+
assets to you. Instead, they browse your library, pick creatives, and ask you to generate
|
|
24
|
+
tags for specific placements. For a campaign with 25 media buys, you'll generate 25 tags.
|
|
25
|
+
|
|
26
|
+
Billing is optional. If you bill through AdCP, the buyer's account drives the
|
|
27
|
+
rate card: list_creatives surfaces pricing_options, build_creative returns the
|
|
28
|
+
applied pricing_option_id and vendor_cost, and report_usage closes the loop
|
|
29
|
+
after delivery. If you bill out of band (flat license, SaaS contract, bundled
|
|
30
|
+
enterprise agreement — CM360 is the canonical example), omit the pricing fields
|
|
31
|
+
and surface report_usage records as not accepted rather than fake-accepting.
|
|
32
|
+
response_schema validates shape in both cases; the specialism doesn't force a
|
|
33
|
+
billing business model on you.
|
|
34
|
+
|
|
35
|
+
This storyboard walks through that flow from the buyer's perspective.
|
|
36
|
+
|
|
37
|
+
agent:
|
|
38
|
+
interaction_model: stateful_preloaded
|
|
39
|
+
capabilities:
|
|
40
|
+
- has_creative_library
|
|
41
|
+
examples:
|
|
42
|
+
- "Innovid"
|
|
43
|
+
- "Flashtalking"
|
|
44
|
+
- "CM360"
|
|
45
|
+
|
|
46
|
+
caller:
|
|
47
|
+
role: buyer_agent
|
|
48
|
+
example: "Scope3 (DSP)"
|
|
49
|
+
|
|
50
|
+
prerequisites:
|
|
51
|
+
description: |
|
|
52
|
+
Creatives must already exist in the ad server's library, loaded through the
|
|
53
|
+
platform's own UI or API. The buyer does not push assets — they browse and
|
|
54
|
+
request tags for what's already there.
|
|
55
|
+
|
|
56
|
+
Pricing is optional. Ad servers that bill through AdCP (rate-carded creative
|
|
57
|
+
serving) expose pricing_options on creatives and pricing_option_id on build
|
|
58
|
+
responses. Ad servers that bill out of band (flat license, SaaS contract, or
|
|
59
|
+
bundled enterprise agreement — e.g. CM360) return creatives and tags without
|
|
60
|
+
those fields. Both shapes are conformant; response_schema validates shape when
|
|
61
|
+
the fields are present.
|
|
62
|
+
controller_seeding: true
|
|
63
|
+
|
|
64
|
+
fixtures:
|
|
65
|
+
creatives:
|
|
66
|
+
- creative_id: "campaign_hero_video"
|
|
67
|
+
status: "approved"
|
|
68
|
+
format_id:
|
|
69
|
+
id: "vast_30s"
|
|
70
|
+
pricing_options:
|
|
71
|
+
- pricing_option_id: "po_vast_30s_cpm"
|
|
72
|
+
pricing_model: "cpm"
|
|
73
|
+
rate: 0.50
|
|
74
|
+
currency: "USD"
|
|
75
|
+
|
|
76
|
+
phases:
|
|
77
|
+
- id: capability_discovery
|
|
78
|
+
title: "Capability discovery"
|
|
79
|
+
narrative: |
|
|
80
|
+
The buyer calls get_adcp_capabilities to confirm the agent supports creative operations before browsing or building creatives.
|
|
81
|
+
|
|
82
|
+
steps:
|
|
83
|
+
- id: get_capabilities
|
|
84
|
+
title: "Check agent capabilities"
|
|
85
|
+
narrative: |
|
|
86
|
+
Verify that the agent declares the expected protocol support before
|
|
87
|
+
proceeding with domain-specific operations.
|
|
88
|
+
task: get_adcp_capabilities
|
|
89
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
90
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
91
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
92
|
+
comply_scenario: capability_discovery
|
|
93
|
+
stateful: false
|
|
94
|
+
expected: |
|
|
95
|
+
Return capabilities declaring creative in supported_protocols, confirming the agent handles creative operations.
|
|
96
|
+
sample_request:
|
|
97
|
+
context:
|
|
98
|
+
correlation_id: "creative_ad_server--get_capabilities"
|
|
99
|
+
validations:
|
|
100
|
+
- check: response_schema
|
|
101
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
102
|
+
- check: field_present
|
|
103
|
+
path: "supported_protocols"
|
|
104
|
+
description: "Agent declares supported protocols"
|
|
105
|
+
|
|
106
|
+
- check: field_present
|
|
107
|
+
path: "context"
|
|
108
|
+
description: "Response echoes back the context object"
|
|
109
|
+
- check: field_value
|
|
110
|
+
path: "context.correlation_id"
|
|
111
|
+
value: "creative_ad_server--get_capabilities"
|
|
112
|
+
description: "Context correlation_id returned unchanged"
|
|
113
|
+
- id: browse_library
|
|
114
|
+
title: "Browse the creative library"
|
|
115
|
+
narrative: |
|
|
116
|
+
The buyer connects to your ad server and wants to see what creatives are
|
|
117
|
+
available for a campaign. They call list_creatives to browse concepts and
|
|
118
|
+
individual creatives in your library.
|
|
119
|
+
|
|
120
|
+
If your agent bills through AdCP and the buyer provides an account, each
|
|
121
|
+
creative includes the applicable rate from the account's rate card. If you
|
|
122
|
+
bill out of band, pricing_options is omitted.
|
|
123
|
+
|
|
124
|
+
steps:
|
|
125
|
+
- id: list_creatives
|
|
126
|
+
title: "Browse available creatives"
|
|
127
|
+
narrative: |
|
|
128
|
+
The buyer asks: "What creatives do you have for this advertiser?" This is
|
|
129
|
+
the primary entry point for ad server interactions.
|
|
130
|
+
|
|
131
|
+
The buyer sends include_pricing=true and an account reference. If your
|
|
132
|
+
agent bills through AdCP, each creative returns pricing_options from the
|
|
133
|
+
account's rate card; vendors may offer multiple options (volume tiers,
|
|
134
|
+
context-specific rates, or different models per product line). If your
|
|
135
|
+
agent bills out of band (flat license, SaaS contract, or bundled
|
|
136
|
+
enterprise agreement), omit pricing_options — response_schema validates
|
|
137
|
+
shape either way.
|
|
138
|
+
task: list_creatives
|
|
139
|
+
schema_ref: "creative/list-creatives-request.json"
|
|
140
|
+
response_schema_ref: "creative/list-creatives-response.json"
|
|
141
|
+
doc_ref: "/creative/task-reference/list_creatives"
|
|
142
|
+
comply_scenario: creative_flow
|
|
143
|
+
stateful: true
|
|
144
|
+
expected: |
|
|
145
|
+
Return creatives from your library. Each creative should include:
|
|
146
|
+
- creative_id (your platform's identifier)
|
|
147
|
+
- format_id referencing the creative's format
|
|
148
|
+
- name and status (approved, pending_review, rejected)
|
|
149
|
+
- concept_id grouping related creatives across sizes
|
|
150
|
+
- pricing_options array with pricing_option_id, model, rate, currency —
|
|
151
|
+
only when your agent bills through AdCP and include_pricing=true with
|
|
152
|
+
an account provided. Agents that bill out of band omit this field.
|
|
153
|
+
|
|
154
|
+
sample_request:
|
|
155
|
+
account:
|
|
156
|
+
account_id: "acct_acme_creative"
|
|
157
|
+
include_pricing: true
|
|
158
|
+
filters:
|
|
159
|
+
statuses:
|
|
160
|
+
- "approved"
|
|
161
|
+
|
|
162
|
+
context:
|
|
163
|
+
correlation_id: "creative_ad_server--list_creatives"
|
|
164
|
+
validations:
|
|
165
|
+
- check: response_schema
|
|
166
|
+
description: "Response matches list-creatives-response.json schema. Validates pricing_options shape when present; absence is conformant for agents that bill out of band."
|
|
167
|
+
|
|
168
|
+
- check: field_present
|
|
169
|
+
path: "context"
|
|
170
|
+
description: "Response echoes back the context object"
|
|
171
|
+
- check: field_value
|
|
172
|
+
path: "context.correlation_id"
|
|
173
|
+
value: "creative_ad_server--list_creatives"
|
|
174
|
+
description: "Context correlation_id returned unchanged"
|
|
175
|
+
- id: list_output_formats
|
|
176
|
+
title: "Check available output formats"
|
|
177
|
+
narrative: |
|
|
178
|
+
The buyer checks what output formats your ad server supports. For an ad
|
|
179
|
+
server, this is typically the tag formats you can generate — HTML, JavaScript,
|
|
180
|
+
VAST, native. The input formats are less relevant because creatives are already
|
|
181
|
+
in your system.
|
|
182
|
+
task: list_creative_formats
|
|
183
|
+
schema_ref: "creative/list-creative-formats-request.json"
|
|
184
|
+
response_schema_ref: "creative/list-creative-formats-response.json"
|
|
185
|
+
doc_ref: "/creative/task-reference/list_creative_formats"
|
|
186
|
+
comply_scenario: creative_sync
|
|
187
|
+
stateful: false
|
|
188
|
+
expected: |
|
|
189
|
+
Return the output formats you support. For an ad server, these are typically
|
|
190
|
+
tag formats (HTML, JavaScript, VAST) rather than visual ad formats.
|
|
191
|
+
|
|
192
|
+
- id: generate_tags
|
|
193
|
+
title: "Generate serving tags"
|
|
194
|
+
narrative: |
|
|
195
|
+
The buyer has selected creatives from your library and now needs serving tags
|
|
196
|
+
for their media buys. They call build_creative for each media buy/package
|
|
197
|
+
combination, passing the creative_id, account, and the context needed to
|
|
198
|
+
generate the right tag.
|
|
199
|
+
|
|
200
|
+
If your agent bills through AdCP, the response carries pricing_option_id and
|
|
201
|
+
vendor_cost (zero at build time for CPM — cost accrues on impressions). If
|
|
202
|
+
your agent bills out of band, omit these fields; the manifest is the
|
|
203
|
+
required output.
|
|
204
|
+
|
|
205
|
+
steps:
|
|
206
|
+
- id: build_tag
|
|
207
|
+
title: "Generate a tag for a media buy"
|
|
208
|
+
narrative: |
|
|
209
|
+
The buyer requests a serving tag for a specific creative, format, and media
|
|
210
|
+
buy. Your ad server generates a tag scoped to that placement.
|
|
211
|
+
|
|
212
|
+
For Innovid, this produces a VAST tag for a CTV placement. For Flashtalking,
|
|
213
|
+
this might produce an HTML tag for a display placement. The media_buy_id and
|
|
214
|
+
package_id provide the trafficking context.
|
|
215
|
+
|
|
216
|
+
Agents that bill through AdCP return pricing_option_id and vendor_cost so
|
|
217
|
+
the buyer knows which rate applies. Agents that bill out of band omit
|
|
218
|
+
those fields.
|
|
219
|
+
task: build_creative
|
|
220
|
+
schema_ref: "media-buy/build-creative-request.json"
|
|
221
|
+
response_schema_ref: "media-buy/build-creative-response.json"
|
|
222
|
+
doc_ref: "/creative/task-reference/build_creative"
|
|
223
|
+
comply_scenario: creative_flow
|
|
224
|
+
stateful: true
|
|
225
|
+
expected: |
|
|
226
|
+
Return a creative manifest with the serving tag. The output should include:
|
|
227
|
+
- An HTML, JavaScript, or VAST asset containing the tag
|
|
228
|
+
- The format_id matching the target format
|
|
229
|
+
- Macro placeholders (CLICK_URL, CACHEBUSTER) if applicable
|
|
230
|
+
- pricing_option_id, vendor_cost, and currency — only when your agent
|
|
231
|
+
bills through AdCP. Agents billing out of band omit these fields.
|
|
232
|
+
|
|
233
|
+
sample_request:
|
|
234
|
+
creative_id: "campaign_hero_video"
|
|
235
|
+
account:
|
|
236
|
+
account_id: "acct_acme_creative"
|
|
237
|
+
target_format_id:
|
|
238
|
+
agent_url: "https://your-ad-server.example.com"
|
|
239
|
+
id: "vast_30s"
|
|
240
|
+
media_buy_id: "mb_summer_campaign_001"
|
|
241
|
+
package_id: "pkg_ctv_premium"
|
|
242
|
+
|
|
243
|
+
idempotency_key: "$generate:uuid_v4#creative_ad_server_generate_tags_build_tag"
|
|
244
|
+
context:
|
|
245
|
+
correlation_id: "creative_ad_server--build_tag"
|
|
246
|
+
validations:
|
|
247
|
+
- check: response_schema
|
|
248
|
+
description: "Response matches build-creative-response.json schema"
|
|
249
|
+
- check: field_present
|
|
250
|
+
path: "creative_manifest.assets"
|
|
251
|
+
description: "Output includes a serving tag asset"
|
|
252
|
+
|
|
253
|
+
- check: field_present
|
|
254
|
+
path: "context"
|
|
255
|
+
description: "Response echoes back the context object"
|
|
256
|
+
- check: field_value
|
|
257
|
+
path: "context.correlation_id"
|
|
258
|
+
value: "creative_ad_server--build_tag"
|
|
259
|
+
description: "Context correlation_id returned unchanged"
|
|
260
|
+
- id: track_delivery
|
|
261
|
+
title: "Track creative delivery"
|
|
262
|
+
narrative: |
|
|
263
|
+
After the campaign runs, the buyer checks how each creative performed. They call
|
|
264
|
+
get_creative_delivery to get variant-level delivery data — impressions, spend, and
|
|
265
|
+
breakdowns by creative variant.
|
|
266
|
+
|
|
267
|
+
steps:
|
|
268
|
+
- id: get_delivery
|
|
269
|
+
title: "Get creative delivery metrics"
|
|
270
|
+
narrative: |
|
|
271
|
+
The buyer asks: "How did my creatives perform across the media buys?" Your ad
|
|
272
|
+
server returns delivery data per creative, including impressions, spend, and
|
|
273
|
+
variant-level breakdowns.
|
|
274
|
+
task: get_creative_delivery
|
|
275
|
+
schema_ref: "creative/get-creative-delivery-request.json"
|
|
276
|
+
response_schema_ref: "creative/get-creative-delivery-response.json"
|
|
277
|
+
doc_ref: "/creative/task-reference/get_creative_delivery"
|
|
278
|
+
comply_scenario: creative_flow
|
|
279
|
+
stateful: true
|
|
280
|
+
expected: |
|
|
281
|
+
Return per-creative delivery metrics including:
|
|
282
|
+
- Impressions and spend per creative
|
|
283
|
+
- Variant-level breakdowns (which version of each creative was served)
|
|
284
|
+
- Media buy context (which buys each creative was active on)
|
|
285
|
+
|
|
286
|
+
sample_request:
|
|
287
|
+
account:
|
|
288
|
+
brand:
|
|
289
|
+
domain: "acmeoutdoor.example"
|
|
290
|
+
operator: "pinnacle-agency.example"
|
|
291
|
+
media_buy_ids:
|
|
292
|
+
- "mb_summer_campaign_001"
|
|
293
|
+
|
|
294
|
+
context:
|
|
295
|
+
correlation_id: "creative_ad_server--get_delivery"
|
|
296
|
+
ext:
|
|
297
|
+
test_platform:
|
|
298
|
+
test_run: true
|
|
299
|
+
validations:
|
|
300
|
+
- check: response_schema
|
|
301
|
+
description: "Response matches get-creative-delivery-response.json schema"
|
|
302
|
+
|
|
303
|
+
- check: field_present
|
|
304
|
+
path: "context"
|
|
305
|
+
description: "Response echoes back the context object"
|
|
306
|
+
- check: field_value
|
|
307
|
+
path: "context.correlation_id"
|
|
308
|
+
value: "creative_ad_server--get_delivery"
|
|
309
|
+
description: "Context correlation_id returned unchanged"
|
|
310
|
+
- id: report_billing
|
|
311
|
+
title: "Report usage for billing"
|
|
312
|
+
narrative: |
|
|
313
|
+
After delivery, the buyer reports creative usage to the ad server. The billing
|
|
314
|
+
path is optional at the specialism level — agents that bill through AdCP
|
|
315
|
+
accept the record and reconcile against their rate card; agents that bill
|
|
316
|
+
out of band return accepted: 0 with an entry in the errors array pointing at
|
|
317
|
+
the offending usage record and a message explaining that billing is handled
|
|
318
|
+
out of band for this account. response_schema validates the response shape
|
|
319
|
+
either way.
|
|
320
|
+
|
|
321
|
+
steps:
|
|
322
|
+
- id: report_usage
|
|
323
|
+
title: "Report impressions and cost"
|
|
324
|
+
narrative: |
|
|
325
|
+
The buyer sends a usage report covering a billing period. Each record
|
|
326
|
+
includes the creative_id, pricing_option_id (from the build_creative
|
|
327
|
+
response — omitted by agents that bill out of band), impressions served,
|
|
328
|
+
and the computed vendor_cost. The sample_request below is written for
|
|
329
|
+
the AdCP-billed case; out-of-band agents receive the same request shape
|
|
330
|
+
and decide the response.
|
|
331
|
+
|
|
332
|
+
Agents that bill through AdCP verify the rate and return accepted: 1
|
|
333
|
+
with empty errors. Agents that bill out of band return accepted: 0 and
|
|
334
|
+
populate errors with a field pointing at the offending record (e.g.
|
|
335
|
+
`usage[0].pricing_option_id`) and a human-readable message. Don't
|
|
336
|
+
fake-accept records you won't bill on — silent acceptance breaks
|
|
337
|
+
reconciliation for buyers who trust the response. A standard error
|
|
338
|
+
code for "billing is handled out of band" is not yet defined in the
|
|
339
|
+
spec; vendor codes are fine today.
|
|
340
|
+
task: report_usage
|
|
341
|
+
schema_ref: "account/report-usage-request.json"
|
|
342
|
+
response_schema_ref: "account/report-usage-response.json"
|
|
343
|
+
doc_ref: "/accounts/tasks/report_usage"
|
|
344
|
+
comply_scenario: creative_flow
|
|
345
|
+
stateful: true
|
|
346
|
+
expected: |
|
|
347
|
+
Return a response matching the report-usage-response.json schema.
|
|
348
|
+
Agents that bill through AdCP return accepted: 1 and empty errors.
|
|
349
|
+
Agents that bill out of band return accepted: 0 with an errors entry
|
|
350
|
+
pointing at the offending record and explaining that billing is
|
|
351
|
+
handled out of band.
|
|
352
|
+
|
|
353
|
+
sample_request:
|
|
354
|
+
account:
|
|
355
|
+
brand:
|
|
356
|
+
domain: "acmeoutdoor.example"
|
|
357
|
+
operator: "pinnacle-agency.example"
|
|
358
|
+
idempotency_key: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
|
|
359
|
+
reporting_period:
|
|
360
|
+
start: "2026-03-01T00:00:00Z"
|
|
361
|
+
end: "2026-03-31T23:59:59Z"
|
|
362
|
+
usage:
|
|
363
|
+
- account:
|
|
364
|
+
account_id: "acct_acme_creative"
|
|
365
|
+
creative_id: "campaign_hero_video"
|
|
366
|
+
pricing_option_id: "po_vast_30s_cpm"
|
|
367
|
+
impressions: 2400000
|
|
368
|
+
vendor_cost: 1200.00
|
|
369
|
+
currency: "USD"
|
|
370
|
+
|
|
371
|
+
context:
|
|
372
|
+
correlation_id: "creative_ad_server--report_usage"
|
|
373
|
+
validations:
|
|
374
|
+
- check: response_schema
|
|
375
|
+
description: "Response matches report-usage-response.json schema"
|
|
376
|
+
|
|
377
|
+
- check: field_present
|
|
378
|
+
path: "context"
|
|
379
|
+
description: "Response echoes back the context object"
|
|
380
|
+
- check: field_value
|
|
381
|
+
path: "context.correlation_id"
|
|
382
|
+
value: "creative_ad_server--report_usage"
|
|
383
|
+
description: "Context correlation_id returned unchanged"
|