@adcp/sdk 8.1.0-beta.13 → 8.1.0-beta.14

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 (363) hide show
  1. package/README.md +1 -1
  2. package/bin/adcp-registry.js +2 -2
  3. package/dist/lib/canonical-references/index.d.ts +107 -0
  4. package/dist/lib/canonical-references/index.d.ts.map +1 -0
  5. package/dist/lib/canonical-references/index.js +551 -0
  6. package/dist/lib/canonical-references/index.js.map +1 -0
  7. package/dist/lib/core/ConversationTypes.d.ts +7 -0
  8. package/dist/lib/core/ConversationTypes.d.ts.map +1 -1
  9. package/dist/lib/core/ProtocolResponseParser.d.ts +10 -0
  10. package/dist/lib/core/ProtocolResponseParser.d.ts.map +1 -1
  11. package/dist/lib/core/ProtocolResponseParser.js +110 -0
  12. package/dist/lib/core/ProtocolResponseParser.js.map +1 -1
  13. package/dist/lib/core/ResponseValidator.d.ts +2 -0
  14. package/dist/lib/core/ResponseValidator.d.ts.map +1 -1
  15. package/dist/lib/core/ResponseValidator.js +3 -3
  16. package/dist/lib/core/ResponseValidator.js.map +1 -1
  17. package/dist/lib/core/TaskExecutor.d.ts +2 -0
  18. package/dist/lib/core/TaskExecutor.d.ts.map +1 -1
  19. package/dist/lib/core/TaskExecutor.js +32 -8
  20. package/dist/lib/core/TaskExecutor.js.map +1 -1
  21. package/dist/lib/index.d.ts +5 -4
  22. package/dist/lib/index.d.ts.map +1 -1
  23. package/dist/lib/index.js +27 -11
  24. package/dist/lib/index.js.map +1 -1
  25. package/dist/lib/mock-server/creative-ad-server/server.d.ts +2 -0
  26. package/dist/lib/mock-server/creative-ad-server/server.d.ts.map +1 -1
  27. package/dist/lib/mock-server/creative-ad-server/server.js +37 -1
  28. package/dist/lib/mock-server/creative-ad-server/server.js.map +1 -1
  29. package/dist/lib/mock-server/creative-template/server.d.ts +2 -0
  30. package/dist/lib/mock-server/creative-template/server.d.ts.map +1 -1
  31. package/dist/lib/mock-server/creative-template/server.js +29 -2
  32. package/dist/lib/mock-server/creative-template/server.js.map +1 -1
  33. package/dist/lib/mock-server/index.d.ts +10 -1
  34. package/dist/lib/mock-server/index.d.ts.map +1 -1
  35. package/dist/lib/mock-server/index.js +38 -8
  36. package/dist/lib/mock-server/index.js.map +1 -1
  37. package/dist/lib/mock-server/sales-guaranteed/server.d.ts +2 -0
  38. package/dist/lib/mock-server/sales-guaranteed/server.d.ts.map +1 -1
  39. package/dist/lib/mock-server/sales-guaranteed/server.js +64 -7
  40. package/dist/lib/mock-server/sales-guaranteed/server.js.map +1 -1
  41. package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts +2 -0
  42. package/dist/lib/mock-server/sales-non-guaranteed/server.d.ts.map +1 -1
  43. package/dist/lib/mock-server/sales-non-guaranteed/server.js +44 -1
  44. package/dist/lib/mock-server/sales-non-guaranteed/server.js.map +1 -1
  45. package/dist/lib/mock-server/sales-social/server.d.ts +2 -0
  46. package/dist/lib/mock-server/sales-social/server.d.ts.map +1 -1
  47. package/dist/lib/mock-server/sales-social/server.js +64 -4
  48. package/dist/lib/mock-server/sales-social/server.js.map +1 -1
  49. package/dist/lib/mock-server/scenario.d.ts +97 -0
  50. package/dist/lib/mock-server/scenario.d.ts.map +1 -0
  51. package/dist/lib/mock-server/scenario.js +464 -0
  52. package/dist/lib/mock-server/scenario.js.map +1 -0
  53. package/dist/lib/mock-server/signal-marketplace/server.d.ts +2 -0
  54. package/dist/lib/mock-server/signal-marketplace/server.d.ts.map +1 -1
  55. package/dist/lib/mock-server/signal-marketplace/server.js +29 -1
  56. package/dist/lib/mock-server/signal-marketplace/server.js.map +1 -1
  57. package/dist/lib/mock-server/sponsored-intelligence/server.d.ts +2 -0
  58. package/dist/lib/mock-server/sponsored-intelligence/server.d.ts.map +1 -1
  59. package/dist/lib/mock-server/sponsored-intelligence/server.js +47 -9
  60. package/dist/lib/mock-server/sponsored-intelligence/server.js.map +1 -1
  61. package/dist/lib/protocols/index.d.ts +4 -2
  62. package/dist/lib/protocols/index.d.ts.map +1 -1
  63. package/dist/lib/protocols/index.js +10 -3
  64. package/dist/lib/protocols/index.js.map +1 -1
  65. package/dist/lib/registry/index.d.ts +42 -16
  66. package/dist/lib/registry/index.d.ts.map +1 -1
  67. package/dist/lib/registry/index.js +191 -24
  68. package/dist/lib/registry/index.js.map +1 -1
  69. package/dist/lib/registry/types.d.ts +39 -8
  70. package/dist/lib/registry/types.d.ts.map +1 -1
  71. package/dist/lib/registry/types.generated.d.ts +2873 -699
  72. package/dist/lib/registry/types.generated.d.ts.map +1 -1
  73. package/dist/lib/registry/types.generated.js +2 -2
  74. package/dist/lib/registry/types.generated.js.map +1 -1
  75. package/dist/lib/schemas-data/v2.5/_provenance.json +1 -1
  76. package/dist/lib/server/a2a-adapter.d.ts +3 -1
  77. package/dist/lib/server/a2a-adapter.d.ts.map +1 -1
  78. package/dist/lib/server/a2a-adapter.js +11 -2
  79. package/dist/lib/server/a2a-adapter.js.map +1 -1
  80. package/dist/lib/server/adcp-server.js +32 -0
  81. package/dist/lib/server/adcp-server.js.map +1 -1
  82. package/dist/lib/server/create-adcp-server.d.ts +12 -6
  83. package/dist/lib/server/create-adcp-server.d.ts.map +1 -1
  84. package/dist/lib/server/create-adcp-server.js +72 -11
  85. package/dist/lib/server/create-adcp-server.js.map +1 -1
  86. package/dist/lib/server/decisioning/account.d.ts +17 -17
  87. package/dist/lib/server/decisioning/account.d.ts.map +1 -1
  88. package/dist/lib/server/decisioning/account.js.map +1 -1
  89. package/dist/lib/server/decisioning/buyer-agent.d.ts +27 -10
  90. package/dist/lib/server/decisioning/buyer-agent.d.ts.map +1 -1
  91. package/dist/lib/server/decisioning/buyer-agent.js +25 -7
  92. package/dist/lib/server/decisioning/buyer-agent.js.map +1 -1
  93. package/dist/lib/server/decisioning/capabilities.d.ts +35 -7
  94. package/dist/lib/server/decisioning/capabilities.d.ts.map +1 -1
  95. package/dist/lib/server/decisioning/errors-typed.d.ts +18 -16
  96. package/dist/lib/server/decisioning/errors-typed.d.ts.map +1 -1
  97. package/dist/lib/server/decisioning/errors-typed.js +26 -24
  98. package/dist/lib/server/decisioning/errors-typed.js.map +1 -1
  99. package/dist/lib/server/decisioning/index.d.ts +1 -1
  100. package/dist/lib/server/decisioning/index.d.ts.map +1 -1
  101. package/dist/lib/server/decisioning/index.js +4 -2
  102. package/dist/lib/server/decisioning/index.js.map +1 -1
  103. package/dist/lib/server/decisioning/platform-helpers.d.ts +3 -2
  104. package/dist/lib/server/decisioning/platform-helpers.d.ts.map +1 -1
  105. package/dist/lib/server/decisioning/platform-helpers.js +3 -2
  106. package/dist/lib/server/decisioning/platform-helpers.js.map +1 -1
  107. package/dist/lib/server/decisioning/platform.d.ts +27 -10
  108. package/dist/lib/server/decisioning/platform.d.ts.map +1 -1
  109. package/dist/lib/server/decisioning/platform.js.map +1 -1
  110. package/dist/lib/server/decisioning/runtime/from-platform.d.ts +14 -10
  111. package/dist/lib/server/decisioning/runtime/from-platform.d.ts.map +1 -1
  112. package/dist/lib/server/decisioning/runtime/from-platform.js +374 -59
  113. package/dist/lib/server/decisioning/runtime/from-platform.js.map +1 -1
  114. package/dist/lib/server/decisioning/runtime/validate-platform.d.ts.map +1 -1
  115. package/dist/lib/server/decisioning/runtime/validate-platform.js +3 -8
  116. package/dist/lib/server/decisioning/runtime/validate-platform.js.map +1 -1
  117. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts +9 -11
  118. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.d.ts.map +1 -1
  119. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js +9 -11
  120. package/dist/lib/server/decisioning/specialisms/sponsored-intelligence.js.map +1 -1
  121. package/dist/lib/server/operational-platform.d.ts +6 -8
  122. package/dist/lib/server/operational-platform.d.ts.map +1 -1
  123. package/dist/lib/server/operational-platform.js +4 -6
  124. package/dist/lib/server/operational-platform.js.map +1 -1
  125. package/dist/lib/server/test-controller-bridge.d.ts +14 -14
  126. package/dist/lib/server/test-controller-bridge.d.ts.map +1 -1
  127. package/dist/lib/server/test-controller-bridge.js +16 -16
  128. package/dist/lib/server/test-controller-bridge.js.map +1 -1
  129. package/dist/lib/server/test-controller.d.ts +31 -9
  130. package/dist/lib/server/test-controller.d.ts.map +1 -1
  131. package/dist/lib/server/test-controller.js +106 -54
  132. package/dist/lib/server/test-controller.js.map +1 -1
  133. package/dist/lib/signing/canonicalize.d.ts +0 -53
  134. package/dist/lib/signing/canonicalize.d.ts.map +1 -1
  135. package/dist/lib/signing/canonicalize.js +1 -33
  136. package/dist/lib/signing/canonicalize.js.map +1 -1
  137. package/dist/lib/signing/client.d.ts +5 -5
  138. package/dist/lib/signing/client.d.ts.map +1 -1
  139. package/dist/lib/signing/client.js +1 -10
  140. package/dist/lib/signing/client.js.map +1 -1
  141. package/dist/lib/signing/errors.d.ts +0 -11
  142. package/dist/lib/signing/errors.d.ts.map +1 -1
  143. package/dist/lib/signing/errors.js +1 -11
  144. package/dist/lib/signing/errors.js.map +1 -1
  145. package/dist/lib/signing/jwks-helpers.d.ts +2 -4
  146. package/dist/lib/signing/jwks-helpers.d.ts.map +1 -1
  147. package/dist/lib/signing/jwks-helpers.js +9 -0
  148. package/dist/lib/signing/jwks-helpers.js.map +1 -1
  149. package/dist/lib/signing/provider.d.ts +11 -10
  150. package/dist/lib/signing/provider.d.ts.map +1 -1
  151. package/dist/lib/signing/request-context.d.ts +8 -11
  152. package/dist/lib/signing/request-context.d.ts.map +1 -1
  153. package/dist/lib/signing/request-context.js +7 -10
  154. package/dist/lib/signing/request-context.js.map +1 -1
  155. package/dist/lib/signing/server.d.ts +3 -4
  156. package/dist/lib/signing/server.d.ts.map +1 -1
  157. package/dist/lib/signing/server.js +1 -9
  158. package/dist/lib/signing/server.js.map +1 -1
  159. package/dist/lib/signing/signer-async.d.ts +2 -8
  160. package/dist/lib/signing/signer-async.d.ts.map +1 -1
  161. package/dist/lib/signing/signer-async.js +0 -12
  162. package/dist/lib/signing/signer-async.js.map +1 -1
  163. package/dist/lib/signing/signer.d.ts +4 -111
  164. package/dist/lib/signing/signer.d.ts.map +1 -1
  165. package/dist/lib/signing/signer.js +2 -98
  166. package/dist/lib/signing/signer.js.map +1 -1
  167. package/dist/lib/signing/testing.d.ts +10 -10
  168. package/dist/lib/signing/testing.d.ts.map +1 -1
  169. package/dist/lib/signing/testing.js +6 -13
  170. package/dist/lib/signing/testing.js.map +1 -1
  171. package/dist/lib/signing/types.d.ts +0 -36
  172. package/dist/lib/signing/types.d.ts.map +1 -1
  173. package/dist/lib/signing/types.js +1 -37
  174. package/dist/lib/signing/types.js.map +1 -1
  175. package/dist/lib/testing/agent-tester.d.ts +1 -0
  176. package/dist/lib/testing/agent-tester.d.ts.map +1 -1
  177. package/dist/lib/testing/agent-tester.js.map +1 -1
  178. package/dist/lib/testing/client.d.ts +1 -1
  179. package/dist/lib/testing/client.d.ts.map +1 -1
  180. package/dist/lib/testing/client.js +4 -2
  181. package/dist/lib/testing/client.js.map +1 -1
  182. package/dist/lib/testing/compliance/comply.d.ts +8 -0
  183. package/dist/lib/testing/compliance/comply.d.ts.map +1 -1
  184. package/dist/lib/testing/compliance/comply.js +98 -7
  185. package/dist/lib/testing/compliance/comply.js.map +1 -1
  186. package/dist/lib/testing/compliance/spec-conformance.d.ts +6 -6
  187. package/dist/lib/testing/compliance/spec-conformance.d.ts.map +1 -1
  188. package/dist/lib/testing/compliance/spec-conformance.js +6 -6
  189. package/dist/lib/testing/compliance/spec-conformance.js.map +1 -1
  190. package/dist/lib/testing/compliance/summary.d.ts +5 -0
  191. package/dist/lib/testing/compliance/summary.d.ts.map +1 -1
  192. package/dist/lib/testing/compliance/summary.js +17 -0
  193. package/dist/lib/testing/compliance/summary.js.map +1 -1
  194. package/dist/lib/testing/comply-controller.d.ts +19 -0
  195. package/dist/lib/testing/comply-controller.d.ts.map +1 -1
  196. package/dist/lib/testing/comply-controller.js +11 -8
  197. package/dist/lib/testing/comply-controller.js.map +1 -1
  198. package/dist/lib/testing/index.d.ts +4 -3
  199. package/dist/lib/testing/index.d.ts.map +1 -1
  200. package/dist/lib/testing/index.js +13 -1
  201. package/dist/lib/testing/index.js.map +1 -1
  202. package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts +4 -0
  203. package/dist/lib/testing/storyboard/canonical-format-satisfaction.d.ts.map +1 -0
  204. package/dist/lib/testing/storyboard/canonical-format-satisfaction.js +881 -0
  205. package/dist/lib/testing/storyboard/canonical-format-satisfaction.js.map +1 -0
  206. package/dist/lib/testing/storyboard/compliance.d.ts +6 -0
  207. package/dist/lib/testing/storyboard/compliance.d.ts.map +1 -1
  208. package/dist/lib/testing/storyboard/compliance.js +8 -4
  209. package/dist/lib/testing/storyboard/compliance.js.map +1 -1
  210. package/dist/lib/testing/storyboard/index.d.ts +2 -1
  211. package/dist/lib/testing/storyboard/index.d.ts.map +1 -1
  212. package/dist/lib/testing/storyboard/index.js +9 -1
  213. package/dist/lib/testing/storyboard/index.js.map +1 -1
  214. package/dist/lib/testing/storyboard/loader.d.ts +3 -2
  215. package/dist/lib/testing/storyboard/loader.d.ts.map +1 -1
  216. package/dist/lib/testing/storyboard/loader.js +73 -2
  217. package/dist/lib/testing/storyboard/loader.js.map +1 -1
  218. package/dist/lib/testing/storyboard/path.d.ts +21 -0
  219. package/dist/lib/testing/storyboard/path.d.ts.map +1 -1
  220. package/dist/lib/testing/storyboard/path.js +86 -0
  221. package/dist/lib/testing/storyboard/path.js.map +1 -1
  222. package/dist/lib/testing/storyboard/rate-limit-trip.d.ts +92 -0
  223. package/dist/lib/testing/storyboard/rate-limit-trip.d.ts.map +1 -0
  224. package/dist/lib/testing/storyboard/rate-limit-trip.js +276 -0
  225. package/dist/lib/testing/storyboard/rate-limit-trip.js.map +1 -0
  226. package/dist/lib/testing/storyboard/runner.d.ts.map +1 -1
  227. package/dist/lib/testing/storyboard/runner.js +361 -28
  228. package/dist/lib/testing/storyboard/runner.js.map +1 -1
  229. package/dist/lib/testing/storyboard/seeding.d.ts +5 -4
  230. package/dist/lib/testing/storyboard/seeding.d.ts.map +1 -1
  231. package/dist/lib/testing/storyboard/seeding.js +23 -3
  232. package/dist/lib/testing/storyboard/seeding.js.map +1 -1
  233. package/dist/lib/testing/storyboard/types.d.ts +108 -20
  234. package/dist/lib/testing/storyboard/types.d.ts.map +1 -1
  235. package/dist/lib/testing/storyboard/types.js +1 -0
  236. package/dist/lib/testing/storyboard/types.js.map +1 -1
  237. package/dist/lib/testing/storyboard/validations.d.ts +18 -0
  238. package/dist/lib/testing/storyboard/validations.d.ts.map +1 -1
  239. package/dist/lib/testing/storyboard/validations.js +238 -33
  240. package/dist/lib/testing/storyboard/validations.js.map +1 -1
  241. package/dist/lib/testing/test-controller.d.ts +17 -25
  242. package/dist/lib/testing/test-controller.d.ts.map +1 -1
  243. package/dist/lib/testing/test-controller.js.map +1 -1
  244. package/dist/lib/testing/types.d.ts +13 -1
  245. package/dist/lib/testing/types.d.ts.map +1 -1
  246. package/dist/lib/types/check-governance.d.ts +1 -1
  247. package/dist/lib/types/comply-test-controller.d.ts +243 -3
  248. package/dist/lib/types/core.generated.d.ts +261 -21
  249. package/dist/lib/types/core.generated.d.ts.map +1 -1
  250. package/dist/lib/types/core.generated.js +1 -1
  251. package/dist/lib/types/create-media-buy.d.ts +107 -3
  252. package/dist/lib/types/error-codes.d.ts +2 -2
  253. package/dist/lib/types/get-adcp-capabilities.d.ts +1 -1
  254. package/dist/lib/types/get-media-buys.d.ts +107 -3
  255. package/dist/lib/types/get-plan-audit-logs.d.ts +1 -1
  256. package/dist/lib/types/get-products.d.ts +104 -3
  257. package/dist/lib/types/inline-enums.generated.d.ts +27 -17
  258. package/dist/lib/types/inline-enums.generated.d.ts.map +1 -1
  259. package/dist/lib/types/inline-enums.generated.js +39 -28
  260. package/dist/lib/types/inline-enums.generated.js.map +1 -1
  261. package/dist/lib/types/manifest.generated.d.ts +7 -4
  262. package/dist/lib/types/manifest.generated.d.ts.map +1 -1
  263. package/dist/lib/types/manifest.generated.js +2 -2
  264. package/dist/lib/types/manifest.generated.js.map +1 -1
  265. package/dist/lib/types/report-plan-outcome.d.ts +1 -1
  266. package/dist/lib/types/schemas.generated.d.ts +714 -193
  267. package/dist/lib/types/schemas.generated.d.ts.map +1 -1
  268. package/dist/lib/types/schemas.generated.js +194 -79
  269. package/dist/lib/types/schemas.generated.js.map +1 -1
  270. package/dist/lib/types/sync-plans.d.ts +1 -1
  271. package/dist/lib/types/tools.generated.d.ts +331 -28
  272. package/dist/lib/types/tools.generated.d.ts.map +1 -1
  273. package/dist/lib/types/update-media-buy.d.ts +107 -3
  274. package/dist/lib/types/v3-1-beta/tools.generated.d.ts +20 -0
  275. package/dist/lib/types/v3-1-beta/tools.generated.d.ts.map +1 -1
  276. package/dist/lib/upstream-recorder/constants.d.ts +2 -0
  277. package/dist/lib/upstream-recorder/constants.d.ts.map +1 -0
  278. package/dist/lib/upstream-recorder/constants.js +5 -0
  279. package/dist/lib/upstream-recorder/constants.js.map +1 -0
  280. package/dist/lib/upstream-recorder/index.d.ts +20 -10
  281. package/dist/lib/upstream-recorder/index.d.ts.map +1 -1
  282. package/dist/lib/upstream-recorder/index.js +21 -10
  283. package/dist/lib/upstream-recorder/index.js.map +1 -1
  284. package/dist/lib/upstream-recorder/recorder.d.ts +65 -0
  285. package/dist/lib/upstream-recorder/recorder.d.ts.map +1 -1
  286. package/dist/lib/upstream-recorder/recorder.js +500 -47
  287. package/dist/lib/upstream-recorder/recorder.js.map +1 -1
  288. package/dist/lib/upstream-recorder/types.d.ts +109 -13
  289. package/dist/lib/upstream-recorder/types.d.ts.map +1 -1
  290. package/dist/lib/upstream-recorder/types.js.map +1 -1
  291. package/dist/lib/utils/adcp-version-config.d.ts +1 -0
  292. package/dist/lib/utils/adcp-version-config.d.ts.map +1 -1
  293. package/dist/lib/utils/adcp-version-config.js +21 -0
  294. package/dist/lib/utils/adcp-version-config.js.map +1 -1
  295. package/dist/lib/utils/capability-rollups.d.ts +5 -5
  296. package/dist/lib/utils/capability-rollups.d.ts.map +1 -1
  297. package/dist/lib/utils/capability-rollups.js +1 -1
  298. package/dist/lib/utils/capability-rollups.js.map +1 -1
  299. package/dist/lib/utils/json-depth.d.ts +2 -0
  300. package/dist/lib/utils/json-depth.d.ts.map +1 -0
  301. package/dist/lib/utils/json-depth.js +5 -0
  302. package/dist/lib/utils/json-depth.js.map +1 -0
  303. package/dist/lib/utils/media-buy-delivery-notification-builders.d.ts +1 -1
  304. package/dist/lib/utils/media-buy-delivery-notification-builders.d.ts.map +1 -1
  305. package/dist/lib/utils/preview-creative-builders.d.ts +1 -1
  306. package/dist/lib/utils/preview-creative-builders.d.ts.map +1 -1
  307. package/dist/lib/utils/redact-secrets.d.ts +13 -2
  308. package/dist/lib/utils/redact-secrets.d.ts.map +1 -1
  309. package/dist/lib/utils/redact-secrets.js +40 -13
  310. package/dist/lib/utils/redact-secrets.js.map +1 -1
  311. package/dist/lib/utils/response-schemas.d.ts +1 -0
  312. package/dist/lib/utils/response-schemas.d.ts.map +1 -1
  313. package/dist/lib/utils/response-schemas.js +15 -0
  314. package/dist/lib/utils/response-schemas.js.map +1 -1
  315. package/dist/lib/utils/response-unwrapper.d.ts +2 -1
  316. package/dist/lib/utils/response-unwrapper.d.ts.map +1 -1
  317. package/dist/lib/utils/response-unwrapper.js +11 -3
  318. package/dist/lib/utils/response-unwrapper.js.map +1 -1
  319. package/dist/lib/utils/tool-request-schemas.d.ts +31 -1
  320. package/dist/lib/utils/tool-request-schemas.d.ts.map +1 -1
  321. package/dist/lib/v2/format-schema/fetch.d.ts +13 -5
  322. package/dist/lib/v2/format-schema/fetch.d.ts.map +1 -1
  323. package/dist/lib/v2/format-schema/fetch.js +27 -16
  324. package/dist/lib/v2/format-schema/fetch.js.map +1 -1
  325. package/dist/lib/v2/format-schema/index.d.ts +13 -11
  326. package/dist/lib/v2/format-schema/index.d.ts.map +1 -1
  327. package/dist/lib/v2/format-schema/index.js +19 -12
  328. package/dist/lib/v2/format-schema/index.js.map +1 -1
  329. package/dist/lib/v2/format-schema/resolver.d.ts +71 -0
  330. package/dist/lib/v2/format-schema/resolver.d.ts.map +1 -0
  331. package/dist/lib/v2/format-schema/resolver.js +284 -0
  332. package/dist/lib/v2/format-schema/resolver.js.map +1 -0
  333. package/dist/lib/v2/format-schema/sandbox-refs.d.ts +6 -0
  334. package/dist/lib/v2/format-schema/sandbox-refs.d.ts.map +1 -1
  335. package/dist/lib/v2/format-schema/sandbox-refs.js +36 -15
  336. package/dist/lib/v2/format-schema/sandbox-refs.js.map +1 -1
  337. package/dist/lib/validation/schema-loader.d.ts.map +1 -1
  338. package/dist/lib/validation/schema-loader.js +48 -3
  339. package/dist/lib/validation/schema-loader.js.map +1 -1
  340. package/dist/lib/version.d.ts +3 -3
  341. package/dist/lib/version.js +3 -3
  342. package/docs/guides/BUILD-AN-AGENT.md +7 -7
  343. package/docs/guides/CANONICAL-REFERENCE-RESOLVER.md +75 -0
  344. package/docs/llms.txt +37 -8
  345. package/examples/README.md +29 -16
  346. package/examples/hello_creative_adapter_ad_server.ts +8 -2
  347. package/examples/hello_seller_adapter_guaranteed.ts +26 -18
  348. package/examples/hello_seller_adapter_multi_tenant.ts +6 -6
  349. package/examples/hello_seller_adapter_social.ts +80 -4
  350. package/examples/hello_si_adapter_brand.ts +10 -21
  351. package/examples/hello_signals_adapter_marketplace.ts +184 -9
  352. package/examples/proxy-seller-snap/README.md +47 -0
  353. package/examples/proxy-seller-snap/index.ts +321 -0
  354. package/package.json +19 -4
  355. package/skills/build-creative-agent/SKILL.md +1 -15
  356. package/skills/build-decisioning-platform/SKILL.md +6 -1
  357. package/skills/build-seller-agent/SKILL.md +5 -2
  358. package/skills/build-si-agent/SKILL.md +2 -2
  359. package/skills/call-adcp-agent/SKILL.md +4 -1
  360. package/dist/lib/signing/response-verifier.d.ts +0 -105
  361. package/dist/lib/signing/response-verifier.d.ts.map +0 -1
  362. package/dist/lib/signing/response-verifier.js +0 -271
  363. package/dist/lib/signing/response-verifier.js.map +0 -1
