@adcp/sdk 16.5.0 → 16.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (236) hide show
  1. package/dist/lib/adapters/version/3.0/brand-fields.d.mts +7 -1
  2. package/dist/lib/adapters/version/3.0/brand-fields.d.ts +7 -1
  3. package/dist/lib/adapters/version/3.0/brand-fields.js +139 -3
  4. package/dist/lib/adapters/version/3.0/brand-fields.mjs +136 -2
  5. package/dist/lib/adapters/version/3.0/index.js +6 -0
  6. package/dist/lib/adapters/version/3.0/index.mjs +7 -1
  7. package/dist/lib/adapters/version/3.1/bidding.js +1 -1
  8. package/dist/lib/adapters/version/3.1/bidding.mjs +1 -1
  9. package/dist/lib/adapters/version/types.d.mts +5 -0
  10. package/dist/lib/adapters/version/types.d.ts +5 -0
  11. package/dist/lib/canonical-references/index.js +2 -0
  12. package/dist/lib/canonical-references/index.mjs +2 -0
  13. package/dist/lib/client/account-changes.d.mts +3 -1
  14. package/dist/lib/client/account-changes.d.ts +3 -1
  15. package/dist/lib/client/account-changes.js +22 -2
  16. package/dist/lib/client/account-changes.mjs +22 -2
  17. package/dist/lib/conformance/oracle.js +3 -2
  18. package/dist/lib/conformance/oracle.mjs +3 -2
  19. package/dist/lib/core/AgentClient.d.mts +165 -1
  20. package/dist/lib/core/AgentClient.d.ts +165 -1
  21. package/dist/lib/core/AgentClient.js +446 -8
  22. package/dist/lib/core/AgentClient.mjs +446 -8
  23. package/dist/lib/core/ConversationTypes.d.mts +8 -0
  24. package/dist/lib/core/ConversationTypes.d.ts +8 -0
  25. package/dist/lib/core/ProtocolResponseParser.d.mts +1 -1
  26. package/dist/lib/core/ProtocolResponseParser.d.ts +1 -1
  27. package/dist/lib/core/ProtocolResponseParser.js +28 -18
  28. package/dist/lib/core/ProtocolResponseParser.mjs +11 -1
  29. package/dist/lib/core/ResponseValidator.js +1 -1
  30. package/dist/lib/core/ResponseValidator.mjs +1 -1
  31. package/dist/lib/core/SingleAgentClient.d.mts +116 -6
  32. package/dist/lib/core/SingleAgentClient.d.ts +116 -6
  33. package/dist/lib/core/SingleAgentClient.js +556 -84
  34. package/dist/lib/core/SingleAgentClient.mjs +545 -72
  35. package/dist/lib/core/TaskExecutor.d.mts +7 -0
  36. package/dist/lib/core/TaskExecutor.d.ts +7 -0
  37. package/dist/lib/core/TaskExecutor.js +23 -8
  38. package/dist/lib/core/TaskExecutor.mjs +23 -8
  39. package/dist/lib/core/task-status.d.mts +2 -0
  40. package/dist/lib/core/task-status.d.ts +2 -0
  41. package/dist/lib/core/task-status.js +11 -2
  42. package/dist/lib/core/task-status.mjs +9 -1
  43. package/dist/lib/errors/index.d.mts +22 -0
  44. package/dist/lib/errors/index.d.ts +22 -0
  45. package/dist/lib/errors/index.js +43 -0
  46. package/dist/lib/errors/index.mjs +42 -0
  47. package/dist/lib/identity-3.3/trust.d.mts +1 -4
  48. package/dist/lib/identity-3.3/trust.d.ts +1 -4
  49. package/dist/lib/identity-3.3/trust.js +34 -21
  50. package/dist/lib/identity-3.3/trust.mjs +34 -21
  51. package/dist/lib/identity-3.3/validation.js +5 -3
  52. package/dist/lib/identity-3.3/validation.mjs +6 -4
  53. package/dist/lib/index.d.mts +8 -54
  54. package/dist/lib/index.d.ts +8 -54
  55. package/dist/lib/index.js +15 -0
  56. package/dist/lib/index.mjs +11 -0
  57. package/dist/lib/media-buy/action-assessment.js +29 -3
  58. package/dist/lib/media-buy/action-assessment.mjs +32 -4
  59. package/dist/lib/media-buy/action-contracts.d.mts +3 -0
  60. package/dist/lib/media-buy/action-contracts.d.ts +3 -0
  61. package/dist/lib/media-buy/action-contracts.js +24 -1
  62. package/dist/lib/media-buy/action-contracts.mjs +22 -1
  63. package/dist/lib/media-buy/compatibility.js +6 -1
  64. package/dist/lib/media-buy/compatibility.mjs +6 -1
  65. package/dist/lib/media-buy/preflight.js +1 -1
  66. package/dist/lib/media-buy/preflight.mjs +3 -2
  67. package/dist/lib/media-buy/types.d.mts +6 -1
  68. package/dist/lib/media-buy/types.d.ts +6 -1
  69. package/dist/lib/protocols/mcp-modern.d.mts +2 -0
  70. package/dist/lib/protocols/mcp-modern.d.ts +2 -0
  71. package/dist/lib/protocols/mcp-modern.js +31 -5
  72. package/dist/lib/protocols/mcp-modern.mjs +31 -5
  73. package/dist/lib/protocols/mcp-scope.d.mts +6 -1
  74. package/dist/lib/protocols/mcp-scope.d.ts +6 -1
  75. package/dist/lib/protocols/mcp-scope.js +25 -3
  76. package/dist/lib/protocols/mcp-scope.mjs +24 -3
  77. package/dist/lib/protocols/mcp.js +12 -6
  78. package/dist/lib/protocols/mcp.mjs +13 -6
  79. package/dist/lib/reporting/inspection.js +1 -0
  80. package/dist/lib/reporting/inspection.mjs +1 -0
  81. package/dist/lib/schemas/browser.d.mts +2 -0
  82. package/dist/lib/schemas/browser.d.ts +2 -0
  83. package/dist/lib/schemas/browser.js +3 -0
  84. package/dist/lib/schemas/browser.mjs +2 -0
  85. package/dist/lib/schemas/index.d.mts +5 -2
  86. package/dist/lib/schemas/index.d.ts +5 -2
  87. package/dist/lib/schemas/index.js +5 -0
  88. package/dist/lib/schemas/index.mjs +4 -0
  89. package/dist/lib/server/account-response-identity.d.mts +17 -0
  90. package/dist/lib/server/account-response-identity.d.ts +17 -0
  91. package/dist/lib/server/account-response-identity.js +52 -0
  92. package/dist/lib/server/account-response-identity.mjs +28 -0
  93. package/dist/lib/server/account-sync-contract.js +1 -0
  94. package/dist/lib/server/account-sync-contract.mjs +1 -0
  95. package/dist/lib/server/create-adcp-server.js +32 -19
  96. package/dist/lib/server/create-adcp-server.mjs +36 -12
  97. package/dist/lib/server/decisioning/account.d.mts +13 -6
  98. package/dist/lib/server/decisioning/account.d.ts +13 -6
  99. package/dist/lib/server/decisioning/account.js +37 -15
  100. package/dist/lib/server/decisioning/account.mjs +37 -15
  101. package/dist/lib/server/decisioning/runtime/from-platform.d.mts +5 -5
  102. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +5 -5
  103. package/dist/lib/server/decisioning/runtime/from-platform.js +6 -6
  104. package/dist/lib/server/decisioning/runtime/from-platform.mjs +6 -6
  105. package/dist/lib/server/index.d.mts +1 -1
  106. package/dist/lib/server/index.d.ts +1 -1
  107. package/dist/lib/server/index.js +2 -0
  108. package/dist/lib/server/index.mjs +2 -0
  109. package/dist/lib/server/media-buy-action-resolver.d.mts +3 -0
  110. package/dist/lib/server/media-buy-action-resolver.d.ts +3 -0
  111. package/dist/lib/server/media-buy-action-resolver.js +32 -0
  112. package/dist/lib/server/media-buy-action-resolver.mjs +32 -0
  113. package/dist/lib/server/media-buy-store.d.mts +26 -12
  114. package/dist/lib/server/media-buy-store.d.ts +26 -12
  115. package/dist/lib/server/media-buy-store.js +69 -21
  116. package/dist/lib/server/media-buy-store.mjs +69 -21
  117. package/dist/lib/server/responses.js +9 -1
  118. package/dist/lib/server/responses.mjs +9 -1
  119. package/dist/lib/server/state-machine.d.mts +10 -11
  120. package/dist/lib/server/state-machine.d.ts +10 -11
  121. package/dist/lib/server/state-machine.js +20 -5
  122. package/dist/lib/server/state-machine.mjs +19 -5
  123. package/dist/lib/signing/agent-fetch.d.mts +1 -1
  124. package/dist/lib/signing/agent-fetch.d.ts +1 -1
  125. package/dist/lib/signing/agent-fetch.js +3 -3
  126. package/dist/lib/signing/agent-fetch.mjs +3 -3
  127. package/dist/lib/testing/client.d.mts +1 -0
  128. package/dist/lib/testing/client.d.ts +1 -0
  129. package/dist/lib/testing/client.js +6 -5
  130. package/dist/lib/testing/client.mjs +6 -5
  131. package/dist/lib/testing/storyboard/canonical-format-satisfaction.js +60 -14
  132. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs +60 -14
  133. package/dist/lib/testing/storyboard/compliance.d.mts +2 -5
  134. package/dist/lib/testing/storyboard/compliance.d.ts +2 -5
  135. package/dist/lib/testing/storyboard/compliance.js +62 -13
  136. package/dist/lib/testing/storyboard/compliance.mjs +63 -14
  137. package/dist/lib/testing/storyboard/context.d.mts +13 -3
  138. package/dist/lib/testing/storyboard/context.d.ts +13 -3
  139. package/dist/lib/testing/storyboard/context.js +15 -10
  140. package/dist/lib/testing/storyboard/context.mjs +15 -10
  141. package/dist/lib/testing/storyboard/default-invariants.js +10 -8
  142. package/dist/lib/testing/storyboard/default-invariants.mjs +11 -9
  143. package/dist/lib/testing/storyboard/request-signing/vector-loader.d.mts +2 -0
  144. package/dist/lib/testing/storyboard/request-signing/vector-loader.d.ts +2 -0
  145. package/dist/lib/testing/storyboard/request-signing/vector-loader.js +11 -0
  146. package/dist/lib/testing/storyboard/request-signing/vector-loader.mjs +10 -0
  147. package/dist/lib/testing/storyboard/runner.js +23 -10
  148. package/dist/lib/testing/storyboard/runner.mjs +23 -10
  149. package/dist/lib/testing/storyboard/validations.d.mts +1 -1
  150. package/dist/lib/testing/storyboard/validations.d.ts +1 -1
  151. package/dist/lib/testing/storyboard/validations.js +4 -1
  152. package/dist/lib/testing/storyboard/validations.mjs +4 -1
  153. package/dist/lib/testing/test-controller.js +3 -0
  154. package/dist/lib/testing/test-controller.mjs +3 -0
  155. package/dist/lib/types/asset-instances.d.mts +1 -1
  156. package/dist/lib/types/asset-instances.d.ts +1 -1
  157. package/dist/lib/types/index.d.mts +5 -0
  158. package/dist/lib/types/index.d.ts +5 -0
  159. package/dist/lib/types/index.js +6 -1
  160. package/dist/lib/types/index.mjs +4 -1
  161. package/dist/lib/types/inline-enums.generated.d.mts +30 -4
  162. package/dist/lib/types/inline-enums.generated.d.ts +30 -4
  163. package/dist/lib/types/inline-enums.generated.js +41 -2
  164. package/dist/lib/types/inline-enums.generated.mjs +28 -2
  165. package/dist/lib/types/media-buy-delivery-report.d.mts +4 -0
  166. package/dist/lib/types/media-buy-delivery-report.d.ts +4 -0
  167. package/dist/lib/types/media-buy-delivery-report.js +16 -0
  168. package/dist/lib/types/media-buy-delivery-report.mjs +0 -0
  169. package/dist/lib/types/schemas.generated.d.ts +20 -69
  170. package/dist/lib/types/schemas.generated.js +29 -46
  171. package/dist/lib/types/schemas.generated.mjs +29 -46
  172. package/dist/lib/types/targeting-keys.generated.d.mts +4 -0
  173. package/dist/lib/types/targeting-keys.generated.d.ts +4 -0
  174. package/dist/lib/types/targeting-keys.generated.js +105 -0
  175. package/dist/lib/types/targeting-keys.generated.mjs +80 -0
  176. package/dist/lib/utils/adcp-version-config.js +5 -2
  177. package/dist/lib/utils/adcp-version-config.mjs +5 -2
  178. package/dist/lib/utils/envelope-status-compat.d.mts +18 -1
  179. package/dist/lib/utils/envelope-status-compat.d.ts +18 -1
  180. package/dist/lib/utils/envelope-status-compat.js +11 -5
  181. package/dist/lib/utils/envelope-status-compat.mjs +11 -5
  182. package/dist/lib/utils/response-unwrapper.js +18 -10
  183. package/dist/lib/utils/response-unwrapper.mjs +18 -10
  184. package/dist/lib/v2/format-schema/resolver.js +1 -1
  185. package/dist/lib/v2/format-schema/resolver.mjs +1 -1
  186. package/dist/lib/v2/projection/creative-delivery.js +123 -30
  187. package/dist/lib/v2/projection/creative-delivery.mjs +127 -30
  188. package/dist/lib/v2/projection/index.d.mts +1 -0
  189. package/dist/lib/v2/projection/index.d.ts +1 -0
  190. package/dist/lib/v2/projection/index.js +3 -0
  191. package/dist/lib/v2/projection/index.mjs +2 -0
  192. package/dist/lib/v2/projection/legacy-metadata.d.mts +19 -0
  193. package/dist/lib/v2/projection/legacy-metadata.d.ts +19 -0
  194. package/dist/lib/v2/projection/legacy-metadata.js +91 -0
  195. package/dist/lib/v2/projection/legacy-metadata.mjs +86 -0
  196. package/dist/lib/validation/compact-schema.d.mts +27 -0
  197. package/dist/lib/validation/compact-schema.d.ts +27 -0
  198. package/dist/lib/validation/compact-schema.js +276 -0
  199. package/dist/lib/validation/compact-schema.mjs +250 -0
  200. package/dist/lib/validation/media-buy-delivery-report.d.mts +8 -0
  201. package/dist/lib/validation/media-buy-delivery-report.d.ts +8 -0
  202. package/dist/lib/validation/media-buy-delivery-report.js +31 -0
  203. package/dist/lib/validation/media-buy-delivery-report.mjs +7 -0
  204. package/dist/lib/validation/schema-diagnostic-origins.d.mts +21 -0
  205. package/dist/lib/validation/schema-diagnostic-origins.d.ts +21 -0
  206. package/dist/lib/validation/schema-diagnostic-origins.js +193 -0
  207. package/dist/lib/validation/schema-diagnostic-origins.mjs +169 -0
  208. package/dist/lib/validation/schema-loader.js +86 -16
  209. package/dist/lib/validation/schema-loader.mjs +82 -16
  210. package/dist/lib/validation/schema-validator.d.mts +10 -19
  211. package/dist/lib/validation/schema-validator.d.ts +10 -19
  212. package/dist/lib/validation/schema-validator.js +136 -43
  213. package/dist/lib/validation/schema-validator.mjs +140 -44
  214. package/dist/lib/version.d.mts +3 -3
  215. package/dist/lib/version.d.ts +3 -3
  216. package/dist/lib/version.js +3 -3
  217. package/dist/lib/version.mjs +3 -3
  218. package/dist/lib/webhooks/index.d.mts +3 -0
  219. package/dist/lib/webhooks/index.d.ts +3 -0
  220. package/dist/lib/webhooks/index.js +3 -0
  221. package/dist/lib/webhooks/index.mjs +2 -0
  222. package/dist/lib/webhooks/media-buy-delivery.d.mts +43 -0
  223. package/dist/lib/webhooks/media-buy-delivery.d.ts +43 -0
  224. package/dist/lib/webhooks/media-buy-delivery.js +119 -0
  225. package/dist/lib/webhooks/media-buy-delivery.mjs +94 -0
  226. package/docs/TYPE-SUMMARY.md +2 -2
  227. package/docs/guides/BUILD-AN-AGENT.md +9 -1
  228. package/docs/guides/DELIVERY-WEBHOOK-PARSING.md +135 -0
  229. package/docs/guides/DISCOVERY-CACHE-AND-SESSION-REUSE.md +15 -0
  230. package/docs/guides/TYPED-CLIENT-TOOLS.md +49 -0
  231. package/docs/llms.txt +3 -3
  232. package/docs/migration-14.x-rc-worksheet.md +4 -4
  233. package/docs/migration-6.6-to-6.7.md +14 -0
  234. package/docs/migration-account-change-feed.md +19 -0
  235. package/docs/releases/sdk-16.6-adoption-fixes.md +33 -0
  236. package/package.json +2 -2
