@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
@@ -1,4 +1,25 @@
1
+ import {
2
+ projectCreativeForDelivery
3
+ } from "../v2/projection/creative-delivery.mjs";
4
+ import { resolveCanonicalFormatKind } from "../v2/projection/v1-to-v2.mjs";
1
5
  function inlineCreativesForPackages(packages, creatives, options = {}) {
6
+ assertCanonicalInlineInputs(packages, creatives, options);
7
+ return inlineCreativesForPackagesInternal(packages, creatives, options, "canonical");
8
+ }
9
+ function inlineCreativesForPackagesLegacy(packages, creatives, options = {}) {
10
+ const { creativeFormatWireMode = "legacy", ...sharedOptions } = options;
11
+ return inlineCreativesForPackagesInternal(
12
+ packages,
13
+ creatives,
14
+ {
15
+ ...sharedOptions,
16
+ legacyFormatConverter: options.legacyFormatConverter,
17
+ canonicalFormatLegacyResolver: options.canonicalFormatLegacyResolver
18
+ },
19
+ creativeFormatWireMode
20
+ );
21
+ }
22
+ function inlineCreativesForPackagesInternal(packages, creatives, options, creativeFormatWireMode) {
2
23
  const {
3
24
  assignments,
4
25
  includeUnassignedCreatives = assignments == null || assignments.length === 0,
@@ -6,7 +27,9 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
6
27
  packageId = defaultPackageId,
7
28
  onUnmatchedAssignment = "throw",
8
29
  onMissingCreative = "throw",
9
- onIncompatibleAssignment = "throw"
30
+ onIncompatibleAssignment = "throw",
31
+ legacyFormatConverter,
32
+ canonicalFormatLegacyResolver
10
33
  } = options;
11
34
  const creativesById = /* @__PURE__ */ new Map();
12
35
  for (const creative of creatives) {
@@ -42,9 +65,26 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
42
65
  for (const assignment of assigned) {
43
66
  const creative = creativesById.get(assignment.creative_id);
44
67
  if (!creative) continue;
45
- const compatible = !filterByFormat || creativeMatchesPackage(pkg, creative);
68
+ const sourceCompatible = !filterByFormat || creativeMatchesPackage(pkg, creative);
69
+ if (!sourceCompatible) {
70
+ if (onIncompatibleAssignment === "throw") {
71
+ throw new Error(
72
+ `inlineCreativesForPackages assignment creative_id "${assignment.creative_id}" does not match package_id "${assignment.package_id}" format selectors`
73
+ );
74
+ }
75
+ continue;
76
+ }
77
+ const projected = projectCreativeForDelivery(
78
+ creative,
79
+ pkg,
80
+ creativeFormatWireMode,
81
+ "inline_creatives",
82
+ legacyFormatConverter,
83
+ canonicalFormatLegacyResolver
84
+ );
85
+ const compatible = !filterByFormat || creativeMatchesPackage(pkg, projected);
46
86
  if (compatible) {
47
- inlined.push(applyAssignmentToCreative(creative, assignment));
87
+ inlined.push(applyAssignmentToCreative(projected, assignment));
48
88
  } else if (onIncompatibleAssignment === "throw") {
49
89
  throw new Error(
50
90
  `inlineCreativesForPackages assignment creative_id "${assignment.creative_id}" does not match package_id "${assignment.package_id}" format selectors`
@@ -54,8 +94,17 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
54
94
  if (includeUnassignedCreatives) {
55
95
  for (const creative of creatives) {
56
96
  if (typeof creative.creative_id === "string" && assignedCreativeIds.has(creative.creative_id)) continue;
57
- if (!filterByFormat || creativeMatchesPackage(pkg, creative)) {
58
- inlined.push({ ...creative });
97
+ if (filterByFormat && !creativeMatchesPackage(pkg, creative)) continue;
98
+ const projected = projectCreativeForDelivery(
99
+ creative,
100
+ pkg,
101
+ creativeFormatWireMode,
102
+ "inline_creatives",
103
+ legacyFormatConverter,
104
+ canonicalFormatLegacyResolver
105
+ );
106
+ if (!filterByFormat || creativeMatchesPackage(pkg, projected)) {
107
+ inlined.push({ ...projected });
59
108
  }
60
109
  }
61
110
  }
@@ -74,6 +123,28 @@ function inlineCreativesForPackages(packages, creatives, options = {}) {
74
123
  }
75
124
  return result;
76
125
  }
126
+ function assertCanonicalInlineInputs(packages, creatives, options) {
127
+ const unsafeOptions = options;
128
+ if ("creativeFormatWireMode" in unsafeOptions || "legacyFormatConverter" in unsafeOptions || "canonicalFormatLegacyResolver" in unsafeOptions) {
129
+ throw new Error(
130
+ "inlineCreativesForPackages is canonical-only; use inlineCreativesForPackagesLegacy for legacy wire projection"
131
+ );
132
+ }
133
+ for (const pkg of packages) {
134
+ if ("format_ids" in pkg) {
135
+ throw new Error(
136
+ "inlineCreativesForPackages does not accept legacy package format_ids; use canonical format selectors or inlineCreativesForPackagesLegacy"
137
+ );
138
+ }
139
+ }
140
+ for (const creative of creatives) {
141
+ if ("format_id" in creative) {
142
+ throw new Error(
143
+ "inlineCreativesForPackages does not accept legacy creative format_id; use canonical format_kind or inlineCreativesForPackagesLegacy"
144
+ );
145
+ }
146
+ }
147
+ }
77
148
  function defaultPackageId(pkg) {
78
149
  if (typeof pkg.package_id === "string") return pkg.package_id;
79
150
  if (typeof pkg.context?.buyer_ref === "string") return pkg.context.buyer_ref;
@@ -108,13 +179,37 @@ function creativeMatchesPackage(pkg, creative) {
108
179
  if (packageFormatIds.length === 0 && packageFormatKind === void 0) return false;
109
180
  }
110
181
  if (packageFormatKind !== void 0) {
111
- return creativeRecord.format_kind === packageFormatKind && paramsMatchCreative(packageParams, creativeFormatId);
182
+ return creativeRecord.format_kind === packageFormatKind && paramsMatchCreative(packageParams, creativeFormatId ?? creativeParamsFromAssets(creativeRecord.assets));
112
183
  }
113
184
  if (packageFormatIds.length > 0) {
114
- return creativeFormatId !== void 0 && packageFormatIds.some((formatId) => formatIdMatches(formatId, creativeFormatId));
185
+ if (creativeFormatId !== void 0) {
186
+ return packageFormatIds.some((formatId) => formatIdMatches(formatId, creativeFormatId));
187
+ }
188
+ return packageFormatIds.some(
189
+ (formatId) => typeof formatId.id === "string" && resolveCanonicalFormatKind(formatId.id, {
190
+ agentUrl: typeof formatId.agent_url === "string" ? formatId.agent_url : void 0
191
+ }) === creativeRecord.format_kind
192
+ );
115
193
  }
116
194
  return true;
117
195
  }
196
+ function creativeParamsFromAssets(value) {
197
+ const assets = plainObject(value);
198
+ if (!assets) return void 0;
199
+ for (const assetValue of Object.values(assets)) {
200
+ const candidates = Array.isArray(assetValue) ? assetValue : [assetValue];
201
+ for (const candidate of candidates) {
202
+ const asset = plainObject(candidate);
203
+ if (!asset) continue;
204
+ const params = {};
205
+ if (typeof asset.width === "number") params.width = asset.width;
206
+ if (typeof asset.height === "number") params.height = asset.height;
207
+ if (typeof asset.duration_ms === "number") params.duration_ms = asset.duration_ms;
208
+ if (Object.keys(params).length > 0) return params;
209
+ }
210
+ }
211
+ return void 0;
212
+ }
118
213
  function arrayOfObjects(value) {
119
214
  return Array.isArray(value) ? value.flatMap((item) => plainObject(item) ? [item] : []) : [];
120
215
  }
@@ -226,6 +321,7 @@ function sortKeys(value) {
226
321
  );
227
322
  }
228
323
  export {
229
- inlineCreativesForPackages
324
+ inlineCreativesForPackages,
325
+ inlineCreativesForPackagesLegacy
230
326
  };
231
327
  //# sourceMappingURL=creative-delivery.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/creative-delivery.ts"],"sourcesContent":["import type { CreativeAsset, PackageRequest } from '../types/tools.generated';\n\n/**\n * Package-like input accepted by `inlineCreativesForPackages`.\n *\n * `PackageRequest` is the create-media-buy shape. Update-media-buy package\n * patches are narrower but carry the same `package_id` + `creatives` fields,\n * so the helper accepts both without depending on AgentClient.\n */\nexport type InlineCreativePackage = Partial<PackageRequest> & {\n package_id?: string;\n buyer_ref?: string;\n context?: { buyer_ref?: string; [key: string]: unknown };\n creatives?: CreativeAsset[];\n [key: string]: unknown;\n};\n\n/**\n * Assignment shape shared with `sync_creatives.assignments[]`, plus\n * `placement_refs` for callers already authoring the structured placement\n * form accepted by inline `CreativeAsset`.\n */\nexport interface InlineCreativeAssignment {\n creative_id: string;\n package_id: string;\n weight?: number;\n placement_ids?: string[];\n placement_refs?: unknown[];\n}\n\nexport interface InlineCreativesForPackagesOptions<TPackage extends InlineCreativePackage = InlineCreativePackage> {\n /**\n * Package-scoped assignment instructions. When supplied, only creatives\n * assigned to each package are inlined unless `includeUnassignedCreatives`\n * is true.\n */\n assignments?: ReadonlyArray<InlineCreativeAssignment>;\n\n /**\n * Include compatible creatives that have no assignment entry. Defaults to\n * false when assignments are supplied and true when no assignments exist.\n */\n includeUnassignedCreatives?: boolean;\n\n /**\n * Filter creatives by package format selectors (`format_ids`,\n * `format_option_refs`, or `format_kind`). Defaults to true.\n */\n filterByFormat?: boolean;\n\n /**\n * Resolve the package identifier used to match assignment.package_id.\n * Defaults to `package_id`, then `context.buyer_ref`, then `buyer_ref`.\n */\n packageId?: (pkg: TPackage, index: number) => string | undefined;\n\n /**\n * Behavior when an assignment names a package not present in the package\n * list. Defaults to throw so package scoping mistakes do not broaden\n * delivery silently.\n */\n onUnmatchedAssignment?: 'throw' | 'ignore';\n\n /**\n * Behavior when an assignment names a creative not present in `creatives`.\n * Defaults to throw because inline payloads cannot reference library-only\n * creatives.\n */\n onMissingCreative?: 'throw' | 'ignore';\n\n /**\n * Behavior when an explicit assignment names a creative whose format cannot\n * satisfy the target package selectors. Defaults to throw so authoring\n * mistakes do not silently remove assigned delivery.\n */\n onIncompatibleAssignment?: 'throw' | 'ignore';\n}\n\nexport type InlineCreativePackagePatch<TPackage extends InlineCreativePackage = InlineCreativePackage> = TPackage & {\n creatives?: CreativeAsset[];\n};\n\n/**\n * Project library-scoped creative assets into package-scoped inline creative\n * payloads for `create_media_buy` or `update_media_buy`.\n *\n * The helper is pure: it performs no network calls, does not call\n * `sync_creatives`, and does not generate idempotency keys. Use\n * `supportsSyncCreatives(caps)` to decide whether the seller has a creative\n * library. When it does not, spread this helper's result into\n * `packages[].creatives` and use a fresh idempotency key for the enclosing\n * create/update media-buy call.\n *\n * @example\n * ```ts\n * const caps = await agent.getCapabilities();\n * if (supportsSyncCreatives(caps)) {\n * await agent.syncCreatives({ account, creatives, assignments });\n * } else if (caps.features.inlineCreativeManagement) {\n * await agent.createMediaBuy({\n * account,\n * idempotency_key: crypto.randomUUID(),\n * packages: inlineCreativesForPackages(packages, creatives, { assignments }),\n * });\n * } else {\n * throw new Error('Seller supports neither creative library sync nor inline creative uploads.');\n * }\n * ```\n */\nexport function inlineCreativesForPackages<TPackage extends InlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CreativeAsset>,\n options: InlineCreativesForPackagesOptions<TPackage> = {}\n): InlineCreativePackagePatch<TPackage>[] {\n const {\n assignments,\n includeUnassignedCreatives = assignments == null || assignments.length === 0,\n filterByFormat = true,\n packageId = defaultPackageId,\n onUnmatchedAssignment = 'throw',\n onMissingCreative = 'throw',\n onIncompatibleAssignment = 'throw',\n } = options;\n\n const creativesById = new Map<string, CreativeAsset>();\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string') {\n creativesById.set(creative.creative_id, creative);\n }\n }\n\n const assignmentsByPackage = new Map<string, InlineCreativeAssignment[]>();\n const matchedPackageIds = new Set<string>();\n for (const assignment of assignments ?? []) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) {\n if (onMissingCreative === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment references unknown creative_id \"${assignment.creative_id}\"`\n );\n }\n continue;\n }\n const existing = assignmentsByPackage.get(assignment.package_id);\n if (existing) {\n existing.push(assignment);\n } else {\n assignmentsByPackage.set(assignment.package_id, [assignment]);\n }\n }\n\n const result = packages.map((pkg, index) => {\n const id = packageId(pkg, index);\n if (id) matchedPackageIds.add(id);\n const assigned = id ? (assignmentsByPackage.get(id) ?? []) : [];\n const assignedCreativeIds = new Set(assigned.map(a => a.creative_id));\n const inlined: CreativeAsset[] = [];\n\n for (const assignment of assigned) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) continue;\n const compatible = !filterByFormat || creativeMatchesPackage(pkg, creative);\n if (compatible) {\n inlined.push(applyAssignmentToCreative(creative, assignment));\n } else if (onIncompatibleAssignment === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment creative_id \"${assignment.creative_id}\" ` +\n `does not match package_id \"${assignment.package_id}\" format selectors`\n );\n }\n }\n\n if (includeUnassignedCreatives) {\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string' && assignedCreativeIds.has(creative.creative_id)) continue;\n if (!filterByFormat || creativeMatchesPackage(pkg, creative)) {\n inlined.push({ ...creative });\n }\n }\n }\n\n const next: Record<string, unknown> = { ...(pkg as Record<string, unknown>) };\n delete next.creatives;\n if (inlined.length > 0) {\n next.creatives = inlined;\n }\n return next as InlineCreativePackagePatch<TPackage>;\n });\n\n if (onUnmatchedAssignment === 'throw') {\n const unmatched = [...assignmentsByPackage.keys()].filter(package_id => !matchedPackageIds.has(package_id));\n if (unmatched.length > 0) {\n throw new Error(`inlineCreativesForPackages assignment references unknown package_id \"${unmatched[0]}\"`);\n }\n }\n\n return result;\n}\n\nfunction defaultPackageId(pkg: InlineCreativePackage): string | undefined {\n if (typeof pkg.package_id === 'string') return pkg.package_id;\n if (typeof pkg.context?.buyer_ref === 'string') return pkg.context.buyer_ref;\n if (typeof pkg.buyer_ref === 'string') return pkg.buyer_ref;\n return undefined;\n}\n\nfunction applyAssignmentToCreative(creative: CreativeAsset, assignment: InlineCreativeAssignment): CreativeAsset {\n const next: Record<string, unknown> = { ...(creative as unknown as Record<string, unknown>) };\n delete next.weight;\n delete next.placement_ids;\n delete next.placement_refs;\n\n if (assignment.weight !== undefined) next.weight = assignment.weight;\n if (assignment.placement_refs !== undefined) {\n next.placement_refs = [...assignment.placement_refs];\n } else if (assignment.placement_ids !== undefined) {\n next.placement_ids = [...assignment.placement_ids];\n }\n return next as unknown as CreativeAsset;\n}\n\nfunction creativeMatchesPackage(pkg: InlineCreativePackage, creative: CreativeAsset): boolean {\n const packageFormatIds = arrayOfObjects(pkg.format_ids);\n const packageFormatOptionRefs = arrayOfObjects(pkg.format_option_refs);\n const packageFormatKind = typeof pkg.format_kind === 'string' ? pkg.format_kind : undefined;\n const packageParams = plainObject(pkg.params);\n\n const creativeRecord = creative as unknown as Record<string, unknown>;\n const creativeFormatId = plainObject(creativeRecord.format_id);\n const creativeFormatOptionRef = plainObject(creativeRecord.format_option_ref);\n\n if (packageFormatOptionRefs.length > 0) {\n if (creativeFormatOptionRef) {\n return packageFormatOptionRefs.some(formatOptionRef => deepEqual(formatOptionRef, creativeFormatOptionRef));\n }\n if (packageFormatIds.length === 0 && packageFormatKind === undefined) return false;\n }\n\n if (packageFormatKind !== undefined) {\n return creativeRecord.format_kind === packageFormatKind && paramsMatchCreative(packageParams, creativeFormatId);\n }\n\n if (packageFormatIds.length > 0) {\n return (\n creativeFormatId !== undefined && packageFormatIds.some(formatId => formatIdMatches(formatId, creativeFormatId))\n );\n }\n\n return true;\n}\n\nfunction arrayOfObjects(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.flatMap(item => (plainObject(item) ? [item] : [])) : [];\n}\n\nfunction plainObject(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction formatIdMatches(expected: Record<string, unknown>, actual: Record<string, unknown>): boolean {\n const expectedId = expected.id;\n const actualId = actual.id;\n if (expectedId !== actualId) return false;\n\n const expectedAgentUrl = normalizeAgentUrl(expected.agent_url);\n const actualAgentUrl = normalizeAgentUrl(actual.agent_url);\n if (expectedAgentUrl !== undefined && actualAgentUrl !== undefined && expectedAgentUrl !== actualAgentUrl) {\n return false;\n }\n\n for (const key of ['width', 'height', 'duration_ms']) {\n if (expected[key] !== undefined && actual[key] !== undefined && expected[key] !== actual[key]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction paramsMatchCreative(\n packageParams: Record<string, unknown> | undefined,\n creativeFormatId: Record<string, unknown> | undefined\n): boolean {\n if (!packageParams) return true;\n\n let constrained = false;\n const actualWidth = numberValue(creativeFormatId, 'width');\n const actualHeight = numberValue(creativeFormatId, 'height');\n const actualDuration =\n numberValue(creativeFormatId, 'duration_ms') ?? numberValue(creativeFormatId, 'duration_ms_exact');\n\n const sizes = Array.isArray(packageParams.sizes)\n ? packageParams.sizes.flatMap(size => (plainObject(size) ? [size] : []))\n : [];\n if (sizes.length > 0) {\n constrained = true;\n if (\n actualWidth === undefined ||\n actualHeight === undefined ||\n !sizes.some(size => numberValue(size, 'width') === actualWidth && numberValue(size, 'height') === actualHeight)\n ) {\n return false;\n }\n }\n\n const expectedWidth = numberValue(packageParams, 'width');\n if (expectedWidth !== undefined) {\n constrained = true;\n if (actualWidth !== expectedWidth) return false;\n }\n\n const expectedHeight = numberValue(packageParams, 'height');\n if (expectedHeight !== undefined) {\n constrained = true;\n if (actualHeight !== expectedHeight) return false;\n }\n\n const minWidth = numberValue(packageParams, 'min_width');\n if (minWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth < minWidth) return false;\n }\n\n const maxWidth = numberValue(packageParams, 'max_width');\n if (maxWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth > maxWidth) return false;\n }\n\n const minHeight = numberValue(packageParams, 'min_height');\n if (minHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight < minHeight) return false;\n }\n\n const maxHeight = numberValue(packageParams, 'max_height');\n if (maxHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight > maxHeight) return false;\n }\n\n const exactDuration = numberValue(packageParams, 'duration_ms_exact') ?? numberValue(packageParams, 'duration_ms');\n if (exactDuration !== undefined) {\n constrained = true;\n if (actualDuration !== exactDuration) return false;\n }\n\n const durationRange = numberRange(packageParams.duration_ms_range);\n if (durationRange) {\n constrained = true;\n const [minDuration, maxDuration] = durationRange;\n if (actualDuration === undefined) return false;\n if (minDuration !== undefined && actualDuration < minDuration) return false;\n if (maxDuration !== undefined && actualDuration > maxDuration) return false;\n }\n\n return constrained ? creativeFormatId !== undefined : true;\n}\n\nfunction numberValue(object: Record<string, unknown> | undefined, key: string): number | undefined {\n const value = object?.[key];\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction numberRange(value: unknown): [number | undefined, number | undefined] | undefined {\n if (!Array.isArray(value) || value.length !== 2) return undefined;\n const [min, max] = value;\n const minValue = min === null ? undefined : typeof min === 'number' && Number.isFinite(min) ? min : undefined;\n const maxValue = max === null ? undefined : typeof max === 'number' && Number.isFinite(max) ? max : undefined;\n return minValue === undefined && maxValue === undefined ? undefined : [minValue, maxValue];\n}\n\nfunction normalizeAgentUrl(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n return end === value.length ? value : value.slice(0, end);\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n return JSON.stringify(sortKeys(a)) === JSON.stringify(sortKeys(b));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n const object = plainObject(value);\n if (!object) return value;\n return Object.fromEntries(\n Object.entries(object)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => [k, sortKeys(v)])\n );\n}\n"],"mappings":"AA6GO,SAAS,2BACd,UACA,WACA,UAAuD,CAAC,GAChB;AACxC,QAAM;AAAA,IACJ;AAAA,IACA,6BAA6B,eAAe,QAAQ,YAAY,WAAW;AAAA,IAC3E,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,wBAAwB;AAAA,IACxB,oBAAoB;AAAA,IACpB,2BAA2B;AAAA,EAC7B,IAAI;AAEJ,QAAM,gBAAgB,oBAAI,IAA2B;AACrD,aAAW,YAAY,WAAW;AAChC,QAAI,OAAO,SAAS,gBAAgB,UAAU;AAC5C,oBAAc,IAAI,SAAS,aAAa,QAAQ;AAAA,IAClD;AAAA,EACF;AAEA,QAAM,uBAAuB,oBAAI,IAAwC;AACzE,QAAM,oBAAoB,oBAAI,IAAY;AAC1C,aAAW,cAAc,eAAe,CAAC,GAAG;AAC1C,UAAM,WAAW,cAAc,IAAI,WAAW,WAAW;AACzD,QAAI,CAAC,UAAU;AACb,UAAI,sBAAsB,SAAS;AACjC,cAAM,IAAI;AAAA,UACR,yEAAyE,WAAW,WAAW;AAAA,QACjG;AAAA,MACF;AACA;AAAA,IACF;AACA,UAAM,WAAW,qBAAqB,IAAI,WAAW,UAAU;AAC/D,QAAI,UAAU;AACZ,eAAS,KAAK,UAAU;AAAA,IAC1B,OAAO;AACL,2BAAqB,IAAI,WAAW,YAAY,CAAC,UAAU,CAAC;AAAA,IAC9D;AAAA,EACF;AAEA,QAAM,SAAS,SAAS,IAAI,CAAC,KAAK,UAAU;AAC1C,UAAM,KAAK,UAAU,KAAK,KAAK;AAC/B,QAAI,GAAI,mBAAkB,IAAI,EAAE;AAChC,UAAM,WAAW,KAAM,qBAAqB,IAAI,EAAE,KAAK,CAAC,IAAK,CAAC;AAC9D,UAAM,sBAAsB,IAAI,IAAI,SAAS,IAAI,OAAK,EAAE,WAAW,CAAC;AACpE,UAAM,UAA2B,CAAC;AAElC,eAAW,cAAc,UAAU;AACjC,YAAM,WAAW,cAAc,IAAI,WAAW,WAAW;AACzD,UAAI,CAAC,SAAU;AACf,YAAM,aAAa,CAAC,kBAAkB,uBAAuB,KAAK,QAAQ;AAC1E,UAAI,YAAY;AACd,gBAAQ,KAAK,0BAA0B,UAAU,UAAU,CAAC;AAAA,MAC9D,WAAW,6BAA6B,SAAS;AAC/C,cAAM,IAAI;AAAA,UACR,sDAAsD,WAAW,WAAW,gCAC5C,WAAW,UAAU;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAEA,QAAI,4BAA4B;AAC9B,iBAAW,YAAY,WAAW;AAChC,YAAI,OAAO,SAAS,gBAAgB,YAAY,oBAAoB,IAAI,SAAS,WAAW,EAAG;AAC/F,YAAI,CAAC,kBAAkB,uBAAuB,KAAK,QAAQ,GAAG;AAC5D,kBAAQ,KAAK,EAAE,GAAG,SAAS,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,OAAgC,EAAE,GAAI,IAAgC;AAC5E,WAAO,KAAK;AACZ,QAAI,QAAQ,SAAS,GAAG;AACtB,WAAK,YAAY;AAAA,IACnB;AACA,WAAO;AAAA,EACT,CAAC;AAED,MAAI,0BAA0B,SAAS;AACrC,UAAM,YAAY,CAAC,GAAG,qBAAqB,KAAK,CAAC,EAAE,OAAO,gBAAc,CAAC,kBAAkB,IAAI,UAAU,CAAC;AAC1G,QAAI,UAAU,SAAS,GAAG;AACxB,YAAM,IAAI,MAAM,wEAAwE,UAAU,CAAC,CAAC,GAAG;AAAA,IACzG;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,KAAgD;AACxE,MAAI,OAAO,IAAI,eAAe,SAAU,QAAO,IAAI;AACnD,MAAI,OAAO,IAAI,SAAS,cAAc,SAAU,QAAO,IAAI,QAAQ;AACnE,MAAI,OAAO,IAAI,cAAc,SAAU,QAAO,IAAI;AAClD,SAAO;AACT;AAEA,SAAS,0BAA0B,UAAyB,YAAqD;AAC/G,QAAM,OAAgC,EAAE,GAAI,SAAgD;AAC5F,SAAO,KAAK;AACZ,SAAO,KAAK;AACZ,SAAO,KAAK;AAEZ,MAAI,WAAW,WAAW,OAAW,MAAK,SAAS,WAAW;AAC9D,MAAI,WAAW,mBAAmB,QAAW;AAC3C,SAAK,iBAAiB,CAAC,GAAG,WAAW,cAAc;AAAA,EACrD,WAAW,WAAW,kBAAkB,QAAW;AACjD,SAAK,gBAAgB,CAAC,GAAG,WAAW,aAAa;AAAA,EACnD;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,KAA4B,UAAkC;AAC5F,QAAM,mBAAmB,eAAe,IAAI,UAAU;AACtD,QAAM,0BAA0B,eAAe,IAAI,kBAAkB;AACrE,QAAM,oBAAoB,OAAO,IAAI,gBAAgB,WAAW,IAAI,cAAc;AAClF,QAAM,gBAAgB,YAAY,IAAI,MAAM;AAE5C,QAAM,iBAAiB;AACvB,QAAM,mBAAmB,YAAY,eAAe,SAAS;AAC7D,QAAM,0BAA0B,YAAY,eAAe,iBAAiB;AAE5E,MAAI,wBAAwB,SAAS,GAAG;AACtC,QAAI,yBAAyB;AAC3B,aAAO,wBAAwB,KAAK,qBAAmB,UAAU,iBAAiB,uBAAuB,CAAC;AAAA,IAC5G;AACA,QAAI,iBAAiB,WAAW,KAAK,sBAAsB,OAAW,QAAO;AAAA,EAC/E;AAEA,MAAI,sBAAsB,QAAW;AACnC,WAAO,eAAe,gBAAgB,qBAAqB,oBAAoB,eAAe,gBAAgB;AAAA,EAChH;AAEA,MAAI,iBAAiB,SAAS,GAAG;AAC/B,WACE,qBAAqB,UAAa,iBAAiB,KAAK,cAAY,gBAAgB,UAAU,gBAAgB,CAAC;AAAA,EAEnH;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,OAA2C;AACjE,SAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,UAAS,YAAY,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAE,IAAI,CAAC;AAC5F;AAEA,SAAS,YAAY,OAAqD;AACxE,SAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IACrE,QACD;AACN;AAEA,SAAS,gBAAgB,UAAmC,QAA0C;AACpG,QAAM,aAAa,SAAS;AAC5B,QAAM,WAAW,OAAO;AACxB,MAAI,eAAe,SAAU,QAAO;AAEpC,QAAM,mBAAmB,kBAAkB,SAAS,SAAS;AAC7D,QAAM,iBAAiB,kBAAkB,OAAO,SAAS;AACzD,MAAI,qBAAqB,UAAa,mBAAmB,UAAa,qBAAqB,gBAAgB;AACzG,WAAO;AAAA,EACT;AAEA,aAAW,OAAO,CAAC,SAAS,UAAU,aAAa,GAAG;AACpD,QAAI,SAAS,GAAG,MAAM,UAAa,OAAO,GAAG,MAAM,UAAa,SAAS,GAAG,MAAM,OAAO,GAAG,GAAG;AAC7F,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,oBACP,eACA,kBACS;AACT,MAAI,CAAC,cAAe,QAAO;AAE3B,MAAI,cAAc;AAClB,QAAM,cAAc,YAAY,kBAAkB,OAAO;AACzD,QAAM,eAAe,YAAY,kBAAkB,QAAQ;AAC3D,QAAM,iBACJ,YAAY,kBAAkB,aAAa,KAAK,YAAY,kBAAkB,mBAAmB;AAEnG,QAAM,QAAQ,MAAM,QAAQ,cAAc,KAAK,IAC3C,cAAc,MAAM,QAAQ,UAAS,YAAY,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAE,IACrE,CAAC;AACL,MAAI,MAAM,SAAS,GAAG;AACpB,kBAAc;AACd,QACE,gBAAgB,UAChB,iBAAiB,UACjB,CAAC,MAAM,KAAK,UAAQ,YAAY,MAAM,OAAO,MAAM,eAAe,YAAY,MAAM,QAAQ,MAAM,YAAY,GAC9G;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,gBAAgB,YAAY,eAAe,OAAO;AACxD,MAAI,kBAAkB,QAAW;AAC/B,kBAAc;AACd,QAAI,gBAAgB,cAAe,QAAO;AAAA,EAC5C;AAEA,QAAM,iBAAiB,YAAY,eAAe,QAAQ;AAC1D,MAAI,mBAAmB,QAAW;AAChC,kBAAc;AACd,QAAI,iBAAiB,eAAgB,QAAO;AAAA,EAC9C;AAEA,QAAM,WAAW,YAAY,eAAe,WAAW;AACvD,MAAI,aAAa,QAAW;AAC1B,kBAAc;AACd,QAAI,gBAAgB,UAAa,cAAc,SAAU,QAAO;AAAA,EAClE;AAEA,QAAM,WAAW,YAAY,eAAe,WAAW;AACvD,MAAI,aAAa,QAAW;AAC1B,kBAAc;AACd,QAAI,gBAAgB,UAAa,cAAc,SAAU,QAAO;AAAA,EAClE;AAEA,QAAM,YAAY,YAAY,eAAe,YAAY;AACzD,MAAI,cAAc,QAAW;AAC3B,kBAAc;AACd,QAAI,iBAAiB,UAAa,eAAe,UAAW,QAAO;AAAA,EACrE;AAEA,QAAM,YAAY,YAAY,eAAe,YAAY;AACzD,MAAI,cAAc,QAAW;AAC3B,kBAAc;AACd,QAAI,iBAAiB,UAAa,eAAe,UAAW,QAAO;AAAA,EACrE;AAEA,QAAM,gBAAgB,YAAY,eAAe,mBAAmB,KAAK,YAAY,eAAe,aAAa;AACjH,MAAI,kBAAkB,QAAW;AAC/B,kBAAc;AACd,QAAI,mBAAmB,cAAe,QAAO;AAAA,EAC/C;AAEA,QAAM,gBAAgB,YAAY,cAAc,iBAAiB;AACjE,MAAI,eAAe;AACjB,kBAAc;AACd,UAAM,CAAC,aAAa,WAAW,IAAI;AACnC,QAAI,mBAAmB,OAAW,QAAO;AACzC,QAAI,gBAAgB,UAAa,iBAAiB,YAAa,QAAO;AACtE,QAAI,gBAAgB,UAAa,iBAAiB,YAAa,QAAO;AAAA,EACxE;AAEA,SAAO,cAAc,qBAAqB,SAAY;AACxD;AAEA,SAAS,YAAY,QAA6C,KAAiC;AACjG,QAAM,QAAQ,SAAS,GAAG;AAC1B,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEA,SAAS,YAAY,OAAsE;AACzF,MAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,EAAG,QAAO;AACxD,QAAM,CAAC,KAAK,GAAG,IAAI;AACnB,QAAM,WAAW,QAAQ,OAAO,SAAY,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,IAAI,MAAM;AACpG,QAAM,WAAW,QAAQ,OAAO,SAAY,OAAO,QAAQ,YAAY,OAAO,SAAS,GAAG,IAAI,MAAM;AACpG,SAAO,aAAa,UAAa,aAAa,SAAY,SAAY,CAAC,UAAU,QAAQ;AAC3F;AAEA,SAAS,kBAAkB,OAAoC;AAC7D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI,MAAM,MAAM;AAChB,SAAO,MAAM,KAAK,MAAM,WAAW,MAAM,CAAC,MAAM,IAAI;AAClD,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,MAAM,SAAS,QAAQ,MAAM,MAAM,GAAG,GAAG;AAC1D;AAEA,SAAS,UAAU,GAAY,GAAqB;AAClD,SAAO,KAAK,UAAU,SAAS,CAAC,CAAC,MAAM,KAAK,UAAU,SAAS,CAAC,CAAC;AACnE;AAEA,SAAS,SAAS,OAAyB;AACzC,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,IAAI,QAAQ;AACnD,QAAM,SAAS,YAAY,KAAK;AAChC,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAClB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EACrC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AAAA,EACrC;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/creative-delivery.ts"],"sourcesContent":["import type { CreativeAsset, PackageRequest } from '../types/tools.generated';\nimport {\n projectCreativeForDelivery,\n type CanonicalCreativeAsset,\n type CreativeFormatWireMode,\n type LegacyCreativeAsset,\n} from '../v2/projection/creative-delivery';\nimport type { LegacyFormatConverter } from '../v2/projection/v1-to-v2';\nimport type { CanonicalFormatLegacyResolver } from '../v2/projection/v2-to-v1';\nimport { resolveCanonicalFormatKind } from '../v2/projection/v1-to-v2';\n\n/**\n * Package-like input accepted by `inlineCreativesForPackages`.\n *\n * `PackageRequest` is the create-media-buy shape. Update-media-buy package\n * patches are narrower but carry the same `package_id` + `creatives` fields,\n * so the helper accepts both without depending on AgentClient.\n */\nexport type InlineCreativePackage = {\n package_id?: string;\n buyer_ref?: string;\n context?: NonNullable<PackageRequest['context']> & { buyer_ref?: string };\n creatives?: CanonicalCreativeAsset[];\n format_ids?: never;\n format_option_refs?: PackageRequest['format_option_refs'];\n format_kind?: PackageRequest['format_kind'];\n params?: PackageRequest['params'];\n};\n\n/**\n * Compatibility-only package shape accepted by\n * `inlineCreativesForPackagesLegacy`.\n *\n * @deprecated Legacy `format_ids` belong at an explicit compatibility\n * boundary. Prefer `InlineCreativePackage` and canonical format selectors.\n */\nexport type LegacyInlineCreativePackage = Omit<InlineCreativePackage, 'creatives' | 'format_ids'> & {\n creatives?: CreativeAsset[];\n format_ids?: PackageRequest['format_ids'];\n};\n\n/**\n * Assignment shape shared with `sync_creatives.assignments[]`, plus\n * `placement_refs` for callers already authoring the structured placement\n * form accepted by inline `CreativeAsset`.\n */\nexport interface InlineCreativeAssignment {\n creative_id: string;\n package_id: string;\n weight?: number;\n placement_ids?: string[];\n placement_refs?: unknown[];\n}\n\ninterface InlineCreativesForPackagesBaseOptions<TPackage> {\n /**\n * Package-scoped assignment instructions. When supplied, only creatives\n * assigned to each package are inlined unless `includeUnassignedCreatives`\n * is true.\n */\n assignments?: ReadonlyArray<InlineCreativeAssignment>;\n\n /**\n * Include compatible creatives that have no assignment entry. Defaults to\n * false when assignments are supplied and true when no assignments exist.\n */\n includeUnassignedCreatives?: boolean;\n\n /**\n * Filter creatives by package format selectors (`format_option_refs` or\n * `format_kind`). The legacy helper also recognizes `format_ids`. Defaults\n * to true.\n */\n filterByFormat?: boolean;\n\n /**\n * Resolve the package identifier used to match assignment.package_id.\n * Defaults to `package_id`, then `context.buyer_ref`, then `buyer_ref`.\n */\n packageId?: (pkg: TPackage, index: number) => string | undefined;\n\n /**\n * Behavior when an assignment names a package not present in the package\n * list. Defaults to throw so package scoping mistakes do not broaden\n * delivery silently.\n */\n onUnmatchedAssignment?: 'throw' | 'ignore';\n\n /**\n * Behavior when an assignment names a creative not present in `creatives`.\n * Defaults to throw because inline payloads cannot reference library-only\n * creatives.\n */\n onMissingCreative?: 'throw' | 'ignore';\n\n /**\n * Behavior when an explicit assignment names a creative whose format cannot\n * satisfy the target package selectors. Defaults to throw so authoring\n * mistakes do not silently remove assigned delivery.\n */\n onIncompatibleAssignment?: 'throw' | 'ignore';\n}\n\nexport interface InlineCreativesForPackagesOptions<\n TPackage extends InlineCreativePackage = InlineCreativePackage,\n> extends InlineCreativesForPackagesBaseOptions<TPackage> {}\n\n/**\n * Options for the explicit legacy inline-creative compatibility helper.\n *\n * @deprecated Prefer canonical selectors and `inlineCreativesForPackages`.\n */\nexport interface InlineCreativesForPackagesLegacyOptions<\n TPackage extends LegacyInlineCreativePackage = LegacyInlineCreativePackage,\n> extends InlineCreativesForPackagesBaseOptions<TPackage> {\n /** Fail closed when the seller's legacy wire shape is not known. */\n creativeFormatWireMode?: 'legacy' | 'unknown';\n\n /** Convert custom legacy creative refs before matching/projecting. */\n legacyFormatConverter?: LegacyFormatConverter;\n\n /** Resolve canonical custom formats when no built-in or private legacy mapping exists. */\n canonicalFormatLegacyResolver?: CanonicalFormatLegacyResolver;\n}\n\nexport type InlineCreativePackagePatch<\n TPackage extends InlineCreativePackage | LegacyInlineCreativePackage = InlineCreativePackage,\n TCreative = CanonicalCreativeAsset,\n> = Omit<TPackage, 'creatives'> & {\n creatives?: TCreative[];\n};\n\n/**\n * Project library-scoped creative assets into package-scoped inline creative\n * payloads for `create_media_buy` or `update_media_buy`.\n *\n * The helper is pure: it performs no network calls, does not call\n * `sync_creatives`, and does not generate idempotency keys. Use\n * `supportsSyncCreatives(caps)` to decide whether the seller has a creative\n * library. When it does not, spread this helper's result into\n * `packages[].creatives` and use a fresh idempotency key for the enclosing\n * create/update media-buy call.\n *\n * @example\n * ```ts\n * const caps = await agent.getCapabilities();\n * if (supportsSyncCreatives(caps)) {\n * await agent.syncCreatives({ account, creatives, assignments });\n * } else if (caps.features.inlineCreativeManagement) {\n * await agent.createMediaBuy({\n * account,\n * idempotency_key: crypto.randomUUID(),\n * packages: inlineCreativesForPackages(packages, creatives, { assignments }),\n * });\n * } else {\n * throw new Error('Seller supports neither creative library sync nor inline creative uploads.');\n * }\n * ```\n */\nexport function inlineCreativesForPackages<TPackage extends InlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CanonicalCreativeAsset>,\n options: InlineCreativesForPackagesOptions<TPackage> = {}\n): InlineCreativePackagePatch<TPackage, CanonicalCreativeAsset>[] {\n assertCanonicalInlineInputs(packages, creatives, options);\n return inlineCreativesForPackagesInternal(packages, creatives, options, 'canonical') as InlineCreativePackagePatch<\n TPackage,\n CanonicalCreativeAsset\n >[];\n}\n\n/**\n * Project creatives into the legacy inline package wire shape.\n *\n * @deprecated This is an explicit compatibility escape hatch for legacy\n * sellers. New integrations should use canonical package selectors with\n * `inlineCreativesForPackages`; the SDK client performs negotiated wire\n * projection at the transport boundary.\n */\nexport function inlineCreativesForPackagesLegacy<TPackage extends LegacyInlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CreativeAsset>,\n options: InlineCreativesForPackagesLegacyOptions<TPackage> = {}\n): InlineCreativePackagePatch<TPackage, LegacyCreativeAsset>[] {\n const { creativeFormatWireMode = 'legacy', ...sharedOptions } = options;\n return inlineCreativesForPackagesInternal(\n packages,\n creatives,\n {\n ...sharedOptions,\n legacyFormatConverter: options.legacyFormatConverter,\n canonicalFormatLegacyResolver: options.canonicalFormatLegacyResolver,\n },\n creativeFormatWireMode\n ) as InlineCreativePackagePatch<TPackage, LegacyCreativeAsset>[];\n}\n\ntype InternalInlineCreativesOptions<TPackage extends LegacyInlineCreativePackage> =\n InlineCreativesForPackagesBaseOptions<TPackage> & {\n legacyFormatConverter?: LegacyFormatConverter;\n canonicalFormatLegacyResolver?: CanonicalFormatLegacyResolver;\n };\n\nfunction inlineCreativesForPackagesInternal<TPackage extends LegacyInlineCreativePackage>(\n packages: ReadonlyArray<TPackage>,\n creatives: ReadonlyArray<CreativeAsset>,\n options: InternalInlineCreativesOptions<TPackage>,\n creativeFormatWireMode: CreativeFormatWireMode\n): InlineCreativePackagePatch<TPackage, CreativeAsset>[] {\n const {\n assignments,\n includeUnassignedCreatives = assignments == null || assignments.length === 0,\n filterByFormat = true,\n packageId = defaultPackageId,\n onUnmatchedAssignment = 'throw',\n onMissingCreative = 'throw',\n onIncompatibleAssignment = 'throw',\n legacyFormatConverter,\n canonicalFormatLegacyResolver,\n } = options;\n\n const creativesById = new Map<string, CreativeAsset>();\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string') {\n creativesById.set(creative.creative_id, creative);\n }\n }\n\n const assignmentsByPackage = new Map<string, InlineCreativeAssignment[]>();\n const matchedPackageIds = new Set<string>();\n for (const assignment of assignments ?? []) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) {\n if (onMissingCreative === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment references unknown creative_id \"${assignment.creative_id}\"`\n );\n }\n continue;\n }\n const existing = assignmentsByPackage.get(assignment.package_id);\n if (existing) {\n existing.push(assignment);\n } else {\n assignmentsByPackage.set(assignment.package_id, [assignment]);\n }\n }\n\n const result = packages.map((pkg, index) => {\n const id = packageId(pkg, index);\n if (id) matchedPackageIds.add(id);\n const assigned = id ? (assignmentsByPackage.get(id) ?? []) : [];\n const assignedCreativeIds = new Set(assigned.map(a => a.creative_id));\n const inlined: CreativeAsset[] = [];\n\n for (const assignment of assigned) {\n const creative = creativesById.get(assignment.creative_id);\n if (!creative) continue;\n const sourceCompatible = !filterByFormat || creativeMatchesPackage(pkg, creative);\n if (!sourceCompatible) {\n if (onIncompatibleAssignment === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment creative_id \"${assignment.creative_id}\" ` +\n `does not match package_id \"${assignment.package_id}\" format selectors`\n );\n }\n continue;\n }\n const projected = projectCreativeForDelivery(\n creative,\n pkg,\n creativeFormatWireMode,\n 'inline_creatives',\n legacyFormatConverter,\n canonicalFormatLegacyResolver\n );\n const compatible = !filterByFormat || creativeMatchesPackage(pkg, projected);\n if (compatible) {\n inlined.push(applyAssignmentToCreative(projected, assignment));\n } else if (onIncompatibleAssignment === 'throw') {\n throw new Error(\n `inlineCreativesForPackages assignment creative_id \"${assignment.creative_id}\" ` +\n `does not match package_id \"${assignment.package_id}\" format selectors`\n );\n }\n }\n\n if (includeUnassignedCreatives) {\n for (const creative of creatives) {\n if (typeof creative.creative_id === 'string' && assignedCreativeIds.has(creative.creative_id)) continue;\n if (filterByFormat && !creativeMatchesPackage(pkg, creative)) continue;\n const projected = projectCreativeForDelivery(\n creative,\n pkg,\n creativeFormatWireMode,\n 'inline_creatives',\n legacyFormatConverter,\n canonicalFormatLegacyResolver\n );\n if (!filterByFormat || creativeMatchesPackage(pkg, projected)) {\n inlined.push({ ...projected });\n }\n }\n }\n\n const next: Record<string, unknown> = { ...(pkg as Record<string, unknown>) };\n delete next.creatives;\n if (inlined.length > 0) {\n next.creatives = inlined;\n }\n return next as InlineCreativePackagePatch<TPackage, CreativeAsset>;\n });\n\n if (onUnmatchedAssignment === 'throw') {\n const unmatched = [...assignmentsByPackage.keys()].filter(package_id => !matchedPackageIds.has(package_id));\n if (unmatched.length > 0) {\n throw new Error(`inlineCreativesForPackages assignment references unknown package_id \"${unmatched[0]}\"`);\n }\n }\n\n return result;\n}\n\nfunction assertCanonicalInlineInputs(\n packages: ReadonlyArray<InlineCreativePackage>,\n creatives: ReadonlyArray<CanonicalCreativeAsset>,\n options: object\n): void {\n const unsafeOptions = options as Record<string, unknown>;\n if (\n 'creativeFormatWireMode' in unsafeOptions ||\n 'legacyFormatConverter' in unsafeOptions ||\n 'canonicalFormatLegacyResolver' in unsafeOptions\n ) {\n throw new Error(\n 'inlineCreativesForPackages is canonical-only; use inlineCreativesForPackagesLegacy for legacy wire projection'\n );\n }\n\n for (const pkg of packages) {\n if ('format_ids' in (pkg as object)) {\n throw new Error(\n 'inlineCreativesForPackages does not accept legacy package format_ids; use canonical format selectors or inlineCreativesForPackagesLegacy'\n );\n }\n }\n\n for (const creative of creatives) {\n if ('format_id' in (creative as object)) {\n throw new Error(\n 'inlineCreativesForPackages does not accept legacy creative format_id; use canonical format_kind or inlineCreativesForPackagesLegacy'\n );\n }\n }\n}\n\nfunction defaultPackageId(pkg: LegacyInlineCreativePackage): string | undefined {\n if (typeof pkg.package_id === 'string') return pkg.package_id;\n if (typeof pkg.context?.buyer_ref === 'string') return pkg.context.buyer_ref;\n if (typeof pkg.buyer_ref === 'string') return pkg.buyer_ref;\n return undefined;\n}\n\nfunction applyAssignmentToCreative(creative: CreativeAsset, assignment: InlineCreativeAssignment): CreativeAsset {\n const next: Record<string, unknown> = { ...(creative as unknown as Record<string, unknown>) };\n delete next.weight;\n delete next.placement_ids;\n delete next.placement_refs;\n\n if (assignment.weight !== undefined) next.weight = assignment.weight;\n if (assignment.placement_refs !== undefined) {\n next.placement_refs = [...assignment.placement_refs];\n } else if (assignment.placement_ids !== undefined) {\n next.placement_ids = [...assignment.placement_ids];\n }\n return next as unknown as CreativeAsset;\n}\n\nfunction creativeMatchesPackage(pkg: LegacyInlineCreativePackage, creative: CreativeAsset): boolean {\n const packageFormatIds = arrayOfObjects(pkg.format_ids);\n const packageFormatOptionRefs = arrayOfObjects(pkg.format_option_refs);\n const packageFormatKind = typeof pkg.format_kind === 'string' ? pkg.format_kind : undefined;\n const packageParams = plainObject(pkg.params);\n\n const creativeRecord = creative as unknown as Record<string, unknown>;\n const creativeFormatId = plainObject(creativeRecord.format_id);\n const creativeFormatOptionRef = plainObject(creativeRecord.format_option_ref);\n\n if (packageFormatOptionRefs.length > 0) {\n if (creativeFormatOptionRef) {\n return packageFormatOptionRefs.some(formatOptionRef => deepEqual(formatOptionRef, creativeFormatOptionRef));\n }\n if (packageFormatIds.length === 0 && packageFormatKind === undefined) return false;\n }\n\n if (packageFormatKind !== undefined) {\n return (\n creativeRecord.format_kind === packageFormatKind &&\n paramsMatchCreative(packageParams, creativeFormatId ?? creativeParamsFromAssets(creativeRecord.assets))\n );\n }\n\n if (packageFormatIds.length > 0) {\n if (creativeFormatId !== undefined) {\n return packageFormatIds.some(formatId => formatIdMatches(formatId, creativeFormatId));\n }\n return packageFormatIds.some(\n formatId =>\n typeof formatId.id === 'string' &&\n resolveCanonicalFormatKind(formatId.id, {\n agentUrl: typeof formatId.agent_url === 'string' ? formatId.agent_url : undefined,\n }) === creativeRecord.format_kind\n );\n }\n\n return true;\n}\n\nfunction creativeParamsFromAssets(value: unknown): Record<string, unknown> | undefined {\n const assets = plainObject(value);\n if (!assets) return undefined;\n for (const assetValue of Object.values(assets)) {\n const candidates = Array.isArray(assetValue) ? assetValue : [assetValue];\n for (const candidate of candidates) {\n const asset = plainObject(candidate);\n if (!asset) continue;\n const params: Record<string, unknown> = {};\n if (typeof asset.width === 'number') params.width = asset.width;\n if (typeof asset.height === 'number') params.height = asset.height;\n if (typeof asset.duration_ms === 'number') params.duration_ms = asset.duration_ms;\n if (Object.keys(params).length > 0) return params;\n }\n }\n return undefined;\n}\n\nfunction arrayOfObjects(value: unknown): Record<string, unknown>[] {\n return Array.isArray(value) ? value.flatMap(item => (plainObject(item) ? [item] : [])) : [];\n}\n\nfunction plainObject(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction formatIdMatches(expected: Record<string, unknown>, actual: Record<string, unknown>): boolean {\n const expectedId = expected.id;\n const actualId = actual.id;\n if (expectedId !== actualId) return false;\n\n const expectedAgentUrl = normalizeAgentUrl(expected.agent_url);\n const actualAgentUrl = normalizeAgentUrl(actual.agent_url);\n if (expectedAgentUrl !== undefined && actualAgentUrl !== undefined && expectedAgentUrl !== actualAgentUrl) {\n return false;\n }\n\n for (const key of ['width', 'height', 'duration_ms']) {\n if (expected[key] !== undefined && actual[key] !== undefined && expected[key] !== actual[key]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction paramsMatchCreative(\n packageParams: Record<string, unknown> | undefined,\n creativeFormatId: Record<string, unknown> | undefined\n): boolean {\n if (!packageParams) return true;\n\n let constrained = false;\n const actualWidth = numberValue(creativeFormatId, 'width');\n const actualHeight = numberValue(creativeFormatId, 'height');\n const actualDuration =\n numberValue(creativeFormatId, 'duration_ms') ?? numberValue(creativeFormatId, 'duration_ms_exact');\n\n const sizes = Array.isArray(packageParams.sizes)\n ? packageParams.sizes.flatMap(size => (plainObject(size) ? [size] : []))\n : [];\n if (sizes.length > 0) {\n constrained = true;\n if (\n actualWidth === undefined ||\n actualHeight === undefined ||\n !sizes.some(size => numberValue(size, 'width') === actualWidth && numberValue(size, 'height') === actualHeight)\n ) {\n return false;\n }\n }\n\n const expectedWidth = numberValue(packageParams, 'width');\n if (expectedWidth !== undefined) {\n constrained = true;\n if (actualWidth !== expectedWidth) return false;\n }\n\n const expectedHeight = numberValue(packageParams, 'height');\n if (expectedHeight !== undefined) {\n constrained = true;\n if (actualHeight !== expectedHeight) return false;\n }\n\n const minWidth = numberValue(packageParams, 'min_width');\n if (minWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth < minWidth) return false;\n }\n\n const maxWidth = numberValue(packageParams, 'max_width');\n if (maxWidth !== undefined) {\n constrained = true;\n if (actualWidth === undefined || actualWidth > maxWidth) return false;\n }\n\n const minHeight = numberValue(packageParams, 'min_height');\n if (minHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight < minHeight) return false;\n }\n\n const maxHeight = numberValue(packageParams, 'max_height');\n if (maxHeight !== undefined) {\n constrained = true;\n if (actualHeight === undefined || actualHeight > maxHeight) return false;\n }\n\n const exactDuration = numberValue(packageParams, 'duration_ms_exact') ?? numberValue(packageParams, 'duration_ms');\n if (exactDuration !== undefined) {\n constrained = true;\n if (actualDuration !== exactDuration) return false;\n }\n\n const durationRange = numberRange(packageParams.duration_ms_range);\n if (durationRange) {\n constrained = true;\n const [minDuration, maxDuration] = durationRange;\n if (actualDuration === undefined) return false;\n if (minDuration !== undefined && actualDuration < minDuration) return false;\n if (maxDuration !== undefined && actualDuration > maxDuration) return false;\n }\n\n return constrained ? creativeFormatId !== undefined : true;\n}\n\nfunction numberValue(object: Record<string, unknown> | undefined, key: string): number | undefined {\n const value = object?.[key];\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction numberRange(value: unknown): [number | undefined, number | undefined] | undefined {\n if (!Array.isArray(value) || value.length !== 2) return undefined;\n const [min, max] = value;\n const minValue = min === null ? undefined : typeof min === 'number' && Number.isFinite(min) ? min : undefined;\n const maxValue = max === null ? undefined : typeof max === 'number' && Number.isFinite(max) ? max : undefined;\n return minValue === undefined && maxValue === undefined ? undefined : [minValue, maxValue];\n}\n\nfunction normalizeAgentUrl(value: unknown): string | undefined {\n if (typeof value !== 'string') return undefined;\n let end = value.length;\n while (end > 0 && value.charCodeAt(end - 1) === 47) {\n end -= 1;\n }\n return end === value.length ? value : value.slice(0, end);\n}\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n return JSON.stringify(sortKeys(a)) === JSON.stringify(sortKeys(b));\n}\n\nfunction sortKeys(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeys);\n const object = plainObject(value);\n if (!object) return value;\n return Object.fromEntries(\n Object.entries(object)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([k, v]) => [k, sortKeys(v)])\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,34 +1,38 @@
1
- import type { Format } from '../types/tools.generated.mjs';
2
- type FormatAsset = NonNullable<Format['assets']>[number];
3
- type IndividualAsset = Extract<FormatAsset, {
4
- item_type: 'individual';
5
- }>;
6
- type RepeatableAssetGroup = Extract<FormatAsset, {
7
- item_type: 'repeatable_group';
8
- }>;
1
+ import type { IndividualAudioAsset, IndividualBriefAsset, IndividualCatalogAsset, IndividualCssAsset, IndividualDaastAsset, IndividualHtmlAsset, IndividualImageAsset, IndividualJavaScriptAsset, IndividualMarkdownAsset, IndividualTextAsset, IndividualUrlAsset, IndividualVastAsset, IndividualVideoAsset, IndividualWebhookAsset, RepeatableGroupAsset } from '../types/tools.generated.mjs';
2
+ /** Canonical structural union for the slots declared in an `assets` array. */
3
+ export type CanonicalFormatAssetSlot = IndividualAudioAsset | IndividualBriefAsset | IndividualCatalogAsset | IndividualCssAsset | IndividualDaastAsset | IndividualHtmlAsset | IndividualImageAsset | IndividualJavaScriptAsset | IndividualMarkdownAsset | IndividualTextAsset | IndividualUrlAsset | IndividualVastAsset | IndividualVideoAsset | IndividualWebhookAsset | RepeatableGroupAsset;
4
+ export type IndividualFormatAssetSlot = Exclude<CanonicalFormatAssetSlot, RepeatableGroupAsset>;
5
+ export type RepeatableFormatAssetGroup = RepeatableGroupAsset;
9
6
  /**
10
- * Get assets from a Format
7
+ * Minimal structural input for asset inspection. It deliberately has no
8
+ * `format_id`, `agent_url`, name, or other legacy catalog identity.
9
+ */
10
+ export interface FormatAssetsInput {
11
+ assets?: CanonicalFormatAssetSlot[];
12
+ /** Deprecated v2 compatibility field; values are normalized as required slots. */
13
+ assets_required?: unknown[];
14
+ }
15
+ /**
16
+ * Get asset slots from any structural asset container.
11
17
  *
12
18
  * Returns the assets from the v3 `assets` field. For backward compatibility with v2 servers,
13
19
  * this function also handles the deprecated `assets_required` field if present.
14
20
  *
15
- * @param format - The Format object from list_creative_formats response
21
+ * @param format - An object containing canonical `assets` slots
16
22
  * @returns Array of assets
17
23
  *
18
24
  * @example
19
25
  * ```typescript
20
- * const formats = await agent.listCreativeFormats({});
21
- * for (const format of formats.formats) {
22
- * const assets = getFormatAssets(format);
23
- * console.log(`${format.name} has ${assets.length} assets`);
24
- * }
26
+ * const assets = getFormatAssets({
27
+ * assets: [FormatAsset.image({ asset_id: 'hero', required: true })]
28
+ * });
25
29
  * ```
26
30
  */
27
- export declare function getFormatAssets(format: Format): FormatAsset[];
31
+ export declare function getFormatAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
28
32
  /**
29
- * Get only required assets from a Format
33
+ * Get only required slots from an asset container.
30
34
  *
31
- * @param format - The Format object
35
+ * @param format - A structural asset container
32
36
  * @returns Array of required assets only
33
37
  *
34
38
  * @example
@@ -37,14 +41,14 @@ export declare function getFormatAssets(format: Format): FormatAsset[];
37
41
  * console.log(`Must provide ${requiredAssets.length} assets`);
38
42
  * ```
39
43
  */
40
- export declare function getRequiredAssets(format: Format): FormatAsset[];
44
+ export declare function getRequiredAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
41
45
  /**
42
- * Get only optional assets from a Format
46
+ * Get only optional slots from an asset container.
43
47
  *
44
48
  * Note: When using deprecated `assets_required`, this will always return empty
45
49
  * since assets_required only contained required assets.
46
50
  *
47
- * @param format - The Format object
51
+ * @param format - A structural asset container
48
52
  * @returns Array of optional assets only
49
53
  *
50
54
  * @example
@@ -53,47 +57,46 @@ export declare function getRequiredAssets(format: Format): FormatAsset[];
53
57
  * console.log(`Can optionally provide ${optionalAssets.length} additional assets`);
54
58
  * ```
55
59
  */
56
- export declare function getOptionalAssets(format: Format): FormatAsset[];
60
+ export declare function getOptionalAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
57
61
  /**
58
- * Get individual assets (not repeatable groups) from a Format
62
+ * Get individual slots (not repeatable groups) from an asset container.
59
63
  *
60
- * @param format - The Format object
64
+ * @param format - A structural asset container
61
65
  * @returns Array of individual assets
62
66
  */
63
- export declare function getIndividualAssets(format: Format): IndividualAsset[];
67
+ export declare function getIndividualAssets(format: FormatAssetsInput): IndividualFormatAssetSlot[];
64
68
  /**
65
- * Get repeatable asset groups from a Format
69
+ * Get repeatable asset groups from an asset container.
66
70
  *
67
- * @param format - The Format object
71
+ * @param format - A structural asset container
68
72
  * @returns Array of repeatable asset groups
69
73
  */
70
- export declare function getRepeatableGroups(format: Format): RepeatableAssetGroup[];
74
+ export declare function getRepeatableGroups(format: FormatAssetsInput): RepeatableFormatAssetGroup[];
71
75
  /**
72
76
  * Check if format uses deprecated assets_required field (for migration warnings)
73
77
  *
74
- * @param format - The Format object
78
+ * @param format - A structural asset container
75
79
  * @returns true if using deprecated field, false if using new field or neither
76
80
  *
77
81
  * @example
78
82
  * ```typescript
79
83
  * if (usesDeprecatedAssetsField(format)) {
80
- * console.warn(`Format ${format.name} uses deprecated assets_required field`);
84
+ * console.warn('Asset container uses deprecated assets_required field');
81
85
  * }
82
86
  * ```
83
87
  */
84
- export declare function usesDeprecatedAssetsField(format: Format): boolean;
88
+ export declare function usesDeprecatedAssetsField(format: FormatAssetsInput): boolean;
85
89
  /**
86
- * Get the count of assets in a format (for display purposes)
90
+ * Get the count of slots in an asset container.
87
91
  *
88
- * @param format - The Format object
92
+ * @param format - A structural asset container
89
93
  * @returns Number of assets, or 0 if none defined
90
94
  */
91
- export declare function getAssetCount(format: Format): number;
95
+ export declare function getAssetCount(format: FormatAssetsInput): number;
92
96
  /**
93
- * Check if a format has any assets defined
97
+ * Check if an asset container has any slots defined.
94
98
  *
95
- * @param format - The Format object
99
+ * @param format - A structural asset container
96
100
  * @returns true if format has assets, false otherwise
97
101
  */
98
- export declare function hasAssets(format: Format): boolean;
99
- export {};
102
+ export declare function hasAssets(format: FormatAssetsInput): boolean;
@@ -1,34 +1,38 @@
1
- import type { Format } from '../types/tools.generated';
2
- type FormatAsset = NonNullable<Format['assets']>[number];
3
- type IndividualAsset = Extract<FormatAsset, {
4
- item_type: 'individual';
5
- }>;
6
- type RepeatableAssetGroup = Extract<FormatAsset, {
7
- item_type: 'repeatable_group';
8
- }>;
1
+ import type { IndividualAudioAsset, IndividualBriefAsset, IndividualCatalogAsset, IndividualCssAsset, IndividualDaastAsset, IndividualHtmlAsset, IndividualImageAsset, IndividualJavaScriptAsset, IndividualMarkdownAsset, IndividualTextAsset, IndividualUrlAsset, IndividualVastAsset, IndividualVideoAsset, IndividualWebhookAsset, RepeatableGroupAsset } from '../types/tools.generated';
2
+ /** Canonical structural union for the slots declared in an `assets` array. */
3
+ export type CanonicalFormatAssetSlot = IndividualAudioAsset | IndividualBriefAsset | IndividualCatalogAsset | IndividualCssAsset | IndividualDaastAsset | IndividualHtmlAsset | IndividualImageAsset | IndividualJavaScriptAsset | IndividualMarkdownAsset | IndividualTextAsset | IndividualUrlAsset | IndividualVastAsset | IndividualVideoAsset | IndividualWebhookAsset | RepeatableGroupAsset;
4
+ export type IndividualFormatAssetSlot = Exclude<CanonicalFormatAssetSlot, RepeatableGroupAsset>;
5
+ export type RepeatableFormatAssetGroup = RepeatableGroupAsset;
9
6
  /**
10
- * Get assets from a Format
7
+ * Minimal structural input for asset inspection. It deliberately has no
8
+ * `format_id`, `agent_url`, name, or other legacy catalog identity.
9
+ */
10
+ export interface FormatAssetsInput {
11
+ assets?: CanonicalFormatAssetSlot[];
12
+ /** Deprecated v2 compatibility field; values are normalized as required slots. */
13
+ assets_required?: unknown[];
14
+ }
15
+ /**
16
+ * Get asset slots from any structural asset container.
11
17
  *
12
18
  * Returns the assets from the v3 `assets` field. For backward compatibility with v2 servers,
13
19
  * this function also handles the deprecated `assets_required` field if present.
14
20
  *
15
- * @param format - The Format object from list_creative_formats response
21
+ * @param format - An object containing canonical `assets` slots
16
22
  * @returns Array of assets
17
23
  *
18
24
  * @example
19
25
  * ```typescript
20
- * const formats = await agent.listCreativeFormats({});
21
- * for (const format of formats.formats) {
22
- * const assets = getFormatAssets(format);
23
- * console.log(`${format.name} has ${assets.length} assets`);
24
- * }
26
+ * const assets = getFormatAssets({
27
+ * assets: [FormatAsset.image({ asset_id: 'hero', required: true })]
28
+ * });
25
29
  * ```
26
30
  */
27
- export declare function getFormatAssets(format: Format): FormatAsset[];
31
+ export declare function getFormatAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
28
32
  /**
29
- * Get only required assets from a Format
33
+ * Get only required slots from an asset container.
30
34
  *
31
- * @param format - The Format object
35
+ * @param format - A structural asset container
32
36
  * @returns Array of required assets only
33
37
  *
34
38
  * @example
@@ -37,14 +41,14 @@ export declare function getFormatAssets(format: Format): FormatAsset[];
37
41
  * console.log(`Must provide ${requiredAssets.length} assets`);
38
42
  * ```
39
43
  */
40
- export declare function getRequiredAssets(format: Format): FormatAsset[];
44
+ export declare function getRequiredAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
41
45
  /**
42
- * Get only optional assets from a Format
46
+ * Get only optional slots from an asset container.
43
47
  *
44
48
  * Note: When using deprecated `assets_required`, this will always return empty
45
49
  * since assets_required only contained required assets.
46
50
  *
47
- * @param format - The Format object
51
+ * @param format - A structural asset container
48
52
  * @returns Array of optional assets only
49
53
  *
50
54
  * @example
@@ -53,48 +57,47 @@ export declare function getRequiredAssets(format: Format): FormatAsset[];
53
57
  * console.log(`Can optionally provide ${optionalAssets.length} additional assets`);
54
58
  * ```
55
59
  */
56
- export declare function getOptionalAssets(format: Format): FormatAsset[];
60
+ export declare function getOptionalAssets(format: FormatAssetsInput): CanonicalFormatAssetSlot[];
57
61
  /**
58
- * Get individual assets (not repeatable groups) from a Format
62
+ * Get individual slots (not repeatable groups) from an asset container.
59
63
  *
60
- * @param format - The Format object
64
+ * @param format - A structural asset container
61
65
  * @returns Array of individual assets
62
66
  */
63
- export declare function getIndividualAssets(format: Format): IndividualAsset[];
67
+ export declare function getIndividualAssets(format: FormatAssetsInput): IndividualFormatAssetSlot[];
64
68
  /**
65
- * Get repeatable asset groups from a Format
69
+ * Get repeatable asset groups from an asset container.
66
70
  *
67
- * @param format - The Format object
71
+ * @param format - A structural asset container
68
72
  * @returns Array of repeatable asset groups
69
73
  */
70
- export declare function getRepeatableGroups(format: Format): RepeatableAssetGroup[];
74
+ export declare function getRepeatableGroups(format: FormatAssetsInput): RepeatableFormatAssetGroup[];
71
75
  /**
72
76
  * Check if format uses deprecated assets_required field (for migration warnings)
73
77
  *
74
- * @param format - The Format object
78
+ * @param format - A structural asset container
75
79
  * @returns true if using deprecated field, false if using new field or neither
76
80
  *
77
81
  * @example
78
82
  * ```typescript
79
83
  * if (usesDeprecatedAssetsField(format)) {
80
- * console.warn(`Format ${format.name} uses deprecated assets_required field`);
84
+ * console.warn('Asset container uses deprecated assets_required field');
81
85
  * }
82
86
  * ```
83
87
  */
84
- export declare function usesDeprecatedAssetsField(format: Format): boolean;
88
+ export declare function usesDeprecatedAssetsField(format: FormatAssetsInput): boolean;
85
89
  /**
86
- * Get the count of assets in a format (for display purposes)
90
+ * Get the count of slots in an asset container.
87
91
  *
88
- * @param format - The Format object
92
+ * @param format - A structural asset container
89
93
  * @returns Number of assets, or 0 if none defined
90
94
  */
91
- export declare function getAssetCount(format: Format): number;
95
+ export declare function getAssetCount(format: FormatAssetsInput): number;
92
96
  /**
93
- * Check if a format has any assets defined
97
+ * Check if an asset container has any slots defined.
94
98
  *
95
- * @param format - The Format object
99
+ * @param format - A structural asset container
96
100
  * @returns true if format has assets, false otherwise
97
101
  */
98
- export declare function hasAssets(format: Format): boolean;
99
- export {};
102
+ export declare function hasAssets(format: FormatAssetsInput): boolean;
100
103
  //# sourceMappingURL=format-assets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format-assets.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/format-assets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGvD,KAAK,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,KAAK,eAAe,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,SAAS,EAAE,YAAY,CAAA;CAAE,CAAC,CAAC;AACzE,KAAK,oBAAoB,GAAG,OAAO,CAAC,WAAW,EAAE;IAAE,SAAS,EAAE,kBAAkB,CAAA;CAAE,CAAC,CAAC;AAQpF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAiB7D;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAE/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAI1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGjE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD"}
1
+ {"version":3,"file":"format-assets.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/format-assets.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,8EAA8E;AAC9E,MAAM,MAAM,wBAAwB,GAChC,oBAAoB,GACpB,oBAAoB,GACpB,sBAAsB,GACtB,kBAAkB,GAClB,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,yBAAyB,GACzB,uBAAuB,GACvB,mBAAmB,GACnB,kBAAkB,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,sBAAsB,GACtB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,EAAE,oBAAoB,CAAC,CAAC;AAChG,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACpC,kFAAkF;IAClF,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;CAC7B;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,EAAE,CAiBrF;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,EAAE,CAEvF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,wBAAwB,EAAE,CAEvF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,yBAAyB,EAAE,CAI1F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,GAAG,0BAA0B,EAAE,CAI3F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAG5E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAE5D"}
@@ -52,7 +52,9 @@ function getOptionalAssets(format) {
52
52
  return getFormatAssets(format).filter((asset) => !asset.required);
53
53
  }
54
54
  function getIndividualAssets(format) {
55
- return getFormatAssets(format).filter((asset) => asset.item_type === "individual");
55
+ return getFormatAssets(format).filter(
56
+ (asset) => asset.item_type === "individual"
57
+ );
56
58
  }
57
59
  function getRepeatableGroups(format) {
58
60
  return getFormatAssets(format).filter(