@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,262 @@
|
|
|
1
|
+
# Nova Motors — Signal-Focused Advertiser Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Entity definition: fictional-entities.yaml → advertisers[nova_motors]
|
|
4
|
+
# Data providers defined in this kit: see fictional-entities.yaml → data_providers
|
|
5
|
+
#
|
|
6
|
+
# This brand is registered as a sandbox brand in AgenticAdvertising.org (AAO).
|
|
7
|
+
# Agents resolve novamotors.example via the standard AAO brand resolution path.
|
|
8
|
+
# AAO returns the brand.json below but excludes sandbox brands from production
|
|
9
|
+
# brand discovery results.
|
|
10
|
+
|
|
11
|
+
id: nova_motors
|
|
12
|
+
name: "Nova Motors"
|
|
13
|
+
description: |
|
|
14
|
+
Signal-focused test kit for the Nova Motors Volta EV launch campaign.
|
|
15
|
+
Provides sample signal definitions, pricing options, and destination
|
|
16
|
+
configurations for testing signal agent storyboards.
|
|
17
|
+
sandbox: true
|
|
18
|
+
|
|
19
|
+
# security_baseline auth fixture — see acme-outdoor.yaml for semantics.
|
|
20
|
+
#
|
|
21
|
+
# probe_task is `get_signals` because this kit's primary consumers are
|
|
22
|
+
# signal agents (specialisms/signal-owned, specialisms/signal-marketplace)
|
|
23
|
+
# where list_creatives is not implemented. Non-signal storyboards that
|
|
24
|
+
# reuse this kit (collection-lists, sales-broadcast-tv, sponsored-
|
|
25
|
+
# intelligence) should select acme-outdoor for security_baseline, or
|
|
26
|
+
# override probe_task at the storyboard layer.
|
|
27
|
+
auth:
|
|
28
|
+
api_key: "demo-nova-motors-v1"
|
|
29
|
+
probe_task: get_signals
|
|
30
|
+
|
|
31
|
+
brand:
|
|
32
|
+
house:
|
|
33
|
+
domain: "novamotors.example"
|
|
34
|
+
name: "Nova Motors"
|
|
35
|
+
brand_id: "nova_motors"
|
|
36
|
+
names:
|
|
37
|
+
- en: "Nova Motors"
|
|
38
|
+
description: "Electric vehicles for the next generation. The Volta EV — performance meets sustainability."
|
|
39
|
+
industry: "automotive"
|
|
40
|
+
keller_type: "master"
|
|
41
|
+
logos:
|
|
42
|
+
- url: "https://test-assets.adcontextprotocol.org/nova-motors/logo-primary.png"
|
|
43
|
+
orientation: "horizontal"
|
|
44
|
+
background: "light-bg"
|
|
45
|
+
variant: "primary"
|
|
46
|
+
width: 400
|
|
47
|
+
height: 100
|
|
48
|
+
- url: "https://test-assets.adcontextprotocol.org/nova-motors/logo-icon.png"
|
|
49
|
+
orientation: "square"
|
|
50
|
+
background: "transparent-bg"
|
|
51
|
+
variant: "icon"
|
|
52
|
+
width: 200
|
|
53
|
+
height: 200
|
|
54
|
+
colors:
|
|
55
|
+
primary: "#0D47A1"
|
|
56
|
+
secondary: "#00BFA5"
|
|
57
|
+
accent: "#FF6D00"
|
|
58
|
+
background: "#F5F5F5"
|
|
59
|
+
text: "#1A1A1A"
|
|
60
|
+
fonts:
|
|
61
|
+
heading:
|
|
62
|
+
family: "Inter"
|
|
63
|
+
weight: 700
|
|
64
|
+
url: "https://fonts.googleapis.com/css2?family=Inter:wght@700"
|
|
65
|
+
body:
|
|
66
|
+
family: "Inter"
|
|
67
|
+
weight: 400
|
|
68
|
+
url: "https://fonts.googleapis.com/css2?family=Inter"
|
|
69
|
+
tone:
|
|
70
|
+
voice: "Forward-thinking and precise. We speak to drivers who care about engineering and the planet — no greenwashing, no hype."
|
|
71
|
+
attributes:
|
|
72
|
+
- "innovative"
|
|
73
|
+
- "precise"
|
|
74
|
+
- "optimistic"
|
|
75
|
+
dos:
|
|
76
|
+
- "Lead with performance specs"
|
|
77
|
+
- "Reference sustainability with evidence"
|
|
78
|
+
- "Use clean, modern language"
|
|
79
|
+
donts:
|
|
80
|
+
- "Greenwash or overstate environmental claims"
|
|
81
|
+
- "Use legacy automotive clichés"
|
|
82
|
+
- "Condescend about range anxiety"
|
|
83
|
+
|
|
84
|
+
campaign:
|
|
85
|
+
brand: "Nova Motors"
|
|
86
|
+
product: "Volta EV"
|
|
87
|
+
brief: "Reach in-market EV buyers with high purchase propensity, near dealerships, who haven't bought a Nova vehicle before."
|
|
88
|
+
budget: 250000
|
|
89
|
+
currency: "USD"
|
|
90
|
+
markets: ["US"]
|
|
91
|
+
|
|
92
|
+
signals:
|
|
93
|
+
marketplace:
|
|
94
|
+
- signal_agent_segment_id: "trident_likely_ev_buyers"
|
|
95
|
+
name: "Likely EV Buyers"
|
|
96
|
+
data_provider_domain: "tridentauto.example"
|
|
97
|
+
signal_id: "likely_ev_buyers"
|
|
98
|
+
value_type: "binary"
|
|
99
|
+
signal_type: "marketplace"
|
|
100
|
+
coverage_percentage: 8
|
|
101
|
+
pricing:
|
|
102
|
+
- pricing_option_id: "po_trident_ev_cpm"
|
|
103
|
+
model: "cpm"
|
|
104
|
+
cpm: 3.50
|
|
105
|
+
currency: "USD"
|
|
106
|
+
|
|
107
|
+
- signal_agent_segment_id: "trident_purchase_propensity"
|
|
108
|
+
name: "Purchase Propensity"
|
|
109
|
+
data_provider_domain: "tridentauto.example"
|
|
110
|
+
signal_id: "purchase_propensity"
|
|
111
|
+
value_type: "numeric"
|
|
112
|
+
signal_type: "marketplace"
|
|
113
|
+
range:
|
|
114
|
+
min: 0
|
|
115
|
+
max: 1
|
|
116
|
+
coverage_percentage: 55
|
|
117
|
+
pricing:
|
|
118
|
+
- pricing_option_id: "po_trident_propensity_cpm"
|
|
119
|
+
model: "cpm"
|
|
120
|
+
cpm: 4.00
|
|
121
|
+
currency: "USD"
|
|
122
|
+
|
|
123
|
+
- signal_agent_segment_id: "meridian_competitor_visitors"
|
|
124
|
+
name: "Competitor Visitors"
|
|
125
|
+
data_provider_domain: "meridiangeo.example"
|
|
126
|
+
signal_id: "competitor_visitors"
|
|
127
|
+
value_type: "binary"
|
|
128
|
+
signal_type: "marketplace"
|
|
129
|
+
coverage_percentage: 6
|
|
130
|
+
pricing:
|
|
131
|
+
- pricing_option_id: "po_meridian_visitors_cpm"
|
|
132
|
+
model: "cpm"
|
|
133
|
+
cpm: 5.00
|
|
134
|
+
currency: "USD"
|
|
135
|
+
|
|
136
|
+
- signal_agent_segment_id: "shopgrid_new_to_brand"
|
|
137
|
+
name: "New to Brand"
|
|
138
|
+
data_provider_domain: "shopgrid.example"
|
|
139
|
+
signal_id: "new_to_brand"
|
|
140
|
+
value_type: "binary"
|
|
141
|
+
signal_type: "marketplace"
|
|
142
|
+
coverage_percentage: 25
|
|
143
|
+
pricing:
|
|
144
|
+
- pricing_option_id: "po_shopgrid_retail_cpm"
|
|
145
|
+
model: "cpm"
|
|
146
|
+
cpm: 3.50
|
|
147
|
+
currency: "USD"
|
|
148
|
+
|
|
149
|
+
owned:
|
|
150
|
+
- signal_agent_segment_id: "prism_high_ltv"
|
|
151
|
+
name: "High LTV Customers"
|
|
152
|
+
value_type: "binary"
|
|
153
|
+
signal_type: "owned"
|
|
154
|
+
coverage_percentage: 12
|
|
155
|
+
pricing:
|
|
156
|
+
- pricing_option_id: "po_prism_flat_monthly"
|
|
157
|
+
model: "flat_fee"
|
|
158
|
+
amount: 5000
|
|
159
|
+
period: "monthly"
|
|
160
|
+
currency: "USD"
|
|
161
|
+
|
|
162
|
+
- signal_agent_segment_id: "prism_cart_abandoner"
|
|
163
|
+
name: "Cart Abandoners"
|
|
164
|
+
value_type: "binary"
|
|
165
|
+
signal_type: "owned"
|
|
166
|
+
coverage_percentage: 18
|
|
167
|
+
pricing:
|
|
168
|
+
- pricing_option_id: "po_prism_abandoner_cpm"
|
|
169
|
+
model: "cpm"
|
|
170
|
+
cpm: 8.00
|
|
171
|
+
currency: "USD"
|
|
172
|
+
|
|
173
|
+
- signal_agent_segment_id: "prism_engagement_score"
|
|
174
|
+
name: "Engagement Score"
|
|
175
|
+
value_type: "numeric"
|
|
176
|
+
signal_type: "owned"
|
|
177
|
+
range:
|
|
178
|
+
min: 0
|
|
179
|
+
max: 100
|
|
180
|
+
coverage_percentage: 65
|
|
181
|
+
pricing:
|
|
182
|
+
- pricing_option_id: "po_prism_engagement_cpm"
|
|
183
|
+
model: "cpm"
|
|
184
|
+
cpm: 2.50
|
|
185
|
+
currency: "USD"
|
|
186
|
+
|
|
187
|
+
- signal_agent_segment_id: "prism_churn_risk"
|
|
188
|
+
name: "Churn Risk"
|
|
189
|
+
value_type: "categorical"
|
|
190
|
+
signal_type: "owned"
|
|
191
|
+
categories: ["low_risk", "medium_risk", "high_risk", "churned"]
|
|
192
|
+
coverage_percentage: 70
|
|
193
|
+
pricing:
|
|
194
|
+
- pricing_option_id: "po_prism_churn_pom"
|
|
195
|
+
model: "percent_of_media"
|
|
196
|
+
percent: 12
|
|
197
|
+
max_cpm: 3.00
|
|
198
|
+
currency: "USD"
|
|
199
|
+
|
|
200
|
+
assets:
|
|
201
|
+
images:
|
|
202
|
+
- id: "hero_300x250"
|
|
203
|
+
url: "https://test-assets.adcontextprotocol.org/nova-motors/hero-300x250.jpg"
|
|
204
|
+
width: 300
|
|
205
|
+
height: 250
|
|
206
|
+
mime_type: "image/jpeg"
|
|
207
|
+
description: "Medium rectangle hero — Volta EV on coastal highway"
|
|
208
|
+
|
|
209
|
+
- id: "hero_728x90"
|
|
210
|
+
url: "https://test-assets.adcontextprotocol.org/nova-motors/hero-728x90.jpg"
|
|
211
|
+
width: 728
|
|
212
|
+
height: 90
|
|
213
|
+
mime_type: "image/jpeg"
|
|
214
|
+
description: "Leaderboard hero — Volta EV front profile with charging station"
|
|
215
|
+
|
|
216
|
+
- id: "hero_320x50"
|
|
217
|
+
url: "https://test-assets.adcontextprotocol.org/nova-motors/hero-320x50.jpg"
|
|
218
|
+
width: 320
|
|
219
|
+
height: 50
|
|
220
|
+
mime_type: "image/jpeg"
|
|
221
|
+
description: "Mobile banner hero — Volta EV dashboard detail"
|
|
222
|
+
|
|
223
|
+
- id: "hero_160x600"
|
|
224
|
+
url: "https://test-assets.adcontextprotocol.org/nova-motors/hero-160x600.jpg"
|
|
225
|
+
width: 160
|
|
226
|
+
height: 600
|
|
227
|
+
mime_type: "image/jpeg"
|
|
228
|
+
description: "Wide skyscraper hero — vertical Volta EV silhouette"
|
|
229
|
+
|
|
230
|
+
- id: "hero_master"
|
|
231
|
+
url: "https://test-assets.adcontextprotocol.org/nova-motors/hero-master.jpg"
|
|
232
|
+
width: 1200
|
|
233
|
+
height: 628
|
|
234
|
+
mime_type: "image/jpeg"
|
|
235
|
+
description: "Master hero image — high-res Volta EV in motion"
|
|
236
|
+
|
|
237
|
+
text:
|
|
238
|
+
headlines:
|
|
239
|
+
- "The Volta EV — 0 to 60 in 3.2s"
|
|
240
|
+
- "Performance Meets Sustainability"
|
|
241
|
+
- "Drive Electric. Drive Nova."
|
|
242
|
+
descriptions:
|
|
243
|
+
- "340 miles of range. 15-minute fast charge. The Volta EV is engineered for drivers who refuse to compromise."
|
|
244
|
+
- "Zero emissions, zero compromises. Test drive the Volta EV at your nearest Nova Motors dealer."
|
|
245
|
+
cta:
|
|
246
|
+
- "Reserve Yours"
|
|
247
|
+
- "Schedule a Test Drive"
|
|
248
|
+
- "Explore the Volta"
|
|
249
|
+
|
|
250
|
+
click_url: "https://novamotors.example/volta-ev"
|
|
251
|
+
|
|
252
|
+
destinations:
|
|
253
|
+
platforms:
|
|
254
|
+
- type: "platform"
|
|
255
|
+
platform: "the-trade-desk"
|
|
256
|
+
account: "agency-123-ttd"
|
|
257
|
+
- type: "platform"
|
|
258
|
+
platform: "streamhaus"
|
|
259
|
+
account: "agency-ctv-seat-456"
|
|
260
|
+
agents:
|
|
261
|
+
- type: "agent"
|
|
262
|
+
agent_url: "https://wonderstruck.salesagents.example"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Osei Natural — Beauty Advertiser Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Entity definition: fictional-entities.yaml → advertisers[osei_natural]
|
|
4
|
+
#
|
|
5
|
+
# 8-person natural skincare company based in Nairobi. Represents the small
|
|
6
|
+
# business that advertising should serve but currently doesn't.
|
|
7
|
+
#
|
|
8
|
+
# This brand is registered as a sandbox brand in AgenticAdvertising.org (AAO).
|
|
9
|
+
# Agents resolve oseinatural.example via the standard AAO brand resolution path.
|
|
10
|
+
# AAO returns the brand.json below but excludes sandbox brands from production
|
|
11
|
+
# brand discovery results.
|
|
12
|
+
|
|
13
|
+
id: osei_natural
|
|
14
|
+
name: "Osei Natural"
|
|
15
|
+
description: "Natural skincare brand for small-business advertiser storyboard testing"
|
|
16
|
+
sandbox: true
|
|
17
|
+
|
|
18
|
+
# security_baseline auth fixture — see acme-outdoor.yaml for semantics.
|
|
19
|
+
auth:
|
|
20
|
+
api_key: "demo-osei-natural-v1"
|
|
21
|
+
probe_task: list_creatives
|
|
22
|
+
|
|
23
|
+
brand:
|
|
24
|
+
house:
|
|
25
|
+
domain: "oseinatural.example"
|
|
26
|
+
name: "Osei Natural"
|
|
27
|
+
brand_id: "osei_natural"
|
|
28
|
+
names:
|
|
29
|
+
- en: "Osei Natural"
|
|
30
|
+
description: "Natural skincare rooted in East African botanicals. Small-batch, founder-led, and unapologetically simple."
|
|
31
|
+
industry: "beauty"
|
|
32
|
+
keller_type: "master"
|
|
33
|
+
logos:
|
|
34
|
+
- url: "https://test-assets.adcontextprotocol.org/osei-natural/logo-primary.png"
|
|
35
|
+
orientation: "horizontal"
|
|
36
|
+
background: "light-bg"
|
|
37
|
+
variant: "primary"
|
|
38
|
+
width: 400
|
|
39
|
+
height: 100
|
|
40
|
+
- url: "https://test-assets.adcontextprotocol.org/osei-natural/logo-icon.png"
|
|
41
|
+
orientation: "square"
|
|
42
|
+
background: "transparent-bg"
|
|
43
|
+
variant: "icon"
|
|
44
|
+
width: 200
|
|
45
|
+
height: 200
|
|
46
|
+
colors:
|
|
47
|
+
primary: "#5D4037"
|
|
48
|
+
secondary: "#C8E6C9"
|
|
49
|
+
accent: "#FF8F00"
|
|
50
|
+
background: "#FBF7F4"
|
|
51
|
+
text: "#2E2E2E"
|
|
52
|
+
fonts:
|
|
53
|
+
heading:
|
|
54
|
+
family: "Cormorant Garamond"
|
|
55
|
+
weight: 600
|
|
56
|
+
url: "https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@600"
|
|
57
|
+
body:
|
|
58
|
+
family: "Lato"
|
|
59
|
+
weight: 400
|
|
60
|
+
url: "https://fonts.googleapis.com/css2?family=Lato"
|
|
61
|
+
tone:
|
|
62
|
+
voice: "Calm, grounded, and personal. Amara speaks directly to customers like a trusted friend sharing what works."
|
|
63
|
+
attributes:
|
|
64
|
+
- "authentic"
|
|
65
|
+
- "gentle"
|
|
66
|
+
- "personal"
|
|
67
|
+
dos:
|
|
68
|
+
- "Name specific botanicals and their origins"
|
|
69
|
+
- "Use first-person when appropriate — the founder is the brand"
|
|
70
|
+
- "Keep it warm and conversational"
|
|
71
|
+
donts:
|
|
72
|
+
- "Use clinical or pharmaceutical language"
|
|
73
|
+
- "Make anti-aging claims — Osei Natural is about care, not correction"
|
|
74
|
+
- "Erase the brand's Kenyan identity — it's a feature, not a detail"
|
|
75
|
+
|
|
76
|
+
assets:
|
|
77
|
+
images:
|
|
78
|
+
- id: "hero_300x250"
|
|
79
|
+
url: "https://test-assets.adcontextprotocol.org/osei-natural/hero-300x250.jpg"
|
|
80
|
+
width: 300
|
|
81
|
+
height: 250
|
|
82
|
+
mime_type: "image/jpeg"
|
|
83
|
+
description: "Medium rectangle hero — product jars with botanical ingredients"
|
|
84
|
+
|
|
85
|
+
- id: "hero_728x90"
|
|
86
|
+
url: "https://test-assets.adcontextprotocol.org/osei-natural/hero-728x90.jpg"
|
|
87
|
+
width: 728
|
|
88
|
+
height: 90
|
|
89
|
+
mime_type: "image/jpeg"
|
|
90
|
+
description: "Leaderboard hero — Amara in workshop with shea butter"
|
|
91
|
+
|
|
92
|
+
- id: "hero_320x50"
|
|
93
|
+
url: "https://test-assets.adcontextprotocol.org/osei-natural/hero-320x50.jpg"
|
|
94
|
+
width: 320
|
|
95
|
+
height: 50
|
|
96
|
+
mime_type: "image/jpeg"
|
|
97
|
+
description: "Mobile banner hero — close-up of baobab oil serum"
|
|
98
|
+
|
|
99
|
+
- id: "hero_160x600"
|
|
100
|
+
url: "https://test-assets.adcontextprotocol.org/osei-natural/hero-160x600.jpg"
|
|
101
|
+
width: 160
|
|
102
|
+
height: 600
|
|
103
|
+
mime_type: "image/jpeg"
|
|
104
|
+
description: "Wide skyscraper hero — vertical product lineup on linen"
|
|
105
|
+
|
|
106
|
+
- id: "hero_master"
|
|
107
|
+
url: "https://test-assets.adcontextprotocol.org/osei-natural/hero-master.jpg"
|
|
108
|
+
width: 1200
|
|
109
|
+
height: 628
|
|
110
|
+
mime_type: "image/jpeg"
|
|
111
|
+
description: "Master hero image — high-res flat lay of full product range"
|
|
112
|
+
|
|
113
|
+
text:
|
|
114
|
+
headlines:
|
|
115
|
+
- "Your Skin Deserves Better Ingredients"
|
|
116
|
+
- "Small-Batch Skincare from Nairobi"
|
|
117
|
+
- "Rooted in East African Botanicals"
|
|
118
|
+
descriptions:
|
|
119
|
+
- "Shea butter, baobab oil, and aloe — sourced from East African growers, blended by hand in Nairobi. Osei Natural."
|
|
120
|
+
- "Eight people, twelve products, zero compromises. Natural skincare that actually works."
|
|
121
|
+
cta:
|
|
122
|
+
- "Shop the Collection"
|
|
123
|
+
- "Meet the Founder"
|
|
124
|
+
- "Try a Sample Kit"
|
|
125
|
+
|
|
126
|
+
click_url: "https://oseinatural.example/shop"
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Signed-Requests Runner — Harness Contract Test Kit
|
|
2
|
+
#
|
|
3
|
+
# Applies to: universal/signed-requests.yaml (gated on
|
|
4
|
+
# `request_signing.supported: true` in get_adcp_capabilities).
|
|
5
|
+
#
|
|
6
|
+
# The signed-requests storyboard grades an agent's RFC 9421 verifier against 28
|
|
7
|
+
# conformance vectors at /compliance/{version}/test-vectors/request-signing/.
|
|
8
|
+
# Most vectors are pure black-box: the runner constructs a signed HTTP request,
|
|
9
|
+
# sends it, and checks the response. Three negative vectors assert behavior that
|
|
10
|
+
# depends on verifier state the runner cannot set from the outside:
|
|
11
|
+
#
|
|
12
|
+
# 016-replayed-nonce — replay cache must already contain (keyid, nonce)
|
|
13
|
+
# 017-key-revoked — keyid must already be in the revocation list
|
|
14
|
+
# 020-rate-abuse — per-keyid replay cache must be at its configured cap
|
|
15
|
+
#
|
|
16
|
+
# This test-kit defines the coordination contract between a black-box runner and
|
|
17
|
+
# a request-signing agent under test. Agents advertising
|
|
18
|
+
# `request_signing.supported: true` MUST pre-configure their verifier per this
|
|
19
|
+
# contract before the negative phase runs. The runner reads this file to know
|
|
20
|
+
# (a) the keyids it will sign with, (b) how to provoke each stateful negative
|
|
21
|
+
# vector, and (c) the grading-time cap values it will target (which are NOT
|
|
22
|
+
# production recommendations — see each field). See `scope` below for what the
|
|
23
|
+
# contract does NOT specify.
|
|
24
|
+
|
|
25
|
+
id: signed_requests_runner
|
|
26
|
+
applies_to:
|
|
27
|
+
universal_storyboard: signed-requests
|
|
28
|
+
|
|
29
|
+
description: |
|
|
30
|
+
Coordination contract between a black-box runner and a request-signing agent
|
|
31
|
+
under test. The runner signs vectors dynamically using the keypairs published
|
|
32
|
+
in keys.json. The agent pre-configures its verifier — accepted JWKS, pre-revoked
|
|
33
|
+
keyid, replay TTL, per-keyid cap — so that the three stateful negative vectors
|
|
34
|
+
produce their expected error codes without the runner injecting verifier state.
|
|
35
|
+
|
|
36
|
+
Vectors requiring coordination declare `requires_contract` in their fixture;
|
|
37
|
+
the runner gates those vectors on this contract being in scope.
|
|
38
|
+
|
|
39
|
+
endpoint_scope: sandbox
|
|
40
|
+
# The replay-window contract sends a live, validly-signed mutating request as
|
|
41
|
+
# its first step (the second copy is what the grader expects to be rejected).
|
|
42
|
+
# Running this against a production endpoint would create a real media buy.
|
|
43
|
+
# Graders MUST target a sandbox/staging endpoint or an idempotency-keyed
|
|
44
|
+
# sacrificial path the agent discards post-grading. Agents advertising
|
|
45
|
+
# `request_signing.supported: true` SHOULD expose a dedicated grading endpoint
|
|
46
|
+
# rather than grading in prod.
|
|
47
|
+
|
|
48
|
+
harness_mode: black_box
|
|
49
|
+
# Agents participating in a white-box test harness (e.g., SDK internal tests
|
|
50
|
+
# against the reference verifier) MAY satisfy the stateful vectors via direct
|
|
51
|
+
# state injection using the vector's `test_harness_state` block, and declare
|
|
52
|
+
# `harness_mode: white_box` in their own runner configuration. AdCP Verified
|
|
53
|
+
# grading runs in black_box mode only.
|
|
54
|
+
|
|
55
|
+
runner_signing_keys:
|
|
56
|
+
# Runner signs every non-negative-key vector with one of these keypairs. The
|
|
57
|
+
# agent's verifier MUST treat these keyids as a registered test counterparty
|
|
58
|
+
# whose JWKS contains the corresponding public keys with
|
|
59
|
+
# adcp_use: "request-signing". Private keys for signing live in keys.json
|
|
60
|
+
# under `_private_d_for_test_only`.
|
|
61
|
+
- keyid: test-ed25519-2026
|
|
62
|
+
alg: ed25519
|
|
63
|
+
jwks_source: /compliance/{version}/test-vectors/request-signing/keys.json
|
|
64
|
+
- keyid: test-es256-2026
|
|
65
|
+
alg: ecdsa-p256-sha256
|
|
66
|
+
jwks_source: /compliance/{version}/test-vectors/request-signing/keys.json
|
|
67
|
+
|
|
68
|
+
stateful_vector_contract:
|
|
69
|
+
replay_window:
|
|
70
|
+
# Vector 016-replayed-nonce.
|
|
71
|
+
#
|
|
72
|
+
# The runner provokes the replay rejection by sending the same signed
|
|
73
|
+
# request twice in sequence. The agent MUST accept the first submission
|
|
74
|
+
# (standard positive path) and reject the second with
|
|
75
|
+
# request_signature_replayed at checklist step 12.
|
|
76
|
+
#
|
|
77
|
+
# The agent's replay-cache TTL for this test counterparty MUST be at least
|
|
78
|
+
# `min_replay_ttl_seconds`, which is strictly greater than
|
|
79
|
+
# `max_interval_seconds` to absorb clock skew between runner and agent and
|
|
80
|
+
# scheduler jitter on either side. Otherwise the cache entry for the first
|
|
81
|
+
# request may evict before the second arrives and the vector will pass
|
|
82
|
+
# spuriously (i.e., both requests accepted = no replay rejection). The
|
|
83
|
+
# runner's own interval between the two submissions MUST NOT exceed
|
|
84
|
+
# `max_interval_seconds`.
|
|
85
|
+
#
|
|
86
|
+
# This supersedes vector 016's `test_harness_state.replay_cache_entries`
|
|
87
|
+
# for black-box mode. In white-box mode, the harness MAY inject the cache
|
|
88
|
+
# entry directly and skip the first request.
|
|
89
|
+
vector_id: 016-replayed-nonce
|
|
90
|
+
black_box_behavior: repeat_request
|
|
91
|
+
max_interval_seconds: 5
|
|
92
|
+
min_replay_ttl_seconds: 10
|
|
93
|
+
|
|
94
|
+
revocation:
|
|
95
|
+
# Vector 017-key-revoked.
|
|
96
|
+
#
|
|
97
|
+
# The runner cannot revoke a key on the agent's side. The agent MUST
|
|
98
|
+
# pre-configure its revocation list with `test-revoked-2026` before the
|
|
99
|
+
# negative phase runs. The runner signs vector 017 with this keyid and
|
|
100
|
+
# expects request_signature_key_revoked at checklist step 9.
|
|
101
|
+
#
|
|
102
|
+
# A dedicated revoked keypair (rather than reusing a runner signing key)
|
|
103
|
+
# keeps positive vectors and vector 017 independent: the positive phase
|
|
104
|
+
# remains runnable after vector 017 is graded.
|
|
105
|
+
vector_id: 017-key-revoked
|
|
106
|
+
pre_revoked_keyid: test-revoked-2026
|
|
107
|
+
|
|
108
|
+
rate_abuse:
|
|
109
|
+
# Vector 020-rate-abuse (checklist step 9a).
|
|
110
|
+
#
|
|
111
|
+
# The runner sends N+1 distinct-nonce requests signed by the same keyid
|
|
112
|
+
# within the window. The agent MUST reject the (N+1)th with
|
|
113
|
+
# request_signature_rate_abuse once the per-keyid cap is hit.
|
|
114
|
+
#
|
|
115
|
+
# `grading_target_per_keyid_cap_requests` is the cap the runner will
|
|
116
|
+
# target during grading — NOT a production recommendation. Agents MAY
|
|
117
|
+
# configure a lower cap for the test-kit counterparty only so grading
|
|
118
|
+
# finishes in a reasonable time. Production caps MUST follow the spec
|
|
119
|
+
# recommendation at docs/building/implementation/security.mdx
|
|
120
|
+
# §per-keyid cap (at least 1,000,000 entries per keyid). Implementers
|
|
121
|
+
# copying a value from this file into production code SHOULD use
|
|
122
|
+
# `production_min_per_keyid_cap_requests` below as the floor, not
|
|
123
|
+
# `grading_target_per_keyid_cap_requests`.
|
|
124
|
+
vector_id: 020-rate-abuse
|
|
125
|
+
grading_target_per_keyid_cap_requests: 100
|
|
126
|
+
production_min_per_keyid_cap_requests: 1000000
|
|
127
|
+
window_seconds: 60
|
|
128
|
+
|
|
129
|
+
scope:
|
|
130
|
+
in_scope: |
|
|
131
|
+
- Keyids the runner will sign with and their JWKS source.
|
|
132
|
+
- Agent-side preconditions for each stateful negative vector.
|
|
133
|
+
- Grading-time cap the runner will target for rate-abuse grading (NOT a
|
|
134
|
+
production recommendation; see rate_abuse block).
|
|
135
|
+
- Minimum replay-cache TTL so the replay-window contract is reliable.
|
|
136
|
+
- Black-box vs. white-box harness mode selection.
|
|
137
|
+
- Endpoint scope (sandbox only — see endpoint_scope).
|
|
138
|
+
out_of_scope: |
|
|
139
|
+
- Specific error-code strings — those live in each vector's
|
|
140
|
+
expected_outcome.error_code and are graded byte-for-byte.
|
|
141
|
+
- Checklist step numbers — informational only; grading is on the error
|
|
142
|
+
code, not the step.
|
|
143
|
+
- Pre-signed Signature bytes in the vectors — unchanged by this contract.
|
|
144
|
+
Black-box runners re-sign dynamically; pre-signed bytes remain valid
|
|
145
|
+
for white-box cross-SDK byte-equivalence checks.
|
|
146
|
+
- The agent's internal replay TTL or cap storage mechanism — the contract
|
|
147
|
+
specifies observable behavior, not implementation.
|
|
148
|
+
- Production verifier configuration — this contract configures a test
|
|
149
|
+
counterparty only.
|
|
150
|
+
|
|
151
|
+
references:
|
|
152
|
+
universal_storyboard: static/compliance/source/universal/signed-requests.yaml
|
|
153
|
+
test_vectors: /compliance/{version}/test-vectors/request-signing/
|
|
154
|
+
verifier_checklist: /docs/building/implementation/security.mdx#verifier-checklist-requests
|
|
155
|
+
runner_implementation: https://github.com/adcontextprotocol/adcp-client/issues/585
|