@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,326 @@
|
|
|
1
|
+
id: pagination_integrity_content_standards
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
title: "Pagination cursor integrity — list_content_standards"
|
|
4
|
+
category: schema_validation
|
|
5
|
+
summary: "Validates the cursor↔has_more invariant by walking a paginated list_content_standards response from a continuation page to a terminal page."
|
|
6
|
+
track: core
|
|
7
|
+
required_tools:
|
|
8
|
+
- list_content_standards
|
|
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_content_standards` in a single run.
|
|
21
|
+
|
|
22
|
+
The runner bootstraps three content standards configurations via
|
|
23
|
+
`create_content_standards`, then lists them back with `max_results=2`. The
|
|
24
|
+
first page MUST cap at two standards and signal continuation with
|
|
25
|
+
`has_more=true` plus a cursor. The runner then follows that cursor; the
|
|
26
|
+
second call MUST return the terminal page with `has_more=false` and no
|
|
27
|
+
cursor. An agent that hides the third standard by reporting `has_more=false`
|
|
28
|
+
on the first page fails the first-page assertion. An agent that carries a
|
|
29
|
+
stale cursor onto the terminal page fails the 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_content_standards"
|
|
40
|
+
|
|
41
|
+
caller:
|
|
42
|
+
role: buyer_agent
|
|
43
|
+
example: "Compliance test harness"
|
|
44
|
+
|
|
45
|
+
prerequisites:
|
|
46
|
+
description: |
|
|
47
|
+
The storyboard bootstraps three content standards configurations in the
|
|
48
|
+
setup phase via `create_content_standards`. The seed-DAG does not include
|
|
49
|
+
content standards, so this storyboard uses the create-then-list pattern to
|
|
50
|
+
keep itself 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_content_standards.
|
|
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_content_standards.
|
|
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_content_standards
|
|
71
|
+
stateful: false
|
|
72
|
+
expected: |
|
|
73
|
+
Return capabilities declaring supported protocols.
|
|
74
|
+
|
|
75
|
+
sample_request:
|
|
76
|
+
context:
|
|
77
|
+
correlation_id: "pagination_integrity_content_standards--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_content_standards--get_capabilities"
|
|
90
|
+
description: "Context correlation_id returned unchanged"
|
|
91
|
+
|
|
92
|
+
- id: setup
|
|
93
|
+
title: "Bootstrap three content standards configurations"
|
|
94
|
+
narrative: |
|
|
95
|
+
Create three content standards configurations so the pagination walk has
|
|
96
|
+
a deterministic set of three items to page through with max_results=2.
|
|
97
|
+
steps:
|
|
98
|
+
- id: create_standards_1
|
|
99
|
+
title: "Create first content standards configuration"
|
|
100
|
+
narrative: |
|
|
101
|
+
Create a content standards configuration scoped to English-language
|
|
102
|
+
display ads. The agent MUST accept this and return a standards_id.
|
|
103
|
+
task: create_content_standards
|
|
104
|
+
schema_ref: "content-standards/create-content-standards-request.json"
|
|
105
|
+
response_schema_ref: "content-standards/create-content-standards-response.json"
|
|
106
|
+
doc_ref: "/governance/task-reference/create_content_standards"
|
|
107
|
+
comply_scenario: pagination_integrity_content_standards
|
|
108
|
+
stateful: true
|
|
109
|
+
expected: |
|
|
110
|
+
Accept the configuration and return a standards_id.
|
|
111
|
+
|
|
112
|
+
sample_request:
|
|
113
|
+
account:
|
|
114
|
+
brand:
|
|
115
|
+
domain: "acmeoutdoor.example"
|
|
116
|
+
operator: "pinnacle-agency.example"
|
|
117
|
+
scope:
|
|
118
|
+
languages_any: ["en"]
|
|
119
|
+
channels_any: ["display"]
|
|
120
|
+
policies:
|
|
121
|
+
- policy_id: "content-standards-no-alcohol-gambling-tobacco"
|
|
122
|
+
enforcement: "must"
|
|
123
|
+
policy: "No alcohol, gambling, or tobacco content."
|
|
124
|
+
idempotency_key: "$generate:uuid_v4#pagination_integrity_content_standards_setup_create_standards_1"
|
|
125
|
+
context:
|
|
126
|
+
correlation_id: "pagination_integrity_content_standards--setup_1"
|
|
127
|
+
validations:
|
|
128
|
+
- check: response_schema
|
|
129
|
+
description: "Response matches create-content-standards-response.json schema"
|
|
130
|
+
- check: field_present
|
|
131
|
+
path: "standards_id"
|
|
132
|
+
description: "Response contains standards_id"
|
|
133
|
+
|
|
134
|
+
- id: create_standards_2
|
|
135
|
+
title: "Create second content standards configuration"
|
|
136
|
+
narrative: |
|
|
137
|
+
Create a second content standards configuration scoped to Spanish-
|
|
138
|
+
language video ads.
|
|
139
|
+
task: create_content_standards
|
|
140
|
+
schema_ref: "content-standards/create-content-standards-request.json"
|
|
141
|
+
response_schema_ref: "content-standards/create-content-standards-response.json"
|
|
142
|
+
doc_ref: "/governance/task-reference/create_content_standards"
|
|
143
|
+
comply_scenario: pagination_integrity_content_standards
|
|
144
|
+
stateful: true
|
|
145
|
+
expected: |
|
|
146
|
+
Accept the configuration and return a standards_id.
|
|
147
|
+
|
|
148
|
+
sample_request:
|
|
149
|
+
account:
|
|
150
|
+
brand:
|
|
151
|
+
domain: "acmeoutdoor.example"
|
|
152
|
+
operator: "pinnacle-agency.example"
|
|
153
|
+
scope:
|
|
154
|
+
languages_any: ["es"]
|
|
155
|
+
channels_any: ["olv"]
|
|
156
|
+
policies:
|
|
157
|
+
- policy_id: "content-standards-family-friendly"
|
|
158
|
+
enforcement: "must"
|
|
159
|
+
policy: "Family-friendly content only. No political advertising."
|
|
160
|
+
idempotency_key: "$generate:uuid_v4#pagination_integrity_content_standards_setup_create_standards_2"
|
|
161
|
+
context:
|
|
162
|
+
correlation_id: "pagination_integrity_content_standards--setup_2"
|
|
163
|
+
validations:
|
|
164
|
+
- check: response_schema
|
|
165
|
+
description: "Response matches create-content-standards-response.json schema"
|
|
166
|
+
- check: field_present
|
|
167
|
+
path: "standards_id"
|
|
168
|
+
description: "Response contains standards_id"
|
|
169
|
+
|
|
170
|
+
- id: create_standards_3
|
|
171
|
+
title: "Create third content standards configuration"
|
|
172
|
+
narrative: |
|
|
173
|
+
Create a third content standards configuration for French-language
|
|
174
|
+
connected-TV placements.
|
|
175
|
+
task: create_content_standards
|
|
176
|
+
schema_ref: "content-standards/create-content-standards-request.json"
|
|
177
|
+
response_schema_ref: "content-standards/create-content-standards-response.json"
|
|
178
|
+
doc_ref: "/governance/task-reference/create_content_standards"
|
|
179
|
+
comply_scenario: pagination_integrity_content_standards
|
|
180
|
+
stateful: true
|
|
181
|
+
expected: |
|
|
182
|
+
Accept the configuration and return a standards_id.
|
|
183
|
+
|
|
184
|
+
sample_request:
|
|
185
|
+
account:
|
|
186
|
+
brand:
|
|
187
|
+
domain: "acmeoutdoor.example"
|
|
188
|
+
operator: "pinnacle-agency.example"
|
|
189
|
+
scope:
|
|
190
|
+
languages_any: ["fr"]
|
|
191
|
+
channels_any: ["ctv"]
|
|
192
|
+
policies:
|
|
193
|
+
- policy_id: "content-standards-no-pharma-financial"
|
|
194
|
+
enforcement: "must"
|
|
195
|
+
policy: "No pharmaceutical or financial product advertising."
|
|
196
|
+
idempotency_key: "$generate:uuid_v4#pagination_integrity_content_standards_setup_create_standards_3"
|
|
197
|
+
context:
|
|
198
|
+
correlation_id: "pagination_integrity_content_standards--setup_3"
|
|
199
|
+
validations:
|
|
200
|
+
- check: response_schema
|
|
201
|
+
description: "Response matches create-content-standards-response.json schema"
|
|
202
|
+
- check: field_present
|
|
203
|
+
path: "standards_id"
|
|
204
|
+
description: "Response contains standards_id"
|
|
205
|
+
|
|
206
|
+
- id: pagination_walk
|
|
207
|
+
title: "Walk pages with a small max_results"
|
|
208
|
+
narrative: |
|
|
209
|
+
With three standards seeded and `max_results: 2`, the first call MUST
|
|
210
|
+
return a continuation page (has_more=true with a cursor). The runner
|
|
211
|
+
then follows the cursor; the second call MUST return the terminal
|
|
212
|
+
page (has_more=false with no cursor).
|
|
213
|
+
|
|
214
|
+
steps:
|
|
215
|
+
- id: first_page
|
|
216
|
+
title: "Request the first page with max_results=2"
|
|
217
|
+
narrative: |
|
|
218
|
+
The buyer asks for up to two content standards. The agent has three
|
|
219
|
+
matching configurations, so the request is non-terminal: callers
|
|
220
|
+
expect `has_more=true` and a `cursor` they can follow to retrieve
|
|
221
|
+
the remaining standard.
|
|
222
|
+
|
|
223
|
+
The runner captures `pagination.cursor` into `$context.next_cursor`
|
|
224
|
+
for the follow-up step. If the agent reports `has_more=false` on
|
|
225
|
+
this page (hiding the seeded third standard behind a dishonest
|
|
226
|
+
terminal signal), the field_value check on `pagination.has_more`
|
|
227
|
+
fails — surfacing exactly the bug class this storyboard exists to
|
|
228
|
+
catch.
|
|
229
|
+
task: list_content_standards
|
|
230
|
+
schema_ref: "content-standards/list-content-standards-request.json"
|
|
231
|
+
response_schema_ref: "content-standards/list-content-standards-response.json"
|
|
232
|
+
doc_ref: "/governance/task-reference/list_content_standards"
|
|
233
|
+
comply_scenario: pagination_integrity_content_standards
|
|
234
|
+
stateful: true
|
|
235
|
+
context_outputs:
|
|
236
|
+
- name: next_cursor
|
|
237
|
+
path: "pagination.cursor"
|
|
238
|
+
expected: |
|
|
239
|
+
Return up to two standards with:
|
|
240
|
+
- pagination.has_more = true
|
|
241
|
+
- pagination.cursor present (an opaque continuation token)
|
|
242
|
+
|
|
243
|
+
sample_request:
|
|
244
|
+
account:
|
|
245
|
+
brand:
|
|
246
|
+
domain: "acmeoutdoor.example"
|
|
247
|
+
operator: "pinnacle-agency.example"
|
|
248
|
+
pagination:
|
|
249
|
+
max_results: 2
|
|
250
|
+
|
|
251
|
+
context:
|
|
252
|
+
correlation_id: "pagination_integrity_content_standards--first_page"
|
|
253
|
+
validations:
|
|
254
|
+
- check: response_schema
|
|
255
|
+
description: "Response matches list-content-standards-response.json schema"
|
|
256
|
+
- check: field_value
|
|
257
|
+
path: "pagination.has_more"
|
|
258
|
+
value: true
|
|
259
|
+
description: "Three standards seeded with max_results=2 → first page is non-terminal"
|
|
260
|
+
- check: field_present
|
|
261
|
+
path: "pagination.cursor"
|
|
262
|
+
description: "has_more=true requires a cursor — without one the caller cannot continue"
|
|
263
|
+
- check: field_value_or_absent
|
|
264
|
+
path: "pagination.total_count"
|
|
265
|
+
allowed_values: [3]
|
|
266
|
+
description: "If volunteered, total_count MUST equal the seeded set size"
|
|
267
|
+
- check: field_present
|
|
268
|
+
path: "context"
|
|
269
|
+
description: "Response echoes back the context object"
|
|
270
|
+
- check: field_value
|
|
271
|
+
path: "context.correlation_id"
|
|
272
|
+
value: "pagination_integrity_content_standards--first_page"
|
|
273
|
+
description: "Context correlation_id returned unchanged"
|
|
274
|
+
|
|
275
|
+
- id: terminal_page
|
|
276
|
+
title: "Follow the cursor to the terminal page"
|
|
277
|
+
narrative: |
|
|
278
|
+
The buyer follows the captured cursor. With at most one remaining
|
|
279
|
+
standard the agent MUST return a terminal page: `has_more=false`
|
|
280
|
+
with no `cursor` field. A cursor on `has_more=false` is a stale
|
|
281
|
+
token that invites callers to follow it past the end of results.
|
|
282
|
+
task: list_content_standards
|
|
283
|
+
schema_ref: "content-standards/list-content-standards-request.json"
|
|
284
|
+
response_schema_ref: "content-standards/list-content-standards-response.json"
|
|
285
|
+
doc_ref: "/governance/task-reference/list_content_standards"
|
|
286
|
+
comply_scenario: pagination_integrity_content_standards
|
|
287
|
+
stateful: true
|
|
288
|
+
expected: |
|
|
289
|
+
Return the remaining standard(s) with:
|
|
290
|
+
- pagination.has_more = false
|
|
291
|
+
- pagination.cursor absent (a stale cursor on a terminal page is a
|
|
292
|
+
dishonest pagination signal)
|
|
293
|
+
|
|
294
|
+
sample_request:
|
|
295
|
+
account:
|
|
296
|
+
brand:
|
|
297
|
+
domain: "acmeoutdoor.example"
|
|
298
|
+
operator: "pinnacle-agency.example"
|
|
299
|
+
pagination:
|
|
300
|
+
cursor: "$context.next_cursor"
|
|
301
|
+
max_results: 2
|
|
302
|
+
|
|
303
|
+
context:
|
|
304
|
+
correlation_id: "pagination_integrity_content_standards--terminal_page"
|
|
305
|
+
validations:
|
|
306
|
+
- check: response_schema
|
|
307
|
+
description: "Response matches list-content-standards-response.json schema"
|
|
308
|
+
- check: field_value
|
|
309
|
+
path: "pagination.has_more"
|
|
310
|
+
value: false
|
|
311
|
+
description: "After two pages of two items the seeded set is exhausted"
|
|
312
|
+
- check: field_value_or_absent
|
|
313
|
+
path: "pagination.cursor"
|
|
314
|
+
allowed_values: [null]
|
|
315
|
+
description: "Terminal page MUST omit cursor (null also accepted for clients that explicitly clear the field)"
|
|
316
|
+
- check: field_value_or_absent
|
|
317
|
+
path: "pagination.total_count"
|
|
318
|
+
allowed_values: [3]
|
|
319
|
+
description: "total_count (when volunteered) MUST stay stable across pages and equal the seeded set size"
|
|
320
|
+
- check: field_present
|
|
321
|
+
path: "context"
|
|
322
|
+
description: "Response echoes back the context object"
|
|
323
|
+
- check: field_value
|
|
324
|
+
path: "context.correlation_id"
|
|
325
|
+
value: "pagination_integrity_content_standards--terminal_page"
|
|
326
|
+
description: "Context correlation_id returned unchanged"
|