@@ -0,0 +1,4 @@
1
+ /** All TargetingOverlay keys in AdCP 3.2.7, including extension fields. */
2
+ export declare const TargetingOverlayKeys: readonly ["geo_countries", "geo_countries_exclude", "geo_regions", "geo_regions_exclude", "geo_metros", "geo_metros_exclude", "geo_postal_areas", "geo_postal_areas_exclude", "geo_places", "geo_places_exclude", "daypart_targets", "axe_include_segment", "axe_exclude_segment", "audience_include", "audience_exclude", "signal_targeting_groups", "signal_targeting", "demographics", "frequency_cap", "property_list", "property_list_exclude", "collection_list", "collection_list_exclude", "placement_selection", "collection_selection", "age_restriction", "device_platform", "device_platform_exclude", "device_type", "device_type_exclude", "browser", "browser_exclude", "store_catchments", "geo_proximity", "language", "keyword_targets", "negative_keywords"];
3
+ /** All TargetingOverlaySupport keys in AdCP 3.2.7, including extension fields. */
4
+ export declare const TargetingOverlaySupportKeys: readonly ["geo_countries", "geo_countries_exclude", "geo_regions", "geo_regions_exclude", "geo_metros", "geo_metros_exclude", "geo_places", "geo_places_exclude", "geo_postal_areas", "geo_postal_areas_exclude", "geo_proximity", "daypart_targets", "audience_include", "audience_exclude", "signal_targeting_groups", "demographics", "frequency_cap", "frequency_cap_support", "property_list", "property_list_exclude", "collection_list", "collection_list_exclude", "placement_selection", "age_restriction", "device_platform", "device_platform_exclude", "device_type", "device_type_exclude", "browser", "browser_exclude", "store_catchments", "language", "keyword_targets", "negative_keywords", "ext"];
@@ -0,0 +1,4 @@
1
+ /** All TargetingOverlay keys in AdCP 3.2.7, including extension fields. */
2
+ export declare const TargetingOverlayKeys: readonly ["geo_countries", "geo_countries_exclude", "geo_regions", "geo_regions_exclude", "geo_metros", "geo_metros_exclude", "geo_postal_areas", "geo_postal_areas_exclude", "geo_places", "geo_places_exclude", "daypart_targets", "axe_include_segment", "axe_exclude_segment", "audience_include", "audience_exclude", "signal_targeting_groups", "signal_targeting", "demographics", "frequency_cap", "property_list", "property_list_exclude", "collection_list", "collection_list_exclude", "placement_selection", "collection_selection", "age_restriction", "device_platform", "device_platform_exclude", "device_type", "device_type_exclude", "browser", "browser_exclude", "store_catchments", "geo_proximity", "language", "keyword_targets", "negative_keywords"];
3
+ /** All TargetingOverlaySupport keys in AdCP 3.2.7, including extension fields. */
4
+ export declare const TargetingOverlaySupportKeys: readonly ["geo_countries", "geo_countries_exclude", "geo_regions", "geo_regions_exclude", "geo_metros", "geo_metros_exclude", "geo_places", "geo_places_exclude", "geo_postal_areas", "geo_postal_areas_exclude", "geo_proximity", "daypart_targets", "audience_include", "audience_exclude", "signal_targeting_groups", "demographics", "frequency_cap", "frequency_cap_support", "property_list", "property_list_exclude", "collection_list", "collection_list_exclude", "placement_selection", "age_restriction", "device_platform", "device_platform_exclude", "device_type", "device_type_exclude", "browser", "browser_exclude", "store_catchments", "language", "keyword_targets", "negative_keywords", "ext"];
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var targeting_keys_generated_exports = {};
20
+ __export(targeting_keys_generated_exports, {
21
+ TargetingOverlayKeys: () => TargetingOverlayKeys,
22
+ TargetingOverlaySupportKeys: () => TargetingOverlaySupportKeys
23
+ });
24
+ module.exports = __toCommonJS(targeting_keys_generated_exports);
25
+ const TargetingOverlayKeys = Object.freeze([
26
+ "geo_countries",
27
+ "geo_countries_exclude",
28
+ "geo_regions",
29
+ "geo_regions_exclude",
30
+ "geo_metros",
31
+ "geo_metros_exclude",
32
+ "geo_postal_areas",
33
+ "geo_postal_areas_exclude",
34
+ "geo_places",
35
+ "geo_places_exclude",
36
+ "daypart_targets",
37
+ "axe_include_segment",
38
+ "axe_exclude_segment",
39
+ "audience_include",
40
+ "audience_exclude",
41
+ "signal_targeting_groups",
42
+ "signal_targeting",
43
+ "demographics",
44
+ "frequency_cap",
45
+ "property_list",
46
+ "property_list_exclude",
47
+ "collection_list",
48
+ "collection_list_exclude",
49
+ "placement_selection",
50
+ "collection_selection",
51
+ "age_restriction",
52
+ "device_platform",
53
+ "device_platform_exclude",
54
+ "device_type",
55
+ "device_type_exclude",
56
+ "browser",
57
+ "browser_exclude",
58
+ "store_catchments",
59
+ "geo_proximity",
60
+ "language",
61
+ "keyword_targets",
62
+ "negative_keywords"
63
+ ]);
64
+ const TargetingOverlaySupportKeys = Object.freeze([
65
+ "geo_countries",
66
+ "geo_countries_exclude",
67
+ "geo_regions",
68
+ "geo_regions_exclude",
69
+ "geo_metros",
70
+ "geo_metros_exclude",
71
+ "geo_places",
72
+ "geo_places_exclude",
73
+ "geo_postal_areas",
74
+ "geo_postal_areas_exclude",
75
+ "geo_proximity",
76
+ "daypart_targets",
77
+ "audience_include",
78
+ "audience_exclude",
79
+ "signal_targeting_groups",
80
+ "demographics",
81
+ "frequency_cap",
82
+ "frequency_cap_support",
83
+ "property_list",
84
+ "property_list_exclude",
85
+ "collection_list",
86
+ "collection_list_exclude",
87
+ "placement_selection",
88
+ "age_restriction",
89
+ "device_platform",
90
+ "device_platform_exclude",
91
+ "device_type",
92
+ "device_type_exclude",
93
+ "browser",
94
+ "browser_exclude",
95
+ "store_catchments",
96
+ "language",
97
+ "keyword_targets",
98
+ "negative_keywords",
99
+ "ext"
100
+ ]);
101
+ // Annotate the CommonJS export names for ESM import in node:
102
+ 0 && (module.exports = {
103
+ TargetingOverlayKeys,
104
+ TargetingOverlaySupportKeys
105
+ });
@@ -0,0 +1,80 @@
1
+ const TargetingOverlayKeys = Object.freeze([
2
+ "geo_countries",
3
+ "geo_countries_exclude",
4
+ "geo_regions",
5
+ "geo_regions_exclude",
6
+ "geo_metros",
7
+ "geo_metros_exclude",
8
+ "geo_postal_areas",
9
+ "geo_postal_areas_exclude",
10
+ "geo_places",
11
+ "geo_places_exclude",
12
+ "daypart_targets",
13
+ "axe_include_segment",
14
+ "axe_exclude_segment",
15
+ "audience_include",
16
+ "audience_exclude",
17
+ "signal_targeting_groups",
18
+ "signal_targeting",
19
+ "demographics",
20
+ "frequency_cap",
21
+ "property_list",
22
+ "property_list_exclude",
23
+ "collection_list",
24
+ "collection_list_exclude",
25
+ "placement_selection",
26
+ "collection_selection",
27
+ "age_restriction",
28
+ "device_platform",
29
+ "device_platform_exclude",
30
+ "device_type",
31
+ "device_type_exclude",
32
+ "browser",
33
+ "browser_exclude",
34
+ "store_catchments",
35
+ "geo_proximity",
36
+ "language",
37
+ "keyword_targets",
38
+ "negative_keywords"
39
+ ]);
40
+ const TargetingOverlaySupportKeys = Object.freeze([
41
+ "geo_countries",
42
+ "geo_countries_exclude",
43
+ "geo_regions",
44
+ "geo_regions_exclude",
45
+ "geo_metros",
46
+ "geo_metros_exclude",
47
+ "geo_places",
48
+ "geo_places_exclude",
49
+ "geo_postal_areas",
50
+ "geo_postal_areas_exclude",
51
+ "geo_proximity",
52
+ "daypart_targets",
53
+ "audience_include",
54
+ "audience_exclude",
55
+ "signal_targeting_groups",
56
+ "demographics",
57
+ "frequency_cap",
58
+ "frequency_cap_support",
59
+ "property_list",
60
+ "property_list_exclude",
61
+ "collection_list",
62
+ "collection_list_exclude",
63
+ "placement_selection",
64
+ "age_restriction",
65
+ "device_platform",
66
+ "device_platform_exclude",
67
+ "device_type",
68
+ "device_type_exclude",
69
+ "browser",
70
+ "browser_exclude",
71
+ "store_catchments",
72
+ "language",
73
+ "keyword_targets",
74
+ "negative_keywords",
75
+ "ext"
76
+ ]);
77
+ export {
78
+ TargetingOverlayKeys,
79
+ TargetingOverlaySupportKeys
80
+ };
@@ -69,7 +69,7 @@ function resolveAdcpVersion(adcpVersion, optionName = "adcpVersion") {
69
69
  }
