@adcp/sdk 17.0.0-beta.0 → 17.0.0-beta.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 (277) hide show
  1. package/dist/lib/adapters/keyed-account-store.js +1 -1
  2. package/dist/lib/adapters/keyed-account-store.mjs +1 -1
  3. package/dist/lib/adapters/version/3.0/brand-fields.d.mts +7 -1
  4. package/dist/lib/adapters/version/3.0/brand-fields.d.ts +7 -1
  5. package/dist/lib/adapters/version/3.0/brand-fields.js +139 -3
  6. package/dist/lib/adapters/version/3.0/brand-fields.mjs +136 -2
  7. package/dist/lib/adapters/version/3.0/index.js +6 -0
  8. package/dist/lib/adapters/version/3.0/index.mjs +7 -1
  9. package/dist/lib/adapters/version/3.1/bidding.js +1 -1
  10. package/dist/lib/adapters/version/3.1/bidding.mjs +1 -1
  11. package/dist/lib/adapters/version/types.d.mts +5 -0
  12. package/dist/lib/adapters/version/types.d.ts +5 -0
  13. package/dist/lib/canonical-references/index.js +2 -0
  14. package/dist/lib/canonical-references/index.mjs +2 -0
  15. package/dist/lib/client/account-changes.d.mts +3 -1
  16. package/dist/lib/client/account-changes.d.ts +3 -1
  17. package/dist/lib/client/account-changes.js +22 -2
  18. package/dist/lib/client/account-changes.mjs +22 -2
  19. package/dist/lib/conformance/oracle.js +3 -2
  20. package/dist/lib/conformance/oracle.mjs +3 -2
  21. package/dist/lib/core/AgentClient.d.mts +165 -1
  22. package/dist/lib/core/AgentClient.d.ts +165 -1
  23. package/dist/lib/core/AgentClient.js +446 -8
  24. package/dist/lib/core/AgentClient.mjs +446 -8
  25. package/dist/lib/core/ConversationTypes.d.mts +8 -0
  26. package/dist/lib/core/ConversationTypes.d.ts +8 -0
  27. package/dist/lib/core/ProtocolResponseParser.d.mts +1 -1
  28. package/dist/lib/core/ProtocolResponseParser.d.ts +1 -1
  29. package/dist/lib/core/ProtocolResponseParser.js +28 -18
  30. package/dist/lib/core/ProtocolResponseParser.mjs +11 -1
  31. package/dist/lib/core/ResponseValidator.js +1 -1
  32. package/dist/lib/core/ResponseValidator.mjs +1 -1
  33. package/dist/lib/core/SingleAgentClient.d.mts +122 -7
  34. package/dist/lib/core/SingleAgentClient.d.ts +122 -7
  35. package/dist/lib/core/SingleAgentClient.js +601 -96
  36. package/dist/lib/core/SingleAgentClient.mjs +590 -84
  37. package/dist/lib/core/TaskExecutor.d.mts +7 -0
  38. package/dist/lib/core/TaskExecutor.d.ts +7 -0
  39. package/dist/lib/core/TaskExecutor.js +23 -8
  40. package/dist/lib/core/TaskExecutor.mjs +23 -8
  41. package/dist/lib/core/task-status.d.mts +2 -0
  42. package/dist/lib/core/task-status.d.ts +2 -0
  43. package/dist/lib/core/task-status.js +11 -2
  44. package/dist/lib/core/task-status.mjs +9 -1
  45. package/dist/lib/errors/index.d.mts +22 -0
  46. package/dist/lib/errors/index.d.ts +22 -0
  47. package/dist/lib/errors/index.js +43 -0
  48. package/dist/lib/errors/index.mjs +42 -0
  49. package/dist/lib/identity-3.3/trust.d.mts +1 -4
  50. package/dist/lib/identity-3.3/trust.d.ts +1 -4
  51. package/dist/lib/identity-3.3/trust.js +34 -21
  52. package/dist/lib/identity-3.3/trust.mjs +34 -21
  53. package/dist/lib/identity-3.3/validation.js +5 -3
  54. package/dist/lib/identity-3.3/validation.mjs +6 -4
  55. package/dist/lib/index.d.mts +7 -53
  56. package/dist/lib/index.d.ts +7 -53
  57. package/dist/lib/index.js +13 -0
  58. package/dist/lib/index.mjs +9 -0
  59. package/dist/lib/media-buy/compatibility.js +6 -1
  60. package/dist/lib/media-buy/compatibility.mjs +6 -1
  61. package/dist/lib/protocols/mcp-modern.d.mts +2 -0
  62. package/dist/lib/protocols/mcp-modern.d.ts +2 -0
  63. package/dist/lib/protocols/mcp-modern.js +31 -5
  64. package/dist/lib/protocols/mcp-modern.mjs +31 -5
  65. package/dist/lib/protocols/mcp-scope.d.mts +6 -1
  66. package/dist/lib/protocols/mcp-scope.d.ts +6 -1
  67. package/dist/lib/protocols/mcp-scope.js +25 -3
  68. package/dist/lib/protocols/mcp-scope.mjs +24 -3
  69. package/dist/lib/protocols/mcp.js +12 -6
  70. package/dist/lib/protocols/mcp.mjs +13 -6
  71. package/dist/lib/reporting/inspection.js +1 -0
  72. package/dist/lib/reporting/inspection.mjs +1 -0
  73. package/dist/lib/reporting/ledger/coverage.d.mts +5 -0
  74. package/dist/lib/reporting/ledger/coverage.d.ts +5 -0
  75. package/dist/lib/reporting/ledger/coverage.js +37 -3
  76. package/dist/lib/reporting/ledger/coverage.mjs +36 -3
  77. package/dist/lib/reporting/ledger/handler.js +7 -4
  78. package/dist/lib/reporting/ledger/handler.mjs +7 -4
  79. package/dist/lib/reporting/ledger/producer.js +215 -69
  80. package/dist/lib/reporting/ledger/producer.mjs +217 -70
  81. package/dist/lib/reporting/ledger/schedule.d.mts +2 -2
  82. package/dist/lib/reporting/ledger/schedule.d.ts +2 -2
  83. package/dist/lib/reporting/ledger/schedule.js +8 -5
  84. package/dist/lib/reporting/ledger/schedule.mjs +8 -5
  85. package/dist/lib/reporting/ledger/status-ingest.d.mts +1 -1
  86. package/dist/lib/reporting/ledger/status-ingest.d.ts +1 -1
  87. package/dist/lib/reporting/ledger/status-ingest.js +4 -3
  88. package/dist/lib/reporting/ledger/status-ingest.mjs +4 -3
  89. package/dist/lib/reporting/ledger/types.d.mts +36 -1
  90. package/dist/lib/reporting/ledger/types.d.ts +36 -1
  91. package/dist/lib/reporting/service/index.d.mts +14 -1
  92. package/dist/lib/reporting/service/index.d.ts +14 -1
  93. package/dist/lib/reporting/service/index.js +24 -12
  94. package/dist/lib/reporting/service/index.mjs +24 -12
  95. package/dist/lib/schemas/browser.d.mts +2 -0
  96. package/dist/lib/schemas/browser.d.ts +2 -0
  97. package/dist/lib/schemas/browser.js +3 -0
  98. package/dist/lib/schemas/browser.mjs +2 -0
  99. package/dist/lib/schemas/index.d.mts +5 -3
  100. package/dist/lib/schemas/index.d.ts +5 -3
  101. package/dist/lib/schemas/index.js +5 -0
  102. package/dist/lib/schemas/index.mjs +4 -0
  103. package/dist/lib/server/account-response-identity.d.mts +17 -0
  104. package/dist/lib/server/account-response-identity.d.ts +17 -0
  105. package/dist/lib/server/account-response-identity.js +52 -0
  106. package/dist/lib/server/account-response-identity.mjs +28 -0
  107. package/dist/lib/server/account-sync-contract.js +2 -2
  108. package/dist/lib/server/account-sync-contract.mjs +2 -2
  109. package/dist/lib/server/create-adcp-server.js +33 -20
  110. package/dist/lib/server/create-adcp-server.mjs +36 -12
  111. package/dist/lib/server/decisioning/account.d.mts +36 -10
  112. package/dist/lib/server/decisioning/account.d.ts +36 -10
  113. package/dist/lib/server/decisioning/account.js +33 -14
  114. package/dist/lib/server/decisioning/account.mjs +33 -14
  115. package/dist/lib/server/decisioning/runtime/from-platform.d.mts +5 -5
  116. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +5 -5
  117. package/dist/lib/server/decisioning/runtime/from-platform.js +4 -4
  118. package/dist/lib/server/decisioning/runtime/from-platform.mjs +4 -4
  119. package/dist/lib/server/media-buy-store.d.mts +26 -12
  120. package/dist/lib/server/media-buy-store.d.ts +26 -12
  121. package/dist/lib/server/media-buy-store.js +69 -21
  122. package/dist/lib/server/media-buy-store.mjs +69 -21
  123. package/dist/lib/server/notification-subscriptions/runtime.d.mts +1 -1
  124. package/dist/lib/server/notification-subscriptions/runtime.d.ts +1 -1
  125. package/dist/lib/server/notification-subscriptions/runtime.js +4 -0
  126. package/dist/lib/server/notification-subscriptions/runtime.mjs +4 -0
  127. package/dist/lib/server/responses.js +9 -1
  128. package/dist/lib/server/responses.mjs +9 -1
  129. package/dist/lib/signing/agent-fetch.d.mts +1 -1
  130. package/dist/lib/signing/agent-fetch.d.ts +1 -1
  131. package/dist/lib/signing/agent-fetch.js +3 -3
  132. package/dist/lib/signing/agent-fetch.mjs +3 -3
  133. package/dist/lib/testing/client.d.mts +1 -0
  134. package/dist/lib/testing/client.d.ts +1 -0
  135. package/dist/lib/testing/client.js +6 -5
  136. package/dist/lib/testing/client.mjs +6 -5
  137. package/dist/lib/testing/storyboard/agent-routing.d.mts +5 -2
  138. package/dist/lib/testing/storyboard/agent-routing.d.ts +5 -2
  139. package/dist/lib/testing/storyboard/agent-routing.js +11 -4
  140. package/dist/lib/testing/storyboard/agent-routing.mjs +11 -4
  141. package/dist/lib/testing/storyboard/canonical-format-satisfaction.js +60 -14
  142. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs +60 -14
  143. package/dist/lib/testing/storyboard/compliance.d.mts +2 -5
  144. package/dist/lib/testing/storyboard/compliance.d.ts +2 -5
  145. package/dist/lib/testing/storyboard/compliance.js +62 -13
  146. package/dist/lib/testing/storyboard/compliance.mjs +63 -14
  147. package/dist/lib/testing/storyboard/context.d.mts +13 -3
  148. package/dist/lib/testing/storyboard/context.d.ts +13 -3
  149. package/dist/lib/testing/storyboard/context.js +15 -10
  150. package/dist/lib/testing/storyboard/context.mjs +15 -10
  151. package/dist/lib/testing/storyboard/request-signing/vector-loader.d.mts +2 -0
  152. package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts +2 -0
  153. package/dist/lib/testing/storyboard/request-signing/vector-loader.js +11 -0
  154. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +10 -0
  155. package/dist/lib/testing/storyboard/runner.js +141 -13
  156. package/dist/lib/testing/storyboard/runner.mjs +141 -13
  157. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  158. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  159. package/dist/lib/testing/storyboard/validations.js +4 -1
  160. package/dist/lib/testing/storyboard/validations.mjs +4 -1
  161. package/dist/lib/testing/test-controller.js +3 -0
  162. package/dist/lib/testing/test-controller.mjs +3 -0
  163. package/dist/lib/types/accept-proposal.d.ts +20 -28
  164. package/dist/lib/types/asset-instances.d.mts +1 -1
  165. package/dist/lib/types/asset-instances.d.ts +1 -1
  166. package/dist/lib/types/buy-products.d.ts +20 -28
  167. package/dist/lib/types/check-governance.d.ts +20 -28
  168. package/dist/lib/types/comply-test-controller.d.ts +20 -28
  169. package/dist/lib/types/control-media-buy.d.ts +20 -28
  170. package/dist/lib/types/core.generated.d.mts +273 -184
  171. package/dist/lib/types/core.generated.d.ts +273 -184
  172. package/dist/lib/types/create-media-buy.d.ts +20 -28
  173. package/dist/lib/types/get-media-buys.d.ts +20 -28
  174. package/dist/lib/types/get-products.d.ts +20 -28
  175. package/dist/lib/types/index.d.mts +6 -1
  176. package/dist/lib/types/index.d.ts +6 -1
  177. package/dist/lib/types/index.js +6 -1
  178. package/dist/lib/types/index.mjs +4 -1
  179. package/dist/lib/types/inline-enums.generated.d.mts +30 -4
  180. package/dist/lib/types/inline-enums.generated.d.ts +30 -4
  181. package/dist/lib/types/inline-enums.generated.js +41 -2
  182. package/dist/lib/types/inline-enums.generated.mjs +28 -2
  183. package/dist/lib/types/list-products.d.ts +20 -28
  184. package/dist/lib/types/list-proposals.d.ts +20 -28
  185. package/dist/lib/types/media-buy-delivery-report.d.mts +6 -0
  186. package/dist/lib/types/media-buy-delivery-report.d.ts +6 -0
  187. package/dist/lib/types/media-buy-delivery-report.js +16 -0
  188. package/dist/lib/types/media-buy-delivery-report.mjs +0 -0
  189. package/dist/lib/types/refine-proposals.d.ts +20 -28
  190. package/dist/lib/types/request-proposals.d.ts +20 -28
  191. package/dist/lib/types/schemas.generated.d.ts +63113 -127273
  192. package/dist/lib/types/schemas.generated.js +759 -770
  193. package/dist/lib/types/schemas.generated.mjs +759 -770
  194. package/dist/lib/types/targeting-keys.generated.d.mts +4 -0
  195. package/dist/lib/types/targeting-keys.generated.d.ts +4 -0
  196. package/dist/lib/types/targeting-keys.generated.js +109 -0
  197. package/dist/lib/types/targeting-keys.generated.mjs +84 -0
  198. package/dist/lib/types/tools.generated.d.mts +2 -68
  199. package/dist/lib/types/tools.generated.d.ts +2 -68
  200. package/dist/lib/types/update-media-buy.d.ts +20 -28
  201. package/dist/lib/utils/adcp-version-config.js +5 -2
  202. package/dist/lib/utils/adcp-version-config.mjs +5 -2
  203. package/dist/lib/utils/envelope-status-compat.d.mts +18 -1
  204. package/dist/lib/utils/envelope-status-compat.d.ts +18 -1
  205. package/dist/lib/utils/envelope-status-compat.js +11 -5
  206. package/dist/lib/utils/envelope-status-compat.mjs +11 -5
  207. package/dist/lib/utils/response-unwrapper.js +18 -10
  208. package/dist/lib/utils/response-unwrapper.mjs +18 -10
  209. package/dist/lib/v2/format-schema/resolver.js +1 -1
  210. package/dist/lib/v2/format-schema/resolver.mjs +1 -1
  211. package/dist/lib/v2/projection/creative-delivery.js +159 -39
  212. package/dist/lib/v2/projection/creative-delivery.mjs +163 -39
  213. package/dist/lib/v2/projection/index.d.mts +1 -0
  214. package/dist/lib/v2/projection/index.d.ts +1 -0
  215. package/dist/lib/v2/projection/index.js +3 -0
  216. package/dist/lib/v2/projection/index.mjs +2 -0
  217. package/dist/lib/v2/projection/legacy-metadata.d.mts +19 -0
  218. package/dist/lib/v2/projection/legacy-metadata.d.ts +19 -0
  219. package/dist/lib/v2/projection/legacy-metadata.js +91 -0
  220. package/dist/lib/v2/projection/legacy-metadata.mjs +86 -0
  221. package/dist/lib/v2/projection/v1-to-v2.d.mts +1 -1
  222. package/dist/lib/v2/projection/v1-to-v2.d.ts +1 -1
  223. package/dist/lib/v2/projection/v1-to-v2.js +12 -9
  224. package/dist/lib/v2/projection/v1-to-v2.mjs +12 -9
  225. package/dist/lib/validation/budget-allocation.d.mts +3 -3
  226. package/dist/lib/validation/budget-allocation.d.ts +3 -3
  227. package/dist/lib/validation/compact-schema.d.mts +27 -0
  228. package/dist/lib/validation/compact-schema.d.ts +27 -0
  229. package/dist/lib/validation/compact-schema.js +276 -0
  230. package/dist/lib/validation/compact-schema.mjs +250 -0
  231. package/dist/lib/validation/media-buy-delivery-report.d.mts +8 -0
  232. package/dist/lib/validation/media-buy-delivery-report.d.ts +8 -0
  233. package/dist/lib/validation/media-buy-delivery-report.js +31 -0
  234. package/dist/lib/validation/media-buy-delivery-report.mjs +7 -0
  235. package/dist/lib/validation/nonempty-array.d.mts +15 -0
  236. package/dist/lib/validation/nonempty-array.d.ts +15 -0
  237. package/dist/lib/validation/nonempty-array.js +41 -0
  238. package/dist/lib/validation/nonempty-array.mjs +7 -0
  239. package/dist/lib/validation/schema-diagnostic-origins.d.mts +21 -0
  240. package/dist/lib/validation/schema-diagnostic-origins.d.ts +21 -0
  241. package/dist/lib/validation/schema-diagnostic-origins.js +193 -0
  242. package/dist/lib/validation/schema-diagnostic-origins.mjs +169 -0
  243. package/dist/lib/validation/schema-loader.js +86 -16
  244. package/dist/lib/validation/schema-loader.mjs +82 -16
  245. package/dist/lib/validation/schema-validator.d.mts +10 -19
  246. package/dist/lib/validation/schema-validator.d.ts +10 -19
  247. package/dist/lib/validation/schema-validator.js +136 -43
  248. package/dist/lib/validation/schema-validator.mjs +140 -44
  249. package/dist/lib/validation/sync-creatives.d.mts +22 -22
  250. package/dist/lib/validation/sync-creatives.d.ts +22 -22
  251. package/dist/lib/version.d.mts +3 -3
  252. package/dist/lib/version.d.ts +3 -3
  253. package/dist/lib/version.js +3 -3
  254. package/dist/lib/version.mjs +3 -3
  255. package/dist/lib/webhooks/index.d.mts +3 -0
  256. package/dist/lib/webhooks/index.d.ts +3 -0
  257. package/dist/lib/webhooks/index.js +3 -0
  258. package/dist/lib/webhooks/index.mjs +2 -0
  259. package/dist/lib/webhooks/media-buy-delivery.d.mts +43 -0
  260. package/dist/lib/webhooks/media-buy-delivery.d.ts +43 -0
  261. package/dist/lib/webhooks/media-buy-delivery.js +119 -0
  262. package/dist/lib/webhooks/media-buy-delivery.mjs +94 -0
  263. package/docs/TYPE-SUMMARY.md +2 -2
  264. package/docs/guides/COLLECTION-FIXTURE-FOUNDATION.md +11 -0
  265. package/docs/guides/DELIVERY-WEBHOOK-PARSING.md +142 -0
  266. package/docs/guides/DISCOVERY-CACHE-AND-SESSION-REUSE.md +27 -1
  267. package/docs/guides/REPORTING-LEDGER.md +93 -0
  268. package/docs/guides/REPORTING-STABILITY.md +1 -1
  269. package/docs/guides/TYPED-CLIENT-TOOLS.md +49 -0
  270. package/docs/llms.txt +2 -2
  271. package/docs/migration-14.x-rc-worksheet.md +4 -4
  272. package/docs/migration-16-to-17.md +202 -2
  273. package/docs/migration-6.6-to-6.7.md +14 -0
  274. package/docs/migration-account-change-feed.md +15 -0
  275. package/docs/migration-reporting-storage-package.md +1 -1
  276. package/docs/recipes/verifying-inbound-webhooks.md +18 -2
  277. package/package.json +2 -2
