@adcp/sdk 12.0.0 → 12.0.2

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 (959) hide show
  1. package/dist/lib/adapters/content-standards-adapter.mjs +0 -6
  2. package/dist/lib/adapters/content-standards-adapter.mjs.map +1 -1
  3. package/dist/lib/adapters/derived-account-store.mjs +0 -6
  4. package/dist/lib/adapters/derived-account-store.mjs.map +1 -1
  5. package/dist/lib/adapters/governance-adapter.mjs +0 -6
  6. package/dist/lib/adapters/governance-adapter.mjs.map +1 -1
  7. package/dist/lib/adapters/implicit-account-store.mjs +0 -6
  8. package/dist/lib/adapters/implicit-account-store.mjs.map +1 -1
  9. package/dist/lib/adapters/index.mjs +0 -6
  10. package/dist/lib/adapters/index.mjs.map +1 -1
  11. package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs +0 -6
  12. package/dist/lib/adapters/legacy/v2-5/create_media_buy.mjs.map +1 -1
  13. package/dist/lib/adapters/legacy/v2-5/get_products.mjs +0 -6
  14. package/dist/lib/adapters/legacy/v2-5/get_products.mjs.map +1 -1
  15. package/dist/lib/adapters/legacy/v2-5/index.mjs +0 -6
  16. package/dist/lib/adapters/legacy/v2-5/index.mjs.map +1 -1
  17. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs +0 -6
  18. package/dist/lib/adapters/legacy/v2-5/list_creative_formats.mjs.map +1 -1
  19. package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs +0 -6
  20. package/dist/lib/adapters/legacy/v2-5/preview_creative.mjs.map +1 -1
  21. package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs +0 -6
  22. package/dist/lib/adapters/legacy/v2-5/sync_creatives.mjs.map +1 -1
  23. package/dist/lib/adapters/legacy/v2-5/types.mjs +0 -6
  24. package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs +0 -6
  25. package/dist/lib/adapters/legacy/v2-5/update_media_buy.mjs.map +1 -1
  26. package/dist/lib/adapters/oauth-passthrough-resolver.mjs +0 -6
  27. package/dist/lib/adapters/oauth-passthrough-resolver.mjs.map +1 -1
  28. package/dist/lib/adapters/property-list-adapter.mjs +0 -6
  29. package/dist/lib/adapters/property-list-adapter.mjs.map +1 -1
  30. package/dist/lib/adapters/roster-account-store.mjs +0 -6
  31. package/dist/lib/adapters/roster-account-store.mjs.map +1 -1
  32. package/dist/lib/adapters/si-session-manager.mjs +0 -6
  33. package/dist/lib/adapters/si-session-manager.mjs.map +1 -1
  34. package/dist/lib/adapters/version/3.0/brand-fields.mjs +0 -6
  35. package/dist/lib/adapters/version/3.0/brand-fields.mjs.map +1 -1
  36. package/dist/lib/adapters/version/3.0/get-products.mjs +0 -6
  37. package/dist/lib/adapters/version/3.0/get-products.mjs.map +1 -1
  38. package/dist/lib/adapters/version/3.0/index.mjs +0 -6
  39. package/dist/lib/adapters/version/3.0/index.mjs.map +1 -1
  40. package/dist/lib/adapters/version/3.0/sync-accounts.mjs +0 -6
  41. package/dist/lib/adapters/version/3.0/sync-accounts.mjs.map +1 -1
  42. package/dist/lib/adapters/version/index.mjs +0 -6
  43. package/dist/lib/adapters/version/index.mjs.map +1 -1
  44. package/dist/lib/adapters/version/types.mjs +0 -6
  45. package/dist/lib/advanced.mjs +0 -6
  46. package/dist/lib/advanced.mjs.map +1 -1
  47. package/dist/lib/agents/index.generated.mjs +0 -6
  48. package/dist/lib/agents/index.generated.mjs.map +1 -1
  49. package/dist/lib/auth/index.mjs +0 -6
  50. package/dist/lib/auth/index.mjs.map +1 -1
  51. package/dist/lib/auth/oauth/CLIFlowHandler.mjs +0 -6
  52. package/dist/lib/auth/oauth/CLIFlowHandler.mjs.map +1 -1
  53. package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs +0 -6
  54. package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs.map +1 -1
  55. package/dist/lib/auth/oauth/MCPOAuthProvider.mjs +0 -6
  56. package/dist/lib/auth/oauth/MCPOAuthProvider.mjs.map +1 -1
  57. package/dist/lib/auth/oauth/NonInteractiveFlowHandler.mjs +0 -6
  58. package/dist/lib/auth/oauth/NonInteractiveFlowHandler.mjs.map +1 -1
  59. package/dist/lib/auth/oauth/authorization-required.mjs +0 -6
  60. package/dist/lib/auth/oauth/authorization-required.mjs.map +1 -1
  61. package/dist/lib/auth/oauth/diagnose.mjs +0 -6
  62. package/dist/lib/auth/oauth/diagnose.mjs.map +1 -1
  63. package/dist/lib/auth/oauth/diagnostics.mjs +0 -6
  64. package/dist/lib/auth/oauth/diagnostics.mjs.map +1 -1
  65. package/dist/lib/auth/oauth/discovery.mjs +0 -6
  66. package/dist/lib/auth/oauth/discovery.mjs.map +1 -1
  67. package/dist/lib/auth/oauth/file-storage.mjs +0 -6
  68. package/dist/lib/auth/oauth/file-storage.mjs.map +1 -1
  69. package/dist/lib/auth/oauth/index.mjs +0 -6
  70. package/dist/lib/auth/oauth/index.mjs.map +1 -1
  71. package/dist/lib/auth/oauth/secret-resolver.mjs +0 -6
  72. package/dist/lib/auth/oauth/secret-resolver.mjs.map +1 -1
  73. package/dist/lib/auth/oauth/storage-registry.mjs +0 -6
  74. package/dist/lib/auth/oauth/storage-registry.mjs.map +1 -1
  75. package/dist/lib/auth/oauth/types.mjs +0 -6
  76. package/dist/lib/auth/oauth/types.mjs.map +1 -1
  77. package/dist/lib/auth/oauth/web-flow.mjs +0 -6
  78. package/dist/lib/auth/oauth/web-flow.mjs.map +1 -1
  79. package/dist/lib/brand/index.mjs +0 -6
  80. package/dist/lib/brand/index.mjs.map +1 -1
  81. package/dist/lib/canonical-references/index.mjs +6 -7
  82. package/dist/lib/canonical-references/index.mjs.map +1 -1
  83. package/dist/lib/client/index.mjs +0 -6
  84. package/dist/lib/client/index.mjs.map +1 -1
  85. package/dist/lib/compliance/index.mjs +0 -6
  86. package/dist/lib/compliance/index.mjs.map +1 -1
  87. package/dist/lib/compliance-fixtures/index.mjs +0 -6
  88. package/dist/lib/compliance-fixtures/index.mjs.map +1 -1
  89. package/dist/lib/compliance-fixtures/test-authorization-server.mjs +0 -6
  90. package/dist/lib/compliance-fixtures/test-authorization-server.mjs.map +1 -1
  91. package/dist/lib/conformance/index.mjs +0 -6
  92. package/dist/lib/conformance/index.mjs.map +1 -1
  93. package/dist/lib/conformance/invariants/uniformError.mjs +0 -6
  94. package/dist/lib/conformance/invariants/uniformError.mjs.map +1 -1
  95. package/dist/lib/conformance/invariants/uniformErrorComparator.mjs +0 -6
  96. package/dist/lib/conformance/invariants/uniformErrorComparator.mjs.map +1 -1
  97. package/dist/lib/conformance/oracle.mjs +0 -6
  98. package/dist/lib/conformance/oracle.mjs.map +1 -1
  99. package/dist/lib/conformance/runConformance.mjs +0 -6
  100. package/dist/lib/conformance/runConformance.mjs.map +1 -1
  101. package/dist/lib/conformance/runners.mjs +0 -6
  102. package/dist/lib/conformance/runners.mjs.map +1 -1
  103. package/dist/lib/conformance/schemaArbitrary.mjs +0 -6
  104. package/dist/lib/conformance/schemaArbitrary.mjs.map +1 -1
  105. package/dist/lib/conformance/schemaLoader.mjs +5 -6
  106. package/dist/lib/conformance/schemaLoader.mjs.map +1 -1
  107. package/dist/lib/conformance/seeder.mjs +0 -6
  108. package/dist/lib/conformance/seeder.mjs.map +1 -1
  109. package/dist/lib/conformance/types.mjs +0 -6
  110. package/dist/lib/conformance/types.mjs.map +1 -1
  111. package/dist/lib/conformance/webhook.mjs +0 -6
  112. package/dist/lib/conformance/webhook.mjs.map +1 -1
  113. package/dist/lib/core/ADCPMultiAgentClient.mjs +0 -6
  114. package/dist/lib/core/ADCPMultiAgentClient.mjs.map +1 -1
  115. package/dist/lib/core/AgentClient.mjs +0 -6
  116. package/dist/lib/core/AgentClient.mjs.map +1 -1
  117. package/dist/lib/core/AsyncHandler.mjs +0 -6
  118. package/dist/lib/core/AsyncHandler.mjs.map +1 -1
  119. package/dist/lib/core/ConfigurationManager.mjs +0 -6
  120. package/dist/lib/core/ConfigurationManager.mjs.map +1 -1
  121. package/dist/lib/core/ConversationTypes.mjs +0 -6
  122. package/dist/lib/core/CreativeAgentClient.mjs +0 -6
  123. package/dist/lib/core/CreativeAgentClient.mjs.map +1 -1
  124. package/dist/lib/core/GovernanceMiddleware.mjs +0 -6
  125. package/dist/lib/core/GovernanceMiddleware.mjs.map +1 -1
  126. package/dist/lib/core/GovernanceTypes.mjs +0 -6
  127. package/dist/lib/core/GovernanceTypes.mjs.map +1 -1
  128. package/dist/lib/core/ProtocolResponseParser.mjs +0 -6
  129. package/dist/lib/core/ProtocolResponseParser.mjs.map +1 -1
  130. package/dist/lib/core/ResponseValidator.mjs +0 -6
  131. package/dist/lib/core/ResponseValidator.mjs.map +1 -1
  132. package/dist/lib/core/SingleAgentClient.mjs +0 -6
  133. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  134. package/dist/lib/core/TaskEventTypes.mjs +0 -6
  135. package/dist/lib/core/TaskEventTypes.mjs.map +1 -1
  136. package/dist/lib/core/TaskExecutor.mjs +0 -6
  137. package/dist/lib/core/TaskExecutor.mjs.map +1 -1
  138. package/dist/lib/core/match.mjs +0 -6
  139. package/dist/lib/core/match.mjs.map +1 -1
  140. package/dist/lib/core/task-status.mjs +0 -6
  141. package/dist/lib/core/task-status.mjs.map +1 -1
  142. package/dist/lib/core/webhook-url.mjs +0 -6
  143. package/dist/lib/core/webhook-url.mjs.map +1 -1
  144. package/dist/lib/discovery/adagents-redirects.mjs +0 -6
  145. package/dist/lib/discovery/adagents-redirects.mjs.map +1 -1
  146. package/dist/lib/discovery/agent-directory.mjs +0 -6
  147. package/dist/lib/discovery/agent-directory.mjs.map +1 -1
  148. package/dist/lib/discovery/inline-publisher-properties.mjs +0 -6
  149. package/dist/lib/discovery/inline-publisher-properties.mjs.map +1 -1
  150. package/dist/lib/discovery/network-consistency-checker.mjs +0 -6
  151. package/dist/lib/discovery/network-consistency-checker.mjs.map +1 -1
  152. package/dist/lib/discovery/property-crawler.mjs +0 -6
  153. package/dist/lib/discovery/property-crawler.mjs.map +1 -1
  154. package/dist/lib/discovery/property-index.mjs +0 -6
  155. package/dist/lib/discovery/property-index.mjs.map +1 -1
  156. package/dist/lib/discovery/publisher-property-selector.mjs +0 -6
  157. package/dist/lib/discovery/publisher-property-selector.mjs.map +1 -1
  158. package/dist/lib/discovery/resolve-agent-properties.mjs +0 -6
  159. package/dist/lib/discovery/resolve-agent-properties.mjs.map +1 -1
  160. package/dist/lib/discovery/types.mjs +0 -6
  161. package/dist/lib/discovery/validate-adagents.mjs +0 -6
  162. package/dist/lib/discovery/validate-adagents.mjs.map +1 -1
  163. package/dist/lib/enums.mjs +0 -6
  164. package/dist/lib/enums.mjs.map +1 -1
  165. package/dist/lib/errors/index.mjs +0 -6
  166. package/dist/lib/errors/index.mjs.map +1 -1
  167. package/dist/lib/express-mcp/index.mjs +0 -6
  168. package/dist/lib/express-mcp/index.mjs.map +1 -1
  169. package/dist/lib/governance/index.mjs +0 -6
  170. package/dist/lib/governance/index.mjs.map +1 -1
  171. package/dist/lib/handlers/types.mjs +0 -6
  172. package/dist/lib/handlers/types.mjs.map +1 -1
  173. package/dist/lib/index.d.mts +1 -1
  174. package/dist/lib/index.d.ts +1 -1
  175. package/dist/lib/index.d.ts.map +1 -1
  176. package/dist/lib/index.js.map +1 -1
  177. package/dist/lib/index.mjs +0 -6
  178. package/dist/lib/index.mjs.map +1 -1
  179. package/dist/lib/media-buy/available-actions.mjs +0 -6
  180. package/dist/lib/media-buy/available-actions.mjs.map +1 -1
  181. package/dist/lib/media-buy/index.mjs +0 -6
  182. package/dist/lib/media-buy/index.mjs.map +1 -1
  183. package/dist/lib/media-buy/preflight.mjs +0 -6
  184. package/dist/lib/media-buy/preflight.mjs.map +1 -1
  185. package/dist/lib/media-buy/property-policy.mjs +0 -6
  186. package/dist/lib/media-buy/property-policy.mjs.map +1 -1
  187. package/dist/lib/media-buy/types.mjs +0 -6
  188. package/dist/lib/media-buy/types.mjs.map +1 -1
  189. package/dist/lib/media-buy/update-fields.generated.mjs +0 -6
  190. package/dist/lib/media-buy/update-fields.generated.mjs.map +1 -1
  191. package/dist/lib/mock-server/creative-ad-server/seed-data.mjs +0 -6
  192. package/dist/lib/mock-server/creative-ad-server/seed-data.mjs.map +1 -1
  193. package/dist/lib/mock-server/creative-ad-server/server.mjs +0 -6
  194. package/dist/lib/mock-server/creative-ad-server/server.mjs.map +1 -1
  195. package/dist/lib/mock-server/creative-template/seed-data.mjs +0 -6
  196. package/dist/lib/mock-server/creative-template/seed-data.mjs.map +1 -1
  197. package/dist/lib/mock-server/creative-template/server.mjs +0 -6
  198. package/dist/lib/mock-server/creative-template/server.mjs.map +1 -1
  199. package/dist/lib/mock-server/index.mjs +0 -6
  200. package/dist/lib/mock-server/index.mjs.map +1 -1
  201. package/dist/lib/mock-server/sales-guaranteed/recipe.mjs +0 -6
  202. package/dist/lib/mock-server/sales-guaranteed/recipe.mjs.map +1 -1
  203. package/dist/lib/mock-server/sales-guaranteed/seed-data.mjs +0 -6
  204. package/dist/lib/mock-server/sales-guaranteed/seed-data.mjs.map +1 -1
  205. package/dist/lib/mock-server/sales-guaranteed/server.mjs +0 -6
  206. package/dist/lib/mock-server/sales-guaranteed/server.mjs.map +1 -1
  207. package/dist/lib/mock-server/sales-non-guaranteed/recipe.mjs +0 -6
  208. package/dist/lib/mock-server/sales-non-guaranteed/recipe.mjs.map +1 -1
  209. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.mjs +0 -6
  210. package/dist/lib/mock-server/sales-non-guaranteed/seed-data.mjs.map +1 -1
  211. package/dist/lib/mock-server/sales-non-guaranteed/server.mjs +0 -6
  212. package/dist/lib/mock-server/sales-non-guaranteed/server.mjs.map +1 -1
  213. package/dist/lib/mock-server/sales-social/seed-data.mjs +0 -6
  214. package/dist/lib/mock-server/sales-social/seed-data.mjs.map +1 -1
  215. package/dist/lib/mock-server/sales-social/server.mjs +0 -6
  216. package/dist/lib/mock-server/sales-social/server.mjs.map +1 -1
  217. package/dist/lib/mock-server/scenario.mjs +0 -6
  218. package/dist/lib/mock-server/scenario.mjs.map +1 -1
  219. package/dist/lib/mock-server/signal-marketplace/seed-data.mjs +0 -6
  220. package/dist/lib/mock-server/signal-marketplace/seed-data.mjs.map +1 -1
  221. package/dist/lib/mock-server/signal-marketplace/server.mjs +0 -6
  222. package/dist/lib/mock-server/signal-marketplace/server.mjs.map +1 -1
  223. package/dist/lib/mock-server/sponsored-intelligence/seed-data.mjs +0 -6
  224. package/dist/lib/mock-server/sponsored-intelligence/seed-data.mjs.map +1 -1
  225. package/dist/lib/mock-server/sponsored-intelligence/server.mjs +0 -6
  226. package/dist/lib/mock-server/sponsored-intelligence/server.mjs.map +1 -1
  227. package/dist/lib/net/address-guards.mjs +0 -6
  228. package/dist/lib/net/address-guards.mjs.map +1 -1
  229. package/dist/lib/net/index.mjs +0 -6
  230. package/dist/lib/net/index.mjs.map +1 -1
  231. package/dist/lib/net/ssrf-fetch.mjs +0 -6
  232. package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
  233. package/dist/lib/observability/index.mjs +0 -6
  234. package/dist/lib/observability/index.mjs.map +1 -1
  235. package/dist/lib/observability/tracing.mjs +6 -7
  236. package/dist/lib/observability/tracing.mjs.map +1 -1
  237. package/dist/lib/protocols/a2a.mjs +0 -6
  238. package/dist/lib/protocols/a2a.mjs.map +1 -1
  239. package/dist/lib/protocols/abort.mjs +0 -6
  240. package/dist/lib/protocols/abort.mjs.map +1 -1
  241. package/dist/lib/protocols/index.mjs +0 -6
  242. package/dist/lib/protocols/index.mjs.map +1 -1
  243. package/dist/lib/protocols/mcp-modern.mjs +0 -6
  244. package/dist/lib/protocols/mcp-modern.mjs.map +1 -1
  245. package/dist/lib/protocols/mcp-tasks.mjs +0 -6
  246. package/dist/lib/protocols/mcp-tasks.mjs.map +1 -1
  247. package/dist/lib/protocols/mcp.mjs +0 -6
  248. package/dist/lib/protocols/mcp.mjs.map +1 -1
  249. package/dist/lib/protocols/rawResponseCapture.mjs +0 -6
  250. package/dist/lib/protocols/rawResponseCapture.mjs.map +1 -1
  251. package/dist/lib/protocols/responseSizeLimit.mjs +0 -6
  252. package/dist/lib/protocols/responseSizeLimit.mjs.map +1 -1
  253. package/dist/lib/protocols/transportDiagnostics.mjs +0 -6
  254. package/dist/lib/protocols/transportDiagnostics.mjs.map +1 -1
  255. package/dist/lib/registry/cursor-store.mjs +0 -6
  256. package/dist/lib/registry/cursor-store.mjs.map +1 -1
  257. package/dist/lib/registry/feed-stream.mjs +0 -6
  258. package/dist/lib/registry/feed-stream.mjs.map +1 -1
  259. package/dist/lib/registry/index.mjs +0 -6
  260. package/dist/lib/registry/index.mjs.map +1 -1
  261. package/dist/lib/registry/property-registry.mjs +0 -6
  262. package/dist/lib/registry/property-registry.mjs.map +1 -1
  263. package/dist/lib/registry/sync.mjs +0 -6
  264. package/dist/lib/registry/sync.mjs.map +1 -1
  265. package/dist/lib/registry/types.generated.mjs +0 -6
  266. package/dist/lib/registry/types.mjs +0 -6
  267. package/dist/lib/schemas/index.mjs +0 -6
  268. package/dist/lib/schemas/index.mjs.map +1 -1
  269. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  270. package/dist/lib/server/a2a-adapter.mjs +0 -6
  271. package/dist/lib/server/a2a-adapter.mjs.map +1 -1
  272. package/dist/lib/server/account-mode.mjs +0 -6
  273. package/dist/lib/server/account-mode.mjs.map +1 -1
  274. package/dist/lib/server/adcp-server.mjs +0 -6
  275. package/dist/lib/server/adcp-server.mjs.map +1 -1
  276. package/dist/lib/server/auth-introspection.mjs +0 -6
  277. package/dist/lib/server/auth-introspection.mjs.map +1 -1
  278. package/dist/lib/server/auth-signature.mjs +0 -6
  279. package/dist/lib/server/auth-signature.mjs.map +1 -1
  280. package/dist/lib/server/auth.mjs +0 -6
  281. package/dist/lib/server/auth.mjs.map +1 -1
  282. package/dist/lib/server/create-adcp-server.d.mts +13 -0
  283. package/dist/lib/server/create-adcp-server.d.ts +13 -0
  284. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  285. package/dist/lib/server/create-adcp-server.js +3 -2
  286. package/dist/lib/server/create-adcp-server.js.map +1 -1
  287. package/dist/lib/server/create-adcp-server.mjs +3 -8
  288. package/dist/lib/server/create-adcp-server.mjs.map +1 -1
  289. package/dist/lib/server/credential-policy.mjs +0 -6
  290. package/dist/lib/server/credential-policy.mjs.map +1 -1
  291. package/dist/lib/server/ctx-metadata/backends/memory.mjs +0 -6
  292. package/dist/lib/server/ctx-metadata/backends/memory.mjs.map +1 -1
  293. package/dist/lib/server/ctx-metadata/backends/pg.mjs +0 -6
  294. package/dist/lib/server/ctx-metadata/backends/pg.mjs.map +1 -1
  295. package/dist/lib/server/ctx-metadata/backends/redis.mjs +0 -6
  296. package/dist/lib/server/ctx-metadata/backends/redis.mjs.map +1 -1
  297. package/dist/lib/server/ctx-metadata/index.mjs +0 -6
  298. package/dist/lib/server/ctx-metadata/index.mjs.map +1 -1
  299. package/dist/lib/server/ctx-metadata/store.mjs +0 -6
  300. package/dist/lib/server/ctx-metadata/store.mjs.map +1 -1
  301. package/dist/lib/server/ctx-metadata/wire-shape.mjs +0 -6
  302. package/dist/lib/server/ctx-metadata/wire-shape.mjs.map +1 -1
  303. package/dist/lib/server/decisioning/account.mjs +0 -6
  304. package/dist/lib/server/decisioning/account.mjs.map +1 -1
  305. package/dist/lib/server/decisioning/admin-router.mjs +0 -6
  306. package/dist/lib/server/decisioning/admin-router.mjs.map +1 -1
  307. package/dist/lib/server/decisioning/assembly-helpers.mjs +0 -6
  308. package/dist/lib/server/decisioning/assembly-helpers.mjs.map +1 -1
  309. package/dist/lib/server/decisioning/async-outcome.mjs +0 -6
  310. package/dist/lib/server/decisioning/async-outcome.mjs.map +1 -1
  311. package/dist/lib/server/decisioning/buyer-agent.mjs +0 -6
  312. package/dist/lib/server/decisioning/buyer-agent.mjs.map +1 -1
  313. package/dist/lib/server/decisioning/capabilities.mjs +0 -6
  314. package/dist/lib/server/decisioning/capabilities.mjs.map +1 -1
  315. package/dist/lib/server/decisioning/compose.mjs +0 -6
  316. package/dist/lib/server/decisioning/compose.mjs.map +1 -1
  317. package/dist/lib/server/decisioning/context.mjs +0 -6
  318. package/dist/lib/server/decisioning/errors-typed.mjs +0 -6
  319. package/dist/lib/server/decisioning/errors-typed.mjs.map +1 -1
  320. package/dist/lib/server/decisioning/helpers.mjs +0 -6
  321. package/dist/lib/server/decisioning/helpers.mjs.map +1 -1
  322. package/dist/lib/server/decisioning/index.mjs +0 -6
  323. package/dist/lib/server/decisioning/index.mjs.map +1 -1
  324. package/dist/lib/server/decisioning/list-helpers.mjs +0 -6
  325. package/dist/lib/server/decisioning/list-helpers.mjs.map +1 -1
  326. package/dist/lib/server/decisioning/manifest-helpers.mjs +0 -6
  327. package/dist/lib/server/decisioning/manifest-helpers.mjs.map +1 -1
  328. package/dist/lib/server/decisioning/pagination.mjs +0 -6
  329. package/dist/lib/server/decisioning/platform-helpers.mjs +0 -6
  330. package/dist/lib/server/decisioning/platform-helpers.mjs.map +1 -1
  331. package/dist/lib/server/decisioning/platform.mjs +0 -6
  332. package/dist/lib/server/decisioning/proposal/dispatch.mjs +0 -6
  333. package/dist/lib/server/decisioning/proposal/dispatch.mjs.map +1 -1
  334. package/dist/lib/server/decisioning/proposal/index.mjs +0 -6
  335. package/dist/lib/server/decisioning/proposal/index.mjs.map +1 -1
  336. package/dist/lib/server/decisioning/proposal/lifecycle.mjs +0 -6
  337. package/dist/lib/server/decisioning/proposal/lifecycle.mjs.map +1 -1
  338. package/dist/lib/server/decisioning/proposal/mock-manager.mjs +0 -6
  339. package/dist/lib/server/decisioning/proposal/mock-manager.mjs.map +1 -1
  340. package/dist/lib/server/decisioning/proposal/store.mjs +0 -6
  341. package/dist/lib/server/decisioning/proposal/store.mjs.map +1 -1
  342. package/dist/lib/server/decisioning/proposal/types.mjs +0 -6
  343. package/dist/lib/server/decisioning/proposal/types.mjs.map +1 -1
  344. package/dist/lib/server/decisioning/resolve-presets.mjs +0 -6
  345. package/dist/lib/server/decisioning/resolve-presets.mjs.map +1 -1
  346. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs +0 -6
  347. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs.map +1 -1
  348. package/dist/lib/server/decisioning/runtime/from-platform.mjs +0 -6
  349. package/dist/lib/server/decisioning/runtime/from-platform.mjs.map +1 -1
  350. package/dist/lib/server/decisioning/runtime/observed-modes.mjs +0 -6
  351. package/dist/lib/server/decisioning/runtime/observed-modes.mjs.map +1 -1
  352. package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs +0 -6
  353. package/dist/lib/server/decisioning/runtime/postgres-task-registry.mjs.map +1 -1
  354. package/dist/lib/server/decisioning/runtime/protocol-for-tool.mjs +0 -6
  355. package/dist/lib/server/decisioning/runtime/protocol-for-tool.mjs.map +1 -1
  356. package/dist/lib/server/decisioning/runtime/task-registry.mjs +0 -6
  357. package/dist/lib/server/decisioning/runtime/task-registry.mjs.map +1 -1
  358. package/dist/lib/server/decisioning/runtime/to-context.mjs +0 -6
  359. package/dist/lib/server/decisioning/runtime/to-context.mjs.map +1 -1
  360. package/dist/lib/server/decisioning/runtime/validate-platform.mjs +0 -6
  361. package/dist/lib/server/decisioning/runtime/validate-platform.mjs.map +1 -1
  362. package/dist/lib/server/decisioning/specialisms/audiences.mjs +0 -6
  363. package/dist/lib/server/decisioning/specialisms/brand-rights.mjs +0 -6
  364. package/dist/lib/server/decisioning/specialisms/campaign-governance.mjs +0 -6
  365. package/dist/lib/server/decisioning/specialisms/content-standards.mjs +0 -6
  366. package/dist/lib/server/decisioning/specialisms/creative-ad-server.mjs +0 -6
  367. package/dist/lib/server/decisioning/specialisms/creative.mjs +0 -6
  368. package/dist/lib/server/decisioning/specialisms/lists.mjs +0 -6
  369. package/dist/lib/server/decisioning/specialisms/sales.mjs +0 -6
  370. package/dist/lib/server/decisioning/specialisms/signals.mjs +0 -6
  371. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.mjs +0 -6
  372. package/dist/lib/server/decisioning/start-time.mjs +0 -6
  373. package/dist/lib/server/decisioning/start-time.mjs.map +1 -1
  374. package/dist/lib/server/decisioning/status-changes.mjs +0 -6
  375. package/dist/lib/server/decisioning/status-changes.mjs.map +1 -1
  376. package/dist/lib/server/decisioning/status-mappers.mjs +0 -6
  377. package/dist/lib/server/decisioning/status-mappers.mjs.map +1 -1
  378. package/dist/lib/server/decisioning/tenant-registry.mjs +0 -6
  379. package/dist/lib/server/decisioning/tenant-registry.mjs.map +1 -1
  380. package/dist/lib/server/decisioning/tenant-store.mjs +0 -6
  381. package/dist/lib/server/decisioning/tenant-store.mjs.map +1 -1
  382. package/dist/lib/server/decisioning/validate-specialisms.mjs +0 -6
  383. package/dist/lib/server/decisioning/validate-specialisms.mjs.map +1 -1
  384. package/dist/lib/server/dynamic-registry.mjs +0 -6
  385. package/dist/lib/server/dynamic-registry.mjs.map +1 -1
  386. package/dist/lib/server/envelope-allowlist.mjs +0 -6
  387. package/dist/lib/server/envelope-allowlist.mjs.map +1 -1
  388. package/dist/lib/server/error-arm-tools.mjs +5 -6
  389. package/dist/lib/server/error-arm-tools.mjs.map +1 -1
  390. package/dist/lib/server/errors.mjs +0 -6
  391. package/dist/lib/server/errors.mjs.map +1 -1
  392. package/dist/lib/server/example-tld-guard.mjs +0 -6
  393. package/dist/lib/server/example-tld-guard.mjs.map +1 -1
  394. package/dist/lib/server/express-adapter.mjs +0 -6
  395. package/dist/lib/server/express-adapter.mjs.map +1 -1
  396. package/dist/lib/server/governance.mjs +0 -6
  397. package/dist/lib/server/governance.mjs.map +1 -1
  398. package/dist/lib/server/idempotency/backends/lazy.mjs +0 -6
  399. package/dist/lib/server/idempotency/backends/lazy.mjs.map +1 -1
  400. package/dist/lib/server/idempotency/backends/memory.mjs +0 -6
  401. package/dist/lib/server/idempotency/backends/memory.mjs.map +1 -1
  402. package/dist/lib/server/idempotency/backends/pg.mjs +0 -6
  403. package/dist/lib/server/idempotency/backends/pg.mjs.map +1 -1
  404. package/dist/lib/server/idempotency/backends/redis.mjs +0 -6
  405. package/dist/lib/server/idempotency/backends/redis.mjs.map +1 -1
  406. package/dist/lib/server/idempotency/index.mjs +0 -6
  407. package/dist/lib/server/idempotency/index.mjs.map +1 -1
  408. package/dist/lib/server/idempotency/store.mjs +0 -6
  409. package/dist/lib/server/idempotency/store.mjs.map +1 -1
  410. package/dist/lib/server/index.d.mts +1 -1
  411. package/dist/lib/server/index.d.ts +1 -1
  412. package/dist/lib/server/index.d.ts.map +1 -1
  413. package/dist/lib/server/index.js.map +1 -1
  414. package/dist/lib/server/index.mjs +0 -6
  415. package/dist/lib/server/index.mjs.map +1 -1
  416. package/dist/lib/server/legacy/v5/index.d.mts +1 -1
  417. package/dist/lib/server/legacy/v5/index.d.ts +1 -1
  418. package/dist/lib/server/legacy/v5/index.d.ts.map +1 -1
  419. package/dist/lib/server/legacy/v5/index.js.map +1 -1
  420. package/dist/lib/server/legacy/v5/index.mjs +0 -6
  421. package/dist/lib/server/legacy/v5/index.mjs.map +1 -1
  422. package/dist/lib/server/mcp-modern-server.mjs +0 -6
  423. package/dist/lib/server/mcp-modern-server.mjs.map +1 -1
  424. package/dist/lib/server/media-buy-actions.mjs +0 -6
  425. package/dist/lib/server/media-buy-actions.mjs.map +1 -1
  426. package/dist/lib/server/media-buy-helpers.mjs +0 -6
  427. package/dist/lib/server/media-buy-helpers.mjs.map +1 -1
  428. package/dist/lib/server/media-buy-store.mjs +0 -6
  429. package/dist/lib/server/media-buy-store.mjs.map +1 -1
  430. package/dist/lib/server/normalize-errors.mjs +0 -6
  431. package/dist/lib/server/normalize-errors.mjs.map +1 -1
  432. package/dist/lib/server/operational-platform.mjs +0 -6
  433. package/dist/lib/server/operational-platform.mjs.map +1 -1
  434. package/dist/lib/server/pick-safe-details.mjs +0 -6
  435. package/dist/lib/server/pick-safe-details.mjs.map +1 -1
  436. package/dist/lib/server/pin-and-bind-fetch.mjs +0 -6
  437. package/dist/lib/server/pin-and-bind-fetch.mjs.map +1 -1
  438. package/dist/lib/server/postgres-state-store.mjs +0 -6
  439. package/dist/lib/server/postgres-state-store.mjs.map +1 -1
  440. package/dist/lib/server/postgres-task-store.mjs +0 -6
  441. package/dist/lib/server/postgres-task-store.mjs.map +1 -1
  442. package/dist/lib/server/product-defaults.mjs +0 -6
  443. package/dist/lib/server/product-defaults.mjs.map +1 -1
  444. package/dist/lib/server/redact.mjs +0 -6
  445. package/dist/lib/server/redact.mjs.map +1 -1
  446. package/dist/lib/server/responses.mjs +0 -6
  447. package/dist/lib/server/responses.mjs.map +1 -1
  448. package/dist/lib/server/serve.mjs +0 -6
  449. package/dist/lib/server/serve.mjs.map +1 -1
  450. package/dist/lib/server/socket-mode/conformance-client.mjs +0 -6
  451. package/dist/lib/server/socket-mode/conformance-client.mjs.map +1 -1
  452. package/dist/lib/server/socket-mode/index.mjs +0 -6
  453. package/dist/lib/server/socket-mode/index.mjs.map +1 -1
  454. package/dist/lib/server/socket-mode/ws-transport.mjs +0 -6
  455. package/dist/lib/server/socket-mode/ws-transport.mjs.map +1 -1
  456. package/dist/lib/server/state-machine.mjs +0 -6
  457. package/dist/lib/server/state-machine.mjs.map +1 -1
  458. package/dist/lib/server/state-store.mjs +0 -6
  459. package/dist/lib/server/state-store.mjs.map +1 -1
  460. package/dist/lib/server/structured-serialize.mjs +0 -6
  461. package/dist/lib/server/structured-serialize.mjs.map +1 -1
  462. package/dist/lib/server/targeting-helpers.mjs +0 -6
  463. package/dist/lib/server/targeting-helpers.mjs.map +1 -1
  464. package/dist/lib/server/tasks.mjs +0 -6
  465. package/dist/lib/server/tasks.mjs.map +1 -1
  466. package/dist/lib/server/test-controller-bridge.mjs +0 -6
  467. package/dist/lib/server/test-controller-bridge.mjs.map +1 -1
  468. package/dist/lib/server/test-controller.mjs +0 -6
  469. package/dist/lib/server/test-controller.mjs.map +1 -1
  470. package/dist/lib/server/upstream-helpers.mjs +0 -6
  471. package/dist/lib/server/upstream-helpers.mjs.map +1 -1
  472. package/dist/lib/server/webhook-emitter.mjs +0 -6
  473. package/dist/lib/server/webhook-emitter.mjs.map +1 -1
  474. package/dist/lib/server/wire-safe.mjs +0 -6
  475. package/dist/lib/server/wire-safe.mjs.map +1 -1
  476. package/dist/lib/server/wire-spec-fields.generated.mjs +0 -6
  477. package/dist/lib/server/wire-spec-fields.generated.mjs.map +1 -1
  478. package/dist/lib/server/wrap-envelope.mjs +0 -6
  479. package/dist/lib/server/wrap-envelope.mjs.map +1 -1
  480. package/dist/lib/signing/agent-context.mjs +0 -6
  481. package/dist/lib/signing/agent-context.mjs.map +1 -1
  482. package/dist/lib/signing/agent-fetch.mjs +0 -6
  483. package/dist/lib/signing/agent-fetch.mjs.map +1 -1
  484. package/dist/lib/signing/agent-resolver/canonicalize.mjs +0 -6
  485. package/dist/lib/signing/agent-resolver/canonicalize.mjs.map +1 -1
  486. package/dist/lib/signing/agent-resolver/capabilities-types.mjs +0 -6
  487. package/dist/lib/signing/agent-resolver/capabilities-types.mjs.map +1 -1
  488. package/dist/lib/signing/agent-resolver/consistency.mjs +0 -6
  489. package/dist/lib/signing/agent-resolver/consistency.mjs.map +1 -1
  490. package/dist/lib/signing/agent-resolver/errors.mjs +0 -6
  491. package/dist/lib/signing/agent-resolver/errors.mjs.map +1 -1
  492. package/dist/lib/signing/agent-resolver/etld.mjs +0 -6
  493. package/dist/lib/signing/agent-resolver/etld.mjs.map +1 -1
  494. package/dist/lib/signing/agent-resolver/fetch-helpers.mjs +0 -6
  495. package/dist/lib/signing/agent-resolver/fetch-helpers.mjs.map +1 -1
  496. package/dist/lib/signing/agent-resolver/index.mjs +0 -6
  497. package/dist/lib/signing/agent-resolver/index.mjs.map +1 -1
  498. package/dist/lib/signing/agent-resolver/jwks-set.mjs +0 -6
  499. package/dist/lib/signing/agent-resolver/jwks-set.mjs.map +1 -1
  500. package/dist/lib/signing/agent-resolver/resolve-agent.mjs +0 -6
  501. package/dist/lib/signing/agent-resolver/resolve-agent.mjs.map +1 -1
  502. package/dist/lib/signing/agent-resolver/select-agent.mjs +0 -6
  503. package/dist/lib/signing/agent-resolver/select-agent.mjs.map +1 -1
  504. package/dist/lib/signing/agent-resolver/strict-json.mjs +0 -6
  505. package/dist/lib/signing/agent-resolver/strict-json.mjs.map +1 -1
  506. package/dist/lib/signing/brand-jwks.mjs +0 -6
  507. package/dist/lib/signing/brand-jwks.mjs.map +1 -1
  508. package/dist/lib/signing/canonicalize.mjs +0 -6
  509. package/dist/lib/signing/canonicalize.mjs.map +1 -1
  510. package/dist/lib/signing/capability-cache.mjs +0 -6
  511. package/dist/lib/signing/capability-cache.mjs.map +1 -1
  512. package/dist/lib/signing/capability-priming.mjs +0 -6
  513. package/dist/lib/signing/capability-priming.mjs.map +1 -1
  514. package/dist/lib/signing/client.mjs +0 -6
  515. package/dist/lib/signing/client.mjs.map +1 -1
  516. package/dist/lib/signing/content-digest.mjs +0 -6
  517. package/dist/lib/signing/content-digest.mjs.map +1 -1
  518. package/dist/lib/signing/crypto.mjs +0 -6
  519. package/dist/lib/signing/crypto.mjs.map +1 -1
  520. package/dist/lib/signing/ecdsa-encoding.mjs +0 -6
  521. package/dist/lib/signing/ecdsa-encoding.mjs.map +1 -1
  522. package/dist/lib/signing/errors.mjs +0 -6
  523. package/dist/lib/signing/errors.mjs.map +1 -1
  524. package/dist/lib/signing/fetch-async.mjs +0 -6
  525. package/dist/lib/signing/fetch-async.mjs.map +1 -1
  526. package/dist/lib/signing/fetch.mjs +0 -6
  527. package/dist/lib/signing/fetch.mjs.map +1 -1
  528. package/dist/lib/signing/index.mjs +0 -6
  529. package/dist/lib/signing/index.mjs.map +1 -1
  530. package/dist/lib/signing/jwks-helpers.mjs +0 -6
  531. package/dist/lib/signing/jwks-helpers.mjs.map +1 -1
  532. package/dist/lib/signing/jwks-https.mjs +0 -6
  533. package/dist/lib/signing/jwks-https.mjs.map +1 -1
  534. package/dist/lib/signing/jwks.mjs +0 -6
  535. package/dist/lib/signing/jwks.mjs.map +1 -1
  536. package/dist/lib/signing/middleware.mjs +0 -6
  537. package/dist/lib/signing/middleware.mjs.map +1 -1
  538. package/dist/lib/signing/parser.mjs +0 -6
  539. package/dist/lib/signing/parser.mjs.map +1 -1
  540. package/dist/lib/signing/postgres-replay-store.mjs +0 -6
  541. package/dist/lib/signing/postgres-replay-store.mjs.map +1 -1
  542. package/dist/lib/signing/protocol-response.mjs +0 -6
  543. package/dist/lib/signing/protocol-response.mjs.map +1 -1
  544. package/dist/lib/signing/provider.mjs +0 -6
  545. package/dist/lib/signing/redis-replay-store.mjs +0 -6
  546. package/dist/lib/signing/redis-replay-store.mjs.map +1 -1
  547. package/dist/lib/signing/replay.mjs +0 -6
  548. package/dist/lib/signing/replay.mjs.map +1 -1
  549. package/dist/lib/signing/request-context.mjs +0 -6
  550. package/dist/lib/signing/request-context.mjs.map +1 -1
  551. package/dist/lib/signing/revocation-https.mjs +0 -6
  552. package/dist/lib/signing/revocation-https.mjs.map +1 -1
  553. package/dist/lib/signing/revocation.mjs +0 -6
  554. package/dist/lib/signing/revocation.mjs.map +1 -1
  555. package/dist/lib/signing/server.mjs +0 -6
  556. package/dist/lib/signing/server.mjs.map +1 -1
  557. package/dist/lib/signing/signer-async.mjs +0 -6
  558. package/dist/lib/signing/signer-async.mjs.map +1 -1
  559. package/dist/lib/signing/signer.mjs +0 -6
  560. package/dist/lib/signing/signer.mjs.map +1 -1
  561. package/dist/lib/signing/testing.mjs +0 -6
  562. package/dist/lib/signing/testing.mjs.map +1 -1
  563. package/dist/lib/signing/types.mjs +0 -6
  564. package/dist/lib/signing/types.mjs.map +1 -1
  565. package/dist/lib/signing/verifier.mjs +0 -6
  566. package/dist/lib/signing/verifier.mjs.map +1 -1
  567. package/dist/lib/signing/webhook-auth-detection.mjs +0 -6
  568. package/dist/lib/signing/webhook-auth-detection.mjs.map +1 -1
  569. package/dist/lib/signing/webhook-verifier.mjs +0 -6
  570. package/dist/lib/signing/webhook-verifier.mjs.map +1 -1
  571. package/dist/lib/storage/MemoryStorage.mjs +0 -6
  572. package/dist/lib/storage/MemoryStorage.mjs.map +1 -1
  573. package/dist/lib/storage/interfaces.mjs +0 -6
  574. package/dist/lib/substitution/encoder/SubstitutionEncoder.mjs +0 -6
  575. package/dist/lib/substitution/encoder/SubstitutionEncoder.mjs.map +1 -1
  576. package/dist/lib/substitution/encoder/index.mjs +0 -6
  577. package/dist/lib/substitution/encoder/index.mjs.map +1 -1
  578. package/dist/lib/substitution/index.mjs +0 -6
  579. package/dist/lib/substitution/index.mjs.map +1 -1
  580. package/dist/lib/substitution/observer/SubstitutionObserver.mjs +0 -6
  581. package/dist/lib/substitution/observer/SubstitutionObserver.mjs.map +1 -1
  582. package/dist/lib/substitution/observer/alignment.mjs +0 -6
  583. package/dist/lib/substitution/observer/alignment.mjs.map +1 -1
  584. package/dist/lib/substitution/observer/assertions.mjs +0 -6
  585. package/dist/lib/substitution/observer/assertions.mjs.map +1 -1
  586. package/dist/lib/substitution/observer/html-parser.mjs +0 -6
  587. package/dist/lib/substitution/observer/html-parser.mjs.map +1 -1
  588. package/dist/lib/substitution/observer/index.mjs +0 -6
  589. package/dist/lib/substitution/observer/index.mjs.map +1 -1
  590. package/dist/lib/substitution/observer/ssrf.mjs +0 -6
  591. package/dist/lib/substitution/observer/ssrf.mjs.map +1 -1
  592. package/dist/lib/substitution/rfc3986.mjs +0 -6
  593. package/dist/lib/substitution/rfc3986.mjs.map +1 -1
  594. package/dist/lib/substitution/translate.mjs +0 -6
  595. package/dist/lib/substitution/translate.mjs.map +1 -1
  596. package/dist/lib/substitution/types.mjs +0 -6
  597. package/dist/lib/substitution/vectors.mjs +0 -6
  598. package/dist/lib/substitution/vectors.mjs.map +1 -1
  599. package/dist/lib/testing/agent-tester.mjs +0 -6
  600. package/dist/lib/testing/agent-tester.mjs.map +1 -1
  601. package/dist/lib/testing/client.mjs +0 -6
  602. package/dist/lib/testing/client.mjs.map +1 -1
  603. package/dist/lib/testing/compliance/briefs.mjs +0 -6
  604. package/dist/lib/testing/compliance/briefs.mjs.map +1 -1
  605. package/dist/lib/testing/compliance/comply.mjs +0 -6
  606. package/dist/lib/testing/compliance/comply.mjs.map +1 -1
  607. package/dist/lib/testing/compliance/index.mjs +0 -6
  608. package/dist/lib/testing/compliance/index.mjs.map +1 -1
  609. package/dist/lib/testing/compliance/spec-conformance.mjs +0 -6
  610. package/dist/lib/testing/compliance/spec-conformance.mjs.map +1 -1
  611. package/dist/lib/testing/compliance/storyboard-tracks.mjs +0 -6
  612. package/dist/lib/testing/compliance/storyboard-tracks.mjs.map +1 -1
  613. package/dist/lib/testing/compliance/summary.mjs +0 -6
  614. package/dist/lib/testing/compliance/summary.mjs.map +1 -1
  615. package/dist/lib/testing/compliance/types.mjs +0 -6
  616. package/dist/lib/testing/comply-controller.mjs +0 -6
  617. package/dist/lib/testing/comply-controller.mjs.map +1 -1
  618. package/dist/lib/testing/controller-assertions.mjs +0 -6
  619. package/dist/lib/testing/controller-assertions.mjs.map +1 -1
  620. package/dist/lib/testing/formatter.mjs +0 -6
  621. package/dist/lib/testing/formatter.mjs.map +1 -1
  622. package/dist/lib/testing/index.mjs +0 -6
  623. package/dist/lib/testing/index.mjs.map +1 -1
  624. package/dist/lib/testing/local-agent-runner.mjs +0 -6
  625. package/dist/lib/testing/local-agent-runner.mjs.map +1 -1
  626. package/dist/lib/testing/orchestrator.mjs +0 -6
  627. package/dist/lib/testing/orchestrator.mjs.map +1 -1
  628. package/dist/lib/testing/personas/index.mjs +0 -6
  629. package/dist/lib/testing/personas/index.mjs.map +1 -1
  630. package/dist/lib/testing/scenarios/brand-rights.mjs +0 -6
  631. package/dist/lib/testing/scenarios/brand-rights.mjs.map +1 -1
  632. package/dist/lib/testing/scenarios/capabilities.mjs +0 -6
  633. package/dist/lib/testing/scenarios/capabilities.mjs.map +1 -1
  634. package/dist/lib/testing/scenarios/creative.mjs +0 -6
  635. package/dist/lib/testing/scenarios/creative.mjs.map +1 -1
  636. package/dist/lib/testing/scenarios/deterministic.mjs +0 -6
  637. package/dist/lib/testing/scenarios/deterministic.mjs.map +1 -1
  638. package/dist/lib/testing/scenarios/discovery.mjs +0 -6
  639. package/dist/lib/testing/scenarios/discovery.mjs.map +1 -1
  640. package/dist/lib/testing/scenarios/edge-cases.mjs +0 -6
  641. package/dist/lib/testing/scenarios/edge-cases.mjs.map +1 -1
  642. package/dist/lib/testing/scenarios/error-compliance.mjs +0 -6
  643. package/dist/lib/testing/scenarios/error-compliance.mjs.map +1 -1
  644. package/dist/lib/testing/scenarios/governance.mjs +0 -6
  645. package/dist/lib/testing/scenarios/governance.mjs.map +1 -1
  646. package/dist/lib/testing/scenarios/health.mjs +0 -6
  647. package/dist/lib/testing/scenarios/health.mjs.map +1 -1
  648. package/dist/lib/testing/scenarios/index.mjs +0 -6
  649. package/dist/lib/testing/scenarios/index.mjs.map +1 -1
  650. package/dist/lib/testing/scenarios/media-buy.mjs +0 -6
  651. package/dist/lib/testing/scenarios/media-buy.mjs.map +1 -1
  652. package/dist/lib/testing/scenarios/schema-compliance.mjs +0 -6
  653. package/dist/lib/testing/scenarios/schema-compliance.mjs.map +1 -1
  654. package/dist/lib/testing/scenarios/signals.mjs +0 -6
  655. package/dist/lib/testing/scenarios/signals.mjs.map +1 -1
  656. package/dist/lib/testing/scenarios/sponsored-intelligence.mjs +0 -6
  657. package/dist/lib/testing/scenarios/sponsored-intelligence.mjs.map +1 -1
  658. package/dist/lib/testing/scenarios/trusted-match.mjs +0 -6
  659. package/dist/lib/testing/scenarios/trusted-match.mjs.map +1 -1
  660. package/dist/lib/testing/seed-merge.mjs +0 -6
  661. package/dist/lib/testing/seed-merge.mjs.map +1 -1
  662. package/dist/lib/testing/storyboard/agent-routing.mjs +0 -6
  663. package/dist/lib/testing/storyboard/agent-routing.mjs.map +1 -1
  664. package/dist/lib/testing/storyboard/assertions.mjs +0 -6
  665. package/dist/lib/testing/storyboard/assertions.mjs.map +1 -1
  666. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs +0 -6
  667. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs.map +1 -1
  668. package/dist/lib/testing/storyboard/compliance.mjs +5 -6
  669. package/dist/lib/testing/storyboard/compliance.mjs.map +1 -1
  670. package/dist/lib/testing/storyboard/context.mjs +0 -6
  671. package/dist/lib/testing/storyboard/context.mjs.map +1 -1
  672. package/dist/lib/testing/storyboard/default-invariants.mjs +0 -6
  673. package/dist/lib/testing/storyboard/default-invariants.mjs.map +1 -1
  674. package/dist/lib/testing/storyboard/index.mjs +0 -6
  675. package/dist/lib/testing/storyboard/index.mjs.map +1 -1
  676. package/dist/lib/testing/storyboard/junit.mjs +0 -6
  677. package/dist/lib/testing/storyboard/junit.mjs.map +1 -1
  678. package/dist/lib/testing/storyboard/loader.mjs +0 -6
  679. package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
  680. package/dist/lib/testing/storyboard/parallel-dispatch.mjs +0 -6
  681. package/dist/lib/testing/storyboard/parallel-dispatch.mjs.map +1 -1
  682. package/dist/lib/testing/storyboard/path.mjs +0 -6
  683. package/dist/lib/testing/storyboard/path.mjs.map +1 -1
  684. package/dist/lib/testing/storyboard/probes.mjs +0 -6
  685. package/dist/lib/testing/storyboard/probes.mjs.map +1 -1
  686. package/dist/lib/testing/storyboard/rate-limit-trip.mjs +0 -6
  687. package/dist/lib/testing/storyboard/rate-limit-trip.mjs.map +1 -1
  688. package/dist/lib/testing/storyboard/rejection-hints.mjs +0 -6
  689. package/dist/lib/testing/storyboard/rejection-hints.mjs.map +1 -1
  690. package/dist/lib/testing/storyboard/request-builder.mjs +0 -6
  691. package/dist/lib/testing/storyboard/request-builder.mjs.map +1 -1
  692. package/dist/lib/testing/storyboard/request-signing/builder.mjs +0 -6
  693. package/dist/lib/testing/storyboard/request-signing/builder.mjs.map +1 -1
  694. package/dist/lib/testing/storyboard/request-signing/grader.mjs +0 -6
  695. package/dist/lib/testing/storyboard/request-signing/grader.mjs.map +1 -1
  696. package/dist/lib/testing/storyboard/request-signing/index.mjs +0 -6
  697. package/dist/lib/testing/storyboard/request-signing/index.mjs.map +1 -1
  698. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs +0 -6
  699. package/dist/lib/testing/storyboard/request-signing/probe-dispatch.mjs.map +1 -1
  700. package/dist/lib/testing/storyboard/request-signing/probe.mjs +0 -6
  701. package/dist/lib/testing/storyboard/request-signing/probe.mjs.map +1 -1
  702. package/dist/lib/testing/storyboard/request-signing/synthesize.mjs +0 -6
  703. package/dist/lib/testing/storyboard/request-signing/synthesize.mjs.map +1 -1
  704. package/dist/lib/testing/storyboard/request-signing/test-kit.mjs +0 -6
  705. package/dist/lib/testing/storyboard/request-signing/test-kit.mjs.map +1 -1
  706. package/dist/lib/testing/storyboard/request-signing/types.mjs +0 -6
  707. package/dist/lib/testing/storyboard/request-signing/types.mjs.map +1 -1
  708. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +0 -6
  709. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs.map +1 -1
  710. package/dist/lib/testing/storyboard/runner.mjs +0 -6
  711. package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
  712. package/dist/lib/testing/storyboard/sandbox-entities.mjs +0 -6
  713. package/dist/lib/testing/storyboard/sandbox-entities.mjs.map +1 -1
  714. package/dist/lib/testing/storyboard/seeding.mjs +0 -6
  715. package/dist/lib/testing/storyboard/seeding.mjs.map +1 -1
  716. package/dist/lib/testing/storyboard/shape-drift-hints.mjs +0 -6
  717. package/dist/lib/testing/storyboard/shape-drift-hints.mjs.map +1 -1
  718. package/dist/lib/testing/storyboard/signer-grader/grader.mjs +0 -6
  719. package/dist/lib/testing/storyboard/signer-grader/grader.mjs.map +1 -1
  720. package/dist/lib/testing/storyboard/signer-grader/index.mjs +0 -6
  721. package/dist/lib/testing/storyboard/signer-grader/index.mjs.map +1 -1
  722. package/dist/lib/testing/storyboard/signer-grader/types.mjs +0 -6
  723. package/dist/lib/testing/storyboard/strict-validation-hints.mjs +0 -6
  724. package/dist/lib/testing/storyboard/strict-validation-hints.mjs.map +1 -1
  725. package/dist/lib/testing/storyboard/task-map.mjs +0 -6
  726. package/dist/lib/testing/storyboard/task-map.mjs.map +1 -1
  727. package/dist/lib/testing/storyboard/test-kit.mjs +0 -6
  728. package/dist/lib/testing/storyboard/test-kit.mjs.map +1 -1
  729. package/dist/lib/testing/storyboard/types.mjs +0 -6
  730. package/dist/lib/testing/storyboard/types.mjs.map +1 -1
  731. package/dist/lib/testing/storyboard/validations.mjs +0 -6
  732. package/dist/lib/testing/storyboard/validations.mjs.map +1 -1
  733. package/dist/lib/testing/storyboard/webhook-assertions.mjs +0 -6
  734. package/dist/lib/testing/storyboard/webhook-assertions.mjs.map +1 -1
  735. package/dist/lib/testing/storyboard/webhook-receiver.mjs +0 -6
  736. package/dist/lib/testing/storyboard/webhook-receiver.mjs.map +1 -1
  737. package/dist/lib/testing/stubs/governance-agent-stub.mjs +0 -6
  738. package/dist/lib/testing/stubs/governance-agent-stub.mjs.map +1 -1
  739. package/dist/lib/testing/stubs/index.mjs +0 -6
  740. package/dist/lib/testing/stubs/index.mjs.map +1 -1
  741. package/dist/lib/testing/test-controller.mjs +0 -6
  742. package/dist/lib/testing/test-controller.mjs.map +1 -1
  743. package/dist/lib/testing/test-helpers.mjs +0 -6
  744. package/dist/lib/testing/test-helpers.mjs.map +1 -1
  745. package/dist/lib/testing/types.mjs +0 -6
  746. package/dist/lib/types/adcp.mjs +0 -6
  747. package/dist/lib/types/adcp.mjs.map +1 -1
  748. package/dist/lib/types/asset-instances.mjs +0 -6
  749. package/dist/lib/types/compat.mjs +0 -6
  750. package/dist/lib/types/compat.mjs.map +1 -1
  751. package/dist/lib/types/core.generated.mjs +0 -6
  752. package/dist/lib/types/enums.generated.mjs +0 -6
  753. package/dist/lib/types/enums.generated.mjs.map +1 -1
  754. package/dist/lib/types/error-codes.mjs +0 -6
  755. package/dist/lib/types/error-codes.mjs.map +1 -1
  756. package/dist/lib/types/error-details.aliases.mjs +0 -6
  757. package/dist/lib/types/error-details.aliases.mjs.map +1 -1
  758. package/dist/lib/types/format-asset-slots.mjs +0 -6
  759. package/dist/lib/types/forward-compat-error-codes.mjs +0 -6
  760. package/dist/lib/types/forward-compat-error-codes.mjs.map +1 -1
  761. package/dist/lib/types/index.mjs +0 -6
  762. package/dist/lib/types/index.mjs.map +1 -1
  763. package/dist/lib/types/inline-enums.aliases.mjs +0 -6
  764. package/dist/lib/types/inline-enums.aliases.mjs.map +1 -1
  765. package/dist/lib/types/inline-enums.generated.mjs +0 -6
  766. package/dist/lib/types/inline-enums.generated.mjs.map +1 -1
  767. package/dist/lib/types/manifest.generated.mjs +0 -6
  768. package/dist/lib/types/manifest.generated.mjs.map +1 -1
  769. package/dist/lib/types/schemas.generated.mjs +0 -6
  770. package/dist/lib/types/schemas.generated.mjs.map +1 -1
  771. package/dist/lib/types/server-payload-aliases.mjs +0 -6
  772. package/dist/lib/types/server-payload.mjs +0 -6
  773. package/dist/lib/types/sync-rows.mjs +0 -6
  774. package/dist/lib/types/tools.generated.mjs +0 -6
  775. package/dist/lib/types/v2-5/index.mjs +0 -6
  776. package/dist/lib/types/v2-5/index.mjs.map +1 -1
  777. package/dist/lib/types/v2-5/tools.generated.mjs +0 -6
  778. package/dist/lib/types/v3-1-beta/index.mjs +0 -6
  779. package/dist/lib/types/v3-1-beta/index.mjs.map +1 -1
  780. package/dist/lib/types/v3-1-beta/tools.generated.mjs +0 -6
  781. package/dist/lib/types/wellknown-schemas.generated.mjs +0 -6
  782. package/dist/lib/types/wellknown-schemas.generated.mjs.map +1 -1
  783. package/dist/lib/upstream-recorder/constants.mjs +0 -6
  784. package/dist/lib/upstream-recorder/constants.mjs.map +1 -1
  785. package/dist/lib/upstream-recorder/index.mjs +0 -6
  786. package/dist/lib/upstream-recorder/index.mjs.map +1 -1
  787. package/dist/lib/upstream-recorder/recorder.mjs +0 -6
  788. package/dist/lib/upstream-recorder/recorder.mjs.map +1 -1
  789. package/dist/lib/upstream-recorder/types.mjs +0 -6
  790. package/dist/lib/upstream-recorder/types.mjs.map +1 -1
  791. package/dist/lib/utils/a2a-artifacts.mjs +0 -6
  792. package/dist/lib/utils/a2a-artifacts.mjs.map +1 -1
  793. package/dist/lib/utils/a2a-discovery.mjs +0 -6
  794. package/dist/lib/utils/a2a-discovery.mjs.map +1 -1
  795. package/dist/lib/utils/activation-key-builders.mjs +0 -6
  796. package/dist/lib/utils/activation-key-builders.mjs.map +1 -1
  797. package/dist/lib/utils/adcp-version-config.mjs +0 -6
  798. package/dist/lib/utils/adcp-version-config.mjs.map +1 -1
  799. package/dist/lib/utils/asset-builders.mjs +0 -6
  800. package/dist/lib/utils/asset-builders.mjs.map +1 -1
  801. package/dist/lib/utils/build-creative-return-builders.mjs +0 -6
  802. package/dist/lib/utils/build-creative-return-builders.mjs.map +1 -1
  803. package/dist/lib/utils/buyer-retry-policy.mjs +0 -6
  804. package/dist/lib/utils/buyer-retry-policy.mjs.map +1 -1
  805. package/dist/lib/utils/capabilities.mjs +0 -6
  806. package/dist/lib/utils/capabilities.mjs.map +1 -1
  807. package/dist/lib/utils/capability-rollups.mjs +0 -6
  808. package/dist/lib/utils/capability-rollups.mjs.map +1 -1
  809. package/dist/lib/utils/creative-adapter.mjs +0 -6
  810. package/dist/lib/utils/creative-adapter.mjs.map +1 -1
  811. package/dist/lib/utils/creative-delivery.mjs +0 -6
  812. package/dist/lib/utils/creative-delivery.mjs.map +1 -1
  813. package/dist/lib/utils/deprecation.mjs +0 -6
  814. package/dist/lib/utils/deprecation.mjs.map +1 -1
  815. package/dist/lib/utils/envelope-status-compat.mjs +0 -6
  816. package/dist/lib/utils/envelope-status-compat.mjs.map +1 -1
  817. package/dist/lib/utils/error-extraction.mjs +0 -6
  818. package/dist/lib/utils/error-extraction.mjs.map +1 -1
  819. package/dist/lib/utils/extract-result.mjs +0 -6
  820. package/dist/lib/utils/extract-result.mjs.map +1 -1
  821. package/dist/lib/utils/format-asset-slot-builders.mjs +0 -6
  822. package/dist/lib/utils/format-asset-slot-builders.mjs.map +1 -1
  823. package/dist/lib/utils/format-assets.mjs +0 -6
  824. package/dist/lib/utils/format-assets.mjs.map +1 -1
  825. package/dist/lib/utils/format-render-builders.mjs +0 -6
  826. package/dist/lib/utils/format-render-builders.mjs.map +1 -1
  827. package/dist/lib/utils/format-renders.mjs +0 -6
  828. package/dist/lib/utils/format-renders.mjs.map +1 -1
  829. package/dist/lib/utils/get-products-cache-scope.mjs +0 -6
  830. package/dist/lib/utils/get-products-cache-scope.mjs.map +1 -1
  831. package/dist/lib/utils/glob.mjs +0 -6
  832. package/dist/lib/utils/glob.mjs.map +1 -1
  833. package/dist/lib/utils/global-async-local-storage.mjs +0 -6
  834. package/dist/lib/utils/global-async-local-storage.mjs.map +1 -1
  835. package/dist/lib/utils/idempotency.mjs +0 -6
  836. package/dist/lib/utils/idempotency.mjs.map +1 -1
  837. package/dist/lib/utils/index.mjs +0 -6
  838. package/dist/lib/utils/index.mjs.map +1 -1
  839. package/dist/lib/utils/jcs.mjs +0 -6
  840. package/dist/lib/utils/jcs.mjs.map +1 -1
  841. package/dist/lib/utils/json-depth.mjs +0 -6
  842. package/dist/lib/utils/json-depth.mjs.map +1 -1
  843. package/dist/lib/utils/logger.mjs +0 -6
  844. package/dist/lib/utils/logger.mjs.map +1 -1
  845. package/dist/lib/utils/media-buy-delivery-notification-builders.mjs +0 -6
  846. package/dist/lib/utils/media-buy-delivery-notification-builders.mjs.map +1 -1
  847. package/dist/lib/utils/media-buy-status.mjs +0 -6
  848. package/dist/lib/utils/media-buy-status.mjs.map +1 -1
  849. package/dist/lib/utils/pagination.mjs +0 -6
  850. package/dist/lib/utils/pagination.mjs.map +1 -1
  851. package/dist/lib/utils/preview-creative-builders.mjs +0 -6
  852. package/dist/lib/utils/preview-creative-builders.mjs.map +1 -1
  853. package/dist/lib/utils/preview-normalizer.mjs +0 -6
  854. package/dist/lib/utils/preview-normalizer.mjs.map +1 -1
  855. package/dist/lib/utils/preview-utils.mjs +0 -6
  856. package/dist/lib/utils/preview-utils.mjs.map +1 -1
  857. package/dist/lib/utils/pricing-adapter.mjs +0 -6
  858. package/dist/lib/utils/pricing-adapter.mjs.map +1 -1
  859. package/dist/lib/utils/probe-policy.mjs +0 -6
  860. package/dist/lib/utils/probe-policy.mjs.map +1 -1
  861. package/dist/lib/utils/protocol-detection.mjs +0 -6
  862. package/dist/lib/utils/protocol-detection.mjs.map +1 -1
  863. package/dist/lib/utils/redact-secrets.mjs +0 -6
  864. package/dist/lib/utils/redact-secrets.mjs.map +1 -1
  865. package/dist/lib/utils/redis-default-prefix-warn.mjs +0 -6
  866. package/dist/lib/utils/redis-default-prefix-warn.mjs.map +1 -1
  867. package/dist/lib/utils/render-builders.mjs +0 -6
  868. package/dist/lib/utils/render-builders.mjs.map +1 -1
  869. package/dist/lib/utils/request-normalizer.mjs +0 -6
  870. package/dist/lib/utils/request-normalizer.mjs.map +1 -1
  871. package/dist/lib/utils/response-schemas.mjs +0 -6
  872. package/dist/lib/utils/response-schemas.mjs.map +1 -1
  873. package/dist/lib/utils/response-unwrapper.mjs +0 -6
  874. package/dist/lib/utils/response-unwrapper.mjs.map +1 -1
  875. package/dist/lib/utils/retry.mjs +0 -6
  876. package/dist/lib/utils/retry.mjs.map +1 -1
  877. package/dist/lib/utils/signal-discovery-helpers.mjs +0 -6
  878. package/dist/lib/utils/signal-discovery-helpers.mjs.map +1 -1
  879. package/dist/lib/utils/signal-id-builders.mjs +0 -6
  880. package/dist/lib/utils/signal-id-builders.mjs.map +1 -1
  881. package/dist/lib/utils/sync-creatives-adapter.mjs +0 -6
  882. package/dist/lib/utils/sync-creatives-adapter.mjs.map +1 -1
  883. package/dist/lib/utils/task-state.mjs +0 -6
  884. package/dist/lib/utils/task-state.mjs.map +1 -1
  885. package/dist/lib/utils/tool-request-schemas.mjs +0 -6
  886. package/dist/lib/utils/tool-request-schemas.mjs.map +1 -1
  887. package/dist/lib/utils/typeGuards.mjs +0 -6
  888. package/dist/lib/utils/typeGuards.mjs.map +1 -1
  889. package/dist/lib/utils/union-errors.mjs +0 -6
  890. package/dist/lib/utils/union-errors.mjs.map +1 -1
  891. package/dist/lib/utils/validate-user-agent.mjs +0 -6
  892. package/dist/lib/utils/validate-user-agent.mjs.map +1 -1
  893. package/dist/lib/v2/format-schema/fetch.mjs +0 -6
  894. package/dist/lib/v2/format-schema/fetch.mjs.map +1 -1
  895. package/dist/lib/v2/format-schema/index.mjs +0 -6
  896. package/dist/lib/v2/format-schema/index.mjs.map +1 -1
  897. package/dist/lib/v2/format-schema/regex-safety.mjs +0 -6
  898. package/dist/lib/v2/format-schema/regex-safety.mjs.map +1 -1
  899. package/dist/lib/v2/format-schema/resolver.mjs +7 -8
  900. package/dist/lib/v2/format-schema/resolver.mjs.map +1 -1
  901. package/dist/lib/v2/format-schema/sandbox-refs.mjs +0 -6
  902. package/dist/lib/v2/format-schema/sandbox-refs.mjs.map +1 -1
  903. package/dist/lib/v2/projection/augment-response.mjs +0 -6
  904. package/dist/lib/v2/projection/augment-response.mjs.map +1 -1
  905. package/dist/lib/v2/projection/builders.mjs +0 -6
  906. package/dist/lib/v2/projection/builders.mjs.map +1 -1
  907. package/dist/lib/v2/projection/cache-versions.mjs +0 -6
  908. package/dist/lib/v2/projection/cache-versions.mjs.map +1 -1
  909. package/dist/lib/v2/projection/canonical-properties.mjs +5 -6
  910. package/dist/lib/v2/projection/canonical-properties.mjs.map +1 -1
  911. package/dist/lib/v2/projection/catalog.mjs +5 -6
  912. package/dist/lib/v2/projection/catalog.mjs.map +1 -1
  913. package/dist/lib/v2/projection/constants.mjs +0 -6
  914. package/dist/lib/v2/projection/constants.mjs.map +1 -1
  915. package/dist/lib/v2/projection/index.mjs +0 -6
  916. package/dist/lib/v2/projection/index.mjs.map +1 -1
  917. package/dist/lib/v2/projection/registry.mjs +5 -6
  918. package/dist/lib/v2/projection/registry.mjs.map +1 -1
  919. package/dist/lib/v2/projection/types.mjs +0 -6
  920. package/dist/lib/v2/projection/v1-to-v2.mjs +0 -6
  921. package/dist/lib/v2/projection/v1-to-v2.mjs.map +1 -1
  922. package/dist/lib/v2/projection/v2-to-v1.mjs +0 -6
  923. package/dist/lib/v2/projection/v2-to-v1.mjs.map +1 -1
  924. package/dist/lib/v2/projection/write-side.mjs +0 -6
  925. package/dist/lib/v2/projection/write-side.mjs.map +1 -1
  926. package/dist/lib/v2/publisher-catalog/formats.mjs +0 -6
  927. package/dist/lib/v2/publisher-catalog/formats.mjs.map +1 -1
  928. package/dist/lib/v2/publisher-catalog/index.mjs +0 -6
  929. package/dist/lib/v2/publisher-catalog/index.mjs.map +1 -1
  930. package/dist/lib/validation/client-hooks.mjs +0 -6
  931. package/dist/lib/validation/client-hooks.mjs.map +1 -1
  932. package/dist/lib/validation/hints.mjs +0 -6
  933. package/dist/lib/validation/hints.mjs.map +1 -1
  934. package/dist/lib/validation/index.mjs +0 -6
  935. package/dist/lib/validation/index.mjs.map +1 -1
  936. package/dist/lib/validation/schema-errors.mjs +0 -6
  937. package/dist/lib/validation/schema-errors.mjs.map +1 -1
  938. package/dist/lib/validation/schema-loader.mjs +5 -6
  939. package/dist/lib/validation/schema-loader.mjs.map +1 -1
  940. package/dist/lib/validation/schema-validator.mjs +0 -6
  941. package/dist/lib/validation/schema-validator.mjs.map +1 -1
  942. package/dist/lib/validation/sync-creatives.mjs +0 -6
  943. package/dist/lib/validation/sync-creatives.mjs.map +1 -1
  944. package/dist/lib/version.d.mts +3 -3
  945. package/dist/lib/version.d.ts +3 -3
  946. package/dist/lib/version.js +3 -3
  947. package/dist/lib/version.js.map +1 -1
  948. package/dist/lib/version.mjs +3 -9
  949. package/dist/lib/version.mjs.map +1 -1
  950. package/dist/lib/webhooks/index.mjs +0 -6
  951. package/dist/lib/webhooks/index.mjs.map +1 -1
  952. package/dist/lib/wholesale-feed-sync/index.mjs +0 -6
  953. package/dist/lib/wholesale-feed-sync/index.mjs.map +1 -1
  954. package/dist/lib/wholesale-feed-sync/sync.mjs +0 -6
  955. package/dist/lib/wholesale-feed-sync/sync.mjs.map +1 -1
  956. package/dist/lib/wholesale-feed-sync/types.mjs +0 -6
  957. package/dist/lib/wholesale-feed-sync/webhook-notification.mjs +0 -6
  958. package/dist/lib/wholesale-feed-sync/webhook-notification.mjs.map +1 -1
  959. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/response-unwrapper.ts"],"sourcesContent":["/**\n * Response Unwrapper\n *\n * Extracts raw AdCP responses from protocol wrappers (MCP/A2A).\n * Follows canonical A2A response format per AdCP specification.\n */\n\nimport { z } from 'zod';\nimport { getBestUnionErrors } from './union-errors';\n\n/**\n * Standard error codes for response unwrapping\n */\nconst ERROR_CODES = {\n MCP_ERROR: 'mcp_error',\n INVALID_RESPONSE: 'invalid_response',\n UNKNOWN: 'unknown',\n} as const;\n\nimport type {\n GetProductsResponse,\n ListCreativeFormatsResponse,\n CreateMediaBuyResponse,\n SyncCreativesResponse,\n ListCreativesResponse,\n UpdateMediaBuyResponse,\n GetMediaBuysResponse,\n GetMediaBuyDeliveryResponse,\n ProvidePerformanceFeedbackResponse,\n BuildCreativeResponse,\n PreviewCreativeResponse,\n GetSignalsResponse,\n ActivateSignalResponse,\n} from '../types/tools.generated';\nimport { prepareResponseForSchemaValidation, TOOL_RESPONSE_SCHEMAS } from './response-schemas';\nimport { injectLegacyEnvelopeStatus, normalizeLegacyMediaBuyStatusForReturn } from './envelope-status-compat';\nimport { getLatestA2ADataPartFromResponse } from './a2a-artifacts';\n\n/**\n * Typed error thrown when the response unwrapper's Zod schema rejects an\n * agent response. Carries the structured rejection detail so the storyboard\n * runner can attribute the failure to its canonical `response_schema`\n * validation entry instead of silently falling through to whichever\n * step-level invariant fires next (e.g., `context.no_secret_echo`).\n *\n * Without this typed boundary, the runner can only catch a generic `Error`\n * with a freeform message — there's no stable way to distinguish a\n * schema rejection from a transport error or any other failure. The\n * misattribution this caused (every BidMachine `sync_accounts` failure\n * surfaced as `no_secret_echo`, masking the root cause across 10+ deploys)\n * is the canonical evidence for adcp-client#1709 and the reason this\n * class exists. The runner pattern-matches `err instanceof\n * ResponseSchemaValidationError` to synthesize the correct attribution.\n *\n * Stable wire surface: `name` is the literal string `'ResponseSchemaValidationError'`\n * so consumers that can't import the class (cross-bundle, dynamic\n * `require`) can still recognize it by string comparison.\n *\n * Spec: adcp-client#1709.\n */\nexport class ResponseSchemaValidationError extends Error {\n readonly name = 'ResponseSchemaValidationError';\n /** The AdCP tool name whose response failed validation (e.g., `'sync_accounts'`). */\n readonly toolName: string;\n /** The structured Zod issues from the failed `safeParse`. */\n readonly issues: z.core.$ZodIssue[];\n /** The raw response data that failed validation, for diagnostic reporting. */\n readonly data: unknown;\n\n constructor(toolName: string, issues: z.core.$ZodIssue[], data: unknown, summaryMessage: string) {\n super(`Response validation failed for ${toolName}: ${summaryMessage}`);\n this.toolName = toolName;\n this.issues = issues;\n this.data = data;\n }\n}\n\n/**\n * Union type of all possible AdCP responses\n * Each response type is a discriminated union of success | error\n */\nexport type AdCPResponse =\n | GetProductsResponse\n | ListCreativeFormatsResponse\n | CreateMediaBuyResponse\n | SyncCreativesResponse\n | ListCreativesResponse\n | UpdateMediaBuyResponse\n | GetMediaBuysResponse\n | GetMediaBuyDeliveryResponse\n | ProvidePerformanceFeedbackResponse\n | BuildCreativeResponse\n | PreviewCreativeResponse\n | GetSignalsResponse\n | ActivateSignalResponse;\n\nconst SUCCESS_PAYLOAD_FIELD_GROUPS_BY_TOOL: Readonly<Record<string, readonly (readonly string[])[]>> = {\n get_adcp_capabilities: [['adcp', 'supported_protocols']],\n list_accounts: [['accounts']],\n sync_accounts: [['accounts']],\n sync_governance: [['accounts']],\n report_usage: [['accepted']],\n get_account_financials: [['account', 'currency', 'period', 'timezone']],\n get_products: [['products'], ['unchanged']],\n list_creative_formats: [['formats']],\n create_media_buy: [['media_buy_id', 'packages']],\n update_media_buy: [['media_buy_id']],\n get_media_buys: [['media_buys']],\n get_media_buy_delivery: [['reporting_period', 'currency', 'media_buy_deliveries']],\n provide_performance_feedback: [['success']],\n sync_event_sources: [['event_sources']],\n log_event: [['events_received', 'events_processed']],\n sync_audiences: [['audiences']],\n sync_catalogs: [['catalogs']],\n sync_creatives: [['creatives']],\n list_creatives: [['query_summary', 'pagination', 'creatives']],\n build_creative: [['creative_manifest'], ['creative_manifests']],\n preview_creative: [['response_type', 'previews']],\n get_creative_delivery: [['currency', 'reporting_period', 'creatives']],\n validate_input: [['results']],\n get_signals: [['signals'], ['unchanged']],\n activate_signal: [['deployments']],\n create_property_list: [['list', 'auth_token']],\n update_property_list: [['list']],\n get_property_list: [['list']],\n list_property_lists: [['lists']],\n delete_property_list: [['deleted', 'list_id']],\n create_collection_list: [['list', 'auth_token']],\n update_collection_list: [['list']],\n get_collection_list: [['list']],\n list_collection_lists: [['lists']],\n delete_collection_list: [['deleted', 'list_id']],\n list_content_standards: [['standards']],\n create_content_standards: [['standards_id']],\n update_content_standards: [['success', 'standards_id']],\n calibrate_content: [['verdict']],\n validate_content_delivery: [['summary', 'results']],\n get_media_buy_artifacts: [['media_buy_id', 'artifacts']],\n get_creative_features: [['results']],\n sync_plans: [['plans']],\n check_governance: [['check_id', 'verdict', 'plan_id', 'explanation']],\n report_plan_outcome: [['outcome_id', 'outcome_state']],\n get_plan_audit_logs: [['plans']],\n si_get_offering: [['available']],\n si_initiate_session: [['session_id', 'session_status']],\n si_send_message: [['session_id', 'session_status']],\n si_terminate_session: [['session_id', 'terminated']],\n comply_test_controller: [['success']],\n validate_property_delivery: [['list_id', 'summary', 'results', 'validated_at']],\n get_brand_identity: [['brand_id', 'house', 'names']],\n verify_brand_claim: [['claim_type', 'verification_status']],\n get_rights: [['rights']],\n acquire_rights: [['rights_id', 'rights_status', 'brand_id']],\n update_rights: [['rights_id']],\n creative_approval: [['decision']],\n verify_brand_claims: [['results']],\n search_brands: [['brands']],\n};\n\nfunction hasOwnField(value: Record<string, unknown>, field: string): boolean {\n return Object.prototype.hasOwnProperty.call(value, field);\n}\n\n/**\n * Top-level `errors[]` can be either a terminal Error arm or non-fatal\n * advisory diagnostics on a Success/Submitted arm. Envelope-only fields\n * (`status`, `context`, `ext`, version fields) do not prove success, so this\n * requires per-tool success-field evidence or the universal submitted envelope.\n * Completed payloads still flow through normal tool-schema validation after\n * this check.\n */\nexport function hasAdvisorySuccessPayload(response: unknown, toolName?: string): boolean {\n if (response == null || typeof response !== 'object' || Array.isArray(response)) return false;\n const obj = response as Record<string, unknown>;\n\n if (obj.status === 'failed' || obj.status === 'rejected') return false;\n if (obj.success === false) return false;\n\n if (obj.status === 'submitted' && (typeof obj.task_id === 'string' || typeof obj.taskId === 'string')) {\n return true;\n }\n\n if (!toolName) return false;\n\n const successFieldGroups = SUCCESS_PAYLOAD_FIELD_GROUPS_BY_TOOL[toolName];\n if (!successFieldGroups) return false;\n return successFieldGroups.some(group => group.every(field => hasOwnField(obj, field)));\n}\n\nexport function isTerminalAdcpError(response: unknown, toolName?: string): boolean {\n const obj = response as Record<string, unknown> | null | undefined;\n if (obj?.status === 'failed' || obj?.status === 'rejected') return true;\n if (obj?.adcp_error && typeof (obj.adcp_error as { code?: unknown }).code === 'string') return true;\n if (typeof obj?.error_code === 'string') {\n return !hasAdvisorySuccessPayload(obj, toolName);\n }\n if (Array.isArray(obj?.errors) && obj.errors.length > 0) {\n return !hasAdvisorySuccessPayload(obj, toolName);\n }\n return false;\n}\n\n/**\n * Extract raw AdCP response from protocol wrapper\n *\n * @param protocolResponse - Raw response from MCP or A2A protocol\n * @param toolName - Optional AdCP tool name for validation\n * @param protocol - Protocol type ('mcp' or 'a2a'), if known. If not provided, will auto-detect.\n * @param options - Optional validation behavior overrides\n * @returns Raw AdCP response data matching schema exactly\n * @throws {Error} If response doesn't match expected schema for the tool\n */\nexport function unwrapProtocolResponse(\n protocolResponse: any,\n toolName?: string,\n protocol?: 'mcp' | 'a2a',\n options?: { filterInvalidProducts?: boolean; responseAdcpVersion?: string }\n): AdCPResponse & { _message?: string } {\n if (!protocolResponse) {\n throw new Error('Protocol response is null or undefined');\n }\n\n // Extract response from protocol wrapper\n let unwrapped: any;\n let mcpExtractionPath: McpExtractionPath | undefined;\n if (protocol === 'mcp') {\n const outcome = unwrapMCPResponse(protocolResponse);\n unwrapped = outcome.result;\n mcpExtractionPath = outcome.extractionPath;\n } else if (protocol === 'a2a') {\n unwrapped = unwrapA2AResponse(protocolResponse);\n } else {\n // Auto-detect protocol if not specified\n if (isMCPResponse(protocolResponse)) {\n const outcome = unwrapMCPResponse(protocolResponse);\n unwrapped = outcome.result;\n mcpExtractionPath = outcome.extractionPath;\n } else if (isA2AResponse(protocolResponse)) {\n unwrapped = unwrapA2AResponse(protocolResponse);\n } else {\n throw new Error('Unable to extract AdCP response from protocol wrapper');\n }\n }\n // Preserve the extraction path across Zod's `safeParse` (which returns a\n // fresh object). `retag` re-attaches the provenance to whichever object we\n // return so the tag survives validation, filtering, and _message merging.\n const retag = <T extends AdCPResponse & { _message?: string }>(value: T): T => {\n if (mcpExtractionPath !== undefined) tagExtractionPath(value, mcpExtractionPath);\n return value;\n };\n\n if (mcpExtractionPath !== undefined) {\n tagExtractionPath(unwrapped, mcpExtractionPath);\n }\n\n // Skip schema validation for error responses — they don't include\n // tool-specific fields like `products`. Handles both AdCP-standard\n // { errors: [...] } and legacy singular { error: \"...\" } patterns.\n if (isTerminalAdcpError(unwrapped, toolName) || (unwrapped?.error && typeof unwrapped.error === 'string')) {\n return retag(unwrapped);\n }\n\n // Validate success responses against tool schema if tool name provided\n if (toolName) {\n const schema = TOOL_RESPONSE_SCHEMAS[toolName];\n if (schema) {\n // Strip _message before validation — it's a text summary added by the unwrapper,\n // not part of the AdCP response schema. Intersection with union schemas fails in Zod v4.\n const { _message: _msg, ...stripped } = unwrapped as Record<string, unknown>;\n // Back-compat: 3.0.x sellers may omit envelope `status` (made REQUIRED\n // in 3.1.0-beta.2). Inject a synthetic status only when the response\n // declares itself as 3.0.x (or carries no version field at all).\n const dataToValidate = prepareResponseForSchemaValidation(\n toolName,\n injectLegacyEnvelopeStatus(stripped, { toolName }),\n options?.responseAdcpVersion\n ) as Record<string, unknown>;\n const result = schema.safeParse(dataToValidate);\n if (!result.success) {\n // When filterInvalidArrayItems is enabled and this is a get_products response,\n // try filtering invalid products individually rather than rejecting the entire response.\n if (options?.filterInvalidProducts && toolName === 'get_products') {\n const filtered = filterInvalidProducts(schema, dataToValidate);\n if (filtered) {\n let validated = filtered as unknown as AdCPResponse & { _message?: string };\n // Strip compat-injected `status` before returning — same rationale as\n // the main success path below. See adcp-client#1961.\n if (!('status' in stripped)) {\n const { status: _s, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n } else {\n validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, toolName);\n }\n if (!('adcp_version' in stripped)) {\n const { adcp_version: _v, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n }\n if (_msg) validated._message = _msg as string;\n return retag(validated);\n }\n }\n\n // Union schemas produce a generic \"Invalid input\" at (root).\n // Try each variant to surface the actual missing/invalid fields.\n const firstIssue = result.error.issues[0];\n const isUnionError = result.error.issues.length === 1 && firstIssue?.code === 'invalid_union';\n\n if (isUnionError) {\n const betterErrors = getBestUnionErrors(schema, dataToValidate);\n if (betterErrors && betterErrors.length > 0) {\n const bestMessage = betterErrors.map(e => `${e.path}: ${e.message}`).join('; ');\n throw new ResponseSchemaValidationError(toolName, result.error.issues, dataToValidate, bestMessage);\n }\n }\n\n throw new ResponseSchemaValidationError(toolName, result.error.issues, dataToValidate, result.error.message);\n }\n\n // Re-attach _message after validation so it's available for text summaries.\n // Strip any compat-injected `status` before returning: the injection was\n // purely to let a 3.0.x seller pass the 3.1 envelope schema; propagating\n // it into taskResult.data causes storyboard field_value_or_absent checks\n // on the deprecated legacy `status` field to fail with a false positive\n // (sees injected \"completed\" instead of absent). See adcp-client#1961.\n let validated = result.data as AdCPResponse & { _message?: string };\n if (!('status' in stripped)) {\n const { status: _s, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n } else {\n validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, toolName);\n }\n if (!('adcp_version' in stripped)) {\n const { adcp_version: _v, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n }\n if (_msg) validated._message = _msg as string;\n return retag(validated);\n }\n }\n\n // Return unwrapped response (no validation) — already tagged above.\n return unwrapped as AdCPResponse;\n}\n\nfunction restoreLegacyMediaBuyStatusForReturn<T extends AdCPResponse & { _message?: string }>(\n validated: T,\n original: Record<string, unknown>,\n compat: Record<string, unknown>,\n toolName: string\n): T {\n if (\n (toolName === 'create_media_buy' || toolName === 'update_media_buy') &&\n typeof original.media_buy_id === 'string' &&\n typeof original.status === 'string' &&\n compat.status === 'completed' &&\n typeof compat.media_buy_status === 'string'\n ) {\n return normalizeLegacyMediaBuyStatusForReturn(\n { ...validated, status: original.status } as unknown as Record<string, unknown>,\n { toolName }\n ) as unknown as T;\n }\n return normalizeLegacyMediaBuyStatusForReturn(validated as unknown as Record<string, unknown>, {\n toolName,\n }) as unknown as T;\n}\n\n/**\n * Filter invalid products from a get_products response.\n *\n * Validates each product individually against the ProductSchema,\n * keeps only valid ones, and re-validates the full response.\n * Returns the filtered response, or null if filtering can't help.\n */\nfunction filterInvalidProducts(schema: z.ZodType, data: Record<string, unknown>): Record<string, unknown> | null {\n const products = data.products;\n if (!Array.isArray(products)) return null;\n\n // `products` is optional on `get_products` since AdCP 3.1.0-beta.3 (the\n // `unchanged: true` wholesale-feed branch legitimately omits it). The Zod\n // shape is now `ZodOptional<ZodArray<...>>` rather than the bare\n // `ZodArray<...>` we used to see. Unwrap a level of `ZodOptional` /\n // `ZodNullable` before the array check so the helper still finds the\n // element schema.\n let ProductSchema = (schema as z.ZodObject<any>).shape?.products;\n if (ProductSchema instanceof z.ZodOptional || ProductSchema instanceof z.ZodNullable) {\n ProductSchema = (ProductSchema as z.ZodOptional<any>).unwrap();\n }\n if (!(ProductSchema instanceof z.ZodArray)) return null;\n\n const elementSchema = (ProductSchema as z.ZodArray<any>).element;\n const validProducts: unknown[] = [];\n for (const product of products) {\n if (elementSchema.safeParse(product).success) {\n validProducts.push(product);\n }\n }\n\n // Nothing was filtered — all products are individually valid, so the validation\n // error is at the response level (not caused by invalid products). Fall through\n // to the normal error path.\n if (validProducts.length === products.length) return null;\n\n const filtered = { ...data, products: validProducts };\n const revalidated = schema.safeParse(filtered);\n if (revalidated.success) {\n const droppedCount = products.length - validProducts.length;\n console.warn(\n `[adcp-client] Filtered ${droppedCount} invalid product(s) from get_products response (${validProducts.length} valid, ${products.length} total)`\n );\n return revalidated.data as Record<string, unknown>;\n }\n\n return null;\n}\n\n/**\n * Check if response is MCP format\n */\nfunction isMCPResponse(response: any): boolean {\n return 'structuredContent' in response || 'isError' in response || 'content' in response;\n}\n\n/**\n * Check if response is A2A format.\n * A2A errors are JSON-RPC objects ({ code, message }), not strings.\n */\nfunction isA2AResponse(response: any): boolean {\n return 'result' in response || ('error' in response && typeof response.error === 'object' && response.error !== null);\n}\n\n/**\n * MCP response extraction provenance. Set as a non-enumerable `_extraction_path`\n * property on the unwrapped object so the storyboard runner can surface it in\n * its runner-output contract without leaking into JSON-serialized or spread\n * responses. See `src/lib/testing/storyboard/types.ts` → `RunnerExtractionPath`.\n */\nexport type McpExtractionPath = 'structured_content' | 'text_fallback' | 'error' | 'none';\n\nexport const EXTRACTION_PATH_KEY = '_extraction_path' as const;\n\ninterface McpUnwrapOutcome {\n result: AdCPResponse;\n extractionPath: McpExtractionPath;\n}\n\n/**\n * Unwrap MCP response - all MCP logic in one place.\n *\n * Also records which branch produced the parsed response (structuredContent\n * vs text content) so downstream tooling can tell a runner extraction bug\n * apart from an agent bug.\n */\nfunction unwrapMCPResponse(response: any): McpUnwrapOutcome {\n // MCP error response — preserve full structured data (context, ext, adcp_error)\n if (response.isError === true) {\n // L3: structuredContent has the full error payload.\n // Trust boundary: this is untrusted agent content passed through as-is.\n // Consumers must sanitize fields like suggestion/details before rendering.\n if (response.structuredContent && typeof response.structuredContent === 'object') {\n return { result: response.structuredContent as AdCPResponse, extractionPath: 'error' };\n }\n\n // L2: JSON in text content\n if (Array.isArray(response.content)) {\n for (const item of response.content) {\n if (item?.type === 'text' && item.text) {\n try {\n const parsed = JSON.parse(item.text);\n if (parsed?.adcp_error && typeof parsed.adcp_error.code === 'string') {\n return { result: parsed as AdCPResponse, extractionPath: 'error' };\n }\n } catch {\n // not JSON, continue to raw text fallback\n }\n }\n }\n }\n\n // L1: Raw text fallback — no structured data available\n const errorContent = Array.isArray(response.content)\n ? response.content.find((c: any) => c.type === 'text')?.text\n : response.content?.text || 'Unknown error';\n\n return {\n result: {\n adcp_error: {\n code: ERROR_CODES.MCP_ERROR,\n message: errorContent || 'MCP tool call failed',\n synthetic: true,\n },\n } as unknown as AdCPResponse,\n extractionPath: 'error',\n };\n }\n\n // MCP success response with structuredContent\n if (response.structuredContent !== undefined && response.structuredContent !== null) {\n const data = response.structuredContent;\n\n // Extract text messages from content field (parallel to A2A TextParts)\n const textMessages: string[] = [];\n if (response.content && Array.isArray(response.content)) {\n for (const item of response.content) {\n if (item.type === 'text' && item.text) {\n textMessages.push(item.text);\n }\n }\n }\n\n // Include text messages if present (same pattern as A2A)\n if (textMessages.length > 0) {\n return {\n result: {\n ...data,\n _message: textMessages.join('\\n'),\n },\n extractionPath: 'structured_content',\n };\n }\n\n return { result: data, extractionPath: 'structured_content' };\n }\n\n // MCP text content fallback (try parsing as JSON)\n if (response.content && Array.isArray(response.content)) {\n const textContent = response.content.find((c: any) => c.type === 'text');\n if (textContent?.text) {\n try {\n return { result: JSON.parse(textContent.text), extractionPath: 'text_fallback' };\n } catch {\n // Include snippet of text for debugging (max 100 chars)\n const snippet = textContent.text.length > 100 ? textContent.text.substring(0, 100) + '...' : textContent.text;\n\n return {\n result: {\n // AdCP 3.1.0-beta.2+: envelope `status` is REQUIRED on every\n // response. Synthetic error envelopes synthesized by the SDK\n // when the wire doesn't carry a valid AdCP payload need the\n // same. `failed` matches the error semantics of this branch.\n status: 'failed' as const,\n errors: [\n {\n code: ERROR_CODES.INVALID_RESPONSE,\n message: `Response does not contain structured AdCP data. Text content: \"${snippet}\"`,\n },\n ],\n } as AdCPResponse,\n extractionPath: 'text_fallback',\n };\n }\n }\n }\n\n throw new Error('Invalid MCP response format');\n}\n\n/**\n * Attach the extraction path to an unwrapped object as a non-enumerable\n * property. Non-enumerable so `JSON.stringify`, `Object.keys`, and spread\n * ignore it — the storyboard runner reads it via a direct property access\n * but the rest of the system sees the unwrapped data unchanged.\n */\nfunction tagExtractionPath(result: AdCPResponse, path: McpExtractionPath): AdCPResponse {\n if (result === null || typeof result !== 'object') return result;\n try {\n Object.defineProperty(result, EXTRACTION_PATH_KEY, {\n value: path,\n enumerable: false,\n configurable: true,\n writable: true,\n });\n } catch {\n // Frozen / sealed objects reject defineProperty; drop the tag silently —\n // the runner's fallback inference in extractionFromTaskResult still works.\n }\n return result;\n}\n\n/**\n * Read the extraction path from an unwrapped AdCP response, or `undefined`\n * if the response did not originate from an MCP unwrap path.\n */\nexport function readExtractionPath(data: unknown): McpExtractionPath | undefined {\n if (data === null || typeof data !== 'object') return undefined;\n const path = (data as Record<string, unknown>)[EXTRACTION_PATH_KEY];\n return typeof path === 'string' ? (path as McpExtractionPath) : undefined;\n}\n\n/**\n * Unwrap A2A response\n *\n * Called for terminal task states (\"completed\", \"failed\", \"rejected\",\n * \"canceled\"). All four carry the same artifact + DataPart envelope per\n * AdCP transport-errors §A2A Binding — failed tasks place `adcp_error`\n * into the DataPart alongside an optional terse TextPart.\n *\n * Intermediate statuses (\"working\", \"submitted\", \"input-required\",\n * \"auth-required\") do not yet have AdCP artifacts and are rejected here\n * so callers handle them at the response level.\n */\nconst TERMINAL_A2A_STATES: ReadonlySet<string> = new Set(['completed', 'failed', 'rejected', 'canceled']);\n\n/**\n * Detect whether a response carries a spec-compliant terminal-state Task\n * with a structured DataPart artifact. Mirrors the protocol-layer guard in\n * `src/lib/protocols/a2a.ts` (`hasTerminalTaskWithDataArtifact`) so the\n * unwrapper defers to the canonical envelope when a non-conformant seller\n * surfaces both a top-level transport error and the AdCP artifact.\n */\nfunction hasTerminalTaskWithDataArtifact(response: unknown): boolean {\n if (!response || typeof response !== 'object') return false;\n const result = (response as { result?: unknown }).result;\n if (!result || typeof result !== 'object') return false;\n const r = result as { kind?: unknown; status?: unknown; artifacts?: unknown };\n if (r.kind !== 'task') return false;\n const status = r.status as { state?: unknown } | undefined;\n if (typeof status?.state !== 'string' || !TERMINAL_A2A_STATES.has(status.state)) return false;\n return getLatestA2ADataPartFromResponse(response) !== undefined;\n}\n\nfunction unwrapA2AResponse(response: any): AdCPResponse {\n const taskState = response.result?.status?.state;\n if (taskState && !TERMINAL_A2A_STATES.has(taskState)) {\n throw new Error(\n `Cannot unwrap A2A response with intermediate status: ${taskState}. ` +\n 'Only terminal responses (completed, failed, rejected, canceled) should be unwrapped.'\n );\n }\n // A2A error response (JSON-RPC error). adcp-client#1575: when a\n // non-conformant seller surfaces both a top-level JSON-RPC error AND a\n // terminal-state Task with a structured DataPart artifact, the artifact\n // is canonical per AdCP transport-errors §A2A Binding — defer to the\n // artifact extraction below. Mirrors the protocol-layer guard at\n // `src/lib/protocols/a2a.ts` so the two layers stay symmetric and\n // direct callers (storyboard fixtures, cached responses, webhook\n // payloads) inherit the same defensive behavior.\n if (response.error && !hasTerminalTaskWithDataArtifact(response)) {\n return {\n // AdCP 3.1.0-beta.2+: envelope `status` is REQUIRED. Synthetic error\n // envelopes for A2A JSON-RPC failures carry `failed` to match the\n // error semantics.\n status: 'failed' as const,\n errors: [\n {\n code: response.error.code?.toString() || ERROR_CODES.UNKNOWN,\n message: response.error.message || 'A2A JSON-RPC error occurred',\n ...(response.error.data && { data: response.error.data }),\n },\n ],\n } as AdCPResponse;\n }\n\n // A2A terminal response — same shape regardless of success or failure:\n // - MUST have result.artifacts array with at least one artifact\n // - Artifact MUST have at least one DataPart (kind: 'data') with the AdCP payload\n // (success payload for `completed`, `adcp_error` envelope for `failed`)\n // - MAY have TextParts (kind: 'text') with optional messages\n\n const artifacts = response.result?.artifacts;\n if (!Array.isArray(artifacts) || artifacts.length === 0) {\n throw new Error('A2A response must have at least one artifact');\n }\n\n const artifact = artifacts[artifacts.length - 1];\n if (!artifact || typeof artifact !== 'object' || Array.isArray(artifact)) {\n throw new Error('A2A response must have at least one artifact');\n }\n\n if (!('parts' in artifact) || !Array.isArray((artifact as { parts?: unknown }).parts)) {\n throw new Error('A2A artifact missing parts array');\n }\n\n // Extract DataPart (required) and TextParts (optional). Use the shared\n // latest structured DataPart helper so parser and validator agree.\n const extracted = getLatestA2ADataPartFromResponse(response);\n if (!extracted) {\n throw new Error('A2A response must have a DataPart with AdCP data');\n }\n\n const parts = (artifact as { parts: unknown[] }).parts;\n const textParts = parts\n .filter((p: any) => p && typeof p === 'object' && p.kind === 'text' && p.text)\n .map((p: any) => p.text);\n\n // Unwrap nested response field if present (some agents wrap AdCP responses)\n let data: any = extracted.data;\n if (data?.response && typeof data.response === 'object' && !Array.isArray(data.response)) {\n data = data.response;\n }\n\n // Return data with optional message\n if (textParts.length > 0) {\n return {\n ...data,\n _message: textParts.join('\\n'),\n };\n }\n\n return data;\n}\n\n/**\n * Check if a response is an AdCP error response.\n * Recognizes both `{ adcp_error: { code: string } }` (MCP structured errors)\n * and `{ errors: [{ code, message }] }` (legacy/A2A format).\n *\n * This helper is structural and intentionally does not know which tool\n * produced the payload. For AdCP 3.1 success/submitted payloads that can\n * carry advisory `errors[]`, prefer {@link isTerminalAdcpError} with a\n * `toolName`.\n */\nexport function isAdcpError(response: any): boolean {\n if (Array.isArray(response?.errors) && response.errors.length > 0) return true;\n if (response?.adcp_error && typeof response.adcp_error.code === 'string') return true;\n return false;\n}\n\n/**\n * Check if a response is an AdCP success response for a specific task\n *\n * Uses Zod schemas to validate the response structure matches the expected\n * success response format for the given task.\n */\nexport function isAdcpSuccess(response: any, taskName: string, responseAdcpVersion?: string): boolean {\n // First check if it's an error response\n if (isTerminalAdcpError(response, taskName)) {\n return false;\n }\n\n // Try to validate with Zod schema if available\n const schema = TOOL_RESPONSE_SCHEMAS[taskName];\n if (schema) {\n const { _message: _, ...stripped } = (response ?? {}) as Record<string, unknown>;\n // Apply the same 3.0.x envelope-status leniency as unwrapProtocolResponse\n // so success detection stays consistent across the two entry points.\n const dataToValidate = prepareResponseForSchemaValidation(\n taskName,\n injectLegacyEnvelopeStatus(stripped, { toolName: taskName }),\n responseAdcpVersion\n );\n const result = schema.safeParse(dataToValidate);\n return result.success;\n }\n\n // Unknown task - can't validate, assume success if no errors\n return true;\n}\n"],"mappings":"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","names":["validated"]}
1
+ {"version":3,"sources":["../../../src/lib/utils/response-unwrapper.ts"],"sourcesContent":["/**\n * Response Unwrapper\n *\n * Extracts raw AdCP responses from protocol wrappers (MCP/A2A).\n * Follows canonical A2A response format per AdCP specification.\n */\n\nimport { z } from 'zod';\nimport { getBestUnionErrors } from './union-errors';\n\n/**\n * Standard error codes for response unwrapping\n */\nconst ERROR_CODES = {\n MCP_ERROR: 'mcp_error',\n INVALID_RESPONSE: 'invalid_response',\n UNKNOWN: 'unknown',\n} as const;\n\nimport type {\n GetProductsResponse,\n ListCreativeFormatsResponse,\n CreateMediaBuyResponse,\n SyncCreativesResponse,\n ListCreativesResponse,\n UpdateMediaBuyResponse,\n GetMediaBuysResponse,\n GetMediaBuyDeliveryResponse,\n ProvidePerformanceFeedbackResponse,\n BuildCreativeResponse,\n PreviewCreativeResponse,\n GetSignalsResponse,\n ActivateSignalResponse,\n} from '../types/tools.generated';\nimport { prepareResponseForSchemaValidation, TOOL_RESPONSE_SCHEMAS } from './response-schemas';\nimport { injectLegacyEnvelopeStatus, normalizeLegacyMediaBuyStatusForReturn } from './envelope-status-compat';\nimport { getLatestA2ADataPartFromResponse } from './a2a-artifacts';\n\n/**\n * Typed error thrown when the response unwrapper's Zod schema rejects an\n * agent response. Carries the structured rejection detail so the storyboard\n * runner can attribute the failure to its canonical `response_schema`\n * validation entry instead of silently falling through to whichever\n * step-level invariant fires next (e.g., `context.no_secret_echo`).\n *\n * Without this typed boundary, the runner can only catch a generic `Error`\n * with a freeform message — there's no stable way to distinguish a\n * schema rejection from a transport error or any other failure. The\n * misattribution this caused (every BidMachine `sync_accounts` failure\n * surfaced as `no_secret_echo`, masking the root cause across 10+ deploys)\n * is the canonical evidence for adcp-client#1709 and the reason this\n * class exists. The runner pattern-matches `err instanceof\n * ResponseSchemaValidationError` to synthesize the correct attribution.\n *\n * Stable wire surface: `name` is the literal string `'ResponseSchemaValidationError'`\n * so consumers that can't import the class (cross-bundle, dynamic\n * `require`) can still recognize it by string comparison.\n *\n * Spec: adcp-client#1709.\n */\nexport class ResponseSchemaValidationError extends Error {\n readonly name = 'ResponseSchemaValidationError';\n /** The AdCP tool name whose response failed validation (e.g., `'sync_accounts'`). */\n readonly toolName: string;\n /** The structured Zod issues from the failed `safeParse`. */\n readonly issues: z.core.$ZodIssue[];\n /** The raw response data that failed validation, for diagnostic reporting. */\n readonly data: unknown;\n\n constructor(toolName: string, issues: z.core.$ZodIssue[], data: unknown, summaryMessage: string) {\n super(`Response validation failed for ${toolName}: ${summaryMessage}`);\n this.toolName = toolName;\n this.issues = issues;\n this.data = data;\n }\n}\n\n/**\n * Union type of all possible AdCP responses\n * Each response type is a discriminated union of success | error\n */\nexport type AdCPResponse =\n | GetProductsResponse\n | ListCreativeFormatsResponse\n | CreateMediaBuyResponse\n | SyncCreativesResponse\n | ListCreativesResponse\n | UpdateMediaBuyResponse\n | GetMediaBuysResponse\n | GetMediaBuyDeliveryResponse\n | ProvidePerformanceFeedbackResponse\n | BuildCreativeResponse\n | PreviewCreativeResponse\n | GetSignalsResponse\n | ActivateSignalResponse;\n\nconst SUCCESS_PAYLOAD_FIELD_GROUPS_BY_TOOL: Readonly<Record<string, readonly (readonly string[])[]>> = {\n get_adcp_capabilities: [['adcp', 'supported_protocols']],\n list_accounts: [['accounts']],\n sync_accounts: [['accounts']],\n sync_governance: [['accounts']],\n report_usage: [['accepted']],\n get_account_financials: [['account', 'currency', 'period', 'timezone']],\n get_products: [['products'], ['unchanged']],\n list_creative_formats: [['formats']],\n create_media_buy: [['media_buy_id', 'packages']],\n update_media_buy: [['media_buy_id']],\n get_media_buys: [['media_buys']],\n get_media_buy_delivery: [['reporting_period', 'currency', 'media_buy_deliveries']],\n provide_performance_feedback: [['success']],\n sync_event_sources: [['event_sources']],\n log_event: [['events_received', 'events_processed']],\n sync_audiences: [['audiences']],\n sync_catalogs: [['catalogs']],\n sync_creatives: [['creatives']],\n list_creatives: [['query_summary', 'pagination', 'creatives']],\n build_creative: [['creative_manifest'], ['creative_manifests']],\n preview_creative: [['response_type', 'previews']],\n get_creative_delivery: [['currency', 'reporting_period', 'creatives']],\n validate_input: [['results']],\n get_signals: [['signals'], ['unchanged']],\n activate_signal: [['deployments']],\n create_property_list: [['list', 'auth_token']],\n update_property_list: [['list']],\n get_property_list: [['list']],\n list_property_lists: [['lists']],\n delete_property_list: [['deleted', 'list_id']],\n create_collection_list: [['list', 'auth_token']],\n update_collection_list: [['list']],\n get_collection_list: [['list']],\n list_collection_lists: [['lists']],\n delete_collection_list: [['deleted', 'list_id']],\n list_content_standards: [['standards']],\n create_content_standards: [['standards_id']],\n update_content_standards: [['success', 'standards_id']],\n calibrate_content: [['verdict']],\n validate_content_delivery: [['summary', 'results']],\n get_media_buy_artifacts: [['media_buy_id', 'artifacts']],\n get_creative_features: [['results']],\n sync_plans: [['plans']],\n check_governance: [['check_id', 'verdict', 'plan_id', 'explanation']],\n report_plan_outcome: [['outcome_id', 'outcome_state']],\n get_plan_audit_logs: [['plans']],\n si_get_offering: [['available']],\n si_initiate_session: [['session_id', 'session_status']],\n si_send_message: [['session_id', 'session_status']],\n si_terminate_session: [['session_id', 'terminated']],\n comply_test_controller: [['success']],\n validate_property_delivery: [['list_id', 'summary', 'results', 'validated_at']],\n get_brand_identity: [['brand_id', 'house', 'names']],\n verify_brand_claim: [['claim_type', 'verification_status']],\n get_rights: [['rights']],\n acquire_rights: [['rights_id', 'rights_status', 'brand_id']],\n update_rights: [['rights_id']],\n creative_approval: [['decision']],\n verify_brand_claims: [['results']],\n search_brands: [['brands']],\n};\n\nfunction hasOwnField(value: Record<string, unknown>, field: string): boolean {\n return Object.prototype.hasOwnProperty.call(value, field);\n}\n\n/**\n * Top-level `errors[]` can be either a terminal Error arm or non-fatal\n * advisory diagnostics on a Success/Submitted arm. Envelope-only fields\n * (`status`, `context`, `ext`, version fields) do not prove success, so this\n * requires per-tool success-field evidence or the universal submitted envelope.\n * Completed payloads still flow through normal tool-schema validation after\n * this check.\n */\nexport function hasAdvisorySuccessPayload(response: unknown, toolName?: string): boolean {\n if (response == null || typeof response !== 'object' || Array.isArray(response)) return false;\n const obj = response as Record<string, unknown>;\n\n if (obj.status === 'failed' || obj.status === 'rejected') return false;\n if (obj.success === false) return false;\n\n if (obj.status === 'submitted' && (typeof obj.task_id === 'string' || typeof obj.taskId === 'string')) {\n return true;\n }\n\n if (!toolName) return false;\n\n const successFieldGroups = SUCCESS_PAYLOAD_FIELD_GROUPS_BY_TOOL[toolName];\n if (!successFieldGroups) return false;\n return successFieldGroups.some(group => group.every(field => hasOwnField(obj, field)));\n}\n\nexport function isTerminalAdcpError(response: unknown, toolName?: string): boolean {\n const obj = response as Record<string, unknown> | null | undefined;\n if (obj?.status === 'failed' || obj?.status === 'rejected') return true;\n if (obj?.adcp_error && typeof (obj.adcp_error as { code?: unknown }).code === 'string') return true;\n if (typeof obj?.error_code === 'string') {\n return !hasAdvisorySuccessPayload(obj, toolName);\n }\n if (Array.isArray(obj?.errors) && obj.errors.length > 0) {\n return !hasAdvisorySuccessPayload(obj, toolName);\n }\n return false;\n}\n\n/**\n * Extract raw AdCP response from protocol wrapper\n *\n * @param protocolResponse - Raw response from MCP or A2A protocol\n * @param toolName - Optional AdCP tool name for validation\n * @param protocol - Protocol type ('mcp' or 'a2a'), if known. If not provided, will auto-detect.\n * @param options - Optional validation behavior overrides\n * @returns Raw AdCP response data matching schema exactly\n * @throws {Error} If response doesn't match expected schema for the tool\n */\nexport function unwrapProtocolResponse(\n protocolResponse: any,\n toolName?: string,\n protocol?: 'mcp' | 'a2a',\n options?: { filterInvalidProducts?: boolean; responseAdcpVersion?: string }\n): AdCPResponse & { _message?: string } {\n if (!protocolResponse) {\n throw new Error('Protocol response is null or undefined');\n }\n\n // Extract response from protocol wrapper\n let unwrapped: any;\n let mcpExtractionPath: McpExtractionPath | undefined;\n if (protocol === 'mcp') {\n const outcome = unwrapMCPResponse(protocolResponse);\n unwrapped = outcome.result;\n mcpExtractionPath = outcome.extractionPath;\n } else if (protocol === 'a2a') {\n unwrapped = unwrapA2AResponse(protocolResponse);\n } else {\n // Auto-detect protocol if not specified\n if (isMCPResponse(protocolResponse)) {\n const outcome = unwrapMCPResponse(protocolResponse);\n unwrapped = outcome.result;\n mcpExtractionPath = outcome.extractionPath;\n } else if (isA2AResponse(protocolResponse)) {\n unwrapped = unwrapA2AResponse(protocolResponse);\n } else {\n throw new Error('Unable to extract AdCP response from protocol wrapper');\n }\n }\n // Preserve the extraction path across Zod's `safeParse` (which returns a\n // fresh object). `retag` re-attaches the provenance to whichever object we\n // return so the tag survives validation, filtering, and _message merging.\n const retag = <T extends AdCPResponse & { _message?: string }>(value: T): T => {\n if (mcpExtractionPath !== undefined) tagExtractionPath(value, mcpExtractionPath);\n return value;\n };\n\n if (mcpExtractionPath !== undefined) {\n tagExtractionPath(unwrapped, mcpExtractionPath);\n }\n\n // Skip schema validation for error responses — they don't include\n // tool-specific fields like `products`. Handles both AdCP-standard\n // { errors: [...] } and legacy singular { error: \"...\" } patterns.\n if (isTerminalAdcpError(unwrapped, toolName) || (unwrapped?.error && typeof unwrapped.error === 'string')) {\n return retag(unwrapped);\n }\n\n // Validate success responses against tool schema if tool name provided\n if (toolName) {\n const schema = TOOL_RESPONSE_SCHEMAS[toolName];\n if (schema) {\n // Strip _message before validation — it's a text summary added by the unwrapper,\n // not part of the AdCP response schema. Intersection with union schemas fails in Zod v4.\n const { _message: _msg, ...stripped } = unwrapped as Record<string, unknown>;\n // Back-compat: 3.0.x sellers may omit envelope `status` (made REQUIRED\n // in 3.1.0-beta.2). Inject a synthetic status only when the response\n // declares itself as 3.0.x (or carries no version field at all).\n const dataToValidate = prepareResponseForSchemaValidation(\n toolName,\n injectLegacyEnvelopeStatus(stripped, { toolName }),\n options?.responseAdcpVersion\n ) as Record<string, unknown>;\n const result = schema.safeParse(dataToValidate);\n if (!result.success) {\n // When filterInvalidArrayItems is enabled and this is a get_products response,\n // try filtering invalid products individually rather than rejecting the entire response.\n if (options?.filterInvalidProducts && toolName === 'get_products') {\n const filtered = filterInvalidProducts(schema, dataToValidate);\n if (filtered) {\n let validated = filtered as unknown as AdCPResponse & { _message?: string };\n // Strip compat-injected `status` before returning — same rationale as\n // the main success path below. See adcp-client#1961.\n if (!('status' in stripped)) {\n const { status: _s, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n } else {\n validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, toolName);\n }\n if (!('adcp_version' in stripped)) {\n const { adcp_version: _v, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n }\n if (_msg) validated._message = _msg as string;\n return retag(validated);\n }\n }\n\n // Union schemas produce a generic \"Invalid input\" at (root).\n // Try each variant to surface the actual missing/invalid fields.\n const firstIssue = result.error.issues[0];\n const isUnionError = result.error.issues.length === 1 && firstIssue?.code === 'invalid_union';\n\n if (isUnionError) {\n const betterErrors = getBestUnionErrors(schema, dataToValidate);\n if (betterErrors && betterErrors.length > 0) {\n const bestMessage = betterErrors.map(e => `${e.path}: ${e.message}`).join('; ');\n throw new ResponseSchemaValidationError(toolName, result.error.issues, dataToValidate, bestMessage);\n }\n }\n\n throw new ResponseSchemaValidationError(toolName, result.error.issues, dataToValidate, result.error.message);\n }\n\n // Re-attach _message after validation so it's available for text summaries.\n // Strip any compat-injected `status` before returning: the injection was\n // purely to let a 3.0.x seller pass the 3.1 envelope schema; propagating\n // it into taskResult.data causes storyboard field_value_or_absent checks\n // on the deprecated legacy `status` field to fail with a false positive\n // (sees injected \"completed\" instead of absent). See adcp-client#1961.\n let validated = result.data as AdCPResponse & { _message?: string };\n if (!('status' in stripped)) {\n const { status: _s, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n } else {\n validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, toolName);\n }\n if (!('adcp_version' in stripped)) {\n const { adcp_version: _v, ...rest } = validated as unknown as Record<string, unknown>;\n validated = rest as unknown as typeof validated;\n }\n if (_msg) validated._message = _msg as string;\n return retag(validated);\n }\n }\n\n // Return unwrapped response (no validation) — already tagged above.\n return unwrapped as AdCPResponse;\n}\n\nfunction restoreLegacyMediaBuyStatusForReturn<T extends AdCPResponse & { _message?: string }>(\n validated: T,\n original: Record<string, unknown>,\n compat: Record<string, unknown>,\n toolName: string\n): T {\n if (\n (toolName === 'create_media_buy' || toolName === 'update_media_buy') &&\n typeof original.media_buy_id === 'string' &&\n typeof original.status === 'string' &&\n compat.status === 'completed' &&\n typeof compat.media_buy_status === 'string'\n ) {\n return normalizeLegacyMediaBuyStatusForReturn(\n { ...validated, status: original.status } as unknown as Record<string, unknown>,\n { toolName }\n ) as unknown as T;\n }\n return normalizeLegacyMediaBuyStatusForReturn(validated as unknown as Record<string, unknown>, {\n toolName,\n }) as unknown as T;\n}\n\n/**\n * Filter invalid products from a get_products response.\n *\n * Validates each product individually against the ProductSchema,\n * keeps only valid ones, and re-validates the full response.\n * Returns the filtered response, or null if filtering can't help.\n */\nfunction filterInvalidProducts(schema: z.ZodType, data: Record<string, unknown>): Record<string, unknown> | null {\n const products = data.products;\n if (!Array.isArray(products)) return null;\n\n // `products` is optional on `get_products` since AdCP 3.1.0-beta.3 (the\n // `unchanged: true` wholesale-feed branch legitimately omits it). The Zod\n // shape is now `ZodOptional<ZodArray<...>>` rather than the bare\n // `ZodArray<...>` we used to see. Unwrap a level of `ZodOptional` /\n // `ZodNullable` before the array check so the helper still finds the\n // element schema.\n let ProductSchema = (schema as z.ZodObject<any>).shape?.products;\n if (ProductSchema instanceof z.ZodOptional || ProductSchema instanceof z.ZodNullable) {\n ProductSchema = (ProductSchema as z.ZodOptional<any>).unwrap();\n }\n if (!(ProductSchema instanceof z.ZodArray)) return null;\n\n const elementSchema = (ProductSchema as z.ZodArray<any>).element;\n const validProducts: unknown[] = [];\n for (const product of products) {\n if (elementSchema.safeParse(product).success) {\n validProducts.push(product);\n }\n }\n\n // Nothing was filtered — all products are individually valid, so the validation\n // error is at the response level (not caused by invalid products). Fall through\n // to the normal error path.\n if (validProducts.length === products.length) return null;\n\n const filtered = { ...data, products: validProducts };\n const revalidated = schema.safeParse(filtered);\n if (revalidated.success) {\n const droppedCount = products.length - validProducts.length;\n console.warn(\n `[adcp-client] Filtered ${droppedCount} invalid product(s) from get_products response (${validProducts.length} valid, ${products.length} total)`\n );\n return revalidated.data as Record<string, unknown>;\n }\n\n return null;\n}\n\n/**\n * Check if response is MCP format\n */\nfunction isMCPResponse(response: any): boolean {\n return 'structuredContent' in response || 'isError' in response || 'content' in response;\n}\n\n/**\n * Check if response is A2A format.\n * A2A errors are JSON-RPC objects ({ code, message }), not strings.\n */\nfunction isA2AResponse(response: any): boolean {\n return 'result' in response || ('error' in response && typeof response.error === 'object' && response.error !== null);\n}\n\n/**\n * MCP response extraction provenance. Set as a non-enumerable `_extraction_path`\n * property on the unwrapped object so the storyboard runner can surface it in\n * its runner-output contract without leaking into JSON-serialized or spread\n * responses. See `src/lib/testing/storyboard/types.ts` → `RunnerExtractionPath`.\n */\nexport type McpExtractionPath = 'structured_content' | 'text_fallback' | 'error' | 'none';\n\nexport const EXTRACTION_PATH_KEY = '_extraction_path' as const;\n\ninterface McpUnwrapOutcome {\n result: AdCPResponse;\n extractionPath: McpExtractionPath;\n}\n\n/**\n * Unwrap MCP response - all MCP logic in one place.\n *\n * Also records which branch produced the parsed response (structuredContent\n * vs text content) so downstream tooling can tell a runner extraction bug\n * apart from an agent bug.\n */\nfunction unwrapMCPResponse(response: any): McpUnwrapOutcome {\n // MCP error response — preserve full structured data (context, ext, adcp_error)\n if (response.isError === true) {\n // L3: structuredContent has the full error payload.\n // Trust boundary: this is untrusted agent content passed through as-is.\n // Consumers must sanitize fields like suggestion/details before rendering.\n if (response.structuredContent && typeof response.structuredContent === 'object') {\n return { result: response.structuredContent as AdCPResponse, extractionPath: 'error' };\n }\n\n // L2: JSON in text content\n if (Array.isArray(response.content)) {\n for (const item of response.content) {\n if (item?.type === 'text' && item.text) {\n try {\n const parsed = JSON.parse(item.text);\n if (parsed?.adcp_error && typeof parsed.adcp_error.code === 'string') {\n return { result: parsed as AdCPResponse, extractionPath: 'error' };\n }\n } catch {\n // not JSON, continue to raw text fallback\n }\n }\n }\n }\n\n // L1: Raw text fallback — no structured data available\n const errorContent = Array.isArray(response.content)\n ? response.content.find((c: any) => c.type === 'text')?.text\n : response.content?.text || 'Unknown error';\n\n return {\n result: {\n adcp_error: {\n code: ERROR_CODES.MCP_ERROR,\n message: errorContent || 'MCP tool call failed',\n synthetic: true,\n },\n } as unknown as AdCPResponse,\n extractionPath: 'error',\n };\n }\n\n // MCP success response with structuredContent\n if (response.structuredContent !== undefined && response.structuredContent !== null) {\n const data = response.structuredContent;\n\n // Extract text messages from content field (parallel to A2A TextParts)\n const textMessages: string[] = [];\n if (response.content && Array.isArray(response.content)) {\n for (const item of response.content) {\n if (item.type === 'text' && item.text) {\n textMessages.push(item.text);\n }\n }\n }\n\n // Include text messages if present (same pattern as A2A)\n if (textMessages.length > 0) {\n return {\n result: {\n ...data,\n _message: textMessages.join('\\n'),\n },\n extractionPath: 'structured_content',\n };\n }\n\n return { result: data, extractionPath: 'structured_content' };\n }\n\n // MCP text content fallback (try parsing as JSON)\n if (response.content && Array.isArray(response.content)) {\n const textContent = response.content.find((c: any) => c.type === 'text');\n if (textContent?.text) {\n try {\n return { result: JSON.parse(textContent.text), extractionPath: 'text_fallback' };\n } catch {\n // Include snippet of text for debugging (max 100 chars)\n const snippet = textContent.text.length > 100 ? textContent.text.substring(0, 100) + '...' : textContent.text;\n\n return {\n result: {\n // AdCP 3.1.0-beta.2+: envelope `status` is REQUIRED on every\n // response. Synthetic error envelopes synthesized by the SDK\n // when the wire doesn't carry a valid AdCP payload need the\n // same. `failed` matches the error semantics of this branch.\n status: 'failed' as const,\n errors: [\n {\n code: ERROR_CODES.INVALID_RESPONSE,\n message: `Response does not contain structured AdCP data. Text content: \"${snippet}\"`,\n },\n ],\n } as AdCPResponse,\n extractionPath: 'text_fallback',\n };\n }\n }\n }\n\n throw new Error('Invalid MCP response format');\n}\n\n/**\n * Attach the extraction path to an unwrapped object as a non-enumerable\n * property. Non-enumerable so `JSON.stringify`, `Object.keys`, and spread\n * ignore it — the storyboard runner reads it via a direct property access\n * but the rest of the system sees the unwrapped data unchanged.\n */\nfunction tagExtractionPath(result: AdCPResponse, path: McpExtractionPath): AdCPResponse {\n if (result === null || typeof result !== 'object') return result;\n try {\n Object.defineProperty(result, EXTRACTION_PATH_KEY, {\n value: path,\n enumerable: false,\n configurable: true,\n writable: true,\n });\n } catch {\n // Frozen / sealed objects reject defineProperty; drop the tag silently —\n // the runner's fallback inference in extractionFromTaskResult still works.\n }\n return result;\n}\n\n/**\n * Read the extraction path from an unwrapped AdCP response, or `undefined`\n * if the response did not originate from an MCP unwrap path.\n */\nexport function readExtractionPath(data: unknown): McpExtractionPath | undefined {\n if (data === null || typeof data !== 'object') return undefined;\n const path = (data as Record<string, unknown>)[EXTRACTION_PATH_KEY];\n return typeof path === 'string' ? (path as McpExtractionPath) : undefined;\n}\n\n/**\n * Unwrap A2A response\n *\n * Called for terminal task states (\"completed\", \"failed\", \"rejected\",\n * \"canceled\"). All four carry the same artifact + DataPart envelope per\n * AdCP transport-errors §A2A Binding — failed tasks place `adcp_error`\n * into the DataPart alongside an optional terse TextPart.\n *\n * Intermediate statuses (\"working\", \"submitted\", \"input-required\",\n * \"auth-required\") do not yet have AdCP artifacts and are rejected here\n * so callers handle them at the response level.\n */\nconst TERMINAL_A2A_STATES: ReadonlySet<string> = new Set(['completed', 'failed', 'rejected', 'canceled']);\n\n/**\n * Detect whether a response carries a spec-compliant terminal-state Task\n * with a structured DataPart artifact. Mirrors the protocol-layer guard in\n * `src/lib/protocols/a2a.ts` (`hasTerminalTaskWithDataArtifact`) so the\n * unwrapper defers to the canonical envelope when a non-conformant seller\n * surfaces both a top-level transport error and the AdCP artifact.\n */\nfunction hasTerminalTaskWithDataArtifact(response: unknown): boolean {\n if (!response || typeof response !== 'object') return false;\n const result = (response as { result?: unknown }).result;\n if (!result || typeof result !== 'object') return false;\n const r = result as { kind?: unknown; status?: unknown; artifacts?: unknown };\n if (r.kind !== 'task') return false;\n const status = r.status as { state?: unknown } | undefined;\n if (typeof status?.state !== 'string' || !TERMINAL_A2A_STATES.has(status.state)) return false;\n return getLatestA2ADataPartFromResponse(response) !== undefined;\n}\n\nfunction unwrapA2AResponse(response: any): AdCPResponse {\n const taskState = response.result?.status?.state;\n if (taskState && !TERMINAL_A2A_STATES.has(taskState)) {\n throw new Error(\n `Cannot unwrap A2A response with intermediate status: ${taskState}. ` +\n 'Only terminal responses (completed, failed, rejected, canceled) should be unwrapped.'\n );\n }\n // A2A error response (JSON-RPC error). adcp-client#1575: when a\n // non-conformant seller surfaces both a top-level JSON-RPC error AND a\n // terminal-state Task with a structured DataPart artifact, the artifact\n // is canonical per AdCP transport-errors §A2A Binding — defer to the\n // artifact extraction below. Mirrors the protocol-layer guard at\n // `src/lib/protocols/a2a.ts` so the two layers stay symmetric and\n // direct callers (storyboard fixtures, cached responses, webhook\n // payloads) inherit the same defensive behavior.\n if (response.error && !hasTerminalTaskWithDataArtifact(response)) {\n return {\n // AdCP 3.1.0-beta.2+: envelope `status` is REQUIRED. Synthetic error\n // envelopes for A2A JSON-RPC failures carry `failed` to match the\n // error semantics.\n status: 'failed' as const,\n errors: [\n {\n code: response.error.code?.toString() || ERROR_CODES.UNKNOWN,\n message: response.error.message || 'A2A JSON-RPC error occurred',\n ...(response.error.data && { data: response.error.data }),\n },\n ],\n } as AdCPResponse;\n }\n\n // A2A terminal response — same shape regardless of success or failure:\n // - MUST have result.artifacts array with at least one artifact\n // - Artifact MUST have at least one DataPart (kind: 'data') with the AdCP payload\n // (success payload for `completed`, `adcp_error` envelope for `failed`)\n // - MAY have TextParts (kind: 'text') with optional messages\n\n const artifacts = response.result?.artifacts;\n if (!Array.isArray(artifacts) || artifacts.length === 0) {\n throw new Error('A2A response must have at least one artifact');\n }\n\n const artifact = artifacts[artifacts.length - 1];\n if (!artifact || typeof artifact !== 'object' || Array.isArray(artifact)) {\n throw new Error('A2A response must have at least one artifact');\n }\n\n if (!('parts' in artifact) || !Array.isArray((artifact as { parts?: unknown }).parts)) {\n throw new Error('A2A artifact missing parts array');\n }\n\n // Extract DataPart (required) and TextParts (optional). Use the shared\n // latest structured DataPart helper so parser and validator agree.\n const extracted = getLatestA2ADataPartFromResponse(response);\n if (!extracted) {\n throw new Error('A2A response must have a DataPart with AdCP data');\n }\n\n const parts = (artifact as { parts: unknown[] }).parts;\n const textParts = parts\n .filter((p: any) => p && typeof p === 'object' && p.kind === 'text' && p.text)\n .map((p: any) => p.text);\n\n // Unwrap nested response field if present (some agents wrap AdCP responses)\n let data: any = extracted.data;\n if (data?.response && typeof data.response === 'object' && !Array.isArray(data.response)) {\n data = data.response;\n }\n\n // Return data with optional message\n if (textParts.length > 0) {\n return {\n ...data,\n _message: textParts.join('\\n'),\n };\n }\n\n return data;\n}\n\n/**\n * Check if a response is an AdCP error response.\n * Recognizes both `{ adcp_error: { code: string } }` (MCP structured errors)\n * and `{ errors: [{ code, message }] }` (legacy/A2A format).\n *\n * This helper is structural and intentionally does not know which tool\n * produced the payload. For AdCP 3.1 success/submitted payloads that can\n * carry advisory `errors[]`, prefer {@link isTerminalAdcpError} with a\n * `toolName`.\n */\nexport function isAdcpError(response: any): boolean {\n if (Array.isArray(response?.errors) && response.errors.length > 0) return true;\n if (response?.adcp_error && typeof response.adcp_error.code === 'string') return true;\n return false;\n}\n\n/**\n * Check if a response is an AdCP success response for a specific task\n *\n * Uses Zod schemas to validate the response structure matches the expected\n * success response format for the given task.\n */\nexport function isAdcpSuccess(response: any, taskName: string, responseAdcpVersion?: string): boolean {\n // First check if it's an error response\n if (isTerminalAdcpError(response, taskName)) {\n return false;\n }\n\n // Try to validate with Zod schema if available\n const schema = TOOL_RESPONSE_SCHEMAS[taskName];\n if (schema) {\n const { _message: _, ...stripped } = (response ?? {}) as Record<string, unknown>;\n // Apply the same 3.0.x envelope-status leniency as unwrapProtocolResponse\n // so success detection stays consistent across the two entry points.\n const dataToValidate = prepareResponseForSchemaValidation(\n taskName,\n injectLegacyEnvelopeStatus(stripped, { toolName: taskName }),\n responseAdcpVersion\n );\n const result = schema.safeParse(dataToValidate);\n return result.success;\n }\n\n // Unknown task - can't validate, assume success if no errors\n return true;\n}\n"],"mappings":"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","names":["validated"]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  function isRetryable(result) {
8
2
  return !result.success && result.adcpError?.recovery === "transient";
9
3
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/retry.ts"],"sourcesContent":["import type { TaskResult, TaskResultFailure, AdcpErrorInfo } from '../core/ConversationTypes';\n\n/**\n * Check if a failed TaskResult is retryable (transient error with recovery hint).\n * Always returns false for successful results.\n */\nexport function isRetryable<T>(result: TaskResult<T>): result is TaskResultFailure<T> & { adcpError: AdcpErrorInfo } {\n return !result.success && result.adcpError?.recovery === 'transient';\n}\n\n/**\n * Get the recommended retry delay in milliseconds.\n * Uses the agent-provided retryAfterMs if available, otherwise returns defaultMs.\n * Returns 0 if the result is not retryable.\n */\nexport function getRetryDelay<T>(result: TaskResult<T>, defaultMs = 5000): number {\n if (!isRetryable(result)) return 0;\n return result.adcpError.retryAfterMs ?? defaultMs;\n}\n"],"mappings":";;;;;;AAMO,SAAS,YAAe,QAAsF;AACnH,SAAO,CAAC,OAAO,WAAW,OAAO,WAAW,aAAa;AAC3D;AAOO,SAAS,cAAiB,QAAuB,YAAY,KAAc;AAChF,MAAI,CAAC,YAAY,MAAM,EAAG,QAAO;AACjC,SAAO,OAAO,UAAU,gBAAgB;AAC1C;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/retry.ts"],"sourcesContent":["import type { TaskResult, TaskResultFailure, AdcpErrorInfo } from '../core/ConversationTypes';\n\n/**\n * Check if a failed TaskResult is retryable (transient error with recovery hint).\n * Always returns false for successful results.\n */\nexport function isRetryable<T>(result: TaskResult<T>): result is TaskResultFailure<T> & { adcpError: AdcpErrorInfo } {\n return !result.success && result.adcpError?.recovery === 'transient';\n}\n\n/**\n * Get the recommended retry delay in milliseconds.\n * Uses the agent-provided retryAfterMs if available, otherwise returns defaultMs.\n * Returns 0 if the result is not retryable.\n */\nexport function getRetryDelay<T>(result: TaskResult<T>, defaultMs = 5000): number {\n if (!isRetryable(result)) return 0;\n return result.adcpError.retryAfterMs ?? defaultMs;\n}\n"],"mappings":"AAMO,SAAS,YAAe,QAAsF;AACnH,SAAO,CAAC,OAAO,WAAW,OAAO,WAAW,aAAa;AAC3D;AAOO,SAAS,cAAiB,QAAuB,YAAY,KAAc;AAChF,MAAI,CAAC,YAAY,MAAM,EAAG,QAAO;AACjC,SAAO,OAAO,UAAU,gBAAgB;AAC1C;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  import { getSignalId, getSignalIssuer } from "./signal-id-builders.mjs";
8
2
  function normalizeDiscoveredSignal(signal) {
9
3
  const signalAgentSegmentId = getSignalActivationId(signal);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/signal-discovery-helpers.ts"],"sourcesContent":["import type { ActivateSignalRequest, GetSignalsResponse, SignalID } from '../types/tools.generated';\nimport { getSignalId, getSignalIssuer } from './signal-id-builders';\nimport type { MutatingRequestInput } from './idempotency';\n\nexport type DiscoveredSignal = NonNullable<GetSignalsResponse['signals']>[number];\n\nexport interface NormalizedDiscoveredSignal {\n /** Original get_signals row. Preserved so helpers never hide seller data. */\n raw: DiscoveredSignal;\n /** Canonical value to pass as activate_signal.signal_agent_segment_id. */\n signalAgentSegmentId: string;\n /** Provenance object returned as signal_id, when the seller provides one. */\n signalId?: SignalID;\n /** signal_id.id, when signal_id is present. Not the activation key. */\n signalIdValue?: string;\n /** signal_id.source, when signal_id is present. */\n signalSource?: SignalID['source'];\n /** data_provider_domain for catalog signals, agent_url for agent-native signals. */\n signalIssuer?: string;\n /** pricing_options[].pricing_option_id values in response order. */\n pricingOptionIds: string[];\n /** Governance metadata copied from the signal row when present. */\n restrictedAttributes: string[];\n /** Governance metadata copied from the signal row when present. */\n policyCategories: string[];\n}\n\nexport type BuildActivateSignalRequestOptions = Omit<\n MutatingRequestInput<ActivateSignalRequest>,\n 'signal_agent_segment_id' | 'pricing_option_id'\n> & {\n /** Snake-case wire field. Takes precedence over pricingOptionId when both are present. */\n pricing_option_id?: string;\n /** Camel-case convenience alias for pricing_option_id. */\n pricingOptionId?: string;\n};\n\n/**\n * Normalize one `get_signals` row into the semantic fields buyers need for\n * the next call. The important invariant: `signalAgentSegmentId` is the\n * activation handle; nested `signalId` is provenance and may differ.\n */\nexport function normalizeDiscoveredSignal(signal: DiscoveredSignal): NormalizedDiscoveredSignal {\n const signalAgentSegmentId = getSignalActivationId(signal);\n const signalId = readSignalId(signal);\n const pricingOptionIds = getSignalPricingOptionIds(signal);\n\n return {\n raw: signal,\n signalAgentSegmentId,\n ...(signalId && {\n signalId,\n signalIdValue: getSignalId(signalId),\n signalSource: signalId.source,\n signalIssuer: getSignalIssuer(signalId),\n }),\n pricingOptionIds,\n restrictedAttributes: readStringArray(signal, 'restricted_attributes'),\n policyCategories: readStringArray(signal, 'policy_categories'),\n };\n}\n\n/**\n * Build an `activate_signal` request from a discovered signal row. The\n * returned object is suitable for `agent.activateSignal(...)`; the SDK will\n * inject `idempotency_key` unless the caller supplied one.\n */\nexport function buildActivateSignalRequest(\n signal: DiscoveredSignal | NormalizedDiscoveredSignal,\n options: BuildActivateSignalRequestOptions\n): MutatingRequestInput<ActivateSignalRequest> {\n const normalized = isNormalizedDiscoveredSignal(signal) ? signal : normalizeDiscoveredSignal(signal);\n const { pricingOptionId, ...wireOptions } = options;\n const pricing_option_id = wireOptions.pricing_option_id ?? pricingOptionId;\n\n return {\n ...wireOptions,\n signal_agent_segment_id: normalized.signalAgentSegmentId,\n ...(pricing_option_id !== undefined && { pricing_option_id }),\n };\n}\n\n/** Return the canonical activation handle from one `get_signals` row. */\nexport function getSignalActivationId(signal: DiscoveredSignal): string {\n const value = (signal as { signal_agent_segment_id?: unknown }).signal_agent_segment_id;\n if (typeof value === 'string' && value.length > 0) return value;\n throw new Error('getSignalActivationId: signal.signal_agent_segment_id is required.');\n}\n\n/** Return pricing option ids from one discovered signal, preserving response order. */\nexport function getSignalPricingOptionIds(signal: DiscoveredSignal): string[] {\n const pricingOptions = (signal as { pricing_options?: unknown }).pricing_options;\n if (!Array.isArray(pricingOptions)) return [];\n return pricingOptions\n .map(option =>\n option && typeof option === 'object' ? (option as { pricing_option_id?: unknown }).pricing_option_id : undefined\n )\n .filter((id): id is string => typeof id === 'string' && id.length > 0);\n}\n\nfunction isNormalizedDiscoveredSignal(\n signal: DiscoveredSignal | NormalizedDiscoveredSignal\n): signal is NormalizedDiscoveredSignal {\n return (\n signal != null &&\n typeof signal === 'object' &&\n 'raw' in signal &&\n typeof (signal as { signalAgentSegmentId?: unknown }).signalAgentSegmentId === 'string'\n );\n}\n\nfunction readSignalId(signal: DiscoveredSignal): SignalID | undefined {\n const value = (signal as { signal_id?: unknown }).signal_id;\n if (isSignalId(value)) return value;\n return undefined;\n}\n\nfunction isSignalId(value: unknown): value is SignalID {\n if (!value || typeof value !== 'object') return false;\n const source = (value as { source?: unknown }).source;\n if (source === 'catalog') {\n return (\n typeof (value as { id?: unknown }).id === 'string' &&\n typeof (value as { data_provider_domain?: unknown }).data_provider_domain === 'string'\n );\n }\n if (source === 'agent') {\n return (\n typeof (value as { id?: unknown }).id === 'string' &&\n typeof (value as { agent_url?: unknown }).agent_url === 'string'\n );\n }\n return false;\n}\n\nfunction readStringArray(signal: DiscoveredSignal, field: 'restricted_attributes' | 'policy_categories'): string[] {\n const value = (signal as Record<string, unknown>)[field];\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === 'string' && item.length > 0);\n}\n"],"mappings":";;;;;;AACA,SAAS,aAAa,uBAAuB;AAyCtC,SAAS,0BAA0B,QAAsD;AAC9F,QAAM,uBAAuB,sBAAsB,MAAM;AACzD,QAAM,WAAW,aAAa,MAAM;AACpC,QAAM,mBAAmB,0BAA0B,MAAM;AAEzD,SAAO;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA,GAAI,YAAY;AAAA,MACd;AAAA,MACA,eAAe,YAAY,QAAQ;AAAA,MACnC,cAAc,SAAS;AAAA,MACvB,cAAc,gBAAgB,QAAQ;AAAA,IACxC;AAAA,IACA;AAAA,IACA,sBAAsB,gBAAgB,QAAQ,uBAAuB;AAAA,IACrE,kBAAkB,gBAAgB,QAAQ,mBAAmB;AAAA,EAC/D;AACF;AAOO,SAAS,2BACd,QACA,SAC6C;AAC7C,QAAM,aAAa,6BAA6B,MAAM,IAAI,SAAS,0BAA0B,MAAM;AACnG,QAAM,EAAE,iBAAiB,GAAG,YAAY,IAAI;AAC5C,QAAM,oBAAoB,YAAY,qBAAqB;AAE3D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,yBAAyB,WAAW;AAAA,IACpC,GAAI,sBAAsB,UAAa,EAAE,kBAAkB;AAAA,EAC7D;AACF;AAGO,SAAS,sBAAsB,QAAkC;AACtE,QAAM,QAAS,OAAiD;AAChE,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,EAAG,QAAO;AAC1D,QAAM,IAAI,MAAM,oEAAoE;AACtF;AAGO,SAAS,0BAA0B,QAAoC;AAC5E,QAAM,iBAAkB,OAAyC;AACjE,MAAI,CAAC,MAAM,QAAQ,cAAc,EAAG,QAAO,CAAC;AAC5C,SAAO,eACJ;AAAA,IAAI,YACH,UAAU,OAAO,WAAW,WAAY,OAA2C,oBAAoB;AAAA,EACzG,EACC,OAAO,CAAC,OAAqB,OAAO,OAAO,YAAY,GAAG,SAAS,CAAC;AACzE;AAEA,SAAS,6BACP,QACsC;AACtC,SACE,UAAU,QACV,OAAO,WAAW,YAClB,SAAS,UACT,OAAQ,OAA8C,yBAAyB;AAEnF;AAEA,SAAS,aAAa,QAAgD;AACpE,QAAM,QAAS,OAAmC;AAClD,MAAI,WAAW,KAAK,EAAG,QAAO;AAC9B,SAAO;AACT;AAEA,SAAS,WAAW,OAAmC;AACrD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,SAAU,MAA+B;AAC/C,MAAI,WAAW,WAAW;AACxB,WACE,OAAQ,MAA2B,OAAO,YAC1C,OAAQ,MAA6C,yBAAyB;AAAA,EAElF;AACA,MAAI,WAAW,SAAS;AACtB,WACE,OAAQ,MAA2B,OAAO,YAC1C,OAAQ,MAAkC,cAAc;AAAA,EAE5D;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,QAA0B,OAAgE;AACjH,QAAM,QAAS,OAAmC,KAAK;AACvD,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,SAAO,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,YAAY,KAAK,SAAS,CAAC;AAC3F;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/signal-discovery-helpers.ts"],"sourcesContent":["import type { ActivateSignalRequest, GetSignalsResponse, SignalID } from '../types/tools.generated';\nimport { getSignalId, getSignalIssuer } from './signal-id-builders';\nimport type { MutatingRequestInput } from './idempotency';\n\nexport type DiscoveredSignal = NonNullable<GetSignalsResponse['signals']>[number];\n\nexport interface NormalizedDiscoveredSignal {\n /** Original get_signals row. Preserved so helpers never hide seller data. */\n raw: DiscoveredSignal;\n /** Canonical value to pass as activate_signal.signal_agent_segment_id. */\n signalAgentSegmentId: string;\n /** Provenance object returned as signal_id, when the seller provides one. */\n signalId?: SignalID;\n /** signal_id.id, when signal_id is present. Not the activation key. */\n signalIdValue?: string;\n /** signal_id.source, when signal_id is present. */\n signalSource?: SignalID['source'];\n /** data_provider_domain for catalog signals, agent_url for agent-native signals. */\n signalIssuer?: string;\n /** pricing_options[].pricing_option_id values in response order. */\n pricingOptionIds: string[];\n /** Governance metadata copied from the signal row when present. */\n restrictedAttributes: string[];\n /** Governance metadata copied from the signal row when present. */\n policyCategories: string[];\n}\n\nexport type BuildActivateSignalRequestOptions = Omit<\n MutatingRequestInput<ActivateSignalRequest>,\n 'signal_agent_segment_id' | 'pricing_option_id'\n> & {\n /** Snake-case wire field. Takes precedence over pricingOptionId when both are present. */\n pricing_option_id?: string;\n /** Camel-case convenience alias for pricing_option_id. */\n pricingOptionId?: string;\n};\n\n/**\n * Normalize one `get_signals` row into the semantic fields buyers need for\n * the next call. The important invariant: `signalAgentSegmentId` is the\n * activation handle; nested `signalId` is provenance and may differ.\n */\nexport function normalizeDiscoveredSignal(signal: DiscoveredSignal): NormalizedDiscoveredSignal {\n const signalAgentSegmentId = getSignalActivationId(signal);\n const signalId = readSignalId(signal);\n const pricingOptionIds = getSignalPricingOptionIds(signal);\n\n return {\n raw: signal,\n signalAgentSegmentId,\n ...(signalId && {\n signalId,\n signalIdValue: getSignalId(signalId),\n signalSource: signalId.source,\n signalIssuer: getSignalIssuer(signalId),\n }),\n pricingOptionIds,\n restrictedAttributes: readStringArray(signal, 'restricted_attributes'),\n policyCategories: readStringArray(signal, 'policy_categories'),\n };\n}\n\n/**\n * Build an `activate_signal` request from a discovered signal row. The\n * returned object is suitable for `agent.activateSignal(...)`; the SDK will\n * inject `idempotency_key` unless the caller supplied one.\n */\nexport function buildActivateSignalRequest(\n signal: DiscoveredSignal | NormalizedDiscoveredSignal,\n options: BuildActivateSignalRequestOptions\n): MutatingRequestInput<ActivateSignalRequest> {\n const normalized = isNormalizedDiscoveredSignal(signal) ? signal : normalizeDiscoveredSignal(signal);\n const { pricingOptionId, ...wireOptions } = options;\n const pricing_option_id = wireOptions.pricing_option_id ?? pricingOptionId;\n\n return {\n ...wireOptions,\n signal_agent_segment_id: normalized.signalAgentSegmentId,\n ...(pricing_option_id !== undefined && { pricing_option_id }),\n };\n}\n\n/** Return the canonical activation handle from one `get_signals` row. */\nexport function getSignalActivationId(signal: DiscoveredSignal): string {\n const value = (signal as { signal_agent_segment_id?: unknown }).signal_agent_segment_id;\n if (typeof value === 'string' && value.length > 0) return value;\n throw new Error('getSignalActivationId: signal.signal_agent_segment_id is required.');\n}\n\n/** Return pricing option ids from one discovered signal, preserving response order. */\nexport function getSignalPricingOptionIds(signal: DiscoveredSignal): string[] {\n const pricingOptions = (signal as { pricing_options?: unknown }).pricing_options;\n if (!Array.isArray(pricingOptions)) return [];\n return pricingOptions\n .map(option =>\n option && typeof option === 'object' ? (option as { pricing_option_id?: unknown }).pricing_option_id : undefined\n )\n .filter((id): id is string => typeof id === 'string' && id.length > 0);\n}\n\nfunction isNormalizedDiscoveredSignal(\n signal: DiscoveredSignal | NormalizedDiscoveredSignal\n): signal is NormalizedDiscoveredSignal {\n return (\n signal != null &&\n typeof signal === 'object' &&\n 'raw' in signal &&\n typeof (signal as { signalAgentSegmentId?: unknown }).signalAgentSegmentId === 'string'\n );\n}\n\nfunction readSignalId(signal: DiscoveredSignal): SignalID | undefined {\n const value = (signal as { signal_id?: unknown }).signal_id;\n if (isSignalId(value)) return value;\n return undefined;\n}\n\nfunction isSignalId(value: unknown): value is SignalID {\n if (!value || typeof value !== 'object') return false;\n const source = (value as { source?: unknown }).source;\n if (source === 'catalog') {\n return (\n typeof (value as { id?: unknown }).id === 'string' &&\n typeof (value as { data_provider_domain?: unknown }).data_provider_domain === 'string'\n );\n }\n if (source === 'agent') {\n return (\n typeof (value as { id?: unknown }).id === 'string' &&\n typeof (value as { agent_url?: unknown }).agent_url === 'string'\n );\n }\n return false;\n}\n\nfunction readStringArray(signal: DiscoveredSignal, field: 'restricted_attributes' | 'policy_categories'): string[] {\n const value = (signal as Record<string, unknown>)[field];\n if (!Array.isArray(value)) return [];\n return value.filter((item): item is string => typeof item === 'string' && item.length > 0);\n}\n"],"mappings":"AACA,SAAS,aAAa,uBAAuB;AAyCtC,SAAS,0BAA0B,QAAsD;AAC9F,QAAM,uBAAuB,sBAAsB,MAAM;AACzD,QAAM,WAAW,aAAa,MAAM;AACpC,QAAM,mBAAmB,0BAA0B,MAAM;AAEzD,SAAO;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA,GAAI,YAAY;AAAA,MACd;AAAA,MACA,eAAe,YAAY,QAAQ;AAAA,MACnC,cAAc,SAAS;AAAA,MACvB,cAAc,gBAAgB,QAAQ;AAAA,IACxC;AAAA,IACA;AAAA,IACA,sBAAsB,gBAAgB,QAAQ,uBAAuB;AAAA,IACrE,kBAAkB,gBAAgB,QAAQ,mBAAmB;AAAA,EAC/D;AACF;AAOO,SAAS,2BACd,QACA,SAC6C;AAC7C,QAAM,aAAa,6BAA6B,MAAM,IAAI,SAAS,0BAA0B,MAAM;AACnG,QAAM,EAAE,iBAAiB,GAAG,YAAY,IAAI;AAC5C,QAAM,oBAAoB,YAAY,qBAAqB;AAE3D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,yBAAyB,WAAW;AAAA,IACpC,GAAI,sBAAsB,UAAa,EAAE,kBAAkB;AAAA,EAC7D;AACF;AAGO,SAAS,sBAAsB,QAAkC;AACtE,QAAM,QAAS,OAAiD;AAChE,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,EAAG,QAAO;AAC1D,QAAM,IAAI,MAAM,oEAAoE;AACtF;AAGO,SAAS,0BAA0B,QAAoC;AAC5E,QAAM,iBAAkB,OAAyC;AACjE,MAAI,CAAC,MAAM,QAAQ,cAAc,EAAG,QAAO,CAAC;AAC5C,SAAO,eACJ;AAAA,IAAI,YACH,UAAU,OAAO,WAAW,WAAY,OAA2C,oBAAoB;AAAA,EACzG,EACC,OAAO,CAAC,OAAqB,OAAO,OAAO,YAAY,GAAG,SAAS,CAAC;AACzE;AAEA,SAAS,6BACP,QACsC;AACtC,SACE,UAAU,QACV,OAAO,WAAW,YAClB,SAAS,UACT,OAAQ,OAA8C,yBAAyB;AAEnF;AAEA,SAAS,aAAa,QAAgD;AACpE,QAAM,QAAS,OAAmC;AAClD,MAAI,WAAW,KAAK,EAAG,QAAO;AAC9B,SAAO;AACT;AAEA,SAAS,WAAW,OAAmC;AACrD,MAAI,CAAC,SAAS,OAAO,UAAU,SAAU,QAAO;AAChD,QAAM,SAAU,MAA+B;AAC/C,MAAI,WAAW,WAAW;AACxB,WACE,OAAQ,MAA2B,OAAO,YAC1C,OAAQ,MAA6C,yBAAyB;AAAA,EAElF;AACA,MAAI,WAAW,SAAS;AACtB,WACE,OAAQ,MAA2B,OAAO,YAC1C,OAAQ,MAAkC,cAAc;AAAA,EAE5D;AACA,SAAO;AACT;AAEA,SAAS,gBAAgB,QAA0B,OAAgE;AACjH,QAAM,QAAS,OAAmC,KAAK;AACvD,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,SAAO,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,YAAY,KAAK,SAAS,CAAC;AAC3F;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  function catalogSignalId(fields) {
8
2
  return { ...fields, source: "catalog" };
9
3
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/signal-id-builders.ts"],"sourcesContent":["// Typed factory helpers for `SignalID` — provenance tuple used in\n// `signal_ids` filters and as the `signal_id` field on `Signal` records.\n// Schema oneOf on `source: \"catalog\" | \"agent\"`. Adopters emit bare ID\n// strings for `signal_ids` filters even though the wire shape is an array\n// of provenance objects. SHAPE-GOTCHAS §2.\n\nimport type { SignalID } from '../types/core.generated';\n\ntype CatalogSignal = Extract<SignalID, { source: 'catalog' }>;\ntype AgentSignal = Extract<SignalID, { source: 'agent' }>;\ntype Tagged<T, Tag extends string> = Omit<T, 'source'> & { source: Tag };\n\n/** Build a `catalog`-variant `SignalID`. Verifiable via the providers adagents.json. */\nexport function catalogSignalId(fields: Omit<CatalogSignal, 'source'>): Tagged<CatalogSignal, 'catalog'> {\n return { ...fields, source: 'catalog' };\n}\n\n/** Build an `agent`-variant `SignalID`. Agent-native segments not in a catalog. */\nexport function agentSignalId(fields: Omit<AgentSignal, 'source'>): Tagged<AgentSignal, 'agent'> {\n return { ...fields, source: 'agent' };\n}\n\n/** Grouped accessor for both `SignalID` variants. */\nexport const signalId = {\n catalog: catalogSignalId,\n agent: agentSignalId,\n} as const;\n\n/**\n * Return the segment identifier from a `SignalID`, independent of source.\n * Both `catalog` and `agent` variants carry the segment identifier in `id`.\n *\n * @example\n * getSignalId(signalId.catalog({ data_provider_domain: 'polk.com', id: 'likely_ev_buyers' }))\n * // → 'likely_ev_buyers'\n */\nexport function getSignalId(sid: SignalID): string {\n return sid.id;\n}\n\n/**\n * Return the issuer identifier from a `SignalID`, independent of source.\n * - `source: 'catalog'` → `data_provider_domain` (e.g. `'polk.com'`)\n * - `source: 'agent'` → `agent_url` (e.g. `'https://liveramp.com/.well-known/adcp/signals'`)\n *\n * @example\n * getSignalIssuer(signalId.catalog({ data_provider_domain: 'polk.com', id: 'likely_ev_buyers' }))\n * // → 'polk.com'\n */\nexport function getSignalIssuer(sid: SignalID): string {\n if (sid.source === 'catalog') return sid.data_provider_domain;\n if (sid.source === 'agent') return sid.agent_url;\n const _exhaustive: never = sid;\n throw new Error(`Unhandled SignalID source: ${String((_exhaustive as { source: unknown }).source)}`);\n}\n"],"mappings":";;;;;;AAaO,SAAS,gBAAgB,QAAyE;AACvG,SAAO,EAAE,GAAG,QAAQ,QAAQ,UAAU;AACxC;AAGO,SAAS,cAAc,QAAmE;AAC/F,SAAO,EAAE,GAAG,QAAQ,QAAQ,QAAQ;AACtC;AAGO,MAAM,WAAW;AAAA,EACtB,SAAS;AAAA,EACT,OAAO;AACT;AAUO,SAAS,YAAY,KAAuB;AACjD,SAAO,IAAI;AACb;AAWO,SAAS,gBAAgB,KAAuB;AACrD,MAAI,IAAI,WAAW,UAAW,QAAO,IAAI;AACzC,MAAI,IAAI,WAAW,QAAS,QAAO,IAAI;AACvC,QAAM,cAAqB;AAC3B,QAAM,IAAI,MAAM,8BAA8B,OAAQ,YAAoC,MAAM,CAAC,EAAE;AACrG;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/signal-id-builders.ts"],"sourcesContent":["// Typed factory helpers for `SignalID` — provenance tuple used in\n// `signal_ids` filters and as the `signal_id` field on `Signal` records.\n// Schema oneOf on `source: \"catalog\" | \"agent\"`. Adopters emit bare ID\n// strings for `signal_ids` filters even though the wire shape is an array\n// of provenance objects. SHAPE-GOTCHAS §2.\n\nimport type { SignalID } from '../types/core.generated';\n\ntype CatalogSignal = Extract<SignalID, { source: 'catalog' }>;\ntype AgentSignal = Extract<SignalID, { source: 'agent' }>;\ntype Tagged<T, Tag extends string> = Omit<T, 'source'> & { source: Tag };\n\n/** Build a `catalog`-variant `SignalID`. Verifiable via the providers adagents.json. */\nexport function catalogSignalId(fields: Omit<CatalogSignal, 'source'>): Tagged<CatalogSignal, 'catalog'> {\n return { ...fields, source: 'catalog' };\n}\n\n/** Build an `agent`-variant `SignalID`. Agent-native segments not in a catalog. */\nexport function agentSignalId(fields: Omit<AgentSignal, 'source'>): Tagged<AgentSignal, 'agent'> {\n return { ...fields, source: 'agent' };\n}\n\n/** Grouped accessor for both `SignalID` variants. */\nexport const signalId = {\n catalog: catalogSignalId,\n agent: agentSignalId,\n} as const;\n\n/**\n * Return the segment identifier from a `SignalID`, independent of source.\n * Both `catalog` and `agent` variants carry the segment identifier in `id`.\n *\n * @example\n * getSignalId(signalId.catalog({ data_provider_domain: 'polk.com', id: 'likely_ev_buyers' }))\n * // → 'likely_ev_buyers'\n */\nexport function getSignalId(sid: SignalID): string {\n return sid.id;\n}\n\n/**\n * Return the issuer identifier from a `SignalID`, independent of source.\n * - `source: 'catalog'` → `data_provider_domain` (e.g. `'polk.com'`)\n * - `source: 'agent'` → `agent_url` (e.g. `'https://liveramp.com/.well-known/adcp/signals'`)\n *\n * @example\n * getSignalIssuer(signalId.catalog({ data_provider_domain: 'polk.com', id: 'likely_ev_buyers' }))\n * // → 'polk.com'\n */\nexport function getSignalIssuer(sid: SignalID): string {\n if (sid.source === 'catalog') return sid.data_provider_domain;\n if (sid.source === 'agent') return sid.agent_url;\n const _exhaustive: never = sid;\n throw new Error(`Unhandled SignalID source: ${String((_exhaustive as { source: unknown }).source)}`);\n}\n"],"mappings":"AAaO,SAAS,gBAAgB,QAAyE;AACvG,SAAO,EAAE,GAAG,QAAQ,QAAQ,UAAU;AACxC;AAGO,SAAS,cAAc,QAAmE;AAC/F,SAAO,EAAE,GAAG,QAAQ,QAAQ,QAAQ;AACtC;AAGO,MAAM,WAAW;AAAA,EACtB,SAAS;AAAA,EACT,OAAO;AACT;AAUO,SAAS,YAAY,KAAuB;AACjD,SAAO,IAAI;AACb;AAWO,SAAS,gBAAgB,KAAuB;AACrD,MAAI,IAAI,WAAW,UAAW,QAAO,IAAI;AACzC,MAAI,IAAI,WAAW,QAAS,QAAO,IAAI;AACvC,QAAM,cAAqB;AAC3B,QAAM,IAAI,MAAM,8BAA8B,OAAQ,YAAoC,MAAM,CAAC,EAAE;AACrG;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  function stripAssetTypeFromManifest(assets) {
8
2
  if (typeof assets !== "object" || assets === null || Array.isArray(assets)) return assets;
9
3
  const out = {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/sync-creatives-adapter.ts"],"sourcesContent":["/**\n * Sync Creatives Adapter\n *\n * Adapts v3 `sync_creatives` request payloads for v2.5 servers. The public\n * surface (`adaptSyncCreativesRequestForV2`) is unchanged; all conversions\n * are transparent to callers.\n *\n * v3 → v2 field mappings applied here:\n * - `account` / `adcp_major_version` — stripped (v3-only top-level fields)\n * - `catalogs` per creative — stripped (v3-only)\n * - `status` enum ('approved' | 'rejected') → `approved` boolean\n * - `assets` — role-keyed manifest passed through, but the inner\n * `asset_type` discriminator is stripped from each role's value. v3\n * uses `asset_type` as the asset-shape discriminator (the const\n * embedded in the asset). v2.5 uses the role KEY as the discriminator\n * (the manifest property name); each variant in v2.5's `oneOf` does\n * not declare `asset_type`. Leaving it in produces ambiguous oneOf\n * matches against v2.5 sellers that strict-validate on extras.\n * - No `assets` field — omitted.\n *\n * @internal Not part of the public @adcp/sdk API surface.\n */\n\n/**\n * Strip the v3 `asset_type` discriminator from each role's asset value.\n * v2.5 uses the role key as the discriminator — `asset_type` is a v3-only\n * field that confuses v2.5 oneOf validation. Pass through anything that\n * isn't a plain object (defensive — fixtures and tests sometimes use\n * synthesized non-object values).\n */\nfunction stripAssetTypeFromManifest(assets: unknown): unknown {\n if (typeof assets !== 'object' || assets === null || Array.isArray(assets)) return assets;\n const out: Record<string, unknown> = {};\n for (const [role, value] of Object.entries(assets as Record<string, unknown>)) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const { asset_type: _ignored, ...rest } = value as Record<string, unknown>;\n out[role] = rest;\n } else {\n out[role] = value;\n }\n }\n return out;\n}\n\n/**\n * Adapt a single creative for a v2 server.\n * Strips v3-only fields, converts `status` enum → `approved` boolean,\n * and strips the v3 `asset_type` discriminator from each role's asset\n * (v2.5 discriminates by role key, not by an embedded `asset_type`).\n */\nfunction adaptCreativeForV2(creative: any): any {\n const { catalogs, status, assets, ...rest } = creative;\n\n const base: any = { ...rest };\n\n // Convert v3 status enum → v2 approved boolean\n if (status === 'approved') {\n base.approved = true;\n } else if (status === 'rejected') {\n base.approved = false;\n }\n // Any other status value (or absent) — omit approved entirely\n\n if (assets === undefined) {\n return base;\n }\n\n return { ...base, assets: stripAssetTypeFromManifest(assets) };\n}\n\n/**\n * Adapt a sync_creatives request for a v2 server.\n * Strips v3-only top-level fields and adapts each creative.\n */\nexport function adaptSyncCreativesRequestForV2(request: any): any {\n const { account, adcp_major_version, ...rest } = request;\n\n return {\n ...rest,\n ...(rest.creatives && {\n creatives: rest.creatives.map(adaptCreativeForV2),\n }),\n };\n}\n"],"mappings":";;;;;;AA8BA,SAAS,2BAA2B,QAA0B;AAC5D,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,MAAM,EAAG,QAAO;AACnF,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAiC,GAAG;AAC7E,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,GAAG;AACxE,YAAM,EAAE,YAAY,UAAU,GAAG,KAAK,IAAI;AAC1C,UAAI,IAAI,IAAI;AAAA,IACd,OAAO;AACL,UAAI,IAAI,IAAI;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAQA,SAAS,mBAAmB,UAAoB;AAC9C,QAAM,EAAE,UAAU,QAAQ,QAAQ,GAAG,KAAK,IAAI;AAE9C,QAAM,OAAY,EAAE,GAAG,KAAK;AAG5B,MAAI,WAAW,YAAY;AACzB,SAAK,WAAW;AAAA,EAClB,WAAW,WAAW,YAAY;AAChC,SAAK,WAAW;AAAA,EAClB;AAGA,MAAI,WAAW,QAAW;AACxB,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,GAAG,MAAM,QAAQ,2BAA2B,MAAM,EAAE;AAC/D;AAMO,SAAS,+BAA+B,SAAmB;AAChE,QAAM,EAAE,SAAS,oBAAoB,GAAG,KAAK,IAAI;AAEjD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,KAAK,aAAa;AAAA,MACpB,WAAW,KAAK,UAAU,IAAI,kBAAkB;AAAA,IAClD;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/sync-creatives-adapter.ts"],"sourcesContent":["/**\n * Sync Creatives Adapter\n *\n * Adapts v3 `sync_creatives` request payloads for v2.5 servers. The public\n * surface (`adaptSyncCreativesRequestForV2`) is unchanged; all conversions\n * are transparent to callers.\n *\n * v3 → v2 field mappings applied here:\n * - `account` / `adcp_major_version` — stripped (v3-only top-level fields)\n * - `catalogs` per creative — stripped (v3-only)\n * - `status` enum ('approved' | 'rejected') → `approved` boolean\n * - `assets` — role-keyed manifest passed through, but the inner\n * `asset_type` discriminator is stripped from each role's value. v3\n * uses `asset_type` as the asset-shape discriminator (the const\n * embedded in the asset). v2.5 uses the role KEY as the discriminator\n * (the manifest property name); each variant in v2.5's `oneOf` does\n * not declare `asset_type`. Leaving it in produces ambiguous oneOf\n * matches against v2.5 sellers that strict-validate on extras.\n * - No `assets` field — omitted.\n *\n * @internal Not part of the public @adcp/sdk API surface.\n */\n\n/**\n * Strip the v3 `asset_type` discriminator from each role's asset value.\n * v2.5 uses the role key as the discriminator — `asset_type` is a v3-only\n * field that confuses v2.5 oneOf validation. Pass through anything that\n * isn't a plain object (defensive — fixtures and tests sometimes use\n * synthesized non-object values).\n */\nfunction stripAssetTypeFromManifest(assets: unknown): unknown {\n if (typeof assets !== 'object' || assets === null || Array.isArray(assets)) return assets;\n const out: Record<string, unknown> = {};\n for (const [role, value] of Object.entries(assets as Record<string, unknown>)) {\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n const { asset_type: _ignored, ...rest } = value as Record<string, unknown>;\n out[role] = rest;\n } else {\n out[role] = value;\n }\n }\n return out;\n}\n\n/**\n * Adapt a single creative for a v2 server.\n * Strips v3-only fields, converts `status` enum → `approved` boolean,\n * and strips the v3 `asset_type` discriminator from each role's asset\n * (v2.5 discriminates by role key, not by an embedded `asset_type`).\n */\nfunction adaptCreativeForV2(creative: any): any {\n const { catalogs, status, assets, ...rest } = creative;\n\n const base: any = { ...rest };\n\n // Convert v3 status enum → v2 approved boolean\n if (status === 'approved') {\n base.approved = true;\n } else if (status === 'rejected') {\n base.approved = false;\n }\n // Any other status value (or absent) — omit approved entirely\n\n if (assets === undefined) {\n return base;\n }\n\n return { ...base, assets: stripAssetTypeFromManifest(assets) };\n}\n\n/**\n * Adapt a sync_creatives request for a v2 server.\n * Strips v3-only top-level fields and adapts each creative.\n */\nexport function adaptSyncCreativesRequestForV2(request: any): any {\n const { account, adcp_major_version, ...rest } = request;\n\n return {\n ...rest,\n ...(rest.creatives && {\n creatives: rest.creatives.map(adaptCreativeForV2),\n }),\n };\n}\n"],"mappings":"AA8BA,SAAS,2BAA2B,QAA0B;AAC5D,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,MAAM,EAAG,QAAO;AACnF,QAAM,MAA+B,CAAC;AACtC,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAiC,GAAG;AAC7E,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,GAAG;AACxE,YAAM,EAAE,YAAY,UAAU,GAAG,KAAK,IAAI;AAC1C,UAAI,IAAI,IAAI;AAAA,IACd,OAAO;AACL,UAAI,IAAI,IAAI;AAAA,IACd;AAAA,EACF;AACA,SAAO;AACT;AAQA,SAAS,mBAAmB,UAAoB;AAC9C,QAAM,EAAE,UAAU,QAAQ,QAAQ,GAAG,KAAK,IAAI;AAE9C,QAAM,OAAY,EAAE,GAAG,KAAK;AAG5B,MAAI,WAAW,YAAY;AACzB,SAAK,WAAW;AAAA,EAClB,WAAW,WAAW,YAAY;AAChC,SAAK,WAAW;AAAA,EAClB;AAGA,MAAI,WAAW,QAAW;AACxB,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,GAAG,MAAM,QAAQ,2BAA2B,MAAM,EAAE;AAC/D;AAMO,SAAS,+BAA+B,SAAmB;AAChE,QAAM,EAAE,SAAS,oBAAoB,GAAG,KAAK,IAAI;AAEjD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAI,KAAK,aAAa;AAAA,MACpB,WAAW,KAAK,UAAU,IAAI,kBAAkB;AAAA,IAClD;AAAA,EACF;AACF;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  import { ADCP_STATUS, extractAdcpTaskStatusFromPayload, isAdcpStatus } from "../core/task-status.mjs";
8
2
  const REDUCED_PRECISION_HINT = "Pass options.toolName for maximum precision when reconciling payload status fields that can collide with domain statuses.";
9
3
  function resolveTaskState(result, options = {}) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/task-state.ts"],"sourcesContent":["import type { TaskResult, TaskStatus } from '../core/ConversationTypes';\nimport { ADCP_STATUS, type ADCPStatus, extractAdcpTaskStatusFromPayload, isAdcpStatus } from '../core/task-status';\n\nexport type EffectiveTaskState =\n | Extract<\n TaskStatus,\n | 'submitted'\n | 'working'\n | 'input-required'\n | 'auth-required'\n | 'completed'\n | 'failed'\n | 'rejected'\n | 'canceled'\n | 'deferred'\n | 'governance-denied'\n >\n | 'unknown';\n\nexport interface ResolveTaskStateOptions {\n /**\n * AdCP tool name that produced the result. Supplying this lets future SDK\n * versions apply tool-specific reconciliation without changing the API shape.\n */\n toolName?: string;\n}\n\nexport interface ResolvedTaskState<T> {\n /** Client/wrapper-level TaskResult status. */\n wrapperStatus: TaskResult<T>['status'];\n /** Raw payload `status` value when one is present. May be a domain status. */\n payloadStatus?: string;\n /** The task state callers should branch on. */\n effectiveState: EffectiveTaskState;\n /** Original result data, preserved as-is. */\n data: T | undefined;\n /** Advisory note when the helper had less context than it can accept. */\n hint?: string;\n}\n\nconst REDUCED_PRECISION_HINT =\n 'Pass options.toolName for maximum precision when reconciling payload status fields that can collide with domain statuses.';\n\n/**\n * Reconcile a TaskResult wrapper status with an unwrapped AdCP response payload\n * status. This follows the same task-envelope guard as ProtocolResponseParser:\n * shared literals such as `canceled` and `failed` only count as task lifecycle\n * statuses when the payload shape looks like a task envelope, not a domain\n * object such as a media buy or creative.\n */\nexport function resolveTaskState<T>(\n result: TaskResult<T>,\n options: ResolveTaskStateOptions = {}\n): ResolvedTaskState<T> {\n const wrapperStatus = result.status;\n const data = result.data;\n const payloadStatus = extractRawPayloadStatus(data);\n\n if (wrapperStatus === 'failed' || wrapperStatus === 'governance-denied') {\n return buildResolved(result, {\n data,\n payloadStatus,\n effectiveState: wrapperStatus,\n includeHint: !options.toolName,\n });\n }\n\n const payloadTaskStatus = extractPayloadTaskStatus(data);\n const effectiveState = payloadTaskStatus ?? normalizeWrapperStatus(wrapperStatus);\n\n return buildResolved(result, {\n data,\n payloadStatus,\n effectiveState,\n includeHint: !options.toolName,\n });\n}\n\nfunction buildResolved<T>(\n result: TaskResult<T>,\n fields: {\n data: T | undefined;\n payloadStatus: string | undefined;\n effectiveState: EffectiveTaskState;\n includeHint: boolean;\n }\n): ResolvedTaskState<T> {\n return {\n wrapperStatus: result.status,\n ...(fields.payloadStatus !== undefined ? { payloadStatus: fields.payloadStatus } : {}),\n effectiveState: fields.effectiveState,\n data: fields.data,\n ...(fields.includeHint ? { hint: REDUCED_PRECISION_HINT } : {}),\n };\n}\n\nfunction normalizeWrapperStatus(status: TaskResult<unknown>['status']): EffectiveTaskState {\n if (status === 'completed') return ADCP_STATUS.COMPLETED;\n if (status === 'working') return ADCP_STATUS.WORKING;\n if (status === 'submitted') return ADCP_STATUS.SUBMITTED;\n if (status === 'input-required') return ADCP_STATUS.INPUT_REQUIRED;\n if (status === 'auth-required') return ADCP_STATUS.AUTH_REQUIRED;\n if (status === 'deferred') return 'deferred';\n if (status === 'failed') return ADCP_STATUS.FAILED;\n if (status === 'governance-denied') return 'governance-denied';\n return ADCP_STATUS.UNKNOWN;\n}\n\nfunction extractRawPayloadStatus(payload: unknown): string | undefined {\n const direct = getObjectRecord(payload);\n if (!direct) return undefined;\n if (typeof direct.status === 'string') return direct.status;\n\n const nested = getObjectRecord(direct.response);\n if (typeof nested?.status === 'string') return nested.status;\n\n const task = getObjectRecord(direct.task);\n if (typeof task?.status === 'string') return task.status;\n\n return undefined;\n}\n\nfunction extractPayloadTaskStatus(payload: unknown): EffectiveTaskState | undefined {\n const direct = extractTaskStatusFromRecord(payload);\n if (direct) return direct;\n\n const record = getObjectRecord(payload);\n if (!record) return undefined;\n\n const nested = extractTaskStatusFromRecord(record.response);\n if (nested) return nested;\n\n return extractTaskStatusFromRecord(record.task);\n}\n\nfunction extractTaskStatusFromRecord(payload: unknown): ADCPStatus | undefined {\n const envelopeStatus = extractAdcpTaskStatusFromPayload(payload);\n if (envelopeStatus) return envelopeStatus;\n\n const record = getObjectRecord(payload);\n if (!record || !isTaskStatusPayload(record) || !isAdcpStatus(record.status)) return undefined;\n return record.status;\n}\n\nfunction isTaskStatusPayload(record: Record<string, unknown>): boolean {\n return (\n typeof record.task_id === 'string' &&\n (typeof record.task_type === 'string' ||\n typeof record.protocol === 'string' ||\n typeof record.created_at === 'string' ||\n typeof record.updated_at === 'string')\n );\n}\n\nfunction getObjectRecord(value: unknown): Record<string, unknown> | undefined {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) return undefined;\n return value as Record<string, unknown>;\n}\n"],"mappings":";;;;;;AACA,SAAS,aAA8B,kCAAkC,oBAAoB;AAuC7F,MAAM,yBACJ;AASK,SAAS,iBACd,QACA,UAAmC,CAAC,GACd;AACtB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,OAAO,OAAO;AACpB,QAAM,gBAAgB,wBAAwB,IAAI;AAElD,MAAI,kBAAkB,YAAY,kBAAkB,qBAAqB;AACvE,WAAO,cAAc,QAAQ;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,aAAa,CAAC,QAAQ;AAAA,IACxB,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,yBAAyB,IAAI;AACvD,QAAM,iBAAiB,qBAAqB,uBAAuB,aAAa;AAEhF,SAAO,cAAc,QAAQ;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,CAAC,QAAQ;AAAA,EACxB,CAAC;AACH;AAEA,SAAS,cACP,QACA,QAMsB;AACtB,SAAO;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,GAAI,OAAO,kBAAkB,SAAY,EAAE,eAAe,OAAO,cAAc,IAAI,CAAC;AAAA,IACpF,gBAAgB,OAAO;AAAA,IACvB,MAAM,OAAO;AAAA,IACb,GAAI,OAAO,cAAc,EAAE,MAAM,uBAAuB,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,SAAS,uBAAuB,QAA2D;AACzF,MAAI,WAAW,YAAa,QAAO,YAAY;AAC/C,MAAI,WAAW,UAAW,QAAO,YAAY;AAC7C,MAAI,WAAW,YAAa,QAAO,YAAY;AAC/C,MAAI,WAAW,iBAAkB,QAAO,YAAY;AACpD,MAAI,WAAW,gBAAiB,QAAO,YAAY;AACnD,MAAI,WAAW,WAAY,QAAO;AAClC,MAAI,WAAW,SAAU,QAAO,YAAY;AAC5C,MAAI,WAAW,oBAAqB,QAAO;AAC3C,SAAO,YAAY;AACrB;AAEA,SAAS,wBAAwB,SAAsC;AACrE,QAAM,SAAS,gBAAgB,OAAO;AACtC,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,WAAW,SAAU,QAAO,OAAO;AAErD,QAAM,SAAS,gBAAgB,OAAO,QAAQ;AAC9C,MAAI,OAAO,QAAQ,WAAW,SAAU,QAAO,OAAO;AAEtD,QAAM,OAAO,gBAAgB,OAAO,IAAI;AACxC,MAAI,OAAO,MAAM,WAAW,SAAU,QAAO,KAAK;AAElD,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAkD;AAClF,QAAM,SAAS,4BAA4B,OAAO;AAClD,MAAI,OAAQ,QAAO;AAEnB,QAAM,SAAS,gBAAgB,OAAO;AACtC,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,SAAS,4BAA4B,OAAO,QAAQ;AAC1D,MAAI,OAAQ,QAAO;AAEnB,SAAO,4BAA4B,OAAO,IAAI;AAChD;AAEA,SAAS,4BAA4B,SAA0C;AAC7E,QAAM,iBAAiB,iCAAiC,OAAO;AAC/D,MAAI,eAAgB,QAAO;AAE3B,QAAM,SAAS,gBAAgB,OAAO;AACtC,MAAI,CAAC,UAAU,CAAC,oBAAoB,MAAM,KAAK,CAAC,aAAa,OAAO,MAAM,EAAG,QAAO;AACpF,SAAO,OAAO;AAChB;AAEA,SAAS,oBAAoB,QAA0C;AACrE,SACE,OAAO,OAAO,YAAY,aACzB,OAAO,OAAO,cAAc,YAC3B,OAAO,OAAO,aAAa,YAC3B,OAAO,OAAO,eAAe,YAC7B,OAAO,OAAO,eAAe;AAEnC;AAEA,SAAS,gBAAgB,OAAqD;AAC5E,MAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AAC/E,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/task-state.ts"],"sourcesContent":["import type { TaskResult, TaskStatus } from '../core/ConversationTypes';\nimport { ADCP_STATUS, type ADCPStatus, extractAdcpTaskStatusFromPayload, isAdcpStatus } from '../core/task-status';\n\nexport type EffectiveTaskState =\n | Extract<\n TaskStatus,\n | 'submitted'\n | 'working'\n | 'input-required'\n | 'auth-required'\n | 'completed'\n | 'failed'\n | 'rejected'\n | 'canceled'\n | 'deferred'\n | 'governance-denied'\n >\n | 'unknown';\n\nexport interface ResolveTaskStateOptions {\n /**\n * AdCP tool name that produced the result. Supplying this lets future SDK\n * versions apply tool-specific reconciliation without changing the API shape.\n */\n toolName?: string;\n}\n\nexport interface ResolvedTaskState<T> {\n /** Client/wrapper-level TaskResult status. */\n wrapperStatus: TaskResult<T>['status'];\n /** Raw payload `status` value when one is present. May be a domain status. */\n payloadStatus?: string;\n /** The task state callers should branch on. */\n effectiveState: EffectiveTaskState;\n /** Original result data, preserved as-is. */\n data: T | undefined;\n /** Advisory note when the helper had less context than it can accept. */\n hint?: string;\n}\n\nconst REDUCED_PRECISION_HINT =\n 'Pass options.toolName for maximum precision when reconciling payload status fields that can collide with domain statuses.';\n\n/**\n * Reconcile a TaskResult wrapper status with an unwrapped AdCP response payload\n * status. This follows the same task-envelope guard as ProtocolResponseParser:\n * shared literals such as `canceled` and `failed` only count as task lifecycle\n * statuses when the payload shape looks like a task envelope, not a domain\n * object such as a media buy or creative.\n */\nexport function resolveTaskState<T>(\n result: TaskResult<T>,\n options: ResolveTaskStateOptions = {}\n): ResolvedTaskState<T> {\n const wrapperStatus = result.status;\n const data = result.data;\n const payloadStatus = extractRawPayloadStatus(data);\n\n if (wrapperStatus === 'failed' || wrapperStatus === 'governance-denied') {\n return buildResolved(result, {\n data,\n payloadStatus,\n effectiveState: wrapperStatus,\n includeHint: !options.toolName,\n });\n }\n\n const payloadTaskStatus = extractPayloadTaskStatus(data);\n const effectiveState = payloadTaskStatus ?? normalizeWrapperStatus(wrapperStatus);\n\n return buildResolved(result, {\n data,\n payloadStatus,\n effectiveState,\n includeHint: !options.toolName,\n });\n}\n\nfunction buildResolved<T>(\n result: TaskResult<T>,\n fields: {\n data: T | undefined;\n payloadStatus: string | undefined;\n effectiveState: EffectiveTaskState;\n includeHint: boolean;\n }\n): ResolvedTaskState<T> {\n return {\n wrapperStatus: result.status,\n ...(fields.payloadStatus !== undefined ? { payloadStatus: fields.payloadStatus } : {}),\n effectiveState: fields.effectiveState,\n data: fields.data,\n ...(fields.includeHint ? { hint: REDUCED_PRECISION_HINT } : {}),\n };\n}\n\nfunction normalizeWrapperStatus(status: TaskResult<unknown>['status']): EffectiveTaskState {\n if (status === 'completed') return ADCP_STATUS.COMPLETED;\n if (status === 'working') return ADCP_STATUS.WORKING;\n if (status === 'submitted') return ADCP_STATUS.SUBMITTED;\n if (status === 'input-required') return ADCP_STATUS.INPUT_REQUIRED;\n if (status === 'auth-required') return ADCP_STATUS.AUTH_REQUIRED;\n if (status === 'deferred') return 'deferred';\n if (status === 'failed') return ADCP_STATUS.FAILED;\n if (status === 'governance-denied') return 'governance-denied';\n return ADCP_STATUS.UNKNOWN;\n}\n\nfunction extractRawPayloadStatus(payload: unknown): string | undefined {\n const direct = getObjectRecord(payload);\n if (!direct) return undefined;\n if (typeof direct.status === 'string') return direct.status;\n\n const nested = getObjectRecord(direct.response);\n if (typeof nested?.status === 'string') return nested.status;\n\n const task = getObjectRecord(direct.task);\n if (typeof task?.status === 'string') return task.status;\n\n return undefined;\n}\n\nfunction extractPayloadTaskStatus(payload: unknown): EffectiveTaskState | undefined {\n const direct = extractTaskStatusFromRecord(payload);\n if (direct) return direct;\n\n const record = getObjectRecord(payload);\n if (!record) return undefined;\n\n const nested = extractTaskStatusFromRecord(record.response);\n if (nested) return nested;\n\n return extractTaskStatusFromRecord(record.task);\n}\n\nfunction extractTaskStatusFromRecord(payload: unknown): ADCPStatus | undefined {\n const envelopeStatus = extractAdcpTaskStatusFromPayload(payload);\n if (envelopeStatus) return envelopeStatus;\n\n const record = getObjectRecord(payload);\n if (!record || !isTaskStatusPayload(record) || !isAdcpStatus(record.status)) return undefined;\n return record.status;\n}\n\nfunction isTaskStatusPayload(record: Record<string, unknown>): boolean {\n return (\n typeof record.task_id === 'string' &&\n (typeof record.task_type === 'string' ||\n typeof record.protocol === 'string' ||\n typeof record.created_at === 'string' ||\n typeof record.updated_at === 'string')\n );\n}\n\nfunction getObjectRecord(value: unknown): Record<string, unknown> | undefined {\n if (value == null || typeof value !== 'object' || Array.isArray(value)) return undefined;\n return value as Record<string, unknown>;\n}\n"],"mappings":"AACA,SAAS,aAA8B,kCAAkC,oBAAoB;AAuC7F,MAAM,yBACJ;AASK,SAAS,iBACd,QACA,UAAmC,CAAC,GACd;AACtB,QAAM,gBAAgB,OAAO;AAC7B,QAAM,OAAO,OAAO;AACpB,QAAM,gBAAgB,wBAAwB,IAAI;AAElD,MAAI,kBAAkB,YAAY,kBAAkB,qBAAqB;AACvE,WAAO,cAAc,QAAQ;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,MAChB,aAAa,CAAC,QAAQ;AAAA,IACxB,CAAC;AAAA,EACH;AAEA,QAAM,oBAAoB,yBAAyB,IAAI;AACvD,QAAM,iBAAiB,qBAAqB,uBAAuB,aAAa;AAEhF,SAAO,cAAc,QAAQ;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,CAAC,QAAQ;AAAA,EACxB,CAAC;AACH;AAEA,SAAS,cACP,QACA,QAMsB;AACtB,SAAO;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,GAAI,OAAO,kBAAkB,SAAY,EAAE,eAAe,OAAO,cAAc,IAAI,CAAC;AAAA,IACpF,gBAAgB,OAAO;AAAA,IACvB,MAAM,OAAO;AAAA,IACb,GAAI,OAAO,cAAc,EAAE,MAAM,uBAAuB,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,SAAS,uBAAuB,QAA2D;AACzF,MAAI,WAAW,YAAa,QAAO,YAAY;AAC/C,MAAI,WAAW,UAAW,QAAO,YAAY;AAC7C,MAAI,WAAW,YAAa,QAAO,YAAY;AAC/C,MAAI,WAAW,iBAAkB,QAAO,YAAY;AACpD,MAAI,WAAW,gBAAiB,QAAO,YAAY;AACnD,MAAI,WAAW,WAAY,QAAO;AAClC,MAAI,WAAW,SAAU,QAAO,YAAY;AAC5C,MAAI,WAAW,oBAAqB,QAAO;AAC3C,SAAO,YAAY;AACrB;AAEA,SAAS,wBAAwB,SAAsC;AACrE,QAAM,SAAS,gBAAgB,OAAO;AACtC,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,WAAW,SAAU,QAAO,OAAO;AAErD,QAAM,SAAS,gBAAgB,OAAO,QAAQ;AAC9C,MAAI,OAAO,QAAQ,WAAW,SAAU,QAAO,OAAO;AAEtD,QAAM,OAAO,gBAAgB,OAAO,IAAI;AACxC,MAAI,OAAO,MAAM,WAAW,SAAU,QAAO,KAAK;AAElD,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAkD;AAClF,QAAM,SAAS,4BAA4B,OAAO;AAClD,MAAI,OAAQ,QAAO;AAEnB,QAAM,SAAS,gBAAgB,OAAO;AACtC,MAAI,CAAC,OAAQ,QAAO;AAEpB,QAAM,SAAS,4BAA4B,OAAO,QAAQ;AAC1D,MAAI,OAAQ,QAAO;AAEnB,SAAO,4BAA4B,OAAO,IAAI;AAChD;AAEA,SAAS,4BAA4B,SAA0C;AAC7E,QAAM,iBAAiB,iCAAiC,OAAO;AAC/D,MAAI,eAAgB,QAAO;AAE3B,QAAM,SAAS,gBAAgB,OAAO;AACtC,MAAI,CAAC,UAAU,CAAC,oBAAoB,MAAM,KAAK,CAAC,aAAa,OAAO,MAAM,EAAG,QAAO;AACpF,SAAO,OAAO;AAChB;AAEA,SAAS,oBAAoB,QAA0C;AACrE,SACE,OAAO,OAAO,YAAY,aACzB,OAAO,OAAO,cAAc,YAC3B,OAAO,OAAO,aAAa,YAC3B,OAAO,OAAO,eAAe,YAC7B,OAAO,OAAO,eAAe;AAEnC;AAEA,SAAS,gBAAgB,OAAqD;AAC5E,MAAI,SAAS,QAAQ,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,EAAG,QAAO;AAC/E,SAAO;AACT;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  import * as schemas from "../types/schemas.generated.mjs";
8
2
  function withOptionalAccount(schema) {
9
3
  return schema.extend({ account: schema.shape.account.optional() });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/tool-request-schemas.ts"],"sourcesContent":["/**\n * Canonical map of AdCP tool names to their Zod request schemas.\n *\n * Use with MCP SDK's server.registerTool() for type-safe tool registration:\n *\n * import { TOOL_REQUEST_SCHEMAS } from '@adcp/sdk/schemas';\n * server.registerTool(\n * 'get_products',\n * { inputSchema: TOOL_REQUEST_SCHEMAS.get_products.shape },\n * handler\n * );\n */\n\nimport { z } from 'zod';\nimport * as schemas from '../types/schemas.generated';\n\ntype InputShape = Record<string, z.ZodType>;\ntype WithOptionalAccountShape<TShape extends InputShape & { account: z.ZodType }> = Omit<TShape, 'account'> & {\n account: z.ZodOptional<TShape['account']>;\n};\n\n/**\n * Make `account` optional for MCP tool registration so requests missing it\n * reach the handler, which can return a proper adcpError('INVALID_REQUEST')\n * instead of a raw MCP schema validation error. The schema_validation\n * storyboard sends create_media_buy without account to test error handling.\n */\nfunction withOptionalAccount<TShape extends InputShape & { account: z.ZodType }>(\n schema: z.ZodObject<TShape>\n): z.ZodObject<WithOptionalAccountShape<TShape>, any> {\n return schema.extend({ account: schema.shape.account.optional() }) as z.ZodObject<\n WithOptionalAccountShape<TShape>,\n any\n >;\n}\n\nconst CreateMediaBuyToolRequestSchema = withOptionalAccount(schemas.CreateMediaBuyRequestSchema);\nconst UpdateMediaBuyToolRequestSchema = withOptionalAccount(schemas.UpdateMediaBuyRequestSchema);\n\n/**\n * Exact schema types for tool names known at build time. Prefer this type for\n * key-preserving helpers; use {@link ToolRequestSchemas} when accepting a\n * runtime string that may not match a known tool.\n */\nexport type KnownToolRequestSchemas = {\n get_products: typeof schemas.GetProductsRequestSchema;\n create_media_buy: typeof CreateMediaBuyToolRequestSchema;\n update_media_buy: typeof UpdateMediaBuyToolRequestSchema;\n get_media_buys: typeof schemas.GetMediaBuysRequestSchema;\n get_media_buy_delivery: typeof schemas.GetMediaBuyDeliveryRequestSchema;\n provide_performance_feedback: typeof schemas.ProvidePerformanceFeedbackRequestSchema;\n list_creative_formats: typeof schemas.ListCreativeFormatsRequestSchema;\n list_transformers: typeof schemas.ListTransformersRequestSchema;\n build_creative: typeof schemas.BuildCreativeRequestSchema;\n preview_creative: typeof schemas.PreviewCreativeRequestSchema;\n sync_creatives: typeof schemas.SyncCreativesRequestSchema;\n list_creatives: typeof schemas.ListCreativesRequestSchema;\n get_creative_delivery: typeof schemas.GetCreativeDeliveryRequestSchema;\n get_signals: typeof schemas.GetSignalsRequestSchema;\n activate_signal: typeof schemas.ActivateSignalRequestSchema;\n sync_accounts: typeof schemas.SyncAccountsRequestSchema;\n list_accounts: typeof schemas.ListAccountsRequestSchema;\n sync_governance: typeof schemas.SyncGovernanceRequestSchema;\n sync_audiences: typeof schemas.SyncAudiencesRequestSchema;\n report_usage: typeof schemas.ReportUsageRequestSchema;\n get_account_financials: typeof schemas.GetAccountFinancialsRequestSchema;\n get_task_status: typeof schemas.GetTaskStatusRequestSchema;\n list_tasks: typeof schemas.ListTasksRequestSchema;\n sync_catalogs: typeof schemas.SyncCatalogsRequestSchema;\n sync_event_sources: typeof schemas.SyncEventSourcesRequestSchema;\n log_event: typeof schemas.LogEventRequestSchema;\n get_media_buy_artifacts: typeof schemas.GetMediaBuyArtifactsRequestSchema;\n get_creative_features: typeof schemas.GetCreativeFeaturesRequestSchema;\n create_property_list: typeof schemas.CreatePropertyListRequestSchema;\n get_property_list: typeof schemas.GetPropertyListRequestSchema;\n update_property_list: typeof schemas.UpdatePropertyListRequestSchema;\n list_property_lists: typeof schemas.ListPropertyListsRequestSchema;\n delete_property_list: typeof schemas.DeletePropertyListRequestSchema;\n list_content_standards: typeof schemas.ListContentStandardsRequestSchema;\n get_content_standards: typeof schemas.GetContentStandardsRequestSchema;\n create_content_standards: typeof schemas.CreateContentStandardsRequestSchema;\n update_content_standards: typeof schemas.UpdateContentStandardsRequestSchema;\n calibrate_content: typeof schemas.CalibrateContentRequestSchema;\n validate_content_delivery: typeof schemas.ValidateContentDeliveryRequestSchema;\n validate_property_delivery: typeof schemas.ValidatePropertyDeliveryRequestSchema;\n sync_plans: typeof schemas.SyncPlansRequestSchema;\n check_governance: typeof schemas.CheckGovernanceRequestSchema;\n report_plan_outcome: typeof schemas.ReportPlanOutcomeRequestSchema;\n get_plan_audit_logs: typeof schemas.GetPlanAuditLogsRequestSchema;\n create_collection_list: typeof schemas.CreateCollectionListRequestSchema;\n update_collection_list: typeof schemas.UpdateCollectionListRequestSchema;\n get_collection_list: typeof schemas.GetCollectionListRequestSchema;\n list_collection_lists: typeof schemas.ListCollectionListsRequestSchema;\n delete_collection_list: typeof schemas.DeleteCollectionListRequestSchema;\n si_get_offering: typeof schemas.SIGetOfferingRequestSchema;\n si_initiate_session: typeof schemas.SIInitiateSessionRequestSchema;\n si_send_message: typeof schemas.SISendMessageRequestSchema;\n si_terminate_session: typeof schemas.SITerminateSessionRequestSchema;\n get_adcp_capabilities: typeof schemas.GetAdCPCapabilitiesRequestSchema;\n comply_test_controller: typeof schemas.ComplyTestControllerRequestSchema;\n get_brand_identity: typeof schemas.GetBrandIdentityRequestSchema;\n get_rights: typeof schemas.GetRightsRequestSchema;\n acquire_rights: typeof schemas.AcquireRightsRequestSchema;\n update_rights: typeof schemas.UpdateRightsRequestSchema;\n};\n\nexport type ToolRequestSchemas = Readonly<KnownToolRequestSchemas> & {\n // Dynamic lookups are supported for callers that receive tool names at\n // runtime, but they must narrow the result before dereferencing `.shape`.\n readonly [toolName: string]: z.ZodObject<any> | undefined;\n};\n\nexport const TOOL_REQUEST_SCHEMAS: ToolRequestSchemas = {\n // Product discovery & media buy\n get_products: schemas.GetProductsRequestSchema,\n create_media_buy: CreateMediaBuyToolRequestSchema,\n update_media_buy: UpdateMediaBuyToolRequestSchema,\n get_media_buys: schemas.GetMediaBuysRequestSchema,\n get_media_buy_delivery: schemas.GetMediaBuyDeliveryRequestSchema,\n provide_performance_feedback: schemas.ProvidePerformanceFeedbackRequestSchema,\n\n // Creative\n list_creative_formats: schemas.ListCreativeFormatsRequestSchema,\n list_transformers: schemas.ListTransformersRequestSchema,\n build_creative: schemas.BuildCreativeRequestSchema,\n preview_creative: schemas.PreviewCreativeRequestSchema,\n sync_creatives: schemas.SyncCreativesRequestSchema,\n list_creatives: schemas.ListCreativesRequestSchema,\n get_creative_delivery: schemas.GetCreativeDeliveryRequestSchema,\n\n // Signals\n get_signals: schemas.GetSignalsRequestSchema,\n activate_signal: schemas.ActivateSignalRequestSchema,\n\n // Account & audience\n sync_accounts: schemas.SyncAccountsRequestSchema,\n list_accounts: schemas.ListAccountsRequestSchema,\n sync_governance: schemas.SyncGovernanceRequestSchema,\n sync_audiences: schemas.SyncAudiencesRequestSchema,\n report_usage: schemas.ReportUsageRequestSchema,\n get_account_financials: schemas.GetAccountFinancialsRequestSchema,\n\n // Catalogs & events\n sync_catalogs: schemas.SyncCatalogsRequestSchema,\n sync_event_sources: schemas.SyncEventSourcesRequestSchema,\n log_event: schemas.LogEventRequestSchema,\n get_media_buy_artifacts: schemas.GetMediaBuyArtifactsRequestSchema,\n\n // Creative (additional)\n get_creative_features: schemas.GetCreativeFeaturesRequestSchema,\n\n // Governance — property lists & content standards\n create_property_list: schemas.CreatePropertyListRequestSchema,\n get_property_list: schemas.GetPropertyListRequestSchema,\n update_property_list: schemas.UpdatePropertyListRequestSchema,\n list_property_lists: schemas.ListPropertyListsRequestSchema,\n delete_property_list: schemas.DeletePropertyListRequestSchema,\n list_content_standards: schemas.ListContentStandardsRequestSchema,\n get_content_standards: schemas.GetContentStandardsRequestSchema,\n create_content_standards: schemas.CreateContentStandardsRequestSchema,\n update_content_standards: schemas.UpdateContentStandardsRequestSchema,\n calibrate_content: schemas.CalibrateContentRequestSchema,\n validate_content_delivery: schemas.ValidateContentDeliveryRequestSchema,\n validate_property_delivery: schemas.ValidatePropertyDeliveryRequestSchema,\n\n // Campaign governance\n sync_plans: schemas.SyncPlansRequestSchema,\n check_governance: schemas.CheckGovernanceRequestSchema,\n report_plan_outcome: schemas.ReportPlanOutcomeRequestSchema,\n get_plan_audit_logs: schemas.GetPlanAuditLogsRequestSchema,\n\n // Collection lists\n create_collection_list: schemas.CreateCollectionListRequestSchema,\n update_collection_list: schemas.UpdateCollectionListRequestSchema,\n get_collection_list: schemas.GetCollectionListRequestSchema,\n list_collection_lists: schemas.ListCollectionListsRequestSchema,\n delete_collection_list: schemas.DeleteCollectionListRequestSchema,\n\n // Sponsored Intelligence\n si_get_offering: schemas.SIGetOfferingRequestSchema,\n si_initiate_session: schemas.SIInitiateSessionRequestSchema,\n si_send_message: schemas.SISendMessageRequestSchema,\n si_terminate_session: schemas.SITerminateSessionRequestSchema,\n\n // Capabilities\n get_adcp_capabilities: schemas.GetAdCPCapabilitiesRequestSchema,\n get_task_status: schemas.GetTaskStatusRequestSchema,\n list_tasks: schemas.ListTasksRequestSchema,\n\n // Test controller\n comply_test_controller: schemas.ComplyTestControllerRequestSchema,\n\n // Brand rights\n get_brand_identity: schemas.GetBrandIdentityRequestSchema,\n get_rights: schemas.GetRightsRequestSchema,\n acquire_rights: schemas.AcquireRightsRequestSchema,\n update_rights: schemas.UpdateRightsRequestSchema,\n};\n"],"mappings":";;;;;;AAcA,YAAY,aAAa;AAazB,SAAS,oBACP,QACoD;AACpD,SAAO,OAAO,OAAO,EAAE,SAAS,OAAO,MAAM,QAAQ,SAAS,EAAE,CAAC;AAInE;AAEA,MAAM,kCAAkC,oBAAoB,QAAQ,2BAA2B;AAC/F,MAAM,kCAAkC,oBAAoB,QAAQ,2BAA2B;AA2ExF,MAAM,uBAA2C;AAAA;AAAA,EAEtD,cAAc,QAAQ;AAAA,EACtB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,gBAAgB,QAAQ;AAAA,EACxB,wBAAwB,QAAQ;AAAA,EAChC,8BAA8B,QAAQ;AAAA;AAAA,EAGtC,uBAAuB,QAAQ;AAAA,EAC/B,mBAAmB,QAAQ;AAAA,EAC3B,gBAAgB,QAAQ;AAAA,EACxB,kBAAkB,QAAQ;AAAA,EAC1B,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EACxB,uBAAuB,QAAQ;AAAA;AAAA,EAG/B,aAAa,QAAQ;AAAA,EACrB,iBAAiB,QAAQ;AAAA;AAAA,EAGzB,eAAe,QAAQ;AAAA,EACvB,eAAe,QAAQ;AAAA,EACvB,iBAAiB,QAAQ;AAAA,EACzB,gBAAgB,QAAQ;AAAA,EACxB,cAAc,QAAQ;AAAA,EACtB,wBAAwB,QAAQ;AAAA;AAAA,EAGhC,eAAe,QAAQ;AAAA,EACvB,oBAAoB,QAAQ;AAAA,EAC5B,WAAW,QAAQ;AAAA,EACnB,yBAAyB,QAAQ;AAAA;AAAA,EAGjC,uBAAuB,QAAQ;AAAA;AAAA,EAG/B,sBAAsB,QAAQ;AAAA,EAC9B,mBAAmB,QAAQ;AAAA,EAC3B,sBAAsB,QAAQ;AAAA,EAC9B,qBAAqB,QAAQ;AAAA,EAC7B,sBAAsB,QAAQ;AAAA,EAC9B,wBAAwB,QAAQ;AAAA,EAChC,uBAAuB,QAAQ;AAAA,EAC/B,0BAA0B,QAAQ;AAAA,EAClC,0BAA0B,QAAQ;AAAA,EAClC,mBAAmB,QAAQ;AAAA,EAC3B,2BAA2B,QAAQ;AAAA,EACnC,4BAA4B,QAAQ;AAAA;AAAA,EAGpC,YAAY,QAAQ;AAAA,EACpB,kBAAkB,QAAQ;AAAA,EAC1B,qBAAqB,QAAQ;AAAA,EAC7B,qBAAqB,QAAQ;AAAA;AAAA,EAG7B,wBAAwB,QAAQ;AAAA,EAChC,wBAAwB,QAAQ;AAAA,EAChC,qBAAqB,QAAQ;AAAA,EAC7B,uBAAuB,QAAQ;AAAA,EAC/B,wBAAwB,QAAQ;AAAA;AAAA,EAGhC,iBAAiB,QAAQ;AAAA,EACzB,qBAAqB,QAAQ;AAAA,EAC7B,iBAAiB,QAAQ;AAAA,EACzB,sBAAsB,QAAQ;AAAA;AAAA,EAG9B,uBAAuB,QAAQ;AAAA,EAC/B,iBAAiB,QAAQ;AAAA,EACzB,YAAY,QAAQ;AAAA;AAAA,EAGpB,wBAAwB,QAAQ;AAAA;AAAA,EAGhC,oBAAoB,QAAQ;AAAA,EAC5B,YAAY,QAAQ;AAAA,EACpB,gBAAgB,QAAQ;AAAA,EACxB,eAAe,QAAQ;AACzB;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/tool-request-schemas.ts"],"sourcesContent":["/**\n * Canonical map of AdCP tool names to their Zod request schemas.\n *\n * Use with MCP SDK's server.registerTool() for type-safe tool registration:\n *\n * import { TOOL_REQUEST_SCHEMAS } from '@adcp/sdk/schemas';\n * server.registerTool(\n * 'get_products',\n * { inputSchema: TOOL_REQUEST_SCHEMAS.get_products.shape },\n * handler\n * );\n */\n\nimport { z } from 'zod';\nimport * as schemas from '../types/schemas.generated';\n\ntype InputShape = Record<string, z.ZodType>;\ntype WithOptionalAccountShape<TShape extends InputShape & { account: z.ZodType }> = Omit<TShape, 'account'> & {\n account: z.ZodOptional<TShape['account']>;\n};\n\n/**\n * Make `account` optional for MCP tool registration so requests missing it\n * reach the handler, which can return a proper adcpError('INVALID_REQUEST')\n * instead of a raw MCP schema validation error. The schema_validation\n * storyboard sends create_media_buy without account to test error handling.\n */\nfunction withOptionalAccount<TShape extends InputShape & { account: z.ZodType }>(\n schema: z.ZodObject<TShape>\n): z.ZodObject<WithOptionalAccountShape<TShape>, any> {\n return schema.extend({ account: schema.shape.account.optional() }) as z.ZodObject<\n WithOptionalAccountShape<TShape>,\n any\n >;\n}\n\nconst CreateMediaBuyToolRequestSchema = withOptionalAccount(schemas.CreateMediaBuyRequestSchema);\nconst UpdateMediaBuyToolRequestSchema = withOptionalAccount(schemas.UpdateMediaBuyRequestSchema);\n\n/**\n * Exact schema types for tool names known at build time. Prefer this type for\n * key-preserving helpers; use {@link ToolRequestSchemas} when accepting a\n * runtime string that may not match a known tool.\n */\nexport type KnownToolRequestSchemas = {\n get_products: typeof schemas.GetProductsRequestSchema;\n create_media_buy: typeof CreateMediaBuyToolRequestSchema;\n update_media_buy: typeof UpdateMediaBuyToolRequestSchema;\n get_media_buys: typeof schemas.GetMediaBuysRequestSchema;\n get_media_buy_delivery: typeof schemas.GetMediaBuyDeliveryRequestSchema;\n provide_performance_feedback: typeof schemas.ProvidePerformanceFeedbackRequestSchema;\n list_creative_formats: typeof schemas.ListCreativeFormatsRequestSchema;\n list_transformers: typeof schemas.ListTransformersRequestSchema;\n build_creative: typeof schemas.BuildCreativeRequestSchema;\n preview_creative: typeof schemas.PreviewCreativeRequestSchema;\n sync_creatives: typeof schemas.SyncCreativesRequestSchema;\n list_creatives: typeof schemas.ListCreativesRequestSchema;\n get_creative_delivery: typeof schemas.GetCreativeDeliveryRequestSchema;\n get_signals: typeof schemas.GetSignalsRequestSchema;\n activate_signal: typeof schemas.ActivateSignalRequestSchema;\n sync_accounts: typeof schemas.SyncAccountsRequestSchema;\n list_accounts: typeof schemas.ListAccountsRequestSchema;\n sync_governance: typeof schemas.SyncGovernanceRequestSchema;\n sync_audiences: typeof schemas.SyncAudiencesRequestSchema;\n report_usage: typeof schemas.ReportUsageRequestSchema;\n get_account_financials: typeof schemas.GetAccountFinancialsRequestSchema;\n get_task_status: typeof schemas.GetTaskStatusRequestSchema;\n list_tasks: typeof schemas.ListTasksRequestSchema;\n sync_catalogs: typeof schemas.SyncCatalogsRequestSchema;\n sync_event_sources: typeof schemas.SyncEventSourcesRequestSchema;\n log_event: typeof schemas.LogEventRequestSchema;\n get_media_buy_artifacts: typeof schemas.GetMediaBuyArtifactsRequestSchema;\n get_creative_features: typeof schemas.GetCreativeFeaturesRequestSchema;\n create_property_list: typeof schemas.CreatePropertyListRequestSchema;\n get_property_list: typeof schemas.GetPropertyListRequestSchema;\n update_property_list: typeof schemas.UpdatePropertyListRequestSchema;\n list_property_lists: typeof schemas.ListPropertyListsRequestSchema;\n delete_property_list: typeof schemas.DeletePropertyListRequestSchema;\n list_content_standards: typeof schemas.ListContentStandardsRequestSchema;\n get_content_standards: typeof schemas.GetContentStandardsRequestSchema;\n create_content_standards: typeof schemas.CreateContentStandardsRequestSchema;\n update_content_standards: typeof schemas.UpdateContentStandardsRequestSchema;\n calibrate_content: typeof schemas.CalibrateContentRequestSchema;\n validate_content_delivery: typeof schemas.ValidateContentDeliveryRequestSchema;\n validate_property_delivery: typeof schemas.ValidatePropertyDeliveryRequestSchema;\n sync_plans: typeof schemas.SyncPlansRequestSchema;\n check_governance: typeof schemas.CheckGovernanceRequestSchema;\n report_plan_outcome: typeof schemas.ReportPlanOutcomeRequestSchema;\n get_plan_audit_logs: typeof schemas.GetPlanAuditLogsRequestSchema;\n create_collection_list: typeof schemas.CreateCollectionListRequestSchema;\n update_collection_list: typeof schemas.UpdateCollectionListRequestSchema;\n get_collection_list: typeof schemas.GetCollectionListRequestSchema;\n list_collection_lists: typeof schemas.ListCollectionListsRequestSchema;\n delete_collection_list: typeof schemas.DeleteCollectionListRequestSchema;\n si_get_offering: typeof schemas.SIGetOfferingRequestSchema;\n si_initiate_session: typeof schemas.SIInitiateSessionRequestSchema;\n si_send_message: typeof schemas.SISendMessageRequestSchema;\n si_terminate_session: typeof schemas.SITerminateSessionRequestSchema;\n get_adcp_capabilities: typeof schemas.GetAdCPCapabilitiesRequestSchema;\n comply_test_controller: typeof schemas.ComplyTestControllerRequestSchema;\n get_brand_identity: typeof schemas.GetBrandIdentityRequestSchema;\n get_rights: typeof schemas.GetRightsRequestSchema;\n acquire_rights: typeof schemas.AcquireRightsRequestSchema;\n update_rights: typeof schemas.UpdateRightsRequestSchema;\n};\n\nexport type ToolRequestSchemas = Readonly<KnownToolRequestSchemas> & {\n // Dynamic lookups are supported for callers that receive tool names at\n // runtime, but they must narrow the result before dereferencing `.shape`.\n readonly [toolName: string]: z.ZodObject<any> | undefined;\n};\n\nexport const TOOL_REQUEST_SCHEMAS: ToolRequestSchemas = {\n // Product discovery & media buy\n get_products: schemas.GetProductsRequestSchema,\n create_media_buy: CreateMediaBuyToolRequestSchema,\n update_media_buy: UpdateMediaBuyToolRequestSchema,\n get_media_buys: schemas.GetMediaBuysRequestSchema,\n get_media_buy_delivery: schemas.GetMediaBuyDeliveryRequestSchema,\n provide_performance_feedback: schemas.ProvidePerformanceFeedbackRequestSchema,\n\n // Creative\n list_creative_formats: schemas.ListCreativeFormatsRequestSchema,\n list_transformers: schemas.ListTransformersRequestSchema,\n build_creative: schemas.BuildCreativeRequestSchema,\n preview_creative: schemas.PreviewCreativeRequestSchema,\n sync_creatives: schemas.SyncCreativesRequestSchema,\n list_creatives: schemas.ListCreativesRequestSchema,\n get_creative_delivery: schemas.GetCreativeDeliveryRequestSchema,\n\n // Signals\n get_signals: schemas.GetSignalsRequestSchema,\n activate_signal: schemas.ActivateSignalRequestSchema,\n\n // Account & audience\n sync_accounts: schemas.SyncAccountsRequestSchema,\n list_accounts: schemas.ListAccountsRequestSchema,\n sync_governance: schemas.SyncGovernanceRequestSchema,\n sync_audiences: schemas.SyncAudiencesRequestSchema,\n report_usage: schemas.ReportUsageRequestSchema,\n get_account_financials: schemas.GetAccountFinancialsRequestSchema,\n\n // Catalogs & events\n sync_catalogs: schemas.SyncCatalogsRequestSchema,\n sync_event_sources: schemas.SyncEventSourcesRequestSchema,\n log_event: schemas.LogEventRequestSchema,\n get_media_buy_artifacts: schemas.GetMediaBuyArtifactsRequestSchema,\n\n // Creative (additional)\n get_creative_features: schemas.GetCreativeFeaturesRequestSchema,\n\n // Governance — property lists & content standards\n create_property_list: schemas.CreatePropertyListRequestSchema,\n get_property_list: schemas.GetPropertyListRequestSchema,\n update_property_list: schemas.UpdatePropertyListRequestSchema,\n list_property_lists: schemas.ListPropertyListsRequestSchema,\n delete_property_list: schemas.DeletePropertyListRequestSchema,\n list_content_standards: schemas.ListContentStandardsRequestSchema,\n get_content_standards: schemas.GetContentStandardsRequestSchema,\n create_content_standards: schemas.CreateContentStandardsRequestSchema,\n update_content_standards: schemas.UpdateContentStandardsRequestSchema,\n calibrate_content: schemas.CalibrateContentRequestSchema,\n validate_content_delivery: schemas.ValidateContentDeliveryRequestSchema,\n validate_property_delivery: schemas.ValidatePropertyDeliveryRequestSchema,\n\n // Campaign governance\n sync_plans: schemas.SyncPlansRequestSchema,\n check_governance: schemas.CheckGovernanceRequestSchema,\n report_plan_outcome: schemas.ReportPlanOutcomeRequestSchema,\n get_plan_audit_logs: schemas.GetPlanAuditLogsRequestSchema,\n\n // Collection lists\n create_collection_list: schemas.CreateCollectionListRequestSchema,\n update_collection_list: schemas.UpdateCollectionListRequestSchema,\n get_collection_list: schemas.GetCollectionListRequestSchema,\n list_collection_lists: schemas.ListCollectionListsRequestSchema,\n delete_collection_list: schemas.DeleteCollectionListRequestSchema,\n\n // Sponsored Intelligence\n si_get_offering: schemas.SIGetOfferingRequestSchema,\n si_initiate_session: schemas.SIInitiateSessionRequestSchema,\n si_send_message: schemas.SISendMessageRequestSchema,\n si_terminate_session: schemas.SITerminateSessionRequestSchema,\n\n // Capabilities\n get_adcp_capabilities: schemas.GetAdCPCapabilitiesRequestSchema,\n get_task_status: schemas.GetTaskStatusRequestSchema,\n list_tasks: schemas.ListTasksRequestSchema,\n\n // Test controller\n comply_test_controller: schemas.ComplyTestControllerRequestSchema,\n\n // Brand rights\n get_brand_identity: schemas.GetBrandIdentityRequestSchema,\n get_rights: schemas.GetRightsRequestSchema,\n acquire_rights: schemas.AcquireRightsRequestSchema,\n update_rights: schemas.UpdateRightsRequestSchema,\n};\n"],"mappings":"AAcA,YAAY,aAAa;AAazB,SAAS,oBACP,QACoD;AACpD,SAAO,OAAO,OAAO,EAAE,SAAS,OAAO,MAAM,QAAQ,SAAS,EAAE,CAAC;AAInE;AAEA,MAAM,kCAAkC,oBAAoB,QAAQ,2BAA2B;AAC/F,MAAM,kCAAkC,oBAAoB,QAAQ,2BAA2B;AA2ExF,MAAM,uBAA2C;AAAA;AAAA,EAEtD,cAAc,QAAQ;AAAA,EACtB,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,gBAAgB,QAAQ;AAAA,EACxB,wBAAwB,QAAQ;AAAA,EAChC,8BAA8B,QAAQ;AAAA;AAAA,EAGtC,uBAAuB,QAAQ;AAAA,EAC/B,mBAAmB,QAAQ;AAAA,EAC3B,gBAAgB,QAAQ;AAAA,EACxB,kBAAkB,QAAQ;AAAA,EAC1B,gBAAgB,QAAQ;AAAA,EACxB,gBAAgB,QAAQ;AAAA,EACxB,uBAAuB,QAAQ;AAAA;AAAA,EAG/B,aAAa,QAAQ;AAAA,EACrB,iBAAiB,QAAQ;AAAA;AAAA,EAGzB,eAAe,QAAQ;AAAA,EACvB,eAAe,QAAQ;AAAA,EACvB,iBAAiB,QAAQ;AAAA,EACzB,gBAAgB,QAAQ;AAAA,EACxB,cAAc,QAAQ;AAAA,EACtB,wBAAwB,QAAQ;AAAA;AAAA,EAGhC,eAAe,QAAQ;AAAA,EACvB,oBAAoB,QAAQ;AAAA,EAC5B,WAAW,QAAQ;AAAA,EACnB,yBAAyB,QAAQ;AAAA;AAAA,EAGjC,uBAAuB,QAAQ;AAAA;AAAA,EAG/B,sBAAsB,QAAQ;AAAA,EAC9B,mBAAmB,QAAQ;AAAA,EAC3B,sBAAsB,QAAQ;AAAA,EAC9B,qBAAqB,QAAQ;AAAA,EAC7B,sBAAsB,QAAQ;AAAA,EAC9B,wBAAwB,QAAQ;AAAA,EAChC,uBAAuB,QAAQ;AAAA,EAC/B,0BAA0B,QAAQ;AAAA,EAClC,0BAA0B,QAAQ;AAAA,EAClC,mBAAmB,QAAQ;AAAA,EAC3B,2BAA2B,QAAQ;AAAA,EACnC,4BAA4B,QAAQ;AAAA;AAAA,EAGpC,YAAY,QAAQ;AAAA,EACpB,kBAAkB,QAAQ;AAAA,EAC1B,qBAAqB,QAAQ;AAAA,EAC7B,qBAAqB,QAAQ;AAAA;AAAA,EAG7B,wBAAwB,QAAQ;AAAA,EAChC,wBAAwB,QAAQ;AAAA,EAChC,qBAAqB,QAAQ;AAAA,EAC7B,uBAAuB,QAAQ;AAAA,EAC/B,wBAAwB,QAAQ;AAAA;AAAA,EAGhC,iBAAiB,QAAQ;AAAA,EACzB,qBAAqB,QAAQ;AAAA,EAC7B,iBAAiB,QAAQ;AAAA,EACzB,sBAAsB,QAAQ;AAAA;AAAA,EAG9B,uBAAuB,QAAQ;AAAA,EAC/B,iBAAiB,QAAQ;AAAA,EACzB,YAAY,QAAQ;AAAA;AAAA,EAGpB,wBAAwB,QAAQ;AAAA;AAAA,EAGhC,oBAAoB,QAAQ;AAAA,EAC5B,YAAY,QAAQ;AAAA,EACpB,gBAAgB,QAAQ;AAAA,EACxB,eAAe,QAAQ;AACzB;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  function isStatusCompleted(metadata) {
8
2
  return metadata.status === "completed";
9
3
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/typeGuards.ts"],"sourcesContent":["/**\n * Type guard utilities for webhook status handlers\n * Provides automatic TypeScript type narrowing based on webhook status\n */\n\nimport type { WebhookMetadata } from '../core/AsyncHandler';\nimport type {\n GetProductsResponse,\n GetProductsAsyncWorking,\n GetProductsAsyncInputRequired,\n GetProductsAsyncSubmitted,\n CreateMediaBuyResponse,\n CreateMediaBuyAsyncWorking,\n CreateMediaBuyAsyncInputRequired,\n CreateMediaBuyAsyncSubmitted,\n UpdateMediaBuyResponse,\n UpdateMediaBuyAsyncWorking,\n UpdateMediaBuyAsyncInputRequired,\n UpdateMediaBuyAsyncSubmitted,\n SyncCreativesResponse,\n SyncCreativesAsyncWorking,\n SyncCreativesAsyncInputRequired,\n SyncCreativesAsyncSubmitted,\n} from '../types/core.generated';\n\n// ============================================================================\n// Generic Status Check Helpers\n// ============================================================================\n\n/**\n * Check if webhook status is 'completed'\n */\nexport function isStatusCompleted(metadata: WebhookMetadata): boolean {\n return metadata.status === 'completed';\n}\n\n/**\n * Check if webhook status is 'working'\n */\nexport function isStatusWorking(metadata: WebhookMetadata): boolean {\n return metadata.status === 'working';\n}\n\n/**\n * Check if webhook status is 'input-required'\n */\nexport function isStatusInputRequired(metadata: WebhookMetadata): boolean {\n return metadata.status === 'input-required';\n}\n\n/**\n * Check if webhook status is 'submitted'\n */\nexport function isStatusSubmitted(metadata: WebhookMetadata): boolean {\n return metadata.status === 'submitted';\n}\n\n/**\n * Check if webhook status is 'failed'\n */\nexport function isStatusFailed(metadata: WebhookMetadata): boolean {\n return metadata.status === 'failed';\n}\n\n/**\n * Check if webhook status is 'rejected'\n */\nexport function isStatusRejected(metadata: WebhookMetadata): boolean {\n return metadata.status === 'rejected';\n}\n\n// ============================================================================\n// GetProducts Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if GetProducts response is completed.\n * Automatically narrows response type to GetProductsResponse.\n *\n * @example\n * ```typescript\n * onGetProductsStatusChange: (response, metadata) => {\n * if (isGetProductsCompleted(metadata, response)) {\n * console.log(response.products); // ✅ TypeScript knows products exists\n * }\n * }\n * ```\n */\nexport function isGetProductsCompleted(metadata: WebhookMetadata, response: any): response is GetProductsResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if GetProducts response is working.\n * Automatically narrows response type to GetProductsAsyncWorking.\n *\n * @example\n * ```typescript\n * if (isGetProductsWorking(metadata, response)) {\n * console.log(`Progress: ${response.percentage}%`);\n * }\n * ```\n */\nexport function isGetProductsWorking(metadata: WebhookMetadata, response: any): response is GetProductsAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if GetProducts response requires input.\n * Automatically narrows response type to GetProductsAsyncInputRequired.\n */\nexport function isGetProductsInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is GetProductsAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if GetProducts response is submitted.\n * Automatically narrows response type to GetProductsAsyncSubmitted.\n */\nexport function isGetProductsSubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is GetProductsAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if GetProducts response failed.\n * Automatically narrows response type to GetProductsResponse.\n */\nexport function isGetProductsFailed(metadata: WebhookMetadata, response: any): response is GetProductsResponse {\n return metadata.status === 'failed';\n}\n\n// ============================================================================\n// CreateMediaBuy Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if CreateMediaBuy response is completed.\n * Automatically narrows response type to CreateMediaBuyResponse.\n */\nexport function isCreateMediaBuyCompleted(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response is working.\n * Automatically narrows response type to CreateMediaBuyAsyncWorking.\n */\nexport function isCreateMediaBuyWorking(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response requires input.\n * Automatically narrows response type to CreateMediaBuyAsyncInputRequired.\n */\nexport function isCreateMediaBuyInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response is submitted.\n * Automatically narrows response type to CreateMediaBuyAsyncSubmitted.\n */\nexport function isCreateMediaBuySubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response failed.\n * Automatically narrows response type to CreateMediaBuyResponse.\n */\nexport function isCreateMediaBuyFailed(metadata: WebhookMetadata, response: any): response is CreateMediaBuyResponse {\n return metadata.status === 'failed';\n}\n\n// ============================================================================\n// UpdateMediaBuy Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if UpdateMediaBuy response is completed.\n * Automatically narrows response type to UpdateMediaBuyResponse.\n */\nexport function isUpdateMediaBuyCompleted(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response is working.\n * Automatically narrows response type to UpdateMediaBuyAsyncWorking.\n */\nexport function isUpdateMediaBuyWorking(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response requires input.\n * Automatically narrows response type to UpdateMediaBuyAsyncInputRequired.\n */\nexport function isUpdateMediaBuyInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response is submitted.\n * Automatically narrows response type to UpdateMediaBuyAsyncSubmitted.\n */\nexport function isUpdateMediaBuySubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response failed.\n * Automatically narrows response type to UpdateMediaBuyResponse.\n */\nexport function isUpdateMediaBuyFailed(metadata: WebhookMetadata, response: any): response is UpdateMediaBuyResponse {\n return metadata.status === 'failed';\n}\n\n// ============================================================================\n// SyncCreatives Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if SyncCreatives response is completed.\n * Automatically narrows response type to SyncCreativesResponse.\n */\nexport function isSyncCreativesCompleted(metadata: WebhookMetadata, response: any): response is SyncCreativesResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if SyncCreatives response is working.\n * Automatically narrows response type to SyncCreativesAsyncWorking.\n */\nexport function isSyncCreativesWorking(\n metadata: WebhookMetadata,\n response: any\n): response is SyncCreativesAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if SyncCreatives response requires input.\n * Automatically narrows response type to SyncCreativesAsyncInputRequired.\n */\nexport function isSyncCreativesInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is SyncCreativesAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if SyncCreatives response is submitted.\n * Automatically narrows response type to SyncCreativesAsyncSubmitted.\n */\nexport function isSyncCreativesSubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is SyncCreativesAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if SyncCreatives response failed.\n * Automatically narrows response type to SyncCreativesResponse.\n */\nexport function isSyncCreativesFailed(metadata: WebhookMetadata, response: any): response is SyncCreativesResponse {\n return metadata.status === 'failed';\n}\n"],"mappings":";;;;;;AAgCO,SAAS,kBAAkB,UAAoC;AACpE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,gBAAgB,UAAoC;AAClE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,sBAAsB,UAAoC;AACxE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,kBAAkB,UAAoC;AACpE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,eAAe,UAAoC;AACjE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,iBAAiB,UAAoC;AACnE,SAAO,SAAS,WAAW;AAC7B;AAmBO,SAAS,uBAAuB,UAA2B,UAAgD;AAChH,SAAO,SAAS,WAAW;AAC7B;AAaO,SAAS,qBAAqB,UAA2B,UAAoD;AAClH,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,2BACd,UACA,UAC2C;AAC3C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBACd,UACA,UACuC;AACvC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,oBAAoB,UAA2B,UAAgD;AAC7G,SAAO,SAAS,WAAW;AAC7B;AAUO,SAAS,0BACd,UACA,UACoC;AACpC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,wBACd,UACA,UACwC;AACxC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,8BACd,UACA,UAC8C;AAC9C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,0BACd,UACA,UAC0C;AAC1C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBAAuB,UAA2B,UAAmD;AACnH,SAAO,SAAS,WAAW;AAC7B;AAUO,SAAS,0BACd,UACA,UACoC;AACpC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,wBACd,UACA,UACwC;AACxC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,8BACd,UACA,UAC8C;AAC9C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,0BACd,UACA,UAC0C;AAC1C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBAAuB,UAA2B,UAAmD;AACnH,SAAO,SAAS,WAAW;AAC7B;AAUO,SAAS,yBAAyB,UAA2B,UAAkD;AACpH,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBACd,UACA,UACuC;AACvC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,6BACd,UACA,UAC6C;AAC7C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,yBACd,UACA,UACyC;AACzC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,sBAAsB,UAA2B,UAAkD;AACjH,SAAO,SAAS,WAAW;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/typeGuards.ts"],"sourcesContent":["/**\n * Type guard utilities for webhook status handlers\n * Provides automatic TypeScript type narrowing based on webhook status\n */\n\nimport type { WebhookMetadata } from '../core/AsyncHandler';\nimport type {\n GetProductsResponse,\n GetProductsAsyncWorking,\n GetProductsAsyncInputRequired,\n GetProductsAsyncSubmitted,\n CreateMediaBuyResponse,\n CreateMediaBuyAsyncWorking,\n CreateMediaBuyAsyncInputRequired,\n CreateMediaBuyAsyncSubmitted,\n UpdateMediaBuyResponse,\n UpdateMediaBuyAsyncWorking,\n UpdateMediaBuyAsyncInputRequired,\n UpdateMediaBuyAsyncSubmitted,\n SyncCreativesResponse,\n SyncCreativesAsyncWorking,\n SyncCreativesAsyncInputRequired,\n SyncCreativesAsyncSubmitted,\n} from '../types/core.generated';\n\n// ============================================================================\n// Generic Status Check Helpers\n// ============================================================================\n\n/**\n * Check if webhook status is 'completed'\n */\nexport function isStatusCompleted(metadata: WebhookMetadata): boolean {\n return metadata.status === 'completed';\n}\n\n/**\n * Check if webhook status is 'working'\n */\nexport function isStatusWorking(metadata: WebhookMetadata): boolean {\n return metadata.status === 'working';\n}\n\n/**\n * Check if webhook status is 'input-required'\n */\nexport function isStatusInputRequired(metadata: WebhookMetadata): boolean {\n return metadata.status === 'input-required';\n}\n\n/**\n * Check if webhook status is 'submitted'\n */\nexport function isStatusSubmitted(metadata: WebhookMetadata): boolean {\n return metadata.status === 'submitted';\n}\n\n/**\n * Check if webhook status is 'failed'\n */\nexport function isStatusFailed(metadata: WebhookMetadata): boolean {\n return metadata.status === 'failed';\n}\n\n/**\n * Check if webhook status is 'rejected'\n */\nexport function isStatusRejected(metadata: WebhookMetadata): boolean {\n return metadata.status === 'rejected';\n}\n\n// ============================================================================\n// GetProducts Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if GetProducts response is completed.\n * Automatically narrows response type to GetProductsResponse.\n *\n * @example\n * ```typescript\n * onGetProductsStatusChange: (response, metadata) => {\n * if (isGetProductsCompleted(metadata, response)) {\n * console.log(response.products); // ✅ TypeScript knows products exists\n * }\n * }\n * ```\n */\nexport function isGetProductsCompleted(metadata: WebhookMetadata, response: any): response is GetProductsResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if GetProducts response is working.\n * Automatically narrows response type to GetProductsAsyncWorking.\n *\n * @example\n * ```typescript\n * if (isGetProductsWorking(metadata, response)) {\n * console.log(`Progress: ${response.percentage}%`);\n * }\n * ```\n */\nexport function isGetProductsWorking(metadata: WebhookMetadata, response: any): response is GetProductsAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if GetProducts response requires input.\n * Automatically narrows response type to GetProductsAsyncInputRequired.\n */\nexport function isGetProductsInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is GetProductsAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if GetProducts response is submitted.\n * Automatically narrows response type to GetProductsAsyncSubmitted.\n */\nexport function isGetProductsSubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is GetProductsAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if GetProducts response failed.\n * Automatically narrows response type to GetProductsResponse.\n */\nexport function isGetProductsFailed(metadata: WebhookMetadata, response: any): response is GetProductsResponse {\n return metadata.status === 'failed';\n}\n\n// ============================================================================\n// CreateMediaBuy Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if CreateMediaBuy response is completed.\n * Automatically narrows response type to CreateMediaBuyResponse.\n */\nexport function isCreateMediaBuyCompleted(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response is working.\n * Automatically narrows response type to CreateMediaBuyAsyncWorking.\n */\nexport function isCreateMediaBuyWorking(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response requires input.\n * Automatically narrows response type to CreateMediaBuyAsyncInputRequired.\n */\nexport function isCreateMediaBuyInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response is submitted.\n * Automatically narrows response type to CreateMediaBuyAsyncSubmitted.\n */\nexport function isCreateMediaBuySubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is CreateMediaBuyAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if CreateMediaBuy response failed.\n * Automatically narrows response type to CreateMediaBuyResponse.\n */\nexport function isCreateMediaBuyFailed(metadata: WebhookMetadata, response: any): response is CreateMediaBuyResponse {\n return metadata.status === 'failed';\n}\n\n// ============================================================================\n// UpdateMediaBuy Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if UpdateMediaBuy response is completed.\n * Automatically narrows response type to UpdateMediaBuyResponse.\n */\nexport function isUpdateMediaBuyCompleted(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response is working.\n * Automatically narrows response type to UpdateMediaBuyAsyncWorking.\n */\nexport function isUpdateMediaBuyWorking(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response requires input.\n * Automatically narrows response type to UpdateMediaBuyAsyncInputRequired.\n */\nexport function isUpdateMediaBuyInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response is submitted.\n * Automatically narrows response type to UpdateMediaBuyAsyncSubmitted.\n */\nexport function isUpdateMediaBuySubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is UpdateMediaBuyAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if UpdateMediaBuy response failed.\n * Automatically narrows response type to UpdateMediaBuyResponse.\n */\nexport function isUpdateMediaBuyFailed(metadata: WebhookMetadata, response: any): response is UpdateMediaBuyResponse {\n return metadata.status === 'failed';\n}\n\n// ============================================================================\n// SyncCreatives Type Guards\n// ============================================================================\n\n/**\n * Type guard to check if SyncCreatives response is completed.\n * Automatically narrows response type to SyncCreativesResponse.\n */\nexport function isSyncCreativesCompleted(metadata: WebhookMetadata, response: any): response is SyncCreativesResponse {\n return metadata.status === 'completed';\n}\n\n/**\n * Type guard to check if SyncCreatives response is working.\n * Automatically narrows response type to SyncCreativesAsyncWorking.\n */\nexport function isSyncCreativesWorking(\n metadata: WebhookMetadata,\n response: any\n): response is SyncCreativesAsyncWorking {\n return metadata.status === 'working';\n}\n\n/**\n * Type guard to check if SyncCreatives response requires input.\n * Automatically narrows response type to SyncCreativesAsyncInputRequired.\n */\nexport function isSyncCreativesInputRequired(\n metadata: WebhookMetadata,\n response: any\n): response is SyncCreativesAsyncInputRequired {\n return metadata.status === 'input-required';\n}\n\n/**\n * Type guard to check if SyncCreatives response is submitted.\n * Automatically narrows response type to SyncCreativesAsyncSubmitted.\n */\nexport function isSyncCreativesSubmitted(\n metadata: WebhookMetadata,\n response: any\n): response is SyncCreativesAsyncSubmitted {\n return metadata.status === 'submitted';\n}\n\n/**\n * Type guard to check if SyncCreatives response failed.\n * Automatically narrows response type to SyncCreativesResponse.\n */\nexport function isSyncCreativesFailed(metadata: WebhookMetadata, response: any): response is SyncCreativesResponse {\n return metadata.status === 'failed';\n}\n"],"mappings":"AAgCO,SAAS,kBAAkB,UAAoC;AACpE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,gBAAgB,UAAoC;AAClE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,sBAAsB,UAAoC;AACxE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,kBAAkB,UAAoC;AACpE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,eAAe,UAAoC;AACjE,SAAO,SAAS,WAAW;AAC7B;AAKO,SAAS,iBAAiB,UAAoC;AACnE,SAAO,SAAS,WAAW;AAC7B;AAmBO,SAAS,uBAAuB,UAA2B,UAAgD;AAChH,SAAO,SAAS,WAAW;AAC7B;AAaO,SAAS,qBAAqB,UAA2B,UAAoD;AAClH,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,2BACd,UACA,UAC2C;AAC3C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBACd,UACA,UACuC;AACvC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,oBAAoB,UAA2B,UAAgD;AAC7G,SAAO,SAAS,WAAW;AAC7B;AAUO,SAAS,0BACd,UACA,UACoC;AACpC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,wBACd,UACA,UACwC;AACxC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,8BACd,UACA,UAC8C;AAC9C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,0BACd,UACA,UAC0C;AAC1C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBAAuB,UAA2B,UAAmD;AACnH,SAAO,SAAS,WAAW;AAC7B;AAUO,SAAS,0BACd,UACA,UACoC;AACpC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,wBACd,UACA,UACwC;AACxC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,8BACd,UACA,UAC8C;AAC9C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,0BACd,UACA,UAC0C;AAC1C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBAAuB,UAA2B,UAAmD;AACnH,SAAO,SAAS,WAAW;AAC7B;AAUO,SAAS,yBAAyB,UAA2B,UAAkD;AACpH,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,uBACd,UACA,UACuC;AACvC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,6BACd,UACA,UAC6C;AAC7C,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,yBACd,UACA,UACyC;AACzC,SAAO,SAAS,WAAW;AAC7B;AAMO,SAAS,sBAAsB,UAA2B,UAAkD;AACjH,SAAO,SAAS,WAAW;AAC7B;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  function getBestUnionErrors(schema, data) {
8
2
  const options = resolveUnionOptions(schema);
9
3
  if (!options || options.length === 0) return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/utils/union-errors.ts"],"sourcesContent":["import type { ZodIssue, ZodTypeAny } from 'zod';\n\nexport interface SchemaViolation {\n path: string;\n message: string;\n code: ZodIssue['code'];\n}\n\n/**\n * When a Zod union schema fails, the top-level error is the unhelpful\n * \"(root): Invalid input\". This function tries each variant individually\n * and returns the closest match's specific field errors.\n *\n * AdCP 3.1.0-beta.3 reshaped several response unions from bare\n * `z.union([...])` to `z.object({...envelope...}).passthrough().and(z.union([...]))`\n * — the envelope status / context fields became required outer-shape\n * members intersected with the variant union. We therefore unwrap one\n * level of `ZodIntersection` when present, looking for the union on\n * either side, before disambiguating variants.\n *\n * ⚠️ Zod v3 internals: accesses `schema._def.options` / `_def.left` /\n * `_def.right` which are not part of the public API. Zod v4 restructured\n * `_def` — this will need updating on upgrade. A canary test in\n * response-schema-validation.test.js will fail if the internal structure\n * changes. Degrades gracefully: returns null when no union options can\n * be located, and callers fall back to the standard error.\n */\nexport function getBestUnionErrors(schema: ZodTypeAny, data: unknown): SchemaViolation[] | null {\n const options = resolveUnionOptions(schema);\n if (!options || options.length === 0) return null;\n\n let best: SchemaViolation[] | null = null;\n let fewest = Infinity;\n\n for (const variant of options) {\n const result = variant.safeParse(data);\n if (result.success) return [];\n const violations = result.error.issues.map(i => ({\n path: i.path.length > 0 ? i.path.join('.') : '(root)',\n message: i.message,\n code: i.code,\n }));\n if (violations.length < fewest) {\n fewest = violations.length;\n best = violations;\n }\n }\n\n return best;\n}\n\n/**\n * Locate the union arm of a Zod schema. Handles three shapes:\n * - bare `z.union([...])` → `_def.options`\n * - `z.object({...}).and(z.union)` → `_def.right._def.options` (post-3.1.0-beta.3 reshape)\n * - `z.union.and(z.object({...}))` → `_def.left._def.options` (defensive — current schemas put the union on the right)\n */\nfunction resolveUnionOptions(schema: ZodTypeAny): ZodTypeAny[] | null {\n const def = (schema as any)._def;\n if (!def) return null;\n if (Array.isArray(def.options)) return def.options as ZodTypeAny[];\n\n const right = def.right ? (def.right as any)._def?.options : undefined;\n if (Array.isArray(right)) return right as ZodTypeAny[];\n\n const left = def.left ? (def.left as any)._def?.options : undefined;\n if (Array.isArray(left)) return left as ZodTypeAny[];\n\n return null;\n}\n"],"mappings":";;;;;;AA2BO,SAAS,mBAAmB,QAAoB,MAAyC;AAC9F,QAAM,UAAU,oBAAoB,MAAM;AAC1C,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAE7C,MAAI,OAAiC;AACrC,MAAI,SAAS;AAEb,aAAW,WAAW,SAAS;AAC7B,UAAM,SAAS,QAAQ,UAAU,IAAI;AACrC,QAAI,OAAO,QAAS,QAAO,CAAC;AAC5B,UAAM,aAAa,OAAO,MAAM,OAAO,IAAI,QAAM;AAAA,MAC/C,MAAM,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,KAAK,GAAG,IAAI;AAAA,MAC7C,SAAS,EAAE;AAAA,MACX,MAAM,EAAE;AAAA,IACV,EAAE;AACF,QAAI,WAAW,SAAS,QAAQ;AAC9B,eAAS,WAAW;AACpB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAQA,SAAS,oBAAoB,QAAyC;AACpE,QAAM,MAAO,OAAe;AAC5B,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,MAAM,QAAQ,IAAI,OAAO,EAAG,QAAO,IAAI;AAE3C,QAAM,QAAQ,IAAI,QAAS,IAAI,MAAc,MAAM,UAAU;AAC7D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AAEjC,QAAM,OAAO,IAAI,OAAQ,IAAI,KAAa,MAAM,UAAU;AAC1D,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO;AAEhC,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../../../src/lib/utils/union-errors.ts"],"sourcesContent":["import type { ZodIssue, ZodTypeAny } from 'zod';\n\nexport interface SchemaViolation {\n path: string;\n message: string;\n code: ZodIssue['code'];\n}\n\n/**\n * When a Zod union schema fails, the top-level error is the unhelpful\n * \"(root): Invalid input\". This function tries each variant individually\n * and returns the closest match's specific field errors.\n *\n * AdCP 3.1.0-beta.3 reshaped several response unions from bare\n * `z.union([...])` to `z.object({...envelope...}).passthrough().and(z.union([...]))`\n * — the envelope status / context fields became required outer-shape\n * members intersected with the variant union. We therefore unwrap one\n * level of `ZodIntersection` when present, looking for the union on\n * either side, before disambiguating variants.\n *\n * ⚠️ Zod v3 internals: accesses `schema._def.options` / `_def.left` /\n * `_def.right` which are not part of the public API. Zod v4 restructured\n * `_def` — this will need updating on upgrade. A canary test in\n * response-schema-validation.test.js will fail if the internal structure\n * changes. Degrades gracefully: returns null when no union options can\n * be located, and callers fall back to the standard error.\n */\nexport function getBestUnionErrors(schema: ZodTypeAny, data: unknown): SchemaViolation[] | null {\n const options = resolveUnionOptions(schema);\n if (!options || options.length === 0) return null;\n\n let best: SchemaViolation[] | null = null;\n let fewest = Infinity;\n\n for (const variant of options) {\n const result = variant.safeParse(data);\n if (result.success) return [];\n const violations = result.error.issues.map(i => ({\n path: i.path.length > 0 ? i.path.join('.') : '(root)',\n message: i.message,\n code: i.code,\n }));\n if (violations.length < fewest) {\n fewest = violations.length;\n best = violations;\n }\n }\n\n return best;\n}\n\n/**\n * Locate the union arm of a Zod schema. Handles three shapes:\n * - bare `z.union([...])` → `_def.options`\n * - `z.object({...}).and(z.union)` → `_def.right._def.options` (post-3.1.0-beta.3 reshape)\n * - `z.union.and(z.object({...}))` → `_def.left._def.options` (defensive — current schemas put the union on the right)\n */\nfunction resolveUnionOptions(schema: ZodTypeAny): ZodTypeAny[] | null {\n const def = (schema as any)._def;\n if (!def) return null;\n if (Array.isArray(def.options)) return def.options as ZodTypeAny[];\n\n const right = def.right ? (def.right as any)._def?.options : undefined;\n if (Array.isArray(right)) return right as ZodTypeAny[];\n\n const left = def.left ? (def.left as any)._def?.options : undefined;\n if (Array.isArray(left)) return left as ZodTypeAny[];\n\n return null;\n}\n"],"mappings":"AA2BO,SAAS,mBAAmB,QAAoB,MAAyC;AAC9F,QAAM,UAAU,oBAAoB,MAAM;AAC1C,MAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;AAE7C,MAAI,OAAiC;AACrC,MAAI,SAAS;AAEb,aAAW,WAAW,SAAS;AAC7B,UAAM,SAAS,QAAQ,UAAU,IAAI;AACrC,QAAI,OAAO,QAAS,QAAO,CAAC;AAC5B,UAAM,aAAa,OAAO,MAAM,OAAO,IAAI,QAAM;AAAA,MAC/C,MAAM,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,KAAK,GAAG,IAAI;AAAA,MAC7C,SAAS,EAAE;AAAA,MACX,MAAM,EAAE;AAAA,IACV,EAAE;AACF,QAAI,WAAW,SAAS,QAAQ;AAC9B,eAAS,WAAW;AACpB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAQA,SAAS,oBAAoB,QAAyC;AACpE,QAAM,MAAO,OAAe;AAC5B,MAAI,CAAC,IAAK,QAAO;AACjB,MAAI,MAAM,QAAQ,IAAI,OAAO,EAAG,QAAO,IAAI;AAE3C,QAAM,QAAQ,IAAI,QAAS,IAAI,MAAc,MAAM,UAAU;AAC7D,MAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AAEjC,QAAM,OAAO,IAAI,OAAQ,IAAI,KAAa,MAAM,UAAU;AAC1D,MAAI,MAAM,QAAQ,IAAI,EAAG,QAAO;AAEhC,SAAO;AACT;","names":[]}
@@ -1,9 +1,3 @@
1
- import { fileURLToPath as __adcpFileURLToPath } from 'node:url';
2
- import { dirname as __adcpDirname } from 'node:path';
3
- import { createRequire as __adcpCreateRequire } from 'node:module';
4
- const __filename = __adcpFileURLToPath(import.meta.url);
5
- const __dirname = __adcpDirname(__filename);
6
- const require = __adcpCreateRequire(import.meta.url);
7
1
  function validateUserAgent(value) {
8
2
  if (/[\r\n\x00]/.test(value)) {
9
3
  throw new Error("userAgent must not contain newline or null characters");