@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
@@ -25,6 +25,7 @@ __export(authorization_required_exports, {
25
25
  module.exports = __toCommonJS(authorization_required_exports);
26
26
  var import_net = require('../../net/index.js');
27
27
  var import_errors = require('../../errors/index.js');
28
+ var import_abort = require('../../protocols/abort.js');
28
29
  var import_diagnostics = require('./diagnostics.js');
29
30
  const MAX_DISPLAY_STRING = 256;
30
31
  const MAX_SCOPES = 64;
@@ -87,7 +88,13 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
87
88
  const allowPrivateIpForHop = (url) => allowPrivateIpOnAgent && agentOrigin !== void 0 && originOf(url) === agentOrigin;
88
89
  let challengeHeader = options.wwwAuthenticate;
89
90
  if (!challengeHeader) {
90
- const probe = await probeAgent401(agentUrl, allowPrivateIpOnAgent, options.timeoutMs, options.fetchFn);
91
+ const probe = await probeAgent401(
92
+ agentUrl,
93
+ allowPrivateIpOnAgent,
94
+ options.timeoutMs,
95
+ options.fetchFn,
96
+ options.signal
97
+ );
91
98
  if (probe.status !== 401) {
92
99
  return null;
93
100
  }
@@ -108,7 +115,8 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
108
115
  challenge.resource_metadata,
109
116
  allowPrivateIpForHop(challenge.resource_metadata),
110
117
  options.timeoutMs,
111
- options.fetchFn
118
+ options.fetchFn,
119
+ options.signal
112
120
  );
113
121
  if (prm && typeof prm === "object") {
114
122
  const resource = prm.resource;
@@ -128,7 +136,13 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
128
136
  let md;
129
137
  let source;
130
138
  if (asUrl) {
131
- const res = await fetchJson(asUrl, allowPrivateIpForHop(asUrl), options.timeoutMs, options.fetchFn);
139
+ const res = await fetchJson(
140
+ asUrl,
141
+ allowPrivateIpForHop(asUrl),
142
+ options.timeoutMs,
143
+ options.fetchFn,
144
+ options.signal
145
+ );
132
146
  if (res && typeof res === "object") {
133
147
  md = res;
134
148
  source = "rfc-8414";
@@ -137,7 +151,13 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
137
151
  if (!md) {
138
152
  const oidcUrl = buildOidcDiscoveryUrl(requirements.authorizationServer);
139
153
  if (oidcUrl) {
140
- const res = await fetchJson(oidcUrl, allowPrivateIpForHop(oidcUrl), options.timeoutMs, options.fetchFn);
154
+ const res = await fetchJson(
155
+ oidcUrl,
156
+ allowPrivateIpForHop(oidcUrl),
157
+ options.timeoutMs,
158
+ options.fetchFn,
159
+ options.signal
160
+ );
141
161
  if (res && typeof res === "object") {
142
162
  md = res;
143
163
  source = "openid-configuration";
@@ -168,11 +188,17 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
168
188
  return requirements;
169
189
  }
170
190
  async function probeAuthChallenge(agentUrl, options = {}) {
171
- const probe = await probeAgent401(agentUrl, options.allowPrivateIp ?? false, options.timeoutMs, options.fetchFn);
191
+ const probe = await probeAgent401(
192
+ agentUrl,
193
+ options.allowPrivateIp ?? false,
194
+ options.timeoutMs,
195
+ options.fetchFn,
196
+ options.signal
197
+ );
172
198
  if (probe.status !== 401) return null;
173
199
  return (0, import_diagnostics.parseWWWAuthenticate)(probe.wwwAuthenticate ?? null);
174
200
  }
175
- async function probeAgent401(agentUrl, allowPrivateIp, timeoutMs, fetchFn) {
201
+ async function probeAgent401(agentUrl, allowPrivateIp, timeoutMs, fetchFn, signal) {
176
202
  const body = JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list" });
177
203
  try {
178
204
  const res = await (0, import_net.ssrfSafeFetch)(agentUrl, {
@@ -183,11 +209,13 @@ async function probeAgent401(agentUrl, allowPrivateIp, timeoutMs, fetchFn) {
183
209
  },
184
210
  body,
185
211
  allowPrivateIp,
212
+ signal,
186
213
  ...timeoutMs !== void 0 ? { timeoutMs } : {},
187
214
  ...fetchFn ? { trustedFetchFn: fetchFn } : {}
188
215
  });
189
216
  return { status: res.status, wwwAuthenticate: res.headers["www-authenticate"] };
190
217
  } catch {
218
+ (0, import_abort.throwIfAborted)(signal);
191
219
  return { status: 0 };
192
220
  }
193
221
  }
@@ -218,18 +246,20 @@ function buildOidcDiscoveryUrl(issuer) {
218
246
  const base = u.pathname.endsWith("/") ? `${u.origin}${u.pathname.slice(0, -1)}` : `${u.origin}${u.pathname}`;
219
247
  return `${base}/.well-known/openid-configuration`;
220
248
  }
221
- async function fetchJson(url, allowPrivateIp, timeoutMs, fetchFn) {
249
+ async function fetchJson(url, allowPrivateIp, timeoutMs, fetchFn, signal) {
222
250
  try {
223
251
  const res = await (0, import_net.ssrfSafeFetch)(url, {
224
252
  method: "GET",
225
253
  headers: { accept: "application/json" },
226
254
  allowPrivateIp,
255
+ signal,
227
256
  ...timeoutMs !== void 0 ? { timeoutMs } : {},
228
257
  ...fetchFn ? { trustedFetchFn: fetchFn } : {}
229
258
  });
230
259
  if (res.status !== 200) return void 0;
231
260
  return (0, import_net.decodeBodyAsJsonOrText)(res.body, res.headers["content-type"]);
232
261
  } catch {
262
+ (0, import_abort.throwIfAborted)(signal);
233
263
  return void 0;
234
264
  }
235
265
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/auth/oauth/authorization-required.ts"],"sourcesContent":["/**\n * Zero-config OAuth discovery + actionable authorization errors.\n *\n * When a library consumer calls an OAuth-gated MCP agent without saved\n * credentials, they get a `NeedsAuthorizationError` containing everything\n * needed to either run an interactive flow or present a clear prompt — no\n * re-probing required.\n *\n * Design note: this module only *discovers* — it never opens a browser or\n * writes state. Interactive flow handling stays in the caller (CLI or a\n * bespoke `OAuthFlowHandler`) so library behavior is predictable.\n */\nimport { ssrfSafeFetch, decodeBodyAsJsonOrText } from '../../net';\nimport { AuthenticationRequiredError, type OAuthMetadataInfo } from '../../errors';\nimport { parseWWWAuthenticate, type WWWAuthenticateChallenge } from './diagnostics';\n\n/**\n * Maximum length of an individual server-supplied string we copy into the\n * `AuthorizationRequirements` payload. Anything longer is truncated with a\n * `…` suffix so hostile agents can't smuggle megabyte error-descriptions\n * into operator-facing prompts and logs.\n */\nconst MAX_DISPLAY_STRING = 256;\n\n/**\n * Maximum number of scope strings we copy into `scopesSupported`. RFC 8414\n * allows an unbounded array; hostile servers have sent thousands.\n */\nconst MAX_SCOPES = 64;\n\n/**\n * Maximum number of auth-params we preserve under `challenge.params`. Bounds\n * memory pressure from hostile servers that pack the `WWW-Authenticate`\n * header with unknown auth-params.\n */\nconst MAX_CHALLENGE_PARAMS = 32;\n\n/**\n * Strip ASCII control characters (excluding TAB) from a server-supplied\n * string that may be shown to a human. Defeats terminal-hijack tricks like\n * `\\x1b]0;pwned\\x07` (rewrites terminal title), `\\r` (overwrites prompt),\n * and `\\x1b[2J` (clears screen). Also truncates over-long values.\n */\nfunction sanitizeDisplay(value: string): string {\n const stripped = value.replace(/[\\x00-\\x08\\x0b-\\x1f\\x7f]/g, '');\n if (stripped.length <= MAX_DISPLAY_STRING) return stripped;\n return `${stripped.slice(0, MAX_DISPLAY_STRING - 1)}…`;\n}\n\n/**\n * Sanitize the parsed `WWW-Authenticate` challenge before embedding it in a\n * `NeedsAuthorizationError`. Consumers that render `requirements.challenge`\n * to a terminal should never see control characters. Caps `params` count to\n * bound hostile servers.\n *\n * The `scheme` is already lowercased + token-constrained by the parser.\n * Param keys are also token-constrained so they're safe; only values need\n * sanitizing.\n */\nfunction sanitizeChallenge(c: WWWAuthenticateChallenge): WWWAuthenticateChallenge {\n const params: Record<string, string> = {};\n for (const [k, v] of Object.entries(c.params)) {\n if (Object.keys(params).length >= MAX_CHALLENGE_PARAMS) break;\n params[k] = sanitizeDisplay(v);\n }\n return {\n scheme: c.scheme,\n ...(c.realm !== undefined ? { realm: sanitizeDisplay(c.realm) } : {}),\n ...(c.error !== undefined ? { error: sanitizeDisplay(c.error) } : {}),\n ...(c.error_description !== undefined ? { error_description: sanitizeDisplay(c.error_description) } : {}),\n ...(c.scope !== undefined ? { scope: sanitizeDisplay(c.scope) } : {}),\n ...(c.resource_metadata !== undefined ? { resource_metadata: sanitizeDisplay(c.resource_metadata) } : {}),\n params,\n };\n}\n\n/**\n * Structured description of what an agent's authorization server requires\n * before it will accept a `tools/call`. Produced by\n * {@link discoverAuthorizationRequirements}.\n */\nexport interface AuthorizationRequirements {\n /** The agent URL we probed. */\n agentUrl: string;\n /** Resource URL the agent advertises in its `WWW-Authenticate` / PRM (RFC 9728). */\n resource?: string;\n /** URL of the protected-resource-metadata document (from `WWW-Authenticate: resource_metadata=…`). */\n resourceMetadataUrl?: string;\n /** First `authorization_servers[0]` from the protected-resource metadata. */\n authorizationServer?: string;\n /**\n * All `authorization_servers` advertised by the PRM, in declaration order.\n * The walker only probes `[0]` (PRM preference order — see RFC 9728 §3.3);\n * the full list is exposed so callers can surface multi-issuer deployments\n * in diagnostics. A length > 1 is uncommon and worth flagging to the\n * operator — typically a federation partner or a staged migration.\n */\n authorizationServers?: string[];\n /** `authorization_endpoint` from the authorization-server metadata (RFC 8414). */\n authorizationEndpoint?: string;\n /** `token_endpoint` from the authorization-server metadata. */\n tokenEndpoint?: string;\n /** `registration_endpoint` if the AS supports RFC 7591 dynamic client registration. */\n registrationEndpoint?: string;\n /** Scopes advertised by the AS (RFC 8414 `scopes_supported`). */\n scopesSupported?: string[];\n /**\n * `grant_types_supported` advertised by the AS (RFC 8414). `undefined` when\n * the AS didn't publish the field — per RFC 8414 that defaults to\n * `[\"authorization_code\", \"implicit\"]`. Clients should treat absence as\n * \"unknown, try your grant and see,\" not as proof the grant is unsupported.\n */\n grantTypesSupported?: string[];\n /** True when the AS metadata came from the OIDC fallback URL rather than RFC 8414. */\n metadataSource?: 'rfc-8414' | 'openid-configuration';\n /** Scope hinted in the `WWW-Authenticate` challenge's `scope` auth-param. */\n challengeScope?: string;\n /** Raw parsed challenge the agent returned on the 401. */\n challenge: WWWAuthenticateChallenge;\n}\n\n/**\n * Error raised when an agent returns a 401 and we do not have credentials\n * to satisfy it. Carries everything needed to run an interactive OAuth flow\n * or show the operator an actionable prompt.\n *\n * Extends {@link AuthenticationRequiredError} so existing callers that catch\n * `AuthenticationRequiredError` automatically receive the richer variant —\n * they can downcast with `instanceof NeedsAuthorizationError` when they\n * want walked discovery metadata.\n *\n * Note on `code` vs `subCode`:\n * The parent class declares `readonly code = 'AUTHENTICATION_REQUIRED'` as\n * a class field that re-initializes on every construction, so a child-side\n * override attempt is silently overwritten under `useDefineForClassFields`.\n * The narrow discriminator is exposed as `subCode` — prefer\n * `instanceof NeedsAuthorizationError` for type-narrowing and use `subCode`\n * only for structured-log keying.\n *\n * Note on `hasOAuth`:\n * The inherited getter returns `true` only when both `authorization_endpoint`\n * and `token_endpoint` were walked successfully. A partially-walked\n * requirements record (PRM reachable but AS metadata missing) still yields\n * `hasOAuth === false` even though `requirements.authorizationServer` is set.\n * Treat it as \"we have enough to start a flow,\" not \"server wants OAuth.\"\n */\nexport class NeedsAuthorizationError extends AuthenticationRequiredError {\n /** Narrow discriminator for consumers that already know about this class. */\n readonly subCode = 'needs_authorization' as const;\n readonly requirements: AuthorizationRequirements;\n\n constructor(requirements: AuthorizationRequirements, message?: string) {\n super(requirements.agentUrl, synthesizeOAuthMetadata(requirements), message ?? defaultMessage(requirements));\n this.name = 'NeedsAuthorizationError';\n this.requirements = requirements;\n // Extend the parent's `details` payload so structured-logging consumers\n // that read `err.details` (via `extractErrorInfo` or equivalent) see the\n // full walked chain, not just the synthesized one-hop oauthMetadata.\n this.details = { ...(this.details as object | undefined), requirements };\n }\n}\n\n/**\n * Build an {@link OAuthMetadataInfo} for the base-class constructor so that\n * legacy callers still see a non-empty `oauthMetadata` + working\n * `hasOAuth`/`authorizationUrl` getters on the error. When discovery didn't\n * yield enough info, return undefined and let the base class degrade\n * gracefully.\n */\nfunction synthesizeOAuthMetadata(req: AuthorizationRequirements): OAuthMetadataInfo | undefined {\n if (!req.authorizationEndpoint || !req.tokenEndpoint) return undefined;\n return {\n authorization_endpoint: req.authorizationEndpoint,\n token_endpoint: req.tokenEndpoint,\n ...(req.registrationEndpoint ? { registration_endpoint: req.registrationEndpoint } : {}),\n ...(req.authorizationServer ? { issuer: req.authorizationServer } : {}),\n };\n}\n\nfunction defaultMessage(req: AuthorizationRequirements): string {\n const parts = [`Agent ${sanitizeDisplay(req.agentUrl)} requires OAuth authorization.`];\n if (req.authorizationServer) {\n parts.push(`Authorization server: ${req.authorizationServer}.`);\n }\n if (req.challenge.error_description) {\n parts.push(`Server said: ${sanitizeDisplay(req.challenge.error_description)}.`);\n }\n parts.push('Provide an OAuthFlowHandler or run an interactive flow to complete authorization.');\n return parts.join(' ');\n}\n\n/**\n * Options for {@link discoverAuthorizationRequirements}.\n */\nexport interface DiscoverAuthorizationOptions {\n /** Allow http:// and private-IP probe targets. Default false. */\n allowPrivateIp?: boolean;\n /** Override per-probe HTTP timeout (ms). Default inherits from ssrfSafeFetch (10s). */\n timeoutMs?: number;\n /** Scoped fetch implementation for the agent, PRM, and AS metadata probes. */\n fetchFn?: typeof fetch;\n /**\n * If provided, use this `WWW-Authenticate` header verbatim instead of\n * re-probing the agent. Use this when you already have a 401 response in\n * hand and want to avoid a second round-trip.\n */\n wwwAuthenticate?: string;\n}\n\n/**\n * Walk the OAuth discovery chain starting from an agent URL. Returns\n * `AuthorizationRequirements` when the agent demands OAuth, or `null` when a\n * `tools/list` call succeeds without credentials.\n *\n * Strategy:\n * 1. POST `tools/list` to the agent with no `Authorization` header.\n * 2. If 401 + `WWW-Authenticate: Bearer`: parse the challenge.\n * 3. If the challenge carries `resource_metadata=…`: GET it and read\n * `resource` + `authorization_servers`.\n * 4. For the first `authorization_servers[0]`: GET `/.well-known/oauth-authorization-server`\n * and read `authorization_endpoint`, `token_endpoint`, `registration_endpoint`,\n * `scopes_supported`.\n * 5. Return a structured record.\n *\n * Anything missing from the chain surfaces as `undefined` on the result —\n * callers can still present a partial picture without re-probing.\n */\nexport async function discoverAuthorizationRequirements(\n agentUrl: string,\n options: DiscoverAuthorizationOptions = {}\n): Promise<AuthorizationRequirements | null> {\n // `allowPrivateIp` authorizes the agent probe. Chain hops (PRM, AS\n // metadata) inherit that trust ONLY when they share the agent's origin —\n // a compromised agent that advertises a private-IP authorization server\n // on a different origin would otherwise pivot a discovery walk into the\n // host's internal network.\n const allowPrivateIpOnAgent = options.allowPrivateIp ?? false;\n const agentOrigin = originOf(agentUrl);\n const allowPrivateIpForHop = (url: string): boolean =>\n allowPrivateIpOnAgent && agentOrigin !== undefined && originOf(url) === agentOrigin;\n\n let challengeHeader = options.wwwAuthenticate;\n if (!challengeHeader) {\n const probe = await probeAgent401(agentUrl, allowPrivateIpOnAgent, options.timeoutMs, options.fetchFn);\n if (probe.status !== 401) {\n // 200, 403, 5xx, or network error — not an OAuth 401 we can act on.\n return null;\n }\n challengeHeader = probe.wwwAuthenticate;\n }\n\n const challenge = parseWWWAuthenticate(challengeHeader ?? null);\n if (!challenge || challenge.scheme !== 'bearer') {\n // A 401 without a Bearer challenge isn't our kind of problem — let it propagate.\n return null;\n }\n\n const requirements: AuthorizationRequirements = {\n agentUrl,\n resourceMetadataUrl: challenge.resource_metadata ? sanitizeDisplay(challenge.resource_metadata) : undefined,\n challengeScope: challenge.scope ? sanitizeDisplay(challenge.scope) : undefined,\n challenge: sanitizeChallenge(challenge),\n };\n\n // Walk protected-resource metadata (RFC 9728 §3). Private-IP targets are\n // only allowed when the hop's origin matches the agent's.\n if (challenge.resource_metadata && isSafeHttpUrl(challenge.resource_metadata)) {\n const prm = await fetchJson(\n challenge.resource_metadata,\n allowPrivateIpForHop(challenge.resource_metadata),\n options.timeoutMs,\n options.fetchFn\n );\n if (prm && typeof prm === 'object') {\n const resource = (prm as { resource?: unknown }).resource;\n const servers = (prm as { authorization_servers?: unknown }).authorization_servers;\n if (typeof resource === 'string') requirements.resource = sanitizeDisplay(resource);\n if (Array.isArray(servers)) {\n const validServers = servers\n .filter((s: unknown): s is string => typeof s === 'string' && isSafeHttpUrl(s))\n .map(sanitizeDisplay);\n if (validServers.length > 0) {\n requirements.authorizationServers = validServers;\n requirements.authorizationServer = validServers[0];\n }\n }\n }\n }\n\n // Walk authorization-server metadata using the first issuer. RFC 8414 §3\n // first, then OIDC Discovery 1.0 fallback for AS deployments (Keycloak in\n // OIDC mode, Ping, ADFS) that only publish at\n // `{issuer}/.well-known/openid-configuration`.\n if (requirements.authorizationServer) {\n const asUrl = buildAuthorizationServerMetadataUrl(requirements.authorizationServer);\n let md: Record<string, unknown> | undefined;\n let source: 'rfc-8414' | 'openid-configuration' | undefined;\n if (asUrl) {\n const res = await fetchJson(asUrl, allowPrivateIpForHop(asUrl), options.timeoutMs, options.fetchFn);\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'rfc-8414';\n }\n }\n if (!md) {\n const oidcUrl = buildOidcDiscoveryUrl(requirements.authorizationServer);\n if (oidcUrl) {\n const res = await fetchJson(oidcUrl, allowPrivateIpForHop(oidcUrl), options.timeoutMs, options.fetchFn);\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'openid-configuration';\n }\n }\n }\n if (md) {\n requirements.metadataSource = source;\n if (typeof md.authorization_endpoint === 'string') {\n requirements.authorizationEndpoint = sanitizeDisplay(md.authorization_endpoint);\n }\n if (typeof md.token_endpoint === 'string') {\n requirements.tokenEndpoint = sanitizeDisplay(md.token_endpoint);\n }\n if (typeof md.registration_endpoint === 'string') {\n requirements.registrationEndpoint = sanitizeDisplay(md.registration_endpoint);\n }\n if (Array.isArray(md.scopes_supported)) {\n const scopes = md.scopes_supported\n .filter((s: unknown): s is string => typeof s === 'string')\n .slice(0, MAX_SCOPES)\n .map(sanitizeDisplay);\n if (scopes.length > 0) requirements.scopesSupported = scopes;\n }\n if (Array.isArray(md.grant_types_supported)) {\n const grants = md.grant_types_supported\n .filter((g: unknown): g is string => typeof g === 'string')\n .slice(0, 32)\n .map(sanitizeDisplay);\n if (grants.length > 0) requirements.grantTypesSupported = grants;\n }\n }\n }\n\n return requirements;\n}\n\n/**\n * Probe the agent for the parsed `WWW-Authenticate` challenge on a 401.\n *\n * Where `discoverAuthorizationRequirements` walks the full RFC 9728 → 8414\n * chain for Bearer/OAuth challenges, this helper is the catch-all: it works\n * for ANY scheme (Basic, Digest, Bearer-without-PRM, …) and returns the\n * structured challenge so callers can surface scheme-specific remediation\n * (e.g. \"use `--auth-scheme basic`\" when the gateway speaks RFC 7617).\n *\n * Returns `null` when the agent isn't responding with a 401, or when the\n * response carries no parseable `WWW-Authenticate`. Reuses `probeAgent401`\n * so the SSRF gate and timeout policy stay consistent with the OAuth path.\n */\nexport async function probeAuthChallenge(\n agentUrl: string,\n options: { allowPrivateIp?: boolean; timeoutMs?: number; fetchFn?: typeof fetch } = {}\n): Promise<WWWAuthenticateChallenge | null> {\n const probe = await probeAgent401(agentUrl, options.allowPrivateIp ?? false, options.timeoutMs, options.fetchFn);\n if (probe.status !== 401) return null;\n return parseWWWAuthenticate(probe.wwwAuthenticate ?? null);\n}\n\n/**\n * Fire a single unauthenticated `tools/list` at the agent and return the\n * status + `WWW-Authenticate` header. Used when the caller hasn't provided\n * a cached 401 response.\n */\nasync function probeAgent401(\n agentUrl: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch\n): Promise<{ status: number; wwwAuthenticate?: string }> {\n const body = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/list' });\n try {\n const res = await ssrfSafeFetch(agentUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n accept: 'application/json',\n },\n body,\n allowPrivateIp,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n return { status: res.status, wwwAuthenticate: res.headers['www-authenticate'] };\n } catch {\n return { status: 0 };\n }\n}\n\n/**\n * Check a URL is an absolute `http:`/`https:` URL before we hand it to\n * `ssrfSafeFetch`. Defeats `javascript:`, `file:`, `data:`, etc. the agent\n * might echo back in PRM or AS metadata. `ssrfSafeFetch` refuses non-HTTP\n * schemes too, but failing fast here gives a cleaner discovery flow and\n * avoids surfacing scheme errors as mysterious discovery misses.\n */\nfunction originOf(value: string): string | undefined {\n try {\n return new URL(value).origin;\n } catch {\n return undefined;\n }\n}\n\nfunction isSafeHttpUrl(value: string): boolean {\n try {\n const u = new URL(value);\n return u.protocol === 'https:' || u.protocol === 'http:';\n } catch {\n return false;\n }\n}\n\n/**\n * Build the authorization-server metadata URL for an issuer per RFC 8414 §3.\n *\n * For issuer `https://as.example.com/tenant1`, metadata lives at\n * `https://as.example.com/.well-known/oauth-authorization-server/tenant1`\n * (well-known prefix inserted BEFORE the issuer path, not after). This\n * matches how the MCP SDK and most authorization servers advertise metadata.\n */\nfunction buildAuthorizationServerMetadataUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const pathname = u.pathname.endsWith('/') ? u.pathname.slice(0, -1) : u.pathname;\n return `${u.origin}/.well-known/oauth-authorization-server${pathname}`;\n}\n\n/**\n * OpenID Connect Discovery 1.0 fallback URL. Some authorization servers\n * (Keycloak in OIDC mode, Ping, ADFS) only publish metadata at\n * `{issuer}/.well-known/openid-configuration` — path *suffixed*, not\n * prefixed. The OIDC discovery doc carries `token_endpoint`,\n * `authorization_endpoint`, and `grant_types_supported` with the same\n * semantics as RFC 8414, so it's a safe read-through when the RFC 8414\n * probe misses.\n */\nfunction buildOidcDiscoveryUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const base = u.pathname.endsWith('/') ? `${u.origin}${u.pathname.slice(0, -1)}` : `${u.origin}${u.pathname}`;\n return `${base}/.well-known/openid-configuration`;\n}\n\nasync function fetchJson(\n url: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch\n): Promise<unknown> {\n try {\n const res = await ssrfSafeFetch(url, {\n method: 'GET',\n headers: { accept: 'application/json' },\n allowPrivateIp,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n if (res.status !== 200) return undefined;\n return decodeBodyAsJsonOrText(res.body, res.headers['content-type']);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/auth/oauth/authorization-required.ts"],"sourcesContent":["/**\n * Zero-config OAuth discovery + actionable authorization errors.\n *\n * When a library consumer calls an OAuth-gated MCP agent without saved\n * credentials, they get a `NeedsAuthorizationError` containing everything\n * needed to either run an interactive flow or present a clear prompt — no\n * re-probing required.\n *\n * Design note: this module only *discovers* — it never opens a browser or\n * writes state. Interactive flow handling stays in the caller (CLI or a\n * bespoke `OAuthFlowHandler`) so library behavior is predictable.\n */\nimport { ssrfSafeFetch, decodeBodyAsJsonOrText } from '../../net';\nimport { AuthenticationRequiredError, type OAuthMetadataInfo } from '../../errors';\nimport { throwIfAborted } from '../../protocols/abort';\nimport { parseWWWAuthenticate, type WWWAuthenticateChallenge } from './diagnostics';\n\n/**\n * Maximum length of an individual server-supplied string we copy into the\n * `AuthorizationRequirements` payload. Anything longer is truncated with a\n * `…` suffix so hostile agents can't smuggle megabyte error-descriptions\n * into operator-facing prompts and logs.\n */\nconst MAX_DISPLAY_STRING = 256;\n\n/**\n * Maximum number of scope strings we copy into `scopesSupported`. RFC 8414\n * allows an unbounded array; hostile servers have sent thousands.\n */\nconst MAX_SCOPES = 64;\n\n/**\n * Maximum number of auth-params we preserve under `challenge.params`. Bounds\n * memory pressure from hostile servers that pack the `WWW-Authenticate`\n * header with unknown auth-params.\n */\nconst MAX_CHALLENGE_PARAMS = 32;\n\n/**\n * Strip ASCII control characters (excluding TAB) from a server-supplied\n * string that may be shown to a human. Defeats terminal-hijack tricks like\n * `\\x1b]0;pwned\\x07` (rewrites terminal title), `\\r` (overwrites prompt),\n * and `\\x1b[2J` (clears screen). Also truncates over-long values.\n */\nfunction sanitizeDisplay(value: string): string {\n const stripped = value.replace(/[\\x00-\\x08\\x0b-\\x1f\\x7f]/g, '');\n if (stripped.length <= MAX_DISPLAY_STRING) return stripped;\n return `${stripped.slice(0, MAX_DISPLAY_STRING - 1)}…`;\n}\n\n/**\n * Sanitize the parsed `WWW-Authenticate` challenge before embedding it in a\n * `NeedsAuthorizationError`. Consumers that render `requirements.challenge`\n * to a terminal should never see control characters. Caps `params` count to\n * bound hostile servers.\n *\n * The `scheme` is already lowercased + token-constrained by the parser.\n * Param keys are also token-constrained so they're safe; only values need\n * sanitizing.\n */\nfunction sanitizeChallenge(c: WWWAuthenticateChallenge): WWWAuthenticateChallenge {\n const params: Record<string, string> = {};\n for (const [k, v] of Object.entries(c.params)) {\n if (Object.keys(params).length >= MAX_CHALLENGE_PARAMS) break;\n params[k] = sanitizeDisplay(v);\n }\n return {\n scheme: c.scheme,\n ...(c.realm !== undefined ? { realm: sanitizeDisplay(c.realm) } : {}),\n ...(c.error !== undefined ? { error: sanitizeDisplay(c.error) } : {}),\n ...(c.error_description !== undefined ? { error_description: sanitizeDisplay(c.error_description) } : {}),\n ...(c.scope !== undefined ? { scope: sanitizeDisplay(c.scope) } : {}),\n ...(c.resource_metadata !== undefined ? { resource_metadata: sanitizeDisplay(c.resource_metadata) } : {}),\n params,\n };\n}\n\n/**\n * Structured description of what an agent's authorization server requires\n * before it will accept a `tools/call`. Produced by\n * {@link discoverAuthorizationRequirements}.\n */\nexport interface AuthorizationRequirements {\n /** The agent URL we probed. */\n agentUrl: string;\n /** Resource URL the agent advertises in its `WWW-Authenticate` / PRM (RFC 9728). */\n resource?: string;\n /** URL of the protected-resource-metadata document (from `WWW-Authenticate: resource_metadata=…`). */\n resourceMetadataUrl?: string;\n /** First `authorization_servers[0]` from the protected-resource metadata. */\n authorizationServer?: string;\n /**\n * All `authorization_servers` advertised by the PRM, in declaration order.\n * The walker only probes `[0]` (PRM preference order — see RFC 9728 §3.3);\n * the full list is exposed so callers can surface multi-issuer deployments\n * in diagnostics. A length > 1 is uncommon and worth flagging to the\n * operator — typically a federation partner or a staged migration.\n */\n authorizationServers?: string[];\n /** `authorization_endpoint` from the authorization-server metadata (RFC 8414). */\n authorizationEndpoint?: string;\n /** `token_endpoint` from the authorization-server metadata. */\n tokenEndpoint?: string;\n /** `registration_endpoint` if the AS supports RFC 7591 dynamic client registration. */\n registrationEndpoint?: string;\n /** Scopes advertised by the AS (RFC 8414 `scopes_supported`). */\n scopesSupported?: string[];\n /**\n * `grant_types_supported` advertised by the AS (RFC 8414). `undefined` when\n * the AS didn't publish the field — per RFC 8414 that defaults to\n * `[\"authorization_code\", \"implicit\"]`. Clients should treat absence as\n * \"unknown, try your grant and see,\" not as proof the grant is unsupported.\n */\n grantTypesSupported?: string[];\n /** True when the AS metadata came from the OIDC fallback URL rather than RFC 8414. */\n metadataSource?: 'rfc-8414' | 'openid-configuration';\n /** Scope hinted in the `WWW-Authenticate` challenge's `scope` auth-param. */\n challengeScope?: string;\n /** Raw parsed challenge the agent returned on the 401. */\n challenge: WWWAuthenticateChallenge;\n}\n\n/**\n * Error raised when an agent returns a 401 and we do not have credentials\n * to satisfy it. Carries everything needed to run an interactive OAuth flow\n * or show the operator an actionable prompt.\n *\n * Extends {@link AuthenticationRequiredError} so existing callers that catch\n * `AuthenticationRequiredError` automatically receive the richer variant —\n * they can downcast with `instanceof NeedsAuthorizationError` when they\n * want walked discovery metadata.\n *\n * Note on `code` vs `subCode`:\n * The parent class declares `readonly code = 'AUTHENTICATION_REQUIRED'` as\n * a class field that re-initializes on every construction, so a child-side\n * override attempt is silently overwritten under `useDefineForClassFields`.\n * The narrow discriminator is exposed as `subCode` — prefer\n * `instanceof NeedsAuthorizationError` for type-narrowing and use `subCode`\n * only for structured-log keying.\n *\n * Note on `hasOAuth`:\n * The inherited getter returns `true` only when both `authorization_endpoint`\n * and `token_endpoint` were walked successfully. A partially-walked\n * requirements record (PRM reachable but AS metadata missing) still yields\n * `hasOAuth === false` even though `requirements.authorizationServer` is set.\n * Treat it as \"we have enough to start a flow,\" not \"server wants OAuth.\"\n */\nexport class NeedsAuthorizationError extends AuthenticationRequiredError {\n /** Narrow discriminator for consumers that already know about this class. */\n readonly subCode = 'needs_authorization' as const;\n readonly requirements: AuthorizationRequirements;\n\n constructor(requirements: AuthorizationRequirements, message?: string) {\n super(requirements.agentUrl, synthesizeOAuthMetadata(requirements), message ?? defaultMessage(requirements));\n this.name = 'NeedsAuthorizationError';\n this.requirements = requirements;\n // Extend the parent's `details` payload so structured-logging consumers\n // that read `err.details` (via `extractErrorInfo` or equivalent) see the\n // full walked chain, not just the synthesized one-hop oauthMetadata.\n this.details = { ...(this.details as object | undefined), requirements };\n }\n}\n\n/**\n * Build an {@link OAuthMetadataInfo} for the base-class constructor so that\n * legacy callers still see a non-empty `oauthMetadata` + working\n * `hasOAuth`/`authorizationUrl` getters on the error. When discovery didn't\n * yield enough info, return undefined and let the base class degrade\n * gracefully.\n */\nfunction synthesizeOAuthMetadata(req: AuthorizationRequirements): OAuthMetadataInfo | undefined {\n if (!req.authorizationEndpoint || !req.tokenEndpoint) return undefined;\n return {\n authorization_endpoint: req.authorizationEndpoint,\n token_endpoint: req.tokenEndpoint,\n ...(req.registrationEndpoint ? { registration_endpoint: req.registrationEndpoint } : {}),\n ...(req.authorizationServer ? { issuer: req.authorizationServer } : {}),\n };\n}\n\nfunction defaultMessage(req: AuthorizationRequirements): string {\n const parts = [`Agent ${sanitizeDisplay(req.agentUrl)} requires OAuth authorization.`];\n if (req.authorizationServer) {\n parts.push(`Authorization server: ${req.authorizationServer}.`);\n }\n if (req.challenge.error_description) {\n parts.push(`Server said: ${sanitizeDisplay(req.challenge.error_description)}.`);\n }\n parts.push('Provide an OAuthFlowHandler or run an interactive flow to complete authorization.');\n return parts.join(' ');\n}\n\n/**\n * Options for {@link discoverAuthorizationRequirements}.\n */\nexport interface DiscoverAuthorizationOptions {\n /** Allow http:// and private-IP probe targets. Default false. */\n allowPrivateIp?: boolean;\n /** Override per-probe HTTP timeout (ms). Default inherits from ssrfSafeFetch (10s). */\n timeoutMs?: number;\n /** Scoped fetch implementation for the agent, PRM, and AS metadata probes. */\n fetchFn?: typeof fetch;\n /** Caller cancellation, including the absolute task deadline. */\n signal?: AbortSignal;\n /**\n * If provided, use this `WWW-Authenticate` header verbatim instead of\n * re-probing the agent. Use this when you already have a 401 response in\n * hand and want to avoid a second round-trip.\n */\n wwwAuthenticate?: string;\n}\n\n/**\n * Walk the OAuth discovery chain starting from an agent URL. Returns\n * `AuthorizationRequirements` when the agent demands OAuth, or `null` when a\n * `tools/list` call succeeds without credentials.\n *\n * Strategy:\n * 1. POST `tools/list` to the agent with no `Authorization` header.\n * 2. If 401 + `WWW-Authenticate: Bearer`: parse the challenge.\n * 3. If the challenge carries `resource_metadata=…`: GET it and read\n * `resource` + `authorization_servers`.\n * 4. For the first `authorization_servers[0]`: GET `/.well-known/oauth-authorization-server`\n * and read `authorization_endpoint`, `token_endpoint`, `registration_endpoint`,\n * `scopes_supported`.\n * 5. Return a structured record.\n *\n * Anything missing from the chain surfaces as `undefined` on the result —\n * callers can still present a partial picture without re-probing.\n */\nexport async function discoverAuthorizationRequirements(\n agentUrl: string,\n options: DiscoverAuthorizationOptions = {}\n): Promise<AuthorizationRequirements | null> {\n // `allowPrivateIp` authorizes the agent probe. Chain hops (PRM, AS\n // metadata) inherit that trust ONLY when they share the agent's origin —\n // a compromised agent that advertises a private-IP authorization server\n // on a different origin would otherwise pivot a discovery walk into the\n // host's internal network.\n const allowPrivateIpOnAgent = options.allowPrivateIp ?? false;\n const agentOrigin = originOf(agentUrl);\n const allowPrivateIpForHop = (url: string): boolean =>\n allowPrivateIpOnAgent && agentOrigin !== undefined && originOf(url) === agentOrigin;\n\n let challengeHeader = options.wwwAuthenticate;\n if (!challengeHeader) {\n const probe = await probeAgent401(\n agentUrl,\n allowPrivateIpOnAgent,\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (probe.status !== 401) {\n // 200, 403, 5xx, or network error — not an OAuth 401 we can act on.\n return null;\n }\n challengeHeader = probe.wwwAuthenticate;\n }\n\n const challenge = parseWWWAuthenticate(challengeHeader ?? null);\n if (!challenge || challenge.scheme !== 'bearer') {\n // A 401 without a Bearer challenge isn't our kind of problem — let it propagate.\n return null;\n }\n\n const requirements: AuthorizationRequirements = {\n agentUrl,\n resourceMetadataUrl: challenge.resource_metadata ? sanitizeDisplay(challenge.resource_metadata) : undefined,\n challengeScope: challenge.scope ? sanitizeDisplay(challenge.scope) : undefined,\n challenge: sanitizeChallenge(challenge),\n };\n\n // Walk protected-resource metadata (RFC 9728 §3). Private-IP targets are\n // only allowed when the hop's origin matches the agent's.\n if (challenge.resource_metadata && isSafeHttpUrl(challenge.resource_metadata)) {\n const prm = await fetchJson(\n challenge.resource_metadata,\n allowPrivateIpForHop(challenge.resource_metadata),\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (prm && typeof prm === 'object') {\n const resource = (prm as { resource?: unknown }).resource;\n const servers = (prm as { authorization_servers?: unknown }).authorization_servers;\n if (typeof resource === 'string') requirements.resource = sanitizeDisplay(resource);\n if (Array.isArray(servers)) {\n const validServers = servers\n .filter((s: unknown): s is string => typeof s === 'string' && isSafeHttpUrl(s))\n .map(sanitizeDisplay);\n if (validServers.length > 0) {\n requirements.authorizationServers = validServers;\n requirements.authorizationServer = validServers[0];\n }\n }\n }\n }\n\n // Walk authorization-server metadata using the first issuer. RFC 8414 §3\n // first, then OIDC Discovery 1.0 fallback for AS deployments (Keycloak in\n // OIDC mode, Ping, ADFS) that only publish at\n // `{issuer}/.well-known/openid-configuration`.\n if (requirements.authorizationServer) {\n const asUrl = buildAuthorizationServerMetadataUrl(requirements.authorizationServer);\n let md: Record<string, unknown> | undefined;\n let source: 'rfc-8414' | 'openid-configuration' | undefined;\n if (asUrl) {\n const res = await fetchJson(\n asUrl,\n allowPrivateIpForHop(asUrl),\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'rfc-8414';\n }\n }\n if (!md) {\n const oidcUrl = buildOidcDiscoveryUrl(requirements.authorizationServer);\n if (oidcUrl) {\n const res = await fetchJson(\n oidcUrl,\n allowPrivateIpForHop(oidcUrl),\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'openid-configuration';\n }\n }\n }\n if (md) {\n requirements.metadataSource = source;\n if (typeof md.authorization_endpoint === 'string') {\n requirements.authorizationEndpoint = sanitizeDisplay(md.authorization_endpoint);\n }\n if (typeof md.token_endpoint === 'string') {\n requirements.tokenEndpoint = sanitizeDisplay(md.token_endpoint);\n }\n if (typeof md.registration_endpoint === 'string') {\n requirements.registrationEndpoint = sanitizeDisplay(md.registration_endpoint);\n }\n if (Array.isArray(md.scopes_supported)) {\n const scopes = md.scopes_supported\n .filter((s: unknown): s is string => typeof s === 'string')\n .slice(0, MAX_SCOPES)\n .map(sanitizeDisplay);\n if (scopes.length > 0) requirements.scopesSupported = scopes;\n }\n if (Array.isArray(md.grant_types_supported)) {\n const grants = md.grant_types_supported\n .filter((g: unknown): g is string => typeof g === 'string')\n .slice(0, 32)\n .map(sanitizeDisplay);\n if (grants.length > 0) requirements.grantTypesSupported = grants;\n }\n }\n }\n\n return requirements;\n}\n\n/**\n * Probe the agent for the parsed `WWW-Authenticate` challenge on a 401.\n *\n * Where `discoverAuthorizationRequirements` walks the full RFC 9728 → 8414\n * chain for Bearer/OAuth challenges, this helper is the catch-all: it works\n * for ANY scheme (Basic, Digest, Bearer-without-PRM, …) and returns the\n * structured challenge so callers can surface scheme-specific remediation\n * (e.g. \"use `--auth-scheme basic`\" when the gateway speaks RFC 7617).\n *\n * Returns `null` when the agent isn't responding with a 401, or when the\n * response carries no parseable `WWW-Authenticate`. Reuses `probeAgent401`\n * so the SSRF gate and timeout policy stay consistent with the OAuth path.\n */\nexport async function probeAuthChallenge(\n agentUrl: string,\n options: { allowPrivateIp?: boolean; timeoutMs?: number; fetchFn?: typeof fetch; signal?: AbortSignal } = {}\n): Promise<WWWAuthenticateChallenge | null> {\n const probe = await probeAgent401(\n agentUrl,\n options.allowPrivateIp ?? false,\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (probe.status !== 401) return null;\n return parseWWWAuthenticate(probe.wwwAuthenticate ?? null);\n}\n\n/**\n * Fire a single unauthenticated `tools/list` at the agent and return the\n * status + `WWW-Authenticate` header. Used when the caller hasn't provided\n * a cached 401 response.\n */\nasync function probeAgent401(\n agentUrl: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch,\n signal?: AbortSignal\n): Promise<{ status: number; wwwAuthenticate?: string }> {\n const body = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/list' });\n try {\n const res = await ssrfSafeFetch(agentUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n accept: 'application/json',\n },\n body,\n allowPrivateIp,\n signal,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n return { status: res.status, wwwAuthenticate: res.headers['www-authenticate'] };\n } catch {\n throwIfAborted(signal);\n return { status: 0 };\n }\n}\n\n/**\n * Check a URL is an absolute `http:`/`https:` URL before we hand it to\n * `ssrfSafeFetch`. Defeats `javascript:`, `file:`, `data:`, etc. the agent\n * might echo back in PRM or AS metadata. `ssrfSafeFetch` refuses non-HTTP\n * schemes too, but failing fast here gives a cleaner discovery flow and\n * avoids surfacing scheme errors as mysterious discovery misses.\n */\nfunction originOf(value: string): string | undefined {\n try {\n return new URL(value).origin;\n } catch {\n return undefined;\n }\n}\n\nfunction isSafeHttpUrl(value: string): boolean {\n try {\n const u = new URL(value);\n return u.protocol === 'https:' || u.protocol === 'http:';\n } catch {\n return false;\n }\n}\n\n/**\n * Build the authorization-server metadata URL for an issuer per RFC 8414 §3.\n *\n * For issuer `https://as.example.com/tenant1`, metadata lives at\n * `https://as.example.com/.well-known/oauth-authorization-server/tenant1`\n * (well-known prefix inserted BEFORE the issuer path, not after). This\n * matches how the MCP SDK and most authorization servers advertise metadata.\n */\nfunction buildAuthorizationServerMetadataUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const pathname = u.pathname.endsWith('/') ? u.pathname.slice(0, -1) : u.pathname;\n return `${u.origin}/.well-known/oauth-authorization-server${pathname}`;\n}\n\n/**\n * OpenID Connect Discovery 1.0 fallback URL. Some authorization servers\n * (Keycloak in OIDC mode, Ping, ADFS) only publish metadata at\n * `{issuer}/.well-known/openid-configuration` — path *suffixed*, not\n * prefixed. The OIDC discovery doc carries `token_endpoint`,\n * `authorization_endpoint`, and `grant_types_supported` with the same\n * semantics as RFC 8414, so it's a safe read-through when the RFC 8414\n * probe misses.\n */\nfunction buildOidcDiscoveryUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const base = u.pathname.endsWith('/') ? `${u.origin}${u.pathname.slice(0, -1)}` : `${u.origin}${u.pathname}`;\n return `${base}/.well-known/openid-configuration`;\n}\n\nasync function fetchJson(\n url: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch,\n signal?: AbortSignal\n): Promise<unknown> {\n try {\n const res = await ssrfSafeFetch(url, {\n method: 'GET',\n headers: { accept: 'application/json' },\n allowPrivateIp,\n signal,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n if (res.status !== 200) return undefined;\n return decodeBodyAsJsonOrText(res.body, res.headers['content-type']);\n } catch {\n throwIfAborted(signal);\n return undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,iBAAsD;AACtD,oBAAoE;AACpE,mBAA+B;AAC/B,yBAAoE;AAQpE,MAAM,qBAAqB;AAM3B,MAAM,aAAa;AAOnB,MAAM,uBAAuB;AAQ7B,SAAS,gBAAgB,OAAuB;AAC9C,QAAM,WAAW,MAAM,QAAQ,6BAA6B,EAAE;AAC9D,MAAI,SAAS,UAAU,mBAAoB,QAAO;AAClD,SAAO,GAAG,SAAS,MAAM,GAAG,qBAAqB,CAAC,CAAC;AACrD;AAYA,SAAS,kBAAkB,GAAuD;AAChF,QAAM,SAAiC,CAAC;AACxC,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,EAAE,MAAM,GAAG;AAC7C,QAAI,OAAO,KAAK,MAAM,EAAE,UAAU,qBAAsB;AACxD,WAAO,CAAC,IAAI,gBAAgB,CAAC;AAAA,EAC/B;AACA,SAAO;AAAA,IACL,QAAQ,EAAE;AAAA,IACV,GAAI,EAAE,UAAU,SAAY,EAAE,OAAO,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,IACnE,GAAI,EAAE,UAAU,SAAY,EAAE,OAAO,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,IACnE,GAAI,EAAE,sBAAsB,SAAY,EAAE,mBAAmB,gBAAgB,EAAE,iBAAiB,EAAE,IAAI,CAAC;AAAA,IACvG,GAAI,EAAE,UAAU,SAAY,EAAE,OAAO,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,IACnE,GAAI,EAAE,sBAAsB,SAAY,EAAE,mBAAmB,gBAAgB,EAAE,iBAAiB,EAAE,IAAI,CAAC;AAAA,IACvG;AAAA,EACF;AACF;AAwEO,MAAM,gCAAgC,0CAA4B;AAAA;AAAA,EAE9D,UAAU;AAAA,EACV;AAAA,EAET,YAAY,cAAyC,SAAkB;AACrE,UAAM,aAAa,UAAU,wBAAwB,YAAY,GAAG,WAAW,eAAe,YAAY,CAAC;AAC3G,SAAK,OAAO;AACZ,SAAK,eAAe;AAIpB,SAAK,UAAU,EAAE,GAAI,KAAK,SAAgC,aAAa;AAAA,EACzE;AACF;AASA,SAAS,wBAAwB,KAA+D;AAC9F,MAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,cAAe,QAAO;AAC7D,SAAO;AAAA,IACL,wBAAwB,IAAI;AAAA,IAC5B,gBAAgB,IAAI;AAAA,IACpB,GAAI,IAAI,uBAAuB,EAAE,uBAAuB,IAAI,qBAAqB,IAAI,CAAC;AAAA,IACtF,GAAI,IAAI,sBAAsB,EAAE,QAAQ,IAAI,oBAAoB,IAAI,CAAC;AAAA,EACvE;AACF;AAEA,SAAS,eAAe,KAAwC;AAC9D,QAAM,QAAQ,CAAC,SAAS,gBAAgB,IAAI,QAAQ,CAAC,gCAAgC;AACrF,MAAI,IAAI,qBAAqB;AAC3B,UAAM,KAAK,yBAAyB,IAAI,mBAAmB,GAAG;AAAA,EAChE;AACA,MAAI,IAAI,UAAU,mBAAmB;AACnC,UAAM,KAAK,gBAAgB,gBAAgB,IAAI,UAAU,iBAAiB,CAAC,GAAG;AAAA,EAChF;AACA,QAAM,KAAK,mFAAmF;AAC9F,SAAO,MAAM,KAAK,GAAG;AACvB;AAwCA,eAAsB,kCACpB,UACA,UAAwC,CAAC,GACE;AAM3C,QAAM,wBAAwB,QAAQ,kBAAkB;AACxD,QAAM,cAAc,SAAS,QAAQ;AACrC,QAAM,uBAAuB,CAAC,QAC5B,yBAAyB,gBAAgB,UAAa,SAAS,GAAG,MAAM;AAE1E,MAAI,kBAAkB,QAAQ;AAC9B,MAAI,CAAC,iBAAiB;AACpB,UAAM,QAAQ,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AACA,QAAI,MAAM,WAAW,KAAK;AAExB,aAAO;AAAA,IACT;AACA,sBAAkB,MAAM;AAAA,EAC1B;AAEA,QAAM,gBAAY,yCAAqB,mBAAmB,IAAI;AAC9D,MAAI,CAAC,aAAa,UAAU,WAAW,UAAU;AAE/C,WAAO;AAAA,EACT;AAEA,QAAM,eAA0C;AAAA,IAC9C;AAAA,IACA,qBAAqB,UAAU,oBAAoB,gBAAgB,UAAU,iBAAiB,IAAI;AAAA,IAClG,gBAAgB,UAAU,QAAQ,gBAAgB,UAAU,KAAK,IAAI;AAAA,IACrE,WAAW,kBAAkB,SAAS;AAAA,EACxC;AAIA,MAAI,UAAU,qBAAqB,cAAc,UAAU,iBAAiB,GAAG;AAC7E,UAAM,MAAM,MAAM;AAAA,MAChB,UAAU;AAAA,MACV,qBAAqB,UAAU,iBAAiB;AAAA,MAChD,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AACA,QAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,YAAM,WAAY,IAA+B;AACjD,YAAM,UAAW,IAA4C;AAC7D,UAAI,OAAO,aAAa,SAAU,cAAa,WAAW,gBAAgB,QAAQ;AAClF,UAAI,MAAM,QAAQ,OAAO,GAAG;AAC1B,cAAM,eAAe,QAClB,OAAO,CAAC,MAA4B,OAAO,MAAM,YAAY,cAAc,CAAC,CAAC,EAC7E,IAAI,eAAe;AACtB,YAAI,aAAa,SAAS,GAAG;AAC3B,uBAAa,uBAAuB;AACpC,uBAAa,sBAAsB,aAAa,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAMA,MAAI,aAAa,qBAAqB;AACpC,UAAM,QAAQ,oCAAoC,aAAa,mBAAmB;AAClF,QAAI;AACJ,QAAI;AACJ,QAAI,OAAO;AACT,YAAM,MAAM,MAAM;AAAA,QAChB;AAAA,QACA,qBAAqB,KAAK;AAAA,QAC1B,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA,UAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,aAAK;AACL,iBAAS;AAAA,MACX;AAAA,IACF;AACA,QAAI,CAAC,IAAI;AACP,YAAM,UAAU,sBAAsB,aAAa,mBAAmB;AACtE,UAAI,SAAS;AACX,cAAM,MAAM,MAAM;AAAA,UAChB;AAAA,UACA,qBAAqB,OAAO;AAAA,UAC5B,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AACA,YAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,eAAK;AACL,mBAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AACA,QAAI,IAAI;AACN,mBAAa,iBAAiB;AAC9B,UAAI,OAAO,GAAG,2BAA2B,UAAU;AACjD,qBAAa,wBAAwB,gBAAgB,GAAG,sBAAsB;AAAA,MAChF;AACA,UAAI,OAAO,GAAG,mBAAmB,UAAU;AACzC,qBAAa,gBAAgB,gBAAgB,GAAG,cAAc;AAAA,MAChE;AACA,UAAI,OAAO,GAAG,0BAA0B,UAAU;AAChD,qBAAa,uBAAuB,gBAAgB,GAAG,qBAAqB;AAAA,MAC9E;AACA,UAAI,MAAM,QAAQ,GAAG,gBAAgB,GAAG;AACtC,cAAM,SAAS,GAAG,iBACf,OAAO,CAAC,MAA4B,OAAO,MAAM,QAAQ,EACzD,MAAM,GAAG,UAAU,EACnB,IAAI,eAAe;AACtB,YAAI,OAAO,SAAS,EAAG,cAAa,kBAAkB;AAAA,MACxD;AACA,UAAI,MAAM,QAAQ,GAAG,qBAAqB,GAAG;AAC3C,cAAM,SAAS,GAAG,sBACf,OAAO,CAAC,MAA4B,OAAO,MAAM,QAAQ,EACzD,MAAM,GAAG,EAAE,EACX,IAAI,eAAe;AACtB,YAAI,OAAO,SAAS,EAAG,cAAa,sBAAsB;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAeA,eAAsB,mBACpB,UACA,UAA0G,CAAC,GACjE;AAC1C,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,IACA,QAAQ,kBAAkB;AAAA,IAC1B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,MAAI,MAAM,WAAW,IAAK,QAAO;AACjC,aAAO,yCAAqB,MAAM,mBAAmB,IAAI;AAC3D;AAOA,eAAe,cACb,UACA,gBACA,WACA,SACA,QACuD;AACvD,QAAM,OAAO,KAAK,UAAU,EAAE,SAAS,OAAO,IAAI,GAAG,QAAQ,aAAa,CAAC;AAC3E,MAAI;AACF,UAAM,MAAM,UAAM,0BAAc,UAAU;AAAA,MACxC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,cAAc,SAAY,EAAE,UAAU,IAAI,CAAC;AAAA,MAC/C,GAAI,UAAU,EAAE,gBAAgB,QAAQ,IAAI,CAAC;AAAA,IAC/C,CAAC;AACD,WAAO,EAAE,QAAQ,IAAI,QAAQ,iBAAiB,IAAI,QAAQ,kBAAkB,EAAE;AAAA,EAChF,QAAQ;AACN,qCAAe,MAAM;AACrB,WAAO,EAAE,QAAQ,EAAE;AAAA,EACrB;AACF;AASA,SAAS,SAAS,OAAmC;AACnD,MAAI;AACF,WAAO,IAAI,IAAI,KAAK,EAAE;AAAA,EACxB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,OAAwB;AAC7C,MAAI;AACF,UAAM,IAAI,IAAI,IAAI,KAAK;AACvB,WAAO,EAAE,aAAa,YAAY,EAAE,aAAa;AAAA,EACnD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAUA,SAAS,oCAAoC,QAAoC;AAC/E,MAAI,CAAC,cAAc,MAAM,EAAG,QAAO;AACnC,QAAM,IAAI,IAAI,IAAI,MAAM;AACxB,QAAM,WAAW,EAAE,SAAS,SAAS,GAAG,IAAI,EAAE,SAAS,MAAM,GAAG,EAAE,IAAI,EAAE;AACxE,SAAO,GAAG,EAAE,MAAM,0CAA0C,QAAQ;AACtE;AAWA,SAAS,sBAAsB,QAAoC;AACjE,MAAI,CAAC,cAAc,MAAM,EAAG,QAAO;AACnC,QAAM,IAAI,IAAI,IAAI,MAAM;AACxB,QAAM,OAAO,EAAE,SAAS,SAAS,GAAG,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE,SAAS,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,MAAM,GAAG,EAAE,QAAQ;AAC1G,SAAO,GAAG,IAAI;AAChB;AAEA,eAAe,UACb,KACA,gBACA,WACA,SACA,QACkB;AAClB,MAAI;AACF,UAAM,MAAM,UAAM,0BAAc,KAAK;AAAA,MACnC,QAAQ;AAAA,MACR,SAAS,EAAE,QAAQ,mBAAmB;AAAA,MACtC;AAAA,MACA;AAAA,MACA,GAAI,cAAc,SAAY,EAAE,UAAU,IAAI,CAAC;AAAA,MAC/C,GAAI,UAAU,EAAE,gBAAgB,QAAQ,IAAI,CAAC;AAAA,IAC/C,CAAC;AACD,QAAI,IAAI,WAAW,IAAK,QAAO;AAC/B,eAAO,mCAAuB,IAAI,MAAM,IAAI,QAAQ,cAAc,CAAC;AAAA,EACrE,QAAQ;AACN,qCAAe,MAAM;AACrB,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,5 +1,6 @@
1
1
  import { ssrfSafeFetch, decodeBodyAsJsonOrText } from "../../net/index.mjs";
2
2
  import { AuthenticationRequiredError } from "../../errors/index.mjs";
3
+ import { throwIfAborted } from "../../protocols/abort.mjs";
3
4
  import { parseWWWAuthenticate } from "./diagnostics.mjs";
4
5
  const MAX_DISPLAY_STRING = 256;
5
6
  const MAX_SCOPES = 64;
@@ -62,7 +63,13 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
62
63
  const allowPrivateIpForHop = (url) => allowPrivateIpOnAgent && agentOrigin !== void 0 && originOf(url) === agentOrigin;
63
64
  let challengeHeader = options.wwwAuthenticate;
64
65
  if (!challengeHeader) {
65
- const probe = await probeAgent401(agentUrl, allowPrivateIpOnAgent, options.timeoutMs, options.fetchFn);
66
+ const probe = await probeAgent401(
67
+ agentUrl,
68
+ allowPrivateIpOnAgent,
69
+ options.timeoutMs,
70
+ options.fetchFn,
71
+ options.signal
72
+ );
66
73
  if (probe.status !== 401) {
67
74
  return null;
68
75
  }
@@ -83,7 +90,8 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
83
90
  challenge.resource_metadata,
84
91
  allowPrivateIpForHop(challenge.resource_metadata),
85
92
  options.timeoutMs,
86
- options.fetchFn
93
+ options.fetchFn,
94
+ options.signal
87
95
  );
88
96
  if (prm && typeof prm === "object") {
89
97
  const resource = prm.resource;
@@ -103,7 +111,13 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
103
111
  let md;
104
112
  let source;
105
113
  if (asUrl) {
106
- const res = await fetchJson(asUrl, allowPrivateIpForHop(asUrl), options.timeoutMs, options.fetchFn);
114
+ const res = await fetchJson(
115
+ asUrl,
116
+ allowPrivateIpForHop(asUrl),
117
+ options.timeoutMs,
118
+ options.fetchFn,
119
+ options.signal
120
+ );
107
121
  if (res && typeof res === "object") {
108
122
  md = res;
109
123
  source = "rfc-8414";
@@ -112,7 +126,13 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
112
126
  if (!md) {
113
127
  const oidcUrl = buildOidcDiscoveryUrl(requirements.authorizationServer);
114
128
  if (oidcUrl) {
115
- const res = await fetchJson(oidcUrl, allowPrivateIpForHop(oidcUrl), options.timeoutMs, options.fetchFn);
129
+ const res = await fetchJson(
130
+ oidcUrl,
131
+ allowPrivateIpForHop(oidcUrl),
132
+ options.timeoutMs,
133
+ options.fetchFn,
134
+ options.signal
135
+ );
116
136
  if (res && typeof res === "object") {
117
137
  md = res;
118
138
  source = "openid-configuration";
@@ -143,11 +163,17 @@ async function discoverAuthorizationRequirements(agentUrl, options = {}) {
143
163
  return requirements;
144
164
  }
145
165
  async function probeAuthChallenge(agentUrl, options = {}) {
146
- const probe = await probeAgent401(agentUrl, options.allowPrivateIp ?? false, options.timeoutMs, options.fetchFn);
166
+ const probe = await probeAgent401(
167
+ agentUrl,
168
+ options.allowPrivateIp ?? false,
169
+ options.timeoutMs,
170
+ options.fetchFn,
171
+ options.signal
172
+ );
147
173
  if (probe.status !== 401) return null;
148
174
  return parseWWWAuthenticate(probe.wwwAuthenticate ?? null);
149
175
  }
150
- async function probeAgent401(agentUrl, allowPrivateIp, timeoutMs, fetchFn) {
176
+ async function probeAgent401(agentUrl, allowPrivateIp, timeoutMs, fetchFn, signal) {
151
177
  const body = JSON.stringify({ jsonrpc: "2.0", id: 1, method: "tools/list" });
152
178
  try {
153
179
  const res = await ssrfSafeFetch(agentUrl, {
@@ -158,11 +184,13 @@ async function probeAgent401(agentUrl, allowPrivateIp, timeoutMs, fetchFn) {
158
184
  },
159
185
  body,
160
186
  allowPrivateIp,
187
+ signal,
161
188
  ...timeoutMs !== void 0 ? { timeoutMs } : {},
162
189
  ...fetchFn ? { trustedFetchFn: fetchFn } : {}
163
190
  });
164
191
  return { status: res.status, wwwAuthenticate: res.headers["www-authenticate"] };
165
192
  } catch {
193
+ throwIfAborted(signal);
166
194
  return { status: 0 };
167
195
  }
168
196
  }
@@ -193,18 +221,20 @@ function buildOidcDiscoveryUrl(issuer) {
193
221
  const base = u.pathname.endsWith("/") ? `${u.origin}${u.pathname.slice(0, -1)}` : `${u.origin}${u.pathname}`;
194
222
  return `${base}/.well-known/openid-configuration`;
195
223
  }
196
- async function fetchJson(url, allowPrivateIp, timeoutMs, fetchFn) {
224
+ async function fetchJson(url, allowPrivateIp, timeoutMs, fetchFn, signal) {
197
225
  try {
198
226
  const res = await ssrfSafeFetch(url, {
199
227
  method: "GET",
200
228
  headers: { accept: "application/json" },
201
229
  allowPrivateIp,
230
+ signal,
202
231
  ...timeoutMs !== void 0 ? { timeoutMs } : {},
203
232
  ...fetchFn ? { trustedFetchFn: fetchFn } : {}
204
233
  });
205
234
  if (res.status !== 200) return void 0;
206
235
  return decodeBodyAsJsonOrText(res.body, res.headers["content-type"]);
207
236
  } catch {
237
+ throwIfAborted(signal);
208
238
  return void 0;
209
239
  }
210
240
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/auth/oauth/authorization-required.ts"],"sourcesContent":["/**\n * Zero-config OAuth discovery + actionable authorization errors.\n *\n * When a library consumer calls an OAuth-gated MCP agent without saved\n * credentials, they get a `NeedsAuthorizationError` containing everything\n * needed to either run an interactive flow or present a clear prompt — no\n * re-probing required.\n *\n * Design note: this module only *discovers* — it never opens a browser or\n * writes state. Interactive flow handling stays in the caller (CLI or a\n * bespoke `OAuthFlowHandler`) so library behavior is predictable.\n */\nimport { ssrfSafeFetch, decodeBodyAsJsonOrText } from '../../net';\nimport { AuthenticationRequiredError, type OAuthMetadataInfo } from '../../errors';\nimport { parseWWWAuthenticate, type WWWAuthenticateChallenge } from './diagnostics';\n\n/**\n * Maximum length of an individual server-supplied string we copy into the\n * `AuthorizationRequirements` payload. Anything longer is truncated with a\n * `…` suffix so hostile agents can't smuggle megabyte error-descriptions\n * into operator-facing prompts and logs.\n */\nconst MAX_DISPLAY_STRING = 256;\n\n/**\n * Maximum number of scope strings we copy into `scopesSupported`. RFC 8414\n * allows an unbounded array; hostile servers have sent thousands.\n */\nconst MAX_SCOPES = 64;\n\n/**\n * Maximum number of auth-params we preserve under `challenge.params`. Bounds\n * memory pressure from hostile servers that pack the `WWW-Authenticate`\n * header with unknown auth-params.\n */\nconst MAX_CHALLENGE_PARAMS = 32;\n\n/**\n * Strip ASCII control characters (excluding TAB) from a server-supplied\n * string that may be shown to a human. Defeats terminal-hijack tricks like\n * `\\x1b]0;pwned\\x07` (rewrites terminal title), `\\r` (overwrites prompt),\n * and `\\x1b[2J` (clears screen). Also truncates over-long values.\n */\nfunction sanitizeDisplay(value: string): string {\n const stripped = value.replace(/[\\x00-\\x08\\x0b-\\x1f\\x7f]/g, '');\n if (stripped.length <= MAX_DISPLAY_STRING) return stripped;\n return `${stripped.slice(0, MAX_DISPLAY_STRING - 1)}…`;\n}\n\n/**\n * Sanitize the parsed `WWW-Authenticate` challenge before embedding it in a\n * `NeedsAuthorizationError`. Consumers that render `requirements.challenge`\n * to a terminal should never see control characters. Caps `params` count to\n * bound hostile servers.\n *\n * The `scheme` is already lowercased + token-constrained by the parser.\n * Param keys are also token-constrained so they're safe; only values need\n * sanitizing.\n */\nfunction sanitizeChallenge(c: WWWAuthenticateChallenge): WWWAuthenticateChallenge {\n const params: Record<string, string> = {};\n for (const [k, v] of Object.entries(c.params)) {\n if (Object.keys(params).length >= MAX_CHALLENGE_PARAMS) break;\n params[k] = sanitizeDisplay(v);\n }\n return {\n scheme: c.scheme,\n ...(c.realm !== undefined ? { realm: sanitizeDisplay(c.realm) } : {}),\n ...(c.error !== undefined ? { error: sanitizeDisplay(c.error) } : {}),\n ...(c.error_description !== undefined ? { error_description: sanitizeDisplay(c.error_description) } : {}),\n ...(c.scope !== undefined ? { scope: sanitizeDisplay(c.scope) } : {}),\n ...(c.resource_metadata !== undefined ? { resource_metadata: sanitizeDisplay(c.resource_metadata) } : {}),\n params,\n };\n}\n\n/**\n * Structured description of what an agent's authorization server requires\n * before it will accept a `tools/call`. Produced by\n * {@link discoverAuthorizationRequirements}.\n */\nexport interface AuthorizationRequirements {\n /** The agent URL we probed. */\n agentUrl: string;\n /** Resource URL the agent advertises in its `WWW-Authenticate` / PRM (RFC 9728). */\n resource?: string;\n /** URL of the protected-resource-metadata document (from `WWW-Authenticate: resource_metadata=…`). */\n resourceMetadataUrl?: string;\n /** First `authorization_servers[0]` from the protected-resource metadata. */\n authorizationServer?: string;\n /**\n * All `authorization_servers` advertised by the PRM, in declaration order.\n * The walker only probes `[0]` (PRM preference order — see RFC 9728 §3.3);\n * the full list is exposed so callers can surface multi-issuer deployments\n * in diagnostics. A length > 1 is uncommon and worth flagging to the\n * operator — typically a federation partner or a staged migration.\n */\n authorizationServers?: string[];\n /** `authorization_endpoint` from the authorization-server metadata (RFC 8414). */\n authorizationEndpoint?: string;\n /** `token_endpoint` from the authorization-server metadata. */\n tokenEndpoint?: string;\n /** `registration_endpoint` if the AS supports RFC 7591 dynamic client registration. */\n registrationEndpoint?: string;\n /** Scopes advertised by the AS (RFC 8414 `scopes_supported`). */\n scopesSupported?: string[];\n /**\n * `grant_types_supported` advertised by the AS (RFC 8414). `undefined` when\n * the AS didn't publish the field — per RFC 8414 that defaults to\n * `[\"authorization_code\", \"implicit\"]`. Clients should treat absence as\n * \"unknown, try your grant and see,\" not as proof the grant is unsupported.\n */\n grantTypesSupported?: string[];\n /** True when the AS metadata came from the OIDC fallback URL rather than RFC 8414. */\n metadataSource?: 'rfc-8414' | 'openid-configuration';\n /** Scope hinted in the `WWW-Authenticate` challenge's `scope` auth-param. */\n challengeScope?: string;\n /** Raw parsed challenge the agent returned on the 401. */\n challenge: WWWAuthenticateChallenge;\n}\n\n/**\n * Error raised when an agent returns a 401 and we do not have credentials\n * to satisfy it. Carries everything needed to run an interactive OAuth flow\n * or show the operator an actionable prompt.\n *\n * Extends {@link AuthenticationRequiredError} so existing callers that catch\n * `AuthenticationRequiredError` automatically receive the richer variant —\n * they can downcast with `instanceof NeedsAuthorizationError` when they\n * want walked discovery metadata.\n *\n * Note on `code` vs `subCode`:\n * The parent class declares `readonly code = 'AUTHENTICATION_REQUIRED'` as\n * a class field that re-initializes on every construction, so a child-side\n * override attempt is silently overwritten under `useDefineForClassFields`.\n * The narrow discriminator is exposed as `subCode` — prefer\n * `instanceof NeedsAuthorizationError` for type-narrowing and use `subCode`\n * only for structured-log keying.\n *\n * Note on `hasOAuth`:\n * The inherited getter returns `true` only when both `authorization_endpoint`\n * and `token_endpoint` were walked successfully. A partially-walked\n * requirements record (PRM reachable but AS metadata missing) still yields\n * `hasOAuth === false` even though `requirements.authorizationServer` is set.\n * Treat it as \"we have enough to start a flow,\" not \"server wants OAuth.\"\n */\nexport class NeedsAuthorizationError extends AuthenticationRequiredError {\n /** Narrow discriminator for consumers that already know about this class. */\n readonly subCode = 'needs_authorization' as const;\n readonly requirements: AuthorizationRequirements;\n\n constructor(requirements: AuthorizationRequirements, message?: string) {\n super(requirements.agentUrl, synthesizeOAuthMetadata(requirements), message ?? defaultMessage(requirements));\n this.name = 'NeedsAuthorizationError';\n this.requirements = requirements;\n // Extend the parent's `details` payload so structured-logging consumers\n // that read `err.details` (via `extractErrorInfo` or equivalent) see the\n // full walked chain, not just the synthesized one-hop oauthMetadata.\n this.details = { ...(this.details as object | undefined), requirements };\n }\n}\n\n/**\n * Build an {@link OAuthMetadataInfo} for the base-class constructor so that\n * legacy callers still see a non-empty `oauthMetadata` + working\n * `hasOAuth`/`authorizationUrl` getters on the error. When discovery didn't\n * yield enough info, return undefined and let the base class degrade\n * gracefully.\n */\nfunction synthesizeOAuthMetadata(req: AuthorizationRequirements): OAuthMetadataInfo | undefined {\n if (!req.authorizationEndpoint || !req.tokenEndpoint) return undefined;\n return {\n authorization_endpoint: req.authorizationEndpoint,\n token_endpoint: req.tokenEndpoint,\n ...(req.registrationEndpoint ? { registration_endpoint: req.registrationEndpoint } : {}),\n ...(req.authorizationServer ? { issuer: req.authorizationServer } : {}),\n };\n}\n\nfunction defaultMessage(req: AuthorizationRequirements): string {\n const parts = [`Agent ${sanitizeDisplay(req.agentUrl)} requires OAuth authorization.`];\n if (req.authorizationServer) {\n parts.push(`Authorization server: ${req.authorizationServer}.`);\n }\n if (req.challenge.error_description) {\n parts.push(`Server said: ${sanitizeDisplay(req.challenge.error_description)}.`);\n }\n parts.push('Provide an OAuthFlowHandler or run an interactive flow to complete authorization.');\n return parts.join(' ');\n}\n\n/**\n * Options for {@link discoverAuthorizationRequirements}.\n */\nexport interface DiscoverAuthorizationOptions {\n /** Allow http:// and private-IP probe targets. Default false. */\n allowPrivateIp?: boolean;\n /** Override per-probe HTTP timeout (ms). Default inherits from ssrfSafeFetch (10s). */\n timeoutMs?: number;\n /** Scoped fetch implementation for the agent, PRM, and AS metadata probes. */\n fetchFn?: typeof fetch;\n /**\n * If provided, use this `WWW-Authenticate` header verbatim instead of\n * re-probing the agent. Use this when you already have a 401 response in\n * hand and want to avoid a second round-trip.\n */\n wwwAuthenticate?: string;\n}\n\n/**\n * Walk the OAuth discovery chain starting from an agent URL. Returns\n * `AuthorizationRequirements` when the agent demands OAuth, or `null` when a\n * `tools/list` call succeeds without credentials.\n *\n * Strategy:\n * 1. POST `tools/list` to the agent with no `Authorization` header.\n * 2. If 401 + `WWW-Authenticate: Bearer`: parse the challenge.\n * 3. If the challenge carries `resource_metadata=…`: GET it and read\n * `resource` + `authorization_servers`.\n * 4. For the first `authorization_servers[0]`: GET `/.well-known/oauth-authorization-server`\n * and read `authorization_endpoint`, `token_endpoint`, `registration_endpoint`,\n * `scopes_supported`.\n * 5. Return a structured record.\n *\n * Anything missing from the chain surfaces as `undefined` on the result —\n * callers can still present a partial picture without re-probing.\n */\nexport async function discoverAuthorizationRequirements(\n agentUrl: string,\n options: DiscoverAuthorizationOptions = {}\n): Promise<AuthorizationRequirements | null> {\n // `allowPrivateIp` authorizes the agent probe. Chain hops (PRM, AS\n // metadata) inherit that trust ONLY when they share the agent's origin —\n // a compromised agent that advertises a private-IP authorization server\n // on a different origin would otherwise pivot a discovery walk into the\n // host's internal network.\n const allowPrivateIpOnAgent = options.allowPrivateIp ?? false;\n const agentOrigin = originOf(agentUrl);\n const allowPrivateIpForHop = (url: string): boolean =>\n allowPrivateIpOnAgent && agentOrigin !== undefined && originOf(url) === agentOrigin;\n\n let challengeHeader = options.wwwAuthenticate;\n if (!challengeHeader) {\n const probe = await probeAgent401(agentUrl, allowPrivateIpOnAgent, options.timeoutMs, options.fetchFn);\n if (probe.status !== 401) {\n // 200, 403, 5xx, or network error — not an OAuth 401 we can act on.\n return null;\n }\n challengeHeader = probe.wwwAuthenticate;\n }\n\n const challenge = parseWWWAuthenticate(challengeHeader ?? null);\n if (!challenge || challenge.scheme !== 'bearer') {\n // A 401 without a Bearer challenge isn't our kind of problem — let it propagate.\n return null;\n }\n\n const requirements: AuthorizationRequirements = {\n agentUrl,\n resourceMetadataUrl: challenge.resource_metadata ? sanitizeDisplay(challenge.resource_metadata) : undefined,\n challengeScope: challenge.scope ? sanitizeDisplay(challenge.scope) : undefined,\n challenge: sanitizeChallenge(challenge),\n };\n\n // Walk protected-resource metadata (RFC 9728 §3). Private-IP targets are\n // only allowed when the hop's origin matches the agent's.\n if (challenge.resource_metadata && isSafeHttpUrl(challenge.resource_metadata)) {\n const prm = await fetchJson(\n challenge.resource_metadata,\n allowPrivateIpForHop(challenge.resource_metadata),\n options.timeoutMs,\n options.fetchFn\n );\n if (prm && typeof prm === 'object') {\n const resource = (prm as { resource?: unknown }).resource;\n const servers = (prm as { authorization_servers?: unknown }).authorization_servers;\n if (typeof resource === 'string') requirements.resource = sanitizeDisplay(resource);\n if (Array.isArray(servers)) {\n const validServers = servers\n .filter((s: unknown): s is string => typeof s === 'string' && isSafeHttpUrl(s))\n .map(sanitizeDisplay);\n if (validServers.length > 0) {\n requirements.authorizationServers = validServers;\n requirements.authorizationServer = validServers[0];\n }\n }\n }\n }\n\n // Walk authorization-server metadata using the first issuer. RFC 8414 §3\n // first, then OIDC Discovery 1.0 fallback for AS deployments (Keycloak in\n // OIDC mode, Ping, ADFS) that only publish at\n // `{issuer}/.well-known/openid-configuration`.\n if (requirements.authorizationServer) {\n const asUrl = buildAuthorizationServerMetadataUrl(requirements.authorizationServer);\n let md: Record<string, unknown> | undefined;\n let source: 'rfc-8414' | 'openid-configuration' | undefined;\n if (asUrl) {\n const res = await fetchJson(asUrl, allowPrivateIpForHop(asUrl), options.timeoutMs, options.fetchFn);\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'rfc-8414';\n }\n }\n if (!md) {\n const oidcUrl = buildOidcDiscoveryUrl(requirements.authorizationServer);\n if (oidcUrl) {\n const res = await fetchJson(oidcUrl, allowPrivateIpForHop(oidcUrl), options.timeoutMs, options.fetchFn);\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'openid-configuration';\n }\n }\n }\n if (md) {\n requirements.metadataSource = source;\n if (typeof md.authorization_endpoint === 'string') {\n requirements.authorizationEndpoint = sanitizeDisplay(md.authorization_endpoint);\n }\n if (typeof md.token_endpoint === 'string') {\n requirements.tokenEndpoint = sanitizeDisplay(md.token_endpoint);\n }\n if (typeof md.registration_endpoint === 'string') {\n requirements.registrationEndpoint = sanitizeDisplay(md.registration_endpoint);\n }\n if (Array.isArray(md.scopes_supported)) {\n const scopes = md.scopes_supported\n .filter((s: unknown): s is string => typeof s === 'string')\n .slice(0, MAX_SCOPES)\n .map(sanitizeDisplay);\n if (scopes.length > 0) requirements.scopesSupported = scopes;\n }\n if (Array.isArray(md.grant_types_supported)) {\n const grants = md.grant_types_supported\n .filter((g: unknown): g is string => typeof g === 'string')\n .slice(0, 32)\n .map(sanitizeDisplay);\n if (grants.length > 0) requirements.grantTypesSupported = grants;\n }\n }\n }\n\n return requirements;\n}\n\n/**\n * Probe the agent for the parsed `WWW-Authenticate` challenge on a 401.\n *\n * Where `discoverAuthorizationRequirements` walks the full RFC 9728 → 8414\n * chain for Bearer/OAuth challenges, this helper is the catch-all: it works\n * for ANY scheme (Basic, Digest, Bearer-without-PRM, …) and returns the\n * structured challenge so callers can surface scheme-specific remediation\n * (e.g. \"use `--auth-scheme basic`\" when the gateway speaks RFC 7617).\n *\n * Returns `null` when the agent isn't responding with a 401, or when the\n * response carries no parseable `WWW-Authenticate`. Reuses `probeAgent401`\n * so the SSRF gate and timeout policy stay consistent with the OAuth path.\n */\nexport async function probeAuthChallenge(\n agentUrl: string,\n options: { allowPrivateIp?: boolean; timeoutMs?: number; fetchFn?: typeof fetch } = {}\n): Promise<WWWAuthenticateChallenge | null> {\n const probe = await probeAgent401(agentUrl, options.allowPrivateIp ?? false, options.timeoutMs, options.fetchFn);\n if (probe.status !== 401) return null;\n return parseWWWAuthenticate(probe.wwwAuthenticate ?? null);\n}\n\n/**\n * Fire a single unauthenticated `tools/list` at the agent and return the\n * status + `WWW-Authenticate` header. Used when the caller hasn't provided\n * a cached 401 response.\n */\nasync function probeAgent401(\n agentUrl: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch\n): Promise<{ status: number; wwwAuthenticate?: string }> {\n const body = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/list' });\n try {\n const res = await ssrfSafeFetch(agentUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n accept: 'application/json',\n },\n body,\n allowPrivateIp,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n return { status: res.status, wwwAuthenticate: res.headers['www-authenticate'] };\n } catch {\n return { status: 0 };\n }\n}\n\n/**\n * Check a URL is an absolute `http:`/`https:` URL before we hand it to\n * `ssrfSafeFetch`. Defeats `javascript:`, `file:`, `data:`, etc. the agent\n * might echo back in PRM or AS metadata. `ssrfSafeFetch` refuses non-HTTP\n * schemes too, but failing fast here gives a cleaner discovery flow and\n * avoids surfacing scheme errors as mysterious discovery misses.\n */\nfunction originOf(value: string): string | undefined {\n try {\n return new URL(value).origin;\n } catch {\n return undefined;\n }\n}\n\nfunction isSafeHttpUrl(value: string): boolean {\n try {\n const u = new URL(value);\n return u.protocol === 'https:' || u.protocol === 'http:';\n } catch {\n return false;\n }\n}\n\n/**\n * Build the authorization-server metadata URL for an issuer per RFC 8414 §3.\n *\n * For issuer `https://as.example.com/tenant1`, metadata lives at\n * `https://as.example.com/.well-known/oauth-authorization-server/tenant1`\n * (well-known prefix inserted BEFORE the issuer path, not after). This\n * matches how the MCP SDK and most authorization servers advertise metadata.\n */\nfunction buildAuthorizationServerMetadataUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const pathname = u.pathname.endsWith('/') ? u.pathname.slice(0, -1) : u.pathname;\n return `${u.origin}/.well-known/oauth-authorization-server${pathname}`;\n}\n\n/**\n * OpenID Connect Discovery 1.0 fallback URL. Some authorization servers\n * (Keycloak in OIDC mode, Ping, ADFS) only publish metadata at\n * `{issuer}/.well-known/openid-configuration` — path *suffixed*, not\n * prefixed. The OIDC discovery doc carries `token_endpoint`,\n * `authorization_endpoint`, and `grant_types_supported` with the same\n * semantics as RFC 8414, so it's a safe read-through when the RFC 8414\n * probe misses.\n */\nfunction buildOidcDiscoveryUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const base = u.pathname.endsWith('/') ? `${u.origin}${u.pathname.slice(0, -1)}` : `${u.origin}${u.pathname}`;\n return `${base}/.well-known/openid-configuration`;\n}\n\nasync function fetchJson(\n url: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch\n): Promise<unknown> {\n try {\n const res = await ssrfSafeFetch(url, {\n method: 'GET',\n headers: { accept: 'application/json' },\n allowPrivateIp,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n if (res.status !== 200) return undefined;\n return decodeBodyAsJsonOrText(res.body, res.headers['content-type']);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/auth/oauth/authorization-required.ts"],"sourcesContent":["/**\n * Zero-config OAuth discovery + actionable authorization errors.\n *\n * When a library consumer calls an OAuth-gated MCP agent without saved\n * credentials, they get a `NeedsAuthorizationError` containing everything\n * needed to either run an interactive flow or present a clear prompt — no\n * re-probing required.\n *\n * Design note: this module only *discovers* — it never opens a browser or\n * writes state. Interactive flow handling stays in the caller (CLI or a\n * bespoke `OAuthFlowHandler`) so library behavior is predictable.\n */\nimport { ssrfSafeFetch, decodeBodyAsJsonOrText } from '../../net';\nimport { AuthenticationRequiredError, type OAuthMetadataInfo } from '../../errors';\nimport { throwIfAborted } from '../../protocols/abort';\nimport { parseWWWAuthenticate, type WWWAuthenticateChallenge } from './diagnostics';\n\n/**\n * Maximum length of an individual server-supplied string we copy into the\n * `AuthorizationRequirements` payload. Anything longer is truncated with a\n * `…` suffix so hostile agents can't smuggle megabyte error-descriptions\n * into operator-facing prompts and logs.\n */\nconst MAX_DISPLAY_STRING = 256;\n\n/**\n * Maximum number of scope strings we copy into `scopesSupported`. RFC 8414\n * allows an unbounded array; hostile servers have sent thousands.\n */\nconst MAX_SCOPES = 64;\n\n/**\n * Maximum number of auth-params we preserve under `challenge.params`. Bounds\n * memory pressure from hostile servers that pack the `WWW-Authenticate`\n * header with unknown auth-params.\n */\nconst MAX_CHALLENGE_PARAMS = 32;\n\n/**\n * Strip ASCII control characters (excluding TAB) from a server-supplied\n * string that may be shown to a human. Defeats terminal-hijack tricks like\n * `\\x1b]0;pwned\\x07` (rewrites terminal title), `\\r` (overwrites prompt),\n * and `\\x1b[2J` (clears screen). Also truncates over-long values.\n */\nfunction sanitizeDisplay(value: string): string {\n const stripped = value.replace(/[\\x00-\\x08\\x0b-\\x1f\\x7f]/g, '');\n if (stripped.length <= MAX_DISPLAY_STRING) return stripped;\n return `${stripped.slice(0, MAX_DISPLAY_STRING - 1)}…`;\n}\n\n/**\n * Sanitize the parsed `WWW-Authenticate` challenge before embedding it in a\n * `NeedsAuthorizationError`. Consumers that render `requirements.challenge`\n * to a terminal should never see control characters. Caps `params` count to\n * bound hostile servers.\n *\n * The `scheme` is already lowercased + token-constrained by the parser.\n * Param keys are also token-constrained so they're safe; only values need\n * sanitizing.\n */\nfunction sanitizeChallenge(c: WWWAuthenticateChallenge): WWWAuthenticateChallenge {\n const params: Record<string, string> = {};\n for (const [k, v] of Object.entries(c.params)) {\n if (Object.keys(params).length >= MAX_CHALLENGE_PARAMS) break;\n params[k] = sanitizeDisplay(v);\n }\n return {\n scheme: c.scheme,\n ...(c.realm !== undefined ? { realm: sanitizeDisplay(c.realm) } : {}),\n ...(c.error !== undefined ? { error: sanitizeDisplay(c.error) } : {}),\n ...(c.error_description !== undefined ? { error_description: sanitizeDisplay(c.error_description) } : {}),\n ...(c.scope !== undefined ? { scope: sanitizeDisplay(c.scope) } : {}),\n ...(c.resource_metadata !== undefined ? { resource_metadata: sanitizeDisplay(c.resource_metadata) } : {}),\n params,\n };\n}\n\n/**\n * Structured description of what an agent's authorization server requires\n * before it will accept a `tools/call`. Produced by\n * {@link discoverAuthorizationRequirements}.\n */\nexport interface AuthorizationRequirements {\n /** The agent URL we probed. */\n agentUrl: string;\n /** Resource URL the agent advertises in its `WWW-Authenticate` / PRM (RFC 9728). */\n resource?: string;\n /** URL of the protected-resource-metadata document (from `WWW-Authenticate: resource_metadata=…`). */\n resourceMetadataUrl?: string;\n /** First `authorization_servers[0]` from the protected-resource metadata. */\n authorizationServer?: string;\n /**\n * All `authorization_servers` advertised by the PRM, in declaration order.\n * The walker only probes `[0]` (PRM preference order — see RFC 9728 §3.3);\n * the full list is exposed so callers can surface multi-issuer deployments\n * in diagnostics. A length > 1 is uncommon and worth flagging to the\n * operator — typically a federation partner or a staged migration.\n */\n authorizationServers?: string[];\n /** `authorization_endpoint` from the authorization-server metadata (RFC 8414). */\n authorizationEndpoint?: string;\n /** `token_endpoint` from the authorization-server metadata. */\n tokenEndpoint?: string;\n /** `registration_endpoint` if the AS supports RFC 7591 dynamic client registration. */\n registrationEndpoint?: string;\n /** Scopes advertised by the AS (RFC 8414 `scopes_supported`). */\n scopesSupported?: string[];\n /**\n * `grant_types_supported` advertised by the AS (RFC 8414). `undefined` when\n * the AS didn't publish the field — per RFC 8414 that defaults to\n * `[\"authorization_code\", \"implicit\"]`. Clients should treat absence as\n * \"unknown, try your grant and see,\" not as proof the grant is unsupported.\n */\n grantTypesSupported?: string[];\n /** True when the AS metadata came from the OIDC fallback URL rather than RFC 8414. */\n metadataSource?: 'rfc-8414' | 'openid-configuration';\n /** Scope hinted in the `WWW-Authenticate` challenge's `scope` auth-param. */\n challengeScope?: string;\n /** Raw parsed challenge the agent returned on the 401. */\n challenge: WWWAuthenticateChallenge;\n}\n\n/**\n * Error raised when an agent returns a 401 and we do not have credentials\n * to satisfy it. Carries everything needed to run an interactive OAuth flow\n * or show the operator an actionable prompt.\n *\n * Extends {@link AuthenticationRequiredError} so existing callers that catch\n * `AuthenticationRequiredError` automatically receive the richer variant —\n * they can downcast with `instanceof NeedsAuthorizationError` when they\n * want walked discovery metadata.\n *\n * Note on `code` vs `subCode`:\n * The parent class declares `readonly code = 'AUTHENTICATION_REQUIRED'` as\n * a class field that re-initializes on every construction, so a child-side\n * override attempt is silently overwritten under `useDefineForClassFields`.\n * The narrow discriminator is exposed as `subCode` — prefer\n * `instanceof NeedsAuthorizationError` for type-narrowing and use `subCode`\n * only for structured-log keying.\n *\n * Note on `hasOAuth`:\n * The inherited getter returns `true` only when both `authorization_endpoint`\n * and `token_endpoint` were walked successfully. A partially-walked\n * requirements record (PRM reachable but AS metadata missing) still yields\n * `hasOAuth === false` even though `requirements.authorizationServer` is set.\n * Treat it as \"we have enough to start a flow,\" not \"server wants OAuth.\"\n */\nexport class NeedsAuthorizationError extends AuthenticationRequiredError {\n /** Narrow discriminator for consumers that already know about this class. */\n readonly subCode = 'needs_authorization' as const;\n readonly requirements: AuthorizationRequirements;\n\n constructor(requirements: AuthorizationRequirements, message?: string) {\n super(requirements.agentUrl, synthesizeOAuthMetadata(requirements), message ?? defaultMessage(requirements));\n this.name = 'NeedsAuthorizationError';\n this.requirements = requirements;\n // Extend the parent's `details` payload so structured-logging consumers\n // that read `err.details` (via `extractErrorInfo` or equivalent) see the\n // full walked chain, not just the synthesized one-hop oauthMetadata.\n this.details = { ...(this.details as object | undefined), requirements };\n }\n}\n\n/**\n * Build an {@link OAuthMetadataInfo} for the base-class constructor so that\n * legacy callers still see a non-empty `oauthMetadata` + working\n * `hasOAuth`/`authorizationUrl` getters on the error. When discovery didn't\n * yield enough info, return undefined and let the base class degrade\n * gracefully.\n */\nfunction synthesizeOAuthMetadata(req: AuthorizationRequirements): OAuthMetadataInfo | undefined {\n if (!req.authorizationEndpoint || !req.tokenEndpoint) return undefined;\n return {\n authorization_endpoint: req.authorizationEndpoint,\n token_endpoint: req.tokenEndpoint,\n ...(req.registrationEndpoint ? { registration_endpoint: req.registrationEndpoint } : {}),\n ...(req.authorizationServer ? { issuer: req.authorizationServer } : {}),\n };\n}\n\nfunction defaultMessage(req: AuthorizationRequirements): string {\n const parts = [`Agent ${sanitizeDisplay(req.agentUrl)} requires OAuth authorization.`];\n if (req.authorizationServer) {\n parts.push(`Authorization server: ${req.authorizationServer}.`);\n }\n if (req.challenge.error_description) {\n parts.push(`Server said: ${sanitizeDisplay(req.challenge.error_description)}.`);\n }\n parts.push('Provide an OAuthFlowHandler or run an interactive flow to complete authorization.');\n return parts.join(' ');\n}\n\n/**\n * Options for {@link discoverAuthorizationRequirements}.\n */\nexport interface DiscoverAuthorizationOptions {\n /** Allow http:// and private-IP probe targets. Default false. */\n allowPrivateIp?: boolean;\n /** Override per-probe HTTP timeout (ms). Default inherits from ssrfSafeFetch (10s). */\n timeoutMs?: number;\n /** Scoped fetch implementation for the agent, PRM, and AS metadata probes. */\n fetchFn?: typeof fetch;\n /** Caller cancellation, including the absolute task deadline. */\n signal?: AbortSignal;\n /**\n * If provided, use this `WWW-Authenticate` header verbatim instead of\n * re-probing the agent. Use this when you already have a 401 response in\n * hand and want to avoid a second round-trip.\n */\n wwwAuthenticate?: string;\n}\n\n/**\n * Walk the OAuth discovery chain starting from an agent URL. Returns\n * `AuthorizationRequirements` when the agent demands OAuth, or `null` when a\n * `tools/list` call succeeds without credentials.\n *\n * Strategy:\n * 1. POST `tools/list` to the agent with no `Authorization` header.\n * 2. If 401 + `WWW-Authenticate: Bearer`: parse the challenge.\n * 3. If the challenge carries `resource_metadata=…`: GET it and read\n * `resource` + `authorization_servers`.\n * 4. For the first `authorization_servers[0]`: GET `/.well-known/oauth-authorization-server`\n * and read `authorization_endpoint`, `token_endpoint`, `registration_endpoint`,\n * `scopes_supported`.\n * 5. Return a structured record.\n *\n * Anything missing from the chain surfaces as `undefined` on the result —\n * callers can still present a partial picture without re-probing.\n */\nexport async function discoverAuthorizationRequirements(\n agentUrl: string,\n options: DiscoverAuthorizationOptions = {}\n): Promise<AuthorizationRequirements | null> {\n // `allowPrivateIp` authorizes the agent probe. Chain hops (PRM, AS\n // metadata) inherit that trust ONLY when they share the agent's origin —\n // a compromised agent that advertises a private-IP authorization server\n // on a different origin would otherwise pivot a discovery walk into the\n // host's internal network.\n const allowPrivateIpOnAgent = options.allowPrivateIp ?? false;\n const agentOrigin = originOf(agentUrl);\n const allowPrivateIpForHop = (url: string): boolean =>\n allowPrivateIpOnAgent && agentOrigin !== undefined && originOf(url) === agentOrigin;\n\n let challengeHeader = options.wwwAuthenticate;\n if (!challengeHeader) {\n const probe = await probeAgent401(\n agentUrl,\n allowPrivateIpOnAgent,\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (probe.status !== 401) {\n // 200, 403, 5xx, or network error — not an OAuth 401 we can act on.\n return null;\n }\n challengeHeader = probe.wwwAuthenticate;\n }\n\n const challenge = parseWWWAuthenticate(challengeHeader ?? null);\n if (!challenge || challenge.scheme !== 'bearer') {\n // A 401 without a Bearer challenge isn't our kind of problem — let it propagate.\n return null;\n }\n\n const requirements: AuthorizationRequirements = {\n agentUrl,\n resourceMetadataUrl: challenge.resource_metadata ? sanitizeDisplay(challenge.resource_metadata) : undefined,\n challengeScope: challenge.scope ? sanitizeDisplay(challenge.scope) : undefined,\n challenge: sanitizeChallenge(challenge),\n };\n\n // Walk protected-resource metadata (RFC 9728 §3). Private-IP targets are\n // only allowed when the hop's origin matches the agent's.\n if (challenge.resource_metadata && isSafeHttpUrl(challenge.resource_metadata)) {\n const prm = await fetchJson(\n challenge.resource_metadata,\n allowPrivateIpForHop(challenge.resource_metadata),\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (prm && typeof prm === 'object') {\n const resource = (prm as { resource?: unknown }).resource;\n const servers = (prm as { authorization_servers?: unknown }).authorization_servers;\n if (typeof resource === 'string') requirements.resource = sanitizeDisplay(resource);\n if (Array.isArray(servers)) {\n const validServers = servers\n .filter((s: unknown): s is string => typeof s === 'string' && isSafeHttpUrl(s))\n .map(sanitizeDisplay);\n if (validServers.length > 0) {\n requirements.authorizationServers = validServers;\n requirements.authorizationServer = validServers[0];\n }\n }\n }\n }\n\n // Walk authorization-server metadata using the first issuer. RFC 8414 §3\n // first, then OIDC Discovery 1.0 fallback for AS deployments (Keycloak in\n // OIDC mode, Ping, ADFS) that only publish at\n // `{issuer}/.well-known/openid-configuration`.\n if (requirements.authorizationServer) {\n const asUrl = buildAuthorizationServerMetadataUrl(requirements.authorizationServer);\n let md: Record<string, unknown> | undefined;\n let source: 'rfc-8414' | 'openid-configuration' | undefined;\n if (asUrl) {\n const res = await fetchJson(\n asUrl,\n allowPrivateIpForHop(asUrl),\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'rfc-8414';\n }\n }\n if (!md) {\n const oidcUrl = buildOidcDiscoveryUrl(requirements.authorizationServer);\n if (oidcUrl) {\n const res = await fetchJson(\n oidcUrl,\n allowPrivateIpForHop(oidcUrl),\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (res && typeof res === 'object') {\n md = res as Record<string, unknown>;\n source = 'openid-configuration';\n }\n }\n }\n if (md) {\n requirements.metadataSource = source;\n if (typeof md.authorization_endpoint === 'string') {\n requirements.authorizationEndpoint = sanitizeDisplay(md.authorization_endpoint);\n }\n if (typeof md.token_endpoint === 'string') {\n requirements.tokenEndpoint = sanitizeDisplay(md.token_endpoint);\n }\n if (typeof md.registration_endpoint === 'string') {\n requirements.registrationEndpoint = sanitizeDisplay(md.registration_endpoint);\n }\n if (Array.isArray(md.scopes_supported)) {\n const scopes = md.scopes_supported\n .filter((s: unknown): s is string => typeof s === 'string')\n .slice(0, MAX_SCOPES)\n .map(sanitizeDisplay);\n if (scopes.length > 0) requirements.scopesSupported = scopes;\n }\n if (Array.isArray(md.grant_types_supported)) {\n const grants = md.grant_types_supported\n .filter((g: unknown): g is string => typeof g === 'string')\n .slice(0, 32)\n .map(sanitizeDisplay);\n if (grants.length > 0) requirements.grantTypesSupported = grants;\n }\n }\n }\n\n return requirements;\n}\n\n/**\n * Probe the agent for the parsed `WWW-Authenticate` challenge on a 401.\n *\n * Where `discoverAuthorizationRequirements` walks the full RFC 9728 → 8414\n * chain for Bearer/OAuth challenges, this helper is the catch-all: it works\n * for ANY scheme (Basic, Digest, Bearer-without-PRM, …) and returns the\n * structured challenge so callers can surface scheme-specific remediation\n * (e.g. \"use `--auth-scheme basic`\" when the gateway speaks RFC 7617).\n *\n * Returns `null` when the agent isn't responding with a 401, or when the\n * response carries no parseable `WWW-Authenticate`. Reuses `probeAgent401`\n * so the SSRF gate and timeout policy stay consistent with the OAuth path.\n */\nexport async function probeAuthChallenge(\n agentUrl: string,\n options: { allowPrivateIp?: boolean; timeoutMs?: number; fetchFn?: typeof fetch; signal?: AbortSignal } = {}\n): Promise<WWWAuthenticateChallenge | null> {\n const probe = await probeAgent401(\n agentUrl,\n options.allowPrivateIp ?? false,\n options.timeoutMs,\n options.fetchFn,\n options.signal\n );\n if (probe.status !== 401) return null;\n return parseWWWAuthenticate(probe.wwwAuthenticate ?? null);\n}\n\n/**\n * Fire a single unauthenticated `tools/list` at the agent and return the\n * status + `WWW-Authenticate` header. Used when the caller hasn't provided\n * a cached 401 response.\n */\nasync function probeAgent401(\n agentUrl: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch,\n signal?: AbortSignal\n): Promise<{ status: number; wwwAuthenticate?: string }> {\n const body = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/list' });\n try {\n const res = await ssrfSafeFetch(agentUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n accept: 'application/json',\n },\n body,\n allowPrivateIp,\n signal,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n return { status: res.status, wwwAuthenticate: res.headers['www-authenticate'] };\n } catch {\n throwIfAborted(signal);\n return { status: 0 };\n }\n}\n\n/**\n * Check a URL is an absolute `http:`/`https:` URL before we hand it to\n * `ssrfSafeFetch`. Defeats `javascript:`, `file:`, `data:`, etc. the agent\n * might echo back in PRM or AS metadata. `ssrfSafeFetch` refuses non-HTTP\n * schemes too, but failing fast here gives a cleaner discovery flow and\n * avoids surfacing scheme errors as mysterious discovery misses.\n */\nfunction originOf(value: string): string | undefined {\n try {\n return new URL(value).origin;\n } catch {\n return undefined;\n }\n}\n\nfunction isSafeHttpUrl(value: string): boolean {\n try {\n const u = new URL(value);\n return u.protocol === 'https:' || u.protocol === 'http:';\n } catch {\n return false;\n }\n}\n\n/**\n * Build the authorization-server metadata URL for an issuer per RFC 8414 §3.\n *\n * For issuer `https://as.example.com/tenant1`, metadata lives at\n * `https://as.example.com/.well-known/oauth-authorization-server/tenant1`\n * (well-known prefix inserted BEFORE the issuer path, not after). This\n * matches how the MCP SDK and most authorization servers advertise metadata.\n */\nfunction buildAuthorizationServerMetadataUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const pathname = u.pathname.endsWith('/') ? u.pathname.slice(0, -1) : u.pathname;\n return `${u.origin}/.well-known/oauth-authorization-server${pathname}`;\n}\n\n/**\n * OpenID Connect Discovery 1.0 fallback URL. Some authorization servers\n * (Keycloak in OIDC mode, Ping, ADFS) only publish metadata at\n * `{issuer}/.well-known/openid-configuration` — path *suffixed*, not\n * prefixed. The OIDC discovery doc carries `token_endpoint`,\n * `authorization_endpoint`, and `grant_types_supported` with the same\n * semantics as RFC 8414, so it's a safe read-through when the RFC 8414\n * probe misses.\n */\nfunction buildOidcDiscoveryUrl(issuer: string): string | undefined {\n if (!isSafeHttpUrl(issuer)) return undefined;\n const u = new URL(issuer);\n const base = u.pathname.endsWith('/') ? `${u.origin}${u.pathname.slice(0, -1)}` : `${u.origin}${u.pathname}`;\n return `${base}/.well-known/openid-configuration`;\n}\n\nasync function fetchJson(\n url: string,\n allowPrivateIp: boolean,\n timeoutMs?: number,\n fetchFn?: typeof fetch,\n signal?: AbortSignal\n): Promise<unknown> {\n try {\n const res = await ssrfSafeFetch(url, {\n method: 'GET',\n headers: { accept: 'application/json' },\n allowPrivateIp,\n signal,\n ...(timeoutMs !== undefined ? { timeoutMs } : {}),\n ...(fetchFn ? { trustedFetchFn: fetchFn } : {}),\n });\n if (res.status !== 200) return undefined;\n return decodeBodyAsJsonOrText(res.body, res.headers['content-type']);\n } catch {\n throwIfAborted(signal);\n return undefined;\n }\n}\n"],"mappings":"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","names":[]}
@@ -36,6 +36,8 @@ export interface DiscoveryOptions {
36
36
  timeout?: number;
37
37
  /** Custom fetch function (for testing or custom HTTP handling) */
38
38
  fetch?: typeof fetch;
39
+ /** Caller cancellation, including the absolute task deadline. */
40
+ signal?: AbortSignal;
39
41
  }
40
42
  /**
41
43
  * Discover OAuth metadata from an MCP server
@@ -36,6 +36,8 @@ export interface DiscoveryOptions {
36
36
  timeout?: number;
37
37
  /** Custom fetch function (for testing or custom HTTP handling) */
38
38
  fetch?: typeof fetch;
39
+ /** Caller cancellation, including the absolute task deadline. */
40
+ signal?: AbortSignal;
39
41
  }
40
42
  /**
41
43
  * Discover OAuth metadata from an MCP server
@@ -1 +1 @@
1
- {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5C,+BAA+B;IAC/B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,4BAA4B;IAC5B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,4CAA4C;IAC5C,qCAAqC,CAAC,EAAE,MAAM,EAAE,CAAC;IACjD,uBAAuB;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAyD/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpH"}
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../../src/lib/auth/oauth/discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,gCAAgC;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5C,+BAA+B;IAC/B,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,4BAA4B;IAC5B,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,4CAA4C;IAC5C,qCAAqC,CAAC,EAAE,MAAM,EAAE,CAAC;IACjD,uBAAuB;IACvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,iEAAiE;IACjE,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA0D/B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGtG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpH"}
@@ -24,9 +24,11 @@ __export(discovery_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(discovery_exports);
26
26
  var import_responseSizeLimit = require('../../protocols/responseSizeLimit.js');
27
+ var import_abort = require('../../protocols/abort.js');
27
28
  async function discoverOAuthMetadata(agentUrl, options = {}) {
28
29
  const { timeout = 5e3, fetch: providedFetch = fetch } = options;
29
30
  const customFetch = (0, import_responseSizeLimit.wrapFetchWithSizeLimit)(providedFetch);
31
+ (0, import_abort.throwIfAborted)(options.signal);
30
32
  try {
31
33
  const baseUrl = new URL(agentUrl);
32
34
  const pathname = baseUrl.pathname.endsWith("/") ? baseUrl.pathname.slice(0, -1) : baseUrl.pathname;
@@ -35,12 +37,12 @@ async function discoverOAuthMetadata(agentUrl, options = {}) {
35
37
  const rootUrl = new URL("/.well-known/oauth-authorization-server", baseUrl.origin);
36
38
  const urlsToTry = pathAwareUrl ? [pathAwareUrl, rootUrl] : [rootUrl];
37
39
  for (const metadataUrl of urlsToTry) {
38
- const controller = new AbortController();
39
- const timeoutId = setTimeout(() => controller.abort(), timeout);
40
+ const timeoutSignal = AbortSignal.timeout(timeout);
41
+ const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;
40
42
  try {
41
43
  const response = await customFetch(metadataUrl.toString(), {
42
44
  headers: { Accept: "application/json" },
43
- signal: controller.signal
45
+ signal
44
46
  });
45
47
  if (!response.ok) {
46
48
  continue;
@@ -51,13 +53,13 @@ async function discoverOAuthMetadata(agentUrl, options = {}) {
51
53
  }
52
54
  return metadata;
53
55
  } catch {
56
+ (0, import_abort.throwIfAborted)(options.signal);
54
57
  continue;
55
- } finally {
56
- clearTimeout(timeoutId);
57
58
  }
58
59
  }
59
60
  return null;
60
61
  } catch {
62
+ (0, import_abort.throwIfAborted)(options.signal);
61
63
  return null;
62
64
  }
63
65
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/auth/oauth/discovery.ts"],"sourcesContent":["/**\n * OAuth Discovery utilities\n *\n * Functions to discover OAuth capabilities of MCP servers.\n * MCP servers expose OAuth metadata at /.well-known/oauth-authorization-server\n */\n\nimport { wrapFetchWithSizeLimit } from '../../protocols/responseSizeLimit';\n\n/**\n * OAuth Authorization Server Metadata\n * @see https://datatracker.ietf.org/doc/html/rfc8414\n */\nexport interface OAuthMetadata {\n /** URL of the authorization endpoint */\n authorization_endpoint: string;\n /** URL of the token endpoint */\n token_endpoint: string;\n /** URL of the dynamic client registration endpoint (optional) */\n registration_endpoint?: string;\n /** Issuer identifier */\n issuer?: string;\n /** PKCE code challenge methods supported */\n code_challenge_methods_supported?: string[];\n /** Response types supported */\n response_types_supported?: string[];\n /** Grant types supported */\n grant_types_supported?: string[];\n /** Token endpoint auth methods supported */\n token_endpoint_auth_methods_supported?: string[];\n /** Scopes supported */\n scopes_supported?: string[];\n}\n\n/**\n * Options for OAuth discovery\n */\nexport interface DiscoveryOptions {\n /** Timeout in milliseconds (default: 5000) */\n timeout?: number;\n /** Custom fetch function (for testing or custom HTTP handling) */\n fetch?: typeof fetch;\n}\n\n/**\n * Discover OAuth metadata from an MCP server\n *\n * Fetches the OAuth Authorization Server Metadata from the well-known endpoint.\n * Returns null if the server doesn't support OAuth or the metadata isn't available.\n *\n * @param agentUrl - The MCP server URL\n * @param options - Discovery options\n * @returns OAuth metadata or null if not available\n *\n * @example\n * ```typescript\n * const metadata = await discoverOAuthMetadata('https://agent.example.com/mcp');\n * if (metadata) {\n * console.log('Authorization URL:', metadata.authorization_endpoint);\n * console.log('Supports dynamic registration:', !!metadata.registration_endpoint);\n * }\n * ```\n */\nexport async function discoverOAuthMetadata(\n agentUrl: string,\n options: DiscoveryOptions = {}\n): Promise<OAuthMetadata | null> {\n // Wrap with the response-size-limit guard so a hostile metadata endpoint\n // can't buffer-bomb during discovery. Pass-through when no\n // `withResponseSizeLimit` slot is active. (#1175)\n const { timeout = 5000, fetch: providedFetch = fetch } = options;\n const customFetch = wrapFetchWithSizeLimit(providedFetch);\n\n try {\n const baseUrl = new URL(agentUrl);\n\n // RFC 8414 path-aware discovery: try path-suffixed URL first, then fall back to root.\n // For https://example.com/mcp, try:\n // 1. https://example.com/.well-known/oauth-authorization-server/mcp\n // 2. https://example.com/.well-known/oauth-authorization-server (fallback)\n const pathname = baseUrl.pathname.endsWith('/') ? baseUrl.pathname.slice(0, -1) : baseUrl.pathname;\n const hasPath = pathname !== '' && pathname !== '/';\n\n const pathAwareUrl = hasPath ? new URL(`/.well-known/oauth-authorization-server${pathname}`, baseUrl.origin) : null;\n const rootUrl = new URL('/.well-known/oauth-authorization-server', baseUrl.origin);\n\n const urlsToTry = pathAwareUrl ? [pathAwareUrl, rootUrl] : [rootUrl];\n\n for (const metadataUrl of urlsToTry) {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await customFetch(metadataUrl.toString(), {\n headers: { Accept: 'application/json' },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n continue;\n }\n\n const metadata = (await response.json()) as OAuthMetadata;\n\n // Validate required fields\n if (!metadata.authorization_endpoint || !metadata.token_endpoint) {\n continue;\n }\n\n return metadata;\n } catch {\n // Parse error, timeout, or network error on this URL -- try next\n continue;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n return null;\n } catch {\n // Network error, timeout, or invalid URL - agent doesn't support OAuth\n return null;\n }\n}\n\n/**\n * Check if an MCP server supports OAuth authentication\n *\n * This is a simple boolean check - use discoverOAuthMetadata() if you need\n * the actual endpoints.\n *\n * @param agentUrl - The MCP server URL\n * @param options - Discovery options\n * @returns true if the server supports OAuth\n *\n * @example\n * ```typescript\n * if (await supportsOAuth('https://agent.example.com/mcp')) {\n * console.log('Agent requires OAuth authentication');\n * }\n * ```\n */\nexport async function supportsOAuth(agentUrl: string, options: DiscoveryOptions = {}): Promise<boolean> {\n const metadata = await discoverOAuthMetadata(agentUrl, options);\n return metadata !== null;\n}\n\n/**\n * Check if an MCP server supports dynamic client registration\n *\n * Servers that support dynamic registration allow clients to register\n * automatically without pre-configured credentials.\n *\n * @param agentUrl - The MCP server URL\n * @param options - Discovery options\n * @returns true if the server supports dynamic client registration\n *\n * @example\n * ```typescript\n * if (await supportsDynamicRegistration('https://agent.example.com/mcp')) {\n * console.log('Agent supports automatic client registration');\n * }\n * ```\n */\nexport async function supportsDynamicRegistration(agentUrl: string, options: DiscoveryOptions = {}): Promise<boolean> {\n const metadata = await discoverOAuthMetadata(agentUrl, options);\n return metadata?.registration_endpoint !== undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,+BAAuC;AAwDvC,eAAsB,sBACpB,UACA,UAA4B,CAAC,GACE;AAI/B,QAAM,EAAE,UAAU,KAAM,OAAO,gBAAgB,MAAM,IAAI;AACzD,QAAM,kBAAc,iDAAuB,aAAa;AAExD,MAAI;AACF,UAAM,UAAU,IAAI,IAAI,QAAQ;AAMhC,UAAM,WAAW,QAAQ,SAAS,SAAS,GAAG,IAAI,QAAQ,SAAS,MAAM,GAAG,EAAE,IAAI,QAAQ;AAC1F,UAAM,UAAU,aAAa,MAAM,aAAa;AAEhD,UAAM,eAAe,UAAU,IAAI,IAAI,0CAA0C,QAAQ,IAAI,QAAQ,MAAM,IAAI;AAC/G,UAAM,UAAU,IAAI,IAAI,2CAA2C,QAAQ,MAAM;AAEjF,UAAM,YAAY,eAAe,CAAC,cAAc,OAAO,IAAI,CAAC,OAAO;AAEnE,eAAW,eAAe,WAAW;AACnC,YAAM,aAAa,IAAI,gBAAgB;AACvC,YAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,OAAO;AAE9D,UAAI;AACF,cAAM,WAAW,MAAM,YAAY,YAAY,SAAS,GAAG;AAAA,UACzD,SAAS,EAAE,QAAQ,mBAAmB;AAAA,UACtC,QAAQ,WAAW;AAAA,QACrB,CAAC;AAED,YAAI,CAAC,SAAS,IAAI;AAChB;AAAA,QACF;AAEA,cAAM,WAAY,MAAM,SAAS,KAAK;AAGtC,YAAI,CAAC,SAAS,0BAA0B,CAAC,SAAS,gBAAgB;AAChE;AAAA,QACF;AAEA,eAAO;AAAA,MACT,QAAQ;AAEN;AAAA,MACF,UAAE;AACA,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAEA,WAAO;AAAA,EACT,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAmBA,eAAsB,cAAc,UAAkB,UAA4B,CAAC,GAAqB;AACtG,QAAM,WAAW,MAAM,sBAAsB,UAAU,OAAO;AAC9D,SAAO,aAAa;AACtB;AAmBA,eAAsB,4BAA4B,UAAkB,UAA4B,CAAC,GAAqB;AACpH,QAAM,WAAW,MAAM,sBAAsB,UAAU,OAAO;AAC9D,SAAO,UAAU,0BAA0B;AAC7C;","names":[]}
1
+ {"version":3,"sources":["../../../../src/lib/auth/oauth/discovery.ts"],"sourcesContent":["/**\n * OAuth Discovery utilities\n *\n * Functions to discover OAuth capabilities of MCP servers.\n * MCP servers expose OAuth metadata at /.well-known/oauth-authorization-server\n */\n\nimport { wrapFetchWithSizeLimit } from '../../protocols/responseSizeLimit';\nimport { throwIfAborted } from '../../protocols/abort';\n\n/**\n * OAuth Authorization Server Metadata\n * @see https://datatracker.ietf.org/doc/html/rfc8414\n */\nexport interface OAuthMetadata {\n /** URL of the authorization endpoint */\n authorization_endpoint: string;\n /** URL of the token endpoint */\n token_endpoint: string;\n /** URL of the dynamic client registration endpoint (optional) */\n registration_endpoint?: string;\n /** Issuer identifier */\n issuer?: string;\n /** PKCE code challenge methods supported */\n code_challenge_methods_supported?: string[];\n /** Response types supported */\n response_types_supported?: string[];\n /** Grant types supported */\n grant_types_supported?: string[];\n /** Token endpoint auth methods supported */\n token_endpoint_auth_methods_supported?: string[];\n /** Scopes supported */\n scopes_supported?: string[];\n}\n\n/**\n * Options for OAuth discovery\n */\nexport interface DiscoveryOptions {\n /** Timeout in milliseconds (default: 5000) */\n timeout?: number;\n /** Custom fetch function (for testing or custom HTTP handling) */\n fetch?: typeof fetch;\n /** Caller cancellation, including the absolute task deadline. */\n signal?: AbortSignal;\n}\n\n/**\n * Discover OAuth metadata from an MCP server\n *\n * Fetches the OAuth Authorization Server Metadata from the well-known endpoint.\n * Returns null if the server doesn't support OAuth or the metadata isn't available.\n *\n * @param agentUrl - The MCP server URL\n * @param options - Discovery options\n * @returns OAuth metadata or null if not available\n *\n * @example\n * ```typescript\n * const metadata = await discoverOAuthMetadata('https://agent.example.com/mcp');\n * if (metadata) {\n * console.log('Authorization URL:', metadata.authorization_endpoint);\n * console.log('Supports dynamic registration:', !!metadata.registration_endpoint);\n * }\n * ```\n */\nexport async function discoverOAuthMetadata(\n agentUrl: string,\n options: DiscoveryOptions = {}\n): Promise<OAuthMetadata | null> {\n // Wrap with the response-size-limit guard so a hostile metadata endpoint\n // can't buffer-bomb during discovery. Pass-through when no\n // `withResponseSizeLimit` slot is active. (#1175)\n const { timeout = 5000, fetch: providedFetch = fetch } = options;\n const customFetch = wrapFetchWithSizeLimit(providedFetch);\n throwIfAborted(options.signal);\n\n try {\n const baseUrl = new URL(agentUrl);\n\n // RFC 8414 path-aware discovery: try path-suffixed URL first, then fall back to root.\n // For https://example.com/mcp, try:\n // 1. https://example.com/.well-known/oauth-authorization-server/mcp\n // 2. https://example.com/.well-known/oauth-authorization-server (fallback)\n const pathname = baseUrl.pathname.endsWith('/') ? baseUrl.pathname.slice(0, -1) : baseUrl.pathname;\n const hasPath = pathname !== '' && pathname !== '/';\n\n const pathAwareUrl = hasPath ? new URL(`/.well-known/oauth-authorization-server${pathname}`, baseUrl.origin) : null;\n const rootUrl = new URL('/.well-known/oauth-authorization-server', baseUrl.origin);\n\n const urlsToTry = pathAwareUrl ? [pathAwareUrl, rootUrl] : [rootUrl];\n\n for (const metadataUrl of urlsToTry) {\n const timeoutSignal = AbortSignal.timeout(timeout);\n const signal = options.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal;\n\n try {\n const response = await customFetch(metadataUrl.toString(), {\n headers: { Accept: 'application/json' },\n signal,\n });\n\n if (!response.ok) {\n continue;\n }\n\n const metadata = (await response.json()) as OAuthMetadata;\n\n // Validate required fields\n if (!metadata.authorization_endpoint || !metadata.token_endpoint) {\n continue;\n }\n\n return metadata;\n } catch {\n throwIfAborted(options.signal);\n // Parse error, timeout, or network error on this URL -- try next\n continue;\n }\n }\n\n return null;\n } catch {\n throwIfAborted(options.signal);\n // Network error, timeout, or invalid URL - agent doesn't support OAuth\n return null;\n }\n}\n\n/**\n * Check if an MCP server supports OAuth authentication\n *\n * This is a simple boolean check - use discoverOAuthMetadata() if you need\n * the actual endpoints.\n *\n * @param agentUrl - The MCP server URL\n * @param options - Discovery options\n * @returns true if the server supports OAuth\n *\n * @example\n * ```typescript\n * if (await supportsOAuth('https://agent.example.com/mcp')) {\n * console.log('Agent requires OAuth authentication');\n * }\n * ```\n */\nexport async function supportsOAuth(agentUrl: string, options: DiscoveryOptions = {}): Promise<boolean> {\n const metadata = await discoverOAuthMetadata(agentUrl, options);\n return metadata !== null;\n}\n\n/**\n * Check if an MCP server supports dynamic client registration\n *\n * Servers that support dynamic registration allow clients to register\n * automatically without pre-configured credentials.\n *\n * @param agentUrl - The MCP server URL\n * @param options - Discovery options\n * @returns true if the server supports dynamic client registration\n *\n * @example\n * ```typescript\n * if (await supportsDynamicRegistration('https://agent.example.com/mcp')) {\n * console.log('Agent supports automatic client registration');\n * }\n * ```\n */\nexport async function supportsDynamicRegistration(agentUrl: string, options: DiscoveryOptions = {}): Promise<boolean> {\n const metadata = await discoverOAuthMetadata(agentUrl, options);\n return metadata?.registration_endpoint !== undefined;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,+BAAuC;AACvC,mBAA+B;AA0D/B,eAAsB,sBACpB,UACA,UAA4B,CAAC,GACE;AAI/B,QAAM,EAAE,UAAU,KAAM,OAAO,gBAAgB,MAAM,IAAI;AACzD,QAAM,kBAAc,iDAAuB,aAAa;AACxD,mCAAe,QAAQ,MAAM;AAE7B,MAAI;AACF,UAAM,UAAU,IAAI,IAAI,QAAQ;AAMhC,UAAM,WAAW,QAAQ,SAAS,SAAS,GAAG,IAAI,QAAQ,SAAS,MAAM,GAAG,EAAE,IAAI,QAAQ;AAC1F,UAAM,UAAU,aAAa,MAAM,aAAa;AAEhD,UAAM,eAAe,UAAU,IAAI,IAAI,0CAA0C,QAAQ,IAAI,QAAQ,MAAM,IAAI;AAC/G,UAAM,UAAU,IAAI,IAAI,2CAA2C,QAAQ,MAAM;AAEjF,UAAM,YAAY,eAAe,CAAC,cAAc,OAAO,IAAI,CAAC,OAAO;AAEnE,eAAW,eAAe,WAAW;AACnC,YAAM,gBAAgB,YAAY,QAAQ,OAAO;AACjD,YAAM,SAAS,QAAQ,SAAS,YAAY,IAAI,CAAC,QAAQ,QAAQ,aAAa,CAAC,IAAI;AAEnF,UAAI;AACF,cAAM,WAAW,MAAM,YAAY,YAAY,SAAS,GAAG;AAAA,UACzD,SAAS,EAAE,QAAQ,mBAAmB;AAAA,UACtC;AAAA,QACF,CAAC;AAED,YAAI,CAAC,SAAS,IAAI;AAChB;AAAA,QACF;AAEA,cAAM,WAAY,MAAM,SAAS,KAAK;AAGtC,YAAI,CAAC,SAAS,0BAA0B,CAAC,SAAS,gBAAgB;AAChE;AAAA,QACF;AAEA,eAAO;AAAA,MACT,QAAQ;AACN,yCAAe,QAAQ,MAAM;AAE7B;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,QAAQ;AACN,qCAAe,QAAQ,MAAM;AAE7B,WAAO;AAAA,EACT;AACF;AAmBA,eAAsB,cAAc,UAAkB,UAA4B,CAAC,GAAqB;AACtG,QAAM,WAAW,MAAM,sBAAsB,UAAU,OAAO;AAC9D,SAAO,aAAa;AACtB;AAmBA,eAAsB,4BAA4B,UAAkB,UAA4B,CAAC,GAAqB;AACpH,QAAM,WAAW,MAAM,sBAAsB,UAAU,OAAO;AAC9D,SAAO,UAAU,0BAA0B;AAC7C;","names":[]}