@@ -1,19 +1,20 @@
1
1
  /**
2
- * Format-schema fetcher for AdCP 3.1's
3
- * `ProductFormatDeclaration.format_schema` references — the URI+digest
4
- * pointer to an out-of-tree JSON Schema document describing a custom
5
- * format's `params` and `slots` shape.
2
+ * Canonical reference resolver for AdCP 3.1 `format_schema` and
3
+ * `platform_extensions` URI+digest references.
6
4
  *
7
- * Use after `projectV1ProductToV2` or directly on V2 declarations whose
8
- * `format_kind: "custom"` carries a `format_schema` reference:
5
+ * Use the high-level resolver after `projectV1ProductToV2` or directly
6
+ * on V2 declarations. It returns structured statuses instead of
7
+ * throwing, keeps a caller-scoped immutable cache, resolves and compiles
8
+ * custom format schemas, and uses the same hardened transport for
9
+ * platform-extension definitions.
9
10
  *
10
11
  * ```ts
11
- * import { fetchFormatSchema } from '@adcp/sdk/v2/format-schema';
12
+ * import { createCanonicalReferenceResolver } from '@adcp/sdk/v2/format-schema';
12
13
  *
13
- * const { format_schema } = decl;
14
- * if (format_schema) {
15
- * const { schema, fromCache } = await fetchFormatSchema(format_schema);
16
- * // Use `schema` to validate the placement manifest at runtime.
14
+ * const resolver = createCanonicalReferenceResolver();
15
+ * const result = await resolver.resolveFormatSchema(decl.format_schema);
16
+ * if (result.ok) {
17
+ * // Use `result.document` to validate the placement manifest.
17
18
  * }
18
19
  * ```
19
20
  *
@@ -23,4 +24,5 @@
23
24
  */
