@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.
Files changed (261) hide show
  1. package/bin/adcp.js +285 -5
  2. package/compliance/cache/3.0.6.previous/domains/brand/index.yaml +163 -0
  3. package/compliance/cache/3.0.6.previous/domains/creative/index.yaml +412 -0
  4. package/compliance/cache/3.0.6.previous/domains/governance/index.yaml +683 -0
  5. package/compliance/cache/3.0.6.previous/domains/media-buy/creative-reception.yaml +247 -0
  6. package/compliance/cache/3.0.6.previous/domains/media-buy/index.yaml +769 -0
  7. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/create_media_buy_async.yaml +232 -0
  8. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
  9. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/delivery_reporting.yaml +205 -0
  10. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_approved.yaml +211 -0
  11. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_conditions.yaml +196 -0
  12. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied.yaml +192 -0
  13. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
  14. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/invalid_transitions.yaml +284 -0
  15. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
  16. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
  17. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
  18. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
  19. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/proposal_finalize.yaml +243 -0
  20. package/compliance/cache/3.0.6.previous/domains/media-buy/scenarios/refine_products.yaml +148 -0
  21. package/compliance/cache/3.0.6.previous/domains/media-buy/state-machine.yaml +442 -0
  22. package/compliance/cache/3.0.6.previous/domains/signals/index.yaml +266 -0
  23. package/compliance/cache/3.0.6.previous/domains/sponsored-intelligence/index.yaml +256 -0
  24. package/compliance/cache/3.0.6.previous/index.json +324 -0
  25. package/compliance/cache/3.0.6.previous/protocols/brand/index.yaml +163 -0
  26. package/compliance/cache/3.0.6.previous/protocols/creative/index.yaml +412 -0
  27. package/compliance/cache/3.0.6.previous/protocols/governance/index.yaml +683 -0
  28. package/compliance/cache/3.0.6.previous/protocols/media-buy/creative-reception.yaml +247 -0
  29. package/compliance/cache/3.0.6.previous/protocols/media-buy/index.yaml +769 -0
  30. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/create_media_buy_async.yaml +232 -0
  31. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +414 -0
  32. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/delivery_reporting.yaml +205 -0
  33. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_approved.yaml +211 -0
  34. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_conditions.yaml +196 -0
  35. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied.yaml +192 -0
  36. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/governance_denied_recovery.yaml +244 -0
  37. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/invalid_transitions.yaml +284 -0
  38. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_no_match.yaml +143 -0
  39. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/inventory_list_targeting.yaml +271 -0
  40. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +195 -0
  41. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +250 -0
  42. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/proposal_finalize.yaml +243 -0
  43. package/compliance/cache/3.0.6.previous/protocols/media-buy/scenarios/refine_products.yaml +148 -0
  44. package/compliance/cache/3.0.6.previous/protocols/media-buy/state-machine.yaml +442 -0
  45. package/compliance/cache/3.0.6.previous/protocols/signals/index.yaml +266 -0
  46. package/compliance/cache/3.0.6.previous/protocols/sponsored-intelligence/index.yaml +256 -0
  47. package/compliance/cache/3.0.6.previous/specialisms/audience-sync/index.yaml +280 -0
  48. package/compliance/cache/3.0.6.previous/specialisms/brand-rights/index.yaml +350 -0
  49. package/compliance/cache/3.0.6.previous/specialisms/brand-rights/scenarios/governance_denied.yaml +204 -0
  50. package/compliance/cache/3.0.6.previous/specialisms/collection-lists/index.yaml +359 -0
  51. package/compliance/cache/3.0.6.previous/specialisms/content-standards/index.yaml +572 -0
  52. package/compliance/cache/3.0.6.previous/specialisms/creative-ad-server/index.yaml +383 -0
  53. package/compliance/cache/3.0.6.previous/specialisms/creative-generative/generative-seller.yaml +758 -0
  54. package/compliance/cache/3.0.6.previous/specialisms/creative-generative/index.yaml +746 -0
  55. package/compliance/cache/3.0.6.previous/specialisms/creative-template/index.yaml +413 -0
  56. package/compliance/cache/3.0.6.previous/specialisms/governance-aware-seller/index.yaml +136 -0
  57. package/compliance/cache/3.0.6.previous/specialisms/governance-delivery-monitor/index.yaml +441 -0
  58. package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/denied.yaml +221 -0
  59. package/compliance/cache/3.0.6.previous/specialisms/governance-spend-authority/index.yaml +330 -0
  60. package/compliance/cache/3.0.6.previous/specialisms/property-lists/index.yaml +482 -0
  61. package/compliance/cache/3.0.6.previous/specialisms/sales-broadcast-tv/index.yaml +689 -0
  62. package/compliance/cache/3.0.6.previous/specialisms/sales-catalog-driven/index.yaml +779 -0
  63. package/compliance/cache/3.0.6.previous/specialisms/sales-guaranteed/index.yaml +504 -0
  64. package/compliance/cache/3.0.6.previous/specialisms/sales-non-guaranteed/index.yaml +428 -0
  65. package/compliance/cache/3.0.6.previous/specialisms/sales-proposal-mode/index.yaml +520 -0
  66. package/compliance/cache/3.0.6.previous/specialisms/sales-social/index.yaml +584 -0
  67. package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/index.yaml +415 -0
  68. package/compliance/cache/3.0.6.previous/specialisms/signal-marketplace/scenarios/governance_denied.yaml +207 -0
  69. package/compliance/cache/3.0.6.previous/specialisms/signal-owned/index.yaml +316 -0
  70. package/compliance/cache/3.0.6.previous/test-kits/acme-outdoor.yaml +210 -0
  71. package/compliance/cache/3.0.6.previous/test-kits/bistro-oranje.yaml +126 -0
  72. package/compliance/cache/3.0.6.previous/test-kits/nova-motors.yaml +262 -0
  73. package/compliance/cache/3.0.6.previous/test-kits/osei-natural.yaml +126 -0
  74. package/compliance/cache/3.0.6.previous/test-kits/signed-requests-runner.yaml +155 -0
  75. package/compliance/cache/3.0.6.previous/test-kits/substitution-observer-runner.yaml +690 -0
  76. package/compliance/cache/3.0.6.previous/test-kits/summit-foods.yaml +125 -0
  77. package/compliance/cache/3.0.6.previous/test-kits/webhook-receiver-runner.yaml +265 -0
  78. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/001-minimal-plan.json +43 -0
  79. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/002-full-plan.json +217 -0
  80. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/003-bookkeeping-stripped.json +60 -0
  81. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004a-human-review-omitted.json +43 -0
  82. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/004b-human-review-explicit-null.json +49 -0
  83. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005a-policy-categories-order-1.json +53 -0
  84. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/005b-policy-categories-order-2.json +57 -0
  85. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006a-ext-trace-v1.json +49 -0
  86. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/006b-ext-trace-v2.json +53 -0
  87. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/007-unicode-objectives.json +43 -0
  88. package/compliance/cache/3.0.6.previous/test-vectors/plan-hash/008-numeric-canonicalization.json +65 -0
  89. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/README.md +219 -0
  90. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/canonicalization.json +241 -0
  91. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/keys.json +60 -0
  92. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/001-no-signature-header.json +24 -0
  93. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/002-wrong-tag.json +26 -0
  94. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/003-expired-signature.json +26 -0
  95. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/004-window-too-long.json +26 -0
  96. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/005-alg-not-allowed.json +26 -0
  97. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/006-missing-covered-component.json +26 -0
  98. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/007-missing-content-digest.json +26 -0
  99. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/008-unknown-keyid.json +26 -0
  100. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +27 -0
  101. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/010-content-digest-mismatch.json +33 -0
  102. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/011-malformed-header.json +27 -0
  103. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/012-missing-expires-param.json +26 -0
  104. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/013-expires-le-created.json +27 -0
  105. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/014-missing-nonce-param.json +27 -0
  106. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/015-signature-invalid.json +28 -0
  107. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/016-replayed-nonce.json +35 -0
  108. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/017-key-revoked.json +38 -0
  109. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +28 -0
  110. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/019-signature-without-signature-input.json +26 -0
  111. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/020-rate-abuse.json +34 -0
  112. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +31 -0
  113. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/022-multi-valued-content-type.json +31 -0
  114. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +32 -0
  115. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/024-unquoted-string-param.json +31 -0
  116. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +43 -0
  117. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/026-non-ascii-host.json +31 -0
  118. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +25 -0
  119. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/001-basic-post.json +30 -0
  120. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/002-post-with-content-digest.json +31 -0
  121. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/003-es256-post.json +30 -0
  122. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/004-multiple-signature-labels.json +26 -0
  123. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/005-default-port-stripped.json +30 -0
  124. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/006-dot-segment-path.json +30 -0
  125. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/007-query-byte-preserved.json +30 -0
  126. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/008-percent-encoded-path.json +30 -0
  127. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +30 -0
  128. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +30 -0
  129. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/011-ipv6-authority.json +30 -0
  130. package/compliance/cache/3.0.6.previous/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +30 -0
  131. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/README.md +211 -0
  132. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/keys.json +61 -0
  133. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/001-wrong-tag.json +26 -0
  134. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/002-expired-signature.json +26 -0
  135. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/003-window-too-long.json +26 -0
  136. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +26 -0
  137. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/005-missing-authority-component.json +26 -0
  138. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/006-missing-content-digest.json +25 -0
  139. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/007-unknown-keyid.json +26 -0
  140. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +26 -0
  141. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +26 -0
  142. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +26 -0
  143. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/011-signature-without-input.json +25 -0
  144. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/012-missing-expires-param.json +26 -0
  145. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/013-expires-le-created.json +26 -0
  146. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +26 -0
  147. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/015-signature-invalid.json +26 -0
  148. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/016-replayed-nonce.json +37 -0
  149. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/017-key-revoked.json +32 -0
  150. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/018-rate-abuse.json +33 -0
  151. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/019-revocation-stale.json +32 -0
  152. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +41 -0
  153. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +26 -0
  154. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/001-basic-post.json +24 -0
  155. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/002-es256-post.json +24 -0
  156. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +24 -0
  157. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/004-default-port-stripped.json +24 -0
  158. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +24 -0
  159. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +24 -0
  160. package/compliance/cache/3.0.6.previous/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +25 -0
  161. package/compliance/cache/3.0.6.previous/universal/capability-discovery.yaml +125 -0
  162. package/compliance/cache/3.0.6.previous/universal/collection-lists-pagination-integrity.yaml +306 -0
  163. package/compliance/cache/3.0.6.previous/universal/content-standards-pagination-integrity.yaml +326 -0
  164. package/compliance/cache/3.0.6.previous/universal/deterministic-testing.yaml +1343 -0
  165. package/compliance/cache/3.0.6.previous/universal/error-compliance.yaml +474 -0
  166. package/compliance/cache/3.0.6.previous/universal/fictional-entities.yaml +307 -0
  167. package/compliance/cache/3.0.6.previous/universal/get-media-buys-pagination-integrity.yaml +160 -0
  168. package/compliance/cache/3.0.6.previous/universal/get-signals-pagination-integrity.yaml +211 -0
  169. package/compliance/cache/3.0.6.previous/universal/idempotency.yaml +593 -0
  170. package/compliance/cache/3.0.6.previous/universal/pagination-integrity-creative-formats.yaml +258 -0
  171. package/compliance/cache/3.0.6.previous/universal/pagination-integrity-list-accounts.yaml +262 -0
  172. package/compliance/cache/3.0.6.previous/universal/pagination-integrity.yaml +263 -0
  173. package/compliance/cache/3.0.6.previous/universal/property-lists-pagination-integrity.yaml +307 -0
  174. package/compliance/cache/3.0.6.previous/universal/runner-output-contract.yaml +358 -0
  175. package/compliance/cache/3.0.6.previous/universal/schema-validation.yaml +526 -0
  176. package/compliance/cache/3.0.6.previous/universal/security.yaml +431 -0
  177. package/compliance/cache/3.0.6.previous/universal/signed-requests.yaml +205 -0
  178. package/compliance/cache/3.0.6.previous/universal/storyboard-schema.yaml +1176 -0
  179. package/compliance/cache/3.0.6.previous/universal/v3-envelope-integrity.yaml +106 -0
  180. package/compliance/cache/3.0.6.previous/universal/webhook-emission.yaml +337 -0
  181. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  182. package/dist/lib/server/create-adcp-server.d.ts +33 -0
  183. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  184. package/dist/lib/server/create-adcp-server.js +127 -1
  185. package/dist/lib/server/create-adcp-server.js.map +1 -1
  186. package/dist/lib/server/credential-policy.d.ts +221 -0
  187. package/dist/lib/server/credential-policy.d.ts.map +1 -0
  188. package/dist/lib/server/credential-policy.js +260 -0
  189. package/dist/lib/server/credential-policy.js.map +1 -0
  190. package/dist/lib/server/decisioning/async-outcome.d.ts +17 -0
  191. package/dist/lib/server/decisioning/async-outcome.d.ts.map +1 -1
  192. package/dist/lib/server/decisioning/async-outcome.js +23 -18
  193. package/dist/lib/server/decisioning/async-outcome.js.map +1 -1
  194. package/dist/lib/server/decisioning/context.d.ts +8 -2
  195. package/dist/lib/server/decisioning/context.d.ts.map +1 -1
  196. package/dist/lib/server/decisioning/index.d.ts +1 -0
  197. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  198. package/dist/lib/server/decisioning/index.js.map +1 -1
  199. package/dist/lib/server/decisioning/runtime/from-platform.js +6 -4
  200. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  201. package/dist/lib/server/decisioning/runtime/postgres-task-registry.d.ts.map +1 -1
  202. package/dist/lib/server/decisioning/runtime/postgres-task-registry.js +5 -2
  203. package/dist/lib/server/decisioning/runtime/postgres-task-registry.js.map +1 -1
  204. package/dist/lib/server/decisioning/runtime/task-registry.d.ts +5 -0
  205. package/dist/lib/server/decisioning/runtime/task-registry.d.ts.map +1 -1
  206. package/dist/lib/server/decisioning/runtime/task-registry.js +4 -1
  207. package/dist/lib/server/decisioning/runtime/task-registry.js.map +1 -1
  208. package/dist/lib/server/decisioning/runtime/to-context.d.ts.map +1 -1
  209. package/dist/lib/server/decisioning/runtime/to-context.js +10 -2
  210. package/dist/lib/server/decisioning/runtime/to-context.js.map +1 -1
  211. package/dist/lib/server/dynamic-registry.d.ts +219 -0
  212. package/dist/lib/server/dynamic-registry.d.ts.map +1 -0
  213. package/dist/lib/server/dynamic-registry.js +245 -0
  214. package/dist/lib/server/dynamic-registry.js.map +1 -0
  215. package/dist/lib/server/index.d.ts +8 -0
  216. package/dist/lib/server/index.d.ts.map +1 -1
  217. package/dist/lib/server/index.js +15 -4
  218. package/dist/lib/server/index.js.map +1 -1
  219. package/dist/lib/server/operational-platform.d.ts +239 -0
  220. package/dist/lib/server/operational-platform.d.ts.map +1 -0
  221. package/dist/lib/server/operational-platform.js +94 -0
  222. package/dist/lib/server/operational-platform.js.map +1 -0
  223. package/dist/lib/server/test-controller.d.ts +2 -0
  224. package/dist/lib/server/test-controller.d.ts.map +1 -1
  225. package/dist/lib/server/test-controller.js +6 -11
  226. package/dist/lib/server/test-controller.js.map +1 -1
  227. package/dist/lib/server/wire-safe.d.ts +211 -0
  228. package/dist/lib/server/wire-safe.d.ts.map +1 -0
  229. package/dist/lib/server/wire-safe.js +231 -0
  230. package/dist/lib/server/wire-safe.js.map +1 -0
  231. package/dist/lib/server/wire-spec-fields.generated.d.ts +168 -0
  232. package/dist/lib/server/wire-spec-fields.generated.d.ts.map +1 -0
  233. package/dist/lib/server/wire-spec-fields.generated.js +172 -0
  234. package/dist/lib/server/wire-spec-fields.generated.js.map +1 -0
  235. package/dist/lib/testing/compliance/index.d.ts +2 -0
  236. package/dist/lib/testing/compliance/index.d.ts.map +1 -1
  237. package/dist/lib/testing/compliance/index.js +6 -1
  238. package/dist/lib/testing/compliance/index.js.map +1 -1
  239. package/dist/lib/testing/compliance/summary.d.ts +77 -0
  240. package/dist/lib/testing/compliance/summary.d.ts.map +1 -0
  241. package/dist/lib/testing/compliance/summary.js +176 -0
  242. package/dist/lib/testing/compliance/summary.js.map +1 -0
  243. package/dist/lib/testing/comply-controller.d.ts +2 -0
  244. package/dist/lib/testing/comply-controller.d.ts.map +1 -1
  245. package/dist/lib/testing/comply-controller.js.map +1 -1
  246. package/dist/lib/testing/storyboard/compliance.d.ts +26 -0
  247. package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
  248. package/dist/lib/testing/storyboard/compliance.js +51 -0
  249. package/dist/lib/testing/storyboard/compliance.js.map +1 -1
  250. package/dist/lib/testing/storyboard/index.d.ts +2 -2
  251. package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
  252. package/dist/lib/testing/storyboard/index.js +4 -2
  253. package/dist/lib/testing/storyboard/index.js.map +1 -1
  254. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  255. package/dist/lib/testing/storyboard/runner.js +58 -5
  256. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  257. package/dist/lib/version.d.ts +3 -3
  258. package/dist/lib/version.d.ts.map +1 -1
  259. package/dist/lib/version.js +3 -3
  260. package/dist/lib/version.js.map +1 -1
  261. package/package.json +2 -2
