@adcp/sdk 16.0.0-beta.7 → 16.0.0-beta.9

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 (408) hide show
  1. package/AGENTS.md +3 -3
  2. package/README.md +20 -0
  3. package/bin/adcp.js +10 -13
  4. package/dist/lib/conformance/index.d.mts +2 -0
  5. package/dist/lib/conformance/index.d.ts +2 -0
  6. package/dist/lib/conformance/index.js +3 -0
  7. package/dist/lib/conformance/index.mjs +2 -0
  8. package/dist/lib/conformance/property-lists.d.mts +14 -0
  9. package/dist/lib/conformance/property-lists.d.ts +14 -0
  10. package/dist/lib/conformance/property-lists.js +45 -0
  11. package/dist/lib/conformance/property-lists.mjs +21 -0
  12. package/dist/lib/conformance/runConformance.js +20 -1
  13. package/dist/lib/conformance/runConformance.mjs +20 -1
  14. package/dist/lib/conformance/types.d.mts +3 -0
  15. package/dist/lib/conformance/types.d.ts +3 -0
  16. package/dist/lib/core/AgentClient.d.mts +8 -5
  17. package/dist/lib/core/AgentClient.d.ts +8 -5
  18. package/dist/lib/core/AgentClient.js +9 -4
  19. package/dist/lib/core/AgentClient.mjs +9 -4
  20. package/dist/lib/core/SingleAgentClient.d.mts +32 -115
  21. package/dist/lib/core/SingleAgentClient.d.ts +32 -115
  22. package/dist/lib/core/SingleAgentClient.js +379 -273
  23. package/dist/lib/core/SingleAgentClient.mjs +387 -275
  24. package/dist/lib/core/TaskExecutor.d.mts +1 -16
  25. package/dist/lib/core/TaskExecutor.d.ts +1 -16
  26. package/dist/lib/core/TaskExecutor.js +34 -51
  27. package/dist/lib/core/TaskExecutor.mjs +12 -29
  28. package/dist/lib/core/product-cache.d.mts +3 -1
  29. package/dist/lib/core/product-cache.d.ts +3 -1
  30. package/dist/lib/core/product-cache.js +2 -1
  31. package/dist/lib/core/product-cache.mjs +2 -1
  32. package/dist/lib/errors/index.d.mts +2 -8
  33. package/dist/lib/errors/index.d.ts +2 -8
  34. package/dist/lib/errors/index.js +4 -4
  35. package/dist/lib/errors/index.mjs +4 -4
  36. package/dist/lib/identifiers.d.mts +53 -0
  37. package/dist/lib/identifiers.d.ts +53 -0
  38. package/dist/lib/identifiers.js +212 -0
  39. package/dist/lib/identifiers.mjs +163 -0
  40. package/dist/lib/index.d.mts +7 -5
  41. package/dist/lib/index.d.ts +7 -5
  42. package/dist/lib/index.js +2 -14
  43. package/dist/lib/index.mjs +1 -14
  44. package/dist/lib/media-buy/compatibility.d.mts +1 -1
  45. package/dist/lib/media-buy/compatibility.d.ts +1 -1
  46. package/dist/lib/media-buy/compatibility.js +26 -45
  47. package/dist/lib/media-buy/compatibility.mjs +26 -45
  48. package/dist/lib/media-buy/index.d.mts +1 -1
  49. package/dist/lib/media-buy/index.d.ts +1 -1
  50. package/dist/lib/media-buy/legacy-purchase-continuation.d.mts +2 -2
  51. package/dist/lib/media-buy/legacy-purchase-continuation.d.ts +2 -2
  52. package/dist/lib/media-buy/property-policy.d.mts +15 -1
  53. package/dist/lib/media-buy/property-policy.d.ts +15 -1
  54. package/dist/lib/media-buy/property-policy.js +135 -3
  55. package/dist/lib/media-buy/property-policy.mjs +134 -3
  56. package/dist/lib/protocols/index.js +14 -22
  57. package/dist/lib/protocols/index.mjs +5 -13
  58. package/dist/lib/registry/index.d.mts +12 -0
  59. package/dist/lib/registry/index.d.ts +12 -0
  60. package/dist/lib/registry/index.js +159 -5
  61. package/dist/lib/registry/index.mjs +156 -4
  62. package/dist/lib/registry/types.d.mts +26 -2
  63. package/dist/lib/registry/types.d.ts +26 -2
  64. package/dist/lib/registry/types.generated.d.mts +51 -11
  65. package/dist/lib/registry/types.generated.d.ts +51 -11
  66. package/dist/lib/reporting/source/conformance.d.mts +8 -8
  67. package/dist/lib/reporting/source/conformance.d.ts +8 -8
  68. package/dist/lib/reporting/source/manifest.d.mts +27 -27
  69. package/dist/lib/reporting/source/manifest.d.ts +27 -27
  70. package/dist/lib/server/create-adcp-server.js +6 -0
  71. package/dist/lib/server/create-adcp-server.mjs +6 -0
  72. package/dist/lib/server/decisioning/specialisms/lists.d.mts +4 -4
  73. package/dist/lib/server/decisioning/specialisms/lists.d.ts +4 -4
  74. package/dist/lib/server/index.d.mts +3 -0
  75. package/dist/lib/server/index.d.ts +3 -0
  76. package/dist/lib/server/index.js +8 -1
  77. package/dist/lib/server/index.mjs +4 -0
  78. package/dist/lib/server/property-lists.d.mts +36 -0
  79. package/dist/lib/server/property-lists.d.ts +36 -0
  80. package/dist/lib/server/property-lists.js +154 -0
  81. package/dist/lib/server/property-lists.mjs +129 -0
  82. package/dist/lib/server/targeting-helpers.d.mts +2 -0
  83. package/dist/lib/server/targeting-helpers.d.ts +2 -0
  84. package/dist/lib/server/targeting-helpers.js +28 -1
  85. package/dist/lib/server/targeting-helpers.mjs +18 -1
  86. package/dist/lib/signing/parser.js +2 -2
  87. package/dist/lib/signing/parser.mjs +2 -2
  88. package/dist/lib/signing/server.d.mts +1 -1
  89. package/dist/lib/signing/server.d.ts +1 -1
  90. package/dist/lib/signing/server.mjs +5 -1
  91. package/dist/lib/signing/webhook-verifier.d.mts +11 -0
  92. package/dist/lib/signing/webhook-verifier.d.ts +11 -0
  93. package/dist/lib/signing/webhook-verifier.js +11 -3
  94. package/dist/lib/signing/webhook-verifier.mjs +11 -3
  95. package/dist/lib/supply-path/verify.js +12 -2
  96. package/dist/lib/supply-path/verify.mjs +2 -2
  97. package/dist/lib/testing/compliance/comply.js +0 -8
  98. package/dist/lib/testing/compliance/comply.mjs +0 -8
  99. package/dist/lib/testing/compliance/storyboard-tracks.js +11 -0
  100. package/dist/lib/testing/compliance/storyboard-tracks.mjs +11 -0
  101. package/dist/lib/testing/index.d.mts +2 -0
  102. package/dist/lib/testing/index.d.ts +2 -0
  103. package/dist/lib/testing/index.js +5 -0
  104. package/dist/lib/testing/index.mjs +3 -0
  105. package/dist/lib/testing/scenarios/capabilities.d.mts +2 -2
  106. package/dist/lib/testing/scenarios/capabilities.d.ts +2 -2
  107. package/dist/lib/testing/scenarios/capabilities.js +8 -41
  108. package/dist/lib/testing/scenarios/capabilities.mjs +9 -42
  109. package/dist/lib/testing/storyboard/creative-build-probe.d.mts +34 -0
  110. package/dist/lib/testing/storyboard/creative-build-probe.d.ts +34 -0
  111. package/dist/lib/testing/storyboard/creative-build-probe.js +395 -0
  112. package/dist/lib/testing/storyboard/creative-build-probe.mjs +373 -0
  113. package/dist/lib/testing/storyboard/index.d.mts +2 -0
  114. package/dist/lib/testing/storyboard/index.d.ts +2 -0
  115. package/dist/lib/testing/storyboard/index.js +5 -0
  116. package/dist/lib/testing/storyboard/index.mjs +3 -0
  117. package/dist/lib/testing/storyboard/loader.js +12 -0
  118. package/dist/lib/testing/storyboard/loader.mjs +12 -0
  119. package/dist/lib/testing/storyboard/property-list-reference.d.mts +15 -0
  120. package/dist/lib/testing/storyboard/property-list-reference.d.ts +15 -0
  121. package/dist/lib/testing/storyboard/property-list-reference.js +514 -0
  122. package/dist/lib/testing/storyboard/property-list-reference.mjs +487 -0
  123. package/dist/lib/testing/storyboard/runner.js +318 -58
  124. package/dist/lib/testing/storyboard/runner.mjs +322 -58
  125. package/dist/lib/testing/storyboard/types.d.mts +38 -16
  126. package/dist/lib/testing/storyboard/types.d.ts +38 -16
  127. package/dist/lib/testing/storyboard/types.js +1 -0
  128. package/dist/lib/testing/storyboard/types.mjs +1 -0
  129. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  130. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  131. package/dist/lib/testing/storyboard/validations.js +64 -0
  132. package/dist/lib/testing/storyboard/validations.mjs +67 -1
  133. package/dist/lib/testing/types.d.mts +15 -1
  134. package/dist/lib/testing/types.d.ts +15 -1
  135. package/dist/lib/types/schemas.generated.d.ts +65 -65
  136. package/dist/lib/types/wellknown-schemas.generated.d.mts +21 -21
  137. package/dist/lib/types/wellknown-schemas.generated.d.ts +21 -21
  138. package/dist/lib/utils/adcp-version-config.js +6 -0
  139. package/dist/lib/utils/adcp-version-config.mjs +6 -0
  140. package/dist/lib/utils/capabilities.d.mts +7 -9
  141. package/dist/lib/utils/capabilities.d.ts +7 -9
  142. package/dist/lib/utils/capabilities.js +14 -28
  143. package/dist/lib/utils/capabilities.mjs +14 -27
  144. package/dist/lib/utils/creative-adapter.d.mts +15 -113
  145. package/dist/lib/utils/creative-adapter.d.ts +15 -113
  146. package/dist/lib/utils/creative-adapter.js +7 -106
  147. package/dist/lib/utils/creative-adapter.mjs +7 -102
  148. package/dist/lib/utils/format-renders.d.mts +20 -80
  149. package/dist/lib/utils/format-renders.d.ts +20 -80
  150. package/dist/lib/utils/format-renders.js +7 -67
  151. package/dist/lib/utils/format-renders.mjs +7 -66
  152. package/dist/lib/utils/index.d.mts +1 -2
  153. package/dist/lib/utils/index.d.ts +1 -2
  154. package/dist/lib/utils/index.js +0 -7
  155. package/dist/lib/utils/index.mjs +0 -6
  156. package/dist/lib/utils/preview-normalizer.d.mts +31 -80
  157. package/dist/lib/utils/preview-normalizer.d.ts +31 -80
  158. package/dist/lib/utils/preview-normalizer.js +5 -50
  159. package/dist/lib/utils/preview-normalizer.mjs +5 -49
  160. package/dist/lib/utils/pricing-adapter.d.mts +2 -36
  161. package/dist/lib/utils/pricing-adapter.d.ts +2 -36
  162. package/dist/lib/utils/pricing-adapter.js +0 -105
  163. package/dist/lib/utils/pricing-adapter.mjs +0 -100
  164. package/dist/lib/utils/request-normalizer.d.mts +1 -2
  165. package/dist/lib/utils/request-normalizer.d.ts +1 -2
  166. package/dist/lib/v2/projection/creative-delivery.d.mts +2 -0
  167. package/dist/lib/v2/projection/creative-delivery.d.ts +2 -0
  168. package/dist/lib/v2/projection/creative-delivery.js +7 -0
  169. package/dist/lib/v2/projection/creative-delivery.mjs +6 -0
  170. package/dist/lib/v2/projection/legacy-metadata.d.mts +12 -0
  171. package/dist/lib/v2/projection/legacy-metadata.d.ts +12 -0
  172. package/dist/lib/v2/projection/legacy-metadata.js +41 -1
  173. package/dist/lib/v2/projection/legacy-metadata.mjs +37 -1
  174. package/dist/lib/v2/projection/legacy-normalization.d.mts +1 -1
  175. package/dist/lib/v2/projection/legacy-normalization.d.ts +1 -1
  176. package/dist/lib/v2/projection/v1-to-v2.js +13 -0
  177. package/dist/lib/v2/projection/v1-to-v2.mjs +14 -0
  178. package/dist/lib/validation/client-hooks.d.mts +1 -4
  179. package/dist/lib/validation/client-hooks.d.ts +1 -4
  180. package/dist/lib/validation/get-products-request.d.mts +1 -1
  181. package/dist/lib/validation/get-products-request.d.ts +1 -1
  182. package/dist/lib/validation/schema-loader.js +6 -0
  183. package/dist/lib/validation/schema-loader.mjs +6 -0
  184. package/dist/lib/validation/schema-validator.js +1 -26
  185. package/dist/lib/validation/schema-validator.mjs +1 -26
  186. package/dist/lib/version.d.mts +5 -5
  187. package/dist/lib/version.d.ts +5 -5
  188. package/dist/lib/version.js +3 -5
  189. package/dist/lib/version.mjs +3 -5
  190. package/docs/TYPE-SUMMARY.md +2 -2
  191. package/docs/development/PROTOCOL_DIFFERENCES.md +1 -1
  192. package/docs/guides/CONFORMANCE.md +25 -0
  193. package/docs/guides/CREATIVE-BUILD-PROBE.md +156 -0
  194. package/docs/guides/CREATIVE-DELIVERY.md +45 -6
  195. package/docs/guides/MEDIA-BUY-3.2-COMPATIBILITY.md +15 -18
  196. package/docs/guides/PROPERTY-LISTS.md +264 -0
  197. package/docs/guides/SIGNING-GUIDE.md +25 -0
  198. package/docs/guides/VALIDATE-YOUR-AGENT.md +5 -0
  199. package/docs/llms.txt +2 -2
  200. package/docs/migration-13-to-14.md +20 -16
  201. package/docs/migration-14.x-rc-worksheet.md +5 -5
  202. package/docs/migration-4.x-to-5.x.md +12 -7
  203. package/docs/migration-drop-adcp-2.md +25 -0
  204. package/package.json +3 -18
  205. package/skills/call-adcp-agent/SKILL.md +23 -25
  206. package/dist/lib/adapters/legacy/v2-5/create_media_buy.d.mts +0 -3
  207. package/dist/lib/adapters/legacy/v2-5/create_media_buy.d.ts +0 -3
  208. package/dist/lib/adapters/legacy/v2-5/create_media_buy.js +0 -33
  209. package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs +0 -9
  210. package/dist/lib/adapters/legacy/v2-5/get_products.d.mts +0 -8
  211. package/dist/lib/adapters/legacy/v2-5/get_products.d.ts +0 -8
  212. package/dist/lib/adapters/legacy/v2-5/get_products.js +0 -33
  213. package/dist/lib/adapters/legacy/v2-5/get_products.mjs +0 -9
  214. package/dist/lib/adapters/legacy/v2-5/index.d.mts +0 -34
  215. package/dist/lib/adapters/legacy/v2-5/index.d.ts +0 -34
  216. package/dist/lib/adapters/legacy/v2-5/index.js +0 -50
  217. package/dist/lib/adapters/legacy/v2-5/index.mjs +0 -25
  218. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.d.mts +0 -8
  219. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.d.ts +0 -8
  220. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.js +0 -33
  221. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs +0 -9
  222. package/dist/lib/adapters/legacy/v2-5/preview_creative.d.mts +0 -3
  223. package/dist/lib/adapters/legacy/v2-5/preview_creative.d.ts +0 -3
  224. package/dist/lib/adapters/legacy/v2-5/preview_creative.js +0 -33
  225. package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs +0 -9
  226. package/dist/lib/adapters/legacy/v2-5/sync_creatives.d.mts +0 -11
  227. package/dist/lib/adapters/legacy/v2-5/sync_creatives.d.ts +0 -11
  228. package/dist/lib/adapters/legacy/v2-5/sync_creatives.js +0 -32
  229. package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs +0 -8
  230. package/dist/lib/adapters/legacy/v2-5/types.d.mts +0 -39
  231. package/dist/lib/adapters/legacy/v2-5/types.d.ts +0 -39
  232. package/dist/lib/adapters/legacy/v2-5/types.js +0 -16
  233. package/dist/lib/adapters/legacy/v2-5/types.mjs +0 -0
  234. package/dist/lib/adapters/legacy/v2-5/update_media_buy.d.mts +0 -3
  235. package/dist/lib/adapters/legacy/v2-5/update_media_buy.d.ts +0 -3
  236. package/dist/lib/adapters/legacy/v2-5/update_media_buy.js +0 -35
  237. package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs +0 -11
  238. package/dist/lib/schemas-data/v2.5/_provenance.json +0 -8
  239. package/dist/lib/schemas-data/v2.5/adagents.json +0 -494
  240. package/dist/lib/schemas-data/v2.5/core/activation-key.json +0 -50
  241. package/dist/lib/schemas-data/v2.5/core/assets/audio-asset.json +0 -32
  242. package/dist/lib/schemas-data/v2.5/core/assets/css-asset.json +0 -21
  243. package/dist/lib/schemas-data/v2.5/core/assets/daast-asset.json +0 -87
  244. package/dist/lib/schemas-data/v2.5/core/assets/html-asset.json +0 -21
  245. package/dist/lib/schemas-data/v2.5/core/assets/image-asset.json +0 -38
  246. package/dist/lib/schemas-data/v2.5/core/assets/javascript-asset.json +0 -21
  247. package/dist/lib/schemas-data/v2.5/core/assets/markdown-asset.json +0 -31
  248. package/dist/lib/schemas-data/v2.5/core/assets/text-asset.json +0 -21
  249. package/dist/lib/schemas-data/v2.5/core/assets/url-asset.json +0 -26
  250. package/dist/lib/schemas-data/v2.5/core/assets/vast-asset.json +0 -87
  251. package/dist/lib/schemas-data/v2.5/core/assets/video-asset.json +0 -44
  252. package/dist/lib/schemas-data/v2.5/core/assets/webhook-asset.json +0 -71
  253. package/dist/lib/schemas-data/v2.5/core/async-response-data.json +0 -88
  254. package/dist/lib/schemas-data/v2.5/core/brand-manifest-ref.json +0 -33
  255. package/dist/lib/schemas-data/v2.5/core/brand-manifest.json +0 -409
  256. package/dist/lib/schemas-data/v2.5/core/context.json +0 -8
  257. package/dist/lib/schemas-data/v2.5/core/creative-asset.json +0 -125
  258. package/dist/lib/schemas-data/v2.5/core/creative-assignment.json +0 -31
  259. package/dist/lib/schemas-data/v2.5/core/creative-filters.json +0 -111
  260. package/dist/lib/schemas-data/v2.5/core/creative-manifest.json +0 -72
  261. package/dist/lib/schemas-data/v2.5/core/creative-policy.json +0 -27
  262. package/dist/lib/schemas-data/v2.5/core/delivery-metrics.json +0 -171
  263. package/dist/lib/schemas-data/v2.5/core/deployment.json +0 -93
  264. package/dist/lib/schemas-data/v2.5/core/destination.json +0 -53
  265. package/dist/lib/schemas-data/v2.5/core/error.json +0 -40
  266. package/dist/lib/schemas-data/v2.5/core/ext.json +0 -8
  267. package/dist/lib/schemas-data/v2.5/core/format-id.json +0 -47
  268. package/dist/lib/schemas-data/v2.5/core/format.json +0 -324
  269. package/dist/lib/schemas-data/v2.5/core/frequency-cap.json +0 -18
  270. package/dist/lib/schemas-data/v2.5/core/mcp-webhook-payload.json +0 -152
  271. package/dist/lib/schemas-data/v2.5/core/measurement.json +0 -48
  272. package/dist/lib/schemas-data/v2.5/core/media-buy.json +0 -62
  273. package/dist/lib/schemas-data/v2.5/core/package.json +0 -72
  274. package/dist/lib/schemas-data/v2.5/core/performance-feedback.json +0 -90
  275. package/dist/lib/schemas-data/v2.5/core/placement.json +0 -34
  276. package/dist/lib/schemas-data/v2.5/core/pricing-option.json +0 -35
  277. package/dist/lib/schemas-data/v2.5/core/product-filters.json +0 -102
  278. package/dist/lib/schemas-data/v2.5/core/product.json +0 -153
  279. package/dist/lib/schemas-data/v2.5/core/promoted-offerings.json +0 -115
  280. package/dist/lib/schemas-data/v2.5/core/promoted-products.json +0 -67
  281. package/dist/lib/schemas-data/v2.5/core/property-id.json +0 -14
  282. package/dist/lib/schemas-data/v2.5/core/property-tag.json +0 -16
  283. package/dist/lib/schemas-data/v2.5/core/property.json +0 -62
  284. package/dist/lib/schemas-data/v2.5/core/protocol-envelope.json +0 -146
  285. package/dist/lib/schemas-data/v2.5/core/publisher-property-selector.json +0 -92
  286. package/dist/lib/schemas-data/v2.5/core/push-notification-config.json +0 -48
  287. package/dist/lib/schemas-data/v2.5/core/reporting-capabilities.json +0 -71
  288. package/dist/lib/schemas-data/v2.5/core/response.json +0 -24
  289. package/dist/lib/schemas-data/v2.5/core/signal-filters.json +0 -35
  290. package/dist/lib/schemas-data/v2.5/core/start-timing.json +0 -18
  291. package/dist/lib/schemas-data/v2.5/core/sub-asset.json +0 -79
  292. package/dist/lib/schemas-data/v2.5/core/targeting.json +0 -50
  293. package/dist/lib/schemas-data/v2.5/core/tasks-get-request.json +0 -43
  294. package/dist/lib/schemas-data/v2.5/core/tasks-get-response.json +0 -166
  295. package/dist/lib/schemas-data/v2.5/core/tasks-list-request.json +0 -192
  296. package/dist/lib/schemas-data/v2.5/core/tasks-list-response.json +0 -183
  297. package/dist/lib/schemas-data/v2.5/creative/asset-types/index.json +0 -101
  298. package/dist/lib/schemas-data/v2.5/creative/list-creative-formats-request.json +0 -73
  299. package/dist/lib/schemas-data/v2.5/creative/list-creative-formats-response.json +0 -61
  300. package/dist/lib/schemas-data/v2.5/creative/preview-creative-request.json +0 -164
  301. package/dist/lib/schemas-data/v2.5/creative/preview-creative-response.json +0 -245
  302. package/dist/lib/schemas-data/v2.5/creative/preview-render.json +0 -225
  303. package/dist/lib/schemas-data/v2.5/enums/adcp-domain.json +0 -11
  304. package/dist/lib/schemas-data/v2.5/enums/asset-content-type.json +0 -22
  305. package/dist/lib/schemas-data/v2.5/enums/auth-scheme.json +0 -11
  306. package/dist/lib/schemas-data/v2.5/enums/available-metric.json +0 -18
  307. package/dist/lib/schemas-data/v2.5/enums/channels.json +0 -18
  308. package/dist/lib/schemas-data/v2.5/enums/co-branding-requirement.json +0 -12
  309. package/dist/lib/schemas-data/v2.5/enums/creative-action.json +0 -14
  310. package/dist/lib/schemas-data/v2.5/enums/creative-agent-capability.json +0 -13
  311. package/dist/lib/schemas-data/v2.5/enums/creative-sort-field.json +0 -15
  312. package/dist/lib/schemas-data/v2.5/enums/creative-status.json +0 -19
  313. package/dist/lib/schemas-data/v2.5/enums/daast-tracking-event.json +0 -20
  314. package/dist/lib/schemas-data/v2.5/enums/daast-version.json +0 -11
  315. package/dist/lib/schemas-data/v2.5/enums/delivery-type.json +0 -15
  316. package/dist/lib/schemas-data/v2.5/enums/dimension-unit.json +0 -13
  317. package/dist/lib/schemas-data/v2.5/enums/feed-format.json +0 -12
  318. package/dist/lib/schemas-data/v2.5/enums/feedback-source.json +0 -13
  319. package/dist/lib/schemas-data/v2.5/enums/format-category.json +0 -16
  320. package/dist/lib/schemas-data/v2.5/enums/format-id-parameter.json +0 -11
  321. package/dist/lib/schemas-data/v2.5/enums/frequency-cap-scope.json +0 -13
  322. package/dist/lib/schemas-data/v2.5/enums/history-entry-type.json +0 -11
  323. package/dist/lib/schemas-data/v2.5/enums/http-method.json +0 -11
  324. package/dist/lib/schemas-data/v2.5/enums/identifier-types.json +0 -34
  325. package/dist/lib/schemas-data/v2.5/enums/javascript-module-type.json +0 -12
  326. package/dist/lib/schemas-data/v2.5/enums/landing-page-requirement.json +0 -12
  327. package/dist/lib/schemas-data/v2.5/enums/markdown-flavor.json +0 -11
  328. package/dist/lib/schemas-data/v2.5/enums/media-buy-status.json +0 -19
  329. package/dist/lib/schemas-data/v2.5/enums/metric-type.json +0 -17
  330. package/dist/lib/schemas-data/v2.5/enums/notification-type.json +0 -13
  331. package/dist/lib/schemas-data/v2.5/enums/pacing.json +0 -17
  332. package/dist/lib/schemas-data/v2.5/enums/preview-output-format.json +0 -11
  333. package/dist/lib/schemas-data/v2.5/enums/pricing-model.json +0 -25
  334. package/dist/lib/schemas-data/v2.5/enums/property-type.json +0 -16
  335. package/dist/lib/schemas-data/v2.5/enums/publisher-identifier-types.json +0 -19
  336. package/dist/lib/schemas-data/v2.5/enums/reporting-frequency.json +0 -12
  337. package/dist/lib/schemas-data/v2.5/enums/signal-catalog-type.json +0 -12
  338. package/dist/lib/schemas-data/v2.5/enums/sort-direction.json +0 -11
  339. package/dist/lib/schemas-data/v2.5/enums/standard-format-ids.json +0 -103
  340. package/dist/lib/schemas-data/v2.5/enums/task-status.json +0 -29
  341. package/dist/lib/schemas-data/v2.5/enums/task-type.json +0 -27
  342. package/dist/lib/schemas-data/v2.5/enums/update-frequency.json +0 -13
  343. package/dist/lib/schemas-data/v2.5/enums/url-asset-type.json +0 -12
  344. package/dist/lib/schemas-data/v2.5/enums/validation-mode.json +0 -11
  345. package/dist/lib/schemas-data/v2.5/enums/vast-tracking-event.json +0 -25
  346. package/dist/lib/schemas-data/v2.5/enums/vast-version.json +0 -14
  347. package/dist/lib/schemas-data/v2.5/enums/webhook-response-type.json +0 -13
  348. package/dist/lib/schemas-data/v2.5/enums/webhook-security-method.json +0 -12
  349. package/dist/lib/schemas-data/v2.5/index.json +0 -604
  350. package/dist/lib/schemas-data/v2.5/media-buy/build-creative-request.json +0 -31
  351. package/dist/lib/schemas-data/v2.5/media-buy/build-creative-response.json +0 -65
  352. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-input-required.json +0 -31
  353. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-submitted.json +0 -16
  354. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-async-response-working.json +0 -36
  355. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-request.json +0 -126
  356. package/dist/lib/schemas-data/v2.5/media-buy/create-media-buy-response.json +0 -97
  357. package/dist/lib/schemas-data/v2.5/media-buy/get-media-buy-delivery-request.json +0 -54
  358. package/dist/lib/schemas-data/v2.5/media-buy/get-media-buy-delivery-response.json +0 -285
  359. package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-input-required.json +0 -38
  360. package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-submitted.json +0 -21
  361. package/dist/lib/schemas-data/v2.5/media-buy/get-products-async-response-working.json +0 -34
  362. package/dist/lib/schemas-data/v2.5/media-buy/get-products-request.json +0 -28
  363. package/dist/lib/schemas-data/v2.5/media-buy/get-products-response.json +0 -33
  364. package/dist/lib/schemas-data/v2.5/media-buy/list-authorized-properties-request.json +0 -26
  365. package/dist/lib/schemas-data/v2.5/media-buy/list-authorized-properties-response.json +0 -70
  366. package/dist/lib/schemas-data/v2.5/media-buy/list-creative-formats-request.json +0 -58
  367. package/dist/lib/schemas-data/v2.5/media-buy/list-creative-formats-response.json +0 -61
  368. package/dist/lib/schemas-data/v2.5/media-buy/list-creatives-request.json +0 -137
  369. package/dist/lib/schemas-data/v2.5/media-buy/list-creatives-response.json +0 -437
  370. package/dist/lib/schemas-data/v2.5/media-buy/package-request.json +0 -80
  371. package/dist/lib/schemas-data/v2.5/media-buy/provide-performance-feedback-request.json +0 -88
  372. package/dist/lib/schemas-data/v2.5/media-buy/provide-performance-feedback-response.json +0 -66
  373. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-input-required.json +0 -25
  374. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-submitted.json +0 -16
  375. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-async-response-working.json +0 -46
  376. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-request.json +0 -178
  377. package/dist/lib/schemas-data/v2.5/media-buy/sync-creatives-response.json +0 -149
  378. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-input-required.json +0 -24
  379. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-submitted.json +0 -16
  380. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-async-response-working.json +0 -36
  381. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-request.json +0 -129
  382. package/dist/lib/schemas-data/v2.5/media-buy/update-media-buy-response.json +0 -99
  383. package/dist/lib/schemas-data/v2.5/pricing-options/cpc-option.json +0 -52
  384. package/dist/lib/schemas-data/v2.5/pricing-options/cpcv-option.json +0 -52
  385. package/dist/lib/schemas-data/v2.5/pricing-options/cpm-auction-option.json +0 -81
  386. package/dist/lib/schemas-data/v2.5/pricing-options/cpm-fixed-option.json +0 -52
  387. package/dist/lib/schemas-data/v2.5/pricing-options/cpp-option.json +0 -73
  388. package/dist/lib/schemas-data/v2.5/pricing-options/cpv-option.json +0 -88
  389. package/dist/lib/schemas-data/v2.5/pricing-options/flat-rate-option.json +0 -93
  390. package/dist/lib/schemas-data/v2.5/pricing-options/vcpm-auction-option.json +0 -81
  391. package/dist/lib/schemas-data/v2.5/pricing-options/vcpm-fixed-option.json +0 -52
  392. package/dist/lib/schemas-data/v2.5/protocols/adcp-extension.json +0 -33
  393. package/dist/lib/schemas-data/v2.5/signals/activate-signal-request.json +0 -32
  394. package/dist/lib/schemas-data/v2.5/signals/activate-signal-response.json +0 -68
  395. package/dist/lib/schemas-data/v2.5/signals/get-signals-request.json +0 -59
  396. package/dist/lib/schemas-data/v2.5/signals/get-signals-response.json +0 -100
  397. package/dist/lib/types/v2-5/index.d.mts +0 -1
  398. package/dist/lib/types/v2-5/index.d.ts +0 -1
  399. package/dist/lib/types/v2-5/index.js +0 -22
  400. package/dist/lib/types/v2-5/index.mjs +0 -1
  401. package/dist/lib/types/v2-5/tools.generated.d.mts +0 -3568
  402. package/dist/lib/types/v2-5/tools.generated.d.ts +0 -3568
  403. package/dist/lib/types/v2-5/tools.generated.js +0 -16
  404. package/dist/lib/types/v2-5/tools.generated.mjs +0 -0
  405. package/dist/lib/utils/sync-creatives-adapter.d.mts +0 -33
  406. package/dist/lib/utils/sync-creatives-adapter.d.ts +0 -33
  407. package/dist/lib/utils/sync-creatives-adapter.js +0 -83
  408. package/dist/lib/utils/sync-creatives-adapter.mjs +0 -59
