@adcp/sdk 12.1.0 → 13.0.0-rc.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 (464) hide show
  1. package/README.md +19 -3
  2. package/bin/adcp-fuzz.js +3 -1
  3. package/dist/lib/adapters/content-standards-adapter.d.mts +9 -9
  4. package/dist/lib/adapters/content-standards-adapter.d.ts +9 -9
  5. package/dist/lib/adapters/content-standards-adapter.d.ts.map +1 -1
  6. package/dist/lib/adapters/content-standards-adapter.js +22 -22
  7. package/dist/lib/adapters/content-standards-adapter.js.map +1 -1
  8. package/dist/lib/adapters/content-standards-adapter.mjs +18 -18
  9. package/dist/lib/adapters/content-standards-adapter.mjs.map +1 -1
  10. package/dist/lib/adapters/index.d.mts +2 -2
  11. package/dist/lib/adapters/index.d.ts +2 -2
  12. package/dist/lib/adapters/index.d.ts.map +1 -1
  13. package/dist/lib/adapters/index.js +10 -10
  14. package/dist/lib/adapters/index.js.map +1 -1
  15. package/dist/lib/adapters/index.mjs +9 -9
  16. package/dist/lib/adapters/index.mjs.map +1 -1
  17. package/dist/lib/auth/oauth/authorization-required.d.mts +3 -0
  18. package/dist/lib/auth/oauth/authorization-required.d.ts +3 -0
  19. package/dist/lib/auth/oauth/authorization-required.d.ts.map +1 -1
  20. package/dist/lib/auth/oauth/authorization-required.js +12 -9
  21. package/dist/lib/auth/oauth/authorization-required.js.map +1 -1
  22. package/dist/lib/auth/oauth/authorization-required.mjs +12 -9
  23. package/dist/lib/auth/oauth/authorization-required.mjs.map +1 -1
  24. package/dist/lib/auth/oauth/provider-cache.d.mts +7 -0
  25. package/dist/lib/auth/oauth/provider-cache.d.ts +8 -0
  26. package/dist/lib/auth/oauth/provider-cache.d.ts.map +1 -0
  27. package/dist/lib/auth/oauth/provider-cache.js +44 -0
  28. package/dist/lib/auth/oauth/provider-cache.js.map +1 -0
  29. package/dist/lib/auth/oauth/provider-cache.mjs +19 -0
  30. package/dist/lib/auth/oauth/provider-cache.mjs.map +1 -0
  31. package/dist/lib/conformance/invariants/uniformError.js +1 -1
  32. package/dist/lib/conformance/invariants/uniformError.js.map +1 -1
  33. package/dist/lib/conformance/invariants/uniformError.mjs +1 -1
  34. package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
  35. package/dist/lib/conformance/runners.js +1 -1
  36. package/dist/lib/conformance/runners.js.map +1 -1
  37. package/dist/lib/conformance/runners.mjs +1 -1
  38. package/dist/lib/conformance/runners.mjs.map +1 -1
  39. package/dist/lib/conformance/seeder.js +5 -5
  40. package/dist/lib/conformance/seeder.js.map +1 -1
  41. package/dist/lib/conformance/seeder.mjs +5 -5
  42. package/dist/lib/conformance/seeder.mjs.map +1 -1
  43. package/dist/lib/core/ADCPMultiAgentClient.d.mts +26 -29
  44. package/dist/lib/core/ADCPMultiAgentClient.d.ts +26 -29
  45. package/dist/lib/core/ADCPMultiAgentClient.d.ts.map +1 -1
  46. package/dist/lib/core/ADCPMultiAgentClient.js +27 -19
  47. package/dist/lib/core/ADCPMultiAgentClient.js.map +1 -1
  48. package/dist/lib/core/ADCPMultiAgentClient.mjs +27 -19
  49. package/dist/lib/core/ADCPMultiAgentClient.mjs.map +1 -1
  50. package/dist/lib/core/AgentClient.d.mts +148 -138
  51. package/dist/lib/core/AgentClient.d.ts +148 -138
  52. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  53. package/dist/lib/core/AgentClient.js +174 -85
  54. package/dist/lib/core/AgentClient.js.map +1 -1
  55. package/dist/lib/core/AgentClient.mjs +174 -85
  56. package/dist/lib/core/AgentClient.mjs.map +1 -1
  57. package/dist/lib/core/AsyncHandler.d.mts +18 -16
  58. package/dist/lib/core/AsyncHandler.d.ts +18 -16
  59. package/dist/lib/core/AsyncHandler.d.ts.map +1 -1
  60. package/dist/lib/core/AsyncHandler.js +22 -1
  61. package/dist/lib/core/AsyncHandler.js.map +1 -1
  62. package/dist/lib/core/AsyncHandler.mjs +22 -1
  63. package/dist/lib/core/AsyncHandler.mjs.map +1 -1
  64. package/dist/lib/core/ConversationTypes.d.mts +6 -2
  65. package/dist/lib/core/ConversationTypes.d.ts +6 -2
  66. package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
  67. package/dist/lib/core/ConversationTypes.js.map +1 -1
  68. package/dist/lib/core/CreativeAgentClient.d.mts +41 -17
  69. package/dist/lib/core/CreativeAgentClient.d.ts +41 -17
  70. package/dist/lib/core/CreativeAgentClient.d.ts.map +1 -1
  71. package/dist/lib/core/CreativeAgentClient.js +39 -12
  72. package/dist/lib/core/CreativeAgentClient.js.map +1 -1
  73. package/dist/lib/core/CreativeAgentClient.mjs +39 -12
  74. package/dist/lib/core/CreativeAgentClient.mjs.map +1 -1
  75. package/dist/lib/core/SingleAgentClient.d.mts +129 -52
  76. package/dist/lib/core/SingleAgentClient.d.ts +129 -52
  77. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  78. package/dist/lib/core/SingleAgentClient.js +1748 -218
  79. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  80. package/dist/lib/core/SingleAgentClient.mjs +1758 -218
  81. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  82. package/dist/lib/core/TaskExecutor.d.mts +9 -0
  83. package/dist/lib/core/TaskExecutor.d.ts +9 -0
  84. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  85. package/dist/lib/core/TaskExecutor.js +137 -44
  86. package/dist/lib/core/TaskExecutor.js.map +1 -1
  87. package/dist/lib/core/TaskExecutor.mjs +137 -44
  88. package/dist/lib/core/TaskExecutor.mjs.map +1 -1
  89. package/dist/lib/index.d.mts +111 -17
  90. package/dist/lib/index.d.ts +111 -17
  91. package/dist/lib/index.d.ts.map +1 -1
  92. package/dist/lib/index.js +94 -94
  93. package/dist/lib/index.js.map +1 -1
  94. package/dist/lib/index.mjs +93 -94
  95. package/dist/lib/index.mjs.map +1 -1
  96. package/dist/lib/net/ssrf-fetch.d.mts +13 -1
  97. package/dist/lib/net/ssrf-fetch.d.ts +13 -1
  98. package/dist/lib/net/ssrf-fetch.d.ts.map +1 -1
  99. package/dist/lib/net/ssrf-fetch.js +14 -7
  100. package/dist/lib/net/ssrf-fetch.js.map +1 -1
  101. package/dist/lib/net/ssrf-fetch.mjs +14 -7
  102. package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
  103. package/dist/lib/protocols/a2a.d.mts +2 -2
  104. package/dist/lib/protocols/a2a.d.ts +2 -2
  105. package/dist/lib/protocols/a2a.d.ts.map +1 -1
  106. package/dist/lib/protocols/a2a.js +14 -9
  107. package/dist/lib/protocols/a2a.js.map +1 -1
  108. package/dist/lib/protocols/a2a.mjs +14 -9
  109. package/dist/lib/protocols/a2a.mjs.map +1 -1
  110. package/dist/lib/protocols/index.d.mts +20 -3
  111. package/dist/lib/protocols/index.d.ts +20 -3
  112. package/dist/lib/protocols/index.d.ts.map +1 -1
  113. package/dist/lib/protocols/index.js +44 -31
  114. package/dist/lib/protocols/index.js.map +1 -1
  115. package/dist/lib/protocols/index.mjs +44 -32
  116. package/dist/lib/protocols/index.mjs.map +1 -1
  117. package/dist/lib/protocols/mcp-modern.d.ts.map +1 -1
  118. package/dist/lib/protocols/mcp-modern.js +87 -12
  119. package/dist/lib/protocols/mcp-modern.js.map +1 -1
  120. package/dist/lib/protocols/mcp-modern.mjs +89 -12
  121. package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
  122. package/dist/lib/protocols/mcp-tasks.d.mts +3 -0
  123. package/dist/lib/protocols/mcp-tasks.d.ts +3 -0
  124. package/dist/lib/protocols/mcp-tasks.d.ts.map +1 -1
  125. package/dist/lib/protocols/mcp-tasks.js +21 -11
  126. package/dist/lib/protocols/mcp-tasks.js.map +1 -1
  127. package/dist/lib/protocols/mcp-tasks.mjs +21 -11
  128. package/dist/lib/protocols/mcp-tasks.mjs.map +1 -1
  129. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  130. package/dist/lib/server/create-adcp-server.d.mts +6 -0
  131. package/dist/lib/server/create-adcp-server.d.ts +6 -0
  132. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  133. package/dist/lib/server/create-adcp-server.js +295 -48
  134. package/dist/lib/server/create-adcp-server.js.map +1 -1
  135. package/dist/lib/server/create-adcp-server.mjs +301 -50
  136. package/dist/lib/server/create-adcp-server.mjs.map +1 -1
  137. package/dist/lib/server/decisioning/assembly-helpers.d.mts +27 -13
  138. package/dist/lib/server/decisioning/assembly-helpers.d.ts +27 -13
  139. package/dist/lib/server/decisioning/assembly-helpers.d.ts.map +1 -1
  140. package/dist/lib/server/decisioning/assembly-helpers.js +136 -14
  141. package/dist/lib/server/decisioning/assembly-helpers.js.map +1 -1
  142. package/dist/lib/server/decisioning/assembly-helpers.mjs +134 -13
  143. package/dist/lib/server/decisioning/assembly-helpers.mjs.map +1 -1
  144. package/dist/lib/server/decisioning/index.d.mts +13 -12
  145. package/dist/lib/server/decisioning/index.d.ts +13 -12
  146. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  147. package/dist/lib/server/decisioning/index.js +6 -0
  148. package/dist/lib/server/decisioning/index.js.map +1 -1
  149. package/dist/lib/server/decisioning/index.mjs +9 -3
  150. package/dist/lib/server/decisioning/index.mjs.map +1 -1
  151. package/dist/lib/server/decisioning/list-helpers.d.mts +13 -3
  152. package/dist/lib/server/decisioning/list-helpers.d.ts +13 -3
  153. package/dist/lib/server/decisioning/list-helpers.d.ts.map +1 -1
  154. package/dist/lib/server/decisioning/list-helpers.js +13 -3
  155. package/dist/lib/server/decisioning/list-helpers.js.map +1 -1
  156. package/dist/lib/server/decisioning/list-helpers.mjs +11 -2
  157. package/dist/lib/server/decisioning/list-helpers.mjs.map +1 -1
  158. package/dist/lib/server/decisioning/manifest-helpers.d.mts +5 -3
  159. package/dist/lib/server/decisioning/manifest-helpers.d.ts +5 -3
  160. package/dist/lib/server/decisioning/manifest-helpers.d.ts.map +1 -1
  161. package/dist/lib/server/decisioning/manifest-helpers.js.map +1 -1
  162. package/dist/lib/server/decisioning/manifest-helpers.mjs.map +1 -1
  163. package/dist/lib/server/decisioning/proposal/dispatch.d.mts +2 -2
  164. package/dist/lib/server/decisioning/proposal/dispatch.d.ts +2 -2
  165. package/dist/lib/server/decisioning/proposal/dispatch.d.ts.map +1 -1
  166. package/dist/lib/server/decisioning/proposal/dispatch.js.map +1 -1
  167. package/dist/lib/server/decisioning/proposal/dispatch.mjs.map +1 -1
  168. package/dist/lib/server/decisioning/proposal/index.d.mts +1 -1
  169. package/dist/lib/server/decisioning/proposal/index.d.ts +1 -1
  170. package/dist/lib/server/decisioning/proposal/index.d.ts.map +1 -1
  171. package/dist/lib/server/decisioning/proposal/index.js.map +1 -1
  172. package/dist/lib/server/decisioning/proposal/index.mjs.map +1 -1
  173. package/dist/lib/server/decisioning/proposal/lifecycle.d.mts +3 -2
  174. package/dist/lib/server/decisioning/proposal/lifecycle.d.ts +3 -2
  175. package/dist/lib/server/decisioning/proposal/lifecycle.d.ts.map +1 -1
  176. package/dist/lib/server/decisioning/proposal/lifecycle.js.map +1 -1
  177. package/dist/lib/server/decisioning/proposal/lifecycle.mjs.map +1 -1
  178. package/dist/lib/server/decisioning/proposal/mock-manager.d.mts +3 -3
  179. package/dist/lib/server/decisioning/proposal/mock-manager.d.ts +3 -3
  180. package/dist/lib/server/decisioning/proposal/mock-manager.d.ts.map +1 -1
  181. package/dist/lib/server/decisioning/proposal/mock-manager.js.map +1 -1
  182. package/dist/lib/server/decisioning/proposal/mock-manager.mjs.map +1 -1
  183. package/dist/lib/server/decisioning/proposal/types.d.mts +10 -6
  184. package/dist/lib/server/decisioning/proposal/types.d.ts +10 -6
  185. package/dist/lib/server/decisioning/proposal/types.d.ts.map +1 -1
  186. package/dist/lib/server/decisioning/proposal/types.js.map +1 -1
  187. package/dist/lib/server/decisioning/proposal/types.mjs.map +1 -1
  188. package/dist/lib/server/decisioning/runtime/from-platform.d.mts +21 -2
  189. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +21 -2
  190. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  191. package/dist/lib/server/decisioning/runtime/from-platform.js +754 -81
  192. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  193. package/dist/lib/server/decisioning/runtime/from-platform.mjs +763 -81
  194. package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
  195. package/dist/lib/server/decisioning/specialisms/brand-rights.d.mts +9 -9
  196. package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts +9 -9
  197. package/dist/lib/server/decisioning/specialisms/brand-rights.d.ts.map +1 -1
  198. package/dist/lib/server/decisioning/specialisms/brand-rights.js.map +1 -1
  199. package/dist/lib/server/decisioning/specialisms/content-standards.d.mts +16 -16
  200. package/dist/lib/server/decisioning/specialisms/content-standards.d.ts +16 -16
  201. package/dist/lib/server/decisioning/specialisms/content-standards.d.ts.map +1 -1
  202. package/dist/lib/server/decisioning/specialisms/content-standards.js.map +1 -1
  203. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.mts +15 -13
  204. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts +15 -13
  205. package/dist/lib/server/decisioning/specialisms/creative-ad-server.d.ts.map +1 -1
  206. package/dist/lib/server/decisioning/specialisms/creative-ad-server.js.map +1 -1
  207. package/dist/lib/server/decisioning/specialisms/creative.d.mts +12 -11
  208. package/dist/lib/server/decisioning/specialisms/creative.d.ts +12 -11
  209. package/dist/lib/server/decisioning/specialisms/creative.d.ts.map +1 -1
  210. package/dist/lib/server/decisioning/specialisms/creative.js.map +1 -1
  211. package/dist/lib/server/decisioning/specialisms/sales.d.mts +25 -15
  212. package/dist/lib/server/decisioning/specialisms/sales.d.ts +25 -15
  213. package/dist/lib/server/decisioning/specialisms/sales.d.ts.map +1 -1
  214. package/dist/lib/server/decisioning/specialisms/sales.js.map +1 -1
  215. package/dist/lib/server/index.d.mts +3 -3
  216. package/dist/lib/server/index.d.ts +3 -3
  217. package/dist/lib/server/index.d.ts.map +1 -1
  218. package/dist/lib/server/index.js +72 -72
  219. package/dist/lib/server/index.js.map +1 -1
  220. package/dist/lib/server/index.mjs +36 -36
  221. package/dist/lib/server/index.mjs.map +1 -1
  222. package/dist/lib/server/legacy/v5/index.d.mts +1 -0
  223. package/dist/lib/server/legacy/v5/index.d.ts +1 -0
  224. package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
  225. package/dist/lib/server/legacy/v5/index.js +74 -1
  226. package/dist/lib/server/legacy/v5/index.js.map +1 -1
  227. package/dist/lib/server/legacy/v5/index.mjs +75 -1
  228. package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
  229. package/dist/lib/server/responses.d.mts +2 -2
  230. package/dist/lib/server/responses.d.ts +2 -2
  231. package/dist/lib/server/responses.js.map +1 -1
  232. package/dist/lib/server/responses.mjs.map +1 -1
  233. package/dist/lib/testing/client.d.ts.map +1 -1
  234. package/dist/lib/testing/client.js +13 -5
  235. package/dist/lib/testing/client.js.map +1 -1
  236. package/dist/lib/testing/client.mjs +13 -5
  237. package/dist/lib/testing/client.mjs.map +1 -1
  238. package/dist/lib/testing/compliance/comply.d.mts +1 -1
  239. package/dist/lib/testing/compliance/comply.d.ts +1 -1
  240. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  241. package/dist/lib/testing/compliance/comply.js +16 -6
  242. package/dist/lib/testing/compliance/comply.js.map +1 -1
  243. package/dist/lib/testing/compliance/comply.mjs +16 -6
  244. package/dist/lib/testing/compliance/comply.mjs.map +1 -1
  245. package/dist/lib/testing/scenarios/brand-rights.js +6 -6
  246. package/dist/lib/testing/scenarios/brand-rights.js.map +1 -1
  247. package/dist/lib/testing/scenarios/brand-rights.mjs +6 -6
  248. package/dist/lib/testing/scenarios/brand-rights.mjs.map +1 -1
  249. package/dist/lib/testing/scenarios/creative.js +7 -7
  250. package/dist/lib/testing/scenarios/creative.js.map +1 -1
  251. package/dist/lib/testing/scenarios/creative.mjs +7 -7
  252. package/dist/lib/testing/scenarios/creative.mjs.map +1 -1
  253. package/dist/lib/testing/scenarios/discovery.js +2 -2
  254. package/dist/lib/testing/scenarios/discovery.js.map +1 -1
  255. package/dist/lib/testing/scenarios/discovery.mjs +2 -2
  256. package/dist/lib/testing/scenarios/discovery.mjs.map +1 -1
  257. package/dist/lib/testing/scenarios/edge-cases.js +11 -11
  258. package/dist/lib/testing/scenarios/edge-cases.js.map +1 -1
  259. package/dist/lib/testing/scenarios/edge-cases.mjs +11 -11
  260. package/dist/lib/testing/scenarios/edge-cases.mjs.map +1 -1
  261. package/dist/lib/testing/scenarios/governance.d.ts.map +1 -1
  262. package/dist/lib/testing/scenarios/governance.js +16 -22
  263. package/dist/lib/testing/scenarios/governance.js.map +1 -1
  264. package/dist/lib/testing/scenarios/governance.mjs +16 -22
  265. package/dist/lib/testing/scenarios/governance.mjs.map +1 -1
  266. package/dist/lib/testing/scenarios/media-buy.js +5 -5
  267. package/dist/lib/testing/scenarios/media-buy.js.map +1 -1
  268. package/dist/lib/testing/scenarios/media-buy.mjs +5 -5
  269. package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
  270. package/dist/lib/testing/scenarios/schema-compliance.js +1 -1
  271. package/dist/lib/testing/scenarios/schema-compliance.js.map +1 -1
  272. package/dist/lib/testing/scenarios/schema-compliance.mjs +1 -1
  273. package/dist/lib/testing/scenarios/schema-compliance.mjs.map +1 -1
  274. package/dist/lib/testing/scenarios/trusted-match.d.ts.map +1 -1
  275. package/dist/lib/testing/scenarios/trusted-match.js +4 -3
  276. package/dist/lib/testing/scenarios/trusted-match.js.map +1 -1
  277. package/dist/lib/testing/scenarios/trusted-match.mjs +4 -3
  278. package/dist/lib/testing/scenarios/trusted-match.mjs.map +1 -1
  279. package/dist/lib/testing/storyboard/probes.d.mts +6 -0
  280. package/dist/lib/testing/storyboard/probes.d.ts +6 -0
  281. package/dist/lib/testing/storyboard/probes.d.ts.map +1 -1
  282. package/dist/lib/testing/storyboard/probes.js +16 -5
  283. package/dist/lib/testing/storyboard/probes.js.map +1 -1
  284. package/dist/lib/testing/storyboard/probes.mjs +16 -5
  285. package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
  286. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  287. package/dist/lib/testing/storyboard/runner.js +6 -2
  288. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  289. package/dist/lib/testing/storyboard/runner.mjs +6 -2
  290. package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
  291. package/dist/lib/testing/storyboard/shape-drift-hints.d.mts +3 -4
  292. package/dist/lib/testing/storyboard/shape-drift-hints.d.ts +3 -4
  293. package/dist/lib/testing/storyboard/shape-drift-hints.d.ts.map +1 -1
  294. package/dist/lib/testing/storyboard/shape-drift-hints.js +27 -27
  295. package/dist/lib/testing/storyboard/shape-drift-hints.js.map +1 -1
  296. package/dist/lib/testing/storyboard/shape-drift-hints.mjs +27 -27
  297. package/dist/lib/testing/storyboard/shape-drift-hints.mjs.map +1 -1
  298. package/dist/lib/testing/storyboard/task-map.d.ts.map +1 -1
  299. package/dist/lib/testing/storyboard/task-map.js +43 -5
  300. package/dist/lib/testing/storyboard/task-map.js.map +1 -1
  301. package/dist/lib/testing/storyboard/task-map.mjs +43 -5
  302. package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
  303. package/dist/lib/testing/test-helpers.d.mts +2 -2
  304. package/dist/lib/testing/test-helpers.d.ts +2 -2
  305. package/dist/lib/testing/test-helpers.js.map +1 -1
  306. package/dist/lib/testing/test-helpers.mjs.map +1 -1
  307. package/dist/lib/testing/types.d.mts +7 -1
  308. package/dist/lib/testing/types.d.ts +7 -1
  309. package/dist/lib/testing/types.d.ts.map +1 -1
  310. package/dist/lib/testing/types.js.map +1 -1
  311. package/dist/lib/types/adcp.d.mts +14 -14
  312. package/dist/lib/types/adcp.d.ts +14 -14
  313. package/dist/lib/types/adcp.d.ts.map +1 -1
  314. package/dist/lib/types/adcp.js.map +1 -1
  315. package/dist/lib/types/adcp.mjs.map +1 -1
  316. package/dist/lib/types/index.d.mts +2 -2
  317. package/dist/lib/types/index.d.ts +2 -2
  318. package/dist/lib/types/index.d.ts.map +1 -1
  319. package/dist/lib/types/index.js.map +1 -1
  320. package/dist/lib/types/index.mjs.map +1 -1
  321. package/dist/lib/utils/capabilities.d.mts +6 -0
  322. package/dist/lib/utils/capabilities.d.ts +6 -0
  323. package/dist/lib/utils/capabilities.d.ts.map +1 -1
  324. package/dist/lib/utils/capabilities.js +4 -0
  325. package/dist/lib/utils/capabilities.js.map +1 -1
  326. package/dist/lib/utils/capabilities.mjs +4 -0
  327. package/dist/lib/utils/capabilities.mjs.map +1 -1
  328. package/dist/lib/utils/creative-delivery.d.mts +52 -10
  329. package/dist/lib/utils/creative-delivery.d.ts +52 -10
  330. package/dist/lib/utils/creative-delivery.d.ts.map +1 -1
  331. package/dist/lib/utils/creative-delivery.js +104 -9
  332. package/dist/lib/utils/creative-delivery.js.map +1 -1
  333. package/dist/lib/utils/creative-delivery.mjs +104 -8
  334. package/dist/lib/utils/creative-delivery.mjs.map +1 -1
  335. package/dist/lib/utils/format-assets.d.mts +41 -38
  336. package/dist/lib/utils/format-assets.d.ts +41 -38
  337. package/dist/lib/utils/format-assets.d.ts.map +1 -1
  338. package/dist/lib/utils/format-assets.js +3 -1
  339. package/dist/lib/utils/format-assets.js.map +1 -1
  340. package/dist/lib/utils/format-assets.mjs +3 -1
  341. package/dist/lib/utils/format-assets.mjs.map +1 -1
  342. package/dist/lib/utils/index.d.mts +8 -8
  343. package/dist/lib/utils/index.d.ts +8 -8
  344. package/dist/lib/utils/index.d.ts.map +1 -1
  345. package/dist/lib/utils/index.js +11 -9
  346. package/dist/lib/utils/index.js.map +1 -1
  347. package/dist/lib/utils/index.mjs +9 -8
  348. package/dist/lib/utils/index.mjs.map +1 -1
  349. package/dist/lib/utils/preview-utils.d.mts +11 -8
  350. package/dist/lib/utils/preview-utils.d.ts +11 -8
  351. package/dist/lib/utils/preview-utils.d.ts.map +1 -1
  352. package/dist/lib/utils/preview-utils.js +4 -4
  353. package/dist/lib/utils/preview-utils.js.map +1 -1
  354. package/dist/lib/utils/preview-utils.mjs +3 -3
  355. package/dist/lib/utils/preview-utils.mjs.map +1 -1
  356. package/dist/lib/utils/tool-request-schemas.d.mts +2 -2
  357. package/dist/lib/utils/tool-request-schemas.d.ts +2 -2
  358. package/dist/lib/v2/projection/aao-reference-formats.json +492 -0
  359. package/dist/lib/v2/projection/augment-response.d.mts +31 -11
  360. package/dist/lib/v2/projection/augment-response.d.ts +31 -11
  361. package/dist/lib/v2/projection/augment-response.d.ts.map +1 -1
  362. package/dist/lib/v2/projection/augment-response.js +233 -27
  363. package/dist/lib/v2/projection/augment-response.js.map +1 -1
  364. package/dist/lib/v2/projection/augment-response.mjs +232 -27
  365. package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
  366. package/dist/lib/v2/projection/builders.d.mts +7 -6
  367. package/dist/lib/v2/projection/builders.d.ts +7 -6
  368. package/dist/lib/v2/projection/builders.d.ts.map +1 -1
  369. package/dist/lib/v2/projection/builders.js +11 -8
  370. package/dist/lib/v2/projection/builders.js.map +1 -1
  371. package/dist/lib/v2/projection/builders.mjs +9 -6
  372. package/dist/lib/v2/projection/builders.mjs.map +1 -1
  373. package/dist/lib/v2/projection/catalog-snapshot.d.mts +47 -0
  374. package/dist/lib/v2/projection/catalog-snapshot.d.ts +48 -0
  375. package/dist/lib/v2/projection/catalog-snapshot.d.ts.map +1 -0
  376. package/dist/lib/v2/projection/catalog-snapshot.js +291 -0
  377. package/dist/lib/v2/projection/catalog-snapshot.js.map +1 -0
  378. package/dist/lib/v2/projection/catalog-snapshot.mjs +265 -0
  379. package/dist/lib/v2/projection/catalog-snapshot.mjs.map +1 -0
  380. package/dist/lib/v2/projection/catalog.d.mts +23 -2
  381. package/dist/lib/v2/projection/catalog.d.ts +23 -2
  382. package/dist/lib/v2/projection/catalog.d.ts.map +1 -1
  383. package/dist/lib/v2/projection/catalog.js +34 -10
  384. package/dist/lib/v2/projection/catalog.js.map +1 -1
  385. package/dist/lib/v2/projection/catalog.mjs +33 -10
  386. package/dist/lib/v2/projection/catalog.mjs.map +1 -1
  387. package/dist/lib/v2/projection/creative-delivery.d.mts +157 -0
  388. package/dist/lib/v2/projection/creative-delivery.d.ts +158 -0
  389. package/dist/lib/v2/projection/creative-delivery.d.ts.map +1 -0
  390. package/dist/lib/v2/projection/creative-delivery.js +967 -0
  391. package/dist/lib/v2/projection/creative-delivery.js.map +1 -0
  392. package/dist/lib/v2/projection/creative-delivery.mjs +941 -0
  393. package/dist/lib/v2/projection/creative-delivery.mjs.map +1 -0
  394. package/dist/lib/v2/projection/index.d.mts +8 -6
  395. package/dist/lib/v2/projection/index.d.ts +8 -6
  396. package/dist/lib/v2/projection/index.d.ts.map +1 -1
  397. package/dist/lib/v2/projection/index.js +26 -4
  398. package/dist/lib/v2/projection/index.js.map +1 -1
  399. package/dist/lib/v2/projection/index.mjs +28 -4
  400. package/dist/lib/v2/projection/index.mjs.map +1 -1
  401. package/dist/lib/v2/projection/legacy-metadata.d.mts +21 -0
  402. package/dist/lib/v2/projection/legacy-metadata.d.ts +22 -0
  403. package/dist/lib/v2/projection/legacy-metadata.d.ts.map +1 -0
  404. package/dist/lib/v2/projection/legacy-metadata.js +73 -0
  405. package/dist/lib/v2/projection/legacy-metadata.js.map +1 -0
  406. package/dist/lib/v2/projection/legacy-metadata.mjs +45 -0
  407. package/dist/lib/v2/projection/legacy-metadata.mjs.map +1 -0
  408. package/dist/lib/v2/projection/types.d.mts +29 -23
  409. package/dist/lib/v2/projection/types.d.ts +29 -23
  410. package/dist/lib/v2/projection/types.d.ts.map +1 -1
  411. package/dist/lib/v2/projection/types.js.map +1 -1
  412. package/dist/lib/v2/projection/v1-to-v2.d.mts +29 -6
  413. package/dist/lib/v2/projection/v1-to-v2.d.ts +29 -6
  414. package/dist/lib/v2/projection/v1-to-v2.d.ts.map +1 -1
  415. package/dist/lib/v2/projection/v1-to-v2.js +218 -9
  416. package/dist/lib/v2/projection/v1-to-v2.js.map +1 -1
  417. package/dist/lib/v2/projection/v1-to-v2.mjs +219 -10
  418. package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
  419. package/dist/lib/v2/projection/v2-to-v1.d.mts +31 -2
  420. package/dist/lib/v2/projection/v2-to-v1.d.ts +31 -2
  421. package/dist/lib/v2/projection/v2-to-v1.d.ts.map +1 -1
  422. package/dist/lib/v2/projection/v2-to-v1.js +138 -7
  423. package/dist/lib/v2/projection/v2-to-v1.js.map +1 -1
  424. package/dist/lib/v2/projection/v2-to-v1.mjs +135 -6
  425. package/dist/lib/v2/projection/v2-to-v1.mjs.map +1 -1
  426. package/dist/lib/v2/projection/write-side.d.mts +12 -13
  427. package/dist/lib/v2/projection/write-side.d.ts +12 -13
  428. package/dist/lib/v2/projection/write-side.d.ts.map +1 -1
  429. package/dist/lib/v2/projection/write-side.js +16 -12
  430. package/dist/lib/v2/projection/write-side.js.map +1 -1
  431. package/dist/lib/v2/projection/write-side.mjs +16 -12
  432. package/dist/lib/v2/projection/write-side.mjs.map +1 -1
  433. package/dist/lib/version.d.mts +3 -3
  434. package/dist/lib/version.d.ts +3 -3
  435. package/dist/lib/version.d.ts.map +1 -1
  436. package/dist/lib/version.js +3 -3
  437. package/dist/lib/version.js.map +1 -1
  438. package/dist/lib/version.mjs +3 -3
  439. package/dist/lib/version.mjs.map +1 -1
  440. package/docs/guides/BUILD-AN-AGENT.md +7 -2
  441. package/docs/guides/PREVIEW-ASSET-DURABILITY.md +6 -2
  442. package/docs/llms.txt +1 -0
  443. package/examples/README.md +1 -1
  444. package/examples/batch-preview-test.ts +3 -3
  445. package/examples/conversation-client.ts +2 -2
  446. package/examples/debug-preview-response.ts +1 -1
  447. package/examples/decisioning-platform-broadcast-tv.ts +10 -4
  448. package/examples/decisioning-platform-mock-seller.ts +16 -9
  449. package/examples/decisioning-platform-programmatic.ts +18 -7
  450. package/examples/error-compliant-server.ts +26 -16
  451. package/examples/generative-creative-demo.ts +7 -19
  452. package/examples/hello_creative_adapter_ad_server.ts +37 -16
  453. package/examples/hello_creative_adapter_template.ts +12 -10
  454. package/examples/hello_seller_adapter_guaranteed.ts +52 -23
  455. package/examples/hello_seller_adapter_multi_tenant.ts +6 -3
  456. package/examples/hello_seller_adapter_non_guaranteed.ts +54 -26
  457. package/examples/hello_seller_adapter_proposal_mode.ts +40 -14
  458. package/examples/hello_seller_adapter_social.ts +2 -7
  459. package/examples/inspect-card-formats.ts +1 -1
  460. package/examples/simple-getting-started.ts +1 -1
  461. package/examples/test-helpers-demo.ts +1 -1
  462. package/package.json +2 -2
  463. package/skills/build-decisioning-creative-template/SKILL.md +11 -11
  464. package/skills/build-decisioning-platform/advanced/REFERENCE.md +8 -2