70
70
  if (!Number.isFinite(major)) {
71
71
  throw new import_errors.ConfigurationError(
72
- `${optionName} ${JSON.stringify(adcpVersion)} is not a valid AdCP version. Expected a semver string (e.g. '3.0.1', '3.1.0-beta.1') or a legacy alias. Currently bundled: ${listBundledAdcpVersions().join(", ")}.`,
72
+ `${optionName} ${JSON.stringify(adcpVersion)} is not a valid AdCP version. Expected a semver string (e.g. '3.0.1', '3.1.0-beta.1') or a legacy alias. Currently bundled: ${bundledVersionHint()}.`,
73
73
  optionName
74
74
  );
75
75
  }
@@ -77,12 +77,15 @@ function resolveAdcpVersion(adcpVersion, optionName = "adcpVersion") {
77
77
  if (!(0, import_schema_loader.hasSchemaBundle)(adcpVersion)) {
78
78
  const resolvedKey = (0, import_schema_loader.resolveBundleKey)(adcpVersion);
79
79
  throw new import_errors.ConfigurationError(
80
- `${optionName} ${JSON.stringify(adcpVersion)} resolves to bundle key "${resolvedKey}", but no schema bundle for that key ships with this SDK build. Currently bundled: ${listBundledAdcpVersions().join(", ")}. If you're testing against a beta that the spec repo has tagged but the SDK hasn't synced yet, run \`npm run sync-schemas\` and \`npm run build:lib\` to populate the cache, then re-construct.`,
80
+ `${optionName} ${JSON.stringify(adcpVersion)} resolves to bundle key "${resolvedKey}", but no schema bundle for that key ships with this SDK build. Currently bundled: ${bundledVersionHint()}. Pin one of these releases explicitly; a stable version does not select a prerelease.`,
81
81
  optionName
82
82
  );
83
83
  }
84
84
  return adcpVersion;
85
85
  }