@@ -59,14 +59,19 @@ function asRecord(value) {
59
59
  function readMediaBuyStatus(record) {
60
60
  return (0, import_media_buy_status.getAuthoritativeMediaBuyStatus)(record);
61
61
  }
62
- function readMediaBuyFields(data) {
62
+ function readMediaBuyFields(data, adcpVersion) {
63
63
  const outer = asRecord(data);
64
64
  const nested = asRecord(outer?.media_buy);
65
65
  return {
66
66
  mediaBuyId: nested?.media_buy_id ?? outer?.media_buy_id,
67
- status: readMediaBuyStatus(nested) ?? readMediaBuyStatus(outer)
67
+ status: readMediaBuyStatus(nested) ?? readMediaBuyStatus(withRequestedVersion(outer, adcpVersion))
68
68
  };
69
69
  }
70
+ function withRequestedVersion(record, adcpVersion) {
71
+ if (!record || !adcpVersion) return record;
72
+ if (typeof record.adcp_version === "string" || typeof record.adcp_major_version === "number") return record;
73
+ return { ...record, adcp_version: adcpVersion };
74
+ }
70
75
  function readProposalFields(proposal) {
71
76
  if (!proposal) return {};
72
77
  const extracted = {};
@@ -181,15 +186,15 @@ const CONTEXT_EXTRACTORS = {
181
186
  control_media_buy(data) {
182
187
  return readCompactMediaBuyFields(data);
183
188
  },
184
- create_media_buy(data) {
185
- const { mediaBuyId, status } = readMediaBuyFields(data);
189
+ create_media_buy(data, adcpVersion) {
190
+ const { mediaBuyId, status } = readMediaBuyFields(data, adcpVersion);
186
191
  const extracted = {};
187
192
  if (mediaBuyId) extracted.media_buy_id = mediaBuyId;
188
193
  if (status) extracted.media_buy_status = status;
189
194
  return extracted;
190
195
  },
191
- update_media_buy(data) {
192
- const { mediaBuyId, status } = readMediaBuyFields(data);
196
+ update_media_buy(data, adcpVersion) {
197
+ const { mediaBuyId, status } = readMediaBuyFields(data, adcpVersion);
193
198
  const extracted = {};
194
199
  if (mediaBuyId) extracted.media_buy_id = mediaBuyId;
195
200
  if (status) extracted.media_buy_status = status;
@@ -381,11 +386,11 @@ const CONTEXT_EXTRACTORS = {
381
386
  return extracted;
382
387
  }
383
388
  };
384
- function extractContext(taskName, data) {
389
+ function extractContext(taskName, data, adcpVersion) {
385
390
  const extractor = CONTEXT_EXTRACTORS[taskName];
386
391
  if (!extractor) return {};
387
392
  try {
388
- return extractor(data);
393
+ return extractor(data, adcpVersion);
389
394
  } catch {
390
395
  return {};
391
396
  }
@@ -482,8 +487,8 @@ function applyContextOutputs(data, outputs) {
482
487
  }
483
488
  return result;
484
489
  }
485
- function extractContextWithProvenance(taskName, data, stepId) {
486
- const values = extractContext(taskName, data);
490
+ function extractContextWithProvenance(taskName, data, stepId, adcpVersion) {
491
+ const values = extractContext(taskName, data, adcpVersion);
487
492
  const clearGroups = (() => {
488
493
  const response = asRecord(data);
489
494
  switch (taskName) {
@@ -26,14 +26,19 @@ function asRecord(value) {
26
26
  function readMediaBuyStatus(record) {
27
27
  return getAuthoritativeMediaBuyStatus(record);
28
28
  }
29
- function readMediaBuyFields(data) {
29
+ function readMediaBuyFields(data, adcpVersion) {
30
30
  const outer = asRecord(data);
31
31
  const nested = asRecord(outer?.media_buy);
32
32
  return {
33
33
  mediaBuyId: nested?.media_buy_id ?? outer?.media_buy_id,
34
- status: readMediaBuyStatus(nested) ?? readMediaBuyStatus(outer)
34
+ status: readMediaBuyStatus(nested) ?? readMediaBuyStatus(withRequestedVersion(outer, adcpVersion))
35
35
  };
36
36
  }
37
+ function withRequestedVersion(record, adcpVersion) {
38
+ if (!record || !adcpVersion) return record;
39
+ if (typeof record.adcp_version === "string" || typeof record.adcp_major_version === "number") return record;
40
+ return { ...record, adcp_version: adcpVersion };
41
+ }
37
42
  function readProposalFields(proposal) {
38
43
  if (!proposal) return {};
39
44
  const extracted = {};
@@ -148,15 +153,15 @@ const CONTEXT_EXTRACTORS = {
148
153
  control_media_buy(data) {
149
154
  return readCompactMediaBuyFields(data);
150
155
  },
151
- create_media_buy(data) {
152
- const { mediaBuyId, status } = readMediaBuyFields(data);
156
+ create_media_buy(data, adcpVersion) {
157
+ const { mediaBuyId, status } = readMediaBuyFields(data, adcpVersion);
153
158
  const extracted = {};
154
159
  if (mediaBuyId) extracted.media_buy_id = mediaBuyId;
155
160
  if (status) extracted.media_buy_status = status;
156
161
  return extracted;
157
162
  },
158
- update_media_buy(data) {
159
- const { mediaBuyId, status } = readMediaBuyFields(data);
163
+ update_media_buy(data, adcpVersion) {
164
+ const { mediaBuyId, status } = readMediaBuyFields(data, adcpVersion);
160
165
  const extracted = {};
161
166
  if (mediaBuyId) extracted.media_buy_id = mediaBuyId;
162
167
  if (status) extracted.media_buy_status = status;
@@ -348,11 +353,11 @@ const CONTEXT_EXTRACTORS = {
348
353
  return extracted;
349
354
  }
350
355
  };
351
- function extractContext(taskName, data) {
356
+ function extractContext(taskName, data, adcpVersion) {
352
357
  const extractor = CONTEXT_EXTRACTORS[taskName];
353
358
  if (!extractor) return {};
354
359
  try {
355
- return extractor(data);
360
+ return extractor(data, adcpVersion);
356
361
  } catch {
357
362
  return {};
358
363
  }
@@ -449,8 +454,8 @@ function applyContextOutputs(data, outputs) {
449
454
  }
450
455
  return result;
451
456
  }
452
- function extractContextWithProvenance(taskName, data, stepId) {
453
- const values = extractContext(taskName, data);
457
+ function extractContextWithProvenance(taskName, data, stepId, adcpVersion) {
458
+ const values = extractContext(taskName, data, adcpVersion);
454
459
  const clearGroups = (() => {
455
460
  const response = asRecord(data);
456
461
  switch (taskName) {
@@ -34,6 +34,8 @@ export declare function signingProfileForAdcpVersion(version?: string): '3.2' |
34
34
  export declare function loadRequestSigningVectors(options?: LoadVectorsOptions): LoadedVectors;
35
35
  /** Load only the shared signing keyset, without requiring the grader vectors. */
36
36
  export declare function loadRequestSigningKeys(options?: LoadVectorsOptions): TestKeyset;
37
+ /** Refresh only the signing fixtures belonging to a changed custom compliance root. */
38
+ export declare function invalidateRequestSigningVectorCache(complianceDir: string): void;
37
39
  /** Test-only: clear the memoization cache so a fresh cache path is reread. */
38
40
  export declare function __resetVectorCache(): void;
39
41
  /** Where the A2A operation-resolution vectors came from. */
@@ -34,6 +34,8 @@ export declare function signingProfileForAdcpVersion(version?: string): '3.2' |
34
34
  export declare function loadRequestSigningVectors(options?: LoadVectorsOptions): LoadedVectors;
35
35
  /** Load only the shared signing keyset, without requiring the grader vectors. */
36
36
  export declare function loadRequestSigningKeys(options?: LoadVectorsOptions): TestKeyset;
37
+ /** Refresh only the signing fixtures belonging to a changed custom compliance root. */
38
+ export declare function invalidateRequestSigningVectorCache(complianceDir: string): void;
37
39
  /** Test-only: clear the memoization cache so a fresh cache path is reread. */
38
40
  export declare function __resetVectorCache(): void;
39
41
  /** Where the A2A operation-resolution vectors came from. */
@@ -22,6 +22,7 @@ __export(vector_loader_exports, {
22
22
  A2A_VECTORS_UNAVAILABLE_MESSAGE: () => A2A_VECTORS_UNAVAILABLE_MESSAGE,
23
23
  __resetVectorCache: () => __resetVectorCache,
24
24
  findKey: () => findKey,
25
+ invalidateRequestSigningVectorCache: () => invalidateRequestSigningVectorCache,
25
26
  loadA2aOperationResolutionVectors: () => loadA2aOperationResolutionVectors,
26
27
  loadRequestSigningKeys: () => loadRequestSigningKeys,
27
28
  loadRequestSigningVectors: () => loadRequestSigningVectors,
@@ -95,6 +96,15 @@ function loadRequestSigningKeys(options = {}) {
95
96
  const cacheDir = (0, import_compliance.getComplianceCacheDir)(options);
96
97
  return loadKeys((0, import_path.join)(cacheDir, "test-vectors", "request-signing", "keys.json"));
97
98
  }
99
+ function invalidateRequestSigningVectorCache(complianceDir) {
100
+ const sourceDir = (0, import_path.resolve)(complianceDir, "test-vectors", "request-signing");
101
+ for (const key of VECTOR_CACHE.keys()) {
102
+ if ((0, import_path.resolve)(key) === sourceDir) VECTOR_CACHE.delete(key);
103
+ }
104
+ for (const key of A2A_VECTOR_CACHE.keys()) {
105
+ if ((0, import_path.resolve)(key) === (0, import_path.join)(sourceDir, "a2a")) A2A_VECTOR_CACHE.delete(key);
106
+ }
107
+ }
98
108
  function __resetVectorCache() {
99
109
  VECTOR_CACHE.clear();
100
110
  A2A_VECTOR_CACHE.clear();
@@ -384,6 +394,7 @@ function strArray(v, where) {
384
394
  A2A_VECTORS_UNAVAILABLE_MESSAGE,
385
395
  __resetVectorCache,
386
396
  findKey,
397
+ invalidateRequestSigningVectorCache,
387
398
  loadA2aOperationResolutionVectors,
388
399
  loadRequestSigningKeys,
389
400
  loadRequestSigningVectors,
@@ -69,6 +69,15 @@ function loadRequestSigningKeys(options = {}) {
69
69
  const cacheDir = getComplianceCacheDir(options);
70
70
  return loadKeys(join(cacheDir, "test-vectors", "request-signing", "keys.json"));
71
71
  }
72
+ function invalidateRequestSigningVectorCache(complianceDir) {
73
+ const sourceDir = resolve(complianceDir, "test-vectors", "request-signing");
74
+ for (const key of VECTOR_CACHE.keys()) {
75
+ if (resolve(key) === sourceDir) VECTOR_CACHE.delete(key);
76
+ }
77
+ for (const key of A2A_VECTOR_CACHE.keys()) {
78
+ if (resolve(key) === join(sourceDir, "a2a")) A2A_VECTOR_CACHE.delete(key);
79
+ }
80
+ }
72
81
  function __resetVectorCache() {
73
82
  VECTOR_CACHE.clear();
74
83
  A2A_VECTOR_CACHE.clear();
@@ -357,6 +366,7 @@ export {
357
366
  A2A_VECTORS_UNAVAILABLE_MESSAGE,
358
367
  __resetVectorCache,
359
368
  findKey,
369
+ invalidateRequestSigningVectorCache,
360
370
  loadA2aOperationResolutionVectors,
361
371
  loadRequestSigningKeys,
362
372
  loadRequestSigningVectors,
@@ -684,7 +684,7 @@ function remapTaskCompletionOutputs(outputs) {
684
684
  return o;
685
685
  });
686
686
  }
687
- async function resolveTaskCompletionOutputs(taskResult, outputs, client, webhookReceiver, originatingTaskName) {
687
+ async function resolveTaskCompletionOutputs(taskResult, outputs, client, webhookReceiver, originatingTaskName, responseAdcpVersion) {
688
688
  const hasTaskCompletionPath = outputs.some(
689
689
  (o) => typeof o.path === "string" && o.path.startsWith(TASK_COMPLETION_PATH_PREFIX)
690
690
  );
@@ -737,7 +737,10 @@ async function resolveTaskCompletionOutputs(taskResult, outputs, client, webhook
737
737
  if (winner.kind === "poll") {
738
738
  const polled = winner.result;
739
739
  if (polled.success === false) return { attempted: true, taskFailed: true };
740
- return { attempted: true, data: normalizeTaskCompletionData(polled.data, originatingTaskName) };
740
+ return {
741
+ attempted: true,
742
+ data: normalizeTaskCompletionData(polled.data, originatingTaskName, responseAdcpVersion)
743
+ };
741
744
  }
742
745
  const waitResult = winner.result;
743
746
  if (waitResult.timed_out) {
@@ -745,7 +748,10 @@ async function resolveTaskCompletionOutputs(taskResult, outputs, client, webhook
745
748
  }
746
749
  const webhookBody = waitResult.webhook.body;
747
750
  if (webhookBody?.status === "completed") {
748
- return { attempted: true, data: normalizeTaskCompletionData(webhookBody.result, originatingTaskName) };
751
+ return {
752
+ attempted: true,
753
+ data: normalizeTaskCompletionData(webhookBody.result, originatingTaskName, responseAdcpVersion)
754
+ };
749
755
  }
750
756
  return { attempted: true, taskFailed: true };
751
757
  } catch {
@@ -754,18 +760,19 @@ async function resolveTaskCompletionOutputs(taskResult, outputs, client, webhook
754
760
  if (timer) clearTimeout(timer);
755
761
  }
756
762
  }
757
- function normalizeTaskCompletionData(data, taskName) {
763
+ function normalizeTaskCompletionData(data, taskName, adcpVersion) {
758
764
  if (data == null || typeof data !== "object" || Array.isArray(data)) return data;
759
765
  const original = data;
760
- const compat = (0, import_envelope_status_compat.injectLegacyEnvelopeStatus)(original, { toolName: taskName });
766
+ const compatOptions = { toolName: taskName, adcpVersion };
767
+ const compat = (0, import_envelope_status_compat.injectLegacyEnvelopeStatus)(original, compatOptions);
761
768
  if (!("status" in original) && "status" in compat) {
762
769
  const { status: _status, ...rest } = compat;
763
- return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)(rest, { toolName: taskName });
770
+ return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)(rest, compatOptions);
764
771
  }
765
772
  if ((taskName === "create_media_buy" || taskName === "update_media_buy") && typeof original.status === "string" && compat.status === "completed" && typeof compat.media_buy_status === "string") {
766
- return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)({ ...compat, status: original.status }, { toolName: taskName });
773
+ return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)({ ...compat, status: original.status }, compatOptions);
767
774
  }
768
- return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)(compat, { toolName: taskName });
775
+ return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)(compat, compatOptions);
769
776
  }
770
777
  function readEnvIntOrDefault(value, fallback) {
771
778
  if (!value) return fallback;
@@ -1903,9 +1910,10 @@ async function prepareStoryboardFixturesBody(agentUrl, storyboard, options) {
1903
1910
  options = snapshotPreparationOptions(options);
1904
1911
  }
1905
1912
  const callerOwnsClients = (0, import_client.hasTestClientScope)();
1906
- const preparationOptions = resolvePreparationRouteOptions(agentUrls[0], options);
1913
+ const runOptions = options;
1914
+ const preparationOptions = resolvePreparationRouteOptions(agentUrls[0], runOptions);
1907
1915
  const resolution = (0, import_client.getOrCreateClientResolution)(agentUrls[0], preparationOptions);
1908
- const client = resolution.client;
1916
+ let client = resolution.client;
1909
1917
  const finishPreparation = (seeding, disposition) => {
1910
1918
  if (!scopeStillMatches()) {
1911
1919
  return refusePreparation(driftRefusal, seeding ?? void 0);
@@ -1915,6 +1923,45 @@ async function prepareStoryboardFixturesBody(agentUrl, storyboard, options) {
1915
1923
  options = preparationOptions;
1916
1924
  try {
1917
1925
  let profile = options._profile;
1926
+ let discoveryStep;
1927
+ let routingContext;
1928
+ const failDiscovery = (step, failedProfile) => {
1929
+ const failed = buildDiscoveryFailedResult(agentUrls, storyboard, step, failedProfile);
1930
+ return finishPreparation(
1931
+ { phase: failed.phases[0], allPassed: false, passedCount: 0, failedCount: 1 },
1932
+ { status: "failed", detail: step.error ?? "agent discovery failed before fixture preparation" }
1933
+ );
1934
+ };
1935
+ if (runOptions.agents && (storyboardCapabilityPredicates(storyboard).length > 0 || storyboard.required_tools?.length || storyboard.required_any_of_tools?.length)) {
1936
+ try {
1937
+ validateAgentsMap(agentUrl, storyboard, runOptions);
1938
+ routingContext = await (0, import_agent_routing.buildRoutingContext)(storyboard, { ...runOptions, discovery_resilient: false });
1939
+ } catch (error) {
1940
+ const failedStep = error instanceof import_agent_routing.DiscoveryFailure ? error.step : void 0;
1941
+ return await failDiscovery({
1942
+ ...failedStep,
1943
+ step: failedStep?.step ?? "Discover preparation topology",
1944
+ passed: false,
1945
+ duration_ms: failedStep?.duration_ms ?? 0,
1946
+ error: (0, import_oauth_metadata_graph.redactOAuthUrlsInText)(
1947
+ error instanceof import_agent_routing.DiscoveryFailure ? `Discovery failed for agent "${error.agentKey}" (${(0, import_oauth_metadata_graph.redactOAuthUrlForOutput)(error.url)}): ${error.underlying}` : error instanceof Error ? error.message : String(error)
1948
+ )
1949
+ });
1950
+ }
1951
+ for (const routeProfile of routingContext.profiles.values()) {
1952
+ const failure = (0, import_client.describeProfileDiscoveryFailure)(
1953
+ routeProfile,
1954
+ runOptions._requireValidCapabilityEvidence === true,
1955
+ runOptions._allowCapabilityDiagnostic === true
1956
+ );
1957
+ if (failure) return await failDiscovery(failure, routeProfile);
1958
+ }
1959
+ const firstKey = Object.keys(runOptions.agents)[0];
1960
+ profile = routingContext.profiles.get(firstKey);
1961
+ client = routingContext.clients.get(firstKey);
1962
+ discoveryStep = routingContext.discoverySteps?.get(firstKey);
1963
+ options = { ...options, _profile: profile, agentTools: (0, import_agent_routing.normalizeAgentToolNames)(profile.tools) };
1964
+ }
1918
1965
  const suppliedFailure = profile && (0, import_client.describeProfileDiscoveryFailure)(
1919
1966
  profile,
1920
1967
  options._requireValidCapabilityEvidence === true,
@@ -1927,8 +1974,9 @@ async function prepareStoryboardFixturesBody(agentUrl, storyboard, options) {
1927
1974
  { status: "failed", detail: suppliedFailure.error ?? "agent discovery failed" }
1928
1975
  );
1929
1976
  }
1930
- if (!profile && !resolution.reusedShared) {
1977
+ if (!profile) {
1931
1978
  const discovered = await (0, import_client.getOrDiscoverStoryboardProfile)(client, options);
1979
+ discoveryStep = discovered.evidence ?? discovered.step;
1932
1980
  if (discovered.step.passed === false) {
1933
1981
  const failed = buildDiscoveryFailedResult(agentUrls, storyboard, discovered.step, discovered.profile);
1934
1982
  return await finishPreparation(
@@ -1949,6 +1997,80 @@ async function prepareStoryboardFixturesBody(agentUrl, storyboard, options) {
1949
1997
  };
1950
1998
  }
1951
1999
  if (!scopeStillMatches()) return await refusePreparation(driftRefusal);
2000
+ let capabilityUnmet;
2001
+ const applicabilityTools = routingContext ? [...new Set([...routingContext.profiles.values()].flatMap((p) => (0, import_agent_routing.normalizeAgentToolNames)(p.tools) ?? []))] : options.agentTools;
2002
+ try {
2003
+ if (routingContext && runOptions.agents) {
2004
+ const dispatch = createRoutingDispatcher(routingContext, runOptions, runOptions.agents);
2005
+ const defaultProfile = runOptions.default_agent ? routingContext.profiles.get(runOptions.default_agent) : void 0;
2006
+ const rootDetails = storyboard.phases.flatMap(
2007
+ (phase) => phase.steps.filter((step) => step.task !== import_loader.VALIDATION_ONLY_TASK).map((step) => {
2008
+ const selected = dispatch.nextFor(step);
2009
+ const owner = runOptions.default_agent ? defaultProfile : selected.profile;
2010
+ return evaluateStoryboardCapabilityGates(
2011
+ storyboard,
2012
+ owner,
2013
+ (0, import_agent_routing.normalizeAgentToolNames)(owner?.tools),
2014
+ runOptions.adcpVersion
2015
+ );
2016
+ })
2017
+ );
2018
+ capabilityUnmet = rootDetails.length > 0 && rootDetails.every((detail) => detail !== null) ? rootDetails[0] : null;
2019
+ } else {
2020
+ capabilityUnmet = evaluateStoryboardCapabilityGates(
2021
+ storyboard,
2022
+ profile,
2023
+ options.agentTools,
2024
+ options.adcpVersion
2025
+ );
2026
+ }
2027
+ } catch (error) {
2028
+ return await failDiscovery({
2029
+ step: "Resolve preparation routes",
2030
+ passed: false,
2031
+ duration_ms: 0,
2032
+ error: (0, import_oauth_metadata_graph.redactOAuthUrlsInText)(error instanceof Error ? error.message : String(error))
2033
+ });
2034
+ }
2035
+ const missingFamily = applicabilityTools && storyboard.required_any_of_tools?.find((family) => !(0, import_agent_routing.hasAnyRequiredTool)(family.tools, applicabilityTools));
2036
+ const unmetDetail = capabilityUnmet ?? (missingFamily ? `missing_required_tool_family: needs ${missingFamily.tools.join(" or ")}` + (missingFamily.rationale ? ` (${missingFamily.rationale})` : "") : null) ?? (storyboard.required_tools?.length && applicabilityTools && !(0, import_agent_routing.hasAnyRequiredTool)(storyboard.required_tools, applicabilityTools) ? `agent does not advertise any of [${storyboard.required_tools.join(", ")}]` : null);
2037
+ if (unmetDetail !== null) {
2038
+ const observations = routingContext && runOptions.agents ? Object.entries(runOptions.agents).map(([key, entry]) => ({
2039
+ key,
2040
+ url: entry.url,
2041
+ step: routingContext.discoverySteps?.get(key)
2042
+ })) : [{ key: "discovery", url: agentUrls[0], step: discoveryStep }];
2043
+ const steps = observations.map(({ key, url, step }) => ({
2044
+ storyboard_id: storyboard.id,
2045
+ phase_id: "discovery",
2046
+ step_id: key,
2047
+ title: step ? "Agent capability discovery" : "Supplied agent capability profile",
2048
+ task: step?.task ?? "",
2049
+ passed: true,
2050
+ duration_ms: step?.duration_ms ?? 0,
2051
+ validations: [],
2052
+ context: {},
2053
+ ...routingContext && { agent_url: (0, import_oauth_metadata_graph.redactOAuthUrlForOutput)(url) },
2054
+ extraction: step?.extraction ?? { path: "none" },
2055
+ ...step?.request && { request: step.request },
2056
+ ...step?.response_record && { response_record: step.response_record }
2057
+ }));
2058
+ return await finishPreparation(
2059
+ {
2060
+ phase: {
2061
+ phase_id: "discovery",
2062
+ phase_title: "Agent capability discovery",
2063
+ passed: true,
2064
+ duration_ms: steps.reduce((total, step) => total + step.duration_ms, 0),
2065
+ steps
2066
+ },
2067
+ allPassed: true,
2068
+ passedCount: steps.length,
2069
+ failedCount: 0
2070
+ },
2071
+ { status: "unsupported", reason: "not_applicable", detail: unmetDetail }
2072
+ );
2073
+ }
1952
2074
  const context = createRunContext(storyboard, options).context;
1953
2075
  const seeding = await (0, import_seeding.runControllerSeeding)(client, storyboard, options, context);
1954
2076
  if (!seeding) {
@@ -5841,7 +5963,12 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
5841
5963
  };
5842
5964
  const hasData = taskResult?.data !== void 0 && taskResult?.data !== null;
5843
5965
  if (passed && hasData && taskResult && !(effectiveStep.task === "sync_accounts" && request.dry_run === true)) {
5844
- const extracted = (0, import_context.extractContextWithProvenance)(effectiveStep.task, taskResult.data, step.id);
5966
+ const extracted = (0, import_context.extractContextWithProvenance)(
5967
+ effectiveStep.task,
5968
+ taskResult.data,
5969
+ step.id,
5970
+ options._serverAdcpVersion ?? options.adcpVersion
5971
+ );
5845
5972
  const conventionUnset = [];
5846
5973
  for (const group of extracted.clearGroups ?? []) {
5847
5974
  if (group.when && !group.when.values.includes(updatedContext[group.when.key])) continue;
@@ -5872,7 +5999,8 @@ async function executeStep(client, step, storyboardId, phaseId, context, allStep
5872
5999
  step.context_outputs,
5873
6000
  client,
5874
6001
  runState.webhookReceiver,
5875
- effectiveStep.task
6002
+ effectiveStep.task,
6003
+ options._serverAdcpVersion ?? options.adcpVersion
5876
6004
  );
5877
6005
  const extractionData = "data" in taskCompletionResolution ? taskCompletionResolution.data : hasData && taskResult ? taskResult.data : void 0;
5878
6006
  const remappedOutputs = remapTaskCompletionOutputs(step.context_outputs);