24
25
  export { fetchFormatSchema, FormatSchemaFetchError, _resetFormatSchemaCache, type FormatSchemaRef, type FormatSchemaFetchResult, type FormatSchemaFetchErrorCode, type FetchFormatSchemaOptions, type FormatSchemaCache, } from './fetch';
25
26
  export { resolveSchemaRefs, SchemaRefSandboxError, DEFAULT_MAX_REF_DEPTH, DEFAULT_MAX_REF_COUNT, DEFAULT_MIRROR_HOST, DEFAULT_MIRROR_HOSTS, DEFAULT_MAX_KEYWORDS, DEFAULT_VALIDATION_BUDGET_MS, type SchemaRefSandboxErrorCode, type ResolveSchemaRefsOptions, type ResolveSchemaRefsResult, } from './sandbox-refs';
27
+ export { createCanonicalRefResolver, createCanonicalReferenceResolver, createMemoryCanonicalReferenceCache, resolveFormatSchema, resolvePlatformExtension, type CanonicalReferenceCache, type CanonicalRef, type CanonicalReferenceFailureResult, type CanonicalReferenceKind, type CanonicalReferenceResolvedResult, type CanonicalReferenceResolutionCode, type CanonicalReferenceResolutionResult, type CanonicalReferenceResolutionStatus, type CanonicalReferenceResolver, type CanonicalReferenceResolverOptions, type ResolveCanonicalReferenceOptions, } from './resolver';
26
28
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,0BAA0B,EAC1B,gCAAgC,EAChC,mCAAmC,EACnC,mBAAmB,EACnB,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,gCAAgC,EACrC,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,EACvC,KAAK,kCAAkC,EACvC,KAAK,0BAA0B,EAC/B,KAAK,iCAAiC,EACtC,KAAK,gCAAgC,GACtC,MAAM,YAAY,CAAC"}
@@ -1,20 +1,21 @@
1
1
  "use strict";
