@adcp/sdk 6.9.0 → 6.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/adcp.js +285 -5
- package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/index.json +324 -0
- package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
- package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
- package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
- package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
- package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
- package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
- package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
- package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
- package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
- package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
- package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
- package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
- package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
- package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
- package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
- package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
- package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
- package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
- package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
- package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
- package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
- package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
- package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
- package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
- package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
- package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
- package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
- package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
- package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
- package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
- package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
- package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
- package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
- package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
- package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
- package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
- package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
- package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
- package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
- package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
- package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
- package/dist/lib/server/create-adcp-server.d.ts +33 -0
- package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
- package/dist/lib/server/create-adcp-server.js +127 -1
- package/dist/lib/server/create-adcp-server.js.map +1 -1
- package/dist/lib/server/credential-policy.d.ts +221 -0
- package/dist/lib/server/credential-policy.d.ts.map +1 -0
- package/dist/lib/server/credential-policy.js +260 -0
- package/dist/lib/server/credential-policy.js.map +1 -0
- package/dist/lib/server/dynamic-registry.d.ts +219 -0
- package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
- package/dist/lib/server/dynamic-registry.js +245 -0
- package/dist/lib/server/dynamic-registry.js.map +1 -0
- package/dist/lib/server/index.d.ts +8 -0
- package/dist/lib/server/index.d.ts.map +1 -1
- package/dist/lib/server/index.js +15 -4
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/operational-platform.d.ts +239 -0
- package/dist/lib/server/operational-platform.d.ts.map +1 -0
- package/dist/lib/server/operational-platform.js +94 -0
- package/dist/lib/server/operational-platform.js.map +1 -0
- package/dist/lib/server/wire-safe.d.ts +211 -0
- package/dist/lib/server/wire-safe.d.ts.map +1 -0
- package/dist/lib/server/wire-safe.js +231 -0
- package/dist/lib/server/wire-safe.js.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
- package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
- package/dist/lib/server/wire-spec-fields.generated.js +172 -0
- package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
- package/dist/lib/testing/compliance/index.d.ts +2 -0
- package/dist/lib/testing/compliance/index.d.ts.map +1 -1
- package/dist/lib/testing/compliance/index.js +6 -1
- package/dist/lib/testing/compliance/index.js.map +1 -1
- package/dist/lib/testing/compliance/summary.d.ts +77 -0
- package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
- package/dist/lib/testing/compliance/summary.js +176 -0
- package/dist/lib/testing/compliance/summary.js.map +1 -0
- package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
- package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/compliance.js +51 -0
- package/dist/lib/testing/storyboard/compliance.js.map +1 -1
- package/dist/lib/testing/storyboard/index.d.ts +2 -2
- package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/index.js +4 -2
- package/dist/lib/testing/storyboard/index.js.map +1 -1
- package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
- package/dist/lib/testing/storyboard/runner.js +58 -5
- package/dist/lib/testing/storyboard/runner.js.map +1 -1
- package/dist/lib/version.d.ts +3 -3
- package/dist/lib/version.d.ts.map +1 -1
- package/dist/lib/version.js +3 -3
- package/dist/lib/version.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
id: capability_discovery
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Capability discovery"
|
|
4
|
+
category: capability_discovery
|
|
5
|
+
summary: "Buyer calls get_adcp_capabilities to discover what an agent supports before making any buying or creative decisions."
|
|
6
|
+
track: core
|
|
7
|
+
|
|
8
|
+
narrative: |
|
|
9
|
+
Before doing anything else, a buyer agent calls get_adcp_capabilities to learn what your
|
|
10
|
+
platform supports. This is the first call in any new relationship — the buyer needs to know
|
|
11
|
+
your protocol version, supported domains (media buy, creative, governance, signals, SI),
|
|
12
|
+
pricing models, targeting capabilities, and creative specs.
|
|
13
|
+
|
|
14
|
+
The response shapes every subsequent call. If you declare media_buy support, the buyer knows
|
|
15
|
+
it can send briefs and create media buys. If you declare creative support, the buyer knows
|
|
16
|
+
it can sync or build creatives. The buyer uses this to decide which storyboards apply to your
|
|
17
|
+
agent and what flows to attempt.
|
|
18
|
+
|
|
19
|
+
agent:
|
|
20
|
+
interaction_model: media_buy_seller
|
|
21
|
+
capabilities:
|
|
22
|
+
- sells_media
|
|
23
|
+
examples:
|
|
24
|
+
- "Any AdCP-compliant agent"
|
|
25
|
+
- "Publisher platforms"
|
|
26
|
+
- "Creative ad servers"
|
|
27
|
+
- "DSPs"
|
|
28
|
+
|
|
29
|
+
caller:
|
|
30
|
+
role: buyer_agent
|
|
31
|
+
example: "Scope3 (DSP)"
|
|
32
|
+
|
|
33
|
+
prerequisites:
|
|
34
|
+
description: |
|
|
35
|
+
No prerequisites. This is the very first call a buyer makes to any agent.
|
|
36
|
+
The test kit provides brand context but it is not required for this storyboard.
|
|
37
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
38
|
+
|
|
39
|
+
phases:
|
|
40
|
+
- id: protocol_discovery
|
|
41
|
+
title: "Protocol and capability discovery"
|
|
42
|
+
narrative: |
|
|
43
|
+
The buyer calls get_adcp_capabilities to learn what your agent supports. This call
|
|
44
|
+
takes no required arguments — it is a read-only introspection of the agent's
|
|
45
|
+
capabilities. The buyer may optionally filter by protocol domain or major version.
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- id: get_capabilities
|
|
49
|
+
title: "Discover agent capabilities"
|
|
50
|
+
narrative: |
|
|
51
|
+
The buyer calls get_adcp_capabilities with no arguments. Your agent returns its
|
|
52
|
+
full capability declaration: protocol version, supported domains, pricing models,
|
|
53
|
+
targeting options, creative specs, and any extensions.
|
|
54
|
+
|
|
55
|
+
This response is the source of truth for what the buyer can do with your agent.
|
|
56
|
+
Every field the buyer reads here determines which tasks it will call next.
|
|
57
|
+
task: get_adcp_capabilities
|
|
58
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
59
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
60
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
61
|
+
comply_scenario: capability_discovery
|
|
62
|
+
stateful: false
|
|
63
|
+
expected: |
|
|
64
|
+
Return your agent's full capability declaration:
|
|
65
|
+
- adcp.major_versions: which protocol versions you support (e.g., [3])
|
|
66
|
+
- supported_protocols: which domains are available (media_buy, creative, governance, signals, sponsored_intelligence)
|
|
67
|
+
- media_buy: pricing models, delivery types, targeting, reporting features
|
|
68
|
+
- creative: library support, generation, transformation capabilities
|
|
69
|
+
- governance: property and creative features the governance agent can evaluate
|
|
70
|
+
- account: auth model, billing support, sandbox mode
|
|
71
|
+
|
|
72
|
+
sample_request:
|
|
73
|
+
context:
|
|
74
|
+
correlation_id: "capability_discovery--get_capabilities"
|
|
75
|
+
|
|
76
|
+
validations:
|
|
77
|
+
- check: response_schema
|
|
78
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
79
|
+
- check: field_present
|
|
80
|
+
path: "adcp.major_versions"
|
|
81
|
+
description: "Agent declares supported protocol versions"
|
|
82
|
+
- check: field_present
|
|
83
|
+
path: "supported_protocols"
|
|
84
|
+
description: "Agent declares which protocol domains it supports"
|
|
85
|
+
|
|
86
|
+
- check: field_present
|
|
87
|
+
path: "context"
|
|
88
|
+
description: "Response echoes back the context object"
|
|
89
|
+
- check: field_value
|
|
90
|
+
path: "context.correlation_id"
|
|
91
|
+
value: "capability_discovery--get_capabilities"
|
|
92
|
+
description: "Context correlation_id returned unchanged"
|
|
93
|
+
- id: get_capabilities_filtered
|
|
94
|
+
title: "Discover capabilities filtered by protocol"
|
|
95
|
+
narrative: |
|
|
96
|
+
The buyer calls get_adcp_capabilities again, this time filtering for a specific
|
|
97
|
+
protocol domain. This is useful when the buyer already knows what it wants and
|
|
98
|
+
only needs details for one domain (e.g., just media_buy capabilities).
|
|
99
|
+
task: get_adcp_capabilities
|
|
100
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
101
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
102
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
103
|
+
comply_scenario: capability_discovery
|
|
104
|
+
stateful: false
|
|
105
|
+
expected: |
|
|
106
|
+
Return capabilities filtered to the requested protocol domain. The response
|
|
107
|
+
should include the same structure but only the requested domain details.
|
|
108
|
+
|
|
109
|
+
sample_request:
|
|
110
|
+
protocols:
|
|
111
|
+
- "media_buy"
|
|
112
|
+
|
|
113
|
+
context:
|
|
114
|
+
correlation_id: "capability_discovery--get_capabilities_filtered"
|
|
115
|
+
validations:
|
|
116
|
+
- check: response_schema
|
|
117
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
118
|
+
|
|
119
|
+
- check: field_present
|
|
120
|
+
path: "context"
|
|
121
|
+
description: "Response echoes back the context object"
|
|
122
|
+
- check: field_value
|
|
123
|
+
path: "context.correlation_id"
|
|
124
|
+
value: "capability_discovery--get_capabilities_filtered"
|
|
125
|
+
description: "Context correlation_id returned unchanged"
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
id: pagination_integrity_collection_lists
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Pagination cursor integrity — list_collection_lists"
|
|
4
|
+
category: schema_validation
|
|
5
|
+
summary: "Validates the cursor↔has_more invariant by walking a paginated list_collection_lists response from a continuation page to a terminal page."
|
|
6
|
+
track: core
|
|
7
|
+
required_tools:
|
|
8
|
+
- list_collection_lists
|
|
9
|
+
|
|
10
|
+
narrative: |
|
|
11
|
+
Pagination is cursor-based across AdCP. Every response carrying a
|
|
12
|
+
`pagination` block satisfies a single invariant: when `has_more` is true the
|
|
13
|
+
`cursor` MUST be present (callers need it to fetch the next page); when
|
|
14
|
+
`has_more` is false the `cursor` MUST be absent (a stale token on a terminal
|
|
15
|
+
page invites callers to follow it into undefined behavior).
|
|
16
|
+
|
|
17
|
+
The invariant is documented in prose on
|
|
18
|
+
`static/schemas/source/core/pagination-response.json` but JSON Schema does
|
|
19
|
+
not gate the two fields against each other. This storyboard exercises both
|
|
20
|
+
sides of the invariant on `list_collection_lists` in a single run.
|
|
21
|
+
|
|
22
|
+
The runner bootstraps three collection lists via `create_collection_list`,
|
|
23
|
+
then lists them back with `max_results=2`. The first page MUST cap at two
|
|
24
|
+
lists and signal continuation with `has_more=true` plus a cursor. The runner
|
|
25
|
+
then follows that cursor; the second call MUST return the terminal page with
|
|
26
|
+
`has_more=false` and no cursor. An agent that hides the third list by
|
|
27
|
+
reporting `has_more=false` on the first page fails the first-page assertion.
|
|
28
|
+
An agent that carries a stale cursor onto the terminal page fails the
|
|
29
|
+
second-page assertion.
|
|
30
|
+
|
|
31
|
+
The `total_count` field is allowed to be absent (some backends cannot
|
|
32
|
+
compute it cheaply per the pagination-response schema) but when an agent
|
|
33
|
+
volunteers it, the value MUST match the seeded count of three.
|
|
34
|
+
|
|
35
|
+
agent:
|
|
36
|
+
interaction_model: stateful_preloaded
|
|
37
|
+
capabilities: []
|
|
38
|
+
examples:
|
|
39
|
+
- "Any AdCP agent that exposes a paginated list_collection_lists"
|
|
40
|
+
|
|
41
|
+
caller:
|
|
42
|
+
role: buyer_agent
|
|
43
|
+
example: "Compliance test harness"
|
|
44
|
+
|
|
45
|
+
prerequisites:
|
|
46
|
+
description: |
|
|
47
|
+
The storyboard bootstraps three collection lists in the setup phase via
|
|
48
|
+
`create_collection_list`. The seed-DAG does not include collection lists,
|
|
49
|
+
so this storyboard uses the create-then-list pattern to keep itself
|
|
50
|
+
self-contained without extending the seed taxonomy.
|
|
51
|
+
test_kit: "test-kits/acme-outdoor.yaml"
|
|
52
|
+
controller_seeding: false
|
|
53
|
+
|
|
54
|
+
phases:
|
|
55
|
+
- id: capability_discovery
|
|
56
|
+
title: "Capability discovery"
|
|
57
|
+
narrative: |
|
|
58
|
+
Confirm the agent responds to get_adcp_capabilities before
|
|
59
|
+
exercising list_collection_lists.
|
|
60
|
+
steps:
|
|
61
|
+
- id: get_capabilities
|
|
62
|
+
title: "Check agent capabilities"
|
|
63
|
+
narrative: |
|
|
64
|
+
Verify that the agent declares supported protocols before
|
|
65
|
+
driving paginated list_collection_lists.
|
|
66
|
+
task: get_adcp_capabilities
|
|
67
|
+
schema_ref: "protocol/get-adcp-capabilities-request.json"
|
|
68
|
+
response_schema_ref: "protocol/get-adcp-capabilities-response.json"
|
|
69
|
+
doc_ref: "/protocol/get_adcp_capabilities"
|
|
70
|
+
comply_scenario: pagination_integrity_collection_lists
|
|
71
|
+
stateful: false
|
|
72
|
+
expected: |
|
|
73
|
+
Return capabilities declaring supported protocols.
|
|
74
|
+
|
|
75
|
+
sample_request:
|
|
76
|
+
context:
|
|
77
|
+
correlation_id: "pagination_integrity_collection_lists--get_capabilities"
|
|
78
|
+
validations:
|
|
79
|
+
- check: response_schema
|
|
80
|
+
description: "Response matches get-adcp-capabilities-response.json schema"
|
|
81
|
+
- check: field_present
|
|
82
|
+
path: "supported_protocols"
|
|
83
|
+
description: "Agent declares supported protocols"
|
|
84
|
+
- check: field_present
|
|
85
|
+
path: "context"
|
|
86
|
+
description: "Response echoes back the context object"
|
|
87
|
+
- check: field_value
|
|
88
|
+
path: "context.correlation_id"
|
|
89
|
+
value: "pagination_integrity_collection_lists--get_capabilities"
|
|
90
|
+
description: "Context correlation_id returned unchanged"
|
|
91
|
+
|
|
92
|
+
- id: setup
|
|
93
|
+
title: "Bootstrap three collection lists"
|
|
94
|
+
narrative: |
|
|
95
|
+
Create three collection lists so the pagination walk has a deterministic
|
|
96
|
+
set of three items to page through with max_results=2.
|
|
97
|
+
steps:
|
|
98
|
+
- id: create_list_1
|
|
99
|
+
title: "Create first collection list"
|
|
100
|
+
narrative: |
|
|
101
|
+
Create a collection list for primetime drama programs. The agent MUST
|
|
102
|
+
accept this and return a list_id.
|
|
103
|
+
task: create_collection_list
|
|
104
|
+
schema_ref: "collection/create-collection-list-request.json"
|
|
105
|
+
response_schema_ref: "collection/create-collection-list-response.json"
|
|
106
|
+
doc_ref: "/governance/task-reference/create_collection_list"
|
|
107
|
+
comply_scenario: pagination_integrity_collection_lists
|
|
108
|
+
stateful: true
|
|
109
|
+
expected: |
|
|
110
|
+
Accept the collection list and return a list.list_id.
|
|
111
|
+
|
|
112
|
+
sample_request:
|
|
113
|
+
account:
|
|
114
|
+
brand:
|
|
115
|
+
domain: "acmeoutdoor.example"
|
|
116
|
+
operator: "pinnacle-agency.example"
|
|
117
|
+
name: "Primetime Drama Allowlist"
|
|
118
|
+
description: "Collection of approved primetime drama programs."
|
|
119
|
+
idempotency_key: "$generate:uuid_v4#pagination_integrity_collection_lists_setup_create_list_1"
|
|
120
|
+
context:
|
|
121
|
+
correlation_id: "pagination_integrity_collection_lists--setup_1"
|
|
122
|
+
validations:
|
|
123
|
+
- check: response_schema
|
|
124
|
+
description: "Response matches create-collection-list-response.json schema"
|
|
125
|
+
- check: field_present
|
|
126
|
+
path: "list.list_id"
|
|
127
|
+
description: "Response contains list.list_id"
|
|
128
|
+
|
|
129
|
+
- id: create_list_2
|
|
130
|
+
title: "Create second collection list"
|
|
131
|
+
narrative: |
|
|
132
|
+
Create a collection list for news programs.
|
|
133
|
+
task: create_collection_list
|
|
134
|
+
schema_ref: "collection/create-collection-list-request.json"
|
|
135
|
+
response_schema_ref: "collection/create-collection-list-response.json"
|
|
136
|
+
doc_ref: "/governance/task-reference/create_collection_list"
|
|
137
|
+
comply_scenario: pagination_integrity_collection_lists
|
|
138
|
+
stateful: true
|
|
139
|
+
expected: |
|
|
140
|
+
Accept the collection list and return a list.list_id.
|
|
141
|
+
|
|
142
|
+
sample_request:
|
|
143
|
+
account:
|
|
144
|
+
brand:
|
|
145
|
+
domain: "acmeoutdoor.example"
|
|
146
|
+
operator: "pinnacle-agency.example"
|
|
147
|
+
name: "News Programs Allowlist"
|
|
148
|
+
description: "Approved national news broadcast programs."
|
|
149
|
+
idempotency_key: "$generate:uuid_v4#pagination_integrity_collection_lists_setup_create_list_2"
|
|
150
|
+
context:
|
|
151
|
+
correlation_id: "pagination_integrity_collection_lists--setup_2"
|
|
152
|
+
validations:
|
|
153
|
+
- check: response_schema
|
|
154
|
+
description: "Response matches create-collection-list-response.json schema"
|
|
155
|
+
- check: field_present
|
|
156
|
+
path: "list.list_id"
|
|
157
|
+
description: "Response contains list.list_id"
|
|
158
|
+
|
|
159
|
+
- id: create_list_3
|
|
160
|
+
title: "Create third collection list"
|
|
161
|
+
narrative: |
|
|
162
|
+
Create a collection list for sports programs.
|
|
163
|
+
task: create_collection_list
|
|
164
|
+
schema_ref: "collection/create-collection-list-request.json"
|
|
165
|
+
response_schema_ref: "collection/create-collection-list-response.json"
|
|
166
|
+
doc_ref: "/governance/task-reference/create_collection_list"
|
|
167
|
+
comply_scenario: pagination_integrity_collection_lists
|
|
168
|
+
stateful: true
|
|
169
|
+
expected: |
|
|
170
|
+
Accept the collection list and return a list.list_id.
|
|
171
|
+
|
|
172
|
+
sample_request:
|
|
173
|
+
account:
|
|
174
|
+
brand:
|
|
175
|
+
domain: "acmeoutdoor.example"
|
|
176
|
+
operator: "pinnacle-agency.example"
|
|
177
|
+
name: "Sports Programs Allowlist"
|
|
178
|
+
description: "Approved live sports broadcasts."
|
|
179
|
+
idempotency_key: "$generate:uuid_v4#pagination_integrity_collection_lists_setup_create_list_3"
|
|
180
|
+
context:
|
|
181
|
+
correlation_id: "pagination_integrity_collection_lists--setup_3"
|
|
182
|
+
validations:
|
|
183
|
+
- check: response_schema
|
|
184
|
+
description: "Response matches create-collection-list-response.json schema"
|
|
185
|
+
- check: field_present
|
|
186
|
+
path: "list.list_id"
|
|
187
|
+
description: "Response contains list.list_id"
|
|
188
|
+
|
|
189
|
+
- id: pagination_walk
|
|
190
|
+
title: "Walk pages with a small max_results"
|
|
191
|
+
narrative: |
|
|
192
|
+
With three collection lists seeded and `max_results: 2`, the first call
|
|
193
|
+
MUST return a continuation page (has_more=true with a cursor). The runner
|
|
194
|
+
then follows the cursor; the second call MUST return the terminal page
|
|
195
|
+
(has_more=false with no cursor).
|
|
196
|
+
|
|
197
|
+
steps:
|
|
198
|
+
- id: first_page
|
|
199
|
+
title: "Request the first page with max_results=2"
|
|
200
|
+
narrative: |
|
|
201
|
+
The buyer asks for up to two collection lists. The agent has three
|
|
202
|
+
matching lists, so the request is non-terminal: callers expect
|
|
203
|
+
`has_more=true` and a `cursor` they can follow to retrieve the
|
|
204
|
+
remaining list.
|
|
205
|
+
|
|
206
|
+
The runner captures `pagination.cursor` into `$context.next_cursor`
|
|
207
|
+
for the follow-up step. If the agent reports `has_more=false` on
|
|
208
|
+
this page (hiding the seeded third list behind a dishonest terminal
|
|
209
|
+
signal), the field_value check on `pagination.has_more` fails.
|
|
210
|
+
task: list_collection_lists
|
|
211
|
+
schema_ref: "collection/list-collection-lists-request.json"
|
|
212
|
+
response_schema_ref: "collection/list-collection-lists-response.json"
|
|
213
|
+
doc_ref: "/governance/task-reference/list_collection_lists"
|
|
214
|
+
comply_scenario: pagination_integrity_collection_lists
|
|
215
|
+
stateful: true
|
|
216
|
+
context_outputs:
|
|
217
|
+
- name: next_cursor
|
|
218
|
+
path: "pagination.cursor"
|
|
219
|
+
expected: |
|
|
220
|
+
Return up to two collection lists with:
|
|
221
|
+
- pagination.has_more = true
|
|
222
|
+
- pagination.cursor present (an opaque continuation token)
|
|
223
|
+
|
|
224
|
+
sample_request:
|
|
225
|
+
account:
|
|
226
|
+
brand:
|
|
227
|
+
domain: "acmeoutdoor.example"
|
|
228
|
+
operator: "pinnacle-agency.example"
|
|
229
|
+
pagination:
|
|
230
|
+
max_results: 2
|
|
231
|
+
|
|
232
|
+
context:
|
|
233
|
+
correlation_id: "pagination_integrity_collection_lists--first_page"
|
|
234
|
+
validations:
|
|
235
|
+
- check: response_schema
|
|
236
|
+
description: "Response matches list-collection-lists-response.json schema"
|
|
237
|
+
- check: field_value
|
|
238
|
+
path: "pagination.has_more"
|
|
239
|
+
value: true
|
|
240
|
+
description: "Three lists seeded with max_results=2 → first page is non-terminal"
|
|
241
|
+
- check: field_present
|
|
242
|
+
path: "pagination.cursor"
|
|
243
|
+
description: "has_more=true requires a cursor — without one the caller cannot continue"
|
|
244
|
+
- check: field_value_or_absent
|
|
245
|
+
path: "pagination.total_count"
|
|
246
|
+
allowed_values: [3]
|
|
247
|
+
description: "If volunteered, total_count MUST equal the seeded set size"
|
|
248
|
+
- check: field_present
|
|
249
|
+
path: "context"
|
|
250
|
+
description: "Response echoes back the context object"
|
|
251
|
+
- check: field_value
|
|
252
|
+
path: "context.correlation_id"
|
|
253
|
+
value: "pagination_integrity_collection_lists--first_page"
|
|
254
|
+
description: "Context correlation_id returned unchanged"
|
|
255
|
+
|
|
256
|
+
- id: terminal_page
|
|
257
|
+
title: "Follow the cursor to the terminal page"
|
|
258
|
+
narrative: |
|
|
259
|
+
The buyer follows the captured cursor. With at most one remaining
|
|
260
|
+
list the agent MUST return a terminal page: `has_more=false` with no
|
|
261
|
+
`cursor` field. A cursor on `has_more=false` is a stale token that
|
|
262
|
+
invites callers to follow it past the end of results.
|
|
263
|
+
task: list_collection_lists
|
|
264
|
+
schema_ref: "collection/list-collection-lists-request.json"
|
|
265
|
+
response_schema_ref: "collection/list-collection-lists-response.json"
|
|
266
|
+
doc_ref: "/governance/task-reference/list_collection_lists"
|
|
267
|
+
comply_scenario: pagination_integrity_collection_lists
|
|
268
|
+
stateful: true
|
|
269
|
+
expected: |
|
|
270
|
+
Return the remaining list(s) with:
|
|
271
|
+
- pagination.has_more = false
|
|
272
|
+
- pagination.cursor absent
|
|
273
|
+
|
|
274
|
+
sample_request:
|
|
275
|
+
account:
|
|
276
|
+
brand:
|
|
277
|
+
domain: "acmeoutdoor.example"
|
|
278
|
+
operator: "pinnacle-agency.example"
|
|
279
|
+
pagination:
|
|
280
|
+
cursor: "$context.next_cursor"
|
|
281
|
+
max_results: 2
|
|
282
|
+
|
|
283
|
+
context:
|
|
284
|
+
correlation_id: "pagination_integrity_collection_lists--terminal_page"
|
|
285
|
+
validations:
|
|
286
|
+
- check: response_schema
|
|
287
|
+
description: "Response matches list-collection-lists-response.json schema"
|
|
288
|
+
- check: field_value
|
|
289
|
+
path: "pagination.has_more"
|
|
290
|
+
value: false
|
|
291
|
+
description: "After two pages of two items the seeded set is exhausted"
|
|
292
|
+
- check: field_value_or_absent
|
|
293
|
+
path: "pagination.cursor"
|
|
294
|
+
allowed_values: [null]
|
|
295
|
+
description: "Terminal page MUST omit cursor (null also accepted for clients that explicitly clear the field)"
|
|
296
|
+
- check: field_value_or_absent
|
|
297
|
+
path: "pagination.total_count"
|
|
298
|
+
allowed_values: [3]
|
|
299
|
+
description: "total_count (when volunteered) MUST stay stable across pages and equal the seeded set size"
|
|
300
|
+
- check: field_present
|
|
301
|
+
path: "context"
|
|
302
|
+
description: "Response echoes back the context object"
|
|
303
|
+
- check: field_value
|
|
304
|
+
path: "context.correlation_id"
|
|
305
|
+
value: "pagination_integrity_collection_lists--terminal_page"
|
|
306
|
+
description: "Context correlation_id returned unchanged"
|