@@ -13,8 +13,8 @@ const TASK_TO_METHOD = {
13
13
  provide_performance_feedback: "providePerformanceFeedback",
14
14
  // Creative
15
15
  list_creative_formats: "listCreativeFormats",
16
- build_creative: "buildCreative",
17
- preview_creative: "previewCreative",
16
+ build_creative: "buildCreativeLegacy",
17
+ preview_creative: "previewCreativeLegacy",
18
18
  sync_creatives: "syncCreatives",
19
19
  list_creatives: "listCreatives",
20
20
  // Signals
@@ -47,9 +47,45 @@ const TASK_TO_METHOD = {
47
47
  si_send_message: "siSendMessage",
48
48
  si_terminate_session: "siTerminateSession"
49
49
  };
50
+ const LEGACY_CREATIVE_TASK_TO_METHOD = {
51
+ get_products: "getProductsLegacy",
52
+ create_media_buy: "createMediaBuyLegacy",
53
+ update_media_buy: "updateMediaBuyLegacy",
54
+ sync_creatives: "syncCreativesLegacy",
55
+ list_creatives: "listCreativesLegacy"
56
+ };
57
+ function gradesLegacyCreativeWire(client) {
58
+ if (client === null || typeof client !== "object") return false;
59
+ const getAdcpVersion = client.getAdcpVersion;
60
+ if (typeof getAdcpVersion !== "function") return false;
61
+ let version;
62
+ try {
63
+ version = getAdcpVersion.call(client);
64
+ } catch {
65
+ return false;
66
+ }
67
+ if (typeof version !== "string") return false;
68
+ const match = /^v?(\d+)(?:\.(\d+))?/.exec(version.trim());
69
+ if (!match) return false;
70
+ const major = Number(match[1]);
71
+ const minor = Number(match[2] ?? 0);
72
+ return major < 3 || major === 3 && minor < 2;
73
+ }
50
74
  function isRecord(value) {
51
75
  return value !== null && typeof value === "object" && !Array.isArray(value);
52
76
  }
77
+ function withLegacyCreativeWireHint(params) {
78
+ const ext = isRecord(params.ext) ? params.ext : {};
79
+ const adcp = isRecord(ext.adcp) ? ext.adcp : {};
80
+ if (adcp.creative_wire === "legacy" || adcp.creative_wire === "canonical") return params;
81
+ return {
82
+ ...params,
83
+ ext: {
84
+ ...ext,
85
+ adcp: { ...adcp, creative_wire: "legacy" }
86
+ }
87
+ };
88
+ }
53
89
  function readAdcpError(value) {
54
90
  if (!isRecord(value)) return void 0;
55
91
  const error = value.adcp_error;
@@ -84,7 +120,9 @@ function normalizeStoryboardTaskSuccess(result, taskName, terminalDataError, adc
84
120
  return true;
85
121
  }
86
122
  async function executeStoryboardTask(client, taskName, params, opts = {}) {
87
- const methodName = Object.hasOwn(TASK_TO_METHOD, taskName) ? TASK_TO_METHOD[taskName] : void 0;
123
+ const legacyMethodName = gradesLegacyCreativeWire(client) ? LEGACY_CREATIVE_TASK_TO_METHOD[taskName] : void 0;
124
+ const methodName = legacyMethodName ?? (Object.hasOwn(TASK_TO_METHOD, taskName) ? TASK_TO_METHOD[taskName] : void 0);
125
+ const callParams = legacyMethodName ? withLegacyCreativeWireHint(params) : params;
88
126
  const taskOptions = opts.skipIdempotencyAutoInject || opts.skipAccountValidation ? {
89
127
  ...opts.skipIdempotencyAutoInject && { skipIdempotencyAutoInject: true },
90
128
  ...opts.skipAccountValidation && { skipAccountValidation: true }
@@ -92,9 +130,9 @@ async function executeStoryboardTask(client, taskName, params, opts = {}) {
92
130
  let result;
93
131
  const invoke = async () => {
94
132
  if (methodName && typeof client[methodName] === "function") {
95
- return taskOptions ? client[methodName](params, void 0, taskOptions) : client[methodName](params);
133
+ return taskOptions ? client[methodName](callParams, void 0, taskOptions) : client[methodName](callParams);
96
134
  }
97
- return client.executeTask(taskName, params, void 0, taskOptions);
135
+ return client.executeTask(taskName, callParams, void 0, taskOptions);
98
136
  };
99
137
  const MAX_RETRIES = 3;
100
138
  const BASE_DELAY_MS = 2e3;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/testing/storyboard/task-map.ts"],"sourcesContent":["/**\n * Maps AdCP task names (from storyboard YAML) to SingleAgentClient method names.\n *\n * Each storyboard step has a `task` field like \"sync_accounts\" or \"get_products\".\n * This map resolves those to the camelCase method on SingleAgentClient.\n *\n * Tasks without a dedicated method fall through to `executeTask()`.\n */\n\nimport type { TaskResult } from '../types';\nimport type { AdcpErrorInfo } from '../../core/ConversationTypes';\nimport { isTerminalAdcpError, readExtractionPath } from '../../utils/response-unwrapper';\n\n/**\n * Map of AdCP task names to SingleAgentClient method names.\n * Only includes tasks that have dedicated typed methods.\n */\nexport const TASK_TO_METHOD: Record<string, string> = {\n // Account & audience\n sync_accounts: 'syncAccounts',\n list_accounts: 'listAccounts',\n sync_audiences: 'syncAudiences',\n\n // Product discovery & media buy\n get_products: 'getProducts',\n create_media_buy: 'createMediaBuy',\n update_media_buy: 'updateMediaBuy',\n get_media_buys: 'getMediaBuys',\n get_media_buy_delivery: 'getMediaBuyDelivery',\n provide_performance_feedback: 'providePerformanceFeedback',\n\n // Creative\n list_creative_formats: 'listCreativeFormats',\n build_creative: 'buildCreative',\n preview_creative: 'previewCreative',\n sync_creatives: 'syncCreatives',\n list_creatives: 'listCreatives',\n\n // Signals\n get_signals: 'getSignals',\n activate_signal: 'activateSignal',\n\n // Capabilities\n get_adcp_capabilities: 'getAdcpCapabilities',\n\n // Governance\n sync_plans: 'syncPlans',\n check_governance: 'checkGovernance',\n get_plan_audit_logs: 'getPlanAuditLogs',\n create_property_list: 'createPropertyList',\n get_property_list: 'getPropertyList',\n update_property_list: 'updatePropertyList',\n list_property_lists: 'listPropertyLists',\n delete_property_list: 'deletePropertyList',\n list_collection_lists: 'listCollectionLists',\n list_content_standards: 'listContentStandards',\n get_content_standards: 'getContentStandards',\n create_content_standards: 'createContentStandards',\n update_content_standards: 'updateContentStandards',\n calibrate_content: 'calibrateContent',\n validate_content_delivery: 'validateContentDelivery',\n\n // Account\n get_account_financials: 'getAccountFinancials',\n log_event: 'logEvent',\n\n // Sponsored Intelligence\n si_get_offering: 'siGetOffering',\n si_initiate_session: 'siInitiateSession',\n si_send_message: 'siSendMessage',\n si_terminate_session: 'siTerminateSession',\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction readAdcpError(value: unknown): AdcpErrorInfo | undefined {\n if (!isRecord(value)) return undefined;\n const error = value.adcp_error;\n if (!isRecord(error) || typeof error.code !== 'string') return undefined;\n return error as unknown as AdcpErrorInfo;\n}\n\nfunction readFirstError(value: unknown): AdcpErrorInfo | undefined {\n if (!isRecord(value) || !Array.isArray(value.errors)) return undefined;\n const first = value.errors[0];\n if (!isRecord(first) || typeof first.code !== 'string') return undefined;\n return {\n code: first.code,\n message: typeof first.message === 'string' ? first.message : String(first.code),\n ...(typeof first.recovery === 'string' && { recovery: first.recovery as AdcpErrorInfo['recovery'] }),\n ...(typeof first.field === 'string' && { field: first.field }),\n ...(typeof first.suggestion === 'string' && { suggestion: first.suggestion }),\n ...(typeof first.retry_after === 'number' && { retry_after: first.retry_after }),\n ...(isRecord(first.details) && { details: first.details }),\n };\n}\n\nfunction errorMessageFrom(error: AdcpErrorInfo | undefined, fallback: unknown): string | undefined {\n if (typeof error?.message === 'string' && error.message.length > 0) return error.message;\n if (typeof error?.code === 'string') return error.code;\n return typeof fallback === 'string' && fallback.length > 0 ? fallback : undefined;\n}\n\nfunction normalizeStoryboardTaskSuccess(\n result: unknown,\n taskName: string,\n terminalDataError?: boolean,\n adcpError?: AdcpErrorInfo\n): boolean {\n if (!isRecord(result)) return true;\n if (typeof result.success === 'boolean') return result.success;\n if (result.status === 'failed' || result.status === 'rejected') return false;\n if (adcpError || result.adcpError || result.adcp_error) return false;\n if (terminalDataError ?? isTerminalAdcpError(result.data, taskName)) return false;\n return true;\n}\n\n/**\n * Execute a storyboard task against a SingleAgentClient.\n *\n * Uses the typed method if one exists, otherwise falls back to executeTask().\n * When the agent returns an async status (working/submitted), waits for\n * completion before returning — storyboard steps expect final results.\n */\nexport async function executeStoryboardTask(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic dispatch requires any\n client: any,\n taskName: string,\n params: Record<string, unknown>,\n opts: { skipIdempotencyAutoInject?: boolean; skipAccountValidation?: boolean; signal?: AbortSignal } = {}\n): Promise<TaskResult> {\n const methodName = Object.hasOwn(TASK_TO_METHOD, taskName) ? TASK_TO_METHOD[taskName] : undefined;\n\n // Only pass TaskOptions when a flag is actually set — avoids changing\n // behavior for the common path that relies on method defaults.\n const taskOptions =\n opts.skipIdempotencyAutoInject || opts.skipAccountValidation\n ? {\n ...(opts.skipIdempotencyAutoInject && { skipIdempotencyAutoInject: true }),\n ...(opts.skipAccountValidation && { skipAccountValidation: true }),\n }\n : undefined;\n\n let result;\n const invoke = async () => {\n if (methodName && typeof client[methodName] === 'function') {\n // Typed methods take (params, inputHandler?, options?). Pass options\n // only when set, otherwise they take their defaults.\n return taskOptions ? client[methodName](params, undefined, taskOptions) : client[methodName](params);\n }\n return client.executeTask(taskName, params, undefined, taskOptions);\n };\n\n // Retry with exponential backoff on rate limit errors\n const MAX_RETRIES = 3;\n const BASE_DELAY_MS = 2000;\n for (let attempt = 0; ; attempt++) {\n try {\n result = await raceWithSignal(invoke(), opts.signal);\n break;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n const isRateLimit =\n /rate limit/i.test(msg) || (/\"code\":\\s*-32000/.test(msg) && /rate.?limit|too many|throttl/i.test(msg));\n if (isRateLimit && attempt < MAX_RETRIES) {\n const jitter = Math.random() * 1000;\n const delay = BASE_DELAY_MS * 2 ** attempt + jitter;\n await raceWithSignal(new Promise(resolve => setTimeout(resolve, delay)), opts.signal);\n continue;\n }\n throw err;\n }\n }\n\n // If the agent returned an async status but included data in the initial\n // response (common for agents that process synchronously but report as\n // submitted), use that data. Only poll when there's no data at all.\n const hasData = result.data !== undefined && result.data !== null;\n const isAsync = result.status === 'submitted' || result.status === 'working';\n const prePollingDebugLogs = Array.isArray(result.debug_logs) ? [...result.debug_logs] : [];\n let replacedByPolling = false;\n if (!hasData && isAsync && result.submitted?.waitForCompletion) {\n try {\n const timeout = new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Task polling timeout')), 30_000)\n );\n result = await raceWithSignal(\n Promise.race([result.submitted.waitForCompletion(2000, opts.signal), timeout]),\n opts.signal\n );\n replacedByPolling = true;\n } catch (err) {\n if (opts.signal?.aborted) throw err;\n // Polling failed or timed out — return the intermediate result as-is\n }\n }\n\n const terminalDataError = isTerminalAdcpError(result.data, taskName);\n const adcpError =\n result.adcpError ??\n result.adcp_error ??\n readAdcpError(result.data) ??\n (terminalDataError ? readFirstError(result.data) : undefined);\n const data = result.data ?? (adcpError ? { adcp_error: adcpError } : undefined);\n const success = normalizeStoryboardTaskSuccess(result, taskName, terminalDataError, adcpError);\n const error = result.error ?? (!success ? errorMessageFrom(adcpError, undefined) : undefined);\n const extractionPath = readExtractionPath(data);\n const debugLogs = Array.isArray(result.debug_logs) ? result.debug_logs : [];\n const mergedDebugLogs = replacedByPolling ? [...prePollingDebugLogs, ...debugLogs] : debugLogs;\n return {\n success,\n data,\n error,\n ...(adcpError && { adcp_error: adcpError }),\n ...(extractionPath !== undefined && { _extraction_path: extractionPath }),\n ...(mergedDebugLogs.length > 0 && { debug_logs: mergedDebugLogs }),\n };\n}\n\nfunction raceWithSignal<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n if (!signal) return promise;\n if (signal.aborted) return Promise.reject(signal.reason ?? new Error('aborted'));\n\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => reject(signal.reason ?? new Error('aborted'));\n signal.addEventListener('abort', onAbort, { once: true });\n promise.then(\n value => {\n signal.removeEventListener('abort', onAbort);\n resolve(value);\n },\n err => {\n signal.removeEventListener('abort', onAbort);\n reject(err);\n }\n );\n });\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/testing/storyboard/task-map.ts"],"sourcesContent":["/**\n * Maps AdCP task names (from storyboard YAML) to SingleAgentClient method names.\n *\n * Each storyboard step has a `task` field like \"sync_accounts\" or \"get_products\".\n * This map resolves those to the camelCase method on SingleAgentClient.\n *\n * Tasks without a dedicated method fall through to `executeTask()`.\n */\n\nimport type { TaskResult } from '../types';\nimport type { AdcpErrorInfo } from '../../core/ConversationTypes';\nimport { isTerminalAdcpError, readExtractionPath } from '../../utils/response-unwrapper';\n\n/**\n * Map of AdCP task names to SingleAgentClient method names.\n * Only includes tasks that have dedicated typed methods.\n */\nexport const TASK_TO_METHOD: Record<string, string> = {\n // Account & audience\n sync_accounts: 'syncAccounts',\n list_accounts: 'listAccounts',\n sync_audiences: 'syncAudiences',\n\n // Product discovery & media buy\n get_products: 'getProducts',\n create_media_buy: 'createMediaBuy',\n update_media_buy: 'updateMediaBuy',\n get_media_buys: 'getMediaBuys',\n get_media_buy_delivery: 'getMediaBuyDelivery',\n provide_performance_feedback: 'providePerformanceFeedback',\n\n // Creative\n list_creative_formats: 'listCreativeFormats',\n build_creative: 'buildCreativeLegacy',\n preview_creative: 'previewCreativeLegacy',\n sync_creatives: 'syncCreatives',\n list_creatives: 'listCreatives',\n\n // Signals\n get_signals: 'getSignals',\n activate_signal: 'activateSignal',\n\n // Capabilities\n get_adcp_capabilities: 'getAdcpCapabilities',\n\n // Governance\n sync_plans: 'syncPlans',\n check_governance: 'checkGovernance',\n get_plan_audit_logs: 'getPlanAuditLogs',\n create_property_list: 'createPropertyList',\n get_property_list: 'getPropertyList',\n update_property_list: 'updatePropertyList',\n list_property_lists: 'listPropertyLists',\n delete_property_list: 'deletePropertyList',\n list_collection_lists: 'listCollectionLists',\n list_content_standards: 'listContentStandards',\n get_content_standards: 'getContentStandards',\n create_content_standards: 'createContentStandards',\n update_content_standards: 'updateContentStandards',\n calibrate_content: 'calibrateContent',\n validate_content_delivery: 'validateContentDelivery',\n\n // Account\n get_account_financials: 'getAccountFinancials',\n log_event: 'logEvent',\n\n // Sponsored Intelligence\n si_get_offering: 'siGetOffering',\n si_initiate_session: 'siInitiateSession',\n si_send_message: 'siSendMessage',\n si_terminate_session: 'siTerminateSession',\n};\n\n/** Storyboards grade the selected protocol wire, not the SDK's canonical API. */\nconst LEGACY_CREATIVE_TASK_TO_METHOD: Readonly<Record<string, string>> = {\n get_products: 'getProductsLegacy',\n create_media_buy: 'createMediaBuyLegacy',\n update_media_buy: 'updateMediaBuyLegacy',\n sync_creatives: 'syncCreativesLegacy',\n list_creatives: 'listCreativesLegacy',\n};\n\nfunction gradesLegacyCreativeWire(client: unknown): boolean {\n if (client === null || typeof client !== 'object') return false;\n const getAdcpVersion = (client as { getAdcpVersion?: unknown }).getAdcpVersion;\n if (typeof getAdcpVersion !== 'function') return false;\n let version: unknown;\n try {\n version = getAdcpVersion.call(client);\n } catch {\n return false;\n }\n if (typeof version !== 'string') return false;\n const match = /^v?(\\d+)(?:\\.(\\d+))?/.exec(version.trim());\n if (!match) return false;\n const major = Number(match[1]);\n const minor = Number(match[2] ?? 0);\n return major < 3 || (major === 3 && minor < 2);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction withLegacyCreativeWireHint(params: Record<string, unknown>): Record<string, unknown> {\n const ext = isRecord(params.ext) ? params.ext : {};\n const adcp = isRecord(ext.adcp) ? ext.adcp : {};\n if (adcp.creative_wire === 'legacy' || adcp.creative_wire === 'canonical') return params;\n return {\n ...params,\n ext: {\n ...ext,\n adcp: { ...adcp, creative_wire: 'legacy' },\n },\n };\n}\n\nfunction readAdcpError(value: unknown): AdcpErrorInfo | undefined {\n if (!isRecord(value)) return undefined;\n const error = value.adcp_error;\n if (!isRecord(error) || typeof error.code !== 'string') return undefined;\n return error as unknown as AdcpErrorInfo;\n}\n\nfunction readFirstError(value: unknown): AdcpErrorInfo | undefined {\n if (!isRecord(value) || !Array.isArray(value.errors)) return undefined;\n const first = value.errors[0];\n if (!isRecord(first) || typeof first.code !== 'string') return undefined;\n return {\n code: first.code,\n message: typeof first.message === 'string' ? first.message : String(first.code),\n ...(typeof first.recovery === 'string' && { recovery: first.recovery as AdcpErrorInfo['recovery'] }),\n ...(typeof first.field === 'string' && { field: first.field }),\n ...(typeof first.suggestion === 'string' && { suggestion: first.suggestion }),\n ...(typeof first.retry_after === 'number' && { retry_after: first.retry_after }),\n ...(isRecord(first.details) && { details: first.details }),\n };\n}\n\nfunction errorMessageFrom(error: AdcpErrorInfo | undefined, fallback: unknown): string | undefined {\n if (typeof error?.message === 'string' && error.message.length > 0) return error.message;\n if (typeof error?.code === 'string') return error.code;\n return typeof fallback === 'string' && fallback.length > 0 ? fallback : undefined;\n}\n\nfunction normalizeStoryboardTaskSuccess(\n result: unknown,\n taskName: string,\n terminalDataError?: boolean,\n adcpError?: AdcpErrorInfo\n): boolean {\n if (!isRecord(result)) return true;\n if (typeof result.success === 'boolean') return result.success;\n if (result.status === 'failed' || result.status === 'rejected') return false;\n if (adcpError || result.adcpError || result.adcp_error) return false;\n if (terminalDataError ?? isTerminalAdcpError(result.data, taskName)) return false;\n return true;\n}\n\n/**\n * Execute a storyboard task against a SingleAgentClient.\n *\n * Uses the typed method if one exists, otherwise falls back to executeTask().\n * When the agent returns an async status (working/submitted), waits for\n * completion before returning — storyboard steps expect final results.\n */\nexport async function executeStoryboardTask(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic dispatch requires any\n client: any,\n taskName: string,\n params: Record<string, unknown>,\n opts: { skipIdempotencyAutoInject?: boolean; skipAccountValidation?: boolean; signal?: AbortSignal } = {}\n): Promise<TaskResult> {\n const legacyMethodName = gradesLegacyCreativeWire(client) ? LEGACY_CREATIVE_TASK_TO_METHOD[taskName] : undefined;\n const methodName =\n legacyMethodName ?? (Object.hasOwn(TASK_TO_METHOD, taskName) ? TASK_TO_METHOD[taskName] : undefined);\n const callParams = legacyMethodName ? withLegacyCreativeWireHint(params) : params;\n\n // Only pass TaskOptions when a flag is actually set — avoids changing\n // behavior for the common path that relies on method defaults.\n const taskOptions =\n opts.skipIdempotencyAutoInject || opts.skipAccountValidation\n ? {\n ...(opts.skipIdempotencyAutoInject && { skipIdempotencyAutoInject: true }),\n ...(opts.skipAccountValidation && { skipAccountValidation: true }),\n }\n : undefined;\n\n let result;\n const invoke = async () => {\n if (methodName && typeof client[methodName] === 'function') {\n // Typed methods take (params, inputHandler?, options?). Pass options\n // only when set, otherwise they take their defaults.\n return taskOptions ? client[methodName](callParams, undefined, taskOptions) : client[methodName](callParams);\n }\n return client.executeTask(taskName, callParams, undefined, taskOptions);\n };\n\n // Retry with exponential backoff on rate limit errors\n const MAX_RETRIES = 3;\n const BASE_DELAY_MS = 2000;\n for (let attempt = 0; ; attempt++) {\n try {\n result = await raceWithSignal(invoke(), opts.signal);\n break;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n const isRateLimit =\n /rate limit/i.test(msg) || (/\"code\":\\s*-32000/.test(msg) && /rate.?limit|too many|throttl/i.test(msg));\n if (isRateLimit && attempt < MAX_RETRIES) {\n const jitter = Math.random() * 1000;\n const delay = BASE_DELAY_MS * 2 ** attempt + jitter;\n await raceWithSignal(new Promise(resolve => setTimeout(resolve, delay)), opts.signal);\n continue;\n }\n throw err;\n }\n }\n\n // If the agent returned an async status but included data in the initial\n // response (common for agents that process synchronously but report as\n // submitted), use that data. Only poll when there's no data at all.\n const hasData = result.data !== undefined && result.data !== null;\n const isAsync = result.status === 'submitted' || result.status === 'working';\n const prePollingDebugLogs = Array.isArray(result.debug_logs) ? [...result.debug_logs] : [];\n let replacedByPolling = false;\n if (!hasData && isAsync && result.submitted?.waitForCompletion) {\n try {\n const timeout = new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Task polling timeout')), 30_000)\n );\n result = await raceWithSignal(\n Promise.race([result.submitted.waitForCompletion(2000, opts.signal), timeout]),\n opts.signal\n );\n replacedByPolling = true;\n } catch (err) {\n if (opts.signal?.aborted) throw err;\n // Polling failed or timed out — return the intermediate result as-is\n }\n }\n\n const terminalDataError = isTerminalAdcpError(result.data, taskName);\n const adcpError =\n result.adcpError ??\n result.adcp_error ??\n readAdcpError(result.data) ??\n (terminalDataError ? readFirstError(result.data) : undefined);\n const data = result.data ?? (adcpError ? { adcp_error: adcpError } : undefined);\n const success = normalizeStoryboardTaskSuccess(result, taskName, terminalDataError, adcpError);\n const error = result.error ?? (!success ? errorMessageFrom(adcpError, undefined) : undefined);\n const extractionPath = readExtractionPath(data);\n const debugLogs = Array.isArray(result.debug_logs) ? result.debug_logs : [];\n const mergedDebugLogs = replacedByPolling ? [...prePollingDebugLogs, ...debugLogs] : debugLogs;\n return {\n success,\n data,\n error,\n ...(adcpError && { adcp_error: adcpError }),\n ...(extractionPath !== undefined && { _extraction_path: extractionPath }),\n ...(mergedDebugLogs.length > 0 && { debug_logs: mergedDebugLogs }),\n };\n}\n\nfunction raceWithSignal<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n if (!signal) return promise;\n if (signal.aborted) return Promise.reject(signal.reason ?? new Error('aborted'));\n\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => reject(signal.reason ?? new Error('aborted'));\n signal.addEventListener('abort', onAbort, { once: true });\n promise.then(\n value => {\n signal.removeEventListener('abort', onAbort);\n resolve(value);\n },\n err => {\n signal.removeEventListener('abort', onAbort);\n reject(err);\n }\n );\n });\n}\n"],"mappings":"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","names":[]}
@@ -191,14 +191,14 @@ export declare function createTestAgent(overrides?: Partial<AgentConfig>): Agent
191
191
  * import { creativeAgent } from '@adcp/sdk/testing';
192
192
  *
193
193
  * // List available creative formats
194
- * const formats = await creativeAgent.listFormats();
194
+ * const formats = await creativeAgent.listFormatsLegacy();
195
195
  * console.log(`Found ${formats.length} creative formats`);
196
196
  * ```
197
197
  *
198
198
  * @example
199
199
  * ```typescript
200
200
  * // Find formats by dimensions
201
- * const formats = await creativeAgent.listFormats();
201
+ * const formats = await creativeAgent.listFormatsLegacy();
202
202
  * const banner = formats.find(f =>
203
203
  * f.renders?.[0]?.dimensions?.width === 300 &&
204
204
  * f.renders?.[0]?.dimensions?.height === 250
@@ -191,14 +191,14 @@ export declare function createTestAgent(overrides?: Partial<AgentConfig>): Agent
191
191
  * import { creativeAgent } from '@adcp/sdk/testing';
192
192
  *
193
193
  * // List available creative formats
194
- * const formats = await creativeAgent.listFormats();
194
+ * const formats = await creativeAgent.listFormatsLegacy();
195
195
  * console.log(`Found ${formats.length} creative formats`);
196
196
  * ```
197
197
  *
198
198
  * @example
199
199
  * ```typescript
200
200
  * // Find formats by dimensions
201
- * const formats = await creativeAgent.listFormats();
201
+ * const formats = await creativeAgent.listFormatsLegacy();
202
202
  * const banner = formats.find(f =>
203
203
  * f.renders?.[0]?.dimensions?.width === 300 &&
204
204
  * f.renders?.[0]?.dimensions?.height === 250
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/testing/test-helpers.ts"],"sourcesContent":["// Test agent helpers for easy examples and quick testing\n// These provide pre-configured access to AdCP's public test agent\n\nimport { ADCPMultiAgentClient } from '../core/ADCPMultiAgentClient';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from '../core/CreativeAgentClient';\nimport type { AgentClient } from '../core/AgentClient';\nimport type { AgentConfig } from '../types';\n\n/**\n * Public test agent auth token\n * This token is public and rate-limited, for testing/examples only.\n */\nexport const TEST_AGENT_TOKEN = '1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ';\n\n/**\n * Public test agent configuration - MCP protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-mcp',\n name: 'AdCP Public Test Agent (MCP)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration - A2A protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-a2a',\n name: 'AdCP Public Test Agent (A2A)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration without authentication - MCP protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-mcp',\n name: 'AdCP Public Test Agent (MCP, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n};\n\n/**\n * Public test agent configuration without authentication - A2A protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-a2a',\n name: 'AdCP Public Test Agent (A2A, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n};\n\n/**\n * Pre-configured test agent client using MCP protocol.\n * Ready to use for examples, documentation, and quick testing.\n *\n * @example\n * ```typescript\n * import { testAgent } from '@adcp/sdk/testing';\n *\n * // Simple getProducts call\n * const result = await testAgent.getProducts({\n * brief: 'Coffee subscription service for busy professionals',\n * promoted_offering: 'Premium monthly coffee deliveries'\n * });\n *\n * if (result.success) {\n * console.log(`Found ${result.data.products.length} products`);\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With AI test orchestration (natural language instructions)\n * const result = await testAgent.createMediaBuy({\n * brief: 'Test campaign',\n * promoted_offering: 'Wait 10 seconds before responding',\n * products: ['prod_123'],\n * budget: 10000\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgent: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG]).agent('test-agent-mcp');\n\n/**\n * Pre-configured test agent client using A2A protocol.\n * Identical functionality to testAgent but uses A2A instead of MCP.\n *\n * @example\n * ```typescript\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * const result = await testAgentA2A.getProducts({\n * brief: 'Sustainable fashion brands',\n * promoted_offering: 'Eco-friendly clothing'\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgentA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_A2A_CONFIG]).agent('test-agent-a2a');\n\n/**\n * Pre-configured test agent client WITHOUT authentication (MCP protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuth } from '@adcp/sdk/testing';\n *\n * // This will fail with authentication error\n * try {\n * const result = await testAgentNoAuth.getProducts({\n * brief: 'Coffee subscription',\n * promoted_offering: 'Premium coffee'\n * });\n * } catch (error) {\n * console.log('Expected auth error:', error.message);\n * }\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuth: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_MCP_CONFIG]).agent(\n 'test-agent-no-auth-mcp'\n);\n\n/**\n * Pre-configured test agent client WITHOUT authentication (A2A protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuthA2A } from '@adcp/sdk/testing';\n *\n * // Compare authenticated vs unauthenticated\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * // This works (has auth)\n * const authResult = await testAgentA2A.getProducts({ brief: 'Test' });\n *\n * // This fails (no auth)\n * const noAuthResult = await testAgentNoAuthA2A.getProducts({ brief: 'Test' });\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuthA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_A2A_CONFIG]).agent(\n 'test-agent-no-auth-a2a'\n);\n\n/**\n * Multi-agent client with both test agents configured.\n * Useful for testing multi-agent patterns and protocol comparisons.\n *\n * @example\n * ```typescript\n * import { testAgentClient } from '@adcp/sdk/testing';\n *\n * // Access individual agents\n * const mcpAgent = testAgentClient.agent('test-agent-mcp');\n * const a2aAgent = testAgentClient.agent('test-agent-a2a');\n *\n * // Or use agent collection for parallel operations\n * const results = await testAgentClient.allAgents().getProducts({\n * brief: 'Premium coffee brands',\n * promoted_offering: 'Artisan coffee'\n * });\n * ```\n *\n * @remarks\n * This client is rate-limited and intended for testing/examples only.\n * DO NOT use in production applications.\n */\nexport const testAgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG, TEST_AGENT_A2A_CONFIG]);\n\n/**\n * Create a custom test agent configuration.\n * Useful when you need to modify the default test agent setup.\n *\n * @param overrides - Partial agent config to override defaults\n * @returns Complete agent configuration\n *\n * @example\n * ```typescript\n * import { createTestAgent, AdCPClient } from '@adcp/sdk/testing';\n *\n * // Use default test agent with custom ID\n * const config = createTestAgent({ id: 'my-test-agent' });\n * const client = new AdCPClient([config]);\n * ```\n *\n * @example\n * ```typescript\n * // Use A2A protocol instead of MCP\n * const config = createTestAgent({\n * protocol: 'a2a',\n * agent_uri: 'https://test-agent.adcontextprotocol.org'\n * });\n * ```\n */\nexport function createTestAgent(overrides?: Partial<AgentConfig>): AgentConfig {\n return {\n ...TEST_AGENT_MCP_CONFIG,\n ...overrides,\n };\n}\n\n// ====== CREATIVE AGENT HELPERS ======\n\n/**\n * Pre-configured creative agent client using MCP protocol.\n * Ready to use for creative generation and format listing.\n *\n * @example\n * ```typescript\n * import { creativeAgent } from '@adcp/sdk/testing';\n *\n * // List available creative formats\n * const formats = await creativeAgent.listFormats();\n * console.log(`Found ${formats.length} creative formats`);\n * ```\n *\n * @example\n * ```typescript\n * // Find formats by dimensions\n * const formats = await creativeAgent.listFormats();\n * const banner = formats.find(f =>\n * f.renders?.[0]?.dimensions?.width === 300 &&\n * f.renders?.[0]?.dimensions?.height === 250\n * );\n * ```\n *\n * @remarks\n * This is the official AdCP reference creative agent.\n * No authentication required for public endpoints.\n */\nexport const creativeAgent: CreativeAgentClient = new CreativeAgentClient({\n agentUrl: STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE,\n protocol: 'mcp',\n});\n\n// Note: creativeAgentA2A is not exported because A2A protocol is not yet supported\n// on the creative agent. Only MCP is currently available.\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kCAAqC;AACrC,iCAA8D;AAQvD,MAAM,mBAAmB;AAMzB,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAqCO,MAAM,YAAyB,IAAI,iDAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AAqBvG,MAAM,eAA4B,IAAI,iDAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AA0B1G,MAAM,kBAA+B,IAAI,iDAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACpG;AACF;AAyBO,MAAM,qBAAkC,IAAI,iDAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACvG;AACF;AAyBO,MAAM,kBAAkB,IAAI,iDAAqB,CAAC,uBAAuB,qBAAqB,CAAC;AA2B/F,SAAS,gBAAgB,WAA+C;AAC7E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AA+BO,MAAM,gBAAqC,IAAI,+CAAoB;AAAA,EACxE,UAAU,oDAAyB;AAAA,EACnC,UAAU;AACZ,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/testing/test-helpers.ts"],"sourcesContent":["// Test agent helpers for easy examples and quick testing\n// These provide pre-configured access to AdCP's public test agent\n\nimport { ADCPMultiAgentClient } from '../core/ADCPMultiAgentClient';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from '../core/CreativeAgentClient';\nimport type { AgentClient } from '../core/AgentClient';\nimport type { AgentConfig } from '../types';\n\n/**\n * Public test agent auth token\n * This token is public and rate-limited, for testing/examples only.\n */\nexport const TEST_AGENT_TOKEN = '1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ';\n\n/**\n * Public test agent configuration - MCP protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-mcp',\n name: 'AdCP Public Test Agent (MCP)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration - A2A protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-a2a',\n name: 'AdCP Public Test Agent (A2A)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration without authentication - MCP protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-mcp',\n name: 'AdCP Public Test Agent (MCP, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n};\n\n/**\n * Public test agent configuration without authentication - A2A protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-a2a',\n name: 'AdCP Public Test Agent (A2A, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n};\n\n/**\n * Pre-configured test agent client using MCP protocol.\n * Ready to use for examples, documentation, and quick testing.\n *\n * @example\n * ```typescript\n * import { testAgent } from '@adcp/sdk/testing';\n *\n * // Simple getProducts call\n * const result = await testAgent.getProducts({\n * brief: 'Coffee subscription service for busy professionals',\n * promoted_offering: 'Premium monthly coffee deliveries'\n * });\n *\n * if (result.success) {\n * console.log(`Found ${result.data.products.length} products`);\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With AI test orchestration (natural language instructions)\n * const result = await testAgent.createMediaBuy({\n * brief: 'Test campaign',\n * promoted_offering: 'Wait 10 seconds before responding',\n * products: ['prod_123'],\n * budget: 10000\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgent: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG]).agent('test-agent-mcp');\n\n/**\n * Pre-configured test agent client using A2A protocol.\n * Identical functionality to testAgent but uses A2A instead of MCP.\n *\n * @example\n * ```typescript\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * const result = await testAgentA2A.getProducts({\n * brief: 'Sustainable fashion brands',\n * promoted_offering: 'Eco-friendly clothing'\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgentA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_A2A_CONFIG]).agent('test-agent-a2a');\n\n/**\n * Pre-configured test agent client WITHOUT authentication (MCP protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuth } from '@adcp/sdk/testing';\n *\n * // This will fail with authentication error\n * try {\n * const result = await testAgentNoAuth.getProducts({\n * brief: 'Coffee subscription',\n * promoted_offering: 'Premium coffee'\n * });\n * } catch (error) {\n * console.log('Expected auth error:', error.message);\n * }\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuth: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_MCP_CONFIG]).agent(\n 'test-agent-no-auth-mcp'\n);\n\n/**\n * Pre-configured test agent client WITHOUT authentication (A2A protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuthA2A } from '@adcp/sdk/testing';\n *\n * // Compare authenticated vs unauthenticated\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * // This works (has auth)\n * const authResult = await testAgentA2A.getProducts({ brief: 'Test' });\n *\n * // This fails (no auth)\n * const noAuthResult = await testAgentNoAuthA2A.getProducts({ brief: 'Test' });\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuthA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_A2A_CONFIG]).agent(\n 'test-agent-no-auth-a2a'\n);\n\n/**\n * Multi-agent client with both test agents configured.\n * Useful for testing multi-agent patterns and protocol comparisons.\n *\n * @example\n * ```typescript\n * import { testAgentClient } from '@adcp/sdk/testing';\n *\n * // Access individual agents\n * const mcpAgent = testAgentClient.agent('test-agent-mcp');\n * const a2aAgent = testAgentClient.agent('test-agent-a2a');\n *\n * // Or use agent collection for parallel operations\n * const results = await testAgentClient.allAgents().getProducts({\n * brief: 'Premium coffee brands',\n * promoted_offering: 'Artisan coffee'\n * });\n * ```\n *\n * @remarks\n * This client is rate-limited and intended for testing/examples only.\n * DO NOT use in production applications.\n */\nexport const testAgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG, TEST_AGENT_A2A_CONFIG]);\n\n/**\n * Create a custom test agent configuration.\n * Useful when you need to modify the default test agent setup.\n *\n * @param overrides - Partial agent config to override defaults\n * @returns Complete agent configuration\n *\n * @example\n * ```typescript\n * import { createTestAgent, AdCPClient } from '@adcp/sdk/testing';\n *\n * // Use default test agent with custom ID\n * const config = createTestAgent({ id: 'my-test-agent' });\n * const client = new AdCPClient([config]);\n * ```\n *\n * @example\n * ```typescript\n * // Use A2A protocol instead of MCP\n * const config = createTestAgent({\n * protocol: 'a2a',\n * agent_uri: 'https://test-agent.adcontextprotocol.org'\n * });\n * ```\n */\nexport function createTestAgent(overrides?: Partial<AgentConfig>): AgentConfig {\n return {\n ...TEST_AGENT_MCP_CONFIG,\n ...overrides,\n };\n}\n\n// ====== CREATIVE AGENT HELPERS ======\n\n/**\n * Pre-configured creative agent client using MCP protocol.\n * Ready to use for creative generation and format listing.\n *\n * @example\n * ```typescript\n * import { creativeAgent } from '@adcp/sdk/testing';\n *\n * // List available creative formats\n * const formats = await creativeAgent.listFormatsLegacy();\n * console.log(`Found ${formats.length} creative formats`);\n * ```\n *\n * @example\n * ```typescript\n * // Find formats by dimensions\n * const formats = await creativeAgent.listFormatsLegacy();\n * const banner = formats.find(f =>\n * f.renders?.[0]?.dimensions?.width === 300 &&\n * f.renders?.[0]?.dimensions?.height === 250\n * );\n * ```\n *\n * @remarks\n * This is the official AdCP reference creative agent.\n * No authentication required for public endpoints.\n */\nexport const creativeAgent: CreativeAgentClient = new CreativeAgentClient({\n agentUrl: STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE,\n protocol: 'mcp',\n});\n\n// Note: creativeAgentA2A is not exported because A2A protocol is not yet supported\n// on the creative agent. Only MCP is currently available.\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,kCAAqC;AACrC,iCAA8D;AAQvD,MAAM,mBAAmB;AAMzB,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAqCO,MAAM,YAAyB,IAAI,iDAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AAqBvG,MAAM,eAA4B,IAAI,iDAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AA0B1G,MAAM,kBAA+B,IAAI,iDAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACpG;AACF;AAyBO,MAAM,qBAAkC,IAAI,iDAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACvG;AACF;AAyBO,MAAM,kBAAkB,IAAI,iDAAqB,CAAC,uBAAuB,qBAAqB,CAAC;AA2B/F,SAAS,gBAAgB,WAA+C;AAC7E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AA+BO,MAAM,gBAAqC,IAAI,+CAAoB;AAAA,EACxE,UAAU,oDAAyB;AAAA,EACnC,UAAU;AACZ,CAAC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/testing/test-helpers.ts"],"sourcesContent":["// Test agent helpers for easy examples and quick testing\n// These provide pre-configured access to AdCP's public test agent\n\nimport { ADCPMultiAgentClient } from '../core/ADCPMultiAgentClient';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from '../core/CreativeAgentClient';\nimport type { AgentClient } from '../core/AgentClient';\nimport type { AgentConfig } from '../types';\n\n/**\n * Public test agent auth token\n * This token is public and rate-limited, for testing/examples only.\n */\nexport const TEST_AGENT_TOKEN = '1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ';\n\n/**\n * Public test agent configuration - MCP protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-mcp',\n name: 'AdCP Public Test Agent (MCP)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration - A2A protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-a2a',\n name: 'AdCP Public Test Agent (A2A)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration without authentication - MCP protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-mcp',\n name: 'AdCP Public Test Agent (MCP, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n};\n\n/**\n * Public test agent configuration without authentication - A2A protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-a2a',\n name: 'AdCP Public Test Agent (A2A, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n};\n\n/**\n * Pre-configured test agent client using MCP protocol.\n * Ready to use for examples, documentation, and quick testing.\n *\n * @example\n * ```typescript\n * import { testAgent } from '@adcp/sdk/testing';\n *\n * // Simple getProducts call\n * const result = await testAgent.getProducts({\n * brief: 'Coffee subscription service for busy professionals',\n * promoted_offering: 'Premium monthly coffee deliveries'\n * });\n *\n * if (result.success) {\n * console.log(`Found ${result.data.products.length} products`);\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With AI test orchestration (natural language instructions)\n * const result = await testAgent.createMediaBuy({\n * brief: 'Test campaign',\n * promoted_offering: 'Wait 10 seconds before responding',\n * products: ['prod_123'],\n * budget: 10000\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgent: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG]).agent('test-agent-mcp');\n\n/**\n * Pre-configured test agent client using A2A protocol.\n * Identical functionality to testAgent but uses A2A instead of MCP.\n *\n * @example\n * ```typescript\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * const result = await testAgentA2A.getProducts({\n * brief: 'Sustainable fashion brands',\n * promoted_offering: 'Eco-friendly clothing'\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgentA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_A2A_CONFIG]).agent('test-agent-a2a');\n\n/**\n * Pre-configured test agent client WITHOUT authentication (MCP protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuth } from '@adcp/sdk/testing';\n *\n * // This will fail with authentication error\n * try {\n * const result = await testAgentNoAuth.getProducts({\n * brief: 'Coffee subscription',\n * promoted_offering: 'Premium coffee'\n * });\n * } catch (error) {\n * console.log('Expected auth error:', error.message);\n * }\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuth: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_MCP_CONFIG]).agent(\n 'test-agent-no-auth-mcp'\n);\n\n/**\n * Pre-configured test agent client WITHOUT authentication (A2A protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuthA2A } from '@adcp/sdk/testing';\n *\n * // Compare authenticated vs unauthenticated\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * // This works (has auth)\n * const authResult = await testAgentA2A.getProducts({ brief: 'Test' });\n *\n * // This fails (no auth)\n * const noAuthResult = await testAgentNoAuthA2A.getProducts({ brief: 'Test' });\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuthA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_A2A_CONFIG]).agent(\n 'test-agent-no-auth-a2a'\n);\n\n/**\n * Multi-agent client with both test agents configured.\n * Useful for testing multi-agent patterns and protocol comparisons.\n *\n * @example\n * ```typescript\n * import { testAgentClient } from '@adcp/sdk/testing';\n *\n * // Access individual agents\n * const mcpAgent = testAgentClient.agent('test-agent-mcp');\n * const a2aAgent = testAgentClient.agent('test-agent-a2a');\n *\n * // Or use agent collection for parallel operations\n * const results = await testAgentClient.allAgents().getProducts({\n * brief: 'Premium coffee brands',\n * promoted_offering: 'Artisan coffee'\n * });\n * ```\n *\n * @remarks\n * This client is rate-limited and intended for testing/examples only.\n * DO NOT use in production applications.\n */\nexport const testAgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG, TEST_AGENT_A2A_CONFIG]);\n\n/**\n * Create a custom test agent configuration.\n * Useful when you need to modify the default test agent setup.\n *\n * @param overrides - Partial agent config to override defaults\n * @returns Complete agent configuration\n *\n * @example\n * ```typescript\n * import { createTestAgent, AdCPClient } from '@adcp/sdk/testing';\n *\n * // Use default test agent with custom ID\n * const config = createTestAgent({ id: 'my-test-agent' });\n * const client = new AdCPClient([config]);\n * ```\n *\n * @example\n * ```typescript\n * // Use A2A protocol instead of MCP\n * const config = createTestAgent({\n * protocol: 'a2a',\n * agent_uri: 'https://test-agent.adcontextprotocol.org'\n * });\n * ```\n */\nexport function createTestAgent(overrides?: Partial<AgentConfig>): AgentConfig {\n return {\n ...TEST_AGENT_MCP_CONFIG,\n ...overrides,\n };\n}\n\n// ====== CREATIVE AGENT HELPERS ======\n\n/**\n * Pre-configured creative agent client using MCP protocol.\n * Ready to use for creative generation and format listing.\n *\n * @example\n * ```typescript\n * import { creativeAgent } from '@adcp/sdk/testing';\n *\n * // List available creative formats\n * const formats = await creativeAgent.listFormats();\n * console.log(`Found ${formats.length} creative formats`);\n * ```\n *\n * @example\n * ```typescript\n * // Find formats by dimensions\n * const formats = await creativeAgent.listFormats();\n * const banner = formats.find(f =>\n * f.renders?.[0]?.dimensions?.width === 300 &&\n * f.renders?.[0]?.dimensions?.height === 250\n * );\n * ```\n *\n * @remarks\n * This is the official AdCP reference creative agent.\n * No authentication required for public endpoints.\n */\nexport const creativeAgent: CreativeAgentClient = new CreativeAgentClient({\n agentUrl: STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE,\n protocol: 'mcp',\n});\n\n// Note: creativeAgentA2A is not exported because A2A protocol is not yet supported\n// on the creative agent. Only MCP is currently available.\n"],"mappings":"AAGA,SAAS,4BAA4B;AACrC,SAAS,qBAAqB,gCAAgC;AAQvD,MAAM,mBAAmB;AAMzB,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAqCO,MAAM,YAAyB,IAAI,qBAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AAqBvG,MAAM,eAA4B,IAAI,qBAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AA0B1G,MAAM,kBAA+B,IAAI,qBAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACpG;AACF;AAyBO,MAAM,qBAAkC,IAAI,qBAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACvG;AACF;AAyBO,MAAM,kBAAkB,IAAI,qBAAqB,CAAC,uBAAuB,qBAAqB,CAAC;AA2B/F,SAAS,gBAAgB,WAA+C;AAC7E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AA+BO,MAAM,gBAAqC,IAAI,oBAAoB;AAAA,EACxE,UAAU,yBAAyB;AAAA,EACnC,UAAU;AACZ,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/testing/test-helpers.ts"],"sourcesContent":["// Test agent helpers for easy examples and quick testing\n// These provide pre-configured access to AdCP's public test agent\n\nimport { ADCPMultiAgentClient } from '../core/ADCPMultiAgentClient';\nimport { CreativeAgentClient, STANDARD_CREATIVE_AGENTS } from '../core/CreativeAgentClient';\nimport type { AgentClient } from '../core/AgentClient';\nimport type { AgentConfig } from '../types';\n\n/**\n * Public test agent auth token\n * This token is public and rate-limited, for testing/examples only.\n */\nexport const TEST_AGENT_TOKEN = '1v8tAhASaUYYp4odoQ1PnMpdqNaMiTrCRqYo9OJp6IQ';\n\n/**\n * Public test agent configuration - MCP protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-mcp',\n name: 'AdCP Public Test Agent (MCP)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration - A2A protocol\n * This is the raw configuration object if you need to customize it\n */\nexport const TEST_AGENT_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-a2a',\n name: 'AdCP Public Test Agent (A2A)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n auth_token: TEST_AGENT_TOKEN,\n};\n\n/**\n * Public test agent configuration without authentication - MCP protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_MCP_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-mcp',\n name: 'AdCP Public Test Agent (MCP, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org/mcp/',\n protocol: 'mcp',\n};\n\n/**\n * Public test agent configuration without authentication - A2A protocol\n * Demonstrates unauthenticated agent access patterns\n */\nexport const TEST_AGENT_NO_AUTH_A2A_CONFIG: AgentConfig = {\n id: 'test-agent-no-auth-a2a',\n name: 'AdCP Public Test Agent (A2A, No Auth)',\n agent_uri: 'https://test-agent.adcontextprotocol.org',\n protocol: 'a2a',\n};\n\n/**\n * Pre-configured test agent client using MCP protocol.\n * Ready to use for examples, documentation, and quick testing.\n *\n * @example\n * ```typescript\n * import { testAgent } from '@adcp/sdk/testing';\n *\n * // Simple getProducts call\n * const result = await testAgent.getProducts({\n * brief: 'Coffee subscription service for busy professionals',\n * promoted_offering: 'Premium monthly coffee deliveries'\n * });\n *\n * if (result.success) {\n * console.log(`Found ${result.data.products.length} products`);\n * }\n * ```\n *\n * @example\n * ```typescript\n * // With AI test orchestration (natural language instructions)\n * const result = await testAgent.createMediaBuy({\n * brief: 'Test campaign',\n * promoted_offering: 'Wait 10 seconds before responding',\n * products: ['prod_123'],\n * budget: 10000\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgent: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG]).agent('test-agent-mcp');\n\n/**\n * Pre-configured test agent client using A2A protocol.\n * Identical functionality to testAgent but uses A2A instead of MCP.\n *\n * @example\n * ```typescript\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * const result = await testAgentA2A.getProducts({\n * brief: 'Sustainable fashion brands',\n * promoted_offering: 'Eco-friendly clothing'\n * });\n * ```\n *\n * @remarks\n * This agent is rate-limited and intended for testing/examples only.\n * The auth token is public and may be rotated without notice.\n * DO NOT use in production applications.\n */\nexport const testAgentA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_A2A_CONFIG]).agent('test-agent-a2a');\n\n/**\n * Pre-configured test agent client WITHOUT authentication (MCP protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuth } from '@adcp/sdk/testing';\n *\n * // This will fail with authentication error\n * try {\n * const result = await testAgentNoAuth.getProducts({\n * brief: 'Coffee subscription',\n * promoted_offering: 'Premium coffee'\n * });\n * } catch (error) {\n * console.log('Expected auth error:', error.message);\n * }\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuth: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_MCP_CONFIG]).agent(\n 'test-agent-no-auth-mcp'\n);\n\n/**\n * Pre-configured test agent client WITHOUT authentication (A2A protocol).\n * Demonstrates what happens when calling authenticated endpoints without auth.\n * Useful for testing error handling and showing auth vs no-auth differences.\n *\n * @example\n * ```typescript\n * import { testAgentNoAuthA2A } from '@adcp/sdk/testing';\n *\n * // Compare authenticated vs unauthenticated\n * import { testAgentA2A } from '@adcp/sdk/testing';\n *\n * // This works (has auth)\n * const authResult = await testAgentA2A.getProducts({ brief: 'Test' });\n *\n * // This fails (no auth)\n * const noAuthResult = await testAgentNoAuthA2A.getProducts({ brief: 'Test' });\n * ```\n *\n * @remarks\n * This agent intentionally does NOT include authentication.\n * Use it to demonstrate authentication requirements and error handling.\n */\nexport const testAgentNoAuthA2A: AgentClient = new ADCPMultiAgentClient([TEST_AGENT_NO_AUTH_A2A_CONFIG]).agent(\n 'test-agent-no-auth-a2a'\n);\n\n/**\n * Multi-agent client with both test agents configured.\n * Useful for testing multi-agent patterns and protocol comparisons.\n *\n * @example\n * ```typescript\n * import { testAgentClient } from '@adcp/sdk/testing';\n *\n * // Access individual agents\n * const mcpAgent = testAgentClient.agent('test-agent-mcp');\n * const a2aAgent = testAgentClient.agent('test-agent-a2a');\n *\n * // Or use agent collection for parallel operations\n * const results = await testAgentClient.allAgents().getProducts({\n * brief: 'Premium coffee brands',\n * promoted_offering: 'Artisan coffee'\n * });\n * ```\n *\n * @remarks\n * This client is rate-limited and intended for testing/examples only.\n * DO NOT use in production applications.\n */\nexport const testAgentClient = new ADCPMultiAgentClient([TEST_AGENT_MCP_CONFIG, TEST_AGENT_A2A_CONFIG]);\n\n/**\n * Create a custom test agent configuration.\n * Useful when you need to modify the default test agent setup.\n *\n * @param overrides - Partial agent config to override defaults\n * @returns Complete agent configuration\n *\n * @example\n * ```typescript\n * import { createTestAgent, AdCPClient } from '@adcp/sdk/testing';\n *\n * // Use default test agent with custom ID\n * const config = createTestAgent({ id: 'my-test-agent' });\n * const client = new AdCPClient([config]);\n * ```\n *\n * @example\n * ```typescript\n * // Use A2A protocol instead of MCP\n * const config = createTestAgent({\n * protocol: 'a2a',\n * agent_uri: 'https://test-agent.adcontextprotocol.org'\n * });\n * ```\n */\nexport function createTestAgent(overrides?: Partial<AgentConfig>): AgentConfig {\n return {\n ...TEST_AGENT_MCP_CONFIG,\n ...overrides,\n };\n}\n\n// ====== CREATIVE AGENT HELPERS ======\n\n/**\n * Pre-configured creative agent client using MCP protocol.\n * Ready to use for creative generation and format listing.\n *\n * @example\n * ```typescript\n * import { creativeAgent } from '@adcp/sdk/testing';\n *\n * // List available creative formats\n * const formats = await creativeAgent.listFormatsLegacy();\n * console.log(`Found ${formats.length} creative formats`);\n * ```\n *\n * @example\n * ```typescript\n * // Find formats by dimensions\n * const formats = await creativeAgent.listFormatsLegacy();\n * const banner = formats.find(f =>\n * f.renders?.[0]?.dimensions?.width === 300 &&\n * f.renders?.[0]?.dimensions?.height === 250\n * );\n * ```\n *\n * @remarks\n * This is the official AdCP reference creative agent.\n * No authentication required for public endpoints.\n */\nexport const creativeAgent: CreativeAgentClient = new CreativeAgentClient({\n agentUrl: STANDARD_CREATIVE_AGENTS.ADCP_REFERENCE,\n protocol: 'mcp',\n});\n\n// Note: creativeAgentA2A is not exported because A2A protocol is not yet supported\n// on the creative agent. Only MCP is currently available.\n"],"mappings":"AAGA,SAAS,4BAA4B;AACrC,SAAS,qBAAqB,gCAAgC;AAQvD,MAAM,mBAAmB;AAMzB,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,wBAAqC;AAAA,EAChD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AACd;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAMO,MAAM,gCAA6C;AAAA,EACxD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAqCO,MAAM,YAAyB,IAAI,qBAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AAqBvG,MAAM,eAA4B,IAAI,qBAAqB,CAAC,qBAAqB,CAAC,EAAE,MAAM,gBAAgB;AA0B1G,MAAM,kBAA+B,IAAI,qBAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACpG;AACF;AAyBO,MAAM,qBAAkC,IAAI,qBAAqB,CAAC,6BAA6B,CAAC,EAAE;AAAA,EACvG;AACF;AAyBO,MAAM,kBAAkB,IAAI,qBAAqB,CAAC,uBAAuB,qBAAqB,CAAC;AA2B/F,SAAS,gBAAgB,WAA+C;AAC7E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AA+BO,MAAM,gBAAqC,IAAI,oBAAoB;AAAA,EACxE,UAAU,yBAAyB;AAAA,EACnC,UAAU;AACZ,CAAC;","names":[]}
@@ -3,12 +3,18 @@
3
3
  */
4
4
  import type { FormatReferenceStructuredObject as FormatID } from '../types/core.generated.mjs';
5
5
  import type { AdcpVersion } from '../version.mjs';
6
- import type { VersionEnvelopeMode } from '../protocols/index.mjs';
6
+ import type { TransportOptions, VersionEnvelopeMode } from '../protocols/index.mjs';
7
7
  export type TestScenario = 'health_check' | 'discovery' | 'create_media_buy' | 'full_sales_flow' | 'reporting_flow' | 'creative_sync' | 'creative_inline' | 'creative_reference' | 'pricing_models' | 'creative_flow' | 'creative_lifecycle' | 'signals_flow' | 'error_handling' | 'validation' | 'pricing_edge_cases' | 'temporal_validation' | 'behavior_analysis' | 'response_consistency' | 'governance_property_lists' | 'governance_content_standards' | 'property_list_filters' | 'campaign_governance' | 'campaign_governance_denied' | 'campaign_governance_conditions' | 'campaign_governance_delivery' | 'seller_governance_context' | 'si_session_lifecycle' | 'si_availability' | 'si_handoff' | 'capability_discovery' | 'schema_compliance' | 'sync_audiences' | 'media_buy_lifecycle' | 'terminal_state_enforcement' | 'package_lifecycle' | 'error_codes' | 'error_structure' | 'error_transport' | 'deterministic_creative' | 'deterministic_media_buy' | 'deterministic_account' | 'deterministic_session' | 'deterministic_delivery' | 'deterministic_budget' | 'controller_validation' | 'brand_identity' | 'brand_rights_flow' | 'creative_approval';
8
8
  export interface TestOptions {
9
9
  protocol?: 'mcp' | 'a2a';
10
10
  /** Optional cancellation signal for discovery and storyboard helper calls. */
11
11
  signal?: AbortSignal;
12
+ /**
13
+ * Runtime-only transport configuration for discovery and every storyboard
14
+ * or compliance tool call. In particular, `fetchFn` lets hosted runners
15
+ * enforce a request-scoped network policy without replacing global fetch.
16
+ */
17
+ transport?: TransportOptions;
12
18
  /**
13
19
  * AdCP protocol version the test client should speak. Storyboard runners
14
20
  * set this from the compliance cache version instead of relying on the
@@ -3,12 +3,18 @@
3
3
  */
4
4
  import type { FormatReferenceStructuredObject as FormatID } from '../types/core.generated';
5
5
  import type { AdcpVersion } from '../version';
6
- import type { VersionEnvelopeMode } from '../protocols';
6
+ import type { TransportOptions, VersionEnvelopeMode } from '../protocols';
7
7
  export type TestScenario = 'health_check' | 'discovery' | 'create_media_buy' | 'full_sales_flow' | 'reporting_flow' | 'creative_sync' | 'creative_inline' | 'creative_reference' | 'pricing_models' | 'creative_flow' | 'creative_lifecycle' | 'signals_flow' | 'error_handling' | 'validation' | 'pricing_edge_cases' | 'temporal_validation' | 'behavior_analysis' | 'response_consistency' | 'governance_property_lists' | 'governance_content_standards' | 'property_list_filters' | 'campaign_governance' | 'campaign_governance_denied' | 'campaign_governance_conditions' | 'campaign_governance_delivery' | 'seller_governance_context' | 'si_session_lifecycle' | 'si_availability' | 'si_handoff' | 'capability_discovery' | 'schema_compliance' | 'sync_audiences' | 'media_buy_lifecycle' | 'terminal_state_enforcement' | 'package_lifecycle' | 'error_codes' | 'error_structure' | 'error_transport' | 'deterministic_creative' | 'deterministic_media_buy' | 'deterministic_account' | 'deterministic_session' | 'deterministic_delivery' | 'deterministic_budget' | 'controller_validation' | 'brand_identity' | 'brand_rights_flow' | 'creative_approval';
8
8
  export interface TestOptions {
9
9
  protocol?: 'mcp' | 'a2a';
10
10
  /** Optional cancellation signal for discovery and storyboard helper calls. */
11
11
  signal?: AbortSignal;
12
+ /**
13
+ * Runtime-only transport configuration for discovery and every storyboard
14
+ * or compliance tool call. In particular, `fetchFn` lets hosted runners
15
+ * enforce a request-scoped network policy without replacing global fetch.
16
+ */
17
+ transport?: TransportOptions;
12
18
  /**
13
19
  * AdCP protocol version the test client should speak. Storyboard runners
14
20
  * set this from the compliance cache version instead of relying on the
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/testing/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/testing/types.ts"],"sourcesContent":["/**\n * Types for AdCP Agent E2E Testing\n */\n\nimport type { FormatReferenceStructuredObject as FormatID } from '../types/core.generated';\nimport type { ControllerDetection } from './test-controller';\nimport type { WebhookReceiver } from './storyboard/webhook-receiver';\nimport type { AdcpVersion } from '../version';\nimport type { VersionEnvelopeMode } from '../protocols';\n\n// Test scenarios that can be run\nexport type TestScenario =\n | 'health_check' // Just check if agent responds\n | 'discovery' // get_products, list_creative_formats, list_authorized_properties\n | 'create_media_buy' // Discovery + create a test media buy\n | 'full_sales_flow' // Full lifecycle: discovery -> create -> update -> delivery\n | 'reporting_flow' // Dedicated: create media buy -> get_media_buy_delivery validation\n | 'creative_sync' // Test sync_creatives flow\n | 'creative_inline' // Test inline creatives in create_media_buy\n | 'creative_reference' // Build -> sync -> reference a creative via creative_ids\n | 'pricing_models' // Test different pricing models the agent supports\n | 'creative_flow' // Creative agent: list_formats -> build -> preview\n | 'creative_lifecycle' // Creative agent: formats -> sync multiple -> list with/without snapshot -> build/preview\n | 'signals_flow' // Signals agent: get_signals -> activate\n // Edge case testing scenarios\n | 'error_handling' // Test agent returns proper error responses\n | 'validation' // Test schema validation (invalid inputs should be rejected)\n | 'pricing_edge_cases' // Test auction vs fixed pricing, min spend, bid_price requirements\n | 'temporal_validation' // Test date/time ordering and format validation\n // Behavioral analysis scenarios\n | 'behavior_analysis' // Analyze agent behavior: auth requirements, brief relevance, filtering\n // Response consistency scenarios\n | 'response_consistency' // Check for schema errors, pagination bugs, data mismatches\n // v3 Governance protocol scenarios\n | 'governance_property_lists' // Property list CRUD operations\n | 'governance_content_standards' // Content standards lifecycle\n | 'property_list_filters' // Property list filter round-trip: GARM, MFA, custom_tags, feature_requirements\n // v3 Campaign governance scenarios\n | 'campaign_governance' // Full lifecycle: sync_plans -> check -> execute -> report outcome\n | 'campaign_governance_denied' // Denied flow: over-budget, unauthorized market\n | 'campaign_governance_conditions' // Conditions flow: apply conditions -> re-check\n | 'campaign_governance_delivery' // Delivery monitoring with drift detection\n | 'seller_governance_context' // Seller persistence of governance_context\n // v3 SI (Sponsored Intelligence) protocol scenarios\n | 'si_session_lifecycle' // Full SI session: initiate -> messages -> terminate\n | 'si_availability' // Check SI offering availability\n | 'si_handoff' // ACP handoff flow: initiate -> purchase intent -> terminate with handoff_transaction\n // v3 Capability discovery\n | 'capability_discovery' // Verify get_adcp_capabilities response\n // Schema compliance\n | 'schema_compliance' // Validate v3 channel enum, pricing field names, format assets structure\n // Audience management\n | 'sync_audiences' // Test CRM audience sync flow\n // State machine compliance\n | 'media_buy_lifecycle' // Pause -> resume -> cancel state transitions\n | 'terminal_state_enforcement' // Verify agents reject updates to terminal-state media buys\n | 'package_lifecycle' // Package-level pause/resume independent of media buy status\n // Error compliance (transport error mapping spec)\n | 'error_codes' // Validate standard AdCP error codes in responses\n | 'error_structure' // Validate error JSON structure against error.json schema\n | 'error_transport' // Validate transport binding (structuredContent, text fallback)\n // Deterministic state machine scenarios (require comply_test_controller)\n | 'deterministic_creative' // Force creative status transitions via test controller\n | 'deterministic_media_buy' // Force media buy status transitions via test controller\n | 'deterministic_account' // Force account status transitions + operation gates\n | 'deterministic_session' // Force SI session timeout/termination\n | 'deterministic_delivery' // Simulate delivery data and verify reporting\n | 'deterministic_budget' // Simulate budget spend and verify financials\n | 'controller_validation' // Validate the test controller itself (error codes, edge cases)\n // Brand rights protocol scenarios\n | 'brand_identity' // Brand identity discovery (public and authorized access tiers)\n | 'brand_rights_flow' // Brand rights: get_rights -> acquire_rights lifecycle\n | 'creative_approval'; // Creative approval workflow for brand compliance\n\nexport interface TestOptions {\n // Protocol to use for testing (default: 'mcp')\n protocol?: 'mcp' | 'a2a';\n /** Optional cancellation signal for discovery and storyboard helper calls. */\n signal?: AbortSignal;\n /**\n * AdCP protocol version the test client should speak. Storyboard runners\n * set this from the compliance cache version instead of relying on the\n * installed package default.\n */\n adcpVersion?: AdcpVersion | (string & {});\n /**\n * Optional wire-only AdCP version envelope override. Validation and schema\n * selection continue to use `adcpVersion`; request envelopes use this value.\n * Intended for hosted stable-line badges backed by prerelease caches.\n */\n wireAdcpVersion?: AdcpVersion | (string & {});\n /**\n * Version-envelope emission mode. Defaults to `auto`; 3.0 storyboards emit\n * the legacy major marker only, while 3.1 storyboards also emit the exact\n * `adcp_version` marker. Compliance discovery may negotiate `major-only`\n * for strict pre-3.1 agents.\n */\n versionEnvelope?: VersionEnvelopeMode;\n /**\n * External schema bundle root used for request/response validation during\n * storyboard and compliance runs. The root is registered against\n * `adcpVersion` (or the storyboard/compliance version when omitted).\n */\n schemaRoot?: string;\n /** Custom User-Agent string sent with all outbound requests */\n userAgent?: string;\n // Brand reference for product discovery (preferred over brand_manifest)\n brand?: { domain: string; brand_id?: string };\n // Custom brief for product discovery\n brief?: string;\n // Budget for test media buy (default: 1000)\n budget?: number;\n // Specific format IDs to test\n format_ids?: string[];\n // Test session ID for isolation\n test_session_id?: string;\n // Channels to focus on (if not specified, tests all agent supports)\n channels?: string[];\n // Specific pricing models to test\n pricing_models?: string[];\n /**\n * Authentication for agents that require it.\n *\n * - `bearer`: raw token sent as `Authorization: Bearer <token>`.\n * - `basic`: cleartext `username` and `password`, encoded internally.\n * - `oauth`: saved OAuth tokens (access_token + refresh_token). MCP only.\n * The library auto-refreshes on 401. Obtain tokens interactively via\n * `adcp --save-auth <alias> --oauth`, then pass the saved blob here for\n * non-interactive reuse.\n * - `oauth_client_credentials`: RFC 6749 §4.4 machine-to-machine flow.\n * The library exchanges the secret for a fresh access token before each\n * call (cached while valid). Supply `tokens` to seed the cache; omit to\n * exchange on first call.\n */\n auth?:\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string }\n | {\n type: 'oauth';\n tokens: import('../types/adcp').AgentOAuthTokens;\n client?: import('../types/adcp').AgentOAuthClient;\n }\n | {\n type: 'oauth_client_credentials';\n credentials: import('../types/adcp').AgentOAuthClientCredentials;\n tokens?: import('../types/adcp').AgentOAuthTokens;\n };\n /**\n * Extra HTTP headers applied to every outbound request to the agent.\n * Forwarded into `AgentConfig.headers`, so MCP and A2A transports both\n * see them. `Authorization` and `x-adcp-auth` are reserved — auth wins.\n *\n * Typical use: tenant-routing headers (`x-adcp-tenant`, `Apx-Incoming-Host`)\n * for multi-tenant agents fronted by a reverse proxy. The CLI exposes these\n * via `-H KEY=VALUE` (repeatable) and persists them in `~/.adcp/config.json`.\n */\n headers?: Record<string, string>;\n // Brand manifest for creative testing\n brand_manifest?: {\n name: string;\n url?: string;\n tagline?: string;\n logos?: Array<{\n url: string;\n orientation?: 'square' | 'horizontal' | 'vertical' | 'stacked';\n background?: 'dark-bg' | 'light-bg' | 'transparent-bg';\n variant?: 'primary' | 'secondary' | 'icon' | 'wordmark' | 'full-lockup';\n tags?: string[];\n usage?: string;\n width?: number;\n height?: number;\n }>;\n colors?: Record<string, string>;\n tone?: {\n voice?: string;\n attributes?: string[];\n dos?: string[];\n donts?: string[];\n };\n assets?: Array<{\n asset_id: string;\n asset_type: string;\n url: string;\n width?: number;\n height?: number;\n tags?: string[];\n }>;\n };\n // For creative testing: test multiple formats programmatically\n test_all_formats?: boolean;\n // For creative testing: max formats to test when test_all_formats is true\n max_formats_to_test?: number;\n // For signals testing: specific signal types to test\n signal_types?: string[];\n // For governance testing: name for test property list\n property_list_name?: string;\n // For governance testing: specific content standards to test\n content_standards_id?: string;\n // For SI testing: specific offering ID to test\n si_offering_id?: string;\n // For SI testing: initial conversation context\n si_context?: string;\n /**\n * Shared explicit account id for test scenarios that need an account-scoped\n * request. Domain-specific account ids below take precedence when provided.\n */\n account_id?: string;\n /**\n * For media-buy testing: account ID to use with get_products,\n * create_media_buy, sync_creatives, and related media-buy flows.\n */\n media_buy_account_id?: string;\n // For audience testing: account ID to use with sync_audiences\n audience_account_id?: string;\n // When true, use sandbox mode. For implicit accounts, uses the natural key with\n // sandbox: true. For explicit accounts, discovers sandbox accounts via list_accounts.\n sandbox?: boolean;\n /**\n * When true, the runner injects `ext.adcp.disable_sandbox: true` on every\n * outgoing request, signaling the agent under test to bypass any internal\n * sandbox routing (env-var fallbacks, brand-domain heuristics, fixture\n * substitutes) and exercise its real adapter path. Distinct from `sandbox`\n * (which sets `account.sandbox: false` — a value, not a routing hint).\n *\n * Honored by adopters who explicitly read `ext.adcp.disable_sandbox`.\n * Agents that don't recognize the field ignore it (per spec, `ext` is\n * accepted-without-error). The pair (sandbox=false + disable_sandbox=true)\n * is the strongest \"production path only\" signal the runner can send;\n * `--no-sandbox` on `adcp storyboard run` sets both. Issue #841.\n */\n disable_sandbox?: boolean;\n /**\n * Fictional-entity test-kit data loaded from `test-kits/<name>.yaml`.\n * Storyboard phases may skip based on fields here (e.g. `skip_if: \"!test_kit.auth.api_key\"`).\n */\n test_kit?: {\n auth?: {\n /** API key the runner presents on API-key probes. */\n api_key?: string;\n /** HTTP Basic credential the runner presents on Basic-auth probes. */\n basic?: {\n /** Username portion of the Basic credential. */\n username?: string;\n /** Password portion of the Basic credential. */\n password?: string;\n /** Unencoded `username:password` pair. */\n credentials?: string;\n };\n /**\n * Auth-required, read-only tool the runner uses for unauth + invalid-key probes.\n * Required whenever `auth` is declared — no default is substituted. Must be one of\n * the values in `PROBE_TASK_ALLOWLIST`. Kits that miss this or pick a task outside\n * the allowlist fail at `comply()` / `runStoryboard()` entry with\n * `TestKitValidationError`.\n */\n probe_task: string;\n };\n [key: string]: unknown;\n };\n /** @internal Pre-created client from comply() — avoids per-scenario MCP reconnection */\n _client?: unknown;\n /** @internal Pre-discovered profile from comply() — skips per-scenario discovery */\n _profile?: AgentProfile;\n /**\n * @internal Server-declared AdCP version learned during capability discovery.\n * Storyboard response validation uses this for version-skew compatibility\n * without forcing the transport client to pin a schema bundle that may not\n * ship with the installed SDK.\n */\n _serverAdcpVersion?: string;\n /** @internal Test controller capabilities from comply() — set when comply_test_controller detected */\n _controllerCapabilities?: ControllerDetection;\n /** @internal Pre-created webhook receiver, used for unit-test injection. When\n * present, the runner skips creating its own listener and does NOT close\n * the receiver after the run (caller-owned). Production callers pass\n * `webhook_receiver` instead. */\n _webhookReceiver?: WebhookReceiver;\n}\n\nexport interface TestStepResult {\n step: string;\n task?: string;\n passed: boolean;\n duration_ms: number;\n details?: string;\n error?: string;\n response_preview?: string;\n // Structured data for collectObservations() — decoupled from response_preview display\n observation_data?: Record<string, unknown>;\n // For tracking what was created (for cleanup or follow-up)\n created_id?: string;\n // Deprecation or other warnings\n warnings?: string[];\n /** True when the step was skipped (including re-graded branch-set peers). */\n skipped?: boolean;\n /** Canonical skip reason when `skipped` is true; maps to `RunnerSkipReason`. */\n skip_reason?: string;\n /**\n * Selection reason when a skipped-looking step was intentionally outside\n * the caller's requested run. Summary artifacts use this to keep\n * not-selected steps out of actionable skip-cause rollups.\n */\n selection_reason?: string;\n /**\n * Names the unmet runtime requirement when `skip_reason` is\n * `'requirement_unmet'` (per adcp-client#1626). Carries the same value\n * the storyboard authored in `Storyboard.requires`. Lets skip-cause\n * aggregators sub-group not-applicable scenarios per-requirement\n * without parsing the warning text. Absent for every other skip reason.\n */\n requirement?: string;\n}\n\nexport interface AgentProfile {\n name: string;\n tools: string[];\n channels?: string[];\n pricing_models?: string[];\n format_ids?: string[];\n delivery_types?: string[];\n // For creative agents\n supported_formats?: Array<{\n format_id: FormatID;\n name?: string;\n required_assets?: string[];\n optional_assets?: string[];\n }>;\n // For signals agents\n supported_signals?: Array<{\n signal_id: string;\n name?: string;\n type?: string;\n }>;\n // v3 capabilities\n adcp_version?: 'v2' | 'v3';\n /**\n * AdCP major versions the agent declared in `get_adcp_capabilities.adcp.major_versions`.\n * Drives version-gated storyboard filtering so a v3.0 agent isn't failed against a\n * storyboard introduced in a later minor version.\n */\n adcp_major_versions?: number[];\n /**\n * Exact/release-precision versions from\n * `get_adcp_capabilities.adcp.supported_versions`.\n */\n adcp_supported_versions?: string[];\n /**\n * Seller's full AdCP build version from\n * `get_adcp_capabilities.adcp.build_version`.\n */\n adcp_build_version?: string;\n supported_protocols?: string[];\n /** Specialism claims from get_adcp_capabilities.specialisms */\n specialisms?: string[];\n supports_governance?: boolean;\n supports_si?: boolean;\n /**\n * Populated when the agent advertises `get_adcp_capabilities` but the call failed\n * or returned no data. Signals the compliance runner that the universal-only\n * result is due to a broken caps probe, not an agent that lacks v3 support.\n */\n capabilities_probe_error?: string;\n /**\n * Raw `get_adcp_capabilities` response body. Used by the storyboard runner to\n * evaluate `requires_capability` predicates (e.g. `adcp.idempotency.supported`)\n * that reference fields not extracted into the normalised profile shape above.\n */\n raw_capabilities?: unknown;\n /**\n * SDK version string the agent self-reported in `get_adcp_capabilities`, e.g.\n * `\"@adcp/client@5.14.0\"`. Populated opportunistically — absent for hand-rolled\n * agents that don't emit the field. Used by the storyboard runner to suffix\n * shape-drift hints when the reported version predates the recommended helper.\n */\n library_version?: string;\n}\n\nexport interface TestResult {\n agent_url: string;\n scenario: TestScenario;\n overall_passed: boolean;\n steps?: TestStepResult[];\n summary: string;\n total_duration_ms: number;\n tested_at: string;\n // Agent profile discovered during testing\n agent_profile?: AgentProfile;\n}\n\nexport interface SuiteResult {\n agent_url: string;\n agent_profile: AgentProfile;\n /** Scenarios that were run */\n scenarios_run: TestScenario[];\n /** Scenarios skipped because the agent does not advertise the required tools */\n scenarios_skipped: TestScenario[];\n results: TestResult[];\n /**\n * True only when at least one scenario ran and none failed.\n * False for both \"all failed\" and \"no applicable scenarios found\".\n */\n overall_passed: boolean;\n passed_count: number;\n failed_count: number;\n /** Wall-clock time including capability discovery and all scenario runs */\n total_duration_ms: number;\n tested_at: string;\n}\n\n// Generic task result from executeTask\nexport interface TaskResult {\n success: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- response shape varies by tool; typed per-access in scenarios\n data?: any;\n error?: string;\n /** Structured AdCP error forwarded from the transport layer. Mirrors `TaskResultFailure.adcpError`. */\n adcp_error?: import('../core/ConversationTypes').AdcpErrorInfo;\n /**\n * Internal: which MCP extraction path produced `data`. Set by the response\n * unwrapper and the raw MCP probe so the storyboard runner can surface it\n * in its output contract. Consumers outside the runner should treat this\n * as implementation detail — it's NOT part of the public `AdCPResponse`.\n */\n _extraction_path?: 'structured_content' | 'text_fallback' | 'error' | 'none';\n}\n\n// Logger interface for library use\nexport interface Logger {\n info: (context: object, message: string) => void;\n error: (context: object, message: string) => void;\n warn: (context: object, message: string) => void;\n debug: (context: object, message: string) => void;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/testing/types.ts"],"sourcesContent":["/**\n * Types for AdCP Agent E2E Testing\n */\n\nimport type { FormatReferenceStructuredObject as FormatID } from '../types/core.generated';\nimport type { ControllerDetection } from './test-controller';\nimport type { WebhookReceiver } from './storyboard/webhook-receiver';\nimport type { AdcpVersion } from '../version';\nimport type { TransportOptions, VersionEnvelopeMode } from '../protocols';\n\n// Test scenarios that can be run\nexport type TestScenario =\n | 'health_check' // Just check if agent responds\n | 'discovery' // get_products, list_creative_formats, list_authorized_properties\n | 'create_media_buy' // Discovery + create a test media buy\n | 'full_sales_flow' // Full lifecycle: discovery -> create -> update -> delivery\n | 'reporting_flow' // Dedicated: create media buy -> get_media_buy_delivery validation\n | 'creative_sync' // Test sync_creatives flow\n | 'creative_inline' // Test inline creatives in create_media_buy\n | 'creative_reference' // Build -> sync -> reference a creative via creative_ids\n | 'pricing_models' // Test different pricing models the agent supports\n | 'creative_flow' // Creative agent: list_formats -> build -> preview\n | 'creative_lifecycle' // Creative agent: formats -> sync multiple -> list with/without snapshot -> build/preview\n | 'signals_flow' // Signals agent: get_signals -> activate\n // Edge case testing scenarios\n | 'error_handling' // Test agent returns proper error responses\n | 'validation' // Test schema validation (invalid inputs should be rejected)\n | 'pricing_edge_cases' // Test auction vs fixed pricing, min spend, bid_price requirements\n | 'temporal_validation' // Test date/time ordering and format validation\n // Behavioral analysis scenarios\n | 'behavior_analysis' // Analyze agent behavior: auth requirements, brief relevance, filtering\n // Response consistency scenarios\n | 'response_consistency' // Check for schema errors, pagination bugs, data mismatches\n // v3 Governance protocol scenarios\n | 'governance_property_lists' // Property list CRUD operations\n | 'governance_content_standards' // Content standards lifecycle\n | 'property_list_filters' // Property list filter round-trip: GARM, MFA, custom_tags, feature_requirements\n // v3 Campaign governance scenarios\n | 'campaign_governance' // Full lifecycle: sync_plans -> check -> execute -> report outcome\n | 'campaign_governance_denied' // Denied flow: over-budget, unauthorized market\n | 'campaign_governance_conditions' // Conditions flow: apply conditions -> re-check\n | 'campaign_governance_delivery' // Delivery monitoring with drift detection\n | 'seller_governance_context' // Seller persistence of governance_context\n // v3 SI (Sponsored Intelligence) protocol scenarios\n | 'si_session_lifecycle' // Full SI session: initiate -> messages -> terminate\n | 'si_availability' // Check SI offering availability\n | 'si_handoff' // ACP handoff flow: initiate -> purchase intent -> terminate with handoff_transaction\n // v3 Capability discovery\n | 'capability_discovery' // Verify get_adcp_capabilities response\n // Schema compliance\n | 'schema_compliance' // Validate v3 channel enum, pricing field names, format assets structure\n // Audience management\n | 'sync_audiences' // Test CRM audience sync flow\n // State machine compliance\n | 'media_buy_lifecycle' // Pause -> resume -> cancel state transitions\n | 'terminal_state_enforcement' // Verify agents reject updates to terminal-state media buys\n | 'package_lifecycle' // Package-level pause/resume independent of media buy status\n // Error compliance (transport error mapping spec)\n | 'error_codes' // Validate standard AdCP error codes in responses\n | 'error_structure' // Validate error JSON structure against error.json schema\n | 'error_transport' // Validate transport binding (structuredContent, text fallback)\n // Deterministic state machine scenarios (require comply_test_controller)\n | 'deterministic_creative' // Force creative status transitions via test controller\n | 'deterministic_media_buy' // Force media buy status transitions via test controller\n | 'deterministic_account' // Force account status transitions + operation gates\n | 'deterministic_session' // Force SI session timeout/termination\n | 'deterministic_delivery' // Simulate delivery data and verify reporting\n | 'deterministic_budget' // Simulate budget spend and verify financials\n | 'controller_validation' // Validate the test controller itself (error codes, edge cases)\n // Brand rights protocol scenarios\n | 'brand_identity' // Brand identity discovery (public and authorized access tiers)\n | 'brand_rights_flow' // Brand rights: get_rights -> acquire_rights lifecycle\n | 'creative_approval'; // Creative approval workflow for brand compliance\n\nexport interface TestOptions {\n // Protocol to use for testing (default: 'mcp')\n protocol?: 'mcp' | 'a2a';\n /** Optional cancellation signal for discovery and storyboard helper calls. */\n signal?: AbortSignal;\n /**\n * Runtime-only transport configuration for discovery and every storyboard\n * or compliance tool call. In particular, `fetchFn` lets hosted runners\n * enforce a request-scoped network policy without replacing global fetch.\n */\n transport?: TransportOptions;\n /**\n * AdCP protocol version the test client should speak. Storyboard runners\n * set this from the compliance cache version instead of relying on the\n * installed package default.\n */\n adcpVersion?: AdcpVersion | (string & {});\n /**\n * Optional wire-only AdCP version envelope override. Validation and schema\n * selection continue to use `adcpVersion`; request envelopes use this value.\n * Intended for hosted stable-line badges backed by prerelease caches.\n */\n wireAdcpVersion?: AdcpVersion | (string & {});\n /**\n * Version-envelope emission mode. Defaults to `auto`; 3.0 storyboards emit\n * the legacy major marker only, while 3.1 storyboards also emit the exact\n * `adcp_version` marker. Compliance discovery may negotiate `major-only`\n * for strict pre-3.1 agents.\n */\n versionEnvelope?: VersionEnvelopeMode;\n /**\n * External schema bundle root used for request/response validation during\n * storyboard and compliance runs. The root is registered against\n * `adcpVersion` (or the storyboard/compliance version when omitted).\n */\n schemaRoot?: string;\n /** Custom User-Agent string sent with all outbound requests */\n userAgent?: string;\n // Brand reference for product discovery (preferred over brand_manifest)\n brand?: { domain: string; brand_id?: string };\n // Custom brief for product discovery\n brief?: string;\n // Budget for test media buy (default: 1000)\n budget?: number;\n // Specific format IDs to test\n format_ids?: string[];\n // Test session ID for isolation\n test_session_id?: string;\n // Channels to focus on (if not specified, tests all agent supports)\n channels?: string[];\n // Specific pricing models to test\n pricing_models?: string[];\n /**\n * Authentication for agents that require it.\n *\n * - `bearer`: raw token sent as `Authorization: Bearer <token>`.\n * - `basic`: cleartext `username` and `password`, encoded internally.\n * - `oauth`: saved OAuth tokens (access_token + refresh_token). MCP only.\n * The library auto-refreshes on 401. Obtain tokens interactively via\n * `adcp --save-auth <alias> --oauth`, then pass the saved blob here for\n * non-interactive reuse.\n * - `oauth_client_credentials`: RFC 6749 §4.4 machine-to-machine flow.\n * The library exchanges the secret for a fresh access token before each\n * call (cached while valid). Supply `tokens` to seed the cache; omit to\n * exchange on first call.\n */\n auth?:\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string }\n | {\n type: 'oauth';\n tokens: import('../types/adcp').AgentOAuthTokens;\n client?: import('../types/adcp').AgentOAuthClient;\n }\n | {\n type: 'oauth_client_credentials';\n credentials: import('../types/adcp').AgentOAuthClientCredentials;\n tokens?: import('../types/adcp').AgentOAuthTokens;\n };\n /**\n * Extra HTTP headers applied to every outbound request to the agent.\n * Forwarded into `AgentConfig.headers`, so MCP and A2A transports both\n * see them. `Authorization` and `x-adcp-auth` are reserved — auth wins.\n *\n * Typical use: tenant-routing headers (`x-adcp-tenant`, `Apx-Incoming-Host`)\n * for multi-tenant agents fronted by a reverse proxy. The CLI exposes these\n * via `-H KEY=VALUE` (repeatable) and persists them in `~/.adcp/config.json`.\n */\n headers?: Record<string, string>;\n // Brand manifest for creative testing\n brand_manifest?: {\n name: string;\n url?: string;\n tagline?: string;\n logos?: Array<{\n url: string;\n orientation?: 'square' | 'horizontal' | 'vertical' | 'stacked';\n background?: 'dark-bg' | 'light-bg' | 'transparent-bg';\n variant?: 'primary' | 'secondary' | 'icon' | 'wordmark' | 'full-lockup';\n tags?: string[];\n usage?: string;\n width?: number;\n height?: number;\n }>;\n colors?: Record<string, string>;\n tone?: {\n voice?: string;\n attributes?: string[];\n dos?: string[];\n donts?: string[];\n };\n assets?: Array<{\n asset_id: string;\n asset_type: string;\n url: string;\n width?: number;\n height?: number;\n tags?: string[];\n }>;\n };\n // For creative testing: test multiple formats programmatically\n test_all_formats?: boolean;\n // For creative testing: max formats to test when test_all_formats is true\n max_formats_to_test?: number;\n // For signals testing: specific signal types to test\n signal_types?: string[];\n // For governance testing: name for test property list\n property_list_name?: string;\n // For governance testing: specific content standards to test\n content_standards_id?: string;\n // For SI testing: specific offering ID to test\n si_offering_id?: string;\n // For SI testing: initial conversation context\n si_context?: string;\n /**\n * Shared explicit account id for test scenarios that need an account-scoped\n * request. Domain-specific account ids below take precedence when provided.\n */\n account_id?: string;\n /**\n * For media-buy testing: account ID to use with get_products,\n * create_media_buy, sync_creatives, and related media-buy flows.\n */\n media_buy_account_id?: string;\n // For audience testing: account ID to use with sync_audiences\n audience_account_id?: string;\n // When true, use sandbox mode. For implicit accounts, uses the natural key with\n // sandbox: true. For explicit accounts, discovers sandbox accounts via list_accounts.\n sandbox?: boolean;\n /**\n * When true, the runner injects `ext.adcp.disable_sandbox: true` on every\n * outgoing request, signaling the agent under test to bypass any internal\n * sandbox routing (env-var fallbacks, brand-domain heuristics, fixture\n * substitutes) and exercise its real adapter path. Distinct from `sandbox`\n * (which sets `account.sandbox: false` — a value, not a routing hint).\n *\n * Honored by adopters who explicitly read `ext.adcp.disable_sandbox`.\n * Agents that don't recognize the field ignore it (per spec, `ext` is\n * accepted-without-error). The pair (sandbox=false + disable_sandbox=true)\n * is the strongest \"production path only\" signal the runner can send;\n * `--no-sandbox` on `adcp storyboard run` sets both. Issue #841.\n */\n disable_sandbox?: boolean;\n /**\n * Fictional-entity test-kit data loaded from `test-kits/<name>.yaml`.\n * Storyboard phases may skip based on fields here (e.g. `skip_if: \"!test_kit.auth.api_key\"`).\n */\n test_kit?: {\n auth?: {\n /** API key the runner presents on API-key probes. */\n api_key?: string;\n /** HTTP Basic credential the runner presents on Basic-auth probes. */\n basic?: {\n /** Username portion of the Basic credential. */\n username?: string;\n /** Password portion of the Basic credential. */\n password?: string;\n /** Unencoded `username:password` pair. */\n credentials?: string;\n };\n /**\n * Auth-required, read-only tool the runner uses for unauth + invalid-key probes.\n * Required whenever `auth` is declared — no default is substituted. Must be one of\n * the values in `PROBE_TASK_ALLOWLIST`. Kits that miss this or pick a task outside\n * the allowlist fail at `comply()` / `runStoryboard()` entry with\n * `TestKitValidationError`.\n */\n probe_task: string;\n };\n [key: string]: unknown;\n };\n /** @internal Pre-created client from comply() — avoids per-scenario MCP reconnection */\n _client?: unknown;\n /** @internal Pre-discovered profile from comply() — skips per-scenario discovery */\n _profile?: AgentProfile;\n /**\n * @internal Server-declared AdCP version learned during capability discovery.\n * Storyboard response validation uses this for version-skew compatibility\n * without forcing the transport client to pin a schema bundle that may not\n * ship with the installed SDK.\n */\n _serverAdcpVersion?: string;\n /** @internal Test controller capabilities from comply() — set when comply_test_controller detected */\n _controllerCapabilities?: ControllerDetection;\n /** @internal Pre-created webhook receiver, used for unit-test injection. When\n * present, the runner skips creating its own listener and does NOT close\n * the receiver after the run (caller-owned). Production callers pass\n * `webhook_receiver` instead. */\n _webhookReceiver?: WebhookReceiver;\n}\n\nexport interface TestStepResult {\n step: string;\n task?: string;\n passed: boolean;\n duration_ms: number;\n details?: string;\n error?: string;\n response_preview?: string;\n // Structured data for collectObservations() — decoupled from response_preview display\n observation_data?: Record<string, unknown>;\n // For tracking what was created (for cleanup or follow-up)\n created_id?: string;\n // Deprecation or other warnings\n warnings?: string[];\n /** True when the step was skipped (including re-graded branch-set peers). */\n skipped?: boolean;\n /** Canonical skip reason when `skipped` is true; maps to `RunnerSkipReason`. */\n skip_reason?: string;\n /**\n * Selection reason when a skipped-looking step was intentionally outside\n * the caller's requested run. Summary artifacts use this to keep\n * not-selected steps out of actionable skip-cause rollups.\n */\n selection_reason?: string;\n /**\n * Names the unmet runtime requirement when `skip_reason` is\n * `'requirement_unmet'` (per adcp-client#1626). Carries the same value\n * the storyboard authored in `Storyboard.requires`. Lets skip-cause\n * aggregators sub-group not-applicable scenarios per-requirement\n * without parsing the warning text. Absent for every other skip reason.\n */\n requirement?: string;\n}\n\nexport interface AgentProfile {\n name: string;\n tools: string[];\n channels?: string[];\n pricing_models?: string[];\n format_ids?: string[];\n delivery_types?: string[];\n // For creative agents\n supported_formats?: Array<{\n format_id: FormatID;\n name?: string;\n required_assets?: string[];\n optional_assets?: string[];\n }>;\n // For signals agents\n supported_signals?: Array<{\n signal_id: string;\n name?: string;\n type?: string;\n }>;\n // v3 capabilities\n adcp_version?: 'v2' | 'v3';\n /**\n * AdCP major versions the agent declared in `get_adcp_capabilities.adcp.major_versions`.\n * Drives version-gated storyboard filtering so a v3.0 agent isn't failed against a\n * storyboard introduced in a later minor version.\n */\n adcp_major_versions?: number[];\n /**\n * Exact/release-precision versions from\n * `get_adcp_capabilities.adcp.supported_versions`.\n */\n adcp_supported_versions?: string[];\n /**\n * Seller's full AdCP build version from\n * `get_adcp_capabilities.adcp.build_version`.\n */\n adcp_build_version?: string;\n supported_protocols?: string[];\n /** Specialism claims from get_adcp_capabilities.specialisms */\n specialisms?: string[];\n supports_governance?: boolean;\n supports_si?: boolean;\n /**\n * Populated when the agent advertises `get_adcp_capabilities` but the call failed\n * or returned no data. Signals the compliance runner that the universal-only\n * result is due to a broken caps probe, not an agent that lacks v3 support.\n */\n capabilities_probe_error?: string;\n /**\n * Raw `get_adcp_capabilities` response body. Used by the storyboard runner to\n * evaluate `requires_capability` predicates (e.g. `adcp.idempotency.supported`)\n * that reference fields not extracted into the normalised profile shape above.\n */\n raw_capabilities?: unknown;\n /**\n * SDK version string the agent self-reported in `get_adcp_capabilities`, e.g.\n * `\"@adcp/client@5.14.0\"`. Populated opportunistically — absent for hand-rolled\n * agents that don't emit the field. Used by the storyboard runner to suffix\n * shape-drift hints when the reported version predates the recommended helper.\n */\n library_version?: string;\n}\n\nexport interface TestResult {\n agent_url: string;\n scenario: TestScenario;\n overall_passed: boolean;\n steps?: TestStepResult[];\n summary: string;\n total_duration_ms: number;\n tested_at: string;\n // Agent profile discovered during testing\n agent_profile?: AgentProfile;\n}\n\nexport interface SuiteResult {\n agent_url: string;\n agent_profile: AgentProfile;\n /** Scenarios that were run */\n scenarios_run: TestScenario[];\n /** Scenarios skipped because the agent does not advertise the required tools */\n scenarios_skipped: TestScenario[];\n results: TestResult[];\n /**\n * True only when at least one scenario ran and none failed.\n * False for both \"all failed\" and \"no applicable scenarios found\".\n */\n overall_passed: boolean;\n passed_count: number;\n failed_count: number;\n /** Wall-clock time including capability discovery and all scenario runs */\n total_duration_ms: number;\n tested_at: string;\n}\n\n// Generic task result from executeTask\nexport interface TaskResult {\n success: boolean;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- response shape varies by tool; typed per-access in scenarios\n data?: any;\n error?: string;\n /** Structured AdCP error forwarded from the transport layer. Mirrors `TaskResultFailure.adcpError`. */\n adcp_error?: import('../core/ConversationTypes').AdcpErrorInfo;\n /**\n * Internal: which MCP extraction path produced `data`. Set by the response\n * unwrapper and the raw MCP probe so the storyboard runner can surface it\n * in its output contract. Consumers outside the runner should treat this\n * as implementation detail — it's NOT part of the public `AdCPResponse`.\n */\n _extraction_path?: 'structured_content' | 'text_fallback' | 'error' | 'none';\n}\n\n// Logger interface for library use\nexport interface Logger {\n info: (context: object, message: string) => void;\n error: (context: object, message: string) => void;\n warn: (context: object, message: string) => void;\n debug: (context: object, message: string) => void;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -15,12 +15,12 @@ export interface MediaBuy {
15
15
  /** Total budget amount (currency determined by pricing options) */
16
16
  total_budget: number;
17
17
  targeting: Targeting;
18
- creative_assets: CreativeAsset[];
18
+ creative_assets: LegacyManagedCreativeAsset[];
19
19
  delivery_schedule: DeliverySchedule;
20
20
  created_at: string;
21
21
  updated_at: string;
22
22
  }
23
- export interface CreativeAsset {
23
+ export interface LegacyManagedCreativeAsset {
24
24
  id: string;
25
25
  name: string;
26
26
  type: 'image' | 'video' | 'html' | 'native';
@@ -51,7 +51,7 @@ export interface CreativeSubAsset {
51
51
  height: number;
52
52
  };
53
53
  }
54
- export interface AdvertisingProduct {
54
+ export interface LegacyAdvertisingProduct {
55
55
  id: string;
56
56
  name: string;
57
57
  description: string;
@@ -61,10 +61,10 @@ export interface AdvertisingProduct {
61
61
  currency: string;
62
62
  minimum_spend?: number;
63
63
  targeting_capabilities: string[];
64
- creative_formats: CreativeFormat[];
64
+ creative_formats: LegacyCreativeFormatSummary[];
65
65
  inventory_details: InventoryDetails;
66
66
  }
67
- export interface CreativeFormat {
67
+ export interface LegacyCreativeFormatSummary {
68
68
  format_id: FormatID;
69
69
  name: string;
70
70
  dimensions: {
@@ -497,11 +497,11 @@ export interface CreativeComplianceData {
497
497
  export interface ManageCreativeAssetsRequest {
498
498
  action: 'upload' | 'list' | 'update' | 'assign' | 'unassign' | 'delete';
499
499
  adcp_version?: string;
500
- assets?: CreativeAsset[];
501
- filters?: CreativeFilters;
500
+ assets?: LegacyManagedCreativeAsset[];
501
+ filters?: LegacyManagedCreativeFilters;
502
502
  pagination?: PaginationOptions;
503
503
  creative_id?: string;
504
- updates?: Partial<CreativeAsset>;
504
+ updates?: Partial<LegacyManagedCreativeAsset>;
505
505
  creative_ids?: string[];
506
506
  media_buy_id?: string;
507
507
  buyer_ref?: string;
@@ -511,8 +511,8 @@ export interface ManageCreativeAssetsRequest {
511
511
  package_ids?: string[];
512
512
  archive?: boolean;
513
513
  }
514
- export interface SyncCreativesRequest {
515
- creatives: CreativeAsset[];
514
+ export interface LegacyManageSyncCreativesRequest {
515
+ creatives: LegacyManagedCreativeAsset[];
516
516
  patch?: boolean;
517
517
  dry_run?: boolean;
518
518
  assignments?: {
@@ -520,8 +520,8 @@ export interface SyncCreativesRequest {
520
520
  };
521
521
  validation_mode?: 'strict' | 'lenient';
522
522
  }
523
- export interface ListCreativesRequest {
524
- filters?: CreativeFilters;
523
+ export interface LegacyManageListCreativesRequest {
524
+ filters?: LegacyManagedCreativeFilters;
525
525
  sort?: {
526
526
  field: string;
527
527
  direction: 'asc' | 'desc';
@@ -530,7 +530,7 @@ export interface ListCreativesRequest {
530
530
  include_assignments?: boolean;
531
531
  include_performance?: boolean;
532
532
  }
533
- export interface CreativeFilters {
533
+ export interface LegacyManagedCreativeFilters {
534
534
  format?: FormatID | FormatID[];
535
535
  type?: ('image' | 'video' | 'html' | 'native') | ('image' | 'video' | 'html' | 'native')[];
536
536
  status?: string | string[];
@@ -592,7 +592,7 @@ export interface ManageCreativeAssetsResponse {
592
592
  };
593
593
  errors?: ManageCreativeAssetsError[];
594
594
  }
595
- export interface ListCreativesResponse {
595
+ export interface LegacyManageListCreativesResponse {
596
596
  success: boolean;
597
597
  creatives: CreativeLibraryItem[];
598
598
  total_count: number;