2
2
  /**
3
- * Format-schema fetcher for AdCP 3.1's
4
- * `ProductFormatDeclaration.format_schema` references — the URI+digest
5
- * pointer to an out-of-tree JSON Schema document describing a custom
6
- * format's `params` and `slots` shape.
3
+ * Canonical reference resolver for AdCP 3.1 `format_schema` and
4
+ * `platform_extensions` URI+digest references.
7
5
  *
8
- * Use after `projectV1ProductToV2` or directly on V2 declarations whose
9
- * `format_kind: "custom"` carries a `format_schema` reference:
6
+ * Use the high-level resolver after `projectV1ProductToV2` or directly
7
+ * on V2 declarations. It returns structured statuses instead of
8
+ * throwing, keeps a caller-scoped immutable cache, resolves and compiles
9
+ * custom format schemas, and uses the same hardened transport for
10
+ * platform-extension definitions.
10
11
  *
11
12
  * ```ts
12
- * import { fetchFormatSchema } from '@adcp/sdk/v2/format-schema';
13
+ * import { createCanonicalReferenceResolver } from '@adcp/sdk/v2/format-schema';
13
14
  *
14
- * const { format_schema } = decl;
15
- * if (format_schema) {
16
- * const { schema, fromCache } = await fetchFormatSchema(format_schema);
17
- * // Use `schema` to validate the placement manifest at runtime.
15
+ * const resolver = createCanonicalReferenceResolver();
16
+ * const result = await resolver.resolveFormatSchema(decl.format_schema);
17
+ * if (result.ok) {
18
+ * // Use `result.document` to validate the placement manifest.
18
19
  * }
19
20
  * ```
20
21
  *
@@ -23,7 +24,7 @@
23
24
  * verification, immutable `uri@digest` cache).
24
25
  */