@@ -2,6 +2,7 @@ import { createHash, createHmac } from "node:crypto";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  import { basename, join } from "node:path";
4
4
  import { ACCOUNT_FREE_DISCOVERY_TASKS } from "./account-policy.mjs";
5
+ import { prepareCreativeBuildProbe } from "./creative-build-probe.mjs";
5
6
  import {
6
7
  createTestClient,
7
8
  getOrCreateClientResolution,
@@ -43,6 +44,11 @@ import {
43
44
  validateRateLimitTripSpec
44
45
  } from "./rate-limit-trip.mjs";
45
46
  import { redactSecrets } from "../../utils/redact-secrets.mjs";
47
+ import {
48
+ rememberPropertyListCredentials,
49
+ verifyPropertyListReference,
50
+ withPropertyListCredentialRedaction
51
+ } from "./property-list-reference.mjs";
46
52
  import { ResponseSchemaValidationError } from "../../utils/response-unwrapper.mjs";
47
53
  import { injectLegacyEnvelopeStatus, normalizeLegacyMediaBuyStatusForReturn } from "../../utils/envelope-status-compat.mjs";
48
54
  import { queryUpstreamTraffic } from "../test-controller.mjs";
@@ -785,38 +791,48 @@ function filterResponseHeaders(headers) {
785
791
  async function runStoryboard(agentUrlOrUrls, storyboard, options = {}) {
786
792
  options = applyReusableProfileOptions(options);
787
793
  if (hasTestClientScope() && !options._discoveryPass) options = { ...options, _discoveryPass: {} };
788
- return withMCPConnectionScope(
789
- async () => {
790
- options = applyStoryboardVersionOptions(storyboard, options);
791
- options = applyFunctionalRequestSigning(options, {
792
- ...options.complianceDir && { complianceDir: options.complianceDir },
793
- ...options.adcpVersion && { version: options.adcpVersion }
794
- });
795
- options = resolveDeclaredTestKit(storyboard, options);
796
- options = applyNativeA2AComplianceTransportOptions(options);
797
- if (hasTestClientScope() && options._client && !options.agents) {
798
- const resolution = getOrCreateClientResolution(
799
- typeof agentUrlOrUrls === "string" ? agentUrlOrUrls : agentUrlOrUrls[0],
800
- options
794
+ return withPropertyListCredentialRedaction(
795
+ () => withMCPConnectionScope(
796
+ async () => {
797
+ options = applyStoryboardVersionOptions(storyboard, options);
798
+ options = applyFunctionalRequestSigning(options, {
799
+ ...options.complianceDir && { complianceDir: options.complianceDir },
800
+ ...options.adcpVersion && { version: options.adcpVersion }
801
+ });
802
+ options = resolveDeclaredTestKit(storyboard, options);
803
+ options = applyNativeA2AComplianceTransportOptions(options);
804
+ if (storyboard.requires?.[0] === "property_list_reference_runner" && storyboardCapabilityPredicates(storyboard).length === 0 && propertyListReferenceNeedsMcp(options)) {
805
+ return buildRequirementUnmetResult(
806
+ Array.isArray(agentUrlOrUrls) ? agentUrlOrUrls : [agentUrlOrUrls],
807
+ storyboard,
808
+ "property_list_reference_runner",
809
+ "Credential-isolated property-list references currently require MCP; A2A probe coverage is unavailable."
810
+ );
811
+ }
812
+ if (hasTestClientScope() && options._client && !options.agents) {
813
+ const resolution = getOrCreateClientResolution(
814
+ typeof agentUrlOrUrls === "string" ? agentUrlOrUrls : agentUrlOrUrls[0],
815
+ options
816
+ );
817
+ const discovered = await getOrDiscoverProfile(resolution.client, options);
818
+ options = {
819
+ ...options,
820
+ _profile: discovered.step.passed ? discovered.profile : void 0,
821
+ agentTools: discovered.step.passed ? discovered.profile.tools : void 0
822
+ };
823
+ }
824
+ const schemaRoot = getRunSchemaRoot(options);
825
+ const runBody = () => withServedReleaseSchemaRoots(
826
+ options.servedReleaseSchemaRoots,
827
+ () => runStoryboardBody(agentUrlOrUrls, storyboard, options)
801
828
  );
802
- const discovered = await getOrDiscoverProfile(resolution.client, options);
803
- options = {
804
- ...options,
805
- _profile: discovered.step.passed ? discovered.profile : void 0,
806
- agentTools: discovered.step.passed ? discovered.profile.tools : void 0
807
- };
808
- }
809
- const schemaRoot = getRunSchemaRoot(options);
810
- const runBody = () => withServedReleaseSchemaRoots(
811
- options.servedReleaseSchemaRoots,
812
- () => runStoryboardBody(agentUrlOrUrls, storyboard, options)
813
- );
814
- if (schemaRoot) {
815
- return await withExternalSchemaRoot(schemaRoot.adcpVersion, schemaRoot.schemaRoot, runBody);
816
- }
817
- return await runBody();
818
- },
819
- { isolate: !hasTestClientScope() }
829
+ if (schemaRoot) {
830
+ return await withExternalSchemaRoot(schemaRoot.adcpVersion, schemaRoot.schemaRoot, runBody);
831
+ }
832
+ return await runBody();
833
+ },
834
+ { isolate: !hasTestClientScope() }
835
+ )
820
836
  );
821
837
  }
822
838
  async function runStoryboardBody(agentUrlOrUrls, storyboard, options) {
@@ -896,6 +912,7 @@ async function runStoryboardBody(agentUrlOrUrls, storyboard, options) {
896
912
  'runStoryboard: webhook_receiver is incompatible with multi_instance_strategy: "multi-pass". Each pass would bind a fresh receiver URL, so agents caching the pass-1 URL would deliver to a dead port in pass 2. Use round-robin when the storyboard needs a webhook receiver, or run multi-pass on a storyboard without webhook observation.'
897
913
  );
898
914
  }
915
+ if (storyboard.creative_build_probe) return executeStoryboardPass(agentUrls, storyboard, options, 0);
899
916
  return runMultiPass(agentUrls, storyboard, options);
900
917
  }
901
918
  if (options.agents) {
@@ -1048,6 +1065,7 @@ const REQUIREMENT_TO_SKIP_REASON = {
1048
1065
  webhook_replay_receiver: "not_applicable",
1049
1066
  trusted_match_context_router_runner: "not_applicable",
1050
1067
  trusted_match_publisher_auth_runner: "requirement_unmet",
1068
+ property_list_reference_runner: "requirement_unmet",
1051
1069
  request_signer: "not_applicable",
1052
1070
  multi_agent: "requirement_unmet"
1053
1071
  };
@@ -1154,6 +1172,9 @@ function buildRequiredAnyOfToolsMissingResult(agentUrls, storyboard, detail) {
1154
1172
  notices: []
1155
1173
  };
1156
1174
  }
1175
+ function propertyListReferenceNeedsMcp(options) {
1176
+ return options.agents ? Object.values(options.agents).some((agent) => (agent.transport ?? options.protocol) === "a2a") : options.protocol === "a2a";
1177
+ }
1157
1178
  async function checkRequires(requires, storyboard, options, profile, precomputed) {
1158
1179
  let preparedPublisherAuthProbes = getPreparedTrustedMatchPublisherAuth(options);
1159
1180
  for (const requirement of requires) {
@@ -1192,6 +1213,15 @@ async function checkRequires(requires, storyboard, options, profile, precomputed
1192
1213
  }
1193
1214
  case "real_wire":
1194
1215
  break;
1216
+ case "property_list_reference_runner": {
1217
+ if (propertyListReferenceNeedsMcp(options)) {
1218
+ return {
1219
+ requirement,
1220
+ detail: "Credential-isolated property-list references currently require MCP; A2A probe coverage is unavailable."
1221
+ };
1222
+ }
1223
+ break;
1224
+ }
1195
1225
  case "webhook_receiver": {
1196
1226
  if (options.webhook_receiver === void 0) {
1197
1227
  return {
@@ -1481,7 +1511,7 @@ function collectCapabilityNotices(storyboard, profile) {
1481
1511
  if (requestSigning?.["supported"] !== true) {
1482
1512
  notices.push({
1483
1513
  severity: "future_required",
1484
- code: "request_signing.required",
1514
+ code: "request_signing_required_in_4_0",
1485
1515
  message: "RFC 9421 request signing (`request_signing.supported: true`) is not advertised. Required for spend-committing operations in AdCP 4.0 \u2014 declare the capability and pre-register the runner compliance test keypair before the 4.0 cut.",
1486
1516
  effective_version: "4.0",
1487
1517
  capability_path: "request_signing.supported",
@@ -1502,7 +1532,7 @@ function collectCapabilityNotices(storyboard, profile) {
1502
1532
  if (webhookSigning?.["legacy_hmac_fallback"] === true) {
1503
1533
  notices.push({
1504
1534
  severity: "deprecation",
1505
- code: "webhook_signing.legacy_hmac_fallback.removed",
1535
+ code: "legacy_hmac_fallback_removed_in_4_0",
1506
1536
  message: "`webhook_signing.legacy_hmac_fallback: true` is deprecated and removed in AdCP 4.0. Migrate webhook signature verification to RFC 9421 before the 4.0 cut.",
1507
1537
  effective_version: "4.0",
1508
1538
  capability_path: "webhook_signing.legacy_hmac_fallback",
@@ -2022,16 +2052,118 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
2022
2052
  }
2023
2053
  let seedingPhaseResult = null;
2024
2054
  let seedingFailed = false;
2055
+ let creativeBuildCatalogFailed = false;
2025
2056
  let seedingMissingController = false;
2026
2057
  let seedingUnsupported = false;
2027
2058
  let fixtureUnsatisfied = false;
2028
2059
  let fixtureBindings;
2029
2060
  let fixtureResolutionRecords;
2030
2061
  let fixtureCoverageGap;
2062
+ if (storyboard.creative_build_probe && !skipControllerSeedingForPhaseGates) {
2063
+ let resolution;
2064
+ try {
2065
+ resolution = routingContext || isMultiInstance ? {
2066
+ status: "unsatisfied",
2067
+ detail: `fixture_unsatisfied: creative_format:${storyboard.creative_build_probe.context_prefix}: resolve an independent fixture for each routed or replicated agent in a single-agent run`
2068
+ } : prepareCreativeBuildProbe(
2069
+ profile?.raw_capabilities,
2070
+ storyboard.creative_build_probe,
2071
+ options.test_kit,
2072
+ options.adcpVersion
2073
+ );
2074
+ } catch (error) {
2075
+ await Promise.allSettled([
2076
+ ...webhookReceiver ? [webhookReceiver.close()] : [],
2077
+ ...!callerOwnsClients ? [closeScopedConnections(options.protocol)] : []
2078
+ ]);
2079
+ throw error;
2080
+ }
2081
+ const handle = storyboard.creative_build_probe.context_prefix;
2082
+ fixtureResolutionRecords = [
2083
+ {
2084
+ fixture_type: "creative_format",
2085
+ handle,
2086
+ requirements: resolution.status === "resolved" ? resolution.requirements : [],
2087
+ status: resolution.status,
2088
+ ...resolution.status === "resolved" ? {
2089
+ seller_ids: resolution.capabilityId !== void 0 ? { capability_id: resolution.capabilityId } : { format_id: resolution.formatId }
2090
+ } : {},
2091
+ strategy: "discover",
2092
+ strategies_attempted: [
2093
+ {
2094
+ strategy: "discover",
2095
+ disposition: resolution.status === "unsatisfied" ? "unavailable" : resolution.status,
2096
+ detail: resolution.status === "resolved" ? `Bound build route using ${resolution.source} input` : resolution.detail
2097
+ }
2098
+ ]
2099
+ }
2100
+ ];
2101
+ if (resolution.status !== "resolved") {
2102
+ const noPhasesIndex = phaseResults.findIndex((phase) => phase.phase_id === "no_phases");
2103
+ if (noPhasesIndex >= 0) {
2104
+ skippedCount -= phaseResults[noPhasesIndex].steps.filter((step) => step.skipped).length;
2105
+ phaseResults.splice(noPhasesIndex, 1);
2106
+ }
2107
+ }
2108
+ if (resolution.status === "failed") {
2109
+ seedingFailed = true;
2110
+ creativeBuildCatalogFailed = true;
2111
+ failedCount += 1;
2112
+ seedingPhaseResult = {
2113
+ phase_id: "fixture_resolution",
2114
+ phase_title: "Creative build fixture resolution",
2115
+ passed: false,
2116
+ duration_ms: 0,
2117
+ steps: [
2118
+ {
2119
+ storyboard_id: storyboard.id,
2120
+ phase_id: "fixture_resolution",
2121
+ step_id: "creative_build_catalog",
2122
+ title: "Validate advertised creative build catalog",
2123
+ task: "get_adcp_capabilities",
2124
+ passed: false,
2125
+ duration_ms: 0,
2126
+ context: {},
2127
+ extraction: { path: "none" },
2128
+ validations: [
2129
+ {
2130
+ check: "creative_build_probe_catalog",
2131
+ passed: false,
2132
+ description: "Advertised creative catalog satisfies its format and routing contract",
2133
+ error: resolution.detail
2134
+ }
2135
+ ]
2136
+ }
2137
+ ]
2138
+ };
2139
+ } else if (resolution.status === "resolved") {
2140
+ for (const key of [
2141
+ "capability_id",
2142
+ "target_format_id",
2143
+ "message",
2144
+ "creative_manifest",
2145
+ "creative_id",
2146
+ "transformer_id",
2147
+ "config"
2148
+ ]) {
2149
+ delete context[`${handle}_${key}`];
2150
+ }
2151
+ Object.assign(context, resolution.context);
2152
+ options = { ...options, contracts: [.../* @__PURE__ */ new Set([...options.contracts ?? [], "creative_build_probe_runner"])] };
2153
+ } else {
2154
+ fixtureUnsatisfied = true;
2155
+ if (preSeeded === void 0 || preSeeded.attach) skippedCount += 1;
2156
+ fixtureCoverageGap = {
2157
+ reason: "fixture_unsatisfied",
2158
+ detail: resolution.detail,
2159
+ fixtures: [{ fixture_type: "creative_format", handle, requirements: [] }]
2160
+ };
2161
+ }
2162
+ }
2031
2163
  {
2032
2164
  let seeding;
2033
2165
  try {
2034
- seeding = creativeAssetFixtureGap || skipControllerSeedingForPhaseGates ? null : preSeeded !== void 0 ? preSeeded.result : await runControllerSeeding(
2166
+ seeding = creativeAssetFixtureGap || fixtureUnsatisfied || seedingFailed || skipControllerSeedingForPhaseGates ? null : preSeeded !== void 0 ? preSeeded.result : await runControllerSeeding(
2035
2167
  clients[0],
2036
2168
  storyboard,
2037
2169
  options,
@@ -2092,7 +2224,7 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
2092
2224
  }
2093
2225
  }
2094
2226
  fixtureBindings = seeding.bindings;
2095
- fixtureResolutionRecords = seeding.resolutionRecords;
2227
+ fixtureResolutionRecords = fixtureResolutionRecords ? [...fixtureResolutionRecords, ...seeding.resolutionRecords ?? []] : seeding.resolutionRecords;
2096
2228
  fixtureUnsatisfied = seeding.fixtureUnsatisfied === true && seeding.failedCount === 0;
2097
2229
  if (fixtureUnsatisfied) {
2098
2230
  const noPhasesIndex = phaseResults.findIndex((phase) => phase.phase_id === "no_phases");
@@ -2334,6 +2466,12 @@ async function executeStoryboardPass(agentUrls, storyboard, options, dispatchOff
2334
2466
  } : seedingUnsupported ? {
2335
2467
  skip_reason: "fixture_seed_unsupported",
2336
2468
  skip: { reason: "not_applicable", detail: FIXTURE_SEED_UNSUPPORTED_DETAIL }
2469
+ } : creativeBuildCatalogFailed ? {
2470
+ skip_reason: "prerequisite_failed",
2471
+ skip: {
2472
+ reason: "prerequisite_failed",
2473
+ detail: "Creative build catalog validation failed in fixture_resolution.creative_build_catalog."
2474
+ }
2337
2475
  } : seedingFailed ? {
2338
2476
  skip_reason: "controller_seeding_failed",
2339
2477
  skip: { reason: "prerequisite_failed", detail: CONTROLLER_SEEDING_FAILED_DETAIL }
@@ -3129,32 +3267,57 @@ function summarizeStrictValidation(phases) {
3129
3267
  }
3130
3268
  async function runStoryboardStep(agentUrl, storyboard, stepId, options = {}) {
3131
3269
  options = applyReusableProfileOptions(options);
3132
- return withMCPConnectionScope(
3133
- async () => {
3134
- storyboard = normalizeValidationOnlyTasks(storyboard);
3135
- validateStoryboardShape(storyboard);
3136
- options = applyStoryboardVersionOptions(storyboard, options);
3137
- options = applyFunctionalRequestSigning(options, {
3138
- ...options.complianceDir && { complianceDir: options.complianceDir },
3139
- ...options.adcpVersion && { version: options.adcpVersion }
3140
- });
3141
- options = resolveDeclaredTestKit(storyboard, options);
3142
- options = applyNativeA2AComplianceTransportOptions(options);
3143
- const schemaRoot = getRunSchemaRoot(options);
3144
- const runBody = () => withServedReleaseSchemaRoots(
3145
- options.servedReleaseSchemaRoots,
3146
- () => runStoryboardStepBody(agentUrl, storyboard, stepId, options)
3147
- );
3148
- if (schemaRoot) {
3149
- return await withExternalSchemaRoot(schemaRoot.adcpVersion, schemaRoot.schemaRoot, runBody);
3150
- }
3151
- return await runBody();
3152
- },
3153
- { isolate: !hasTestClientScope() }
3270
+ return withPropertyListCredentialRedaction(
3271
+ () => withMCPConnectionScope(
3272
+ async () => {
3273
+ storyboard = normalizeValidationOnlyTasks(storyboard);
3274
+ validateStoryboardShape(storyboard);
3275
+ options = applyStoryboardVersionOptions(storyboard, options);
3276
+ options = applyFunctionalRequestSigning(options, {
3277
+ ...options.complianceDir && { complianceDir: options.complianceDir },
3278
+ ...options.adcpVersion && { version: options.adcpVersion }
3279
+ });
3280
+ options = resolveDeclaredTestKit(storyboard, options);
3281
+ options = applyNativeA2AComplianceTransportOptions(options);
3282
+ const schemaRoot = getRunSchemaRoot(options);
3283
+ const runBody = () => withServedReleaseSchemaRoots(
3284
+ options.servedReleaseSchemaRoots,
3285
+ () => runStoryboardStepBody(agentUrl, storyboard, stepId, options)
3286
+ );
3287
+ if (schemaRoot) {
3288
+ return await withExternalSchemaRoot(schemaRoot.adcpVersion, schemaRoot.schemaRoot, runBody);
3289
+ }
3290
+ return await runBody();
3291
+ },
3292
+ { isolate: !hasTestClientScope() }
3293
+ )
3154
3294
  );
3155
3295
  }
3156
3296
  async function runStoryboardStepBody(agentUrl, storyboard, stepId, options) {
3157
3297
  validateTestKit(options.test_kit);
3298
+ if (storyboard.requires?.[0] === "property_list_reference_runner" && storyboardCapabilityPredicates(storyboard).length === 0 && propertyListReferenceNeedsMcp(options)) {
3299
+ const found2 = flattenSteps(storyboard).find((entry) => entry.step.id === stepId);
3300
+ if (!found2) throw new Error(`Step "${stepId}" not found in storyboard "${storyboard.id}".`);
3301
+ return {
3302
+ storyboard_id: storyboard.id,
3303
+ step_id: stepId,
3304
+ phase_id: found2.phaseId,
3305
+ title: found2.step.title,
3306
+ task: found2.step.task,
3307
+ passed: true,
3308
+ skipped: true,
3309
+ skip_reason: "requirement_unmet",
3310
+ skip: {
3311
+ reason: "requirement_unmet",
3312
+ requirement: "property_list_reference_runner",
3313
+ detail: "Credential-isolated property-list references currently require MCP; A2A probe coverage is unavailable."
3314
+ },
3315
+ duration_ms: 0,
3316
+ validations: [],
3317
+ context: { ...storyboard.context, ...options.context },
3318
+ extraction: { path: "none" }
3319
+ };
3320
+ }
3158
3321
  const clientResolution = getOrCreateClientResolution(agentUrl, options);
3159
3322
  const client = clientResolution.client;
3160
3323
  let profile;
@@ -3205,6 +3368,77 @@ async function runStoryboardStepBody(agentUrl, storyboard, stepId, options) {
3205
3368
  return result;
3206
3369
  }
3207
3370
  }
3371
+ if (storyboard.creative_build_probe) {
3372
+ let resolution;
3373
+ try {
3374
+ resolution = prepareCreativeBuildProbe(
3375
+ profile?.raw_capabilities,
3376
+ storyboard.creative_build_probe,
3377
+ options.test_kit,
3378
+ options.adcpVersion
3379
+ );
3380
+ } catch (error) {
3381
+ if (!clientResolution.reusedShared) {
3382
+ await Promise.allSettled([closeScopedConnections(options.protocol)]);
3383
+ }
3384
+ throw error;
3385
+ }
3386
+ if (resolution.status === "failed") {
3387
+ if (!clientResolution.reusedShared) await closeScopedConnections(options.protocol);
3388
+ return {
3389
+ storyboard_id: storyboard.id,
3390
+ step_id: found.step.id,
3391
+ phase_id: found.phaseId,
3392
+ title: found.step.title,
3393
+ task: found.step.task,
3394
+ passed: false,
3395
+ duration_ms: 0,
3396
+ validations: [
3397
+ {
3398
+ check: "creative_build_probe_catalog",
3399
+ passed: false,
3400
+ description: "Advertised creative catalog satisfies its format and routing contract",
3401
+ error: resolution.detail
3402
+ }
3403
+ ],
3404
+ context,
3405
+ extraction: { path: "none" },
3406
+ contributions: Array.from(options.contributions ?? [])
3407
+ };
3408
+ }
3409
+ if (resolution.status === "unsatisfied") {
3410
+ if (!clientResolution.reusedShared) await closeScopedConnections(options.protocol);
3411
+ return {
3412
+ storyboard_id: storyboard.id,
3413
+ step_id: found.step.id,
3414
+ phase_id: found.phaseId,
3415
+ title: found.step.title,
3416
+ task: found.step.task,
3417
+ passed: true,
3418
+ skipped: true,
3419
+ skip_reason: "fixture_unsatisfied",
3420
+ skip: { reason: "not_applicable", detail: resolution.detail },
3421
+ duration_ms: 0,
3422
+ validations: [],
3423
+ context,
3424
+ extraction: { path: "none" },
3425
+ contributions: Array.from(options.contributions ?? [])
3426
+ };
3427
+ }
3428
+ for (const key of [
3429
+ "capability_id",
3430
+ "target_format_id",
3431
+ "message",
3432
+ "creative_manifest",
3433
+ "creative_id",
3434
+ "transformer_id",
3435
+ "config"
3436
+ ]) {
3437
+ delete context[`${storyboard.creative_build_probe.context_prefix}_${key}`];
3438
+ }
3439
+ Object.assign(context, resolution.context);
3440
+ options = { ...options, contracts: [.../* @__PURE__ */ new Set([...options.contracts ?? [], "creative_build_probe_runner"])] };
3441
+ }
3208
3442
  const injectedReceiver = options._webhookReceiver;
3209
3443
  const webhookReceiver = injectedReceiver ?? (options.webhook_receiver ? await createWebhookReceiver({
3210
3444
  ...options.webhook_receiver.mode && { mode: options.webhook_receiver.mode },
@@ -3986,6 +4220,10 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
3986
4220
  }
3987
4221
  }
3988
4222
  const effectiveRequestUrl = requestUrl ?? runState.agentUrl;
4223
+ rememberPropertyListCredentials(
4224
+ taskResult?.data ?? (caughtError instanceof ResponseSchemaValidationError ? caughtError.data : void 0),
4225
+ (step.validations ?? []).flatMap((validation) => validation.auth_token_path ? [validation.auth_token_path] : [])
4226
+ );
3989
4227
  const requestRecord = {
3990
4228
  transport: options.protocol === "a2a" ? "a2a" : "mcp",
3991
4229
  operation: effectiveStep.task,
@@ -4172,6 +4410,9 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
4172
4410
  (av) => injectContext({ __v: av }, context, runState.runnerVars).__v
4173
4411
  );
4174
4412
  }
4413
+ if (resolved.denied_list_id !== void 0) {
4414
+ resolved.denied_list_id = injectContext({ value: resolved.denied_list_id }, context, runState.runnerVars).value;
4415
+ }
4175
4416
  return resolved;
4176
4417
  });
4177
4418
  const upstreamTraffic = await prefetchUpstreamTraffic(
@@ -4216,7 +4457,30 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
4216
4457
  };
4217
4458
  })()
4218
4459
  };
4219
- validations = runValidations(resolvedValidations, vctx);
4460
+ validations = runValidations(
4461
+ resolvedValidations.filter((validation) => validation.check !== "property_list_reference"),
4462
+ vctx
4463
+ );
4464
+ for (const validation of resolvedValidations.filter((validation2) => validation2.check === "property_list_reference")) {
4465
+ const result = effectiveStep.task !== "create_property_list" || !validationTaskResult?.success ? {
4466
+ check: validation.check,
4467
+ passed: false,
4468
+ description: validation.description,
4469
+ error: "property_list_reference requires a successful create_property_list response."
4470
+ } : options.protocol === "a2a" ? {
4471
+ check: validation.check,
4472
+ passed: false,
4473
+ description: validation.description,
4474
+ error: "Credential-isolated reference resolution requires MCP."
4475
+ } : await verifyPropertyListReference(validation, validationTaskResult.data, {
4476
+ agentUrl: client.getDiscoveredMcpEndpoint?.() ?? runState.agentUrl,
4477
+ version: options.adcpVersion ?? options._serverAdcpVersion,
4478
+ signal: options.signal,
4479
+ allowHttp: options.allow_http,
4480
+ redactValues: runCredentialValues(options)
4481
+ });
4482
+ validations.push(decorateValidationResult(result, vctx, validation));
4483
+ }
4220
4484
  if (crossResponses && crossResponses.dispatches.length > 1) {
4221
4485
  const perResponseValidations = resolvedValidations.filter(
4222
4486
  (v) => v.check !== "cross_response_field_equal" && v.check !== "cross_response_count_distinct"
@@ -1,3 +1,4 @@
1
+ import type { CreativeBuildProbeSpec } from './creative-build-probe.mjs';
1
2
  /**
2
3
  * Types for storyboard-driven testing.
3
4
  *
@@ -269,6 +270,8 @@ export interface Storyboard {
269
270
  * Omitted handles retain the compatibility strategy `["seed"]`.
270
271
  */
271
272
  fixture_resolution?: StoryboardFixtureResolution;
273
+ /** Opt-in runner preparation; does not add an agent protocol capability. */
274
+ creative_build_probe?: CreativeBuildProbeSpec;
272
275
  /**
273
276
  * Initial context values declared by the storyboard YAML. Runner callers may
274
277
  * override these defaults with `StoryboardRunOptions.context`.
@@ -475,7 +478,7 @@ export interface FixtureResolutionAttempt {
475
478
  export type FixtureResolutionEvidence = FixtureResolutionAttempt;
476
479
  /** Machine-readable record emitted exactly once for every fixture handle. */
477
480
  export interface FixtureResolutionRecord {
478
- fixture_type: 'product' | 'pricing_option';
481
+ fixture_type: 'product' | 'pricing_option' | 'creative_format';
479
482
  handle: string;
480
483
  product_handle?: string;
481
484
  requirements: FixtureMatchClause[];
@@ -483,8 +486,10 @@ export interface FixtureResolutionRecord {
483
486
  status: FixtureResolutionStatus;
484
487
  strategy?: FixtureResolutionStrategy;
485
488
  seller_ids?: {
486
- product_id: string;
489
+ product_id?: string;
487
490
  pricing_option_id?: string;
491
+ capability_id?: string;
492
+ format_id?: Record<string, unknown>;
488
493
  };
489
494
  }
490
495
  /** One storyboard-scoped coverage gap produced by fixture resolution. */
@@ -890,7 +895,10 @@ export interface RateLimitTripSpec {
890
895
  /** Maximum retry_after wait the runner will honor. Defaults to 30 seconds. */
891
896
  replay_max_wait_seconds?: number;
892
897
  }
893
- export type StoryboardValidationCheck = 'response_schema' | 'field_present' | 'field_absent' | 'envelope_field_present' | 'envelope_field_absent' | 'envelope_field_value' | 'envelope_field_value_or_absent' | 'field_value' | 'field_value_or_absent'
898
+ export type StoryboardValidationCheck = 'response_schema' | 'field_present'
899
+ /** Every item carries a non-null field at `array[*].field`; absent, null,
900
+ * or empty arrays grade not_applicable rather than passing vacuously. */
901
+ | 'all_fields_present' | 'field_absent' | 'envelope_field_present' | 'envelope_field_absent' | 'envelope_field_value' | 'envelope_field_value_or_absent' | 'field_value' | 'field_value_or_absent'
894
902
  /**
895
903
  * Assert that a string field in the task payload matches a JavaScript
896
904
  * regular expression source declared in `pattern`. Fails when the path is
@@ -1042,7 +1050,7 @@ export type StoryboardValidationCheck = 'response_schema' | 'field_present' | 'f
1042
1050
  * class: normalization, directionality, or range containment. Added for
1043
1051
  * adcp-client#2060.
1044
1052
  */
1045
- | 'canonical_format_satisfaction'
1053
+ | 'canonical_format_satisfaction' | 'property_list_reference'
1046
1054
  /**
1047
1055
  * Assert the cardinality of the array at `path`. Two configurations are
1048
1056
  * supported: exact-count via `value: N` (passes only when the resolved
@@ -1230,6 +1238,23 @@ export interface RefsResolveScope {
1230
1238
  equals: string;
1231
1239
  }
1232
1240
  export interface StoryboardValidation {
1241
+ /** Managing endpoint; $agent_url uses the issuer's discovered MCP endpoint (adcp#8289). */
1242
+ agent_url?: string;
1243
+ /** Creation-response path to the issued list ID. Defaults to list.list_id. */
1244
+ list_id_path?: string;
1245
+ /** Creation-response path to the read-only credential. Defaults to auth_token. */
1246
+ auth_token_path?: string;
1247
+ /** Existing owner-created control list; accepts a resolved $context.<key>. */
1248
+ denied_list_id?: string;
1249
+ /** Maximum identifiers requested per page, 1 through 10000. Required by the probe. */
1250
+ page_size?: number;
1251
+ /** Maximum pages to traverse, 1 through 100. Required by the probe. */
1252
+ max_pages?: number;
1253
+ /** Exact unordered snapshot, compared by (type, value). Required by the probe. */
1254
+ expected_identifiers?: Array<{
1255
+ type: string;
1256
+ value: string;
1257
+ }>;
1233
1258
  /** Stable authored validation identifier echoed into runner results when present. */
1234
1259
  id?: string;
1235
1260
  /** Known validation kind, or a future string graded not_applicable by older runners. */
@@ -2152,7 +2177,7 @@ export interface RunnerSelectionResult {
2152
2177
  *
2153
2178
  * Spec: adcp-client#1626, adcp-client#2281, adcp-client#2356.
2154
2179
  */
2155
- export type RequirementName = 'controller' | 'seeded_state' | 'real_wire' | 'webhook_receiver' | 'webhook_replay_receiver' | 'trusted_match_context_router_runner' | 'trusted_match_publisher_auth_runner' | 'request_signer' | 'multi_agent';
2180
+ export type RequirementName = 'controller' | 'seeded_state' | 'real_wire' | 'webhook_receiver' | 'webhook_replay_receiver' | 'trusted_match_context_router_runner' | 'trusted_match_publisher_auth_runner' | 'property_list_reference_runner' | 'request_signer' | 'multi_agent';
2156
2181
  /**
2157
2182
  * Enumeration of every requirement this SDK knows how to satisfy. The loader
2158
2183
  * accepts other non-empty strings for forward compatibility; the runner treats
@@ -2180,12 +2205,9 @@ export interface SchemaValidationError {
2180
2205
  * a deprecation or future-required advisory is the kind of thing a CI
2181
2206
  * gate or dashboard SHOULD have explicit handling for.
2182
2207
  *
2183
- * Code naming generally follows the dot-namespaced convention `<topic>.<event>`
2184
- * (e.g. `request_signing.required`, `webhook_signing.legacy_hmac_fallback.removed`);
2185
- * prefer the upstream runner-output contract's canonical code when it
2186
- * registers a different spelling. The *when* lives in the `effective_version`
2187
- * field, never in the code. This keeps the surface stable across spec versions
2188
- * — codes don't proliferate `_in_4_0` / `_in_5_0` siblings as the spec evolves.
2208
+ * Use the upstream runner-output contract's canonical codes so consumers can
2209
+ * aggregate the same advisory across runners. Keep each code stable for the
2210
+ * same advisory, including its version suffix where the contract defines one.
2189
2211
  *
2190
2212
  * Adding a new code is a wire-surface change AND a TypeScript breaking
2191
2213
  * change for adopters who narrowed on `code`. Coordinate with the upstream
@@ -2199,10 +2221,10 @@ export type NoticeCode =
2199
2221
  'signed_requests_specialism_deprecated'
2200
2222
  /** Agent lacks `request_signing.supported: true`. Required for spend-committing
2201
2223
  * operations in AdCP 4.0 per `effective_version`. */
2202
- | 'request_signing.required'
2224
+ | 'request_signing_required_in_4_0'
2203
2225
  /** Agent advertises `webhook_signing.legacy_hmac_fallback: true`. Removed in
2204
2226
  * AdCP 4.0 per `effective_version`. */
2205
- | 'webhook_signing.legacy_hmac_fallback.removed'
2227
+ | 'legacy_hmac_fallback_removed_in_4_0'
2206
2228
  /** Runner stripped request fields missing from the agent's advertised tool input schema. */
2207
2229
  | 'input_schema_field_stripped'
2208
2230
  /** The preflight get_adcp_capabilities response failed schema validation. */
@@ -2310,9 +2332,9 @@ export interface ValidationResult {
2310
2332
  /** Optional remediation hint. */
2311
2333
  remediation?: string;
2312
2334
  /**
2313
- * Marker for an implemented check whose declared applicability conditions
2314
- * were not met. Unknown authored check kinds fail closed; they never set
2315
- * this flag or contribute a false green result. Entries carrying this flag
2335
+ * Marker for a check that could not be graded because its applicability
2336
+ * conditions were not met or the runner does not recognize its authored kind.
2337
+ * Entries carrying this flag
2316
2338
  * contribute to `validations_not_applicable` so consumers can distinguish
2317
2339
  * inapplicable coverage from clean passes.
2318
2340
  */