86
+ function bundledVersionHint() {
87
+ return [...new Set(listBundledAdcpVersions().map(import_schema_loader.resolveBundleKey))].join(", ");
88
+ }
86
89
  function isMovingAdcpPrereleaseFamilyAlias(version) {
87
90
  if (!import_version.ADCP_VERSION.startsWith("3.2.0-")) return false;
88
91
  return prereleaseFamilyAlias((0, import_schema_loader.toReleasePrecisionWire)(import_version.ADCP_VERSION)) === version;
@@ -35,7 +35,7 @@ function resolveAdcpVersion(adcpVersion, optionName = "adcpVersion") {
35
35
  }
36
36
  if (!Number.isFinite(major)) {
37
37
  throw new ConfigurationError(
38
- `${optionName} ${JSON.stringify(adcpVersion)} is not a valid AdCP version. Expected a semver string (e.g. '3.0.1', '3.1.0-beta.1') or a legacy alias. Currently bundled: ${listBundledAdcpVersions().join(", ")}.`,
38
+ `${optionName} ${JSON.stringify(adcpVersion)} is not a valid AdCP version. Expected a semver string (e.g. '3.0.1', '3.1.0-beta.1') or a legacy alias. Currently bundled: ${bundledVersionHint()}.`,
39
39
  optionName
40
40
  );
41
41
  }
@@ -43,12 +43,15 @@ function resolveAdcpVersion(adcpVersion, optionName = "adcpVersion") {
43
43
  if (!hasSchemaBundle(adcpVersion)) {
44
44
  const resolvedKey = resolveBundleKey(adcpVersion);
45
45
  throw new ConfigurationError(
46
- `${optionName} ${JSON.stringify(adcpVersion)} resolves to bundle key "${resolvedKey}", but no schema bundle for that key ships with this SDK build. Currently bundled: ${listBundledAdcpVersions().join(", ")}. If you're testing against a beta that the spec repo has tagged but the SDK hasn't synced yet, run \`npm run sync-schemas\` and \`npm run build:lib\` to populate the cache, then re-construct.`,
46
+ `${optionName} ${JSON.stringify(adcpVersion)} resolves to bundle key "${resolvedKey}", but no schema bundle for that key ships with this SDK build. Currently bundled: ${bundledVersionHint()}. Pin one of these releases explicitly; a stable version does not select a prerelease.`,
47
47
  optionName
48
48
  );
49
49
  }
50
50
  return adcpVersion;
51
51
  }
52
+ function bundledVersionHint() {
53
+ return [...new Set(listBundledAdcpVersions().map(resolveBundleKey))].join(", ");
54
+ }
52
55
  function isMovingAdcpPrereleaseFamilyAlias(version) {
53
56
  if (!ADCP_VERSION.startsWith("3.2.0-")) return false;
54
57
  return prereleaseFamilyAlias(toReleasePrecisionWire(ADCP_VERSION)) === version;
@@ -14,7 +14,10 @@
14
14
  * enum during validation. The same translation applies to the documented 3.1
15
15
  * deprecation window for top-level `status: MediaBuyStatus`. Other 3.1+
16
16
  * responses are returned unchanged so the strict validator still rejects a
17
- * peer that omits or misuses `status`.
17
+ * peer that omits or misuses `status`. A bare `completed` / `rejected` /
18
+ * `canceled` is never treated as a lifecycle when the payload, or failing
19
+ * that the caller's requested release (`options.adcpVersion`), is 3.1+:
20
+ * there it is the task envelope status.
18
21
  *
19
22
  * The leniency is a back-compat affordance, not a permanent loosening.
20
23
  */
@@ -26,6 +29,20 @@ export interface LegacyEnvelopeStatusOptions {
26
29
  * the protocol task envelope.
27
30
  */
28
31
  toolName?: string;
32
+ /**
33
+ * AdCP release the caller requested or negotiated for this exchange (for
34
+ * example the client's `adcpVersion` pin, or the release negotiated down
35
+ * from it). The response `adcp_version` echo is optional, so a seller on
36
+ * 3.1+ may answer a create with only `{ status: 'completed', media_buy_id }`.
37
+ * `completed`, `rejected` and `canceled` are valid both as TaskStatus and as
38
+ * MediaBuyStatus. When the payload carries no version echo, this release
39
+ * decides which one a bare top-level `status` is: on 3.1+ it is the task
40
+ * envelope status and is never copied into `media_buy_status`. An explicit
41
+ * `adcp_version` / `adcp_major_version` on the payload always wins. When
42
+ * neither the payload nor the caller knows the release, the legacy 3.0
43
+ * reading still applies.
44
+ */
45
+ adcpVersion?: string;
29
46
  }
30
47
  /** 3.2 synchronous response arms that intentionally forbid task-envelope status. */
31
48
  export declare const STATUS_FREE_SYNC_RESPONSE_TOOLS: ReadonlySet<string>;
@@ -14,7 +14,10 @@
14
14
  * enum during validation. The same translation applies to the documented 3.1
15
15
  * deprecation window for top-level `status: MediaBuyStatus`. Other 3.1+
16
16
  * responses are returned unchanged so the strict validator still rejects a
17
- * peer that omits or misuses `status`.
17
+ * peer that omits or misuses `status`. A bare `completed` / `rejected` /
18
+ * `canceled` is never treated as a lifecycle when the payload, or failing
19
+ * that the caller's requested release (`options.adcpVersion`), is 3.1+:
20
+ * there it is the task envelope status.
18
21
  *
19
22
  * The leniency is a back-compat affordance, not a permanent loosening.
20
23
  */
@@ -26,6 +29,20 @@ export interface LegacyEnvelopeStatusOptions {
26
29
  * the protocol task envelope.
27
30
  */
28
31
  toolName?: string;
32
+ /**
33
+ * AdCP release the caller requested or negotiated for this exchange (for
34
+ * example the client's `adcpVersion` pin, or the release negotiated down
35
+ * from it). The response `adcp_version` echo is optional, so a seller on
36
+ * 3.1+ may answer a create with only `{ status: 'completed', media_buy_id }`.
37
+ * `completed`, `rejected` and `canceled` are valid both as TaskStatus and as
38
+ * MediaBuyStatus. When the payload carries no version echo, this release
39
+ * decides which one a bare top-level `status` is: on 3.1+ it is the task
40
+ * envelope status and is never copied into `media_buy_status`. An explicit
41
+ * `adcp_version` / `adcp_major_version` on the payload always wins. When
42
+ * neither the payload nor the caller knows the release, the legacy 3.0
43
+ * reading still applies.
44
+ */
45
+ adcpVersion?: string;
29
46
  }
30
47
  /** 3.2 synchronous response arms that intentionally forbid task-envelope status. */
31
48
  export declare const STATUS_FREE_SYNC_RESPONSE_TOOLS: ReadonlySet<string>;
@@ -46,7 +46,7 @@ function injectLegacyEnvelopeStatus(response, options) {
46
46
  return response;
47
47
  }
48
48
  if (options?.toolName && STATUS_FREE_SYNC_RESPONSE_TOOLS.has(options.toolName)) return response;
49
- if (options?.toolName && MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) && allowsDeprecatedMediaBuyStatus(response) && isMediaBuySuccessStatusForCompat(response)) {
49
+ if (options?.toolName && MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) && allowsDeprecatedMediaBuyStatus(response) && isMediaBuySuccessStatusForCompat(response, options)) {
50
50
  const mediaBuyStatus = response.status;
51
51
  return {
52
52
  ...response,
@@ -71,16 +71,16 @@ function normalizeLegacyMediaBuyStatusForReturn(response, options) {
71
71
  if (!response || typeof response !== "object" || Array.isArray(response)) {
72
72
  return response;
73
73
  }
74
- if (!options?.toolName || !MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) || !allowsDeprecatedMediaBuyStatus(response) || !isMediaBuySuccessStatusForCompat(response)) {
74
+ if (!options?.toolName || !MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) || !allowsDeprecatedMediaBuyStatus(response) || !isMediaBuySuccessStatusForCompat(response, options)) {
75
75
  return response;
76
76
  }
77
- const status = (0, import_media_buy_status.getAuthoritativeMediaBuyStatus)(response);
77
+ const status = (0, import_media_buy_status.getAuthoritativeMediaBuyStatus)(withRequestedVersion(response, options));
78
78
  if (!status || response.media_buy_status === status) return response;
79
79
  return { ...response, media_buy_status: status };
80
80
  }
81
- function isMediaBuySuccessStatusForCompat(response) {
81
+ function isMediaBuySuccessStatusForCompat(response, options) {
82
82
  const status = response.status;
83
- if ((0, import_media_buy_status.getAuthoritativeMediaBuyStatus)(response) !== status) return false;
83
+ if ((0, import_media_buy_status.getAuthoritativeMediaBuyStatus)(withRequestedVersion(response, options)) !== status) return false;
84
84
  if (typeof response.media_buy_status === "string" && response.media_buy_status !== status) {
85
85
  return false;
86
86
  }
@@ -95,6 +95,12 @@ function allowsDeprecatedMediaBuyStatus(payload) {
95
95
  if (typeof major === "number") return major === 3;
96
96
  return true;
97
97
  }
98
+ function withRequestedVersion(payload, options) {
99
+ const requested = options?.adcpVersion;
100
+ if (typeof requested !== "string" || requested.length === 0) return payload;
101
+ if (typeof payload.adcp_version === "string" || typeof payload.adcp_major_version === "number") return payload;
102
+ return { ...payload, adcp_version: requested };
103
+ }
98
104
  // Annotate the CommonJS export names for ESM import in node:
99
105
  0 && (module.exports = {
100
106
  STATUS_FREE_SYNC_RESPONSE_TOOLS,
@@ -20,7 +20,7 @@ function injectLegacyEnvelopeStatus(response, options) {
20
20
  return response;
21
21
  }
22
22
  if (options?.toolName && STATUS_FREE_SYNC_RESPONSE_TOOLS.has(options.toolName)) return response;
23
- if (options?.toolName && MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) && allowsDeprecatedMediaBuyStatus(response) && isMediaBuySuccessStatusForCompat(response)) {
23
+ if (options?.toolName && MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) && allowsDeprecatedMediaBuyStatus(response) && isMediaBuySuccessStatusForCompat(response, options)) {
24
24
  const mediaBuyStatus = response.status;
25
25
  return {
26
26
  ...response,
@@ -45,16 +45,16 @@ function normalizeLegacyMediaBuyStatusForReturn(response, options) {
45
45
  if (!response || typeof response !== "object" || Array.isArray(response)) {
46
46
  return response;
47
47
  }
48
- if (!options?.toolName || !MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) || !allowsDeprecatedMediaBuyStatus(response) || !isMediaBuySuccessStatusForCompat(response)) {
48
+ if (!options?.toolName || !MEDIA_BUY_STATUS_RESPONSE_TOOLS.has(options.toolName) || !allowsDeprecatedMediaBuyStatus(response) || !isMediaBuySuccessStatusForCompat(response, options)) {
49
49
  return response;
50
50
  }
51
- const status = getAuthoritativeMediaBuyStatus(response);
51
+ const status = getAuthoritativeMediaBuyStatus(withRequestedVersion(response, options));
52
52
  if (!status || response.media_buy_status === status) return response;
53
53
  return { ...response, media_buy_status: status };
54
54
  }
55
- function isMediaBuySuccessStatusForCompat(response) {
55
+ function isMediaBuySuccessStatusForCompat(response, options) {
56
56
  const status = response.status;
57
- if (getAuthoritativeMediaBuyStatus(response) !== status) return false;
57
+ if (getAuthoritativeMediaBuyStatus(withRequestedVersion(response, options)) !== status) return false;
58
58
  if (typeof response.media_buy_status === "string" && response.media_buy_status !== status) {
59
59
  return false;
60
60
  }
@@ -69,6 +69,12 @@ function allowsDeprecatedMediaBuyStatus(payload) {
69
69
  if (typeof major === "number") return major === 3;
70
70
  return true;
71
71
  }
72
+ function withRequestedVersion(payload, options) {
73
+ const requested = options?.adcpVersion;
74
+ if (typeof requested !== "string" || requested.length === 0) return payload;
75
+ if (typeof payload.adcp_version === "string" || typeof payload.adcp_major_version === "number") return payload;
76
+ return { ...payload, adcp_version: requested };
77
+ }
72
78
  export {
73
79
  STATUS_FREE_SYNC_RESPONSE_TOOLS,
74
80
  injectLegacyEnvelopeStatus,
@@ -29,6 +29,7 @@ __export(response_unwrapper_exports, {
29
29
  unwrapProtocolResponse: () => unwrapProtocolResponse
30
30
  });
31
31
  module.exports = __toCommonJS(response_unwrapper_exports);
32
+ var import_task_status = require('../core/task-status.js');
32
33
  var import_union_errors = require('./union-errors.js');
33
34
  var import_envelope_status_compat = require('./envelope-status-compat.js');
34
35
  var import_a2a_artifacts = require('./a2a-artifacts.js');
@@ -164,6 +165,7 @@ function isStructuredGetProductsRejection(response, toolName, responseAdcpVersio
164
165
  return declaresStructuredRejectionVersion && obj.status === "rejected" && typeof obj.reason === "string" && obj.reason.length >= 1 && obj.reason.length <= 2e3 && suggestionsValid && obj.success !== false && obj.error == null && typeof obj.error_code !== "string" && forbiddenFields.every((field) => !hasOwnField(obj, field));
165
166
  }
166
167
  function isTerminalAdcpError(response, toolName, responseAdcpVersion) {
168
+ if ((0, import_task_status.isTaskStatusResponse)(response, toolName)) return false;
167
169
  const obj = response;
168
170
  if (isStructuredGetProductsRejection(obj, toolName, responseAdcpVersion)) return false;
169
171
  if (obj?.status === "failed" || obj?.status === "rejected") return true;
@@ -177,6 +179,7 @@ function isTerminalAdcpError(response, toolName, responseAdcpVersion) {
177
179
  return false;
178
180
  }
179
181
  function isAdcpOperationSuccess(response, toolName, responseAdcpVersion) {
182
+ if ((0, import_task_status.isTaskStatusResponse)(response, toolName)) return true;
180
183
  const obj = response;
181
184
  return obj?.success !== false && !obj?.error && !obj?.adcp_error && !isTerminalAdcpError(response, toolName, responseAdcpVersion);
182
185
  }
@@ -186,7 +189,9 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
186
189
  }
187
190
  let unwrapped;
188
191
  let mcpExtractionPath;
189
- if (protocol === "mcp") {
192
+ if ((0, import_task_status.isTaskStatusResponse)(protocolResponse, toolName)) {
193
+ unwrapped = protocolResponse;
194
+ } else if (protocol === "mcp") {
190
195
  const outcome = unwrapMCPResponse(protocolResponse);
191
196
  unwrapped = outcome.result;
192
197
  mcpExtractionPath = outcome.extractionPath;
@@ -218,9 +223,10 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
218
223
  const schema = TOOL_RESPONSE_SCHEMAS[toolName];
219
224
  if (schema) {
220
225
  const { _message: _msg, ...stripped } = unwrapped;
226
+ const compatOptions = { toolName, adcpVersion: options?.responseAdcpVersion };
221
227
  const dataToValidate = prepareResponseForSchemaValidation(
222
228
  toolName,
223
- (0, import_envelope_status_compat.injectLegacyEnvelopeStatus)(stripped, { toolName }),
229
+ (0, import_envelope_status_compat.injectLegacyEnvelopeStatus)(stripped, compatOptions),
224
230
  options?.responseAdcpVersion
225
231
  );
226
232
  const result = schema.safeParse(dataToValidate);
@@ -233,7 +239,7 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
233
239
  const { status: _s, ...rest } = validated2;
234
240
  validated2 = rest;
235
241
  } else {
236
- validated2 = restoreLegacyMediaBuyStatusForReturn(validated2, stripped, dataToValidate, toolName);
242
+ validated2 = restoreLegacyMediaBuyStatusForReturn(validated2, stripped, dataToValidate, compatOptions);
237
243
  }
238
244
  validated2 = restoreCompatibilityVersionForReturn(validated2, stripped, dataToValidate);
239
245
  if (!("adcp_version" in stripped)) {
@@ -260,7 +266,7 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
260
266
  const { status: _s, ...rest } = validated;
261
267
  validated = rest;
262
268
  } else {
263
- validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, toolName);
269
+ validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, compatOptions);
264
270
  }
265
271
  validated = restoreCompatibilityVersionForReturn(validated, stripped, dataToValidate);
266
272
  if (!("adcp_version" in stripped)) {
@@ -279,16 +285,18 @@ function restoreCompatibilityVersionForReturn(validated, original, compat) {
279
285
  }
280
286
  return validated;
281
287
  }
282
- function restoreLegacyMediaBuyStatusForReturn(validated, original, compat, toolName) {
288
+ function restoreLegacyMediaBuyStatusForReturn(validated, original, compat, compatOptions) {
289
+ const { toolName } = compatOptions;
283
290
  if ((toolName === "create_media_buy" || toolName === "update_media_buy") && typeof original.media_buy_id === "string" && typeof original.status === "string" && compat.status === "completed" && typeof compat.media_buy_status === "string") {
284
291
  return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)(
285
292
  { ...validated, status: original.status },
286
- { toolName }
293
+ compatOptions
287
294
  );
288
295
  }
289
- return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)(validated, {
290
- toolName
291
- });
296
+ return (0, import_envelope_status_compat.normalizeLegacyMediaBuyStatusForReturn)(
297
+ validated,
298
+ compatOptions
299
+ );
292
300
  }
293
301
  function filterInvalidProducts(schema, data) {
294
302
  const { z } = require("zod");
@@ -499,7 +507,7 @@ function isAdcpSuccess(response, taskName, responseAdcpVersion) {
499
507
  const { _message: _, ...stripped } = response ?? {};
500
508
  const dataToValidate = prepareResponseForSchemaValidation(
501
509
  taskName,
502
- (0, import_envelope_status_compat.injectLegacyEnvelopeStatus)(stripped, { toolName: taskName }),
510
+ (0, import_envelope_status_compat.injectLegacyEnvelopeStatus)(stripped, { toolName: taskName, adcpVersion: responseAdcpVersion }),
503
511
  responseAdcpVersion
504
512
  );
505
513
  const result = schema.safeParse(dataToValidate);
@@ -3,6 +3,7 @@ import { dirname as __adcpDirname } from "node:path";
3
3
  import { createRequire as __adcpCreateRequire } from "node:module";
4
4
  const __dirname = __adcpDirname(__adcpFileURLToPath(import.meta.url));
5
5
  const require2 = __adcpCreateRequire(import.meta.url);
6
+ import { isTaskStatusResponse } from "../core/task-status.mjs";
6
7
  import { getBestUnionErrors } from "./union-errors.mjs";
7
8
  const ERROR_CODES = {
8
9
  MCP_ERROR: "mcp_error",
@@ -138,6 +139,7 @@ function isStructuredGetProductsRejection(response, toolName, responseAdcpVersio
138
139
  return declaresStructuredRejectionVersion && obj.status === "rejected" && typeof obj.reason === "string" && obj.reason.length >= 1 && obj.reason.length <= 2e3 && suggestionsValid && obj.success !== false && obj.error == null && typeof obj.error_code !== "string" && forbiddenFields.every((field) => !hasOwnField(obj, field));
139
140
  }
140
141
  function isTerminalAdcpError(response, toolName, responseAdcpVersion) {
142
+ if (isTaskStatusResponse(response, toolName)) return false;
141
143
  const obj = response;
142
144
  if (isStructuredGetProductsRejection(obj, toolName, responseAdcpVersion)) return false;
143
145
  if (obj?.status === "failed" || obj?.status === "rejected") return true;
@@ -151,6 +153,7 @@ function isTerminalAdcpError(response, toolName, responseAdcpVersion) {
151
153
  return false;
152
154
  }
153
155
  function isAdcpOperationSuccess(response, toolName, responseAdcpVersion) {
156
+ if (isTaskStatusResponse(response, toolName)) return true;
154
157
  const obj = response;
155
158
  return obj?.success !== false && !obj?.error && !obj?.adcp_error && !isTerminalAdcpError(response, toolName, responseAdcpVersion);
156
159
  }
@@ -160,7 +163,9 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
160
163
  }
161
164
  let unwrapped;
162
165
  let mcpExtractionPath;
163
- if (protocol === "mcp") {
166
+ if (isTaskStatusResponse(protocolResponse, toolName)) {
167
+ unwrapped = protocolResponse;
168
+ } else if (protocol === "mcp") {
164
169
  const outcome = unwrapMCPResponse(protocolResponse);
165
170
  unwrapped = outcome.result;
166
171
  mcpExtractionPath = outcome.extractionPath;
@@ -192,9 +197,10 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
192
197
  const schema = TOOL_RESPONSE_SCHEMAS[toolName];
193
198
  if (schema) {
194
199
  const { _message: _msg, ...stripped } = unwrapped;
200
+ const compatOptions = { toolName, adcpVersion: options?.responseAdcpVersion };
195
201
  const dataToValidate = prepareResponseForSchemaValidation(
196
202
  toolName,
197
- injectLegacyEnvelopeStatus(stripped, { toolName }),
203
+ injectLegacyEnvelopeStatus(stripped, compatOptions),
198
204
  options?.responseAdcpVersion
199
205
  );
200
206
  const result = schema.safeParse(dataToValidate);
@@ -207,7 +213,7 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
207
213
  const { status: _s, ...rest } = validated2;
208
214
  validated2 = rest;
209
215
  } else {
210
- validated2 = restoreLegacyMediaBuyStatusForReturn(validated2, stripped, dataToValidate, toolName);
216
+ validated2 = restoreLegacyMediaBuyStatusForReturn(validated2, stripped, dataToValidate, compatOptions);
211
217
  }
212
218
  validated2 = restoreCompatibilityVersionForReturn(validated2, stripped, dataToValidate);
213
219
  if (!("adcp_version" in stripped)) {
@@ -234,7 +240,7 @@ function unwrapProtocolResponse(protocolResponse, toolName, protocol, options) {
234
240
  const { status: _s, ...rest } = validated;
235
241
  validated = rest;
236
242
  } else {
237
- validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, toolName);
243
+ validated = restoreLegacyMediaBuyStatusForReturn(validated, stripped, dataToValidate, compatOptions);
238
244
  }
239
245
  validated = restoreCompatibilityVersionForReturn(validated, stripped, dataToValidate);
240
246
  if (!("adcp_version" in stripped)) {
@@ -253,16 +259,18 @@ function restoreCompatibilityVersionForReturn(validated, original, compat) {
253
259
  }
254
260
  return validated;
255
261
  }
256
- function restoreLegacyMediaBuyStatusForReturn(validated, original, compat, toolName) {
262
+ function restoreLegacyMediaBuyStatusForReturn(validated, original, compat, compatOptions) {
263
+ const { toolName } = compatOptions;
257
264
  if ((toolName === "create_media_buy" || toolName === "update_media_buy") && typeof original.media_buy_id === "string" && typeof original.status === "string" && compat.status === "completed" && typeof compat.media_buy_status === "string") {
258
265
  return normalizeLegacyMediaBuyStatusForReturn(
259
266
  { ...validated, status: original.status },
260
- { toolName }
267
+ compatOptions
261
268
  );
262
269
  }
263
- return normalizeLegacyMediaBuyStatusForReturn(validated, {
264
- toolName
265
- });
270
+ return normalizeLegacyMediaBuyStatusForReturn(
271
+ validated,
272
+ compatOptions
273
+ );
266
274
  }
267
275
  function filterInvalidProducts(schema, data) {
268
276
  const { z } = require2("zod");
@@ -473,7 +481,7 @@ function isAdcpSuccess(response, taskName, responseAdcpVersion) {
473
481
  const { _message: _, ...stripped } = response ?? {};
474
482
  const dataToValidate = prepareResponseForSchemaValidation(
475
483
  taskName,
476
- injectLegacyEnvelopeStatus(stripped, { toolName: taskName }),
484
+ injectLegacyEnvelopeStatus(stripped, { toolName: taskName, adcpVersion: responseAdcpVersion }),
477
485
  responseAdcpVersion
478
486
  );
479
487
  const result = schema.safeParse(dataToValidate);
@@ -202,7 +202,7 @@ function validateJsonSchema(schema, maxKeywords) {
202
202
  details: (0, import_regex_safety.unsafeRegexDetails)(unsafeRegex)
203
203
  };
204
204
  }
205
- const ajv = new Ajv2019({ strict: false, allErrors: true, validateSchema: true });
205
+ const ajv = new Ajv2019({ inlineRefs: false, strict: false, allErrors: true, validateSchema: true });
206
206
  (0, import_ajv_formats.default)(ajv);
207
207
  ajv.addMetaSchema(draft7MetaSchema);
208
208
  ajv.addMetaSchema({ ...draft7MetaSchema, $id: "https://json-schema.org/draft-07/schema#" });
@@ -179,7 +179,7 @@ function validateJsonSchema(schema, maxKeywords) {
179
179
  details: unsafeRegexDetails(unsafeRegex)
180
180
  };
181
181
  }
182
- const ajv = new Ajv2019({ strict: false, allErrors: true, validateSchema: true });
182
+ const ajv = new Ajv2019({ inlineRefs: false, strict: false, allErrors: true, validateSchema: true });
183
183
  addFormats(ajv);
184
184
  ajv.addMetaSchema(draft7MetaSchema);
185
185
  ajv.addMetaSchema({ ...draft7MetaSchema, $id: "https://json-schema.org/draft-07/schema#" });