25
26
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.DEFAULT_VALIDATION_BUDGET_MS = exports.DEFAULT_MAX_KEYWORDS = exports.DEFAULT_MIRROR_HOSTS = exports.DEFAULT_MIRROR_HOST = exports.DEFAULT_MAX_REF_COUNT = exports.DEFAULT_MAX_REF_DEPTH = exports.SchemaRefSandboxError = exports.resolveSchemaRefs = exports._resetFormatSchemaCache = exports.FormatSchemaFetchError = exports.fetchFormatSchema = void 0;
27
+ exports.resolvePlatformExtension = exports.resolveFormatSchema = exports.createMemoryCanonicalReferenceCache = exports.createCanonicalReferenceResolver = exports.createCanonicalRefResolver = exports.DEFAULT_VALIDATION_BUDGET_MS = exports.DEFAULT_MAX_KEYWORDS = exports.DEFAULT_MIRROR_HOSTS = exports.DEFAULT_MIRROR_HOST = exports.DEFAULT_MAX_REF_COUNT = exports.DEFAULT_MAX_REF_DEPTH = exports.SchemaRefSandboxError = exports.resolveSchemaRefs = exports._resetFormatSchemaCache = exports.FormatSchemaFetchError = exports.fetchFormatSchema = void 0;
27
28
  var fetch_1 = require("./fetch");
28
29
  Object.defineProperty(exports, "fetchFormatSchema", { enumerable: true, get: function () { return fetch_1.fetchFormatSchema; } });
29
30
  Object.defineProperty(exports, "FormatSchemaFetchError", { enumerable: true, get: function () { return fetch_1.FormatSchemaFetchError; } });
