@adcp/sdk 13.0.0-rc.7 → 13.0.0-rc.8

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 (1529) hide show
  1. package/ADCP_VERSION +1 -1
  2. package/bin/adcp.js +29 -0
  3. package/compliance/cache/{3.1.10.previous/protocols → 3.1.11/domains}/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
  4. package/compliance/cache/{3.1.10 → 3.1.11}/index.json +3 -3
  5. package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
  6. package/compliance/cache/{3.1.10 → 3.1.11}/universal/storyboard-schema.yaml +19 -6
  7. package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
  8. package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/index.json +3 -3
  9. package/compliance/cache/{3.1.10/domains → 3.1.11.previous/protocols}/media-buy/scenarios/creative_fate_after_cancellation.yaml +46 -24
  10. package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/storyboard-schema.yaml +19 -6
  11. package/dist/lib/auth/oauth/ClientCredentialsFlow.d.mts +2 -0
  12. package/dist/lib/auth/oauth/ClientCredentialsFlow.d.ts +2 -0
  13. package/dist/lib/auth/oauth/ClientCredentialsFlow.d.ts.map +1 -1
  14. package/dist/lib/auth/oauth/ClientCredentialsFlow.js +69 -24
  15. package/dist/lib/auth/oauth/ClientCredentialsFlow.js.map +1 -1
  16. package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs +69 -24
  17. package/dist/lib/auth/oauth/ClientCredentialsFlow.mjs.map +1 -1
  18. package/dist/lib/auth/oauth/authorization-required.d.mts +3 -0
  19. package/dist/lib/auth/oauth/authorization-required.d.ts +3 -0
  20. package/dist/lib/auth/oauth/authorization-required.d.ts.map +1 -1
  21. package/dist/lib/auth/oauth/authorization-required.js +37 -7
  22. package/dist/lib/auth/oauth/authorization-required.js.map +1 -1
  23. package/dist/lib/auth/oauth/authorization-required.mjs +37 -7
  24. package/dist/lib/auth/oauth/authorization-required.mjs.map +1 -1
  25. package/dist/lib/auth/oauth/discovery.d.mts +2 -0
  26. package/dist/lib/auth/oauth/discovery.d.ts +2 -0
  27. package/dist/lib/auth/oauth/discovery.d.ts.map +1 -1
  28. package/dist/lib/auth/oauth/discovery.js +7 -5
  29. package/dist/lib/auth/oauth/discovery.js.map +1 -1
  30. package/dist/lib/auth/oauth/discovery.mjs +7 -5
  31. package/dist/lib/auth/oauth/discovery.mjs.map +1 -1
  32. package/dist/lib/core/AgentClient.d.ts.map +1 -1
  33. package/dist/lib/core/ConversationTypes.d.mts +6 -2
  34. package/dist/lib/core/ConversationTypes.d.ts +6 -2
  35. package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
  36. package/dist/lib/core/ConversationTypes.js.map +1 -1
  37. package/dist/lib/core/GovernanceMiddleware.d.mts +3 -3
  38. package/dist/lib/core/GovernanceMiddleware.d.ts +3 -3
  39. package/dist/lib/core/GovernanceMiddleware.d.ts.map +1 -1
  40. package/dist/lib/core/GovernanceMiddleware.js +8 -4
  41. package/dist/lib/core/GovernanceMiddleware.js.map +1 -1
  42. package/dist/lib/core/GovernanceMiddleware.mjs +8 -4
  43. package/dist/lib/core/GovernanceMiddleware.mjs.map +1 -1
  44. package/dist/lib/core/SingleAgentClient.d.mts +12 -1
  45. package/dist/lib/core/SingleAgentClient.d.ts +12 -1
  46. package/dist/lib/core/SingleAgentClient.d.ts.map +1 -1
  47. package/dist/lib/core/SingleAgentClient.js +89 -12
  48. package/dist/lib/core/SingleAgentClient.js.map +1 -1
  49. package/dist/lib/core/SingleAgentClient.mjs +89 -12
  50. package/dist/lib/core/SingleAgentClient.mjs.map +1 -1
  51. package/dist/lib/core/TaskExecutor.d.mts +2 -4
  52. package/dist/lib/core/TaskExecutor.d.ts +2 -4
  53. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  54. package/dist/lib/core/TaskExecutor.js +90 -14
  55. package/dist/lib/core/TaskExecutor.js.map +1 -1
  56. package/dist/lib/core/TaskExecutor.mjs +95 -14
  57. package/dist/lib/core/TaskExecutor.mjs.map +1 -1
  58. package/dist/lib/core/task-deadline.d.mts +20 -0
  59. package/dist/lib/core/task-deadline.d.ts +21 -0
  60. package/dist/lib/core/task-deadline.d.ts.map +1 -0
  61. package/dist/lib/core/task-deadline.js +74 -0
  62. package/dist/lib/core/task-deadline.js.map +1 -0
  63. package/dist/lib/core/task-deadline.mjs +47 -0
  64. package/dist/lib/core/task-deadline.mjs.map +1 -0
  65. package/dist/lib/errors/index.d.mts +11 -0
  66. package/dist/lib/errors/index.d.ts +11 -0
  67. package/dist/lib/errors/index.d.ts.map +1 -1
  68. package/dist/lib/errors/index.js +6 -0
  69. package/dist/lib/errors/index.js.map +1 -1
  70. package/dist/lib/errors/index.mjs +6 -0
  71. package/dist/lib/errors/index.mjs.map +1 -1
  72. package/dist/lib/net/ssrf-fetch.d.ts.map +1 -1
  73. package/dist/lib/net/ssrf-fetch.js +11 -0
  74. package/dist/lib/net/ssrf-fetch.js.map +1 -1
  75. package/dist/lib/net/ssrf-fetch.mjs +11 -0
  76. package/dist/lib/net/ssrf-fetch.mjs.map +1 -1
  77. package/dist/lib/protocols/abort.d.mts +3 -1
  78. package/dist/lib/protocols/abort.d.ts +3 -1
  79. package/dist/lib/protocols/abort.d.ts.map +1 -1
  80. package/dist/lib/protocols/abort.js +19 -17
  81. package/dist/lib/protocols/abort.js.map +1 -1
  82. package/dist/lib/protocols/abort.mjs +19 -17
  83. package/dist/lib/protocols/abort.mjs.map +1 -1
  84. package/dist/lib/protocols/index.d.ts.map +1 -1
  85. package/dist/lib/protocols/index.js +13 -10
  86. package/dist/lib/protocols/index.js.map +1 -1
  87. package/dist/lib/protocols/index.mjs +13 -10
  88. package/dist/lib/protocols/index.mjs.map +1 -1
  89. package/dist/lib/protocols/mcp.d.ts.map +1 -1
  90. package/dist/lib/protocols/mcp.js +8 -7
  91. package/dist/lib/protocols/mcp.js.map +1 -1
  92. package/dist/lib/protocols/mcp.mjs +8 -7
  93. package/dist/lib/protocols/mcp.mjs.map +1 -1
  94. package/dist/lib/schemas-data/3.1/a2ui/bound-value.json +1 -1
  95. package/dist/lib/schemas-data/3.1/a2ui/component.json +1 -1
  96. package/dist/lib/schemas-data/3.1/a2ui/si-catalog.json +25 -25
  97. package/dist/lib/schemas-data/3.1/a2ui/surface.json +2 -2
  98. package/dist/lib/schemas-data/3.1/a2ui/user-action.json +1 -1
  99. package/dist/lib/schemas-data/3.1/aao/agent-publishers.json +1 -1
  100. package/dist/lib/schemas-data/3.1/account/get-account-financials-request.json +6 -6
  101. package/dist/lib/schemas-data/3.1/account/get-account-financials-response.json +12 -12
  102. package/dist/lib/schemas-data/3.1/account/list-accounts-request.json +6 -6
  103. package/dist/lib/schemas-data/3.1/account/list-accounts-response.json +8 -8
  104. package/dist/lib/schemas-data/3.1/account/report-usage-request.json +6 -6
  105. package/dist/lib/schemas-data/3.1/account/report-usage-response.json +6 -6
  106. package/dist/lib/schemas-data/3.1/account/sync-accounts-request.json +12 -12
  107. package/dist/lib/schemas-data/3.1/account/sync-accounts-response.json +16 -16
  108. package/dist/lib/schemas-data/3.1/account/sync-governance-request.json +6 -6
  109. package/dist/lib/schemas-data/3.1/account/sync-governance-response.json +10 -10
  110. package/dist/lib/schemas-data/3.1/adagents.json +29 -29
  111. package/dist/lib/schemas-data/3.1/brand/acquire-rights-request.json +10 -10
  112. package/dist/lib/schemas-data/3.1/brand/acquire-rights-response.json +16 -16
  113. package/dist/lib/schemas-data/3.1/brand/creative-approval-request.json +5 -5
  114. package/dist/lib/schemas-data/3.1/brand/creative-approval-response.json +12 -12
  115. package/dist/lib/schemas-data/3.1/brand/get-brand-identity-request.json +4 -4
  116. package/dist/lib/schemas-data/3.1/brand/get-brand-identity-response.json +10 -10
  117. package/dist/lib/schemas-data/3.1/brand/get-rights-request.json +8 -8
  118. package/dist/lib/schemas-data/3.1/brand/get-rights-response.json +11 -11
  119. package/dist/lib/schemas-data/3.1/brand/revocation-notification.json +4 -4
  120. package/dist/lib/schemas-data/3.1/brand/rights-pricing-option.json +5 -5
  121. package/dist/lib/schemas-data/3.1/brand/rights-terms.json +3 -3
  122. package/dist/lib/schemas-data/3.1/brand/search-brands-request.json +6 -6
  123. package/dist/lib/schemas-data/3.1/brand/search-brands-response.json +11 -11
  124. package/dist/lib/schemas-data/3.1/brand/update-rights-request.json +6 -6
  125. package/dist/lib/schemas-data/3.1/brand/update-rights-response.json +11 -11
  126. package/dist/lib/schemas-data/3.1/brand/verification-status.json +1 -1
  127. package/dist/lib/schemas-data/3.1/brand/verify-brand-claim-request.json +2 -2
  128. package/dist/lib/schemas-data/3.1/brand/verify-brand-claim-response.json +13 -13
  129. package/dist/lib/schemas-data/3.1/brand/verify-brand-claims-request.json +2 -2
  130. package/dist/lib/schemas-data/3.1/brand/verify-brand-claims-response.json +13 -13
  131. package/dist/lib/schemas-data/3.1/brand.json +21 -21
  132. package/dist/lib/schemas-data/3.1/bundled/content-standards/calibrate-content-request.json +12 -12
  133. package/dist/lib/schemas-data/3.1/bundled/content-standards/calibrate-content-response.json +12 -12
  134. package/dist/lib/schemas-data/3.1/bundled/content-standards/create-content-standards-request.json +16 -16
  135. package/dist/lib/schemas-data/3.1/bundled/content-standards/create-content-standards-response.json +10 -10
  136. package/dist/lib/schemas-data/3.1/bundled/content-standards/get-content-standards-request.json +5 -5
  137. package/dist/lib/schemas-data/3.1/bundled/content-standards/get-content-standards-response.json +23 -23
  138. package/dist/lib/schemas-data/3.1/bundled/content-standards/get-media-buy-artifacts-request.json +16 -16
  139. package/dist/lib/schemas-data/3.1/bundled/content-standards/get-media-buy-artifacts-response.json +18 -18
  140. package/dist/lib/schemas-data/3.1/bundled/content-standards/list-content-standards-request.json +7 -7
  141. package/dist/lib/schemas-data/3.1/bundled/content-standards/list-content-standards-response.json +24 -24
  142. package/dist/lib/schemas-data/3.1/bundled/content-standards/update-content-standards-request.json +16 -16
  143. package/dist/lib/schemas-data/3.1/bundled/content-standards/update-content-standards-response.json +10 -10
  144. package/dist/lib/schemas-data/3.1/bundled/content-standards/validate-content-delivery-request.json +12 -12
  145. package/dist/lib/schemas-data/3.1/bundled/content-standards/validate-content-delivery-response.json +12 -12
  146. package/dist/lib/schemas-data/3.1/bundled/core/tasks-get-request.json +16 -16
  147. package/dist/lib/schemas-data/3.1/bundled/core/tasks-get-response.json +181 -181
  148. package/dist/lib/schemas-data/3.1/bundled/core/tasks-list-request.json +21 -21
  149. package/dist/lib/schemas-data/3.1/bundled/core/tasks-list-response.json +11 -11
  150. package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-delivery-request.json +17 -17
  151. package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-delivery-response.json +56 -56
  152. package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-features-request.json +44 -44
  153. package/dist/lib/schemas-data/3.1/bundled/creative/get-creative-features-response.json +13 -13
  154. package/dist/lib/schemas-data/3.1/bundled/creative/list-creative-formats-request.json +16 -16
  155. package/dist/lib/schemas-data/3.1/bundled/creative/list-creative-formats-response.json +48 -48
  156. package/dist/lib/schemas-data/3.1/bundled/creative/list-creatives-request.json +17 -17
  157. package/dist/lib/schemas-data/3.1/bundled/creative/list-creatives-response.json +58 -58
  158. package/dist/lib/schemas-data/3.1/bundled/creative/list-transformers-request.json +18 -18
  159. package/dist/lib/schemas-data/3.1/bundled/creative/list-transformers-response.json +16 -16
  160. package/dist/lib/schemas-data/3.1/bundled/creative/preview-creative-request.json +44 -44
  161. package/dist/lib/schemas-data/3.1/bundled/creative/preview-creative-response.json +50 -50
  162. package/dist/lib/schemas-data/3.1/bundled/creative/sync-creatives-request.json +46 -46
  163. package/dist/lib/schemas-data/3.1/bundled/creative/sync-creatives-response.json +27 -27
  164. package/dist/lib/schemas-data/3.1/bundled/creative/validate-input-request.json +42 -42
  165. package/dist/lib/schemas-data/3.1/bundled/creative/validate-input-response.json +10 -10
  166. package/dist/lib/schemas-data/3.1/bundled/media-buy/build-creative-request.json +53 -53
  167. package/dist/lib/schemas-data/3.1/bundled/media-buy/build-creative-response.json +54 -54
  168. package/dist/lib/schemas-data/3.1/bundled/media-buy/create-media-buy-request.json +83 -83
  169. package/dist/lib/schemas-data/3.1/bundled/media-buy/create-media-buy-response.json +77 -77
  170. package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buy-delivery-request.json +25 -25
  171. package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buy-delivery-response.json +40 -40
  172. package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buys-request.json +18 -18
  173. package/dist/lib/schemas-data/3.1/bundled/media-buy/get-media-buys-response.json +65 -65
  174. package/dist/lib/schemas-data/3.1/bundled/media-buy/get-products-request.json +49 -49
  175. package/dist/lib/schemas-data/3.1/bundled/media-buy/get-products-response.json +99 -99
  176. package/dist/lib/schemas-data/3.1/bundled/media-buy/list-creative-formats-request.json +12 -12
  177. package/dist/lib/schemas-data/3.1/bundled/media-buy/list-creative-formats-response.json +48 -48
  178. package/dist/lib/schemas-data/3.1/bundled/media-buy/log-event-request.json +12 -12
  179. package/dist/lib/schemas-data/3.1/bundled/media-buy/log-event-response.json +10 -10
  180. package/dist/lib/schemas-data/3.1/bundled/media-buy/package-request.json +79 -79
  181. package/dist/lib/schemas-data/3.1/bundled/media-buy/provide-performance-feedback-request.json +8 -8
  182. package/dist/lib/schemas-data/3.1/bundled/media-buy/provide-performance-feedback-response.json +10 -10
  183. package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-audiences-request.json +18 -18
  184. package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-audiences-response.json +12 -12
  185. package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-catalogs-request.json +26 -26
  186. package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-catalogs-response.json +12 -12
  187. package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-event-sources-request.json +19 -19
  188. package/dist/lib/schemas-data/3.1/bundled/media-buy/sync-event-sources-response.json +16 -16
  189. package/dist/lib/schemas-data/3.1/bundled/media-buy/update-media-buy-request.json +79 -79
  190. package/dist/lib/schemas-data/3.1/bundled/media-buy/update-media-buy-response.json +71 -71
  191. package/dist/lib/schemas-data/3.1/bundled/property/create-property-list-request.json +18 -18
  192. package/dist/lib/schemas-data/3.1/bundled/property/create-property-list-response.json +26 -26
  193. package/dist/lib/schemas-data/3.1/bundled/property/delete-property-list-request.json +16 -16
  194. package/dist/lib/schemas-data/3.1/bundled/property/delete-property-list-response.json +10 -10
  195. package/dist/lib/schemas-data/3.1/bundled/property/get-property-list-request.json +16 -16
  196. package/dist/lib/schemas-data/3.1/bundled/property/get-property-list-response.json +27 -27
  197. package/dist/lib/schemas-data/3.1/bundled/property/list-property-lists-request.json +17 -17
  198. package/dist/lib/schemas-data/3.1/bundled/property/list-property-lists-response.json +27 -27
  199. package/dist/lib/schemas-data/3.1/bundled/property/update-property-list-request.json +18 -18
  200. package/dist/lib/schemas-data/3.1/bundled/property/update-property-list-response.json +26 -26
  201. package/dist/lib/schemas-data/3.1/bundled/property/validate-property-delivery-request.json +19 -19
  202. package/dist/lib/schemas-data/3.1/bundled/property/validate-property-delivery-response.json +15 -15
  203. package/dist/lib/schemas-data/3.1/bundled/protocol/get-adcp-capabilities-request.json +5 -5
  204. package/dist/lib/schemas-data/3.1/bundled/protocol/get-adcp-capabilities-response.json +35 -35
  205. package/dist/lib/schemas-data/3.1/bundled/protocol/get-task-status-request.json +16 -16
  206. package/dist/lib/schemas-data/3.1/bundled/protocol/get-task-status-response.json +181 -181
  207. package/dist/lib/schemas-data/3.1/bundled/protocol/list-tasks-request.json +21 -21
  208. package/dist/lib/schemas-data/3.1/bundled/protocol/list-tasks-response.json +11 -11
  209. package/dist/lib/schemas-data/3.1/bundled/signals/activate-signal-request.json +17 -17
  210. package/dist/lib/schemas-data/3.1/bundled/signals/activate-signal-response.json +12 -12
  211. package/dist/lib/schemas-data/3.1/bundled/signals/get-signals-request.json +24 -24
  212. package/dist/lib/schemas-data/3.1/bundled/signals/get-signals-response.json +53 -53
  213. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-get-offering-request.json +5 -5
  214. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-get-offering-response.json +23 -23
  215. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-initiate-session-request.json +18 -18
  216. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-initiate-session-response.json +25 -25
  217. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-send-message-request.json +16 -16
  218. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-send-message-response.json +26 -26
  219. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-terminate-session-request.json +5 -5
  220. package/dist/lib/schemas-data/3.1/bundled/sponsored-intelligence/si-terminate-session-response.json +11 -11
  221. package/dist/lib/schemas-data/3.1/collection/base-collection-source.json +3 -3
  222. package/dist/lib/schemas-data/3.1/collection/collection-list-changed-webhook.json +2 -2
  223. package/dist/lib/schemas-data/3.1/collection/collection-list-filters.json +7 -7
  224. package/dist/lib/schemas-data/3.1/collection/collection-list.json +5 -5
  225. package/dist/lib/schemas-data/3.1/collection/create-collection-list-request.json +8 -8
  226. package/dist/lib/schemas-data/3.1/collection/create-collection-list-response.json +6 -6
  227. package/dist/lib/schemas-data/3.1/collection/delete-collection-list-request.json +5 -5
  228. package/dist/lib/schemas-data/3.1/collection/delete-collection-list-response.json +5 -5
  229. package/dist/lib/schemas-data/3.1/collection/get-collection-list-request.json +5 -5
  230. package/dist/lib/schemas-data/3.1/collection/get-collection-list-response.json +12 -12
  231. package/dist/lib/schemas-data/3.1/collection/list-collection-lists-request.json +6 -6
  232. package/dist/lib/schemas-data/3.1/collection/list-collection-lists-response.json +7 -7
  233. package/dist/lib/schemas-data/3.1/collection/update-collection-list-request.json +8 -8
  234. package/dist/lib/schemas-data/3.1/collection/update-collection-list-response.json +6 -6
  235. package/dist/lib/schemas-data/3.1/content-standards/artifact-webhook-payload.json +3 -3
  236. package/dist/lib/schemas-data/3.1/content-standards/artifact.json +7 -7
  237. package/dist/lib/schemas-data/3.1/content-standards/calibrate-content-request.json +5 -5
  238. package/dist/lib/schemas-data/3.1/content-standards/calibrate-content-response.json +10 -10
  239. package/dist/lib/schemas-data/3.1/content-standards/content-standards.json +7 -7
  240. package/dist/lib/schemas-data/3.1/content-standards/create-content-standards-request.json +8 -8
  241. package/dist/lib/schemas-data/3.1/content-standards/create-content-standards-response.json +8 -8
  242. package/dist/lib/schemas-data/3.1/content-standards/get-content-standards-request.json +4 -4
  243. package/dist/lib/schemas-data/3.1/content-standards/get-content-standards-response.json +9 -9
  244. package/dist/lib/schemas-data/3.1/content-standards/get-media-buy-artifacts-request.json +5 -5
  245. package/dist/lib/schemas-data/3.1/content-standards/get-media-buy-artifacts-response.json +10 -10
  246. package/dist/lib/schemas-data/3.1/content-standards/list-content-standards-request.json +6 -6
  247. package/dist/lib/schemas-data/3.1/content-standards/list-content-standards-response.json +10 -10
  248. package/dist/lib/schemas-data/3.1/content-standards/update-content-standards-request.json +8 -8
  249. package/dist/lib/schemas-data/3.1/content-standards/update-content-standards-response.json +8 -8
  250. package/dist/lib/schemas-data/3.1/content-standards/validate-content-delivery-request.json +5 -5
  251. package/dist/lib/schemas-data/3.1/content-standards/validate-content-delivery-response.json +10 -10
  252. package/dist/lib/schemas-data/3.1/core/account-authorization.json +1 -1
  253. package/dist/lib/schemas-data/3.1/core/account-ref.json +2 -2
  254. package/dist/lib/schemas-data/3.1/core/account-with-authorization.json +3 -3
  255. package/dist/lib/schemas-data/3.1/core/account.json +10 -10
  256. package/dist/lib/schemas-data/3.1/core/activation-key.json +1 -1
  257. package/dist/lib/schemas-data/3.1/core/ad-inventory-config.json +1 -1
  258. package/dist/lib/schemas-data/3.1/core/agent-encryption-key.json +1 -1
  259. package/dist/lib/schemas-data/3.1/core/agent-signing-key.json +1 -1
  260. package/dist/lib/schemas-data/3.1/core/app-item.json +4 -4
  261. package/dist/lib/schemas-data/3.1/core/asset-group-vocabulary.json +1 -1
  262. package/dist/lib/schemas-data/3.1/core/assets/asset-union.json +21 -21
  263. package/dist/lib/schemas-data/3.1/core/assets/audio-asset.json +3 -3
  264. package/dist/lib/schemas-data/3.1/core/assets/brief-asset.json +2 -2
  265. package/dist/lib/schemas-data/3.1/core/assets/card-asset.json +6 -6
  266. package/dist/lib/schemas-data/3.1/core/assets/catalog-asset.json +2 -2
  267. package/dist/lib/schemas-data/3.1/core/assets/css-asset.json +2 -2
  268. package/dist/lib/schemas-data/3.1/core/assets/daast-asset.json +4 -4
  269. package/dist/lib/schemas-data/3.1/core/assets/daast-tracker-asset.json +3 -3
  270. package/dist/lib/schemas-data/3.1/core/assets/html-asset.json +2 -2
  271. package/dist/lib/schemas-data/3.1/core/assets/image-asset.json +2 -2
  272. package/dist/lib/schemas-data/3.1/core/assets/javascript-asset.json +3 -3
  273. package/dist/lib/schemas-data/3.1/core/assets/markdown-asset.json +2 -2
  274. package/dist/lib/schemas-data/3.1/core/assets/pixel-tracker-asset.json +2 -2
  275. package/dist/lib/schemas-data/3.1/core/assets/published-post-asset.json +2 -2
  276. package/dist/lib/schemas-data/3.1/core/assets/text-asset.json +2 -2
  277. package/dist/lib/schemas-data/3.1/core/assets/url-asset.json +3 -3
  278. package/dist/lib/schemas-data/3.1/core/assets/vast-asset.json +4 -4
  279. package/dist/lib/schemas-data/3.1/core/assets/vast-tracker-asset.json +3 -3
  280. package/dist/lib/schemas-data/3.1/core/assets/video-asset.json +7 -7
  281. package/dist/lib/schemas-data/3.1/core/assets/webhook-asset.json +7 -7
  282. package/dist/lib/schemas-data/3.1/core/assets/zip-asset.json +2 -2
  283. package/dist/lib/schemas-data/3.1/core/async-response-data.json +29 -29
  284. package/dist/lib/schemas-data/3.1/core/async-response-refs/creative/sync-creatives-async-response-input-required.json +3 -3
  285. package/dist/lib/schemas-data/3.1/core/async-response-refs/creative/sync-creatives-async-response-submitted.json +4 -4
  286. package/dist/lib/schemas-data/3.1/core/async-response-refs/creative/sync-creatives-async-response-working.json +3 -3
  287. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/build-creative-async-response-input-required.json +4 -4
  288. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/build-creative-async-response-submitted.json +4 -4
  289. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/build-creative-async-response-working.json +3 -3
  290. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/create-media-buy-async-response-input-required.json +4 -4
  291. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/create-media-buy-async-response-submitted.json +4 -4
  292. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/create-media-buy-async-response-working.json +3 -3
  293. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/get-products-async-response-input-required.json +4 -4
  294. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/get-products-async-response-submitted.json +4 -4
  295. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/get-products-async-response-working.json +3 -3
  296. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/sync-catalogs-async-response-input-required.json +3 -3
  297. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/sync-catalogs-async-response-submitted.json +4 -4
  298. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/sync-catalogs-async-response-working.json +3 -3
  299. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/update-media-buy-async-response-input-required.json +3 -3
  300. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/update-media-buy-async-response-submitted.json +4 -4
  301. package/dist/lib/schemas-data/3.1/core/async-response-refs/media-buy/update-media-buy-async-response-working.json +3 -3
  302. package/dist/lib/schemas-data/3.1/core/async-response-refs/signals/get-signals-async-response-submitted.json +4 -4
  303. package/dist/lib/schemas-data/3.1/core/async-response-refs/signals/get-signals-async-response-working.json +3 -3
  304. package/dist/lib/schemas-data/3.1/core/attribution-window.json +4 -4
  305. package/dist/lib/schemas-data/3.1/core/audience-member.json +3 -3
  306. package/dist/lib/schemas-data/3.1/core/audience-selector.json +7 -7
  307. package/dist/lib/schemas-data/3.1/core/authorized-agent-base.json +3 -3
  308. package/dist/lib/schemas-data/3.1/core/brand-id.json +1 -1
  309. package/dist/lib/schemas-data/3.1/core/brand-ref.json +3 -3
  310. package/dist/lib/schemas-data/3.1/core/business-entity.json +2 -2
  311. package/dist/lib/schemas-data/3.1/core/cancellation-policy.json +2 -2
  312. package/dist/lib/schemas-data/3.1/core/canonical-format-kind.json +1 -1
  313. package/dist/lib/schemas-data/3.1/core/canonical-projection-ref.json +3 -3
  314. package/dist/lib/schemas-data/3.1/core/canonical-projection-slot-override.json +1 -1
  315. package/dist/lib/schemas-data/3.1/core/catalog-field-mapping.json +2 -2
  316. package/dist/lib/schemas-data/3.1/core/catalog-item-delivery-metrics.json +3 -3
  317. package/dist/lib/schemas-data/3.1/core/catalog.json +7 -7
  318. package/dist/lib/schemas-data/3.1/core/catchment.json +5 -5
  319. package/dist/lib/schemas-data/3.1/core/collection-distribution.json +2 -2
  320. package/dist/lib/schemas-data/3.1/core/collection-list-ref.json +1 -1
  321. package/dist/lib/schemas-data/3.1/core/collection-selector.json +1 -1
  322. package/dist/lib/schemas-data/3.1/core/collection.json +13 -13
  323. package/dist/lib/schemas-data/3.1/core/committed-metric.json +9 -9
  324. package/dist/lib/schemas-data/3.1/core/content-rating.json +2 -2
  325. package/dist/lib/schemas-data/3.1/core/context.json +1 -1
  326. package/dist/lib/schemas-data/3.1/core/creative-asset.json +10 -10
  327. package/dist/lib/schemas-data/3.1/core/creative-assignment.json +2 -2
  328. package/dist/lib/schemas-data/3.1/core/creative-brief.json +4 -4
  329. package/dist/lib/schemas-data/3.1/core/creative-consumption.json +1 -1
  330. package/dist/lib/schemas-data/3.1/core/creative-delivery-metrics.json +2 -2
  331. package/dist/lib/schemas-data/3.1/core/creative-filters.json +5 -5
  332. package/dist/lib/schemas-data/3.1/core/creative-item.json +1 -1
  333. package/dist/lib/schemas-data/3.1/core/creative-manifest.json +11 -11
  334. package/dist/lib/schemas-data/3.1/core/creative-policy.json +3 -3
  335. package/dist/lib/schemas-data/3.1/core/creative-variable.json +1 -1
  336. package/dist/lib/schemas-data/3.1/core/creative-variant.json +5 -5
  337. package/dist/lib/schemas-data/3.1/core/data-provider-signal-selector.json +1 -1
  338. package/dist/lib/schemas-data/3.1/core/date-range.json +1 -1
  339. package/dist/lib/schemas-data/3.1/core/datetime-range.json +1 -1
  340. package/dist/lib/schemas-data/3.1/core/daypart-target.json +2 -2
  341. package/dist/lib/schemas-data/3.1/core/deadline-policy.json +1 -1
  342. package/dist/lib/schemas-data/3.1/core/delivery-forecast.json +7 -7
  343. package/dist/lib/schemas-data/3.1/core/delivery-metric-aggregate.json +9 -9
  344. package/dist/lib/schemas-data/3.1/core/delivery-metrics.json +8 -8
  345. package/dist/lib/schemas-data/3.1/core/deployment.json +3 -3
  346. package/dist/lib/schemas-data/3.1/core/destination-item.json +4 -4
  347. package/dist/lib/schemas-data/3.1/core/destination.json +1 -1
  348. package/dist/lib/schemas-data/3.1/core/diagnostic-issue.json +1 -1
  349. package/dist/lib/schemas-data/3.1/core/downstream-connection-requirement.json +1 -1
  350. package/dist/lib/schemas-data/3.1/core/duration.json +1 -1
  351. package/dist/lib/schemas-data/3.1/core/education-item.json +4 -4
  352. package/dist/lib/schemas-data/3.1/core/error.json +1 -1
  353. package/dist/lib/schemas-data/3.1/core/evaluator-spec.json +5 -5
  354. package/dist/lib/schemas-data/3.1/core/event-custom-data.json +2 -2
  355. package/dist/lib/schemas-data/3.1/core/event-source-health.json +3 -3
  356. package/dist/lib/schemas-data/3.1/core/event-surface.json +2 -2
  357. package/dist/lib/schemas-data/3.1/core/event.json +8 -8
  358. package/dist/lib/schemas-data/3.1/core/ext.json +1 -1
  359. package/dist/lib/schemas-data/3.1/core/feature-requirement.json +1 -1
  360. package/dist/lib/schemas-data/3.1/core/flight-item.json +4 -4
  361. package/dist/lib/schemas-data/3.1/core/forecast-dimension-audience.json +2 -2
  362. package/dist/lib/schemas-data/3.1/core/forecast-dimension-device-platform.json +2 -2
  363. package/dist/lib/schemas-data/3.1/core/forecast-dimension-device-type.json +2 -2
  364. package/dist/lib/schemas-data/3.1/core/forecast-dimension-geo.json +5 -5
  365. package/dist/lib/schemas-data/3.1/core/forecast-dimension-placement.json +2 -2
  366. package/dist/lib/schemas-data/3.1/core/forecast-dimension-signal.json +2 -2
  367. package/dist/lib/schemas-data/3.1/core/forecast-point-dimensions.json +7 -7
  368. package/dist/lib/schemas-data/3.1/core/forecast-point.json +27 -27
  369. package/dist/lib/schemas-data/3.1/core/forecast-range.json +1 -1
  370. package/dist/lib/schemas-data/3.1/core/forecast-vendor-metric-value.json +5 -5
  371. package/dist/lib/schemas-data/3.1/core/format-id.json +1 -1
  372. package/dist/lib/schemas-data/3.1/core/format-option-ref.json +1 -1
  373. package/dist/lib/schemas-data/3.1/core/format-shape-vocabulary.json +1 -1
  374. package/dist/lib/schemas-data/3.1/core/format.json +44 -44
  375. package/dist/lib/schemas-data/3.1/core/frequency-cap.json +4 -4
  376. package/dist/lib/schemas-data/3.1/core/generation-credential.json +3 -3
  377. package/dist/lib/schemas-data/3.1/core/geo-breakdown-support.json +3 -3
  378. package/dist/lib/schemas-data/3.1/core/geo-delivery-metrics.json +6 -6
  379. package/dist/lib/schemas-data/3.1/core/hotel-item.json +4 -4
  380. package/dist/lib/schemas-data/3.1/core/identifier.json +2 -2
  381. package/dist/lib/schemas-data/3.1/core/impairment.json +3 -3
  382. package/dist/lib/schemas-data/3.1/core/industry-identifier.json +2 -2
  383. package/dist/lib/schemas-data/3.1/core/insertion-order.json +1 -1
  384. package/dist/lib/schemas-data/3.1/core/installment-deadlines.json +2 -2
  385. package/dist/lib/schemas-data/3.1/core/installment.json +9 -9
  386. package/dist/lib/schemas-data/3.1/core/job-item.json +3 -3
  387. package/dist/lib/schemas-data/3.1/core/keyword-delivery-metrics.json +3 -3
  388. package/dist/lib/schemas-data/3.1/core/limited-series.json +1 -1
  389. package/dist/lib/schemas-data/3.1/core/material-deadline.json +1 -1
  390. package/dist/lib/schemas-data/3.1/core/mcp-webhook-payload.json +5 -5
  391. package/dist/lib/schemas-data/3.1/core/measurement-readiness.json +5 -5
  392. package/dist/lib/schemas-data/3.1/core/measurement-terms.json +3 -3
  393. package/dist/lib/schemas-data/3.1/core/measurement-window.json +1 -1
  394. package/dist/lib/schemas-data/3.1/core/media-buy-available-action.json +4 -4
  395. package/dist/lib/schemas-data/3.1/core/media-buy-features.json +1 -1
  396. package/dist/lib/schemas-data/3.1/core/media-buy.json +10 -10
  397. package/dist/lib/schemas-data/3.1/core/missing-metric.json +9 -9
  398. package/dist/lib/schemas-data/3.1/core/notification-config.json +4 -4
  399. package/dist/lib/schemas-data/3.1/core/offering-asset-group.json +16 -16
  400. package/dist/lib/schemas-data/3.1/core/offering.json +5 -5
  401. package/dist/lib/schemas-data/3.1/core/optimization-goal.json +7 -7
  402. package/dist/lib/schemas-data/3.1/core/outcome-measurement.json +2 -2
  403. package/dist/lib/schemas-data/3.1/core/overlay.json +1 -1
  404. package/dist/lib/schemas-data/3.1/core/package-signal-targeting-group.json +2 -2
  405. package/dist/lib/schemas-data/3.1/core/package-signal-targeting-groups.json +2 -2
  406. package/dist/lib/schemas-data/3.1/core/package-signal-targeting.json +3 -3
  407. package/dist/lib/schemas-data/3.1/core/package.json +17 -17
  408. package/dist/lib/schemas-data/3.1/core/pagination-request.json +1 -1
  409. package/dist/lib/schemas-data/3.1/core/pagination-response.json +1 -1
  410. package/dist/lib/schemas-data/3.1/core/performance-feedback.json +12 -12
  411. package/dist/lib/schemas-data/3.1/core/performance-standard.json +4 -4
  412. package/dist/lib/schemas-data/3.1/core/placement-definition.json +10 -10
  413. package/dist/lib/schemas-data/3.1/core/placement-ref.json +1 -1
  414. package/dist/lib/schemas-data/3.1/core/placement.json +7 -7
  415. package/dist/lib/schemas-data/3.1/core/planned-delivery.json +5 -5
  416. package/dist/lib/schemas-data/3.1/core/platform-extension-ref.json +1 -1
  417. package/dist/lib/schemas-data/3.1/core/postal-area-support.json +2 -2
  418. package/dist/lib/schemas-data/3.1/core/postal-area.json +4 -4
  419. package/dist/lib/schemas-data/3.1/core/postal-country-system.json +2 -2
  420. package/dist/lib/schemas-data/3.1/core/price.json +1 -1
  421. package/dist/lib/schemas-data/3.1/core/pricing-option.json +10 -10
  422. package/dist/lib/schemas-data/3.1/core/product-allocation.json +4 -4
  423. package/dist/lib/schemas-data/3.1/core/product-allowed-action.json +5 -5
  424. package/dist/lib/schemas-data/3.1/core/product-filters.json +27 -27
  425. package/dist/lib/schemas-data/3.1/core/product-format-declaration.json +16 -16
  426. package/dist/lib/schemas-data/3.1/core/product-signal-targeting-option.json +3 -3
  427. package/dist/lib/schemas-data/3.1/core/product.json +40 -40
  428. package/dist/lib/schemas-data/3.1/core/property-id.json +1 -1
  429. package/dist/lib/schemas-data/3.1/core/property-list-ref.json +1 -1
  430. package/dist/lib/schemas-data/3.1/core/property-tag.json +1 -1
  431. package/dist/lib/schemas-data/3.1/core/property.json +6 -6
  432. package/dist/lib/schemas-data/3.1/core/proposal.json +6 -6
  433. package/dist/lib/schemas-data/3.1/core/protocol-envelope.json +5 -5
  434. package/dist/lib/schemas-data/3.1/core/provenance.json +9 -9
  435. package/dist/lib/schemas-data/3.1/core/publisher-property-selector.json +3 -3
  436. package/dist/lib/schemas-data/3.1/core/push-notification-config.json +2 -2
  437. package/dist/lib/schemas-data/3.1/core/real-estate-item.json +4 -4
  438. package/dist/lib/schemas-data/3.1/core/reference-asset.json +1 -1
  439. package/dist/lib/schemas-data/3.1/core/registry-event.json +13 -13
  440. package/dist/lib/schemas-data/3.1/core/registry-feed-response.json +2 -2
  441. package/dist/lib/schemas-data/3.1/core/reporting-capabilities.json +8 -8
  442. package/dist/lib/schemas-data/3.1/core/reporting-webhook.json +3 -3
  443. package/dist/lib/schemas-data/3.1/core/requirements/asset-requirements.json +13 -13
  444. package/dist/lib/schemas-data/3.1/core/requirements/audio-asset-requirements.json +1 -1
  445. package/dist/lib/schemas-data/3.1/core/requirements/catalog-field-binding.json +4 -4
  446. package/dist/lib/schemas-data/3.1/core/requirements/catalog-requirements.json +5 -5
  447. package/dist/lib/schemas-data/3.1/core/requirements/css-asset-requirements.json +1 -1
  448. package/dist/lib/schemas-data/3.1/core/requirements/daast-asset-requirements.json +1 -1
  449. package/dist/lib/schemas-data/3.1/core/requirements/html-asset-requirements.json +1 -1
  450. package/dist/lib/schemas-data/3.1/core/requirements/image-asset-requirements.json +2 -2
  451. package/dist/lib/schemas-data/3.1/core/requirements/javascript-asset-requirements.json +1 -1
  452. package/dist/lib/schemas-data/3.1/core/requirements/markdown-asset-requirements.json +1 -1
  453. package/dist/lib/schemas-data/3.1/core/requirements/offering-asset-constraint.json +4 -4
  454. package/dist/lib/schemas-data/3.1/core/requirements/text-asset-requirements.json +1 -1
  455. package/dist/lib/schemas-data/3.1/core/requirements/url-asset-requirements.json +1 -1
  456. package/dist/lib/schemas-data/3.1/core/requirements/vast-asset-requirements.json +1 -1
  457. package/dist/lib/schemas-data/3.1/core/requirements/video-asset-requirements.json +6 -6
  458. package/dist/lib/schemas-data/3.1/core/requirements/webhook-asset-requirements.json +1 -1
  459. package/dist/lib/schemas-data/3.1/core/response-payload-jws-envelope.json +1 -1
  460. package/dist/lib/schemas-data/3.1/core/response.json +1 -1
  461. package/dist/lib/schemas-data/3.1/core/rights-constraint.json +4 -4
  462. package/dist/lib/schemas-data/3.1/core/seller-agent-ref.json +1 -1
  463. package/dist/lib/schemas-data/3.1/core/signal-coverage-forecast.json +5 -5
  464. package/dist/lib/schemas-data/3.1/core/signal-definition-enrichment.json +4 -4
  465. package/dist/lib/schemas-data/3.1/core/signal-definition.json +5 -5
  466. package/dist/lib/schemas-data/3.1/core/signal-filters.json +3 -3
  467. package/dist/lib/schemas-data/3.1/core/signal-id.json +1 -1
  468. package/dist/lib/schemas-data/3.1/core/signal-listing.json +4 -4
  469. package/dist/lib/schemas-data/3.1/core/signal-modeling-disclosure.json +1 -1
  470. package/dist/lib/schemas-data/3.1/core/signal-pricing-option.json +2 -2
  471. package/dist/lib/schemas-data/3.1/core/signal-pricing.json +6 -6
  472. package/dist/lib/schemas-data/3.1/core/signal-ref.json +1 -1
  473. package/dist/lib/schemas-data/3.1/core/signal-selection-group-rule.json +1 -1
  474. package/dist/lib/schemas-data/3.1/core/signal-targeting-expression.json +4 -4
  475. package/dist/lib/schemas-data/3.1/core/signal-targeting-rules.json +2 -2
  476. package/dist/lib/schemas-data/3.1/core/signal-targeting.json +7 -7
  477. package/dist/lib/schemas-data/3.1/core/sla-window.json +1 -1
  478. package/dist/lib/schemas-data/3.1/core/special.json +2 -2
  479. package/dist/lib/schemas-data/3.1/core/start-timing.json +1 -1
  480. package/dist/lib/schemas-data/3.1/core/store-item.json +3 -3
  481. package/dist/lib/schemas-data/3.1/core/talent.json +2 -2
  482. package/dist/lib/schemas-data/3.1/core/targeting.json +22 -22
  483. package/dist/lib/schemas-data/3.1/core/tasks-get-request.json +5 -5
  484. package/dist/lib/schemas-data/3.1/core/tasks-get-response.json +10 -10
  485. package/dist/lib/schemas-data/3.1/core/tasks-list-request.json +13 -13
  486. package/dist/lib/schemas-data/3.1/core/tasks-list-response.json +8 -8
  487. package/dist/lib/schemas-data/3.1/core/transformer-param.json +1 -1
  488. package/dist/lib/schemas-data/3.1/core/transformer.json +5 -5
  489. package/dist/lib/schemas-data/3.1/core/truncation-sentinel.json +1 -1
  490. package/dist/lib/schemas-data/3.1/core/user-match.json +3 -3
  491. package/dist/lib/schemas-data/3.1/core/vehicle-item.json +4 -4
  492. package/dist/lib/schemas-data/3.1/core/vendor-metric-id.json +1 -1
  493. package/dist/lib/schemas-data/3.1/core/vendor-metric-optimization-supported-metric.json +3 -3
  494. package/dist/lib/schemas-data/3.1/core/vendor-metric-optimization.json +2 -2
  495. package/dist/lib/schemas-data/3.1/core/vendor-metric-value.json +3 -3
  496. package/dist/lib/schemas-data/3.1/core/vendor-pricing-option.json +3 -3
  497. package/dist/lib/schemas-data/3.1/core/version-envelope.json +1 -1
  498. package/dist/lib/schemas-data/3.1/core/webhook-activity-record.json +3 -3
  499. package/dist/lib/schemas-data/3.1/core/webhook-challenge-response.json +1 -1
  500. package/dist/lib/schemas-data/3.1/core/webhook-challenge.json +2 -2
  501. package/dist/lib/schemas-data/3.1/core/wholesale-feed-event.json +17 -17
  502. package/dist/lib/schemas-data/3.1/core/wholesale-feed-webhook.json +3 -3
  503. package/dist/lib/schemas-data/3.1/core/x-entity-types.json +1 -1
  504. package/dist/lib/schemas-data/3.1/creative/asset-types/index.json +6 -6
  505. package/dist/lib/schemas-data/3.1/creative/audit-observation.json +2 -2
  506. package/dist/lib/schemas-data/3.1/creative/creative-feature-result.json +2 -2
  507. package/dist/lib/schemas-data/3.1/creative/creative-purged-webhook.json +3 -3
  508. package/dist/lib/schemas-data/3.1/creative/creative-status-changed-webhook.json +4 -4
  509. package/dist/lib/schemas-data/3.1/creative/get-creative-delivery-request.json +6 -6
  510. package/dist/lib/schemas-data/3.1/creative/get-creative-delivery-response.json +9 -9
  511. package/dist/lib/schemas-data/3.1/creative/get-creative-features-request.json +6 -6
  512. package/dist/lib/schemas-data/3.1/creative/get-creative-features-response.json +11 -11
  513. package/dist/lib/schemas-data/3.1/creative/list-creative-formats-request.json +13 -13
  514. package/dist/lib/schemas-data/3.1/creative/list-creative-formats-response.json +9 -9
  515. package/dist/lib/schemas-data/3.1/creative/list-creatives-request.json +9 -9
  516. package/dist/lib/schemas-data/3.1/creative/list-creatives-response.json +21 -21
  517. package/dist/lib/schemas-data/3.1/creative/list-transformers-request.json +8 -8
  518. package/dist/lib/schemas-data/3.1/creative/list-transformers-response.json +8 -8
  519. package/dist/lib/schemas-data/3.1/creative/preview-creative-request.json +12 -12
  520. package/dist/lib/schemas-data/3.1/creative/preview-creative-response.json +14 -14
  521. package/dist/lib/schemas-data/3.1/creative/preview-render.json +1 -1
  522. package/dist/lib/schemas-data/3.1/creative/sync-creatives-async-response-input-required.json +3 -3
  523. package/dist/lib/schemas-data/3.1/creative/sync-creatives-async-response-submitted.json +4 -4
  524. package/dist/lib/schemas-data/3.1/creative/sync-creatives-async-response-working.json +3 -3
  525. package/dist/lib/schemas-data/3.1/creative/sync-creatives-request.json +8 -8
  526. package/dist/lib/schemas-data/3.1/creative/sync-creatives-response.json +15 -15
  527. package/dist/lib/schemas-data/3.1/creative/validate-input-request.json +4 -4
  528. package/dist/lib/schemas-data/3.1/creative/validate-input-response.json +4 -4
  529. package/dist/lib/schemas-data/3.1/creative/validate-input-result.json +1 -1
  530. package/dist/lib/schemas-data/3.1/creative/video-brief.json +1 -1
  531. package/dist/lib/schemas-data/3.1/enums/account-scope.json +1 -1
  532. package/dist/lib/schemas-data/3.1/enums/account-status.json +1 -1
  533. package/dist/lib/schemas-data/3.1/enums/action-not-allowed-reason.json +1 -1
  534. package/dist/lib/schemas-data/3.1/enums/action-source.json +1 -1
  535. package/dist/lib/schemas-data/3.1/enums/adcp-protocol.json +1 -1
  536. package/dist/lib/schemas-data/3.1/enums/adjustment-kind.json +1 -1
  537. package/dist/lib/schemas-data/3.1/enums/advertiser-industry.json +1 -1
  538. package/dist/lib/schemas-data/3.1/enums/age-verification-method.json +1 -1
  539. package/dist/lib/schemas-data/3.1/enums/assessment-status.json +1 -1
  540. package/dist/lib/schemas-data/3.1/enums/asset-content-type.json +1 -1
  541. package/dist/lib/schemas-data/3.1/enums/attestation-claim.json +1 -1
  542. package/dist/lib/schemas-data/3.1/enums/attribution-methodology.json +1 -1
  543. package/dist/lib/schemas-data/3.1/enums/attribution-model.json +1 -1
  544. package/dist/lib/schemas-data/3.1/enums/audience-source.json +1 -1
  545. package/dist/lib/schemas-data/3.1/enums/audience-status.json +1 -1
  546. package/dist/lib/schemas-data/3.1/enums/audio-channel-layout.json +1 -1
  547. package/dist/lib/schemas-data/3.1/enums/audio-distribution-type.json +1 -1
  548. package/dist/lib/schemas-data/3.1/enums/auth-scheme.json +1 -1
  549. package/dist/lib/schemas-data/3.1/enums/available-metric.json +1 -1
  550. package/dist/lib/schemas-data/3.1/enums/billing-party.json +1 -1
  551. package/dist/lib/schemas-data/3.1/enums/binary-verdict.json +1 -1
  552. package/dist/lib/schemas-data/3.1/enums/brand-agent-type.json +1 -1
  553. package/dist/lib/schemas-data/3.1/enums/c2pa-watermark-action.json +1 -1
  554. package/dist/lib/schemas-data/3.1/enums/canceled-by.json +1 -1
  555. package/dist/lib/schemas-data/3.1/enums/catalog-action.json +1 -1
  556. package/dist/lib/schemas-data/3.1/enums/catalog-item-status.json +1 -1
  557. package/dist/lib/schemas-data/3.1/enums/catalog-type.json +1 -1
  558. package/dist/lib/schemas-data/3.1/enums/channels.json +1 -1
  559. package/dist/lib/schemas-data/3.1/enums/cloud-storage-protocol.json +1 -1
  560. package/dist/lib/schemas-data/3.1/enums/co-branding-requirement.json +1 -1
  561. package/dist/lib/schemas-data/3.1/enums/collection-cadence.json +1 -1
  562. package/dist/lib/schemas-data/3.1/enums/collection-kind.json +1 -1
  563. package/dist/lib/schemas-data/3.1/enums/collection-relationship.json +1 -1
  564. package/dist/lib/schemas-data/3.1/enums/collection-status.json +1 -1
  565. package/dist/lib/schemas-data/3.1/enums/completion-source.json +1 -1
  566. package/dist/lib/schemas-data/3.1/enums/consent-basis.json +1 -1
  567. package/dist/lib/schemas-data/3.1/enums/content-id-type.json +1 -1
  568. package/dist/lib/schemas-data/3.1/enums/content-rating-system.json +1 -1
  569. package/dist/lib/schemas-data/3.1/enums/creative-action.json +1 -1
  570. package/dist/lib/schemas-data/3.1/enums/creative-agent-capability.json +1 -1
  571. package/dist/lib/schemas-data/3.1/enums/creative-approval-status.json +1 -1
  572. package/dist/lib/schemas-data/3.1/enums/creative-event-reason-code.json +1 -1
  573. package/dist/lib/schemas-data/3.1/enums/creative-identifier-type.json +1 -1
  574. package/dist/lib/schemas-data/3.1/enums/creative-quality.json +1 -1
  575. package/dist/lib/schemas-data/3.1/enums/creative-selection-strategy.json +1 -1
  576. package/dist/lib/schemas-data/3.1/enums/creative-sort-field.json +1 -1
  577. package/dist/lib/schemas-data/3.1/enums/creative-status.json +1 -1
  578. package/dist/lib/schemas-data/3.1/enums/daast-tracking-event.json +1 -1
  579. package/dist/lib/schemas-data/3.1/enums/daast-version.json +1 -1
  580. package/dist/lib/schemas-data/3.1/enums/day-of-week.json +1 -1
  581. package/dist/lib/schemas-data/3.1/enums/delegation-authority.json +1 -1
  582. package/dist/lib/schemas-data/3.1/enums/delivery-type.json +1 -1
  583. package/dist/lib/schemas-data/3.1/enums/demographic-system.json +1 -1
  584. package/dist/lib/schemas-data/3.1/enums/derivative-type.json +1 -1
  585. package/dist/lib/schemas-data/3.1/enums/device-platform.json +1 -1
  586. package/dist/lib/schemas-data/3.1/enums/device-type.json +1 -1
  587. package/dist/lib/schemas-data/3.1/enums/digital-source-type.json +1 -1
  588. package/dist/lib/schemas-data/3.1/enums/dimension-unit.json +1 -1
  589. package/dist/lib/schemas-data/3.1/enums/disclosure-persistence.json +1 -1
  590. package/dist/lib/schemas-data/3.1/enums/disclosure-position.json +1 -1
  591. package/dist/lib/schemas-data/3.1/enums/distance-unit.json +1 -1
  592. package/dist/lib/schemas-data/3.1/enums/distribution-identifier-type.json +1 -1
  593. package/dist/lib/schemas-data/3.1/enums/embedded-provenance-method.json +1 -1
  594. package/dist/lib/schemas-data/3.1/enums/error-code.json +1 -1
  595. package/dist/lib/schemas-data/3.1/enums/error-scope.json +1 -1
  596. package/dist/lib/schemas-data/3.1/enums/escalation-severity.json +1 -1
  597. package/dist/lib/schemas-data/3.1/enums/event-type.json +1 -1
  598. package/dist/lib/schemas-data/3.1/enums/exclusivity.json +1 -1
  599. package/dist/lib/schemas-data/3.1/enums/feature-check-status.json +1 -1
  600. package/dist/lib/schemas-data/3.1/enums/feed-format.json +1 -1
  601. package/dist/lib/schemas-data/3.1/enums/feedback-source.json +1 -1
  602. package/dist/lib/schemas-data/3.1/enums/forecast-method.json +1 -1
  603. package/dist/lib/schemas-data/3.1/enums/forecast-range-unit.json +1 -1
  604. package/dist/lib/schemas-data/3.1/enums/forecastable-metric.json +1 -1
  605. package/dist/lib/schemas-data/3.1/enums/format-id-parameter.json +1 -1
  606. package/dist/lib/schemas-data/3.1/enums/frame-rate-type.json +1 -1
  607. package/dist/lib/schemas-data/3.1/enums/frequency-cap-scope.json +1 -1
  608. package/dist/lib/schemas-data/3.1/enums/genre-taxonomy.json +1 -1
  609. package/dist/lib/schemas-data/3.1/enums/geo-level.json +1 -1
  610. package/dist/lib/schemas-data/3.1/enums/gop-type.json +1 -1
  611. package/dist/lib/schemas-data/3.1/enums/governance-decision.json +1 -1
  612. package/dist/lib/schemas-data/3.1/enums/governance-domain.json +1 -1
  613. package/dist/lib/schemas-data/3.1/enums/governance-mode.json +1 -1
  614. package/dist/lib/schemas-data/3.1/enums/governance-phase.json +1 -1
  615. package/dist/lib/schemas-data/3.1/enums/history-entry-type.json +1 -1
  616. package/dist/lib/schemas-data/3.1/enums/http-method.json +1 -1
  617. package/dist/lib/schemas-data/3.1/enums/identifier-types.json +1 -1
  618. package/dist/lib/schemas-data/3.1/enums/impairment-offline-state.json +1 -1
  619. package/dist/lib/schemas-data/3.1/enums/impairment-reason-code.json +1 -1
  620. package/dist/lib/schemas-data/3.1/enums/installment-status.json +1 -1
  621. package/dist/lib/schemas-data/3.1/enums/javascript-module-type.json +1 -1
  622. package/dist/lib/schemas-data/3.1/enums/landing-page-requirement.json +1 -1
  623. package/dist/lib/schemas-data/3.1/enums/legacy-postal-system.json +1 -1
  624. package/dist/lib/schemas-data/3.1/enums/lift-dimension.json +1 -1
  625. package/dist/lib/schemas-data/3.1/enums/logo-slot.json +1 -1
  626. package/dist/lib/schemas-data/3.1/enums/makegood-remedy.json +1 -1
  627. package/dist/lib/schemas-data/3.1/enums/markdown-flavor.json +1 -1
  628. package/dist/lib/schemas-data/3.1/enums/match-id-type.json +1 -1
  629. package/dist/lib/schemas-data/3.1/enums/match-type.json +1 -1
  630. package/dist/lib/schemas-data/3.1/enums/media-buy-action-mode.json +1 -1
  631. package/dist/lib/schemas-data/3.1/enums/media-buy-health.json +1 -1
  632. package/dist/lib/schemas-data/3.1/enums/media-buy-status.json +1 -1
  633. package/dist/lib/schemas-data/3.1/enums/media-buy-valid-action.json +1 -1
  634. package/dist/lib/schemas-data/3.1/enums/metric-scope.json +1 -1
  635. package/dist/lib/schemas-data/3.1/enums/metric-type.json +1 -1
  636. package/dist/lib/schemas-data/3.1/enums/metro-system.json +1 -1
  637. package/dist/lib/schemas-data/3.1/enums/moov-atom-position.json +1 -1
  638. package/dist/lib/schemas-data/3.1/enums/notification-type.json +1 -1
  639. package/dist/lib/schemas-data/3.1/enums/offering-availability-status.json +1 -1
  640. package/dist/lib/schemas-data/3.1/enums/outcome-type.json +1 -1
  641. package/dist/lib/schemas-data/3.1/enums/pacing.json +1 -1
  642. package/dist/lib/schemas-data/3.1/enums/payment-terms.json +1 -1
  643. package/dist/lib/schemas-data/3.1/enums/performance-standard-metric.json +1 -1
  644. package/dist/lib/schemas-data/3.1/enums/policy-category.json +1 -1
  645. package/dist/lib/schemas-data/3.1/enums/policy-enforcement.json +1 -1
  646. package/dist/lib/schemas-data/3.1/enums/postal-system.json +1 -1
  647. package/dist/lib/schemas-data/3.1/enums/preview-output-format.json +1 -1
  648. package/dist/lib/schemas-data/3.1/enums/pricing-model.json +1 -1
  649. package/dist/lib/schemas-data/3.1/enums/production-quality.json +1 -1
  650. package/dist/lib/schemas-data/3.1/enums/property-type.json +1 -1
  651. package/dist/lib/schemas-data/3.1/enums/proposal-status.json +1 -1
  652. package/dist/lib/schemas-data/3.1/enums/publisher-identifier-types.json +1 -1
  653. package/dist/lib/schemas-data/3.1/enums/purchase-type.json +1 -1
  654. package/dist/lib/schemas-data/3.1/enums/reach-unit.json +1 -1
  655. package/dist/lib/schemas-data/3.1/enums/reporting-frequency.json +1 -1
  656. package/dist/lib/schemas-data/3.1/enums/response-type.json +1 -1
  657. package/dist/lib/schemas-data/3.1/enums/restricted-attribute.json +1 -1
  658. package/dist/lib/schemas-data/3.1/enums/right-type.json +1 -1
  659. package/dist/lib/schemas-data/3.1/enums/right-use.json +1 -1
  660. package/dist/lib/schemas-data/3.1/enums/rights-billing-period.json +1 -1
  661. package/dist/lib/schemas-data/3.1/enums/scan-type.json +1 -1
  662. package/dist/lib/schemas-data/3.1/enums/si-session-status.json +1 -1
  663. package/dist/lib/schemas-data/3.1/enums/signal-catalog-type.json +1 -1
  664. package/dist/lib/schemas-data/3.1/enums/signal-source.json +1 -1
  665. package/dist/lib/schemas-data/3.1/enums/signal-value-type.json +1 -1
  666. package/dist/lib/schemas-data/3.1/enums/snapshot-unavailable-reason.json +1 -1
  667. package/dist/lib/schemas-data/3.1/enums/social-placement-surface.json +1 -1
  668. package/dist/lib/schemas-data/3.1/enums/sort-direction.json +1 -1
  669. package/dist/lib/schemas-data/3.1/enums/sort-metric.json +1 -1
  670. package/dist/lib/schemas-data/3.1/enums/special-category.json +1 -1
  671. package/dist/lib/schemas-data/3.1/enums/specialism.json +1 -1
  672. package/dist/lib/schemas-data/3.1/enums/sponsored-placement-type.json +1 -1
  673. package/dist/lib/schemas-data/3.1/enums/talent-role.json +1 -1
  674. package/dist/lib/schemas-data/3.1/enums/task-status.json +1 -1
  675. package/dist/lib/schemas-data/3.1/enums/task-type.json +1 -1
  676. package/dist/lib/schemas-data/3.1/enums/transport-mode.json +1 -1
  677. package/dist/lib/schemas-data/3.1/enums/travel-time-unit.json +1 -1
  678. package/dist/lib/schemas-data/3.1/enums/uid-type.json +1 -1
  679. package/dist/lib/schemas-data/3.1/enums/universal-macro.json +1 -1
  680. package/dist/lib/schemas-data/3.1/enums/update-frequency.json +1 -1
  681. package/dist/lib/schemas-data/3.1/enums/url-asset-type.json +1 -1
  682. package/dist/lib/schemas-data/3.1/enums/validation-mode.json +1 -1
  683. package/dist/lib/schemas-data/3.1/enums/vast-tracking-event.json +1 -1
  684. package/dist/lib/schemas-data/3.1/enums/vast-version.json +1 -1
  685. package/dist/lib/schemas-data/3.1/enums/video-placement-type.json +1 -1
  686. package/dist/lib/schemas-data/3.1/enums/viewability-standard.json +1 -1
  687. package/dist/lib/schemas-data/3.1/enums/watermark-media-type.json +1 -1
  688. package/dist/lib/schemas-data/3.1/enums/wcag-level.json +1 -1
  689. package/dist/lib/schemas-data/3.1/enums/webhook-response-type.json +1 -1
  690. package/dist/lib/schemas-data/3.1/enums/webhook-security-method.json +1 -1
  691. package/dist/lib/schemas-data/3.1/error-details/account-setup-required.json +1 -1
  692. package/dist/lib/schemas-data/3.1/error-details/action-not-allowed.json +4 -4
  693. package/dist/lib/schemas-data/3.1/error-details/agent-permission-denied.json +1 -1
  694. package/dist/lib/schemas-data/3.1/error-details/audience-too-small.json +1 -1
  695. package/dist/lib/schemas-data/3.1/error-details/authorization-required.json +3 -3
  696. package/dist/lib/schemas-data/3.1/error-details/billing-not-permitted-for-agent.json +3 -3
  697. package/dist/lib/schemas-data/3.1/error-details/billing-not-supported.json +2 -2
  698. package/dist/lib/schemas-data/3.1/error-details/budget-too-low.json +1 -1
  699. package/dist/lib/schemas-data/3.1/error-details/conflict.json +1 -1
  700. package/dist/lib/schemas-data/3.1/error-details/creative-rejected.json +1 -1
  701. package/dist/lib/schemas-data/3.1/error-details/policy-violation.json +1 -1
  702. package/dist/lib/schemas-data/3.1/error-details/rate-limited.json +1 -1
  703. package/dist/lib/schemas-data/3.1/error-details/stale-response.json +1 -1
  704. package/dist/lib/schemas-data/3.1/error-details/vendor-error-codes.json +1 -1
  705. package/dist/lib/schemas-data/3.1/error-details/version-unsupported.json +2 -2
  706. package/dist/lib/schemas-data/3.1/extensions/extension-meta.json +1 -1
  707. package/dist/lib/schemas-data/3.1/extensions/index.json +2 -2
  708. package/dist/lib/schemas-data/3.1/formats/canonical/_base.json +5 -5
  709. package/dist/lib/schemas-data/3.1/formats/canonical/agent_placement.json +2 -2
  710. package/dist/lib/schemas-data/3.1/formats/canonical/audio_daast.json +2 -2
  711. package/dist/lib/schemas-data/3.1/formats/canonical/audio_hosted.json +2 -2
  712. package/dist/lib/schemas-data/3.1/formats/canonical/display_tag.json +2 -2
  713. package/dist/lib/schemas-data/3.1/formats/canonical/html5.json +2 -2
  714. package/dist/lib/schemas-data/3.1/formats/canonical/image.json +2 -2
  715. package/dist/lib/schemas-data/3.1/formats/canonical/image_carousel.json +2 -2
  716. package/dist/lib/schemas-data/3.1/formats/canonical/native_in_feed.json +2 -2
  717. package/dist/lib/schemas-data/3.1/formats/canonical/responsive_creative.json +2 -2
  718. package/dist/lib/schemas-data/3.1/formats/canonical/sponsored_placement.json +2 -2
  719. package/dist/lib/schemas-data/3.1/formats/canonical/video_hosted.json +2 -2
  720. package/dist/lib/schemas-data/3.1/formats/canonical/video_vast.json +2 -2
  721. package/dist/lib/schemas-data/3.1/governance/attribute-definition.json +1 -1
  722. package/dist/lib/schemas-data/3.1/governance/audience-constraints.json +3 -3
  723. package/dist/lib/schemas-data/3.1/governance/check-governance-request.json +8 -8
  724. package/dist/lib/schemas-data/3.1/governance/check-governance-response.json +7 -7
  725. package/dist/lib/schemas-data/3.1/governance/get-plan-audit-logs-request.json +5 -5
  726. package/dist/lib/schemas-data/3.1/governance/get-plan-audit-logs-response.json +11 -11
  727. package/dist/lib/schemas-data/3.1/governance/policy-category-definition.json +2 -2
  728. package/dist/lib/schemas-data/3.1/governance/policy-entry.json +6 -6
  729. package/dist/lib/schemas-data/3.1/governance/policy-ref.json +1 -1
  730. package/dist/lib/schemas-data/3.1/governance/report-plan-outcome-request.json +7 -7
  731. package/dist/lib/schemas-data/3.1/governance/report-plan-outcome-response.json +5 -5
  732. package/dist/lib/schemas-data/3.1/governance/sync-plans-request.json +14 -14
  733. package/dist/lib/schemas-data/3.1/governance/sync-plans-response.json +6 -6
  734. package/dist/lib/schemas-data/3.1/index.json +443 -443
  735. package/dist/lib/schemas-data/3.1/manifest.json +3 -3
  736. package/dist/lib/schemas-data/3.1/manifest.schema.json +1 -1
  737. package/dist/lib/schemas-data/3.1/media-buy/build-creative-async-response-input-required.json +4 -4
  738. package/dist/lib/schemas-data/3.1/media-buy/build-creative-async-response-submitted.json +4 -4
  739. package/dist/lib/schemas-data/3.1/media-buy/build-creative-async-response-working.json +3 -3
  740. package/dist/lib/schemas-data/3.1/media-buy/build-creative-request.json +16 -16
  741. package/dist/lib/schemas-data/3.1/media-buy/build-creative-response.json +35 -35
  742. package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-async-response-input-required.json +4 -4
  743. package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-async-response-submitted.json +4 -4
  744. package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-async-response-working.json +3 -3
  745. package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-request.json +13 -13
  746. package/dist/lib/schemas-data/3.1/media-buy/create-media-buy-response.json +19 -19
  747. package/dist/lib/schemas-data/3.1/media-buy/get-media-buy-delivery-request.json +23 -23
  748. package/dist/lib/schemas-data/3.1/media-buy/get-media-buy-delivery-response.json +27 -27
  749. package/dist/lib/schemas-data/3.1/media-buy/get-media-buys-request.json +8 -8
  750. package/dist/lib/schemas-data/3.1/media-buy/get-media-buys-response.json +30 -30
  751. package/dist/lib/schemas-data/3.1/media-buy/get-products-async-response-input-required.json +4 -4
  752. package/dist/lib/schemas-data/3.1/media-buy/get-products-async-response-submitted.json +4 -4
  753. package/dist/lib/schemas-data/3.1/media-buy/get-products-async-response-working.json +3 -3
  754. package/dist/lib/schemas-data/3.1/media-buy/get-products-request.json +13 -13
  755. package/dist/lib/schemas-data/3.1/media-buy/get-products-response.json +10 -10
  756. package/dist/lib/schemas-data/3.1/media-buy/list-creative-formats-request.json +13 -13
  757. package/dist/lib/schemas-data/3.1/media-buy/list-creative-formats-response.json +9 -9
  758. package/dist/lib/schemas-data/3.1/media-buy/log-event-request.json +5 -5
  759. package/dist/lib/schemas-data/3.1/media-buy/log-event-response.json +8 -8
  760. package/dist/lib/schemas-data/3.1/media-buy/media-buy-delivery-webhook-result.json +9 -9
  761. package/dist/lib/schemas-data/3.1/media-buy/package-request.json +23 -23
  762. package/dist/lib/schemas-data/3.1/media-buy/package-update.json +13 -13
  763. package/dist/lib/schemas-data/3.1/media-buy/provide-performance-feedback-request.json +7 -7
  764. package/dist/lib/schemas-data/3.1/media-buy/provide-performance-feedback-response.json +8 -8
  765. package/dist/lib/schemas-data/3.1/media-buy/sync-audiences-request.json +8 -8
  766. package/dist/lib/schemas-data/3.1/media-buy/sync-audiences-response.json +14 -14
  767. package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-async-response-input-required.json +3 -3
  768. package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-async-response-submitted.json +4 -4
  769. package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-async-response-working.json +3 -3
  770. package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-request.json +8 -8
  771. package/dist/lib/schemas-data/3.1/media-buy/sync-catalogs-response.json +14 -14
  772. package/dist/lib/schemas-data/3.1/media-buy/sync-event-sources-request.json +8 -8
  773. package/dist/lib/schemas-data/3.1/media-buy/sync-event-sources-response.json +14 -14
  774. package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-async-response-input-required.json +3 -3
  775. package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-async-response-submitted.json +4 -4
  776. package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-async-response-working.json +3 -3
  777. package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-request.json +11 -11
  778. package/dist/lib/schemas-data/3.1/media-buy/update-media-buy-response.json +17 -17
  779. package/dist/lib/schemas-data/3.1/pricing-options/cpa-option.json +4 -4
  780. package/dist/lib/schemas-data/3.1/pricing-options/cpc-option.json +4 -4
  781. package/dist/lib/schemas-data/3.1/pricing-options/cpcv-option.json +4 -4
  782. package/dist/lib/schemas-data/3.1/pricing-options/cpm-option.json +4 -4
  783. package/dist/lib/schemas-data/3.1/pricing-options/cpp-option.json +5 -5
  784. package/dist/lib/schemas-data/3.1/pricing-options/cpv-option.json +4 -4
  785. package/dist/lib/schemas-data/3.1/pricing-options/flat-rate-option.json +4 -4
  786. package/dist/lib/schemas-data/3.1/pricing-options/price-breakdown.json +2 -2
  787. package/dist/lib/schemas-data/3.1/pricing-options/price-guidance.json +1 -1
  788. package/dist/lib/schemas-data/3.1/pricing-options/time-option.json +4 -4
  789. package/dist/lib/schemas-data/3.1/pricing-options/vcpm-option.json +4 -4
  790. package/dist/lib/schemas-data/3.1/property/authorization-result.json +1 -1
  791. package/dist/lib/schemas-data/3.1/property/base-property-source.json +4 -4
  792. package/dist/lib/schemas-data/3.1/property/create-property-list-request.json +8 -8
  793. package/dist/lib/schemas-data/3.1/property/create-property-list-response.json +6 -6
  794. package/dist/lib/schemas-data/3.1/property/delete-property-list-request.json +5 -5
  795. package/dist/lib/schemas-data/3.1/property/delete-property-list-response.json +5 -5
  796. package/dist/lib/schemas-data/3.1/property/delivery-record.json +3 -3
  797. package/dist/lib/schemas-data/3.1/property/get-property-list-request.json +5 -5
  798. package/dist/lib/schemas-data/3.1/property/get-property-list-response.json +9 -9
  799. package/dist/lib/schemas-data/3.1/property/list-property-lists-request.json +6 -6
  800. package/dist/lib/schemas-data/3.1/property/list-property-lists-response.json +7 -7
  801. package/dist/lib/schemas-data/3.1/property/property-error.json +2 -2
  802. package/dist/lib/schemas-data/3.1/property/property-feature-definition.json +2 -2
  803. package/dist/lib/schemas-data/3.1/property/property-feature-result.json +4 -4
  804. package/dist/lib/schemas-data/3.1/property/property-feature-value.json +2 -2
  805. package/dist/lib/schemas-data/3.1/property/property-feature.json +1 -1
  806. package/dist/lib/schemas-data/3.1/property/property-list-changed-webhook.json +2 -2
  807. package/dist/lib/schemas-data/3.1/property/property-list-filters.json +5 -5
  808. package/dist/lib/schemas-data/3.1/property/property-list.json +6 -6
  809. package/dist/lib/schemas-data/3.1/property/update-property-list-request.json +8 -8
  810. package/dist/lib/schemas-data/3.1/property/update-property-list-response.json +6 -6
  811. package/dist/lib/schemas-data/3.1/property/validate-property-delivery-request.json +6 -6
  812. package/dist/lib/schemas-data/3.1/property/validate-property-delivery-response.json +6 -6
  813. package/dist/lib/schemas-data/3.1/property/validation-result.json +5 -5
  814. package/dist/lib/schemas-data/3.1/protocol/get-adcp-capabilities-request.json +4 -4
  815. package/dist/lib/schemas-data/3.1/protocol/get-adcp-capabilities-response.json +33 -33
  816. package/dist/lib/schemas-data/3.1/protocol/get-task-status-request.json +5 -5
  817. package/dist/lib/schemas-data/3.1/protocol/get-task-status-response.json +10 -10
  818. package/dist/lib/schemas-data/3.1/protocol/list-tasks-request.json +13 -13
  819. package/dist/lib/schemas-data/3.1/protocol/list-tasks-response.json +8 -8
  820. package/dist/lib/schemas-data/3.1/registries/v1-canonical-mapping.json +5 -5
  821. package/dist/lib/schemas-data/3.1/signals/activate-signal-request.json +6 -6
  822. package/dist/lib/schemas-data/3.1/signals/activate-signal-response.json +9 -9
  823. package/dist/lib/schemas-data/3.1/signals/get-signals-async-response-submitted.json +4 -4
  824. package/dist/lib/schemas-data/3.1/signals/get-signals-async-response-working.json +3 -3
  825. package/dist/lib/schemas-data/3.1/signals/get-signals-request.json +11 -11
  826. package/dist/lib/schemas-data/3.1/signals/get-signals-response.json +17 -17
  827. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-capabilities.json +1 -1
  828. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-context-use.json +1 -1
  829. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-get-offering-request.json +4 -4
  830. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-get-offering-response.json +9 -9
  831. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-identity.json +1 -1
  832. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-initiate-session-request.json +7 -7
  833. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-initiate-session-response.json +10 -10
  834. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-send-message-request.json +5 -5
  835. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-send-message-response.json +10 -10
  836. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-sponsored-context-receipt.json +4 -4
  837. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-sponsored-context.json +4 -4
  838. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-terminate-session-request.json +4 -4
  839. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-terminate-session-response.json +7 -7
  840. package/dist/lib/schemas-data/3.1/sponsored-intelligence/si-ui-element.json +1 -1
  841. package/dist/lib/schemas-data/3.1/trusted-match/available-package.json +4 -4
  842. package/dist/lib/schemas-data/3.1/trusted-match/context-match-request.json +5 -5
  843. package/dist/lib/schemas-data/3.1/trusted-match/context-match-response.json +4 -4
  844. package/dist/lib/schemas-data/3.1/trusted-match/error.json +1 -1
  845. package/dist/lib/schemas-data/3.1/trusted-match/identity-match-request.json +4 -4
  846. package/dist/lib/schemas-data/3.1/trusted-match/identity-match-response.json +4 -4
  847. package/dist/lib/schemas-data/3.1/trusted-match/offer-price.json +1 -1
  848. package/dist/lib/schemas-data/3.1/trusted-match/offer.json +5 -5
  849. package/dist/lib/schemas-data/3.1/trusted-match/provider-identity-match-response.json +4 -4
  850. package/dist/lib/schemas-data/3.1/trusted-match/provider-registration.json +2 -2
  851. package/dist/lib/schemas-data/3.1/trusted-match/publisher-tmpx-config.json +1 -1
  852. package/dist/lib/schemas-data/3.1/trusted-match/tmpx-chunk.json +1 -1
  853. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  854. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.js.map +1 -1
  855. package/dist/lib/server/decisioning/runtime/entity-hydration.generated.mjs.map +1 -1
  856. package/dist/lib/server/wire-spec-fields.generated.d.mts +29 -29
  857. package/dist/lib/server/wire-spec-fields.generated.d.ts +29 -29
  858. package/dist/lib/server/wire-spec-fields.generated.js +29 -29
  859. package/dist/lib/server/wire-spec-fields.generated.js.map +1 -1
  860. package/dist/lib/server/wire-spec-fields.generated.mjs +29 -29
  861. package/dist/lib/server/wire-spec-fields.generated.mjs.map +1 -1
  862. package/dist/lib/testing/index.d.mts +1 -1
  863. package/dist/lib/testing/index.d.ts +1 -1
  864. package/dist/lib/testing/index.d.ts.map +1 -1
  865. package/dist/lib/testing/index.js +12 -0
  866. package/dist/lib/testing/index.js.map +1 -1
  867. package/dist/lib/testing/index.mjs +12 -0
  868. package/dist/lib/testing/index.mjs.map +1 -1
  869. package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.mts +6 -0
  870. package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts +6 -0
  871. package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts.map +1 -1
  872. package/dist/lib/testing/storyboard/canonical-format-satisfaction.js +11 -0
  873. package/dist/lib/testing/storyboard/canonical-format-satisfaction.js.map +1 -1
  874. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs +10 -0
  875. package/dist/lib/testing/storyboard/canonical-format-satisfaction.mjs.map +1 -1
  876. package/dist/lib/testing/storyboard/creative-assets.d.mts +5 -0
  877. package/dist/lib/testing/storyboard/creative-assets.d.ts +6 -0
  878. package/dist/lib/testing/storyboard/creative-assets.d.ts.map +1 -0
  879. package/dist/lib/testing/storyboard/creative-assets.js +180 -0
  880. package/dist/lib/testing/storyboard/creative-assets.js.map +1 -0
  881. package/dist/lib/testing/storyboard/creative-assets.mjs +154 -0
  882. package/dist/lib/testing/storyboard/creative-assets.mjs.map +1 -0
  883. package/dist/lib/testing/storyboard/fixture-resolution.d.mts +37 -0
  884. package/dist/lib/testing/storyboard/fixture-resolution.d.ts +38 -0
  885. package/dist/lib/testing/storyboard/fixture-resolution.d.ts.map +1 -0
  886. package/dist/lib/testing/storyboard/fixture-resolution.js +424 -0
  887. package/dist/lib/testing/storyboard/fixture-resolution.js.map +1 -0
  888. package/dist/lib/testing/storyboard/fixture-resolution.mjs +395 -0
  889. package/dist/lib/testing/storyboard/fixture-resolution.mjs.map +1 -0
  890. package/dist/lib/testing/storyboard/index.d.mts +2 -1
  891. package/dist/lib/testing/storyboard/index.d.ts +2 -1
  892. package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
  893. package/dist/lib/testing/storyboard/index.js +13 -0
  894. package/dist/lib/testing/storyboard/index.js.map +1 -1
  895. package/dist/lib/testing/storyboard/index.mjs +14 -0
  896. package/dist/lib/testing/storyboard/index.mjs.map +1 -1
  897. package/dist/lib/testing/storyboard/junit.js +14 -1
  898. package/dist/lib/testing/storyboard/junit.js.map +1 -1
  899. package/dist/lib/testing/storyboard/junit.mjs +14 -1
  900. package/dist/lib/testing/storyboard/junit.mjs.map +1 -1
  901. package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
  902. package/dist/lib/testing/storyboard/loader.js +2 -0
  903. package/dist/lib/testing/storyboard/loader.js.map +1 -1
  904. package/dist/lib/testing/storyboard/loader.mjs +2 -0
  905. package/dist/lib/testing/storyboard/loader.mjs.map +1 -1
  906. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  907. package/dist/lib/testing/storyboard/runner.js +170 -12
  908. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  909. package/dist/lib/testing/storyboard/runner.mjs +175 -13
  910. package/dist/lib/testing/storyboard/runner.mjs.map +1 -1
  911. package/dist/lib/testing/storyboard/seeding.d.mts +10 -3
  912. package/dist/lib/testing/storyboard/seeding.d.ts +10 -3
  913. package/dist/lib/testing/storyboard/seeding.d.ts.map +1 -1
  914. package/dist/lib/testing/storyboard/seeding.js +550 -2
  915. package/dist/lib/testing/storyboard/seeding.js.map +1 -1
  916. package/dist/lib/testing/storyboard/seeding.mjs +555 -2
  917. package/dist/lib/testing/storyboard/seeding.mjs.map +1 -1
  918. package/dist/lib/testing/storyboard/types.d.mts +106 -0
  919. package/dist/lib/testing/storyboard/types.d.ts +106 -0
  920. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  921. package/dist/lib/testing/storyboard/types.js +1 -0
  922. package/dist/lib/testing/storyboard/types.js.map +1 -1
  923. package/dist/lib/testing/storyboard/types.mjs +1 -0
  924. package/dist/lib/testing/storyboard/types.mjs.map +1 -1
  925. package/dist/lib/testing/stubs/governance-agent-stub.d.ts.map +1 -1
  926. package/dist/lib/testing/stubs/governance-agent-stub.js +4 -1
  927. package/dist/lib/testing/stubs/governance-agent-stub.js.map +1 -1
  928. package/dist/lib/testing/stubs/governance-agent-stub.mjs +4 -1
  929. package/dist/lib/testing/stubs/governance-agent-stub.mjs.map +1 -1
  930. package/dist/lib/types/core.generated.d.mts +3 -1
  931. package/dist/lib/types/core.generated.d.ts +3 -1
  932. package/dist/lib/types/core.generated.d.ts.map +1 -1
  933. package/dist/lib/types/core.generated.js.map +1 -1
  934. package/dist/lib/types/inline-enums.generated.d.mts +2 -0
  935. package/dist/lib/types/inline-enums.generated.d.ts +2 -0
  936. package/dist/lib/types/inline-enums.generated.d.ts.map +1 -1
  937. package/dist/lib/types/inline-enums.generated.js +3 -0
  938. package/dist/lib/types/inline-enums.generated.js.map +1 -1
  939. package/dist/lib/types/inline-enums.generated.mjs +2 -0
  940. package/dist/lib/types/inline-enums.generated.mjs.map +1 -1
  941. package/dist/lib/types/manifest.generated.d.mts +3 -3
  942. package/dist/lib/types/manifest.generated.d.ts +3 -3
  943. package/dist/lib/types/manifest.generated.js.map +1 -1
  944. package/dist/lib/types/manifest.generated.mjs.map +1 -1
  945. package/dist/lib/types/per-tool-index.json +1 -1
  946. package/dist/lib/validation/schema-loader.d.mts +16 -0
  947. package/dist/lib/validation/schema-loader.d.ts +16 -0
  948. package/dist/lib/validation/schema-loader.d.ts.map +1 -1
  949. package/dist/lib/validation/schema-loader.js +116 -0
  950. package/dist/lib/validation/schema-loader.js.map +1 -1
  951. package/dist/lib/validation/schema-loader.mjs +115 -0
  952. package/dist/lib/validation/schema-loader.mjs.map +1 -1
  953. package/dist/lib/version.d.mts +7 -7
  954. package/dist/lib/version.d.ts +7 -7
  955. package/dist/lib/version.d.ts.map +1 -1
  956. package/dist/lib/version.js +7 -6
  957. package/dist/lib/version.js.map +1 -1
  958. package/dist/lib/version.mjs +7 -6
  959. package/dist/lib/version.mjs.map +1 -1
  960. package/docs/llms.txt +3 -3
  961. package/package.json +2 -2
  962. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/brand/index.yaml +0 -0
  963. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -0
  964. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/brand/scenarios/single_side_trust_extension.yaml +0 -0
  965. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/index.yaml +0 -0
  966. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/billing_out_of_band.yaml +0 -0
  967. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/canonical_supported_formats.yaml +0 -0
  968. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
  969. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/evaluator_auth.yaml +0 -0
  970. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/creative/scenarios/native_in_feed.yaml +0 -0
  971. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/governance/index.yaml +0 -0
  972. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/index.yaml +0 -0
  973. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -0
  974. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/available_actions.yaml +0 -0
  975. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
  976. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/canonical_formats.yaml +0 -0
  977. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
  978. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
  979. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  980. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/creative_reception.yaml +0 -0
  981. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/delivery_reporting.yaml +0 -0
  982. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/dependency_impairment.yaml +0 -0
  983. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
  984. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
  985. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -0
  986. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
  987. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/get_products_async.yaml +0 -0
  988. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_approved.yaml +0 -0
  989. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_conditions.yaml +0 -0
  990. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_denied.yaml +0 -0
  991. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  992. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
  993. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/invalid_transitions.yaml +0 -0
  994. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  995. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
  996. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/measurement_accountability.yaml +0 -0
  997. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  998. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
  999. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  1000. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
  1001. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -0
  1002. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
  1003. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
  1004. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -0
  1005. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/proposal_finalize.yaml +0 -0
  1006. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
  1007. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
  1008. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
  1009. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -0
  1010. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
  1011. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -0
  1012. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
  1013. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/refine_products.yaml +0 -0
  1014. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
  1015. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
  1016. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
  1017. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/media-buy/state-machine.yaml +0 -0
  1018. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/signals/index.yaml +0 -0
  1019. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/signals/scenarios/get_signals_async.yaml +0 -0
  1020. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/sponsored-intelligence/index.yaml +0 -0
  1021. /package/compliance/cache/{3.1.10 → 3.1.11}/domains/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
  1022. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/brand/index.yaml +0 -0
  1023. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -0
  1024. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -0
  1025. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/index.yaml +0 -0
  1026. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/billing_out_of_band.yaml +0 -0
  1027. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/canonical_supported_formats.yaml +0 -0
  1028. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
  1029. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/evaluator_auth.yaml +0 -0
  1030. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/creative/scenarios/native_in_feed.yaml +0 -0
  1031. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/governance/index.yaml +0 -0
  1032. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/index.yaml +0 -0
  1033. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -0
  1034. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/available_actions.yaml +0 -0
  1035. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
  1036. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/canonical_formats.yaml +0 -0
  1037. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
  1038. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
  1039. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  1040. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/creative_reception.yaml +0 -0
  1041. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -0
  1042. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -0
  1043. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
  1044. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
  1045. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -0
  1046. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
  1047. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/get_products_async.yaml +0 -0
  1048. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_approved.yaml +0 -0
  1049. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_conditions.yaml +0 -0
  1050. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_denied.yaml +0 -0
  1051. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  1052. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
  1053. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -0
  1054. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  1055. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
  1056. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -0
  1057. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  1058. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
  1059. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  1060. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
  1061. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -0
  1062. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
  1063. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
  1064. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -0
  1065. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -0
  1066. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
  1067. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
  1068. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
  1069. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -0
  1070. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
  1071. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -0
  1072. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
  1073. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/refine_products.yaml +0 -0
  1074. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
  1075. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
  1076. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
  1077. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/media-buy/state-machine.yaml +0 -0
  1078. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/signals/index.yaml +0 -0
  1079. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/signals/scenarios/get_signals_async.yaml +0 -0
  1080. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/sponsored-intelligence/index.yaml +0 -0
  1081. /package/compliance/cache/{3.1.10 → 3.1.11}/protocols/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
  1082. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/audience-sync/index.yaml +0 -0
  1083. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/brand-rights/index.yaml +0 -0
  1084. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -0
  1085. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/collection-lists/index.yaml +0 -0
  1086. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/content-standards/index.yaml +0 -0
  1087. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-ad-server/index.yaml +0 -0
  1088. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-generative/generative-seller.yaml +0 -0
  1089. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-generative/index.yaml +0 -0
  1090. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-template/index.yaml +0 -0
  1091. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/creative-transformers/index.yaml +0 -0
  1092. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-aware-seller/index.yaml +0 -0
  1093. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -0
  1094. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-delivery-monitor/index.yaml +0 -0
  1095. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-spend-authority/denied.yaml +0 -0
  1096. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/governance-spend-authority/index.yaml +0 -0
  1097. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/property-lists/index.yaml +0 -0
  1098. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-broadcast-tv/index.yaml +0 -0
  1099. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-catalog-driven/index.yaml +0 -0
  1100. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-guaranteed/index.yaml +0 -0
  1101. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-non-guaranteed/index.yaml +0 -0
  1102. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-proposal-mode/index.yaml +0 -0
  1103. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sales-social/index.yaml +0 -0
  1104. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/signal-marketplace/index.yaml +0 -0
  1105. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -0
  1106. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/signal-owned/index.yaml +0 -0
  1107. /package/compliance/cache/{3.1.10 → 3.1.11}/specialisms/sponsored-intelligence/index.yaml +0 -0
  1108. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/acme-outdoor-live.yaml +0 -0
  1109. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/acme-outdoor.yaml +0 -0
  1110. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/billing-gate-runner.yaml +0 -0
  1111. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/bistro-oranje.yaml +0 -0
  1112. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/distributed-brand-runner.yaml +0 -0
  1113. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/nova-motors.yaml +0 -0
  1114. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/osei-natural.yaml +0 -0
  1115. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/parallel-dispatch-runner.yaml +0 -0
  1116. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/rate-limit-trip-runner.yaml +0 -0
  1117. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/signed-requests-runner.yaml +0 -0
  1118. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/single-side-trust-runner.yaml +0 -0
  1119. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/substitution-observer-runner.yaml +0 -0
  1120. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/summit-foods.yaml +0 -0
  1121. /package/compliance/cache/{3.1.10 → 3.1.11}/test-kits/webhook-receiver-runner.yaml +0 -0
  1122. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/catalog-macro-substitution.json +0 -0
  1123. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/001-minimal-plan.json +0 -0
  1124. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/002-full-plan.json +0 -0
  1125. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -0
  1126. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/004a-human-review-omitted.json +0 -0
  1127. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -0
  1128. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -0
  1129. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -0
  1130. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -0
  1131. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -0
  1132. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/007-unicode-objectives.json +0 -0
  1133. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -0
  1134. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/README.md +0 -0
  1135. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/canonicalization.json +0 -0
  1136. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/keys.json +0 -0
  1137. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/001-no-signature-header.json +0 -0
  1138. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/002-wrong-tag.json +0 -0
  1139. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/003-expired-signature.json +0 -0
  1140. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/004-window-too-long.json +0 -0
  1141. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -0
  1142. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -0
  1143. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -0
  1144. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -0
  1145. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -0
  1146. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -0
  1147. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/011-malformed-header.json +0 -0
  1148. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -0
  1149. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/013-expires-le-created.json +0 -0
  1150. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -0
  1151. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/015-signature-invalid.json +0 -0
  1152. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -0
  1153. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/017-key-revoked.json +0 -0
  1154. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -0
  1155. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -0
  1156. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/020-rate-abuse.json +0 -0
  1157. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -0
  1158. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -0
  1159. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -0
  1160. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -0
  1161. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -0
  1162. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -0
  1163. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -0
  1164. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -0
  1165. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/001-basic-post.json +0 -0
  1166. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -0
  1167. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/003-es256-post.json +0 -0
  1168. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -0
  1169. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -0
  1170. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -0
  1171. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -0
  1172. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -0
  1173. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -0
  1174. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -0
  1175. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -0
  1176. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -0
  1177. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-receiver-envelope.json +0 -0
  1178. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/README.md +0 -0
  1179. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/keys.json +0 -0
  1180. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -0
  1181. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -0
  1182. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -0
  1183. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -0
  1184. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -0
  1185. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -0
  1186. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -0
  1187. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -0
  1188. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -0
  1189. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -0
  1190. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -0
  1191. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -0
  1192. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -0
  1193. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -0
  1194. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -0
  1195. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -0
  1196. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -0
  1197. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -0
  1198. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -0
  1199. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -0
  1200. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -0
  1201. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/001-basic-post.json +0 -0
  1202. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/002-es256-post.json +0 -0
  1203. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -0
  1204. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -0
  1205. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -0
  1206. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -0
  1207. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -0
  1208. /package/compliance/cache/{3.1.10 → 3.1.11}/test-vectors/webhook-signing/positive/008-request-signing-key-reuse.json +0 -0
  1209. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/billing-gate-dispatch.yaml +0 -0
  1210. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/canonical-format-validate-input.yaml +0 -0
  1211. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/capability-discovery.yaml +0 -0
  1212. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/collection-lists-pagination-integrity.yaml +0 -0
  1213. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/comply-controller-mode-gate.yaml +0 -0
  1214. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/content-standards-pagination-integrity.yaml +0 -0
  1215. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/deterministic-testing.yaml +0 -0
  1216. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/error-compliance-signals.yaml +0 -0
  1217. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/error-compliance.yaml +0 -0
  1218. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/fictional-entities.yaml +0 -0
  1219. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/get-media-buys-pagination-integrity.yaml +0 -0
  1220. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/get-products-pagination-integrity.yaml +0 -0
  1221. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/get-signals-pagination-integrity.yaml +0 -0
  1222. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/idempotency.yaml +0 -0
  1223. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/notification-config-event-scope.yaml +0 -0
  1224. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/notification-config-lifecycle.yaml +0 -0
  1225. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/notification-config-rejections.yaml +0 -0
  1226. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/pagination-integrity-creative-formats.yaml +0 -0
  1227. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/pagination-integrity-list-accounts.yaml +0 -0
  1228. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/pagination-integrity.yaml +0 -0
  1229. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/property-lists-pagination-integrity.yaml +0 -0
  1230. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/read-tool-idempotency.yaml +0 -0
  1231. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/runner-output-contract.yaml +0 -0
  1232. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/schema-validation-signals.yaml +0 -0
  1233. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/schema-validation.yaml +0 -0
  1234. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/security.yaml +0 -0
  1235. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/signed-requests.yaml +0 -0
  1236. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/stale-response-advisory.yaml +0 -0
  1237. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/v3-envelope-integrity.yaml +0 -0
  1238. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/version-negotiation.yaml +0 -0
  1239. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/webhook-emission.yaml +0 -0
  1240. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/webhook-receiver-envelope.yaml +0 -0
  1241. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-bulk-webhooks.yaml +0 -0
  1242. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-product-webhooks.yaml +0 -0
  1243. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-products.yaml +0 -0
  1244. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-signal-webhooks.yaml +0 -0
  1245. /package/compliance/cache/{3.1.10 → 3.1.11}/universal/wholesale-feed-signals.yaml +0 -0
  1246. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/brand/index.yaml +0 -0
  1247. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/brand/scenarios/distributed_brand_resolution.yaml +0 -0
  1248. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/brand/scenarios/single_side_trust_extension.yaml +0 -0
  1249. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/index.yaml +0 -0
  1250. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/billing_out_of_band.yaml +0 -0
  1251. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/canonical_supported_formats.yaml +0 -0
  1252. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
  1253. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/evaluator_auth.yaml +0 -0
  1254. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/creative/scenarios/native_in_feed.yaml +0 -0
  1255. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/governance/index.yaml +0 -0
  1256. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/index.yaml +0 -0
  1257. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/audience_buy_flow.yaml +0 -0
  1258. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/available_actions.yaml +0 -0
  1259. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
  1260. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/canonical_formats.yaml +0 -0
  1261. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
  1262. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
  1263. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  1264. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/creative_reception.yaml +0 -0
  1265. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/delivery_reporting.yaml +0 -0
  1266. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/dependency_impairment.yaml +0 -0
  1267. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
  1268. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
  1269. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/event_dedup_flow.yaml +0 -0
  1270. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
  1271. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/get_products_async.yaml +0 -0
  1272. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_approved.yaml +0 -0
  1273. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_conditions.yaml +0 -0
  1274. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_denied.yaml +0 -0
  1275. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  1276. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
  1277. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/invalid_transitions.yaml +0 -0
  1278. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  1279. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
  1280. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/measurement_accountability.yaml +0 -0
  1281. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  1282. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
  1283. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  1284. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
  1285. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/performance_buy_flow.yaml +0 -0
  1286. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
  1287. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
  1288. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/product_signal_targeting.yaml +0 -0
  1289. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/proposal_finalize.yaml +0 -0
  1290. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
  1291. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
  1292. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
  1293. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/provenance_enforcement.yaml +0 -0
  1294. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
  1295. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/reach_buy_flow.yaml +0 -0
  1296. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
  1297. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/refine_products.yaml +0 -0
  1298. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
  1299. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
  1300. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
  1301. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/media-buy/state-machine.yaml +0 -0
  1302. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/signals/index.yaml +0 -0
  1303. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/signals/scenarios/get_signals_async.yaml +0 -0
  1304. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/sponsored-intelligence/index.yaml +0 -0
  1305. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/domains/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
  1306. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/brand/index.yaml +0 -0
  1307. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/brand/scenarios/distributed_brand_resolution.yaml +0 -0
  1308. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/brand/scenarios/single_side_trust_extension.yaml +0 -0
  1309. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/index.yaml +0 -0
  1310. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/billing_out_of_band.yaml +0 -0
  1311. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/canonical_supported_formats.yaml +0 -0
  1312. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/creative_lifecycle_webhooks.yaml +0 -0
  1313. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/evaluator_auth.yaml +0 -0
  1314. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/creative/scenarios/native_in_feed.yaml +0 -0
  1315. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/governance/index.yaml +0 -0
  1316. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/index.yaml +0 -0
  1317. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/audience_buy_flow.yaml +0 -0
  1318. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/available_actions.yaml +0 -0
  1319. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/billing_finality_delivery.yaml +0 -0
  1320. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/canonical_formats.yaml +0 -0
  1321. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/clicks_buy_flow.yaml +0 -0
  1322. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/completed_views_buy_flow.yaml +0 -0
  1323. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/create_media_buy_async.yaml +0 -0
  1324. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/creative_reception.yaml +0 -0
  1325. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/delivery_reporting.yaml +0 -0
  1326. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/dependency_impairment.yaml +0 -0
  1327. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/dependency_impairment_audience.yaml +0 -0
  1328. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/dependency_impairment_cardinality.yaml +0 -0
  1329. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/event_dedup_flow.yaml +0 -0
  1330. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/frequency_cap_enforcement.yaml +0 -0
  1331. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/get_products_async.yaml +0 -0
  1332. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_approved.yaml +0 -0
  1333. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_conditions.yaml +0 -0
  1334. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_denied.yaml +0 -0
  1335. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/governance_denied_recovery.yaml +0 -0
  1336. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/inline_creatives_without_sync.yaml +0 -0
  1337. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/invalid_transitions.yaml +0 -0
  1338. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/inventory_list_no_match.yaml +0 -0
  1339. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/inventory_list_targeting.yaml +0 -0
  1340. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/measurement_accountability.yaml +0 -0
  1341. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/measurement_terms_rejected.yaml +0 -0
  1342. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/package_correlation_legacy_fallback.yaml +0 -0
  1343. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/pending_creatives_to_start.yaml +0 -0
  1344. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/per_creative_conversion_attribution.yaml +0 -0
  1345. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/performance_buy_flow.yaml +0 -0
  1346. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/performance_buy_flow_roas.yaml +0 -0
  1347. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/pricing_currency_filter.yaml +0 -0
  1348. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/product_signal_targeting.yaml +0 -0
  1349. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/proposal_finalize.yaml +0 -0
  1350. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/proposal_finalize_asap_timing.yaml +0 -0
  1351. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/proposal_not_found_errors.yaml +0 -0
  1352. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/provenance_audit_observation.yaml +0 -0
  1353. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/provenance_enforcement.yaml +0 -0
  1354. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/provenance_truth_of_claim.yaml +0 -0
  1355. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/reach_buy_flow.yaml +0 -0
  1356. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/refine_finalize_exclusivity.yaml +0 -0
  1357. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/refine_products.yaml +0 -0
  1358. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/vendor_metric_accountability.yaml +0 -0
  1359. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/vendor_metric_catalog_precondition.yaml +0 -0
  1360. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/scenarios/vendor_metric_optimization_flow.yaml +0 -0
  1361. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/media-buy/state-machine.yaml +0 -0
  1362. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/signals/index.yaml +0 -0
  1363. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/signals/scenarios/get_signals_async.yaml +0 -0
  1364. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/sponsored-intelligence/index.yaml +0 -0
  1365. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/protocols/sponsored-intelligence/sponsored-context-accountability.yaml +0 -0
  1366. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/audience-sync/index.yaml +0 -0
  1367. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/brand-rights/index.yaml +0 -0
  1368. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/brand-rights/scenarios/governance_denied.yaml +0 -0
  1369. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/collection-lists/index.yaml +0 -0
  1370. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/content-standards/index.yaml +0 -0
  1371. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-ad-server/index.yaml +0 -0
  1372. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-generative/generative-seller.yaml +0 -0
  1373. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-generative/index.yaml +0 -0
  1374. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-template/index.yaml +0 -0
  1375. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/creative-transformers/index.yaml +0 -0
  1376. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-aware-seller/index.yaml +0 -0
  1377. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-aware-seller/scenarios/governance_multi_agent_rejected.yaml +0 -0
  1378. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-delivery-monitor/index.yaml +0 -0
  1379. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-spend-authority/denied.yaml +0 -0
  1380. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/governance-spend-authority/index.yaml +0 -0
  1381. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/property-lists/index.yaml +0 -0
  1382. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-broadcast-tv/index.yaml +0 -0
  1383. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-catalog-driven/index.yaml +0 -0
  1384. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-guaranteed/index.yaml +0 -0
  1385. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-non-guaranteed/index.yaml +0 -0
  1386. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-proposal-mode/index.yaml +0 -0
  1387. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sales-social/index.yaml +0 -0
  1388. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/signal-marketplace/index.yaml +0 -0
  1389. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/signal-marketplace/scenarios/governance_denied.yaml +0 -0
  1390. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/signal-owned/index.yaml +0 -0
  1391. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/specialisms/sponsored-intelligence/index.yaml +0 -0
  1392. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/acme-outdoor-live.yaml +0 -0
  1393. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/acme-outdoor.yaml +0 -0
  1394. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/billing-gate-runner.yaml +0 -0
  1395. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/bistro-oranje.yaml +0 -0
  1396. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/distributed-brand-runner.yaml +0 -0
  1397. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/nova-motors.yaml +0 -0
  1398. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/osei-natural.yaml +0 -0
  1399. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/parallel-dispatch-runner.yaml +0 -0
  1400. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/rate-limit-trip-runner.yaml +0 -0
  1401. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/signed-requests-runner.yaml +0 -0
  1402. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/single-side-trust-runner.yaml +0 -0
  1403. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/substitution-observer-runner.yaml +0 -0
  1404. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/summit-foods.yaml +0 -0
  1405. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-kits/webhook-receiver-runner.yaml +0 -0
  1406. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/catalog-macro-substitution.json +0 -0
  1407. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/001-minimal-plan.json +0 -0
  1408. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/002-full-plan.json +0 -0
  1409. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/003-bookkeeping-stripped.json +0 -0
  1410. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/004a-human-review-omitted.json +0 -0
  1411. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/004b-human-review-explicit-null.json +0 -0
  1412. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/005a-policy-categories-order-1.json +0 -0
  1413. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/005b-policy-categories-order-2.json +0 -0
  1414. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/006a-ext-trace-v1.json +0 -0
  1415. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/006b-ext-trace-v2.json +0 -0
  1416. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/007-unicode-objectives.json +0 -0
  1417. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/plan-hash/008-numeric-canonicalization.json +0 -0
  1418. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/README.md +0 -0
  1419. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/canonicalization.json +0 -0
  1420. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/keys.json +0 -0
  1421. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/001-no-signature-header.json +0 -0
  1422. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/002-wrong-tag.json +0 -0
  1423. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/003-expired-signature.json +0 -0
  1424. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/004-window-too-long.json +0 -0
  1425. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/005-alg-not-allowed.json +0 -0
  1426. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/006-missing-covered-component.json +0 -0
  1427. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/007-missing-content-digest.json +0 -0
  1428. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/008-unknown-keyid.json +0 -0
  1429. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/009-key-ops-missing-verify.json +0 -0
  1430. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/010-content-digest-mismatch.json +0 -0
  1431. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/011-malformed-header.json +0 -0
  1432. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/012-missing-expires-param.json +0 -0
  1433. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/013-expires-le-created.json +0 -0
  1434. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/014-missing-nonce-param.json +0 -0
  1435. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/015-signature-invalid.json +0 -0
  1436. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/016-replayed-nonce.json +0 -0
  1437. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/017-key-revoked.json +0 -0
  1438. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/018-digest-covered-when-forbidden.json +0 -0
  1439. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/019-signature-without-signature-input.json +0 -0
  1440. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/020-rate-abuse.json +0 -0
  1441. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/021-duplicate-signature-input-label.json +0 -0
  1442. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/022-multi-valued-content-type.json +0 -0
  1443. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/023-multi-valued-content-digest.json +0 -0
  1444. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/024-unquoted-string-param.json +0 -0
  1445. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/025-jwk-alg-crv-mismatch.json +0 -0
  1446. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/026-non-ascii-host.json +0 -0
  1447. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/027-webhook-registration-authentication-unsigned.json +0 -0
  1448. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/negative/028-unsigned-protocol-method-required.json +0 -0
  1449. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/001-basic-post.json +0 -0
  1450. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/002-post-with-content-digest.json +0 -0
  1451. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/003-es256-post.json +0 -0
  1452. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/004-multiple-signature-labels.json +0 -0
  1453. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/005-default-port-stripped.json +0 -0
  1454. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/006-dot-segment-path.json +0 -0
  1455. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/007-query-byte-preserved.json +0 -0
  1456. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/008-percent-encoded-path.json +0 -0
  1457. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/009-percent-encoded-unreserved-decoded.json +0 -0
  1458. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/010-percent-encoded-slash-preserved.json +0 -0
  1459. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/011-ipv6-authority.json +0 -0
  1460. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/request-signing/positive/012-ipv6-authority-default-port-stripped.json +0 -0
  1461. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-receiver-envelope.json +0 -0
  1462. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/README.md +0 -0
  1463. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/keys.json +0 -0
  1464. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/001-wrong-tag.json +0 -0
  1465. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/002-expired-signature.json +0 -0
  1466. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/003-window-too-long.json +0 -0
  1467. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/004-alg-not-allowed.json +0 -0
  1468. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/005-missing-authority-component.json +0 -0
  1469. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/006-missing-content-digest.json +0 -0
  1470. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/007-unknown-keyid.json +0 -0
  1471. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/008-wrong-adcp-use.json +0 -0
  1472. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/009-content-digest-mismatch.json +0 -0
  1473. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/010-malformed-signature-input.json +0 -0
  1474. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/011-signature-without-input.json +0 -0
  1475. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/012-missing-expires-param.json +0 -0
  1476. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/013-expires-le-created.json +0 -0
  1477. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/014-missing-nonce-param.json +0 -0
  1478. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/015-signature-invalid.json +0 -0
  1479. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/016-replayed-nonce.json +0 -0
  1480. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/017-key-revoked.json +0 -0
  1481. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/018-rate-abuse.json +0 -0
  1482. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/019-revocation-stale.json +0 -0
  1483. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/020-key-ops-missing-verify.json +0 -0
  1484. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/negative/021-base64-alphabet-mixing.json +0 -0
  1485. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/001-basic-post.json +0 -0
  1486. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/002-es256-post.json +0 -0
  1487. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/003-multiple-signature-labels.json +0 -0
  1488. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/004-default-port-stripped.json +0 -0
  1489. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/005-percent-encoded-path.json +0 -0
  1490. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/006-query-byte-preserved.json +0 -0
  1491. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/007-body-without-idempotency-key.json +0 -0
  1492. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/test-vectors/webhook-signing/positive/008-request-signing-key-reuse.json +0 -0
  1493. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/billing-gate-dispatch.yaml +0 -0
  1494. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/canonical-format-validate-input.yaml +0 -0
  1495. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/capability-discovery.yaml +0 -0
  1496. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/collection-lists-pagination-integrity.yaml +0 -0
  1497. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/comply-controller-mode-gate.yaml +0 -0
  1498. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/content-standards-pagination-integrity.yaml +0 -0
  1499. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/deterministic-testing.yaml +0 -0
  1500. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/error-compliance-signals.yaml +0 -0
  1501. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/error-compliance.yaml +0 -0
  1502. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/fictional-entities.yaml +0 -0
  1503. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/get-media-buys-pagination-integrity.yaml +0 -0
  1504. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/get-products-pagination-integrity.yaml +0 -0
  1505. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/get-signals-pagination-integrity.yaml +0 -0
  1506. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/idempotency.yaml +0 -0
  1507. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/notification-config-event-scope.yaml +0 -0
  1508. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/notification-config-lifecycle.yaml +0 -0
  1509. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/notification-config-rejections.yaml +0 -0
  1510. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/pagination-integrity-creative-formats.yaml +0 -0
  1511. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/pagination-integrity-list-accounts.yaml +0 -0
  1512. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/pagination-integrity.yaml +0 -0
  1513. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/property-lists-pagination-integrity.yaml +0 -0
  1514. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/read-tool-idempotency.yaml +0 -0
  1515. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/runner-output-contract.yaml +0 -0
  1516. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/schema-validation-signals.yaml +0 -0
  1517. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/schema-validation.yaml +0 -0
  1518. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/security.yaml +0 -0
  1519. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/signed-requests.yaml +0 -0
  1520. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/stale-response-advisory.yaml +0 -0
  1521. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/v3-envelope-integrity.yaml +0 -0
  1522. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/version-negotiation.yaml +0 -0
  1523. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/webhook-emission.yaml +0 -0
  1524. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/webhook-receiver-envelope.yaml +0 -0
  1525. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-bulk-webhooks.yaml +0 -0
  1526. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-product-webhooks.yaml +0 -0
  1527. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-products.yaml +0 -0
  1528. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-signal-webhooks.yaml +0 -0
  1529. /package/compliance/cache/{3.1.10.previous → 3.1.11.previous}/universal/wholesale-feed-signals.yaml +0 -0