@@ -0,0 +1,205 @@
1
+ id: media_buy_seller/delivery_reporting
2
+ version: "1.0.0"
3
+ title: "Seller returns valid delivery reporting"
4
+ category: media_buy_seller
5
+ summary: "Verifies that get_media_buy_delivery returns schema-compliant delivery data after simulated delivery via the test controller."
6
+ track: reporting
7
+ required_tools:
8
+ - get_products
9
+ - create_media_buy
10
+ - get_media_buy_delivery
11
+ - comply_test_controller
12
+
13
+ narrative: |
14
+ Delivery reporting is how buyers know if their campaign is working. The seller must
15
+ return schema-compliant delivery data from get_media_buy_delivery with per-package
16
+ metrics (impressions, spend, pacing).
17
+
18
+ This scenario creates a media buy, injects delivery data via the test controller's
19
+ simulate_delivery scenario, then calls get_media_buy_delivery and validates the
20
+ response against the schema. Without this test, sellers can return arbitrary formats
21
+ and still pass certification.
22
+
23
+ agent:
24
+ interaction_model: media_buy_seller
25
+ capabilities:
26
+ - sells_media
27
+ examples:
28
+ - "Any media buy seller"
29
+
30
+ caller:
31
+ role: buyer_agent
32
+ example: "Pinnacle Agency (buyer)"
33
+
34
+ prerequisites:
35
+ description: |
36
+ The seller must implement comply_test_controller with the simulate_delivery
37
+ scenario. This allows the test harness to inject delivery metrics into a
38
+ media buy so get_media_buy_delivery has data to return.
39
+ test_kit: "test-kits/acme-outdoor.yaml"
40
+ controller_seeding: true
41
+
42
+ fixtures:
43
+ products:
44
+ - product_id: "outdoor_display_q2"
45
+ delivery_type: "guaranteed"
46
+ channels: ["display"]
47
+ format_ids:
48
+ - id: "display_300x250"
49
+ - product_id: "outdoor_video_q2"
50
+ delivery_type: "guaranteed"
51
+ channels: ["video"]
52
+ format_ids:
53
+ - id: "video_15s"
54
+ pricing_options:
55
+ - product_id: "outdoor_display_q2"
56
+ pricing_option_id: "cpm_standard"
57
+ pricing_model: "cpm"
58
+ currency: "USD"
59
+ fixed_price: 8.0
60
+ - product_id: "outdoor_video_q2"
61
+ pricing_option_id: "cpm_standard"
62
+ pricing_model: "cpm"
63
+ currency: "USD"
64
+ fixed_price: 12.0
65
+
66
+ phases:
67
+ - id: setup
68
+ title: "Create a media buy for delivery testing"
69
+ steps:
70
+ - id: sync_accounts
71
+ title: "Establish account"
72
+ task: sync_accounts
73
+ schema_ref: "account/sync-accounts-request.json"
74
+ response_schema_ref: "account/sync-accounts-response.json"
75
+ doc_ref: "/accounts/tasks/sync_accounts"
76
+ stateful: true
77
+ expected: |
78
+ Return the account with account_id and status active.
79
+ sample_request:
80
+ accounts:
81
+ - brand:
82
+ domain: "acmeoutdoor.example"
83
+ operator: "pinnacle-agency.example"
84
+ billing: "operator"
85
+ payment_terms: "net_30"
86
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_delivery_reporting_setup_sync_accounts"
87
+ validations:
88
+ - check: response_schema
89
+ description: "Response matches sync-accounts-response.json schema"
90
+ - check: field_present
91
+ path: "accounts[0].account_id"
92
+ description: "Account has a platform-assigned ID"
93
+
94
+ - id: get_products_brief
95
+ title: "Discover products"
96
+ task: get_products
97
+ schema_ref: "media-buy/get-products-request.json"
98
+ response_schema_ref: "media-buy/get-products-response.json"
99
+ doc_ref: "/media-buy/task-reference/get_products"
100
+ comply_scenario: full_sales_flow
101
+ stateful: false
102
+ expected: |
103
+ Return products matching the brief.
104
+ sample_request:
105
+ buying_mode: "brief"
106
+ brief: "Display and video inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
107
+ account:
108
+ brand:
109
+ domain: "acmeoutdoor.example"
110
+ operator: "pinnacle-agency.example"
111
+ validations:
112
+ - check: response_schema
113
+ description: "Response matches get-products-response.json schema"
114
+ - check: field_present
115
+ path: "products"
116
+ description: "Response contains products"
117
+
118
+ - id: create_media_buy
119
+ title: "Create media buy"
120
+ task: create_media_buy
121
+ schema_ref: "media-buy/create-media-buy-request.json"
122
+ response_schema_ref: "media-buy/create-media-buy-response.json"
123
+ doc_ref: "/media-buy/task-reference/create_media_buy"
124
+ comply_scenario: create_media_buy
125
+ stateful: true
126
+ expected: |
127
+ Create the media buy. We need a media_buy_id to simulate delivery against.
128
+ sample_request:
129
+ brand:
130
+ domain: "acmeoutdoor.example"
131
+ account:
132
+ brand:
133
+ domain: "acmeoutdoor.example"
134
+ operator: "pinnacle-agency.example"
135
+ start_time: "2026-04-01T00:00:00Z"
136
+ end_time: "2026-06-30T23:59:59Z"
137
+ packages:
138
+ - product_id: "outdoor_display_q2"
139
+ budget: 15000
140
+ pricing_option_id: "cpm_standard"
141
+ - product_id: "outdoor_video_q2"
142
+ budget: 10000
143
+ pricing_option_id: "cpm_standard"
144
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_delivery_reporting_setup_create_media_buy"
145
+ validations:
146
+ - check: response_schema
147
+ description: "Response matches create-media-buy-response.json schema"
148
+
149
+ - id: simulate_and_verify
150
+ title: "Simulate delivery and validate reporting"
151
+ narrative: |
152
+ Inject delivery metrics via the test controller, then call get_media_buy_delivery
153
+ and validate the response format. This is the core test — does the seller return
154
+ schema-compliant delivery data with per-package metrics?
155
+
156
+ steps:
157
+ - id: simulate_delivery
158
+ title: "Inject simulated delivery metrics"
159
+ task: comply_test_controller
160
+ requires_tool: comply_test_controller
161
+ stateful: true
162
+ expected: |
163
+ The test controller acknowledges the simulated delivery data.
164
+ sample_request:
165
+ scenario: "simulate_delivery"
166
+ params:
167
+ media_buy_id: "$context.media_buy_id"
168
+ impressions: 5000
169
+ clicks: 150
170
+ reported_spend:
171
+ amount: 250.00
172
+ currency: "USD"
173
+ validations:
174
+ - check: field_value
175
+ path: "success"
176
+ allowed_values: [true]
177
+ description: "Delivery simulation succeeds"
178
+
179
+ - id: get_delivery
180
+ title: "Get delivery report and validate schema"
181
+ task: get_media_buy_delivery
182
+ schema_ref: "media-buy/get-media-buy-delivery-request.json"
183
+ response_schema_ref: "media-buy/get-media-buy-delivery-response.json"
184
+ doc_ref: "/media-buy/task-reference/get_media_buy_delivery"
185
+ comply_scenario: reporting_flow
186
+ stateful: true
187
+ expected: |
188
+ Return delivery metrics reflecting the simulated data:
189
+ - media_buy_deliveries array with at least one entry
190
+ - Per-package breakdown with impressions, spend
191
+ - Response matches the get-media-buy-delivery-response.json schema
192
+ sample_request:
193
+ account:
194
+ brand:
195
+ domain: "acmeoutdoor.example"
196
+ operator: "pinnacle-agency.example"
197
+ media_buy_ids:
198
+ - "$context.media_buy_id"
199
+ include_package_daily_breakdown: true
200
+ validations:
201
+ - check: response_schema
202
+ description: "Response matches get-media-buy-delivery-response.json schema"
203
+ - check: field_present
204
+ path: "media_buy_deliveries"
205
+ description: "Response contains delivery data"
@@ -0,0 +1,211 @@
1
+ id: media_buy_seller/governance_approved
2
+ version: "1.0.0"
3
+ title: "Seller creates buy when governance approves"
4
+ category: media_buy_seller
5
+ summary: "Verifies that the seller creates a media buy when governance approves the transaction."
6
+ track: media_buy
7
+ required_tools:
8
+ - sync_governance
9
+ - get_products
10
+ - create_media_buy
11
+
12
+ narrative: |
13
+ This is a multi-agent test. The test harness sets up a permissive governance plan on
14
+ a governance agent with a $100K budget, then registers that agent with the seller.
15
+ The buyer creates a $25K buy which falls within limits.
16
+
17
+ When the seller calls check_governance during create_media_buy, the governance agent
18
+ approves. The seller must confirm the buy normally.
19
+
20
+ By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
21
+ Override with --governance-agent-url to use a custom governance agent.
22
+
23
+ agent:
24
+ interaction_model: media_buy_seller
25
+ capabilities:
26
+ - sells_media
27
+ - governance_aware
28
+ examples:
29
+ - "Any media buy seller with governance support"
30
+
31
+ caller:
32
+ role: buyer_agent
33
+ example: "Pinnacle Agency (buyer)"
34
+
35
+ prerequisites:
36
+ description: |
37
+ A governance agent that supports sync_plans and check_governance.
38
+ test_kit: "test-kits/acme-outdoor.yaml"
39
+ controller_seeding: true
40
+
41
+ fixtures:
42
+ products:
43
+ - product_id: "outdoor_display_q2"
44
+ delivery_type: "guaranteed"
45
+ channels: ["display"]
46
+ format_ids:
47
+ - id: "display_300x250"
48
+ - product_id: "outdoor_video_q2"
49
+ delivery_type: "guaranteed"
50
+ channels: ["video"]
51
+ format_ids:
52
+ - id: "video_15s"
53
+ pricing_options:
54
+ - product_id: "outdoor_display_q2"
55
+ pricing_option_id: "cpm_standard"
56
+ pricing_model: "cpm"
57
+ currency: "USD"
58
+ fixed_price: 8.0
59
+ - product_id: "outdoor_video_q2"
60
+ pricing_option_id: "cpm_standard"
61
+ pricing_model: "cpm"
62
+ currency: "USD"
63
+ fixed_price: 12.0
64
+
65
+ phases:
66
+ - id: governance_plan_setup
67
+ title: "Set up permissive governance plan"
68
+ narrative: |
69
+ Create a governance plan on the governance agent with a high budget ($100K).
70
+ The subsequent $25K buy will fall within these limits and should be approved.
71
+
72
+ steps:
73
+ - id: sync_plans
74
+ title: "Create permissive governance plan"
75
+ task: sync_plans
76
+ schema_ref: "governance/sync-plans-request.json"
77
+ response_schema_ref: "governance/sync-plans-response.json"
78
+ doc_ref: "/governance/campaign/tasks/sync_plans"
79
+ stateful: true
80
+ expected: |
81
+ The governance agent acknowledges the plan with a plan_id.
82
+ sample_request:
83
+ idempotency_key: "comply-gov-approved-sync-plans-v1"
84
+ plans:
85
+ - plan_id: "comply-gov-approved-plan"
86
+ brand:
87
+ domain: "acmeoutdoor.example"
88
+ objectives: "Q2 outdoor lifestyle campaign — display and video"
89
+ budget:
90
+ total: 100000
91
+ currency: "USD"
92
+ reallocation_threshold: 100000
93
+ flight:
94
+ start: "2026-04-01T00:00:00Z"
95
+ end: "2026-06-30T23:59:59Z"
96
+ countries: ["US", "CA"]
97
+ validations:
98
+ - check: response_schema
99
+ description: "Response matches sync-plans-response.json schema"
100
+
101
+ - id: seller_setup
102
+ title: "Account and governance registration on seller"
103
+ steps:
104
+ - id: sync_accounts
105
+ title: "Establish account with seller"
106
+ task: sync_accounts
107
+ schema_ref: "account/sync-accounts-request.json"
108
+ response_schema_ref: "account/sync-accounts-response.json"
109
+ doc_ref: "/accounts/tasks/sync_accounts"
110
+ stateful: true
111
+ expected: |
112
+ Return the account with account_id and status active.
113
+ sample_request:
114
+ accounts:
115
+ - brand:
116
+ domain: "acmeoutdoor.example"
117
+ operator: "pinnacle-agency.example"
118
+ billing: "operator"
119
+ payment_terms: "net_30"
120
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_approved_seller_setup_sync_accounts"
121
+ validations:
122
+ - check: response_schema
123
+ description: "Response matches sync-accounts-response.json schema"
124
+ - check: field_present
125
+ path: "accounts[0].account_id"
126
+ description: "Account has a platform-assigned ID"
127
+
128
+ - id: sync_governance
129
+ title: "Register governance agent with seller"
130
+ task: sync_governance
131
+ schema_ref: "account/sync-governance-request.json"
132
+ response_schema_ref: "account/sync-governance-response.json"
133
+ doc_ref: "/accounts/tasks/sync_governance"
134
+ stateful: true
135
+ expected: |
136
+ Acknowledge the governance agent registration.
137
+ sample_request:
138
+ accounts:
139
+ - account:
140
+ brand:
141
+ domain: "acmeoutdoor.example"
142
+ operator: "pinnacle-agency.example"
143
+ governance_agents:
144
+ - url: "$context.governance_agent_url"
145
+ authentication:
146
+ schemes: ["Bearer"]
147
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
148
+ categories: ["budget_authority", "brand_policy"]
149
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_approved_seller_setup_sync_governance"
150
+ validations:
151
+ - check: response_schema
152
+ description: "Response matches sync-governance-response.json schema"
153
+
154
+ - id: buy_approved
155
+ title: "Create buy within governance limits"
156
+ steps:
157
+ - id: get_products_brief
158
+ title: "Discover products"
159
+ task: get_products
160
+ schema_ref: "media-buy/get-products-request.json"
161
+ response_schema_ref: "media-buy/get-products-response.json"
162
+ doc_ref: "/media-buy/task-reference/get_products"
163
+ comply_scenario: full_sales_flow
164
+ stateful: false
165
+ expected: |
166
+ Return products matching the brief.
167
+ sample_request:
168
+ buying_mode: "brief"
169
+ brief: "Display and video inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
170
+ account:
171
+ brand:
172
+ domain: "acmeoutdoor.example"
173
+ operator: "pinnacle-agency.example"
174
+ validations:
175
+ - check: response_schema
176
+ description: "Response matches get-products-response.json schema"
177
+ - check: field_present
178
+ path: "products"
179
+ description: "Response contains products"
180
+
181
+ - id: create_media_buy
182
+ title: "Create buy (governance approves)"
183
+ task: create_media_buy
184
+ schema_ref: "media-buy/create-media-buy-request.json"
185
+ response_schema_ref: "media-buy/create-media-buy-response.json"
186
+ doc_ref: "/media-buy/task-reference/create_media_buy"
187
+ comply_scenario: create_media_buy
188
+ stateful: true
189
+ expected: |
190
+ The buy succeeds — governance approved because the $25K buy is within
191
+ the plan's $100K budget.
192
+ sample_request:
193
+ brand:
194
+ domain: "acmeoutdoor.example"
195
+ account:
196
+ brand:
197
+ domain: "acmeoutdoor.example"
198
+ operator: "pinnacle-agency.example"
199
+ start_time: "2026-04-01T00:00:00Z"
200
+ end_time: "2026-06-30T23:59:59Z"
201
+ packages:
202
+ - product_id: "outdoor_display_q2"
203
+ budget: 15000
204
+ pricing_option_id: "cpm_standard"
205
+ - product_id: "outdoor_video_q2"
206
+ budget: 10000
207
+ pricing_option_id: "cpm_standard"
208
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_approved_buy_approved_create_media_buy"
209
+ validations:
210
+ - check: response_schema
211
+ description: "Response matches create-media-buy-response.json schema"
@@ -0,0 +1,196 @@
1
+ id: media_buy_seller/governance_conditions
2
+ version: "1.0.0"
3
+ title: "Seller attaches conditions when governance approves with conditions"
4
+ category: media_buy_seller
5
+ summary: "Verifies that the seller attaches governance conditions to the buy when governance approves with conditions."
6
+ track: media_buy
7
+ required_tools:
8
+ - sync_governance
9
+ - get_products
10
+ - create_media_buy
11
+
12
+ narrative: |
13
+ This is a multi-agent test. The test harness sets up a governance plan on a governance
14
+ agent with custom policies that trigger conditions (e.g., "CTV buys require weekly
15
+ delivery reporting"). The buyer creates a CTV buy within budget but matching a policy.
16
+
17
+ When the seller calls check_governance, the governance agent approves with conditions.
18
+ The seller must create the buy and include the governance conditions and context token
19
+ in its response.
20
+
21
+ By default, the governance agent is the training agent at test-agent.adcontextprotocol.org.
22
+ Override with --governance-agent-url to use a custom governance agent.
23
+
24
+ agent:
25
+ interaction_model: media_buy_seller
26
+ capabilities:
27
+ - sells_media
28
+ - governance_aware
29
+ examples:
30
+ - "Any media buy seller with governance support"
31
+
32
+ caller:
33
+ role: buyer_agent
34
+ example: "Pinnacle Agency (buyer)"
35
+
36
+ prerequisites:
37
+ description: |
38
+ A governance agent that supports sync_plans and check_governance.
39
+ test_kit: "test-kits/acme-outdoor.yaml"
40
+
41
+ phases:
42
+ - id: governance_plan_setup
43
+ title: "Set up conditional governance plan"
44
+ narrative: |
45
+ Create a governance plan on the governance agent with custom policies that
46
+ trigger conditions. The plan has sufficient budget but policies that require
47
+ conditions on CTV buys.
48
+
49
+ steps:
50
+ - id: sync_plans
51
+ title: "Create conditional governance plan"
52
+ task: sync_plans
53
+ schema_ref: "governance/sync-plans-request.json"
54
+ response_schema_ref: "governance/sync-plans-response.json"
55
+ doc_ref: "/governance/campaign/tasks/sync_plans"
56
+ stateful: true
57
+ expected: |
58
+ The governance agent acknowledges the plan with a plan_id.
59
+ sample_request:
60
+ idempotency_key: "comply-gov-conditions-sync-plans-v1"
61
+ plans:
62
+ - plan_id: "comply-gov-conditions-plan"
63
+ brand:
64
+ domain: "acmeoutdoor.example"
65
+ objectives: "Q2 CTV campaign with reporting requirements"
66
+ budget:
67
+ total: 100000
68
+ currency: "USD"
69
+ reallocation_threshold: 100000
70
+ flight:
71
+ start: "2026-04-01T00:00:00Z"
72
+ end: "2026-06-30T23:59:59Z"
73
+ countries: ["US", "CA"]
74
+ custom_policies:
75
+ - policy_id: "ctv_weekly_reporting"
76
+ enforcement: "must"
77
+ policy: "CTV buys require weekly delivery reporting."
78
+ - policy_id: "ugc_brand_safety"
79
+ enforcement: "must"
80
+ policy: "UGC placements require brand safety review before activation."
81
+ validations:
82
+ - check: response_schema
83
+ description: "Response matches sync-plans-response.json schema"
84
+
85
+ - id: seller_setup
86
+ title: "Account and governance registration on seller"
87
+ steps:
88
+ - id: sync_accounts
89
+ title: "Establish account with seller"
90
+ task: sync_accounts
91
+ schema_ref: "account/sync-accounts-request.json"
92
+ response_schema_ref: "account/sync-accounts-response.json"
93
+ doc_ref: "/accounts/tasks/sync_accounts"
94
+ stateful: true
95
+ expected: |
96
+ Return the account with account_id and status active.
97
+ sample_request:
98
+ accounts:
99
+ - brand:
100
+ domain: "acmeoutdoor.example"
101
+ operator: "pinnacle-agency.example"
102
+ billing: "operator"
103
+ payment_terms: "net_30"
104
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_accounts"
105
+ validations:
106
+ - check: response_schema
107
+ description: "Response matches sync-accounts-response.json schema"
108
+ - check: field_present
109
+ path: "accounts[0].account_id"
110
+ description: "Account has a platform-assigned ID"
111
+
112
+ - id: sync_governance
113
+ title: "Register governance agent with seller"
114
+ task: sync_governance
115
+ schema_ref: "account/sync-governance-request.json"
116
+ response_schema_ref: "account/sync-governance-response.json"
117
+ doc_ref: "/accounts/tasks/sync_governance"
118
+ stateful: true
119
+ expected: |
120
+ Acknowledge the governance agent registration.
121
+ sample_request:
122
+ accounts:
123
+ - account:
124
+ brand:
125
+ domain: "acmeoutdoor.example"
126
+ operator: "pinnacle-agency.example"
127
+ governance_agents:
128
+ - url: "$context.governance_agent_url"
129
+ authentication:
130
+ schemes: ["Bearer"]
131
+ credentials: "gov-token-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
132
+ categories: ["budget_authority", "brand_policy"]
133
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_seller_setup_sync_governance"
134
+ validations:
135
+ - check: response_schema
136
+ description: "Response matches sync-governance-response.json schema"
137
+
138
+ - id: buy_with_conditions
139
+ title: "Create CTV buy triggering governance conditions"
140
+ steps:
141
+ - id: get_products_brief
142
+ title: "Discover CTV products"
143
+ task: get_products
144
+ schema_ref: "media-buy/get-products-request.json"
145
+ response_schema_ref: "media-buy/get-products-response.json"
146
+ doc_ref: "/media-buy/task-reference/get_products"
147
+ comply_scenario: full_sales_flow
148
+ stateful: false
149
+ expected: |
150
+ Return CTV/video products matching the brief.
151
+ sample_request:
152
+ buying_mode: "brief"
153
+ brief: "CTV and connected TV inventory on outdoor lifestyle content. Q2 flight, $25K budget. Adults 25-54, US."
154
+ account:
155
+ brand:
156
+ domain: "acmeoutdoor.example"
157
+ operator: "pinnacle-agency.example"
158
+ validations:
159
+ - check: response_schema
160
+ description: "Response matches get-products-response.json schema"
161
+ - check: field_present
162
+ path: "products"
163
+ description: "Response contains products"
164
+
165
+ - id: create_media_buy_conditions
166
+ title: "Create CTV buy (governance approves with conditions)"
167
+ task: create_media_buy
168
+ schema_ref: "media-buy/create-media-buy-request.json"
169
+ response_schema_ref: "media-buy/create-media-buy-response.json"
170
+ doc_ref: "/media-buy/task-reference/create_media_buy"
171
+ comply_scenario: create_media_buy
172
+ stateful: true
173
+ expected: |
174
+ The buy succeeds with governance conditions attached:
175
+ - media_buy_id: present
176
+ - status: active or pending_creatives
177
+ - governance_context: token from the governance agent
178
+ - conditions visible to the buyer
179
+ sample_request:
180
+ brand:
181
+ domain: "acmeoutdoor.example"
182
+ account:
183
+ brand:
184
+ domain: "acmeoutdoor.example"
185
+ operator: "pinnacle-agency.example"
186
+ sandbox: true
187
+ start_time: "2026-04-01T00:00:00Z"
188
+ end_time: "2026-06-30T23:59:59Z"
189
+ packages:
190
+ - product_id: "outdoor_ctv_q2"
191
+ budget: 25000
192
+ pricing_option_id: "cpm_standard"
193
+ idempotency_key: "$generate:uuid_v4#media_buy_seller_governance_conditions_buy_with_conditions_create_media_buy_conditions"
194
+ validations:
195
+ - check: response_schema
196
+ description: "Response matches create-media-buy-response.json schema"