@@ -37,4 +38,10 @@ Object.defineProperty(exports, "DEFAULT_MIRROR_HOST", { enumerable: true, get: f
37
38
  Object.defineProperty(exports, "DEFAULT_MIRROR_HOSTS", { enumerable: true, get: function () { return sandbox_refs_1.DEFAULT_MIRROR_HOSTS; } });
38
39
  Object.defineProperty(exports, "DEFAULT_MAX_KEYWORDS", { enumerable: true, get: function () { return sandbox_refs_1.DEFAULT_MAX_KEYWORDS; } });
39
40
  Object.defineProperty(exports, "DEFAULT_VALIDATION_BUDGET_MS", { enumerable: true, get: function () { return sandbox_refs_1.DEFAULT_VALIDATION_BUDGET_MS; } });
41
+ var resolver_1 = require("./resolver");
42
+ Object.defineProperty(exports, "createCanonicalRefResolver", { enumerable: true, get: function () { return resolver_1.createCanonicalRefResolver; } });
43
+ Object.defineProperty(exports, "createCanonicalReferenceResolver", { enumerable: true, get: function () { return resolver_1.createCanonicalReferenceResolver; } });
44
+ Object.defineProperty(exports, "createMemoryCanonicalReferenceCache", { enumerable: true, get: function () { return resolver_1.createMemoryCanonicalReferenceCache; } });
45
+ Object.defineProperty(exports, "resolveFormatSchema", { enumerable: true, get: function () { return resolver_1.resolveFormatSchema; } });
46
+ Object.defineProperty(exports, "resolvePlatformExtension", { enumerable: true, get: function () { return resolver_1.resolvePlatformExtension; } });
40
47
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;;;AAEH,iCASiB;AARf,0GAAA,iBAAiB,OAAA;AACjB,+GAAA,sBAAsB,OAAA;AACtB,gHAAA,uBAAuB,OAAA;AAQzB,+CAYwB;AAXtB,iHAAA,iBAAiB,OAAA;AACjB,qHAAA,qBAAqB,OAAA;AACrB,qHAAA,qBAAqB,OAAA;AACrB,qHAAA,qBAAqB,OAAA;AACrB,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AACpB,oHAAA,oBAAoB,OAAA;AACpB,4HAAA,4BAA4B,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;AAEH,iCASiB;AARf,0GAAA,iBAAiB,OAAA;AACjB,+GAAA,sBAAsB,OAAA;AACtB,gHAAA,uBAAuB,OAAA;AAQzB,+CAYwB;AAXtB,iHAAA,iBAAiB,OAAA;AACjB,qHAAA,qBAAqB,OAAA;AACrB,qHAAA,qBAAqB,OAAA;AACrB,qHAAA,qBAAqB,OAAA;AACrB,mHAAA,mBAAmB,OAAA;AACnB,oHAAA,oBAAoB,OAAA;AACpB,oHAAA,oBAAoB,OAAA;AACpB,4HAAA,4BAA4B,OAAA;AAM9B,uCAiBoB;AAhBlB,sHAAA,0BAA0B,OAAA;AAC1B,4HAAA,gCAAgC,OAAA;AAChC,+HAAA,mCAAmC,OAAA;AACnC,+GAAA,mBAAmB,OAAA;AACnB,oHAAA,wBAAwB,OAAA"}
@@ -0,0 +1,71 @@
1
+ import { type FormatSchemaFetchErrorCode, type FormatSchemaRef } from './fetch';
2
+ import { type ResolveSchemaRefsOptions, type SchemaRefSandboxErrorCode } from './sandbox-refs';
3
+ export type CanonicalReferenceKind = 'format_schema' | 'platform_extensions';
4
+ export type CanonicalRef = FormatSchemaRef;
5
+ export type CanonicalReferenceResolutionStatus = 'resolved' | 'invalid_ref' | 'blocked_unsafe_url' | 'digest_mismatch' | 'invalid_schema' | 'unresolvable';
6
+ export type CanonicalReferenceResolutionCode = FormatSchemaFetchErrorCode | SchemaRefSandboxErrorCode | 'schema_dialect_unsupported' | 'schema_compile_failed' | 'schema_keyword_limit_exceeded';
7
+ export interface CanonicalReferenceResolvedResult {
8
+ ok: true;
9
+ status: 'resolved';
10
+ kind: CanonicalReferenceKind;
11
+ ref: FormatSchemaRef;
12
+ /**
13
+ * Resolved document. For `format_schema`, every allowed `$ref` has
14
+ * been inlined and the result has compiled as JSON Schema. For
15
+ * `platform_extensions`, this is the fetched JSON object.
16
+ */
17
+ document: Record<string, unknown>;
18
+ /** Original digest-verified document, before `$ref` inlining. */
19
+ rawDocument: Record<string, unknown>;
20
+ /** True when returned from the caller-scoped immutable cache. */
21
+ fromCache: boolean;
22
+ /** `format_schema` only: count of `$ref` occurrences resolved. */
23
+ refCount?: number;
24
+ /** `format_schema` only: deepest transitive `$ref` depth observed. */
25
+ maxDepthSeen?: number;
26
+ }
27
+ export interface CanonicalReferenceFailureResult {
28
+ ok: false;
29
+ status: Exclude<CanonicalReferenceResolutionStatus, 'resolved'>;
30
+ kind: CanonicalReferenceKind;
31
+ ref: Partial<FormatSchemaRef>;
32
+ /** Stable transport/schema subreason. Same value as `code`. */
33
+ reason: CanonicalReferenceResolutionCode;
34
+ code: CanonicalReferenceResolutionCode;
35
+ /** True for transient network/server/cap failures callers may retry. */
36
+ retryable: boolean;
37
+ message: string;
38
+ httpStatus?: number;
39
+ details?: Record<string, unknown>;
40
+ }
41
+ export type CanonicalReferenceResolutionResult = CanonicalReferenceResolvedResult | CanonicalReferenceFailureResult;
42
+ export interface CanonicalReferenceCache {
43
+ get(key: string): CanonicalReferenceResolvedResult | undefined;
44
+ set(key: string, value: CanonicalReferenceResolvedResult): void;
45
+ }
46
+ export interface CanonicalReferenceResolverOptions {
47
+ timeoutMs?: number;
48
+ maxBodyBytes?: number;
49
+ cache?: CanonicalReferenceCache;
50
+ maxRefDepth?: number;
51
+ maxRefCount?: number;
52
+ maxKeywords?: number;
53
+ allowInternalReferences?: boolean;
54
+ mirrorHost?: ResolveSchemaRefsOptions['mirrorHost'];
55
+ mirrorHosts?: ResolveSchemaRefsOptions['mirrorHosts'];
56
+ fetchExternal?: ResolveSchemaRefsOptions['fetchExternal'];
57
+ }
58
+ export interface ResolveCanonicalReferenceOptions extends CanonicalReferenceResolverOptions {
59
+ kind: CanonicalReferenceKind;
60
+ }
61
+ export interface CanonicalReferenceResolver {
62
+ resolveReference(ref: FormatSchemaRef, options: ResolveCanonicalReferenceOptions): Promise<CanonicalReferenceResolutionResult>;
63
+ resolveFormatSchema(ref: FormatSchemaRef, options?: CanonicalReferenceResolverOptions): Promise<CanonicalReferenceResolutionResult>;
64
+ resolvePlatformExtension(ref: FormatSchemaRef, options?: CanonicalReferenceResolverOptions): Promise<CanonicalReferenceResolutionResult>;
65
+ }
66
+ export declare function createMemoryCanonicalReferenceCache(): CanonicalReferenceCache;
67
+ export declare function createCanonicalReferenceResolver(defaultOptions?: CanonicalReferenceResolverOptions): CanonicalReferenceResolver;
68
+ export declare function resolveFormatSchema(ref: FormatSchemaRef, options?: CanonicalReferenceResolverOptions): Promise<CanonicalReferenceResolutionResult>;
69
+ export declare function resolvePlatformExtension(ref: FormatSchemaRef, options?: CanonicalReferenceResolverOptions): Promise<CanonicalReferenceResolutionResult>;
70
+ export declare const createCanonicalRefResolver: typeof createCanonicalReferenceResolver;
71
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createCanonicalRefResolver = void 0;
7
+ exports.createMemoryCanonicalReferenceCache = createMemoryCanonicalReferenceCache;
8
+ exports.createCanonicalReferenceResolver = createCanonicalReferenceResolver;
9
+ exports.resolveFormatSchema = resolveFormatSchema;
10
+ exports.resolvePlatformExtension = resolvePlatformExtension;
11
+ const _2019_1 = __importDefault(require("ajv/dist/2019"));
12
+ const ajv_formats_1 = __importDefault(require("ajv-formats"));
13
+ const json_schema_draft_07_json_1 = __importDefault(require("ajv/dist/refs/json-schema-draft-07.json"));
14
+ const fetch_1 = require("./fetch");
15
+ const sandbox_refs_1 = require("./sandbox-refs");
16
+ function createMemoryCanonicalReferenceCache() {
17
+ const store = new Map();
18
+ return {
19
+ get: key => {
20
+ const cached = store.get(key);
21
+ return cached ? cloneResolvedResult(cached, false) : undefined;
22
+ },
23
+ set: (key, value) => {
24
+ store.set(key, cloneResolvedResult(value, false));
25
+ },
26
+ };
27
+ }
28
+ function createMemoryFormatSchemaCache() {
29
+ const store = new Map();
30
+ return {
31
+ get: key => store.get(key),
32
+ set: (key, value) => {
33
+ store.set(key, value);
34
+ },
35
+ };
36
+ }
37
+ function cacheKey(kind, ref) {
38
+ return `${kind}:${ref.uri}@${ref.digest}`;
39
+ }
40
+ function cloneJsonRecord(value) {
41
+ return JSON.parse(JSON.stringify(value));
42
+ }
43
+ function cloneResolvedResult(result, fromCache) {
44
+ return {
45
+ ...result,
46
+ ref: { ...result.ref },
47
+ document: cloneJsonRecord(result.document),
48
+ rawDocument: cloneJsonRecord(result.rawDocument),
49
+ fromCache,
50
+ };
51
+ }
52
+ function toFetchOptions(options, fetchCache) {
53
+ return {
54
+ timeoutMs: options.timeoutMs,
55
+ maxBodyBytes: options.maxBodyBytes,
56
+ allowInternalReferences: options.allowInternalReferences,
57
+ cache: fetchCache,
58
+ };
59
+ }
60
+ function fail(kind, ref, status, code, message, meta = {}) {
61
+ return {
62
+ ok: false,
63
+ status,
64
+ kind,
65
+ ref,
66
+ reason: code,
67
+ code,
68
+ retryable: meta.retryable ?? status === 'unresolvable',
69
+ message,
70
+ httpStatus: meta.httpStatus,
71
+ details: meta.details,
72
+ };
73
+ }
74
+ function mapFetchError(kind, ref, err) {
75
+ if (err.code === 'digest_mismatch') {
76
+ return fail(kind, ref, 'digest_mismatch', err.code, err.message, {
77
+ details: err.details,
78
+ retryable: false,
79
+ });
80
+ }
81
+ if (err.code === 'ssrf_refused' &&
82
+ (err.details?.code === 'dns_lookup_failed' ||
83
+ err.details?.code === 'dns_empty' ||
84
+ err.details?.code === 'body_exceeds_limit')) {
85
+ return fail(kind, ref, 'unresolvable', err.code, err.message, {
86
+ details: err.details,
87
+ retryable: true,
88
+ });
89
+ }
90
+ if (err.code === 'ssrf_refused' ||
91
+ err.code === 'redirect_blocked' ||
92
+ (err.code === 'invalid_ref' && /uri must use https/i.test(err.message))) {
93
+ return fail(kind, ref, 'blocked_unsafe_url', err.code, err.message, {
94
+ httpStatus: err.httpStatus,
95
+ details: err.details,
96
+ retryable: false,
97
+ });
98
+ }
99
+ if (err.code === 'invalid_ref') {
100
+ return fail(kind, ref, 'invalid_ref', err.code, err.message, { details: err.details, retryable: false });
101
+ }
102
+ if (err.code === 'invalid_json') {
103
+ return fail(kind, ref, 'invalid_schema', err.code, err.message, { details: err.details, retryable: false });
104
+ }
105
+ return fail(kind, ref, 'unresolvable', err.code, err.message, {
106
+ httpStatus: err.httpStatus,
107
+ details: err.details,
108
+ retryable: true,
109
+ });
110
+ }
111
+ function mapSandboxError(kind, ref, err) {
112
+ if (err.code === 'fetch_failed' && err.details?.transient === true) {
113
+ return fail(kind, ref, 'unresolvable', err.code, err.message, { details: err.details, retryable: true });
114
+ }
115
+ if (err.code === 'fetch_failed' && typeof err.details?.httpStatus === 'number') {
116
+ const httpStatus = err.details.httpStatus;
117
+ if (httpStatus >= 300 && httpStatus < 400) {
118
+ return fail(kind, ref, 'blocked_unsafe_url', err.code, err.message, { details: err.details, retryable: false });
119
+ }
120
+ return fail(kind, ref, 'unresolvable', err.code, err.message, {
121
+ details: err.details,
122
+ retryable: httpStatus === 404 || httpStatus >= 500,
123
+ });
124
+ }
125
+ const status = err.code === 'file_scheme_rejected' || err.code === 'cross_origin_rejected'
126
+ ? 'blocked_unsafe_url'
127
+ : 'invalid_schema';
128
+ return fail(kind, ref, status, err.code, err.message, { details: err.details, retryable: false });
129
+ }
130
+ const DRAFT_07_DIALECTS = new Set([
131
+ 'http://json-schema.org/draft-07/schema',
132
+ 'https://json-schema.org/draft-07/schema',
133
+ ]);
134
+ const DRAFT_2019_09_DIALECTS = new Set([
135
+ 'http://json-schema.org/draft/2019-09/schema',
136
+ 'https://json-schema.org/draft/2019-09/schema',
137
+ ]);
138
+ function normalizeDialect(dialect) {
139
+ if (!dialect)
140
+ return 'draft-2019-09';
141
+ const normalized = dialect.endsWith('#') ? dialect.slice(0, -1) : dialect;
142
+ if (DRAFT_07_DIALECTS.has(normalized))
143
+ return 'draft-07';
144
+ if (DRAFT_2019_09_DIALECTS.has(normalized))
145
+ return 'draft-2019-09';
146
+ return undefined;
147
+ }
148
+ function countSchemaKeywords(node) {
149
+ if (node === null || typeof node !== 'object')
150
+ return 0;
151
+ if (Array.isArray(node))
152
+ return node.reduce((sum, item) => sum + countSchemaKeywords(item), 0);
153
+ let count = 0;
154
+ for (const value of Object.values(node)) {
155
+ count += 1;
156
+ count += countSchemaKeywords(value);
157
+ }
158
+ return count;
159
+ }
160
+ function validateJsonSchema(schema, maxKeywords) {
161
+ const dialect = typeof schema.$schema === 'string' ? schema.$schema : undefined;
162
+ const normalizedDialect = normalizeDialect(dialect);
163
+ if (!normalizedDialect) {
164
+ return {
165
+ ok: false,
166
+ code: 'schema_dialect_unsupported',
167
+ message: `unsupported JSON Schema dialect${dialect ? `: ${dialect}` : ''}; expected Draft-07 or Draft 2019-09`,
168
+ details: { dialect },
169
+ };
170
+ }
171
+ const keywordCount = countSchemaKeywords(schema);
172
+ if (keywordCount > maxKeywords) {
173
+ return {
174
+ ok: false,
175
+ code: 'schema_keyword_limit_exceeded',
176
+ message: `JSON Schema keyword count ${keywordCount} exceeds limit ${maxKeywords}`,
177
+ details: { keywordCount, maxKeywords },
178
+ };
179
+ }
180
+ const ajv = new _2019_1.default({ strict: false, allErrors: true, validateSchema: true });
181
+ (0, ajv_formats_1.default)(ajv);
182
+ ajv.addMetaSchema(json_schema_draft_07_json_1.default);
183
+ ajv.addMetaSchema({ ...json_schema_draft_07_json_1.default, $id: 'https://json-schema.org/draft-07/schema#' });
184
+ const schemaToCompile = normalizedDialect === 'draft-07'
185
+ ? { ...schema, $schema: 'http://json-schema.org/draft-07/schema#' }
186
+ : { ...schema, $schema: 'https://json-schema.org/draft/2019-09/schema' };
187
+ try {
188
+ ajv.compile(schemaToCompile);
189
+ }
190
+ catch (err) {
191
+ return {
192
+ ok: false,
193
+ code: 'schema_compile_failed',
194
+ message: err instanceof Error ? err.message : String(err),
195
+ details: { errors: ajv.errors?.slice(0, 10) ?? [] },
196
+ };
197
+ }
198
+ return { ok: true };
199
+ }
200
+ function createCanonicalReferenceResolver(defaultOptions = {}) {
201
+ const cache = defaultOptions.cache ?? createMemoryCanonicalReferenceCache();
202
+ const fetchCache = createMemoryFormatSchemaCache();
203
+ async function resolveReference(ref, options) {
204
+ const merged = { ...defaultOptions, ...options };
205
+ const kind = options.kind;
206
+ const key = ref && typeof ref.uri === 'string' && typeof ref.digest === 'string' ? cacheKey(kind, ref) : undefined;
207
+ if (key) {
208
+ const cached = cache.get(key);
209
+ if (cached)
210
+ return cloneResolvedResult(cached, true);
211
+ }
212
+ let fetched;
213
+ try {
214
+ fetched = await (0, fetch_1.fetchFormatSchema)(ref, toFetchOptions(merged, fetchCache));
215
+ }
216
+ catch (err) {
217
+ if (err instanceof fetch_1.FormatSchemaFetchError)
218
+ return mapFetchError(kind, ref ?? {}, err);
219
+ return fail(kind, ref ?? {}, 'unresolvable', 'network_error', err instanceof Error ? err.message : String(err));
220
+ }
221
+ let document = fetched.schema;
222
+ let refCount;
223
+ let maxDepthSeen;
224
+ if (kind === 'format_schema') {
225
+ try {
226
+ const resolved = await (0, sandbox_refs_1.resolveSchemaRefs)(document, fetched.ref.uri, {
227
+ maxDepth: merged.maxRefDepth ?? sandbox_refs_1.DEFAULT_MAX_REF_DEPTH,
228
+ maxRefCount: merged.maxRefCount ?? sandbox_refs_1.DEFAULT_MAX_REF_COUNT,
229
+ mirrorHost: merged.mirrorHost,
230
+ mirrorHosts: merged.mirrorHosts,
231
+ timeoutMs: merged.timeoutMs,
232
+ maxBodyBytes: merged.maxBodyBytes,
233
+ allowInternalReferences: merged.allowInternalReferences,
234
+ fetchExternal: merged.fetchExternal,
235
+ });
236
+ document = resolved.schema;
237
+ refCount = resolved.refCount;
238
+ maxDepthSeen = resolved.maxDepthSeen;
239
+ }
240
+ catch (err) {
241
+ if (err instanceof sandbox_refs_1.SchemaRefSandboxError)
242
+ return mapSandboxError(kind, fetched.ref, err);
243
+ return fail(kind, fetched.ref, 'invalid_schema', 'fetch_failed', err instanceof Error ? err.message : String(err));
244
+ }
245
+ const schemaValidation = validateJsonSchema(document, merged.maxKeywords ?? sandbox_refs_1.DEFAULT_MAX_KEYWORDS);
246
+ if (!schemaValidation.ok) {
247
+ return fail(kind, fetched.ref, 'invalid_schema', schemaValidation.code, schemaValidation.message, {
248
+ details: schemaValidation.details,
249
+ });
250
+ }
251
+ }
252
+ const resolved = {
253
+ ok: true,
254
+ status: 'resolved',
255
+ kind,
256
+ ref: fetched.ref,
257
+ document,
258
+ rawDocument: fetched.schema,
259
+ fromCache: false,
260
+ refCount,
261
+ maxDepthSeen,
262
+ };
263
+ if (key)
264
+ cache.set(key, resolved);
265
+ return cloneResolvedResult(resolved, false);
266
+ }
267
+ return {
268
+ resolveReference,
269
+ resolveFormatSchema(ref, options = {}) {
270
+ return resolveReference(ref, { ...options, kind: 'format_schema' });
271
+ },
272
+ resolvePlatformExtension(ref, options = {}) {
273
+ return resolveReference(ref, { ...options, kind: 'platform_extensions' });
274
+ },
275
+ };
276
+ }
277
+ async function resolveFormatSchema(ref, options = {}) {
278
+ return createCanonicalReferenceResolver(options).resolveFormatSchema(ref);
279
+ }
280
+ async function resolvePlatformExtension(ref, options = {}) {
281
+ return createCanonicalReferenceResolver(options).resolvePlatformExtension(ref);
282
+ }
283
+ exports.createCanonicalRefResolver = createCanonicalReferenceResolver;
284
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/resolver.ts"],"names":[],"mappings":"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"}
@@ -101,6 +101,12 @@ export interface ResolveSchemaRefsOptions {
101
101
  * Hard cap on response body bytes per `$ref` fetch. Default 1 MiB.
102
102
  */
103
103
  maxBodyBytes?: number;
104
+ /**
105
+ * Caller-scoped test/dev opt-in for loopback/private HTTP `$ref`
106
+ * fetches. Production callers should leave this false. IMDS/link-local
107
+ * metadata endpoints remain blocked by `ssrfSafeFetch`.
108
+ */
109
+ allowInternalReferences?: boolean;
104
110
  /**
105
111
  * Optional custom fetcher for external `$ref` URIs. Defaults to a
106
112
  * built-in that uses `ssrfSafeFetch` with HTTPS-only + 1 MiB cap +
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-refs.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/sandbox-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAKH;;;;GAIG;AACH,MAAM,MAAM,yBAAyB;AACnC,8DAA8D;AAC5D,aAAa;AACf,wDAAwD;GACtD,sBAAsB;AACxB,8EAA8E;GAC5E,uBAAuB;AACzB,iDAAiD;GAC/C,oBAAoB;AACtB,oDAAoD;GAClD,gBAAgB;AAClB,sDAAsD;GACpD,gBAAgB;AAClB,wFAAwF;GACtF,cAAc,CAAC;AAEnB,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGzC,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAO;CAQjE;AAED,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAuC,CAAC;AAE1F;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,QAA2B,CAAC;AAuC5D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,4BAA4B,MAAM,CAAC;AA6ShD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA4BlC"}
1
+ {"version":3,"file":"sandbox-refs.d.ts","sourceRoot":"","sources":["../../../../src/lib/v2/format-schema/sandbox-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAKH;;;;GAIG;AACH,MAAM,MAAM,yBAAyB;AACnC,8DAA8D;AAC5D,aAAa;AACf,wDAAwD;GACtD,sBAAsB;AACxB,8EAA8E;GAC5E,uBAAuB;AACzB,iDAAiD;GAC/C,oBAAoB;AACtB,oDAAoD;GAClD,gBAAgB;AAClB,sDAAsD;GACpD,gBAAgB;AAClB,wFAAwF;GACtF,cAAc,CAAC;AAEnB,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGzC,IAAI,EAAE,yBAAyB,EAC/B,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAO;CAQjE;AAED,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,oEAAoE;IACpE,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,kDAAkD;AAClD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAuC,CAAC;AAE1F;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,QAA2B,CAAC;AAuC5D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAoUhD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,uBAAuB,CAAC,CA8BlC"}
@@ -190,8 +190,8 @@ function resolveJsonPointer(root, pointer) {
190
190
  * per-`$ref` digests pass a custom `fetchExternal` (e.g., a registry
191
191
  * lookup that hard-fails on missing digests).
192
192
  */
193
- function makeDefaultFetcher(timeoutMs, maxBodyBytes) {
194
- const allowHttp = (0, probe_policy_1.isInternalProbesAllowed)();
193
+ function makeDefaultFetcher(timeoutMs, maxBodyBytes, allowInternalReferences) {
194
+ const allowHttp = allowInternalReferences || (0, probe_policy_1.isInternalProbesAllowed)();
195
195
  return async (uri) => {
196
196
  let res;
197
197
  try {
@@ -205,12 +205,13 @@ function makeDefaultFetcher(timeoutMs, maxBodyBytes) {
205
205
  }
206
206
  catch (err) {
207
207
  if (err instanceof ssrf_fetch_1.SsrfRefusedError) {
208
+ const isTransient = err.code === 'dns_lookup_failed' || err.code === 'dns_empty' || err.code === 'body_exceeds_limit';
208
209
  throw new SchemaRefSandboxError('fetch_failed', `\`$ref: ${uri}\` — SSRF guard refused: ${err.message}`, {
209
210
  ref: uri,
210
- details: { ssrfCode: err.code },
211
+ details: { ssrfCode: err.code, transient: isTransient },
211
212
  });
212
213
  }
213
- throw new SchemaRefSandboxError('fetch_failed', `\`$ref: ${uri}\` — ${err instanceof Error ? err.message : String(err)}`, { ref: uri });
214
+ throw new SchemaRefSandboxError('fetch_failed', `\`$ref: ${uri}\` — ${err instanceof Error ? err.message : String(err)}`, { ref: uri, details: { transient: true } });
214
215
  }
215
216
  if (res.status >= 300 && res.status < 400) {
216
217
  throw new SchemaRefSandboxError('fetch_failed', `\`$ref: ${uri}\` — HTTP redirect ${res.status} (auto-follow disabled)`, {
@@ -221,7 +222,7 @@ function makeDefaultFetcher(timeoutMs, maxBodyBytes) {
221
222
  if (res.status < 200 || res.status >= 300) {
222
223
  throw new SchemaRefSandboxError('fetch_failed', `\`$ref: ${uri}\` — HTTP ${res.status}`, {
223
224
  ref: uri,
224
- details: { httpStatus: res.status },
225
+ details: { httpStatus: res.status, transient: res.status >= 500 },
225
226
  });
226
227
  }
227
228
  let parsed;
@@ -240,7 +241,7 @@ function makeDefaultFetcher(timeoutMs, maxBodyBytes) {
240
241
  /**
241
242
  * Validate that an external (non-`#/`) `$ref` target is in the
242
243
  * allowed set: same-origin as parent OR under the AAO mirror namespace.
243
- * Returns the normalized target origin on success; throws otherwise.
244
+ * Returns the absolute target URI on success; throws otherwise.
244
245
  */
245
246
  function assertRefAllowed(ref, ctx) {
246
247
  if (ref.toLowerCase().startsWith('file:')) {
@@ -248,18 +249,25 @@ function assertRefAllowed(ref, ctx) {
248
249
  ref,
249
250
  });
250
251
  }
251
- const target = normalizeOrigin(ref);
252
+ let targetUri;
253
+ try {
254
+ targetUri = new URL(ref, ctx.currentUri).href;
255
+ }
256
+ catch {
257
+ throw new SchemaRefSandboxError('invalid_ref', `\`$ref: ${ref}\` — could not parse as a URI`, { ref });
258
+ }
259
+ const target = normalizeOrigin(targetUri);
252
260
  if (!target) {
253
261
  throw new SchemaRefSandboxError('invalid_ref', `\`$ref: ${ref}\` — could not parse as a URI`, { ref });
254
262
  }
255
263
  // Same-origin?
256
264
  if (target.origin === ctx.parentOrigin.origin) {
257
- return target;
265
+ return targetUri;
258
266
  }
259
267
  // AAO mirror namespace? Spec is `https://` only — `http://` mirror
260
268
  // refs are rejected even when the host matches.
261
- if (ctx.mirrorHosts.has(target.hostname) && ref.toLowerCase().startsWith('https://')) {
262
- return target;
269
+ if (ctx.mirrorHosts.has(target.hostname) && targetUri.toLowerCase().startsWith('https://')) {
270
+ return targetUri;
263
271
  }
264
272
  const mirrorList = [...ctx.mirrorHosts].join(', ');
265
273
  throw new SchemaRefSandboxError('cross_origin_rejected', `\`$ref: ${ref}\` — not same-origin as parent (${ctx.parentOrigin.origin}) and not under an AAO mirror (${mirrorList})`, { ref, details: { parentOrigin: ctx.parentOrigin.origin, targetOrigin: target.origin } });
@@ -328,20 +336,31 @@ async function walk(node, depth, ctx) {
328
336
  // Parent digest is the trust anchor; same-origin / mirror refs
329
337
  // inherit trust. Callers wanting per-`$ref` digest verification
330
338
  // pass a custom `fetchExternal` that enforces it.
331
- assertRefAllowed(ref, ctx);
339
+ const refUri = assertRefAllowed(ref, ctx);
332
340
  let body;
333
- const cached = ctx.externalCache.get(ref);
341
+ const cached = ctx.externalCache.get(refUri);
334
342
  if (cached) {
335
343
  body = cached;
336
344
  }
337
345
  else {
338
- body = await ctx.fetchExternal(ref);
339
- ctx.externalCache.set(ref, body);
346
+ try {
347
+ body = await ctx.fetchExternal(refUri);
348
+ }
349
+ catch (err) {
350
+ if (err instanceof SchemaRefSandboxError)
351
+ throw err;
352
+ throw new SchemaRefSandboxError('fetch_failed', `\`$ref: ${refUri}\` — ${err instanceof Error ? err.message : String(err)}`, {
353
+ ref: refUri,
354
+ details: { transient: true },
355
+ });
356
+ }
357
+ ctx.externalCache.set(refUri, body);
340
358
  }
341
359
  // External fetch opens a new document layer. We treat each
342
360
  // external fetch as one depth step.
343
361
  const refCtx = {
344
362
  ...ctx,
363
+ currentUri: refUri,
345
364
  // The fetched document becomes the parent for its own intra-doc
346
365
  // pointers. Same-origin checks for its own external $refs still
347
366
  // use the ORIGINAL parent origin (the trust root). Per spec the
@@ -395,13 +414,15 @@ async function resolveSchemaRefs(schema, parentUri, options = {}) {
395
414
  }
396
415
  const timeoutMs = options.timeoutMs ?? 5_000;
397
416
  const maxBodyBytes = options.maxBodyBytes ?? 1024 * 1024;
417
+ const allowInternalReferences = options.allowInternalReferences === true;
398
418
  const ctx = {
399
419
  parentRoot: schema,
420
+ currentUri: parentUri,
400
421
  parentOrigin,
401
422
  mirrorHosts: new Set((options.mirrorHosts ?? (options.mirrorHost ? [options.mirrorHost] : exports.DEFAULT_MIRROR_HOSTS)).map(h => h.toLowerCase())),
402
423
  maxDepth: options.maxDepth ?? exports.DEFAULT_MAX_REF_DEPTH,
403
424
  maxRefCount: options.maxRefCount ?? exports.DEFAULT_MAX_REF_COUNT,
404
- fetchExternal: options.fetchExternal ?? makeDefaultFetcher(timeoutMs, maxBodyBytes),
425
+ fetchExternal: options.fetchExternal ?? makeDefaultFetcher(timeoutMs, maxBodyBytes, allowInternalReferences),
405
426
  externalCache: new Map(),
406
427
  count: { value: 0 },
407
428
  maxDepthSeen: { value: 0 },