@@ -27,6 +27,7 @@ var import_types = require('./types.js');
27
27
  var import_secret_resolver = require('./secret-resolver.js');
28
28
  var import_net = require('../../net/index.js');
29
29
  var import_responseSizeLimit = require('../../protocols/responseSizeLimit.js');
30
+ var import_abort = require('../../protocols/abort.js');
30
31
  const MAX_AS_ERROR_LENGTH = 200;
31
32
  class ClientCredentialsExchangeError extends Error {
32
33
  constructor(message, kind, oauthError, oauthErrorDescription, httpStatus) {
@@ -81,6 +82,7 @@ function validateTokenEndpoint(tokenEndpoint, options = {}) {
81
82
  return url;
82
83
  }
83
84
  async function exchangeClientCredentials(credentials, options = {}) {
85
+ (0, import_abort.throwIfAborted)(options.signal);
84
86
  const fetchImpl = (0, import_responseSizeLimit.wrapFetchWithSizeLimit)(options.fetch ?? fetch);
85
87
  const timeoutMs = options.timeoutMs ?? 3e4;
86
88
  validateTokenEndpoint(credentials.token_endpoint, { allowPrivateIp: options.allowPrivateIp });
@@ -112,18 +114,30 @@ async function exchangeClientCredentials(credentials, options = {}) {
112
114
  body.set("client_id", clientId);
113
115
  body.set("client_secret", clientSecret);
114
116
  }
115
- const controller = new AbortController();
116
- const timeout = setTimeout(() => controller.abort(), timeoutMs);
117
117
  let response;
118
+ let bodyText;
119
+ const timeoutError = new Error(`Client credentials exchange timed out after ${timeoutMs}ms`);
120
+ timeoutError.name = "TimeoutError";
118
121
  try {
119
- response = await fetchImpl(credentials.token_endpoint, {
120
- method: "POST",
121
- headers,
122
- body: body.toString(),
123
- signal: controller.signal
124
- });
122
+ ({ response, bodyText } = await (0, import_abort.withAbortSignal)(
123
+ [options.signal],
124
+ timeoutMs,
125
+ async (signal) => {
126
+ const tokenResponse = await fetchImpl(credentials.token_endpoint, {
127
+ method: "POST",
128
+ headers,
129
+ body: body.toString(),
130
+ signal
131
+ });
132
+ return { response: tokenResponse, bodyText: await tokenResponse.text() };
133
+ },
134
+ { timeoutError }
135
+ ));
125
136
  } catch (err) {
126
- if (err.name === "AbortError") {
137
+ if (options.signal?.aborted) {
138
+ throw (0, import_abort.createAbortError)(options.signal.reason);
139
+ }
140
+ if (err === timeoutError) {
127
141
  throw new ClientCredentialsExchangeError(
128
142
  `Token endpoint ${credentials.token_endpoint} did not respond within ${timeoutMs}ms.`,
129
143
  "network"
@@ -133,10 +147,7 @@ async function exchangeClientCredentials(credentials, options = {}) {
133
147
  `Failed to reach token endpoint ${credentials.token_endpoint}: ${err.message}`,
134
148
  "network"
135
149
  );
136
- } finally {
137
- clearTimeout(timeout);
138
150
  }
139
- const bodyText = await response.text();
140
151
  let parsed;
141
152
  try {
142
153
  parsed = bodyText ? JSON.parse(bodyText) : void 0;
@@ -162,11 +173,28 @@ async function exchangeClientCredentials(credentials, options = {}) {
162
173
  }
163
174
  return (0, import_types.fromMCPTokens)(parsed);
164
175
  }
165
- const inFlightRefresh = /* @__PURE__ */ new Map();
166
- function coalesceKeyFor(agent, credentials, force) {
167
- return `${force ? "force" : "normal"}\0${agent.id}\0${credentials.token_endpoint}\0${credentials.client_id}`;
176
+ const inFlightRefresh = /* @__PURE__ */ new WeakMap();
177
+ async function waitForRefresh(entry, signal) {
178
+ if (signal?.aborted) throw (0, import_abort.createAbortError)(signal.reason);
179
+ entry.waiters += 1;
180
+ let abortListener;
181
+ try {
182
+ if (!signal) return await entry.promise;
183
+ const aborted = new Promise((_resolve, reject) => {
184
+ abortListener = () => reject((0, import_abort.createAbortError)(signal.reason));
185
+ signal.addEventListener("abort", abortListener, { once: true });
186
+ });
187
+ return await Promise.race([entry.promise, aborted]);
188
+ } finally {
189
+ if (abortListener && signal) signal.removeEventListener("abort", abortListener);
190
+ entry.waiters -= 1;
191
+ if (entry.waiters === 0 && !entry.settled && !entry.controller.signal.aborted) {
192
+ entry.controller.abort((0, import_abort.createAbortError)(signal?.reason ?? "No callers remain for token refresh"));
193
+ }
194
+ }
168
195
  }
169
196
  async function ensureClientCredentialsTokens(agent, options = {}) {
197
+ (0, import_abort.throwIfAborted)(options.signal);
170
198
  if (!agent.oauth_client_credentials) {
171
199
  throw new Error(
172
200
  `ensureClientCredentialsTokens called for agent '${agent.id}' with no oauth_client_credentials configured.`
@@ -178,19 +206,32 @@ async function ensureClientCredentialsTokens(agent, options = {}) {
178
206
  if (cachedIsValid) {
179
207
  return cached;
180
208
  }
181
- const coalesceKey = coalesceKeyFor(agent, agent.oauth_client_credentials, options.force === true);
182
- const existing = inFlightRefresh.get(coalesceKey);
183
- if (existing) {
184
- const tokens = await existing;
209
+ const refreshMode = options.force ? "force" : "normal";
210
+ let agentRefreshes = inFlightRefresh.get(agent);
211
+ const existing = agentRefreshes?.get(refreshMode);
212
+ if (existing && !existing.controller.signal.aborted) {
213
+ const tokens = await waitForRefresh(existing, options.signal);
185
214
  agent.oauth_tokens = tokens;
186
215
  return tokens;
187
216
  }
188
- const exchange = (async () => {
217
+ const controller = new AbortController();
218
+ const entry = {
219
+ promise: void 0,
220
+ controller,
221
+ waiters: 0,
222
+ settled: false
223
+ };
224
+ if (!agentRefreshes) {
225
+ agentRefreshes = /* @__PURE__ */ new Map();
226
+ inFlightRefresh.set(agent, agentRefreshes);
227
+ }
228
+ entry.promise = (async () => {
189
229
  try {
190
230
  const tokens = await exchangeClientCredentials(agent.oauth_client_credentials, {
191
231
  fetch: options.fetch,
192
232
  timeoutMs: options.timeoutMs,
193
- allowPrivateIp: options.allowPrivateIp
233
+ allowPrivateIp: options.allowPrivateIp,
234
+ signal: controller.signal
194
235
  });
195
236
  agent.oauth_tokens = tokens;
196
237
  if (options.storage) {
@@ -198,11 +239,15 @@ async function ensureClientCredentialsTokens(agent, options = {}) {
198
239
  }
199
240
  return tokens;
200
241
  } finally {
201
- inFlightRefresh.delete(coalesceKey);
242
+ entry.settled = true;
243
+ if (agentRefreshes?.get(refreshMode) === entry) {
244
+ agentRefreshes.delete(refreshMode);
245
+ if (agentRefreshes.size === 0) inFlightRefresh.delete(agent);
246
+ }
202
247
  }
203
248
  })();
204
- inFlightRefresh.set(coalesceKey, exchange);
205
- return exchange;
249
+ agentRefreshes.set(refreshMode, entry);
250
+ return waitForRefresh(entry, options.signal);
206
251
  }
207
252
  // Annotate the CommonJS export names for ESM import in node:
208
253
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/auth/oauth/ClientCredentialsFlow.ts"],"sourcesContent":["/**\n * OAuth 2.0 client credentials grant — RFC 6749 §4.4.\n *\n * For machine-to-machine use cases (CI compliance runs, automated checks)\n * where there is no user to walk through an authorization-code flow. The\n * client POSTs its ID + secret to the authorization server's token endpoint\n * and gets back an access token directly.\n *\n * This file provides:\n * - {@link exchangeClientCredentials}: one-shot token exchange. Use for the\n * initial fetch during `--save-auth` and for forced refresh.\n * - {@link ensureClientCredentialsTokens}: reads the cached tokens on an\n * `AgentConfig`, checks expiry, re-exchanges if needed, and persists the\n * refreshed tokens via an optional {@link OAuthConfigStorage}.\n *\n * Why a dedicated module instead of the MCP SDK's `OAuthClientProvider`:\n * client credentials doesn't need discovery, dynamic client registration,\n * PKCE, or authorization code exchange — all the plumbing that provider\n * exists to coordinate. A direct token POST and a cached-token check is the\n * entire protocol. The call path keeps using the plain `Authorization:\n * Bearer` header path — the same path it already uses for `auth_token`.\n *\n * **Security note (library consumers):** `token_endpoint` is passed to\n * `fetch` directly. Callers that accept untrusted `AgentConfig` values\n * from network requests (e.g. a hosted compliance service accepting\n * user-supplied configs) MUST validate the URL against an allowlist or\n * SSRF-block private IPs before invoking these helpers. The CLI and\n * operator-driven flows are already trusted.\n */\n\nimport { fromMCPTokens, type OAuthTokens, type AgentConfig, type AgentOAuthTokens } from './types';\nimport type { AgentOAuthClientCredentials } from '../../types/adcp';\nimport type { OAuthConfigStorage } from './types';\nimport { resolveSecret } from './secret-resolver';\nimport { isLikelyPrivateUrl } from '../../net';\nimport { wrapFetchWithSizeLimit } from '../../protocols/responseSizeLimit';\n\n/** Max length we'll echo from an AS-supplied error description into errors. */\nconst MAX_AS_ERROR_LENGTH = 200;\n\n/**\n * Raised when the authorization server rejects a client credentials\n * exchange or the token endpoint is unreachable/malformed.\n *\n * The {@link kind} discriminator lets callers branch without\n * string-matching on the message:\n * - `oauth`: the AS returned a structured OAuth error (RFC 6749 §5.2 —\n * `invalid_client`, `invalid_grant`, `invalid_scope`, …). Read\n * {@link oauthError} / {@link oauthErrorDescription}.\n * - `malformed`: the AS returned HTTP 200 but no `access_token`, or a\n * non-JSON body.\n * - `network`: the exchange never reached the AS (DNS failure, connection\n * refused, timeout, TLS error).\n */\nexport class ClientCredentialsExchangeError extends Error {\n readonly code = 'client_credentials_exchange_failed';\n constructor(\n message: string,\n public readonly kind: 'oauth' | 'malformed' | 'network',\n public readonly oauthError?: string,\n public readonly oauthErrorDescription?: string,\n public readonly httpStatus?: number\n ) {\n super(message);\n this.name = 'ClientCredentialsExchangeError';\n }\n}\n\n/**\n * Options for {@link exchangeClientCredentials}.\n */\nexport interface ExchangeClientCredentialsOptions {\n /**\n * Custom fetch implementation (default: global `fetch`).\n * Primarily a testing hook — lets unit tests stub the authorization server\n * without intercepting the global.\n */\n fetch?: typeof fetch;\n /**\n * Request timeout in milliseconds (default: 30_000). Guards against a\n * silently hung authorization server blocking the caller indefinitely.\n */\n timeoutMs?: number;\n /**\n * Allow `token_endpoint` to resolve to a private / loopback IP address.\n * Default: false (SSRF guard). The CLI opts in because the operator is\n * explicitly configuring the endpoint; hosted consumers accepting\n * user-supplied configs should leave this off.\n */\n allowPrivateIp?: boolean;\n}\n\n/**\n * RFC 6749 §2.3.1 application/x-www-form-urlencoded encoding.\n *\n * Differs from `encodeURIComponent` in two important ways:\n * 1. Spaces are encoded as `+`, not `%20`.\n * 2. The characters `!'()*` are percent-encoded (URI component leaves them\n * alone).\n *\n * A secret containing any of those chars would hash to a different Basic\n * string than the AS computes, producing a spurious `invalid_client`.\n */\nfunction formUrlEncode(value: string): string {\n return encodeURIComponent(value)\n .replace(/%20/g, '+')\n .replace(/!/g, '%21')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29')\n .replace(/\\*/g, '%2A');\n}\n\n/**\n * Strip control chars (C0, C1, DEL) and truncate.\n *\n * Defensive cleanup on AS-controlled strings we print to a TTY. A\n * malicious or compromised AS could emit ANSI escape sequences or CRLF\n * payloads in `error_description`; we don't want those rewriting terminal\n * titles or forging log lines.\n */\nfunction sanitizeAsMessage(raw: string): string {\n // eslint-disable-next-line no-control-regex\n const stripped = raw.replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, ' ');\n if (stripped.length <= MAX_AS_ERROR_LENGTH) return stripped;\n return stripped.slice(0, MAX_AS_ERROR_LENGTH) + '…';\n}\n\n/**\n * Validate the token endpoint before we hit it. Three checks, in order:\n *\n * 1. Parse as a URL. Unparseable → `malformed`.\n * 2. Reject URLs that carry `user:pass@` userinfo — they'd leak via error\n * messages and log aggregators, and the OAuth client credentials live\n * in `client_id` / `client_secret`, never the URL.\n * 3. Reject plaintext `http://` outside `localhost` / loopback IPs.\n * RFC 6749 §3.1 requires TLS; the loopback carve-out covers local dev\n * authorization servers where plaintext is not a leak risk.\n * 4. Reject private / loopback / link-local IPs unless `allowPrivateIp`.\n * The library default is a SSRF guard; the CLI (operator-driven) opts\n * in because a user pointing at `localhost:8080` is legitimate. Network\n * code behind this call will still do DNS resolution, so this is a\n * best-effort literal-IP / known-loopback check — host allowlisting\n * upstream is the right control for adversarial environments.\n */\nfunction validateTokenEndpoint(tokenEndpoint: string, options: { allowPrivateIp?: boolean } = {}): URL {\n let url: URL;\n try {\n url = new URL(tokenEndpoint);\n } catch {\n throw new ClientCredentialsExchangeError(`Invalid token_endpoint URL: ${tokenEndpoint}`, 'malformed');\n }\n\n if (url.username || url.password) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must not contain userinfo (user:pass@). Put credentials in client_id / client_secret instead.`,\n 'malformed'\n );\n }\n\n const host = url.hostname;\n const isLoopback = host === 'localhost' || host === '127.0.0.1' || host === '[::1]' || host === '::1';\n\n if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLoopback)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must be HTTPS (got ${url.protocol}//${host}). The client secret would be sent in plaintext over HTTP. Use https:// (or http://localhost for local dev).`,\n 'malformed'\n );\n }\n\n if (!options.allowPrivateIp && isLikelyPrivateUrl(tokenEndpoint)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint resolves to a private or loopback address (${host}). Pass { allowPrivateIp: true } to exchangeClientCredentials / ensureClientCredentialsTokens if this is intentional (operator-driven CLI or local test setups).`,\n 'malformed'\n );\n }\n\n return url;\n}\n\n/**\n * Exchange client credentials for an access token.\n *\n * Secret values in `credentials.client_id` / `client_secret` may be `$ENV:VAR`\n * references — they are resolved here at exchange time. Missing env vars\n * surface as `MissingEnvSecretError` (from `secret-resolver`), which\n * callers typically print with the variable name for the user to fix.\n *\n * @throws {ClientCredentialsExchangeError} on any non-2xx response, malformed 200, or network failure\n * @throws {MissingEnvSecretError} if a `$ENV:VAR` ref points at an unset var\n */\nexport async function exchangeClientCredentials(\n credentials: AgentOAuthClientCredentials,\n options: ExchangeClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n // Wrap with the response-size-limit guard so a hostile token endpoint\n // can't buffer-bomb on every refresh. Pass-through when no\n // `withResponseSizeLimit` slot is active. (#1175)\n const fetchImpl = wrapFetchWithSizeLimit(options.fetch ?? fetch);\n const timeoutMs = options.timeoutMs ?? 30_000;\n\n validateTokenEndpoint(credentials.token_endpoint, { allowPrivateIp: options.allowPrivateIp });\n\n const clientId = resolveSecret(credentials.client_id);\n const clientSecret = resolveSecret(credentials.client_secret);\n const authMethod = credentials.auth_method ?? 'basic';\n\n const body = new URLSearchParams();\n body.set('grant_type', 'client_credentials');\n if (credentials.scope) {\n body.set('scope', credentials.scope);\n }\n // RFC 8707 resource indicators — emitted as one `resource` field per URI\n // so the AS receives the full list. URLSearchParams#append is the only\n // way to produce repeated keys in form encoding.\n if (credentials.resource) {\n const resources = Array.isArray(credentials.resource) ? credentials.resource : [credentials.resource];\n for (const r of resources) body.append('resource', r);\n }\n if (credentials.audience) {\n body.set('audience', credentials.audience);\n }\n\n const headers: Record<string, string> = {\n 'content-type': 'application/x-www-form-urlencoded',\n accept: 'application/json',\n };\n\n if (authMethod === 'basic') {\n // RFC 6749 §2.3.1: form-urlencode ID/secret before base64 (NOT URI\n // component encoding — space is `+`, and `!'()*` must be percent-\n // encoded). Most deployed servers accept raw values too, but spec\n // compliance avoids a footgun with secrets containing those chars.\n const encoded = Buffer.from(`${formUrlEncode(clientId)}:${formUrlEncode(clientSecret)}`, 'utf-8').toString(\n 'base64'\n );\n headers.authorization = `Basic ${encoded}`;\n } else {\n body.set('client_id', clientId);\n body.set('client_secret', clientSecret);\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n let response: Response;\n try {\n response = await fetchImpl(credentials.token_endpoint, {\n method: 'POST',\n headers,\n body: body.toString(),\n signal: controller.signal,\n });\n } catch (err) {\n if ((err as { name?: string }).name === 'AbortError') {\n throw new ClientCredentialsExchangeError(\n `Token endpoint ${credentials.token_endpoint} did not respond within ${timeoutMs}ms.`,\n 'network'\n );\n }\n throw new ClientCredentialsExchangeError(\n `Failed to reach token endpoint ${credentials.token_endpoint}: ${(err as Error).message}`,\n 'network'\n );\n } finally {\n clearTimeout(timeout);\n }\n\n const bodyText = await response.text();\n let parsed: Record<string, unknown> | undefined;\n try {\n parsed = bodyText ? (JSON.parse(bodyText) as Record<string, unknown>) : undefined;\n } catch {\n // Non-JSON response; parsed stays undefined, handled below.\n }\n\n if (!response.ok) {\n const rawOauthError = typeof parsed?.error === 'string' ? parsed.error : undefined;\n const rawOauthDesc = typeof parsed?.error_description === 'string' ? parsed.error_description : undefined;\n const oauthError = rawOauthError ? sanitizeAsMessage(rawOauthError) : undefined;\n const oauthDesc = rawOauthDesc ? sanitizeAsMessage(rawOauthDesc) : undefined;\n const message =\n oauthError || oauthDesc\n ? `Client credentials exchange failed: ${oauthError ?? 'error'}${oauthDesc ? ` — ${oauthDesc}` : ''}`\n : `Client credentials exchange failed with HTTP ${response.status}: ${sanitizeAsMessage(bodyText) || '(empty body)'}`;\n const kind = rawOauthError ? 'oauth' : 'malformed';\n throw new ClientCredentialsExchangeError(message, kind, oauthError, oauthDesc, response.status);\n }\n\n if (!parsed || typeof parsed.access_token !== 'string') {\n throw new ClientCredentialsExchangeError(\n `Token endpoint returned HTTP ${response.status} but no access_token. Body: ${sanitizeAsMessage(bodyText)}`,\n 'malformed',\n undefined,\n undefined,\n response.status\n );\n }\n\n return fromMCPTokens(parsed as unknown as OAuthTokens);\n}\n\n/**\n * Options for {@link ensureClientCredentialsTokens}.\n */\nexport interface EnsureClientCredentialsOptions extends ExchangeClientCredentialsOptions {\n /**\n * Storage backend used to persist refreshed tokens. Optional — if omitted,\n * tokens are only mutated on the in-memory `agent` object and the caller\n * is responsible for persisting.\n */\n storage?: OAuthConfigStorage;\n /**\n * Force a re-exchange even if the cached token looks valid. Useful after a\n * 401 in case the authorization server rotated something out-of-band.\n */\n force?: boolean;\n /**\n * Expiration skew (ms). Treat the token as expired this many milliseconds\n * before its nominal `expires_at` — protects against clock skew and\n * in-flight requests. Default: 60_000 (1 minute). The interactive auth\n * code flow uses 5 minutes; client credentials refresh is cheap (single\n * POST) so the shorter window is fine here.\n */\n expirationSkewMs?: number;\n}\n\n/**\n * In-flight refresh coalescing map. Keyed by the tuple\n * `(agent.id, token_endpoint, client_id)` — concurrent\n * `ensureClientCredentialsTokens` calls for the same credentials share a\n * single token POST instead of each racing to exchange the same secret.\n *\n * Two different `AgentConfig` objects that accidentally reuse the same\n * `id` (e.g. two tenants both creating `cli-agent`) but hold different\n * credentials won't cross-contaminate — the endpoint + client_id in the\n * key keeps them distinct.\n *\n * Cleared on completion regardless of success/failure.\n *\n * Note: this is an in-process map. Multi-process deployments (worker\n * pools, multiple CLI invocations, horizontally scaled Node servers)\n * don't coalesce across workers — each process will do its own refresh.\n * For the CLI this is fine; for high-throughput server deployments,\n * coalesce upstream at the storage layer.\n */\nconst inFlightRefresh = new Map<string, Promise<AgentOAuthTokens>>();\n\n/**\n * Compute the coalesce key for `ensureClientCredentialsTokens`. `force: true`\n * uses a distinct bucket so a 401-triggered forced refresh never piggybacks\n * on a still-pending non-forced exchange — the whole point of forcing is\n * that the in-flight token is *known* stale, so awaiting it would defeat\n * the retry.\n */\nfunction coalesceKeyFor(agent: AgentConfig, credentials: AgentOAuthClientCredentials, force: boolean): string {\n return `${force ? 'force' : 'normal'}\\u0000${agent.id}\\u0000${credentials.token_endpoint}\\u0000${credentials.client_id}`;\n}\n\n/**\n * Ensure an agent has a valid access token, refreshing via client credentials\n * if the cached one is missing or expired. Idempotent and safe to call\n * before every request.\n *\n * Concurrent calls for the same `agent.id` are coalesced into a single\n * token POST via an in-process promise map — the common case of a\n * storyboard fan-out firing 10 tool calls in parallel does one refresh,\n * not ten.\n *\n * **Mutation:** this function writes `agent.oauth_tokens` in place. That is\n * the contract the MCP SDK's `OAuthClientProvider` pattern also uses, and\n * it lets the CLI's file-backed storage see the same object. Callers that\n * share an `AgentConfig` across different logical agents must copy first.\n *\n * Precondition: `agent.oauth_client_credentials` must be set. Throws a plain\n * Error if not — callers are expected to branch on its presence before\n * calling this.\n */\nexport async function ensureClientCredentialsTokens(\n agent: AgentConfig,\n options: EnsureClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n if (!agent.oauth_client_credentials) {\n throw new Error(\n `ensureClientCredentialsTokens called for agent '${agent.id}' with no oauth_client_credentials configured.`\n );\n }\n\n const skew = options.expirationSkewMs ?? 60_000;\n const cached = agent.oauth_tokens;\n const cachedIsValid =\n !options.force &&\n cached?.access_token &&\n (!cached.expires_at || new Date(cached.expires_at).getTime() - Date.now() > skew);\n\n if (cachedIsValid) {\n return cached!;\n }\n\n const coalesceKey = coalesceKeyFor(agent, agent.oauth_client_credentials, options.force === true);\n const existing = inFlightRefresh.get(coalesceKey);\n if (existing) {\n const tokens = await existing;\n agent.oauth_tokens = tokens;\n return tokens;\n }\n\n const exchange = (async () => {\n try {\n const tokens = await exchangeClientCredentials(agent.oauth_client_credentials!, {\n fetch: options.fetch,\n timeoutMs: options.timeoutMs,\n allowPrivateIp: options.allowPrivateIp,\n });\n agent.oauth_tokens = tokens;\n if (options.storage) {\n await options.storage.saveAgent(agent);\n }\n return tokens;\n } finally {\n inFlightRefresh.delete(coalesceKey);\n }\n })();\n\n inFlightRefresh.set(coalesceKey, exchange);\n return exchange;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/auth/oauth/ClientCredentialsFlow.ts"],"sourcesContent":["/**\n * OAuth 2.0 client credentials grant — RFC 6749 §4.4.\n *\n * For machine-to-machine use cases (CI compliance runs, automated checks)\n * where there is no user to walk through an authorization-code flow. The\n * client POSTs its ID + secret to the authorization server's token endpoint\n * and gets back an access token directly.\n *\n * This file provides:\n * - {@link exchangeClientCredentials}: one-shot token exchange. Use for the\n * initial fetch during `--save-auth` and for forced refresh.\n * - {@link ensureClientCredentialsTokens}: reads the cached tokens on an\n * `AgentConfig`, checks expiry, re-exchanges if needed, and persists the\n * refreshed tokens via an optional {@link OAuthConfigStorage}.\n *\n * Why a dedicated module instead of the MCP SDK's `OAuthClientProvider`:\n * client credentials doesn't need discovery, dynamic client registration,\n * PKCE, or authorization code exchange — all the plumbing that provider\n * exists to coordinate. A direct token POST and a cached-token check is the\n * entire protocol. The call path keeps using the plain `Authorization:\n * Bearer` header path — the same path it already uses for `auth_token`.\n *\n * **Security note (library consumers):** `token_endpoint` is passed to\n * `fetch` directly. Callers that accept untrusted `AgentConfig` values\n * from network requests (e.g. a hosted compliance service accepting\n * user-supplied configs) MUST validate the URL against an allowlist or\n * SSRF-block private IPs before invoking these helpers. The CLI and\n * operator-driven flows are already trusted.\n */\n\nimport { fromMCPTokens, type OAuthTokens, type AgentConfig, type AgentOAuthTokens } from './types';\nimport type { AgentOAuthClientCredentials } from '../../types/adcp';\nimport type { OAuthConfigStorage } from './types';\nimport { resolveSecret } from './secret-resolver';\nimport { isLikelyPrivateUrl } from '../../net';\nimport { wrapFetchWithSizeLimit } from '../../protocols/responseSizeLimit';\nimport { createAbortError, throwIfAborted, withAbortSignal } from '../../protocols/abort';\n\n/** Max length we'll echo from an AS-supplied error description into errors. */\nconst MAX_AS_ERROR_LENGTH = 200;\n\n/**\n * Raised when the authorization server rejects a client credentials\n * exchange or the token endpoint is unreachable/malformed.\n *\n * The {@link kind} discriminator lets callers branch without\n * string-matching on the message:\n * - `oauth`: the AS returned a structured OAuth error (RFC 6749 §5.2 —\n * `invalid_client`, `invalid_grant`, `invalid_scope`, …). Read\n * {@link oauthError} / {@link oauthErrorDescription}.\n * - `malformed`: the AS returned HTTP 200 but no `access_token`, or a\n * non-JSON body.\n * - `network`: the exchange never reached the AS (DNS failure, connection\n * refused, timeout, TLS error).\n */\nexport class ClientCredentialsExchangeError extends Error {\n readonly code = 'client_credentials_exchange_failed';\n constructor(\n message: string,\n public readonly kind: 'oauth' | 'malformed' | 'network',\n public readonly oauthError?: string,\n public readonly oauthErrorDescription?: string,\n public readonly httpStatus?: number\n ) {\n super(message);\n this.name = 'ClientCredentialsExchangeError';\n }\n}\n\n/**\n * Options for {@link exchangeClientCredentials}.\n */\nexport interface ExchangeClientCredentialsOptions {\n /**\n * Custom fetch implementation (default: global `fetch`).\n * Primarily a testing hook — lets unit tests stub the authorization server\n * without intercepting the global.\n */\n fetch?: typeof fetch;\n /**\n * Request timeout in milliseconds (default: 30_000). Guards against a\n * silently hung authorization server blocking the caller indefinitely.\n */\n timeoutMs?: number;\n /**\n * Allow `token_endpoint` to resolve to a private / loopback IP address.\n * Default: false (SSRF guard). The CLI opts in because the operator is\n * explicitly configuring the endpoint; hosted consumers accepting\n * user-supplied configs should leave this off.\n */\n allowPrivateIp?: boolean;\n /** Caller-owned cancellation signal, composed with `timeoutMs`. */\n signal?: AbortSignal;\n}\n\n/**\n * RFC 6749 §2.3.1 application/x-www-form-urlencoded encoding.\n *\n * Differs from `encodeURIComponent` in two important ways:\n * 1. Spaces are encoded as `+`, not `%20`.\n * 2. The characters `!'()*` are percent-encoded (URI component leaves them\n * alone).\n *\n * A secret containing any of those chars would hash to a different Basic\n * string than the AS computes, producing a spurious `invalid_client`.\n */\nfunction formUrlEncode(value: string): string {\n return encodeURIComponent(value)\n .replace(/%20/g, '+')\n .replace(/!/g, '%21')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29')\n .replace(/\\*/g, '%2A');\n}\n\n/**\n * Strip control chars (C0, C1, DEL) and truncate.\n *\n * Defensive cleanup on AS-controlled strings we print to a TTY. A\n * malicious or compromised AS could emit ANSI escape sequences or CRLF\n * payloads in `error_description`; we don't want those rewriting terminal\n * titles or forging log lines.\n */\nfunction sanitizeAsMessage(raw: string): string {\n // eslint-disable-next-line no-control-regex\n const stripped = raw.replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, ' ');\n if (stripped.length <= MAX_AS_ERROR_LENGTH) return stripped;\n return stripped.slice(0, MAX_AS_ERROR_LENGTH) + '…';\n}\n\n/**\n * Validate the token endpoint before we hit it. Three checks, in order:\n *\n * 1. Parse as a URL. Unparseable → `malformed`.\n * 2. Reject URLs that carry `user:pass@` userinfo — they'd leak via error\n * messages and log aggregators, and the OAuth client credentials live\n * in `client_id` / `client_secret`, never the URL.\n * 3. Reject plaintext `http://` outside `localhost` / loopback IPs.\n * RFC 6749 §3.1 requires TLS; the loopback carve-out covers local dev\n * authorization servers where plaintext is not a leak risk.\n * 4. Reject private / loopback / link-local IPs unless `allowPrivateIp`.\n * The library default is a SSRF guard; the CLI (operator-driven) opts\n * in because a user pointing at `localhost:8080` is legitimate. Network\n * code behind this call will still do DNS resolution, so this is a\n * best-effort literal-IP / known-loopback check — host allowlisting\n * upstream is the right control for adversarial environments.\n */\nfunction validateTokenEndpoint(tokenEndpoint: string, options: { allowPrivateIp?: boolean } = {}): URL {\n let url: URL;\n try {\n url = new URL(tokenEndpoint);\n } catch {\n throw new ClientCredentialsExchangeError(`Invalid token_endpoint URL: ${tokenEndpoint}`, 'malformed');\n }\n\n if (url.username || url.password) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must not contain userinfo (user:pass@). Put credentials in client_id / client_secret instead.`,\n 'malformed'\n );\n }\n\n const host = url.hostname;\n const isLoopback = host === 'localhost' || host === '127.0.0.1' || host === '[::1]' || host === '::1';\n\n if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLoopback)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must be HTTPS (got ${url.protocol}//${host}). The client secret would be sent in plaintext over HTTP. Use https:// (or http://localhost for local dev).`,\n 'malformed'\n );\n }\n\n if (!options.allowPrivateIp && isLikelyPrivateUrl(tokenEndpoint)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint resolves to a private or loopback address (${host}). Pass { allowPrivateIp: true } to exchangeClientCredentials / ensureClientCredentialsTokens if this is intentional (operator-driven CLI or local test setups).`,\n 'malformed'\n );\n }\n\n return url;\n}\n\n/**\n * Exchange client credentials for an access token.\n *\n * Secret values in `credentials.client_id` / `client_secret` may be `$ENV:VAR`\n * references — they are resolved here at exchange time. Missing env vars\n * surface as `MissingEnvSecretError` (from `secret-resolver`), which\n * callers typically print with the variable name for the user to fix.\n *\n * @throws {ClientCredentialsExchangeError} on any non-2xx response, malformed 200, or network failure\n * @throws {MissingEnvSecretError} if a `$ENV:VAR` ref points at an unset var\n */\nexport async function exchangeClientCredentials(\n credentials: AgentOAuthClientCredentials,\n options: ExchangeClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n throwIfAborted(options.signal);\n\n // Wrap with the response-size-limit guard so a hostile token endpoint\n // can't buffer-bomb on every refresh. Pass-through when no\n // `withResponseSizeLimit` slot is active. (#1175)\n const fetchImpl = wrapFetchWithSizeLimit(options.fetch ?? fetch);\n const timeoutMs = options.timeoutMs ?? 30_000;\n\n validateTokenEndpoint(credentials.token_endpoint, { allowPrivateIp: options.allowPrivateIp });\n\n const clientId = resolveSecret(credentials.client_id);\n const clientSecret = resolveSecret(credentials.client_secret);\n const authMethod = credentials.auth_method ?? 'basic';\n\n const body = new URLSearchParams();\n body.set('grant_type', 'client_credentials');\n if (credentials.scope) {\n body.set('scope', credentials.scope);\n }\n // RFC 8707 resource indicators — emitted as one `resource` field per URI\n // so the AS receives the full list. URLSearchParams#append is the only\n // way to produce repeated keys in form encoding.\n if (credentials.resource) {\n const resources = Array.isArray(credentials.resource) ? credentials.resource : [credentials.resource];\n for (const r of resources) body.append('resource', r);\n }\n if (credentials.audience) {\n body.set('audience', credentials.audience);\n }\n\n const headers: Record<string, string> = {\n 'content-type': 'application/x-www-form-urlencoded',\n accept: 'application/json',\n };\n\n if (authMethod === 'basic') {\n // RFC 6749 §2.3.1: form-urlencode ID/secret before base64 (NOT URI\n // component encoding — space is `+`, and `!'()*` must be percent-\n // encoded). Most deployed servers accept raw values too, but spec\n // compliance avoids a footgun with secrets containing those chars.\n const encoded = Buffer.from(`${formUrlEncode(clientId)}:${formUrlEncode(clientSecret)}`, 'utf-8').toString(\n 'base64'\n );\n headers.authorization = `Basic ${encoded}`;\n } else {\n body.set('client_id', clientId);\n body.set('client_secret', clientSecret);\n }\n\n let response: Response;\n let bodyText: string;\n const timeoutError = new Error(`Client credentials exchange timed out after ${timeoutMs}ms`);\n timeoutError.name = 'TimeoutError';\n try {\n ({ response, bodyText } = await withAbortSignal(\n [options.signal],\n timeoutMs,\n async signal => {\n const tokenResponse = await fetchImpl(credentials.token_endpoint, {\n method: 'POST',\n headers,\n body: body.toString(),\n signal,\n });\n return { response: tokenResponse, bodyText: await tokenResponse.text() };\n },\n { timeoutError }\n ));\n } catch (err) {\n if (options.signal?.aborted) {\n throw createAbortError(options.signal.reason);\n }\n if (err === timeoutError) {\n throw new ClientCredentialsExchangeError(\n `Token endpoint ${credentials.token_endpoint} did not respond within ${timeoutMs}ms.`,\n 'network'\n );\n }\n throw new ClientCredentialsExchangeError(\n `Failed to reach token endpoint ${credentials.token_endpoint}: ${(err as Error).message}`,\n 'network'\n );\n }\n\n let parsed: Record<string, unknown> | undefined;\n try {\n parsed = bodyText ? (JSON.parse(bodyText) as Record<string, unknown>) : undefined;\n } catch {\n // Non-JSON response; parsed stays undefined, handled below.\n }\n\n if (!response.ok) {\n const rawOauthError = typeof parsed?.error === 'string' ? parsed.error : undefined;\n const rawOauthDesc = typeof parsed?.error_description === 'string' ? parsed.error_description : undefined;\n const oauthError = rawOauthError ? sanitizeAsMessage(rawOauthError) : undefined;\n const oauthDesc = rawOauthDesc ? sanitizeAsMessage(rawOauthDesc) : undefined;\n const message =\n oauthError || oauthDesc\n ? `Client credentials exchange failed: ${oauthError ?? 'error'}${oauthDesc ? ` — ${oauthDesc}` : ''}`\n : `Client credentials exchange failed with HTTP ${response.status}: ${sanitizeAsMessage(bodyText) || '(empty body)'}`;\n const kind = rawOauthError ? 'oauth' : 'malformed';\n throw new ClientCredentialsExchangeError(message, kind, oauthError, oauthDesc, response.status);\n }\n\n if (!parsed || typeof parsed.access_token !== 'string') {\n throw new ClientCredentialsExchangeError(\n `Token endpoint returned HTTP ${response.status} but no access_token. Body: ${sanitizeAsMessage(bodyText)}`,\n 'malformed',\n undefined,\n undefined,\n response.status\n );\n }\n\n return fromMCPTokens(parsed as unknown as OAuthTokens);\n}\n\n/**\n * Options for {@link ensureClientCredentialsTokens}.\n */\nexport interface EnsureClientCredentialsOptions extends ExchangeClientCredentialsOptions {\n /**\n * Storage backend used to persist refreshed tokens. Optional — if omitted,\n * tokens are only mutated on the in-memory `agent` object and the caller\n * is responsible for persisting.\n */\n storage?: OAuthConfigStorage;\n /**\n * Force a re-exchange even if the cached token looks valid. Useful after a\n * 401 in case the authorization server rotated something out-of-band.\n */\n force?: boolean;\n /**\n * Expiration skew (ms). Treat the token as expired this many milliseconds\n * before its nominal `expires_at` — protects against clock skew and\n * in-flight requests. Default: 60_000 (1 minute). The interactive auth\n * code flow uses 5 minutes; client credentials refresh is cheap (single\n * POST) so the shorter window is fine here.\n */\n expirationSkewMs?: number;\n}\n\n/**\n * In-flight refresh coalescing map. Scoped by `AgentConfig` object identity\n * so only callers deliberately sharing one configuration can share a bearer.\n * A string key built from public OAuth fields is insufficient here: two\n * tenants can reuse an agent id, endpoint, and client id while differing in\n * secret, scope, audience, or resource.\n *\n * Cleared on completion regardless of success/failure.\n *\n * Note: this is an in-process map. Multi-process deployments (worker\n * pools, multiple CLI invocations, horizontally scaled Node servers)\n * don't coalesce across workers — each process will do its own refresh.\n * For the CLI this is fine; for high-throughput server deployments,\n * coalesce upstream at the storage layer.\n */\ninterface InFlightRefresh {\n promise: Promise<AgentOAuthTokens>;\n controller: AbortController;\n waiters: number;\n settled: boolean;\n}\n\ntype RefreshMode = 'normal' | 'force';\n\nconst inFlightRefresh = new WeakMap<AgentConfig, Map<RefreshMode, InFlightRefresh>>();\n\nasync function waitForRefresh(entry: InFlightRefresh, signal?: AbortSignal): Promise<AgentOAuthTokens> {\n if (signal?.aborted) throw createAbortError(signal.reason);\n entry.waiters += 1;\n let abortListener: (() => void) | undefined;\n try {\n if (!signal) return await entry.promise;\n const aborted = new Promise<never>((_resolve, reject) => {\n abortListener = () => reject(createAbortError(signal.reason));\n signal.addEventListener('abort', abortListener, { once: true });\n });\n return await Promise.race([entry.promise, aborted]);\n } finally {\n if (abortListener && signal) signal.removeEventListener('abort', abortListener);\n entry.waiters -= 1;\n if (entry.waiters === 0 && !entry.settled && !entry.controller.signal.aborted) {\n entry.controller.abort(createAbortError(signal?.reason ?? 'No callers remain for token refresh'));\n }\n }\n}\n\n/**\n * Ensure an agent has a valid access token, refreshing via client credentials\n * if the cached one is missing or expired. Idempotent and safe to call\n * before every request.\n *\n * Concurrent calls for the same `agent.id` are coalesced into a single\n * token POST via an in-process promise map — the common case of a\n * storyboard fan-out firing 10 tool calls in parallel does one refresh,\n * not ten.\n *\n * **Mutation:** this function writes `agent.oauth_tokens` in place. That is\n * the contract the MCP SDK's `OAuthClientProvider` pattern also uses, and\n * it lets the CLI's file-backed storage see the same object. Callers that\n * share an `AgentConfig` across different logical agents must copy first.\n *\n * Precondition: `agent.oauth_client_credentials` must be set. Throws a plain\n * Error if not — callers are expected to branch on its presence before\n * calling this.\n */\nexport async function ensureClientCredentialsTokens(\n agent: AgentConfig,\n options: EnsureClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n throwIfAborted(options.signal);\n\n if (!agent.oauth_client_credentials) {\n throw new Error(\n `ensureClientCredentialsTokens called for agent '${agent.id}' with no oauth_client_credentials configured.`\n );\n }\n\n const skew = options.expirationSkewMs ?? 60_000;\n const cached = agent.oauth_tokens;\n const cachedIsValid =\n !options.force &&\n cached?.access_token &&\n (!cached.expires_at || new Date(cached.expires_at).getTime() - Date.now() > skew);\n\n if (cachedIsValid) {\n return cached!;\n }\n\n const refreshMode: RefreshMode = options.force ? 'force' : 'normal';\n let agentRefreshes = inFlightRefresh.get(agent);\n const existing = agentRefreshes?.get(refreshMode);\n if (existing && !existing.controller.signal.aborted) {\n const tokens = await waitForRefresh(existing, options.signal);\n agent.oauth_tokens = tokens;\n return tokens;\n }\n\n const controller = new AbortController();\n const entry: InFlightRefresh = {\n promise: undefined as unknown as Promise<AgentOAuthTokens>,\n controller,\n waiters: 0,\n settled: false,\n };\n if (!agentRefreshes) {\n agentRefreshes = new Map();\n inFlightRefresh.set(agent, agentRefreshes);\n }\n entry.promise = (async () => {\n try {\n const tokens = await exchangeClientCredentials(agent.oauth_client_credentials!, {\n fetch: options.fetch,\n timeoutMs: options.timeoutMs,\n allowPrivateIp: options.allowPrivateIp,\n signal: controller.signal,\n });\n agent.oauth_tokens = tokens;\n if (options.storage) {\n await options.storage.saveAgent(agent);\n }\n return tokens;\n } finally {\n entry.settled = true;\n if (agentRefreshes?.get(refreshMode) === entry) {\n agentRefreshes.delete(refreshMode);\n if (agentRefreshes.size === 0) inFlightRefresh.delete(agent);\n }\n }\n })();\n\n agentRefreshes.set(refreshMode, entry);\n return waitForRefresh(entry, options.signal);\n}\n"],"mappings":"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","names":[]}
@@ -2,6 +2,7 @@ import { fromMCPTokens } from "./types.mjs";
2
2
  import { resolveSecret } from "./secret-resolver.mjs";
3
3
  import { isLikelyPrivateUrl } from "../../net/index.mjs";
4
4
  import { wrapFetchWithSizeLimit } from "../../protocols/responseSizeLimit.mjs";
5
+ import { createAbortError, throwIfAborted, withAbortSignal } from "../../protocols/abort.mjs";
5
6
  const MAX_AS_ERROR_LENGTH = 200;
6
7
  class ClientCredentialsExchangeError extends Error {
7
8
  constructor(message, kind, oauthError, oauthErrorDescription, httpStatus) {
@@ -56,6 +57,7 @@ function validateTokenEndpoint(tokenEndpoint, options = {}) {
56
57
  return url;
57
58
  }
58
59
  async function exchangeClientCredentials(credentials, options = {}) {
60
+ throwIfAborted(options.signal);
59
61
  const fetchImpl = wrapFetchWithSizeLimit(options.fetch ?? fetch);
60
62
  const timeoutMs = options.timeoutMs ?? 3e4;
61
63
  validateTokenEndpoint(credentials.token_endpoint, { allowPrivateIp: options.allowPrivateIp });
@@ -87,18 +89,30 @@ async function exchangeClientCredentials(credentials, options = {}) {
87
89
  body.set("client_id", clientId);
88
90
  body.set("client_secret", clientSecret);
89
91
  }
90
- const controller = new AbortController();
91
- const timeout = setTimeout(() => controller.abort(), timeoutMs);
92
92
  let response;
93
+ let bodyText;
94
+ const timeoutError = new Error(`Client credentials exchange timed out after ${timeoutMs}ms`);
95
+ timeoutError.name = "TimeoutError";
93
96
  try {
94
- response = await fetchImpl(credentials.token_endpoint, {
95
- method: "POST",
96
- headers,
97
- body: body.toString(),
98
- signal: controller.signal
99
- });
97
+ ({ response, bodyText } = await withAbortSignal(
98
+ [options.signal],
99
+ timeoutMs,
100
+ async (signal) => {
101
+ const tokenResponse = await fetchImpl(credentials.token_endpoint, {
102
+ method: "POST",
103
+ headers,
104
+ body: body.toString(),
105
+ signal
106
+ });
107
+ return { response: tokenResponse, bodyText: await tokenResponse.text() };
108
+ },
109
+ { timeoutError }
110
+ ));
100
111
  } catch (err) {
101
- if (err.name === "AbortError") {
112
+ if (options.signal?.aborted) {
113
+ throw createAbortError(options.signal.reason);
114
+ }
115
+ if (err === timeoutError) {
102
116
  throw new ClientCredentialsExchangeError(
103
117
  `Token endpoint ${credentials.token_endpoint} did not respond within ${timeoutMs}ms.`,
104
118
  "network"
@@ -108,10 +122,7 @@ async function exchangeClientCredentials(credentials, options = {}) {
108
122
  `Failed to reach token endpoint ${credentials.token_endpoint}: ${err.message}`,
109
123
  "network"
110
124
  );
111
- } finally {
112
- clearTimeout(timeout);
113
125
  }
114
- const bodyText = await response.text();
115
126
  let parsed;
116
127
  try {
117
128
  parsed = bodyText ? JSON.parse(bodyText) : void 0;
@@ -137,11 +148,28 @@ async function exchangeClientCredentials(credentials, options = {}) {
137
148
  }
138
149
  return fromMCPTokens(parsed);
139
150
  }
140
- const inFlightRefresh = /* @__PURE__ */ new Map();
141
- function coalesceKeyFor(agent, credentials, force) {
142
- return `${force ? "force" : "normal"}\0${agent.id}\0${credentials.token_endpoint}\0${credentials.client_id}`;
151
+ const inFlightRefresh = /* @__PURE__ */ new WeakMap();
152
+ async function waitForRefresh(entry, signal) {
153
+ if (signal?.aborted) throw createAbortError(signal.reason);
154
+ entry.waiters += 1;
155
+ let abortListener;
156
+ try {
157
+ if (!signal) return await entry.promise;
158
+ const aborted = new Promise((_resolve, reject) => {
159
+ abortListener = () => reject(createAbortError(signal.reason));
160
+ signal.addEventListener("abort", abortListener, { once: true });
161
+ });
162
+ return await Promise.race([entry.promise, aborted]);
163
+ } finally {
164
+ if (abortListener && signal) signal.removeEventListener("abort", abortListener);
165
+ entry.waiters -= 1;
166
+ if (entry.waiters === 0 && !entry.settled && !entry.controller.signal.aborted) {
167
+ entry.controller.abort(createAbortError(signal?.reason ?? "No callers remain for token refresh"));
168
+ }
169
+ }
143
170
  }
144
171
  async function ensureClientCredentialsTokens(agent, options = {}) {
172
+ throwIfAborted(options.signal);
145
173
  if (!agent.oauth_client_credentials) {
146
174
  throw new Error(
147
175
  `ensureClientCredentialsTokens called for agent '${agent.id}' with no oauth_client_credentials configured.`
@@ -153,19 +181,32 @@ async function ensureClientCredentialsTokens(agent, options = {}) {
153
181
  if (cachedIsValid) {
154
182
  return cached;
155
183
  }
156
- const coalesceKey = coalesceKeyFor(agent, agent.oauth_client_credentials, options.force === true);
157
- const existing = inFlightRefresh.get(coalesceKey);
158
- if (existing) {
159
- const tokens = await existing;
184
+ const refreshMode = options.force ? "force" : "normal";
185
+ let agentRefreshes = inFlightRefresh.get(agent);
186
+ const existing = agentRefreshes?.get(refreshMode);
187
+ if (existing && !existing.controller.signal.aborted) {
188
+ const tokens = await waitForRefresh(existing, options.signal);
160
189
  agent.oauth_tokens = tokens;
161
190
  return tokens;
162
191
  }
163
- const exchange = (async () => {
192
+ const controller = new AbortController();
193
+ const entry = {
194
+ promise: void 0,
195
+ controller,
196
+ waiters: 0,
197
+ settled: false
198
+ };
199
+ if (!agentRefreshes) {
200
+ agentRefreshes = /* @__PURE__ */ new Map();
201
+ inFlightRefresh.set(agent, agentRefreshes);
202
+ }
203
+ entry.promise = (async () => {
164
204
  try {
165
205
  const tokens = await exchangeClientCredentials(agent.oauth_client_credentials, {
166
206
  fetch: options.fetch,
167
207
  timeoutMs: options.timeoutMs,
168
- allowPrivateIp: options.allowPrivateIp
208
+ allowPrivateIp: options.allowPrivateIp,
209
+ signal: controller.signal
169
210
  });
170
211
  agent.oauth_tokens = tokens;
171
212
  if (options.storage) {
@@ -173,11 +214,15 @@ async function ensureClientCredentialsTokens(agent, options = {}) {
173
214
  }
174
215
  return tokens;
175
216
  } finally {
176
- inFlightRefresh.delete(coalesceKey);
217
+ entry.settled = true;
218
+ if (agentRefreshes?.get(refreshMode) === entry) {
219
+ agentRefreshes.delete(refreshMode);
220
+ if (agentRefreshes.size === 0) inFlightRefresh.delete(agent);
221
+ }
177
222
  }
178
223
  })();
179
- inFlightRefresh.set(coalesceKey, exchange);
180
- return exchange;
224
+ agentRefreshes.set(refreshMode, entry);
225
+ return waitForRefresh(entry, options.signal);
181
226
  }
182
227
  export {
183
228
  ClientCredentialsExchangeError,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/auth/oauth/ClientCredentialsFlow.ts"],"sourcesContent":["/**\n * OAuth 2.0 client credentials grant — RFC 6749 §4.4.\n *\n * For machine-to-machine use cases (CI compliance runs, automated checks)\n * where there is no user to walk through an authorization-code flow. The\n * client POSTs its ID + secret to the authorization server's token endpoint\n * and gets back an access token directly.\n *\n * This file provides:\n * - {@link exchangeClientCredentials}: one-shot token exchange. Use for the\n * initial fetch during `--save-auth` and for forced refresh.\n * - {@link ensureClientCredentialsTokens}: reads the cached tokens on an\n * `AgentConfig`, checks expiry, re-exchanges if needed, and persists the\n * refreshed tokens via an optional {@link OAuthConfigStorage}.\n *\n * Why a dedicated module instead of the MCP SDK's `OAuthClientProvider`:\n * client credentials doesn't need discovery, dynamic client registration,\n * PKCE, or authorization code exchange — all the plumbing that provider\n * exists to coordinate. A direct token POST and a cached-token check is the\n * entire protocol. The call path keeps using the plain `Authorization:\n * Bearer` header path — the same path it already uses for `auth_token`.\n *\n * **Security note (library consumers):** `token_endpoint` is passed to\n * `fetch` directly. Callers that accept untrusted `AgentConfig` values\n * from network requests (e.g. a hosted compliance service accepting\n * user-supplied configs) MUST validate the URL against an allowlist or\n * SSRF-block private IPs before invoking these helpers. The CLI and\n * operator-driven flows are already trusted.\n */\n\nimport { fromMCPTokens, type OAuthTokens, type AgentConfig, type AgentOAuthTokens } from './types';\nimport type { AgentOAuthClientCredentials } from '../../types/adcp';\nimport type { OAuthConfigStorage } from './types';\nimport { resolveSecret } from './secret-resolver';\nimport { isLikelyPrivateUrl } from '../../net';\nimport { wrapFetchWithSizeLimit } from '../../protocols/responseSizeLimit';\n\n/** Max length we'll echo from an AS-supplied error description into errors. */\nconst MAX_AS_ERROR_LENGTH = 200;\n\n/**\n * Raised when the authorization server rejects a client credentials\n * exchange or the token endpoint is unreachable/malformed.\n *\n * The {@link kind} discriminator lets callers branch without\n * string-matching on the message:\n * - `oauth`: the AS returned a structured OAuth error (RFC 6749 §5.2 —\n * `invalid_client`, `invalid_grant`, `invalid_scope`, …). Read\n * {@link oauthError} / {@link oauthErrorDescription}.\n * - `malformed`: the AS returned HTTP 200 but no `access_token`, or a\n * non-JSON body.\n * - `network`: the exchange never reached the AS (DNS failure, connection\n * refused, timeout, TLS error).\n */\nexport class ClientCredentialsExchangeError extends Error {\n readonly code = 'client_credentials_exchange_failed';\n constructor(\n message: string,\n public readonly kind: 'oauth' | 'malformed' | 'network',\n public readonly oauthError?: string,\n public readonly oauthErrorDescription?: string,\n public readonly httpStatus?: number\n ) {\n super(message);\n this.name = 'ClientCredentialsExchangeError';\n }\n}\n\n/**\n * Options for {@link exchangeClientCredentials}.\n */\nexport interface ExchangeClientCredentialsOptions {\n /**\n * Custom fetch implementation (default: global `fetch`).\n * Primarily a testing hook — lets unit tests stub the authorization server\n * without intercepting the global.\n */\n fetch?: typeof fetch;\n /**\n * Request timeout in milliseconds (default: 30_000). Guards against a\n * silently hung authorization server blocking the caller indefinitely.\n */\n timeoutMs?: number;\n /**\n * Allow `token_endpoint` to resolve to a private / loopback IP address.\n * Default: false (SSRF guard). The CLI opts in because the operator is\n * explicitly configuring the endpoint; hosted consumers accepting\n * user-supplied configs should leave this off.\n */\n allowPrivateIp?: boolean;\n}\n\n/**\n * RFC 6749 §2.3.1 application/x-www-form-urlencoded encoding.\n *\n * Differs from `encodeURIComponent` in two important ways:\n * 1. Spaces are encoded as `+`, not `%20`.\n * 2. The characters `!'()*` are percent-encoded (URI component leaves them\n * alone).\n *\n * A secret containing any of those chars would hash to a different Basic\n * string than the AS computes, producing a spurious `invalid_client`.\n */\nfunction formUrlEncode(value: string): string {\n return encodeURIComponent(value)\n .replace(/%20/g, '+')\n .replace(/!/g, '%21')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29')\n .replace(/\\*/g, '%2A');\n}\n\n/**\n * Strip control chars (C0, C1, DEL) and truncate.\n *\n * Defensive cleanup on AS-controlled strings we print to a TTY. A\n * malicious or compromised AS could emit ANSI escape sequences or CRLF\n * payloads in `error_description`; we don't want those rewriting terminal\n * titles or forging log lines.\n */\nfunction sanitizeAsMessage(raw: string): string {\n // eslint-disable-next-line no-control-regex\n const stripped = raw.replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, ' ');\n if (stripped.length <= MAX_AS_ERROR_LENGTH) return stripped;\n return stripped.slice(0, MAX_AS_ERROR_LENGTH) + '…';\n}\n\n/**\n * Validate the token endpoint before we hit it. Three checks, in order:\n *\n * 1. Parse as a URL. Unparseable → `malformed`.\n * 2. Reject URLs that carry `user:pass@` userinfo — they'd leak via error\n * messages and log aggregators, and the OAuth client credentials live\n * in `client_id` / `client_secret`, never the URL.\n * 3. Reject plaintext `http://` outside `localhost` / loopback IPs.\n * RFC 6749 §3.1 requires TLS; the loopback carve-out covers local dev\n * authorization servers where plaintext is not a leak risk.\n * 4. Reject private / loopback / link-local IPs unless `allowPrivateIp`.\n * The library default is a SSRF guard; the CLI (operator-driven) opts\n * in because a user pointing at `localhost:8080` is legitimate. Network\n * code behind this call will still do DNS resolution, so this is a\n * best-effort literal-IP / known-loopback check — host allowlisting\n * upstream is the right control for adversarial environments.\n */\nfunction validateTokenEndpoint(tokenEndpoint: string, options: { allowPrivateIp?: boolean } = {}): URL {\n let url: URL;\n try {\n url = new URL(tokenEndpoint);\n } catch {\n throw new ClientCredentialsExchangeError(`Invalid token_endpoint URL: ${tokenEndpoint}`, 'malformed');\n }\n\n if (url.username || url.password) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must not contain userinfo (user:pass@). Put credentials in client_id / client_secret instead.`,\n 'malformed'\n );\n }\n\n const host = url.hostname;\n const isLoopback = host === 'localhost' || host === '127.0.0.1' || host === '[::1]' || host === '::1';\n\n if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLoopback)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must be HTTPS (got ${url.protocol}//${host}). The client secret would be sent in plaintext over HTTP. Use https:// (or http://localhost for local dev).`,\n 'malformed'\n );\n }\n\n if (!options.allowPrivateIp && isLikelyPrivateUrl(tokenEndpoint)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint resolves to a private or loopback address (${host}). Pass { allowPrivateIp: true } to exchangeClientCredentials / ensureClientCredentialsTokens if this is intentional (operator-driven CLI or local test setups).`,\n 'malformed'\n );\n }\n\n return url;\n}\n\n/**\n * Exchange client credentials for an access token.\n *\n * Secret values in `credentials.client_id` / `client_secret` may be `$ENV:VAR`\n * references — they are resolved here at exchange time. Missing env vars\n * surface as `MissingEnvSecretError` (from `secret-resolver`), which\n * callers typically print with the variable name for the user to fix.\n *\n * @throws {ClientCredentialsExchangeError} on any non-2xx response, malformed 200, or network failure\n * @throws {MissingEnvSecretError} if a `$ENV:VAR` ref points at an unset var\n */\nexport async function exchangeClientCredentials(\n credentials: AgentOAuthClientCredentials,\n options: ExchangeClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n // Wrap with the response-size-limit guard so a hostile token endpoint\n // can't buffer-bomb on every refresh. Pass-through when no\n // `withResponseSizeLimit` slot is active. (#1175)\n const fetchImpl = wrapFetchWithSizeLimit(options.fetch ?? fetch);\n const timeoutMs = options.timeoutMs ?? 30_000;\n\n validateTokenEndpoint(credentials.token_endpoint, { allowPrivateIp: options.allowPrivateIp });\n\n const clientId = resolveSecret(credentials.client_id);\n const clientSecret = resolveSecret(credentials.client_secret);\n const authMethod = credentials.auth_method ?? 'basic';\n\n const body = new URLSearchParams();\n body.set('grant_type', 'client_credentials');\n if (credentials.scope) {\n body.set('scope', credentials.scope);\n }\n // RFC 8707 resource indicators — emitted as one `resource` field per URI\n // so the AS receives the full list. URLSearchParams#append is the only\n // way to produce repeated keys in form encoding.\n if (credentials.resource) {\n const resources = Array.isArray(credentials.resource) ? credentials.resource : [credentials.resource];\n for (const r of resources) body.append('resource', r);\n }\n if (credentials.audience) {\n body.set('audience', credentials.audience);\n }\n\n const headers: Record<string, string> = {\n 'content-type': 'application/x-www-form-urlencoded',\n accept: 'application/json',\n };\n\n if (authMethod === 'basic') {\n // RFC 6749 §2.3.1: form-urlencode ID/secret before base64 (NOT URI\n // component encoding — space is `+`, and `!'()*` must be percent-\n // encoded). Most deployed servers accept raw values too, but spec\n // compliance avoids a footgun with secrets containing those chars.\n const encoded = Buffer.from(`${formUrlEncode(clientId)}:${formUrlEncode(clientSecret)}`, 'utf-8').toString(\n 'base64'\n );\n headers.authorization = `Basic ${encoded}`;\n } else {\n body.set('client_id', clientId);\n body.set('client_secret', clientSecret);\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n let response: Response;\n try {\n response = await fetchImpl(credentials.token_endpoint, {\n method: 'POST',\n headers,\n body: body.toString(),\n signal: controller.signal,\n });\n } catch (err) {\n if ((err as { name?: string }).name === 'AbortError') {\n throw new ClientCredentialsExchangeError(\n `Token endpoint ${credentials.token_endpoint} did not respond within ${timeoutMs}ms.`,\n 'network'\n );\n }\n throw new ClientCredentialsExchangeError(\n `Failed to reach token endpoint ${credentials.token_endpoint}: ${(err as Error).message}`,\n 'network'\n );\n } finally {\n clearTimeout(timeout);\n }\n\n const bodyText = await response.text();\n let parsed: Record<string, unknown> | undefined;\n try {\n parsed = bodyText ? (JSON.parse(bodyText) as Record<string, unknown>) : undefined;\n } catch {\n // Non-JSON response; parsed stays undefined, handled below.\n }\n\n if (!response.ok) {\n const rawOauthError = typeof parsed?.error === 'string' ? parsed.error : undefined;\n const rawOauthDesc = typeof parsed?.error_description === 'string' ? parsed.error_description : undefined;\n const oauthError = rawOauthError ? sanitizeAsMessage(rawOauthError) : undefined;\n const oauthDesc = rawOauthDesc ? sanitizeAsMessage(rawOauthDesc) : undefined;\n const message =\n oauthError || oauthDesc\n ? `Client credentials exchange failed: ${oauthError ?? 'error'}${oauthDesc ? ` — ${oauthDesc}` : ''}`\n : `Client credentials exchange failed with HTTP ${response.status}: ${sanitizeAsMessage(bodyText) || '(empty body)'}`;\n const kind = rawOauthError ? 'oauth' : 'malformed';\n throw new ClientCredentialsExchangeError(message, kind, oauthError, oauthDesc, response.status);\n }\n\n if (!parsed || typeof parsed.access_token !== 'string') {\n throw new ClientCredentialsExchangeError(\n `Token endpoint returned HTTP ${response.status} but no access_token. Body: ${sanitizeAsMessage(bodyText)}`,\n 'malformed',\n undefined,\n undefined,\n response.status\n );\n }\n\n return fromMCPTokens(parsed as unknown as OAuthTokens);\n}\n\n/**\n * Options for {@link ensureClientCredentialsTokens}.\n */\nexport interface EnsureClientCredentialsOptions extends ExchangeClientCredentialsOptions {\n /**\n * Storage backend used to persist refreshed tokens. Optional — if omitted,\n * tokens are only mutated on the in-memory `agent` object and the caller\n * is responsible for persisting.\n */\n storage?: OAuthConfigStorage;\n /**\n * Force a re-exchange even if the cached token looks valid. Useful after a\n * 401 in case the authorization server rotated something out-of-band.\n */\n force?: boolean;\n /**\n * Expiration skew (ms). Treat the token as expired this many milliseconds\n * before its nominal `expires_at` — protects against clock skew and\n * in-flight requests. Default: 60_000 (1 minute). The interactive auth\n * code flow uses 5 minutes; client credentials refresh is cheap (single\n * POST) so the shorter window is fine here.\n */\n expirationSkewMs?: number;\n}\n\n/**\n * In-flight refresh coalescing map. Keyed by the tuple\n * `(agent.id, token_endpoint, client_id)` — concurrent\n * `ensureClientCredentialsTokens` calls for the same credentials share a\n * single token POST instead of each racing to exchange the same secret.\n *\n * Two different `AgentConfig` objects that accidentally reuse the same\n * `id` (e.g. two tenants both creating `cli-agent`) but hold different\n * credentials won't cross-contaminate — the endpoint + client_id in the\n * key keeps them distinct.\n *\n * Cleared on completion regardless of success/failure.\n *\n * Note: this is an in-process map. Multi-process deployments (worker\n * pools, multiple CLI invocations, horizontally scaled Node servers)\n * don't coalesce across workers — each process will do its own refresh.\n * For the CLI this is fine; for high-throughput server deployments,\n * coalesce upstream at the storage layer.\n */\nconst inFlightRefresh = new Map<string, Promise<AgentOAuthTokens>>();\n\n/**\n * Compute the coalesce key for `ensureClientCredentialsTokens`. `force: true`\n * uses a distinct bucket so a 401-triggered forced refresh never piggybacks\n * on a still-pending non-forced exchange — the whole point of forcing is\n * that the in-flight token is *known* stale, so awaiting it would defeat\n * the retry.\n */\nfunction coalesceKeyFor(agent: AgentConfig, credentials: AgentOAuthClientCredentials, force: boolean): string {\n return `${force ? 'force' : 'normal'}\\u0000${agent.id}\\u0000${credentials.token_endpoint}\\u0000${credentials.client_id}`;\n}\n\n/**\n * Ensure an agent has a valid access token, refreshing via client credentials\n * if the cached one is missing or expired. Idempotent and safe to call\n * before every request.\n *\n * Concurrent calls for the same `agent.id` are coalesced into a single\n * token POST via an in-process promise map — the common case of a\n * storyboard fan-out firing 10 tool calls in parallel does one refresh,\n * not ten.\n *\n * **Mutation:** this function writes `agent.oauth_tokens` in place. That is\n * the contract the MCP SDK's `OAuthClientProvider` pattern also uses, and\n * it lets the CLI's file-backed storage see the same object. Callers that\n * share an `AgentConfig` across different logical agents must copy first.\n *\n * Precondition: `agent.oauth_client_credentials` must be set. Throws a plain\n * Error if not — callers are expected to branch on its presence before\n * calling this.\n */\nexport async function ensureClientCredentialsTokens(\n agent: AgentConfig,\n options: EnsureClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n if (!agent.oauth_client_credentials) {\n throw new Error(\n `ensureClientCredentialsTokens called for agent '${agent.id}' with no oauth_client_credentials configured.`\n );\n }\n\n const skew = options.expirationSkewMs ?? 60_000;\n const cached = agent.oauth_tokens;\n const cachedIsValid =\n !options.force &&\n cached?.access_token &&\n (!cached.expires_at || new Date(cached.expires_at).getTime() - Date.now() > skew);\n\n if (cachedIsValid) {\n return cached!;\n }\n\n const coalesceKey = coalesceKeyFor(agent, agent.oauth_client_credentials, options.force === true);\n const existing = inFlightRefresh.get(coalesceKey);\n if (existing) {\n const tokens = await existing;\n agent.oauth_tokens = tokens;\n return tokens;\n }\n\n const exchange = (async () => {\n try {\n const tokens = await exchangeClientCredentials(agent.oauth_client_credentials!, {\n fetch: options.fetch,\n timeoutMs: options.timeoutMs,\n allowPrivateIp: options.allowPrivateIp,\n });\n agent.oauth_tokens = tokens;\n if (options.storage) {\n await options.storage.saveAgent(agent);\n }\n return tokens;\n } finally {\n inFlightRefresh.delete(coalesceKey);\n }\n })();\n\n inFlightRefresh.set(coalesceKey, exchange);\n return exchange;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/auth/oauth/ClientCredentialsFlow.ts"],"sourcesContent":["/**\n * OAuth 2.0 client credentials grant — RFC 6749 §4.4.\n *\n * For machine-to-machine use cases (CI compliance runs, automated checks)\n * where there is no user to walk through an authorization-code flow. The\n * client POSTs its ID + secret to the authorization server's token endpoint\n * and gets back an access token directly.\n *\n * This file provides:\n * - {@link exchangeClientCredentials}: one-shot token exchange. Use for the\n * initial fetch during `--save-auth` and for forced refresh.\n * - {@link ensureClientCredentialsTokens}: reads the cached tokens on an\n * `AgentConfig`, checks expiry, re-exchanges if needed, and persists the\n * refreshed tokens via an optional {@link OAuthConfigStorage}.\n *\n * Why a dedicated module instead of the MCP SDK's `OAuthClientProvider`:\n * client credentials doesn't need discovery, dynamic client registration,\n * PKCE, or authorization code exchange — all the plumbing that provider\n * exists to coordinate. A direct token POST and a cached-token check is the\n * entire protocol. The call path keeps using the plain `Authorization:\n * Bearer` header path — the same path it already uses for `auth_token`.\n *\n * **Security note (library consumers):** `token_endpoint` is passed to\n * `fetch` directly. Callers that accept untrusted `AgentConfig` values\n * from network requests (e.g. a hosted compliance service accepting\n * user-supplied configs) MUST validate the URL against an allowlist or\n * SSRF-block private IPs before invoking these helpers. The CLI and\n * operator-driven flows are already trusted.\n */\n\nimport { fromMCPTokens, type OAuthTokens, type AgentConfig, type AgentOAuthTokens } from './types';\nimport type { AgentOAuthClientCredentials } from '../../types/adcp';\nimport type { OAuthConfigStorage } from './types';\nimport { resolveSecret } from './secret-resolver';\nimport { isLikelyPrivateUrl } from '../../net';\nimport { wrapFetchWithSizeLimit } from '../../protocols/responseSizeLimit';\nimport { createAbortError, throwIfAborted, withAbortSignal } from '../../protocols/abort';\n\n/** Max length we'll echo from an AS-supplied error description into errors. */\nconst MAX_AS_ERROR_LENGTH = 200;\n\n/**\n * Raised when the authorization server rejects a client credentials\n * exchange or the token endpoint is unreachable/malformed.\n *\n * The {@link kind} discriminator lets callers branch without\n * string-matching on the message:\n * - `oauth`: the AS returned a structured OAuth error (RFC 6749 §5.2 —\n * `invalid_client`, `invalid_grant`, `invalid_scope`, …). Read\n * {@link oauthError} / {@link oauthErrorDescription}.\n * - `malformed`: the AS returned HTTP 200 but no `access_token`, or a\n * non-JSON body.\n * - `network`: the exchange never reached the AS (DNS failure, connection\n * refused, timeout, TLS error).\n */\nexport class ClientCredentialsExchangeError extends Error {\n readonly code = 'client_credentials_exchange_failed';\n constructor(\n message: string,\n public readonly kind: 'oauth' | 'malformed' | 'network',\n public readonly oauthError?: string,\n public readonly oauthErrorDescription?: string,\n public readonly httpStatus?: number\n ) {\n super(message);\n this.name = 'ClientCredentialsExchangeError';\n }\n}\n\n/**\n * Options for {@link exchangeClientCredentials}.\n */\nexport interface ExchangeClientCredentialsOptions {\n /**\n * Custom fetch implementation (default: global `fetch`).\n * Primarily a testing hook — lets unit tests stub the authorization server\n * without intercepting the global.\n */\n fetch?: typeof fetch;\n /**\n * Request timeout in milliseconds (default: 30_000). Guards against a\n * silently hung authorization server blocking the caller indefinitely.\n */\n timeoutMs?: number;\n /**\n * Allow `token_endpoint` to resolve to a private / loopback IP address.\n * Default: false (SSRF guard). The CLI opts in because the operator is\n * explicitly configuring the endpoint; hosted consumers accepting\n * user-supplied configs should leave this off.\n */\n allowPrivateIp?: boolean;\n /** Caller-owned cancellation signal, composed with `timeoutMs`. */\n signal?: AbortSignal;\n}\n\n/**\n * RFC 6749 §2.3.1 application/x-www-form-urlencoded encoding.\n *\n * Differs from `encodeURIComponent` in two important ways:\n * 1. Spaces are encoded as `+`, not `%20`.\n * 2. The characters `!'()*` are percent-encoded (URI component leaves them\n * alone).\n *\n * A secret containing any of those chars would hash to a different Basic\n * string than the AS computes, producing a spurious `invalid_client`.\n */\nfunction formUrlEncode(value: string): string {\n return encodeURIComponent(value)\n .replace(/%20/g, '+')\n .replace(/!/g, '%21')\n .replace(/'/g, '%27')\n .replace(/\\(/g, '%28')\n .replace(/\\)/g, '%29')\n .replace(/\\*/g, '%2A');\n}\n\n/**\n * Strip control chars (C0, C1, DEL) and truncate.\n *\n * Defensive cleanup on AS-controlled strings we print to a TTY. A\n * malicious or compromised AS could emit ANSI escape sequences or CRLF\n * payloads in `error_description`; we don't want those rewriting terminal\n * titles or forging log lines.\n */\nfunction sanitizeAsMessage(raw: string): string {\n // eslint-disable-next-line no-control-regex\n const stripped = raw.replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, ' ');\n if (stripped.length <= MAX_AS_ERROR_LENGTH) return stripped;\n return stripped.slice(0, MAX_AS_ERROR_LENGTH) + '…';\n}\n\n/**\n * Validate the token endpoint before we hit it. Three checks, in order:\n *\n * 1. Parse as a URL. Unparseable → `malformed`.\n * 2. Reject URLs that carry `user:pass@` userinfo — they'd leak via error\n * messages and log aggregators, and the OAuth client credentials live\n * in `client_id` / `client_secret`, never the URL.\n * 3. Reject plaintext `http://` outside `localhost` / loopback IPs.\n * RFC 6749 §3.1 requires TLS; the loopback carve-out covers local dev\n * authorization servers where plaintext is not a leak risk.\n * 4. Reject private / loopback / link-local IPs unless `allowPrivateIp`.\n * The library default is a SSRF guard; the CLI (operator-driven) opts\n * in because a user pointing at `localhost:8080` is legitimate. Network\n * code behind this call will still do DNS resolution, so this is a\n * best-effort literal-IP / known-loopback check — host allowlisting\n * upstream is the right control for adversarial environments.\n */\nfunction validateTokenEndpoint(tokenEndpoint: string, options: { allowPrivateIp?: boolean } = {}): URL {\n let url: URL;\n try {\n url = new URL(tokenEndpoint);\n } catch {\n throw new ClientCredentialsExchangeError(`Invalid token_endpoint URL: ${tokenEndpoint}`, 'malformed');\n }\n\n if (url.username || url.password) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must not contain userinfo (user:pass@). Put credentials in client_id / client_secret instead.`,\n 'malformed'\n );\n }\n\n const host = url.hostname;\n const isLoopback = host === 'localhost' || host === '127.0.0.1' || host === '[::1]' || host === '::1';\n\n if (url.protocol !== 'https:' && !(url.protocol === 'http:' && isLoopback)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint must be HTTPS (got ${url.protocol}//${host}). The client secret would be sent in plaintext over HTTP. Use https:// (or http://localhost for local dev).`,\n 'malformed'\n );\n }\n\n if (!options.allowPrivateIp && isLikelyPrivateUrl(tokenEndpoint)) {\n throw new ClientCredentialsExchangeError(\n `token_endpoint resolves to a private or loopback address (${host}). Pass { allowPrivateIp: true } to exchangeClientCredentials / ensureClientCredentialsTokens if this is intentional (operator-driven CLI or local test setups).`,\n 'malformed'\n );\n }\n\n return url;\n}\n\n/**\n * Exchange client credentials for an access token.\n *\n * Secret values in `credentials.client_id` / `client_secret` may be `$ENV:VAR`\n * references — they are resolved here at exchange time. Missing env vars\n * surface as `MissingEnvSecretError` (from `secret-resolver`), which\n * callers typically print with the variable name for the user to fix.\n *\n * @throws {ClientCredentialsExchangeError} on any non-2xx response, malformed 200, or network failure\n * @throws {MissingEnvSecretError} if a `$ENV:VAR` ref points at an unset var\n */\nexport async function exchangeClientCredentials(\n credentials: AgentOAuthClientCredentials,\n options: ExchangeClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n throwIfAborted(options.signal);\n\n // Wrap with the response-size-limit guard so a hostile token endpoint\n // can't buffer-bomb on every refresh. Pass-through when no\n // `withResponseSizeLimit` slot is active. (#1175)\n const fetchImpl = wrapFetchWithSizeLimit(options.fetch ?? fetch);\n const timeoutMs = options.timeoutMs ?? 30_000;\n\n validateTokenEndpoint(credentials.token_endpoint, { allowPrivateIp: options.allowPrivateIp });\n\n const clientId = resolveSecret(credentials.client_id);\n const clientSecret = resolveSecret(credentials.client_secret);\n const authMethod = credentials.auth_method ?? 'basic';\n\n const body = new URLSearchParams();\n body.set('grant_type', 'client_credentials');\n if (credentials.scope) {\n body.set('scope', credentials.scope);\n }\n // RFC 8707 resource indicators — emitted as one `resource` field per URI\n // so the AS receives the full list. URLSearchParams#append is the only\n // way to produce repeated keys in form encoding.\n if (credentials.resource) {\n const resources = Array.isArray(credentials.resource) ? credentials.resource : [credentials.resource];\n for (const r of resources) body.append('resource', r);\n }\n if (credentials.audience) {\n body.set('audience', credentials.audience);\n }\n\n const headers: Record<string, string> = {\n 'content-type': 'application/x-www-form-urlencoded',\n accept: 'application/json',\n };\n\n if (authMethod === 'basic') {\n // RFC 6749 §2.3.1: form-urlencode ID/secret before base64 (NOT URI\n // component encoding — space is `+`, and `!'()*` must be percent-\n // encoded). Most deployed servers accept raw values too, but spec\n // compliance avoids a footgun with secrets containing those chars.\n const encoded = Buffer.from(`${formUrlEncode(clientId)}:${formUrlEncode(clientSecret)}`, 'utf-8').toString(\n 'base64'\n );\n headers.authorization = `Basic ${encoded}`;\n } else {\n body.set('client_id', clientId);\n body.set('client_secret', clientSecret);\n }\n\n let response: Response;\n let bodyText: string;\n const timeoutError = new Error(`Client credentials exchange timed out after ${timeoutMs}ms`);\n timeoutError.name = 'TimeoutError';\n try {\n ({ response, bodyText } = await withAbortSignal(\n [options.signal],\n timeoutMs,\n async signal => {\n const tokenResponse = await fetchImpl(credentials.token_endpoint, {\n method: 'POST',\n headers,\n body: body.toString(),\n signal,\n });\n return { response: tokenResponse, bodyText: await tokenResponse.text() };\n },\n { timeoutError }\n ));\n } catch (err) {\n if (options.signal?.aborted) {\n throw createAbortError(options.signal.reason);\n }\n if (err === timeoutError) {\n throw new ClientCredentialsExchangeError(\n `Token endpoint ${credentials.token_endpoint} did not respond within ${timeoutMs}ms.`,\n 'network'\n );\n }\n throw new ClientCredentialsExchangeError(\n `Failed to reach token endpoint ${credentials.token_endpoint}: ${(err as Error).message}`,\n 'network'\n );\n }\n\n let parsed: Record<string, unknown> | undefined;\n try {\n parsed = bodyText ? (JSON.parse(bodyText) as Record<string, unknown>) : undefined;\n } catch {\n // Non-JSON response; parsed stays undefined, handled below.\n }\n\n if (!response.ok) {\n const rawOauthError = typeof parsed?.error === 'string' ? parsed.error : undefined;\n const rawOauthDesc = typeof parsed?.error_description === 'string' ? parsed.error_description : undefined;\n const oauthError = rawOauthError ? sanitizeAsMessage(rawOauthError) : undefined;\n const oauthDesc = rawOauthDesc ? sanitizeAsMessage(rawOauthDesc) : undefined;\n const message =\n oauthError || oauthDesc\n ? `Client credentials exchange failed: ${oauthError ?? 'error'}${oauthDesc ? ` — ${oauthDesc}` : ''}`\n : `Client credentials exchange failed with HTTP ${response.status}: ${sanitizeAsMessage(bodyText) || '(empty body)'}`;\n const kind = rawOauthError ? 'oauth' : 'malformed';\n throw new ClientCredentialsExchangeError(message, kind, oauthError, oauthDesc, response.status);\n }\n\n if (!parsed || typeof parsed.access_token !== 'string') {\n throw new ClientCredentialsExchangeError(\n `Token endpoint returned HTTP ${response.status} but no access_token. Body: ${sanitizeAsMessage(bodyText)}`,\n 'malformed',\n undefined,\n undefined,\n response.status\n );\n }\n\n return fromMCPTokens(parsed as unknown as OAuthTokens);\n}\n\n/**\n * Options for {@link ensureClientCredentialsTokens}.\n */\nexport interface EnsureClientCredentialsOptions extends ExchangeClientCredentialsOptions {\n /**\n * Storage backend used to persist refreshed tokens. Optional — if omitted,\n * tokens are only mutated on the in-memory `agent` object and the caller\n * is responsible for persisting.\n */\n storage?: OAuthConfigStorage;\n /**\n * Force a re-exchange even if the cached token looks valid. Useful after a\n * 401 in case the authorization server rotated something out-of-band.\n */\n force?: boolean;\n /**\n * Expiration skew (ms). Treat the token as expired this many milliseconds\n * before its nominal `expires_at` — protects against clock skew and\n * in-flight requests. Default: 60_000 (1 minute). The interactive auth\n * code flow uses 5 minutes; client credentials refresh is cheap (single\n * POST) so the shorter window is fine here.\n */\n expirationSkewMs?: number;\n}\n\n/**\n * In-flight refresh coalescing map. Scoped by `AgentConfig` object identity\n * so only callers deliberately sharing one configuration can share a bearer.\n * A string key built from public OAuth fields is insufficient here: two\n * tenants can reuse an agent id, endpoint, and client id while differing in\n * secret, scope, audience, or resource.\n *\n * Cleared on completion regardless of success/failure.\n *\n * Note: this is an in-process map. Multi-process deployments (worker\n * pools, multiple CLI invocations, horizontally scaled Node servers)\n * don't coalesce across workers — each process will do its own refresh.\n * For the CLI this is fine; for high-throughput server deployments,\n * coalesce upstream at the storage layer.\n */\ninterface InFlightRefresh {\n promise: Promise<AgentOAuthTokens>;\n controller: AbortController;\n waiters: number;\n settled: boolean;\n}\n\ntype RefreshMode = 'normal' | 'force';\n\nconst inFlightRefresh = new WeakMap<AgentConfig, Map<RefreshMode, InFlightRefresh>>();\n\nasync function waitForRefresh(entry: InFlightRefresh, signal?: AbortSignal): Promise<AgentOAuthTokens> {\n if (signal?.aborted) throw createAbortError(signal.reason);\n entry.waiters += 1;\n let abortListener: (() => void) | undefined;\n try {\n if (!signal) return await entry.promise;\n const aborted = new Promise<never>((_resolve, reject) => {\n abortListener = () => reject(createAbortError(signal.reason));\n signal.addEventListener('abort', abortListener, { once: true });\n });\n return await Promise.race([entry.promise, aborted]);\n } finally {\n if (abortListener && signal) signal.removeEventListener('abort', abortListener);\n entry.waiters -= 1;\n if (entry.waiters === 0 && !entry.settled && !entry.controller.signal.aborted) {\n entry.controller.abort(createAbortError(signal?.reason ?? 'No callers remain for token refresh'));\n }\n }\n}\n\n/**\n * Ensure an agent has a valid access token, refreshing via client credentials\n * if the cached one is missing or expired. Idempotent and safe to call\n * before every request.\n *\n * Concurrent calls for the same `agent.id` are coalesced into a single\n * token POST via an in-process promise map — the common case of a\n * storyboard fan-out firing 10 tool calls in parallel does one refresh,\n * not ten.\n *\n * **Mutation:** this function writes `agent.oauth_tokens` in place. That is\n * the contract the MCP SDK's `OAuthClientProvider` pattern also uses, and\n * it lets the CLI's file-backed storage see the same object. Callers that\n * share an `AgentConfig` across different logical agents must copy first.\n *\n * Precondition: `agent.oauth_client_credentials` must be set. Throws a plain\n * Error if not — callers are expected to branch on its presence before\n * calling this.\n */\nexport async function ensureClientCredentialsTokens(\n agent: AgentConfig,\n options: EnsureClientCredentialsOptions = {}\n): Promise<AgentOAuthTokens> {\n throwIfAborted(options.signal);\n\n if (!agent.oauth_client_credentials) {\n throw new Error(\n `ensureClientCredentialsTokens called for agent '${agent.id}' with no oauth_client_credentials configured.`\n );\n }\n\n const skew = options.expirationSkewMs ?? 60_000;\n const cached = agent.oauth_tokens;\n const cachedIsValid =\n !options.force &&\n cached?.access_token &&\n (!cached.expires_at || new Date(cached.expires_at).getTime() - Date.now() > skew);\n\n if (cachedIsValid) {\n return cached!;\n }\n\n const refreshMode: RefreshMode = options.force ? 'force' : 'normal';\n let agentRefreshes = inFlightRefresh.get(agent);\n const existing = agentRefreshes?.get(refreshMode);\n if (existing && !existing.controller.signal.aborted) {\n const tokens = await waitForRefresh(existing, options.signal);\n agent.oauth_tokens = tokens;\n return tokens;\n }\n\n const controller = new AbortController();\n const entry: InFlightRefresh = {\n promise: undefined as unknown as Promise<AgentOAuthTokens>,\n controller,\n waiters: 0,\n settled: false,\n };\n if (!agentRefreshes) {\n agentRefreshes = new Map();\n inFlightRefresh.set(agent, agentRefreshes);\n }\n entry.promise = (async () => {\n try {\n const tokens = await exchangeClientCredentials(agent.oauth_client_credentials!, {\n fetch: options.fetch,\n timeoutMs: options.timeoutMs,\n allowPrivateIp: options.allowPrivateIp,\n signal: controller.signal,\n });\n agent.oauth_tokens = tokens;\n if (options.storage) {\n await options.storage.saveAgent(agent);\n }\n return tokens;\n } finally {\n entry.settled = true;\n if (agentRefreshes?.get(refreshMode) === entry) {\n agentRefreshes.delete(refreshMode);\n if (agentRefreshes.size === 0) inFlightRefresh.delete(agent);\n }\n }\n })();\n\n agentRefreshes.set(refreshMode, entry);\n return waitForRefresh(entry, options.signal);\n}\n"],"mappings":"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","names":[]}
@@ -85,6 +85,8 @@ export interface DiscoverAuthorizationOptions {
85
85
  timeoutMs?: number;
86
86
  /** Scoped fetch implementation for the agent, PRM, and AS metadata probes. */
87
87
  fetchFn?: typeof fetch;
88
+ /** Caller cancellation, including the absolute task deadline. */
89
+ signal?: AbortSignal;
88
90
  /**
89
91
  * If provided, use this `WWW-Authenticate` header verbatim instead of
90
92
  * re-probing the agent. Use this when you already have a 401 response in
@@ -128,4 +130,5 @@ export declare function probeAuthChallenge(agentUrl: string, options?: {
128
130
  allowPrivateIp?: boolean;
129
131
  timeoutMs?: number;
130
132
  fetchFn?: typeof fetch;
133
+ signal?: AbortSignal;
131
134
  }): Promise<WWWAuthenticateChallenge | null>;
@@ -85,6 +85,8 @@ export interface DiscoverAuthorizationOptions {
85
85
  timeoutMs?: number;
86
86
  /** Scoped fetch implementation for the agent, PRM, and AS metadata probes. */
87
87
  fetchFn?: typeof fetch;
88
+ /** Caller cancellation, including the absolute task deadline. */
89
+ signal?: AbortSignal;
88
90
  /**
89
91
  * If provided, use this `WWW-Authenticate` header verbatim instead of
90
92
  * re-probing the agent. Use this when you already have a 401 response in
@@ -128,5 +130,6 @@ export declare function probeAuthChallenge(agentUrl: string, options?: {
128
130
  allowPrivateIp?: boolean;
129
131
  timeoutMs?: number;
130
132
  fetchFn?: typeof fetch;
133
+ signal?: AbortSignal;
131
134
  }): Promise<WWWAuthenticateChallenge | null>;
132
135
  //# sourceMappingURL=authorization-required.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authorization-required.d.ts","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/authorization-required.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,2BAA2B,EAA0B,MAAM,cAAc,CAAC;AACnF,OAAO,EAAwB,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AA8DpF;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sGAAsG;IACtG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sFAAsF;IACtF,cAAc,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAAC;IACrD,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,SAAS,EAAE,wBAAwB,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,uBAAwB,SAAQ,2BAA2B;IACtE,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAG,qBAAqB,CAAU;IAClD,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;gBAErC,YAAY,EAAE,yBAAyB,EAAE,OAAO,CAAC,EAAE,MAAM;CAStE;AA+BD;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,iEAAiE;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iCAAiC,CACrD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAiH3C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACrF,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAI1C"}
1
+ {"version":3,"file":"authorization-required.d.ts","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/authorization-required.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,2BAA2B,EAA0B,MAAM,cAAc,CAAC;AAEnF,OAAO,EAAwB,KAAK,wBAAwB,EAAE,MAAM,eAAe,CAAC;AA8DpF;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sGAAsG;IACtG,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,kFAAkF;IAClF,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,sFAAsF;IACtF,cAAc,CAAC,EAAE,UAAU,GAAG,sBAAsB,CAAC;IACrD,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0DAA0D;IAC1D,SAAS,EAAE,wBAAwB,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,uBAAwB,SAAQ,2BAA2B;IACtE,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAG,qBAAqB,CAAU;IAClD,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC;gBAErC,YAAY,EAAE,yBAAyB,EAAE,OAAO,CAAC,EAAE,MAAM;CAStE;AA+BD;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,iEAAiE;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,iEAAiE;IACjE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,iCAAiC,CACrD,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAoI3C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GAC3G,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAU1C"}