@salesforce/b2c-tooling-sdk 1.24.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (464) hide show
  1. package/data/content-schemas/componenttype.json +0 -30
  2. package/data/scapi-snippets/campaign-promotions.js +40 -0
  3. package/data/scapi-snippets/code-version-inspect.js +31 -0
  4. package/data/scapi-snippets/create-product.js +108 -0
  5. package/data/scapi-snippets/failed-job-triage.js +37 -0
  6. package/data/scapi-snippets/job-execution-inspect.js +52 -0
  7. package/data/scapi-snippets/job-execution-review.js +46 -0
  8. package/data/scapi-snippets/manifest.json +220 -0
  9. package/data/scapi-snippets/site-cartridge-inspect.js +27 -0
  10. package/data/tooling/index.json +81 -117
  11. package/dist/esm/auth/index.d.ts +2 -2
  12. package/dist/esm/auth/index.js +1 -1
  13. package/dist/esm/auth/index.js.map +1 -1
  14. package/dist/esm/auth/oauth-implicit.d.ts +7 -0
  15. package/dist/esm/auth/oauth-implicit.js +2 -0
  16. package/dist/esm/auth/oauth-implicit.js.map +1 -1
  17. package/dist/esm/auth/oauth-jwt.d.ts +18 -4
  18. package/dist/esm/auth/oauth-jwt.js +67 -17
  19. package/dist/esm/auth/oauth-jwt.js.map +1 -1
  20. package/dist/esm/auth/oauth-pkce-fallback.d.ts +3 -0
  21. package/dist/esm/auth/oauth-pkce-fallback.js +27 -0
  22. package/dist/esm/auth/oauth-pkce-fallback.js.map +1 -1
  23. package/dist/esm/auth/oauth-pkce.d.ts +1 -0
  24. package/dist/esm/auth/oauth-pkce.js +2 -1
  25. package/dist/esm/auth/oauth-pkce.js.map +1 -1
  26. package/dist/esm/auth/oauth.d.ts +55 -6
  27. package/dist/esm/auth/oauth.js +139 -21
  28. package/dist/esm/auth/oauth.js.map +1 -1
  29. package/dist/esm/auth/resolve.d.ts +37 -0
  30. package/dist/esm/auth/resolve.js +48 -0
  31. package/dist/esm/auth/resolve.js.map +1 -1
  32. package/dist/esm/auth/session-store.d.ts +7 -0
  33. package/dist/esm/auth/session-store.js.map +1 -1
  34. package/dist/esm/auth/types.d.ts +44 -0
  35. package/dist/esm/auth/types.js.map +1 -1
  36. package/dist/esm/cli/base-command.d.ts +9 -0
  37. package/dist/esm/cli/base-command.js +31 -0
  38. package/dist/esm/cli/base-command.js.map +1 -1
  39. package/dist/esm/cli/bm-command.d.ts +15 -0
  40. package/dist/esm/cli/bm-command.js +25 -0
  41. package/dist/esm/cli/bm-command.js.map +1 -0
  42. package/dist/esm/cli/code-command.d.ts +14 -0
  43. package/dist/esm/cli/code-command.js +22 -0
  44. package/dist/esm/cli/code-command.js.map +1 -0
  45. package/dist/esm/cli/config.js +3 -0
  46. package/dist/esm/cli/config.js.map +1 -1
  47. package/dist/esm/cli/index.d.ts +5 -1
  48. package/dist/esm/cli/index.js +7 -1
  49. package/dist/esm/cli/index.js.map +1 -1
  50. package/dist/esm/cli/instance-command.d.ts +45 -0
  51. package/dist/esm/cli/instance-command.js +66 -1
  52. package/dist/esm/cli/instance-command.js.map +1 -1
  53. package/dist/esm/cli/job-command.d.ts +37 -16
  54. package/dist/esm/cli/job-command.js +73 -23
  55. package/dist/esm/cli/job-command.js.map +1 -1
  56. package/dist/esm/cli/mrt-command.d.ts +138 -9
  57. package/dist/esm/cli/mrt-command.js +277 -16
  58. package/dist/esm/cli/mrt-command.js.map +1 -1
  59. package/dist/esm/cli/oauth-command.d.ts +1 -1
  60. package/dist/esm/cli/oauth-command.js +2 -0
  61. package/dist/esm/cli/oauth-command.js.map +1 -1
  62. package/dist/esm/cli/webdav-command.d.ts +1 -0
  63. package/dist/esm/clients/cdn-zones.js +2 -5
  64. package/dist/esm/clients/cdn-zones.js.map +1 -1
  65. package/dist/esm/clients/cip.d.ts +12 -3
  66. package/dist/esm/clients/cip.js +85 -30
  67. package/dist/esm/clients/cip.js.map +1 -1
  68. package/dist/esm/clients/custom-apis.js +2 -5
  69. package/dist/esm/clients/custom-apis.js.map +1 -1
  70. package/dist/esm/clients/dual-backend-factory.d.ts +70 -0
  71. package/dist/esm/clients/dual-backend-factory.js +48 -0
  72. package/dist/esm/clients/dual-backend-factory.js.map +1 -0
  73. package/dist/esm/clients/error-utils.d.ts +62 -0
  74. package/dist/esm/clients/error-utils.js +98 -0
  75. package/dist/esm/clients/error-utils.js.map +1 -1
  76. package/dist/esm/clients/granular-replications.js +2 -5
  77. package/dist/esm/clients/granular-replications.js.map +1 -1
  78. package/dist/esm/clients/index.d.ts +28 -3
  79. package/dist/esm/clients/index.js +24 -2
  80. package/dist/esm/clients/index.js.map +1 -1
  81. package/dist/esm/clients/metrics.js +2 -5
  82. package/dist/esm/clients/metrics.js.map +1 -1
  83. package/dist/esm/clients/middleware-registry.d.ts +4 -2
  84. package/dist/esm/clients/middleware-registry.js +3 -1
  85. package/dist/esm/clients/middleware-registry.js.map +1 -1
  86. package/dist/esm/clients/middleware.d.ts +39 -0
  87. package/dist/esm/clients/middleware.js +126 -25
  88. package/dist/esm/clients/middleware.js.map +1 -1
  89. package/dist/esm/clients/mrt-b2c.js +3 -0
  90. package/dist/esm/clients/mrt-b2c.js.map +1 -1
  91. package/dist/esm/clients/mrt.d.ts +27 -10
  92. package/dist/esm/clients/mrt.generated.d.ts +77 -0
  93. package/dist/esm/clients/mrt.js +68 -0
  94. package/dist/esm/clients/mrt.js.map +1 -1
  95. package/dist/esm/clients/preferences.js +2 -5
  96. package/dist/esm/clients/preferences.js.map +1 -1
  97. package/dist/esm/clients/scapi-backend-utils.d.ts +163 -0
  98. package/dist/esm/clients/scapi-backend-utils.js +180 -0
  99. package/dist/esm/clients/scapi-backend-utils.js.map +1 -0
  100. package/dist/esm/clients/scapi-catalogs.d.ts +12 -0
  101. package/dist/esm/clients/scapi-catalogs.generated.d.ts +104 -0
  102. package/dist/esm/clients/scapi-catalogs.generated.js +6 -0
  103. package/dist/esm/clients/scapi-catalogs.generated.js.map +1 -0
  104. package/dist/esm/clients/scapi-catalogs.js +14 -0
  105. package/dist/esm/clients/scapi-catalogs.js.map +1 -0
  106. package/dist/esm/clients/scapi-client-factory.d.ts +81 -0
  107. package/dist/esm/clients/scapi-client-factory.js +84 -0
  108. package/dist/esm/clients/scapi-client-factory.js.map +1 -0
  109. package/dist/esm/clients/scapi-fallback-backend.d.ts +34 -0
  110. package/dist/esm/clients/scapi-fallback-backend.js +132 -0
  111. package/dist/esm/clients/scapi-fallback-backend.js.map +1 -0
  112. package/dist/esm/clients/scapi-jobs.d.ts +32 -0
  113. package/dist/esm/clients/scapi-jobs.generated.d.ts +535 -0
  114. package/dist/esm/clients/scapi-jobs.generated.js +6 -0
  115. package/dist/esm/clients/scapi-jobs.generated.js.map +1 -0
  116. package/dist/esm/clients/scapi-jobs.js +24 -0
  117. package/dist/esm/clients/scapi-jobs.js.map +1 -0
  118. package/dist/esm/clients/scapi-merchant-roles.d.ts +19 -0
  119. package/dist/esm/clients/scapi-merchant-roles.generated.d.ts +726 -0
  120. package/dist/esm/clients/scapi-merchant-roles.generated.js +6 -0
  121. package/dist/esm/clients/scapi-merchant-roles.generated.js.map +1 -0
  122. package/dist/esm/clients/scapi-merchant-roles.js +12 -0
  123. package/dist/esm/clients/scapi-merchant-roles.js.map +1 -0
  124. package/dist/esm/clients/scapi-merchant-users.d.ts +19 -0
  125. package/dist/esm/clients/scapi-merchant-users.generated.d.ts +300 -0
  126. package/dist/esm/clients/scapi-merchant-users.generated.js +6 -0
  127. package/dist/esm/clients/scapi-merchant-users.generated.js.map +1 -0
  128. package/dist/esm/clients/scapi-merchant-users.js +12 -0
  129. package/dist/esm/clients/scapi-merchant-users.js.map +1 -0
  130. package/dist/esm/clients/scapi-schemas.js +2 -5
  131. package/dist/esm/clients/scapi-schemas.js.map +1 -1
  132. package/dist/esm/clients/scapi-scope-tier.d.ts +78 -0
  133. package/dist/esm/clients/scapi-scope-tier.js +113 -0
  134. package/dist/esm/clients/scapi-scope-tier.js.map +1 -0
  135. package/dist/esm/clients/scapi-scripts.d.ts +17 -0
  136. package/dist/esm/clients/scapi-scripts.generated.d.ts +392 -0
  137. package/dist/esm/clients/scapi-scripts.generated.js +6 -0
  138. package/dist/esm/clients/scapi-scripts.generated.js.map +1 -0
  139. package/dist/esm/clients/scapi-scripts.js +12 -0
  140. package/dist/esm/clients/scapi-scripts.js.map +1 -0
  141. package/dist/esm/clients/scapi-sites.d.ts +26 -0
  142. package/dist/esm/clients/scapi-sites.generated.d.ts +500 -0
  143. package/dist/esm/clients/scapi-sites.generated.js +6 -0
  144. package/dist/esm/clients/scapi-sites.generated.js.map +1 -0
  145. package/dist/esm/clients/scapi-sites.js +25 -0
  146. package/dist/esm/clients/scapi-sites.js.map +1 -0
  147. package/dist/esm/clients/slas-shopper.d.ts +19 -0
  148. package/dist/esm/clients/slas-shopper.generated.d.ts +165 -0
  149. package/dist/esm/clients/slas-shopper.generated.js +6 -0
  150. package/dist/esm/clients/slas-shopper.generated.js.map +1 -0
  151. package/dist/esm/clients/slas-shopper.js +35 -0
  152. package/dist/esm/clients/slas-shopper.js.map +1 -0
  153. package/dist/esm/clients/storefront-deployments.d.ts +56 -0
  154. package/dist/esm/clients/storefront-deployments.generated.d.ts +558 -0
  155. package/dist/esm/clients/storefront-deployments.generated.js +6 -0
  156. package/dist/esm/clients/storefront-deployments.generated.js.map +1 -0
  157. package/dist/esm/clients/storefront-deployments.js +24 -0
  158. package/dist/esm/clients/storefront-deployments.js.map +1 -0
  159. package/dist/esm/clients/webdav.js +4 -1
  160. package/dist/esm/clients/webdav.js.map +1 -1
  161. package/dist/esm/compat/dispatcher.d.ts +49 -0
  162. package/dist/esm/compat/dispatcher.js +124 -0
  163. package/dist/esm/compat/dispatcher.js.map +1 -0
  164. package/dist/esm/compat/index.d.ts +10 -0
  165. package/dist/esm/compat/index.js +15 -0
  166. package/dist/esm/compat/index.js.map +1 -0
  167. package/dist/esm/compat/jobs-backend.d.ts +31 -0
  168. package/dist/esm/compat/jobs-backend.js +76 -0
  169. package/dist/esm/compat/jobs-backend.js.map +1 -0
  170. package/dist/esm/config/dw-json.d.ts +4 -0
  171. package/dist/esm/config/dw-json.js.map +1 -1
  172. package/dist/esm/config/index.d.ts +1 -1
  173. package/dist/esm/config/index.js.map +1 -1
  174. package/dist/esm/config/mapping.d.ts +2 -5
  175. package/dist/esm/config/mapping.js +25 -1
  176. package/dist/esm/config/mapping.js.map +1 -1
  177. package/dist/esm/config/resolved-config.d.ts +2 -2
  178. package/dist/esm/config/resolved-config.js.map +1 -1
  179. package/dist/esm/config/sources/env-source.js +17 -0
  180. package/dist/esm/config/sources/env-source.js.map +1 -1
  181. package/dist/esm/config/types.d.ts +21 -2
  182. package/dist/esm/docs/search.js +2 -25
  183. package/dist/esm/docs/search.js.map +1 -1
  184. package/dist/esm/guidance/catalog.d.ts +37 -0
  185. package/dist/esm/guidance/catalog.js +282 -0
  186. package/dist/esm/guidance/catalog.js.map +1 -0
  187. package/dist/esm/guidance/index.d.ts +8 -0
  188. package/dist/esm/guidance/index.js +14 -0
  189. package/dist/esm/guidance/index.js.map +1 -0
  190. package/dist/esm/guidance/markdown.d.ts +10 -0
  191. package/dist/esm/guidance/markdown.js +52 -0
  192. package/dist/esm/guidance/markdown.js.map +1 -0
  193. package/dist/esm/guidance/types.d.ts +92 -0
  194. package/dist/esm/guidance/types.js +17 -0
  195. package/dist/esm/guidance/types.js.map +1 -0
  196. package/dist/esm/index.d.ts +14 -5
  197. package/dist/esm/index.js +14 -2
  198. package/dist/esm/index.js.map +1 -1
  199. package/dist/esm/instance/index.d.ts +96 -2
  200. package/dist/esm/instance/index.js +98 -5
  201. package/dist/esm/instance/index.js.map +1 -1
  202. package/dist/esm/operations/bm-roles/backend.d.ts +4 -0
  203. package/dist/esm/operations/bm-roles/backend.js +11 -0
  204. package/dist/esm/operations/bm-roles/backend.js.map +1 -0
  205. package/dist/esm/operations/bm-roles/index.d.ts +6 -0
  206. package/dist/esm/operations/bm-roles/index.js +4 -0
  207. package/dist/esm/operations/bm-roles/index.js.map +1 -1
  208. package/dist/esm/operations/bm-roles/ocapi-backend.d.ts +17 -0
  209. package/dist/esm/operations/bm-roles/ocapi-backend.js +151 -0
  210. package/dist/esm/operations/bm-roles/ocapi-backend.js.map +1 -0
  211. package/dist/esm/operations/bm-roles/roles.js +13 -17
  212. package/dist/esm/operations/bm-roles/roles.js.map +1 -1
  213. package/dist/esm/operations/bm-roles/scapi-backend.d.ts +27 -0
  214. package/dist/esm/operations/bm-roles/scapi-backend.js +138 -0
  215. package/dist/esm/operations/bm-roles/scapi-backend.js.map +1 -0
  216. package/dist/esm/operations/bm-roles/types.d.ts +49 -0
  217. package/dist/esm/operations/bm-roles/types.js +2 -0
  218. package/dist/esm/operations/bm-roles/types.js.map +1 -0
  219. package/dist/esm/operations/bm-users/backend.d.ts +4 -0
  220. package/dist/esm/operations/bm-users/backend.js +11 -0
  221. package/dist/esm/operations/bm-users/backend.js.map +1 -0
  222. package/dist/esm/operations/bm-users/index.d.ts +11 -3
  223. package/dist/esm/operations/bm-users/index.js +9 -3
  224. package/dist/esm/operations/bm-users/index.js.map +1 -1
  225. package/dist/esm/operations/bm-users/ocapi-backend.d.ts +13 -0
  226. package/dist/esm/operations/bm-users/ocapi-backend.js +92 -0
  227. package/dist/esm/operations/bm-users/ocapi-backend.js.map +1 -0
  228. package/dist/esm/operations/bm-users/scapi-backend.d.ts +23 -0
  229. package/dist/esm/operations/bm-users/scapi-backend.js +199 -0
  230. package/dist/esm/operations/bm-users/scapi-backend.js.map +1 -0
  231. package/dist/esm/operations/bm-users/types.d.ts +99 -0
  232. package/dist/esm/operations/bm-users/types.js +2 -0
  233. package/dist/esm/operations/bm-users/types.js.map +1 -0
  234. package/dist/esm/operations/bm-users/users.d.ts +4 -3
  235. package/dist/esm/operations/bm-users/users.js +23 -19
  236. package/dist/esm/operations/bm-users/users.js.map +1 -1
  237. package/dist/esm/operations/cap/install.js +23 -45
  238. package/dist/esm/operations/cap/install.js.map +1 -1
  239. package/dist/esm/operations/cap/list.js +4 -8
  240. package/dist/esm/operations/cap/list.js.map +1 -1
  241. package/dist/esm/operations/cap/uninstall.js +17 -37
  242. package/dist/esm/operations/cap/uninstall.js.map +1 -1
  243. package/dist/esm/operations/catalogs/catalogs-backend.d.ts +4 -0
  244. package/dist/esm/operations/catalogs/catalogs-backend.js +16 -0
  245. package/dist/esm/operations/catalogs/catalogs-backend.js.map +1 -0
  246. package/dist/esm/operations/catalogs/catalogs-types.d.ts +14 -0
  247. package/dist/esm/operations/catalogs/catalogs-types.js +2 -0
  248. package/dist/esm/operations/catalogs/catalogs-types.js.map +1 -0
  249. package/dist/esm/operations/catalogs/index.d.ts +7 -0
  250. package/dist/esm/operations/catalogs/index.js +10 -0
  251. package/dist/esm/operations/catalogs/index.js.map +1 -0
  252. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.d.ts +8 -0
  253. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js +36 -0
  254. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js.map +1 -0
  255. package/dist/esm/operations/catalogs/scapi-catalogs-backend.d.ts +15 -0
  256. package/dist/esm/operations/catalogs/scapi-catalogs-backend.js +42 -0
  257. package/dist/esm/operations/catalogs/scapi-catalogs-backend.js.map +1 -0
  258. package/dist/esm/operations/cip/index.js +10 -2
  259. package/dist/esm/operations/cip/index.js.map +1 -1
  260. package/dist/esm/operations/cip/reports.js +19 -3
  261. package/dist/esm/operations/cip/reports.js.map +1 -1
  262. package/dist/esm/operations/cip/types.d.ts +8 -4
  263. package/dist/esm/operations/code/deploy.d.ts +3 -0
  264. package/dist/esm/operations/code/deploy.js +5 -3
  265. package/dist/esm/operations/code/deploy.js.map +1 -1
  266. package/dist/esm/operations/code/download.d.ts +3 -0
  267. package/dist/esm/operations/code/download.js +5 -5
  268. package/dist/esm/operations/code/download.js.map +1 -1
  269. package/dist/esm/operations/code/index.d.ts +7 -1
  270. package/dist/esm/operations/code/index.js +5 -1
  271. package/dist/esm/operations/code/index.js.map +1 -1
  272. package/dist/esm/operations/code/ocapi-scripts-backend.d.ts +12 -0
  273. package/dist/esm/operations/code/ocapi-scripts-backend.js +40 -0
  274. package/dist/esm/operations/code/ocapi-scripts-backend.js.map +1 -0
  275. package/dist/esm/operations/code/scapi-scripts-backend.d.ts +22 -0
  276. package/dist/esm/operations/code/scapi-scripts-backend.js +94 -0
  277. package/dist/esm/operations/code/scapi-scripts-backend.js.map +1 -0
  278. package/dist/esm/operations/code/scripts-backend.d.ts +17 -0
  279. package/dist/esm/operations/code/scripts-backend.js +40 -0
  280. package/dist/esm/operations/code/scripts-backend.js.map +1 -0
  281. package/dist/esm/operations/code/scripts-types.d.ts +43 -0
  282. package/dist/esm/operations/code/scripts-types.js +2 -0
  283. package/dist/esm/operations/code/scripts-types.js.map +1 -0
  284. package/dist/esm/operations/code/upload-files.d.ts +6 -0
  285. package/dist/esm/operations/code/upload-files.js +58 -7
  286. package/dist/esm/operations/code/upload-files.js.map +1 -1
  287. package/dist/esm/operations/code/versions.d.ts +0 -20
  288. package/dist/esm/operations/code/versions.js +16 -51
  289. package/dist/esm/operations/code/versions.js.map +1 -1
  290. package/dist/esm/operations/code/watch.d.ts +3 -0
  291. package/dist/esm/operations/code/watch.js +3 -2
  292. package/dist/esm/operations/code/watch.js.map +1 -1
  293. package/dist/esm/operations/debug/debug-session.js +0 -8
  294. package/dist/esm/operations/debug/debug-session.js.map +1 -1
  295. package/dist/esm/operations/jobs/discover.d.ts +1 -1
  296. package/dist/esm/operations/jobs/discover.js +51 -21
  297. package/dist/esm/operations/jobs/discover.js.map +1 -1
  298. package/dist/esm/operations/jobs/index.d.ts +14 -57
  299. package/dist/esm/operations/jobs/index.js +15 -59
  300. package/dist/esm/operations/jobs/index.js.map +1 -1
  301. package/dist/esm/operations/jobs/ocapi-mapping.d.ts +34 -0
  302. package/dist/esm/operations/jobs/ocapi-mapping.js +100 -0
  303. package/dist/esm/operations/jobs/ocapi-mapping.js.map +1 -0
  304. package/dist/esm/operations/jobs/run-system-job.d.ts +81 -0
  305. package/dist/esm/operations/jobs/run-system-job.js +137 -0
  306. package/dist/esm/operations/jobs/run-system-job.js.map +1 -0
  307. package/dist/esm/operations/jobs/run.js +16 -4
  308. package/dist/esm/operations/jobs/run.js.map +1 -1
  309. package/dist/esm/operations/jobs/scapi-ops.d.ts +61 -0
  310. package/dist/esm/operations/jobs/scapi-ops.js +214 -0
  311. package/dist/esm/operations/jobs/scapi-ops.js.map +1 -0
  312. package/dist/esm/operations/jobs/site-archive.js +28 -66
  313. package/dist/esm/operations/jobs/site-archive.js.map +1 -1
  314. package/dist/esm/operations/jobs/types.d.ts +46 -0
  315. package/dist/esm/operations/jobs/types.js +2 -0
  316. package/dist/esm/operations/jobs/types.js.map +1 -0
  317. package/dist/esm/operations/jobs/wait-canonical.d.ts +28 -0
  318. package/dist/esm/operations/jobs/wait-canonical.js +48 -0
  319. package/dist/esm/operations/jobs/wait-canonical.js.map +1 -0
  320. package/dist/esm/operations/mrt/bundle.d.ts +164 -2
  321. package/dist/esm/operations/mrt/bundle.js +315 -9
  322. package/dist/esm/operations/mrt/bundle.js.map +1 -1
  323. package/dist/esm/operations/mrt/deployment.d.ts +221 -0
  324. package/dist/esm/operations/mrt/deployment.js +239 -0
  325. package/dist/esm/operations/mrt/deployment.js.map +1 -1
  326. package/dist/esm/operations/mrt/index.d.ts +8 -6
  327. package/dist/esm/operations/mrt/index.js +5 -3
  328. package/dist/esm/operations/mrt/index.js.map +1 -1
  329. package/dist/esm/operations/mrt/mrt-backend.d.ts +117 -0
  330. package/dist/esm/operations/mrt/mrt-backend.js +84 -0
  331. package/dist/esm/operations/mrt/mrt-backend.js.map +1 -0
  332. package/dist/esm/operations/mrt/push.d.ts +83 -1
  333. package/dist/esm/operations/mrt/push.js +102 -1
  334. package/dist/esm/operations/mrt/push.js.map +1 -1
  335. package/dist/esm/operations/sites/cartridges.d.ts +10 -8
  336. package/dist/esm/operations/sites/cartridges.js +35 -67
  337. package/dist/esm/operations/sites/cartridges.js.map +1 -1
  338. package/dist/esm/operations/sites/index.d.ts +10 -6
  339. package/dist/esm/operations/sites/index.js +9 -6
  340. package/dist/esm/operations/sites/index.js.map +1 -1
  341. package/dist/esm/operations/sites/ocapi-sites-backend.d.ts +20 -0
  342. package/dist/esm/operations/sites/ocapi-sites-backend.js +98 -0
  343. package/dist/esm/operations/sites/ocapi-sites-backend.js.map +1 -0
  344. package/dist/esm/operations/sites/scapi-sites-backend.d.ts +33 -0
  345. package/dist/esm/operations/sites/scapi-sites-backend.js +166 -0
  346. package/dist/esm/operations/sites/scapi-sites-backend.js.map +1 -0
  347. package/dist/esm/operations/sites/sites-backend.d.ts +9 -0
  348. package/dist/esm/operations/sites/sites-backend.js +16 -0
  349. package/dist/esm/operations/sites/sites-backend.js.map +1 -0
  350. package/dist/esm/operations/sites/sites-scopes.d.ts +2 -0
  351. package/dist/esm/operations/sites/sites-scopes.js +16 -0
  352. package/dist/esm/operations/sites/sites-scopes.js.map +1 -0
  353. package/dist/esm/operations/sites/sites-types.d.ts +50 -0
  354. package/dist/esm/operations/sites/sites-types.js +2 -0
  355. package/dist/esm/operations/sites/sites-types.js.map +1 -0
  356. package/dist/esm/safety/safety-middleware.d.ts +7 -3
  357. package/dist/esm/safety/safety-middleware.js +13 -9
  358. package/dist/esm/safety/safety-middleware.js.map +1 -1
  359. package/dist/esm/scaffold/sources.js +6 -9
  360. package/dist/esm/scaffold/sources.js.map +1 -1
  361. package/dist/esm/scapi/auth-primitives.d.ts +3 -0
  362. package/dist/esm/scapi/auth-primitives.js +104 -0
  363. package/dist/esm/scapi/auth-primitives.js.map +1 -0
  364. package/dist/esm/scapi/authentication.d.ts +30 -0
  365. package/dist/esm/scapi/authentication.js +136 -0
  366. package/dist/esm/scapi/authentication.js.map +1 -0
  367. package/dist/esm/scapi/catalog.d.ts +29 -0
  368. package/dist/esm/scapi/catalog.js +81 -0
  369. package/dist/esm/scapi/catalog.js.map +1 -0
  370. package/dist/esm/scapi/index.d.ts +12 -0
  371. package/dist/esm/scapi/index.js +13 -0
  372. package/dist/esm/scapi/index.js.map +1 -0
  373. package/dist/esm/scapi/request.d.ts +15 -0
  374. package/dist/esm/scapi/request.js +239 -0
  375. package/dist/esm/scapi/request.js.map +1 -0
  376. package/dist/esm/scapi/runtime.d.ts +20 -0
  377. package/dist/esm/scapi/runtime.js +131 -0
  378. package/dist/esm/scapi/runtime.js.map +1 -0
  379. package/dist/esm/scapi/snippets.d.ts +22 -0
  380. package/dist/esm/scapi/snippets.js +140 -0
  381. package/dist/esm/scapi/snippets.js.map +1 -0
  382. package/dist/esm/scapi/worker-source.d.ts +2 -0
  383. package/dist/esm/scapi/worker-source.js +101 -0
  384. package/dist/esm/scapi/worker-source.js.map +1 -0
  385. package/dist/esm/search/ranking.d.ts +12 -0
  386. package/dist/esm/search/ranking.js +28 -0
  387. package/dist/esm/search/ranking.js.map +1 -0
  388. package/dist/esm/skills/sources.d.ts +2 -2
  389. package/dist/esm/skills/sources.js +10 -2
  390. package/dist/esm/skills/sources.js.map +1 -1
  391. package/dist/esm/skills/types.d.ts +1 -1
  392. package/dist/esm/slas/token.js +33 -94
  393. package/dist/esm/slas/token.js.map +1 -1
  394. package/dist/esm/slas/types.d.ts +5 -0
  395. package/node_modules/@salesforce/b2c-api-schemas/README.md +23 -0
  396. package/node_modules/@salesforce/b2c-api-schemas/manifest.json +576 -0
  397. package/node_modules/@salesforce/b2c-api-schemas/package.json +15 -0
  398. package/node_modules/@salesforce/b2c-api-schemas/scapi/cdn/zones/v1.json +11490 -0
  399. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/orders/v1.json +3589 -0
  400. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v1.json +6544 -0
  401. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v2.json +7148 -0
  402. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-orders/v1.json +4411 -0
  403. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-payments/v1.json +643 -0
  404. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/cors/v1.json +295 -0
  405. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/preferences/v1.json +2036 -0
  406. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/shopper-configurations/v1.json +327 -0
  407. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/timeouts/v1.json +234 -0
  408. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/custom-objects/v1.json +1542 -0
  409. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/shopper-custom-objects/v1.json +405 -0
  410. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/customers/v1.json +2531 -0
  411. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/shopper-customers/v1.json +7944 -0
  412. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/custom-apis/v1.json +292 -0
  413. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/object-definitions/v1.json +2537 -0
  414. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scapi-schemas/v1.json +517 -0
  415. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scripts/v1.json +589 -0
  416. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/experiences/v1.json +3600 -0
  417. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/shopper-experience/v1.json +2319 -0
  418. package/node_modules/@salesforce/b2c-api-schemas/scapi/intelligence/analytics/v1.json +658 -0
  419. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/availability/v1.json +2649 -0
  420. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/impex/v1.json +6615 -0
  421. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/reservation/v1.json +2103 -0
  422. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/roles/v1.json +1760 -0
  423. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/users/v1.json +640 -0
  424. package/node_modules/@salesforce/b2c-api-schemas/scapi/observability/metrics/v1.json +1263 -0
  425. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/jobs/v1.json +1259 -0
  426. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/replications/v1.json +760 -0
  427. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/assignments/v1.json +1047 -0
  428. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/campaigns/v1.json +1929 -0
  429. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/coupons/v1.json +1542 -0
  430. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/gift-certificates/v1.json +1093 -0
  431. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/promotions/v1.json +1324 -0
  432. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-gift-certificates/v1.json +325 -0
  433. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-promotions/v1.json +631 -0
  434. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/source-code-groups/v1.json +1036 -0
  435. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/catalogs/v1.json +5175 -0
  436. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/inventory-lists/v1.json +866 -0
  437. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/price-books/v1.json +747 -0
  438. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/products/v1.json +5076 -0
  439. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-availability/v1.json +509 -0
  440. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-delivery-estimates/v1.json +517 -0
  441. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-products/v1.json +2961 -0
  442. package/node_modules/@salesforce/b2c-api-schemas/scapi/search/shopper-search/v1.json +1889 -0
  443. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth/v1.json +7014 -0
  444. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth-admin/v1.json +1898 -0
  445. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/consents/v1.json +622 -0
  446. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-agents/v1.json +192 -0
  447. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-consents/v1.json +913 -0
  448. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-context/v1.json +630 -0
  449. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/seo/v1.json +223 -0
  450. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/shopper-seo/v1.json +423 -0
  451. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/sites/v1.json +1088 -0
  452. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/shopper-stores/v1.json +798 -0
  453. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/store-redirect-mappings/v1.json +607 -0
  454. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/stores/v1.json +1418 -0
  455. package/package.json +24 -3
  456. package/specs/dx-scripts-v1.yaml +409 -0
  457. package/specs/merchant-roles-v1.yaml +1085 -0
  458. package/specs/merchant-users-v1.yaml +398 -0
  459. package/specs/mrt-api-v1.json +105 -0
  460. package/specs/operations-jobs-v1.yaml +793 -0
  461. package/specs/product-catalogs-v1.yaml +111 -0
  462. package/specs/site-sites-v1.yaml +667 -0
  463. package/specs/slas-shopper-v1.yaml +83 -0
  464. package/specs/storefront-deployments-v1.yaml +630 -0
@@ -8,6 +8,78 @@
8
8
  *
9
9
  * @module clients/error-utils
10
10
  */
11
+ /**
12
+ * The OCAPI `fault.type` returned (with HTTP 403) when an instance has OCAPI
13
+ * disabled. The platform is progressively deprecating OCAPI; on a deprecated
14
+ * instance every Data API call fails with this fault regardless of scopes or
15
+ * credentials. SCAPI is the supported path forward.
16
+ */
17
+ const OCAPI_DEPRECATED_FAULT_TYPE = 'OcapiDeprecatedException';
18
+ /** Doc anchor users are directed to when OCAPI is deprecated for an instance. */
19
+ const SCAPI_SETUP_DOC_URL = 'https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/authentication.html#scapi-authentication';
20
+ /**
21
+ * Renders the scope portion of the deprecation message. When the operation has
22
+ * a SCAPI equivalent, names the exact scope(s) that unlock it (e.g.
23
+ * `the "sfcc.scripts" or "sfcc.scripts.rw" scope`); otherwise falls back to the
24
+ * generic `sfcc.*` phrasing.
25
+ */
26
+ function scopeClause(requiredScopes) {
27
+ if (!requiredScopes || requiredScopes.length === 0) {
28
+ return 'the required sfcc.* scopes';
29
+ }
30
+ const quoted = requiredScopes.map((s) => `"${s}"`);
31
+ const list = quoted.length === 1 ? quoted[0] : `${quoted.slice(0, -1).join(', ')} or ${quoted[quoted.length - 1]}`;
32
+ return `the ${list} scope`;
33
+ }
34
+ /**
35
+ * Builds the user-facing guidance shown when an instance has OCAPI deprecated.
36
+ *
37
+ * Pass the SCAPI scope(s) the failed operation requires to name them in the
38
+ * message (e.g. an operation needing `sfcc.scripts.rw` tells the user exactly
39
+ * which scope to add). Omit `requiredScopes` for operations that have no SCAPI
40
+ * equivalent — the message then uses the generic `sfcc.*` phrasing.
41
+ */
42
+ export function ocapiDeprecatedMessage(requiredScopes) {
43
+ return ('OCAPI is deprecated and disabled for this instance. ' +
44
+ `Configure SCAPI access (shortCode, tenantId, and ${scopeClause(requiredScopes)}) on your Account Manager API client to continue. ` +
45
+ `See: ${SCAPI_SETUP_DOC_URL}`);
46
+ }
47
+ /**
48
+ * Generic OCAPI deprecation message (no specific scope named). Convenience for
49
+ * call sites that surface the guidance directly without an operation scope.
50
+ */
51
+ export const OCAPI_DEPRECATED_MESSAGE = ocapiDeprecatedMessage();
52
+ /**
53
+ * Returns true if an API error object is an OCAPI deprecation fault
54
+ * (`fault.type === 'OcapiDeprecatedException'`).
55
+ *
56
+ * Detection keys off the structured `fault.type`, not the message text, so it
57
+ * is robust to message wording changes. Used to convert the opaque OCAPI 403
58
+ * into actionable "configure SCAPI" guidance at every OCAPI-terminal site.
59
+ */
60
+ export function isOcapiDeprecatedFault(error) {
61
+ if (!error || typeof error !== 'object')
62
+ return false;
63
+ const fault = error.fault;
64
+ if (!fault || typeof fault !== 'object')
65
+ return false;
66
+ return fault.type === OCAPI_DEPRECATED_FAULT_TYPE;
67
+ }
68
+ /**
69
+ * Error thrown when an OCAPI operation fails because OCAPI is deprecated for
70
+ * the instance. Carries actionable SCAPI-setup guidance — including the exact
71
+ * scope the failed operation needs, when supplied — so the CLI surfaces a
72
+ * helpful message instead of an opaque "Failed to ..." line.
73
+ *
74
+ * Thrown by OCAPI-terminal operations (those with no SCAPI fallback, or whose
75
+ * SCAPI path was already exhausted) when {@link isOcapiDeprecatedFault} matches.
76
+ */
77
+ export class OcapiDeprecatedError extends Error {
78
+ constructor(options = {}) {
79
+ super(ocapiDeprecatedMessage(options.requiredScopes), options.cause === undefined ? undefined : { cause: options.cause });
80
+ this.name = 'OcapiDeprecatedError';
81
+ }
82
+ }
11
83
  /**
12
84
  * Extract a clean error message from an API error response.
13
85
  *
@@ -66,4 +138,30 @@ export function getApiErrorMessage(error, response) {
66
138
  // Fallback to HTTP status
67
139
  return `HTTP ${response.status} ${response.statusText}`;
68
140
  }
141
+ /**
142
+ * Throws a well-formed Error for a failed OCAPI call.
143
+ *
144
+ * Centralizes OCAPI-terminal error handling so every call site behaves
145
+ * consistently:
146
+ * - OCAPI deprecation faults become an {@link OcapiDeprecatedError} with
147
+ * actionable SCAPI-setup guidance, naming `requiredScopes` when the operation
148
+ * has a SCAPI equivalent.
149
+ * - Everything else throws `Error(`${prefix}: ${message}`)` where `message`
150
+ * is the fault text from {@link getApiErrorMessage}.
151
+ *
152
+ * The original `error` is always attached as `cause` for debug logging.
153
+ *
154
+ * @param error - The error object from an openapi-fetch result.
155
+ * @param response - The HTTP response (for status fallback).
156
+ * @param prefix - Operation-specific prefix, e.g. `'Failed to list code versions'`.
157
+ * @param requiredScopes - SCAPI scope(s) the equivalent operation needs, named
158
+ * in the deprecation message. Omit for OCAPI-only operations.
159
+ * @throws Always throws — return type is `never`.
160
+ */
161
+ export function throwOcapiError(error, response, prefix, requiredScopes) {
162
+ if (isOcapiDeprecatedFault(error)) {
163
+ throw new OcapiDeprecatedError({ cause: error, requiredScopes });
164
+ }
165
+ throw new Error(`${prefix}: ${getApiErrorMessage(error, response)}`, { cause: error });
166
+ }
69
167
  //# sourceMappingURL=error-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../../../src/clients/error-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc,EAAE,QAAyD;IAC1G,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,KAAgC,CAAC;QAE7C,kDAAkD;QAClD,IAAI,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAgC,CAAC;YACpD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzD,OAAO,MAAM,CAAC,OAAO,CAAC;YACxB,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,IAAI,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAgC,CAAC;YACnD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC,OAAO,CAAC;YACvB,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACjD,OAAO,GAAG,CAAC,MAAM,CAAC;QACpB,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC/C,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB,CAAC;QAED,6CAA6C;QAC7C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACnD,OAAO,GAAG,CAAC,OAAO,CAAC;QACrB,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,OAAO,QAAQ,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../../../src/clients/error-utils.ts"],"names":[],"mappings":"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"}
@@ -15,9 +15,8 @@
15
15
  import createClient, {} from 'openapi-fetch';
16
16
  import { createAuthMiddleware, createLoggingMiddleware, createRateLimitMiddleware } from './middleware.js';
17
17
  import { globalMiddlewareRegistry } from './middleware-registry.js';
18
- import { OAuthStrategy } from '../auth/oauth.js';
19
- import { JwtOAuthStrategy } from '../auth/oauth-jwt.js';
20
18
  import { buildTenantScope, toOrganizationId, normalizeTenantId } from './custom-apis.js';
19
+ import { withScopes } from './scapi-backend-utils.js';
21
20
  export { toOrganizationId, normalizeTenantId, buildTenantScope };
22
21
  /**
23
22
  * Creates a Granular Replications API client for publishing individual items.
@@ -68,9 +67,7 @@ export function createGranularReplicationsClient(config, auth) {
68
67
  });
69
68
  // Build required scopes: domain scope + tenant-specific scope
70
69
  const requiredScopes = config.scopes ?? ['sfcc.granular-replications.rw', buildTenantScope(config.tenantId)];
71
- const scopedAuth = auth instanceof OAuthStrategy || auth instanceof JwtOAuthStrategy
72
- ? auth.withAdditionalScopes(requiredScopes)
73
- : auth;
70
+ const scopedAuth = withScopes(auth, requiredScopes);
74
71
  client.use(createAuthMiddleware(scopedAuth));
75
72
  for (const middleware of registry.getMiddleware('granular-replications')) {
76
73
  client.use(middleware);
@@ -1 +1 @@
1
- {"version":3,"file":"granular-replications.js","sourceRoot":"","sources":["../../../src/clients/granular-replications.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;GAQG;AACH,OAAO,YAAY,EAAE,EAAa,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAC,oBAAoB,EAAE,uBAAuB,EAAE,yBAAyB,EAAC,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAC,wBAAwB,EAA0B,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAEvF,OAAO,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAC,CAAC;AA+B/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAwC,EACxC,IAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,wBAAwB,CAAC;IAEvE,MAAM,MAAM,GAAG,YAAY,CAAQ;QACjC,OAAO,EAAE,WAAW,MAAM,CAAC,SAAS,6DAA6D;KAClG,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,+BAA+B,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7G,MAAM,UAAU,GACd,IAAI,YAAY,aAAa,IAAI,IAAI,YAAY,gBAAgB;QAC/D,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7C,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAC,MAAM,EAAE,uBAAuB,EAAC,CAAC,CAAC,CAAC;IACzE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE7D,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"granular-replications.js","sourceRoot":"","sources":["../../../src/clients/granular-replications.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;GAQG;AACH,OAAO,YAAY,EAAE,EAAa,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAC,oBAAoB,EAAE,uBAAuB,EAAE,yBAAyB,EAAC,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAC,wBAAwB,EAA0B,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAC,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAC,CAAC;AA+B/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAwC,EACxC,IAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,wBAAwB,CAAC;IAEvE,MAAM,MAAM,GAAG,YAAY,CAAQ;QACjC,OAAO,EAAE,WAAW,MAAM,CAAC,SAAS,6DAA6D;KAClG,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,+BAA+B,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7G,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAEpD,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7C,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAC,MAAM,EAAE,uBAAuB,EAAC,CAAC,CAAC,CAAC;IACzE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE7D,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -121,11 +121,13 @@ export type { HttpClientType, HttpMiddlewareProvider, UnifiedMiddleware } from '
121
121
  export { createOcapiClient } from './ocapi.js';
122
122
  export type { OcapiClient, OcapiClientOptions, OcapiError, OcapiResponse, paths as OcapiPaths, components as OcapiComponents, } from './ocapi.js';
123
123
  export { createSlasClient } from './slas-admin.js';
124
+ export { createSlasShopperClient, type SlasShopperClient, type SlasShopperClientConfig } from './slas-shopper.js';
125
+ export type { paths as SlasShopperPaths, components as SlasShopperComponents } from './slas-shopper.js';
124
126
  export type { SlasClient, SlasClientConfig, SlasError, SlasResponse, paths as SlasPaths, components as SlasComponents, } from './slas-admin.js';
125
127
  export { createOdsClient } from './ods.js';
126
128
  export type { OdsClient, OdsClientConfig, OdsError, OdsResponse, paths as OdsPaths, components as OdsComponents, } from './ods.js';
127
- export { createMrtClient, DEFAULT_MRT_ORIGIN } from './mrt.js';
128
- export type { MrtClient, MrtClientConfig, MrtError, MrtResponse, BuildPushResponse, paths as MrtPaths, components as MrtComponents, } from './mrt.js';
129
+ export { createMrtClient, createMrtMaintenanceMiddleware, runWithMrtReadOnlyListener, DEFAULT_MRT_ORIGIN, MRT_READ_ONLY_HEADER, isMrtReadOnlyResponse, MrtMaintenanceError, } from './mrt.js';
130
+ export type { MrtClient, MrtClientConfig, MrtError, MrtResponse, MrtReadOnlyListener, BuildPushResponse, paths as MrtPaths, components as MrtComponents, } from './mrt.js';
129
131
  export { createCustomApisClient, toOrganizationId, normalizeTenantId, buildTenantScope, ORGANIZATION_ID_PREFIX, SCAPI_TENANT_SCOPE_PREFIX, CUSTOM_APIS_DEFAULT_SCOPES, } from './custom-apis.js';
130
132
  export type { CustomApisClient, CustomApisClientConfig, CustomApisError, CustomApisResponse, paths as CustomApisPaths, components as CustomApisComponents, } from './custom-apis.js';
131
133
  export { createScapiSchemasClient, SCAPI_SCHEMAS_DEFAULT_SCOPES } from './scapi-schemas.js';
@@ -144,6 +146,29 @@ export { createMetricsClient, METRICS_DEFAULT_SCOPES } from './metrics.js';
144
146
  export type { MetricsClient, MetricsClientConfig, MetricsResponse, MetricsDataResponse, Metric, MetricDataSeries, MetricDataPoint, MetricsError, paths as MetricsPaths, components as MetricsComponents, } from './metrics.js';
145
147
  export { createGranularReplicationsClient } from './granular-replications.js';
146
148
  export type { GranularReplicationsClient, GranularReplicationsClientConfig, GranularReplicationsError, GranularReplicationsResponse, ProductItem, PriceTableItem, ContentAssetItemPrivate, ContentAssetItemShared, PublishProcessResponse, PublishProcessListResponse, PublishIdResponse, paths as GranularReplicationsPaths, components as GranularReplicationsComponents, } from './granular-replications.js';
147
- export { getApiErrorMessage } from './error-utils.js';
149
+ export { createScapiJobsClient, SCAPI_JOBS_CASCADE } from './scapi-jobs.js';
150
+ export type { ScapiJobsClient, ScapiJobsClientConfig, ScapiJobsError, ScapiJobsResponse, paths as ScapiJobsPaths, components as ScapiJobsComponents, } from './scapi-jobs.js';
151
+ export { createScapiMerchantRolesClient, SCAPI_MERCHANT_ROLES_READ_SCOPES, SCAPI_MERCHANT_ROLES_RW_SCOPES, } from './scapi-merchant-roles.js';
152
+ export type { ScapiMerchantRolesClient, ScapiMerchantRolesClientConfig, ScapiMerchantRolesError, ScapiMerchantRolesResponse, paths as ScapiMerchantRolesPaths, components as ScapiMerchantRolesComponents, } from './scapi-merchant-roles.js';
153
+ export { createScapiMerchantUsersClient, SCAPI_MERCHANT_USERS_READ_SCOPES, SCAPI_MERCHANT_USERS_RW_SCOPES, } from './scapi-merchant-users.js';
154
+ export type { ScapiMerchantUsersClient, ScapiMerchantUsersClientConfig, ScapiMerchantUsersError, ScapiMerchantUsersResponse, paths as ScapiMerchantUsersPaths, components as ScapiMerchantUsersComponents, } from './scapi-merchant-users.js';
155
+ export { createScapiScriptsClient, SCAPI_SCRIPTS_READ_SCOPES, SCAPI_SCRIPTS_RW_SCOPES } from './scapi-scripts.js';
156
+ export type { ScapiScriptsClient, ScapiScriptsClientConfig, ScapiScriptsError, ScapiScriptsResponse, paths as ScapiScriptsPaths, components as ScapiScriptsComponents, } from './scapi-scripts.js';
157
+ export { createScapiSitesClient, SCAPI_SITES_CASCADE } from './scapi-sites.js';
158
+ export type { ScapiSitesClient, ScapiSitesClientConfig, ScapiSitesError, Site as ScapiSite, Sites as ScapiSites, SiteSearchResult as ScapiSiteSearchResult, paths as ScapiSitesPaths, components as ScapiSitesComponents, } from './scapi-sites.js';
159
+ export { createScapiCatalogsClient, SCAPI_CATALOGS_CASCADE } from './scapi-catalogs.js';
160
+ export type { ScapiCatalogsClient, ScapiCatalogsClientConfig, Catalog as ScapiCatalog, Catalogs as ScapiCatalogs, paths as ScapiCatalogsPaths, components as ScapiCatalogsComponents, } from './scapi-catalogs.js';
161
+ export { createStorefrontDeploymentsClient, STOREFRONT_DEPLOYMENTS_CASCADE } from './storefront-deployments.js';
162
+ export type { StorefrontDeploymentsClient, StorefrontDeploymentsClientConfig, StorefrontDeploymentsError, StorefrontDeploymentsResponse, Bundle as StorefrontBundle, BundleResult as StorefrontBundleResult, BundleUploadResponse as StorefrontBundleUploadResponse, Deployment as StorefrontDeployment, DeploymentResult as StorefrontDeploymentResult, DeploymentCreateRequest as StorefrontDeploymentCreateRequest, DeploymentStatus as StorefrontDeploymentStatus, paths as StorefrontDeploymentsPaths, components as StorefrontDeploymentsComponents, } from './storefront-deployments.js';
163
+ export { createScapiRequestError, assertOcapiCompatibilityAllowed, assertScapiAdminAuthSupported, isFallbackTrigger, isInvalidScopeError, resolvePreferredBackend, resolveScapiOrOcapi, SAFE_SCAPI_FALLBACK_STATUSES, SCAPI_CAPABILITY_BASELINE_RELEASE, ScapiCapabilityUnsupportedError, ScapiRequestError, ScapiUserAuthUnsupportedError, scapiUnavailableMessage, scapiCapabilityUnsupportedMessage, withScopes, } from './scapi-backend-utils.js';
164
+ export type { ApiBackendPreference, BackendBase, ResolveBackendOptions, ResolvePreferredBackendOptions, } from './scapi-backend-utils.js';
165
+ export { createFallbackBackend } from './scapi-fallback-backend.js';
166
+ export { createDualBackend } from './dual-backend-factory.js';
167
+ export type { DualBackendConfig, DualBackendCtors, ScapiBackendCtorConfig } from './dual-backend-factory.js';
168
+ export { buildScapiClient } from './scapi-client-factory.js';
169
+ export type { BuildScapiClientOptions, ScapiClientConfig } from './scapi-client-factory.js';
170
+ export { ScopeTierManager } from './scapi-scope-tier.js';
171
+ export type { ScopeTier, ScopeTierManagerOptions } from './scapi-scope-tier.js';
172
+ export { getApiErrorMessage, isOcapiDeprecatedFault, throwOcapiError, OcapiDeprecatedError, OCAPI_DEPRECATED_MESSAGE, ocapiDeprecatedMessage, } from './error-utils.js';
148
173
  export { createTlsDispatcher } from './tls-dispatcher.js';
149
174
  export type { TlsOptions } from './tls-dispatcher.js';
@@ -123,8 +123,9 @@ export { setUserAgent, getUserAgent, resetUserAgent, userAgentProvider } from '.
123
123
  export { MiddlewareRegistry, globalMiddlewareRegistry } from './middleware-registry.js';
124
124
  export { createOcapiClient } from './ocapi.js';
125
125
  export { createSlasClient } from './slas-admin.js';
126
+ export { createSlasShopperClient } from './slas-shopper.js';
126
127
  export { createOdsClient } from './ods.js';
127
- export { createMrtClient, DEFAULT_MRT_ORIGIN } from './mrt.js';
128
+ export { createMrtClient, createMrtMaintenanceMiddleware, runWithMrtReadOnlyListener, DEFAULT_MRT_ORIGIN, MRT_READ_ONLY_HEADER, isMrtReadOnlyResponse, MrtMaintenanceError, } from './mrt.js';
128
129
  export { createCustomApisClient, toOrganizationId, normalizeTenantId, buildTenantScope, ORGANIZATION_ID_PREFIX, SCAPI_TENANT_SCOPE_PREFIX, CUSTOM_APIS_DEFAULT_SCOPES, } from './custom-apis.js';
129
130
  export { createScapiSchemasClient, SCAPI_SCHEMAS_DEFAULT_SCOPES } from './scapi-schemas.js';
130
131
  export { createAccountManagerClient, createAccountManagerUsersClient, getUser, listUsers, createUser, updateUser, deleteUser, purgeUser, resetUser, findUserByLogin, fetchRoleMapping, resolveToInternalRole, resolveFromInternalRole, createAccountManagerRolesClient, getRole, listRoles, createAccountManagerApiClientsClient, createAccountManagerOrgsClient, isValidRoleTenantFilter, ROLE_TENANT_FILTER_PATTERN, } from './am-api.js';
@@ -134,6 +135,27 @@ export { createCipClient, CipClient, DEFAULT_CIP_HOST, DEFAULT_CIP_STAGING_HOST
134
135
  export { createPreferencesClient, PREFERENCES_READ_SCOPES, PREFERENCES_RW_SCOPES } from './preferences.js';
135
136
  export { createMetricsClient, METRICS_DEFAULT_SCOPES } from './metrics.js';
136
137
  export { createGranularReplicationsClient } from './granular-replications.js';
137
- export { getApiErrorMessage } from './error-utils.js';
138
+ // SCAPI Jobs
139
+ export { createScapiJobsClient, SCAPI_JOBS_CASCADE } from './scapi-jobs.js';
140
+ // SCAPI Merchant Roles
141
+ export { createScapiMerchantRolesClient, SCAPI_MERCHANT_ROLES_READ_SCOPES, SCAPI_MERCHANT_ROLES_RW_SCOPES, } from './scapi-merchant-roles.js';
142
+ // SCAPI Merchant Users
143
+ export { createScapiMerchantUsersClient, SCAPI_MERCHANT_USERS_READ_SCOPES, SCAPI_MERCHANT_USERS_RW_SCOPES, } from './scapi-merchant-users.js';
144
+ // SCAPI Scripts (code versions)
145
+ export { createScapiScriptsClient, SCAPI_SCRIPTS_READ_SCOPES, SCAPI_SCRIPTS_RW_SCOPES } from './scapi-scripts.js';
146
+ // SCAPI Sites
147
+ export { createScapiSitesClient, SCAPI_SITES_CASCADE } from './scapi-sites.js';
148
+ // SCAPI Catalogs
149
+ export { createScapiCatalogsClient, SCAPI_CATALOGS_CASCADE } from './scapi-catalogs.js';
150
+ // SCAPI Storefront family (storefront/*/v1) — the modern MRT backend. One
151
+ // client per API; Deployments now, Environments + Storefronts to follow.
152
+ export { createStorefrontDeploymentsClient, STOREFRONT_DEPLOYMENTS_CASCADE } from './storefront-deployments.js';
153
+ // SCAPI dual-backend utilities (shared across SCAPI/OCAPI domains)
154
+ export { createScapiRequestError, assertOcapiCompatibilityAllowed, assertScapiAdminAuthSupported, isFallbackTrigger, isInvalidScopeError, resolvePreferredBackend, resolveScapiOrOcapi, SAFE_SCAPI_FALLBACK_STATUSES, SCAPI_CAPABILITY_BASELINE_RELEASE, ScapiCapabilityUnsupportedError, ScapiRequestError, ScapiUserAuthUnsupportedError, scapiUnavailableMessage, scapiCapabilityUnsupportedMessage, withScopes, } from './scapi-backend-utils.js';
155
+ export { createFallbackBackend } from './scapi-fallback-backend.js';
156
+ export { createDualBackend } from './dual-backend-factory.js';
157
+ export { buildScapiClient } from './scapi-client-factory.js';
158
+ export { ScopeTierManager } from './scapi-scope-tier.js';
159
+ export { getApiErrorMessage, isOcapiDeprecatedFault, throwOcapiError, OcapiDeprecatedError, OCAPI_DEPRECATED_MESSAGE, ocapiDeprecatedMessage, } from './error-utils.js';
138
160
  export { createTlsDispatcher } from './tls-dispatcher.js';
139
161
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgHG;AACH,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AAGzC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAQzB,iDAAiD;AACjD,OAAO,EAAC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAC,MAAM,iBAAiB,CAAC;AAE9F,OAAO,EAAC,kBAAkB,EAAE,wBAAwB,EAAC,MAAM,0BAA0B,CAAC;AAGtF,OAAO,EAAC,iBAAiB,EAAC,MAAM,YAAY,CAAC;AAU7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAUjD,OAAO,EAAC,eAAe,EAAC,MAAM,UAAU,CAAC;AAUzC,OAAO,EAAC,eAAe,EAAE,kBAAkB,EAAC,MAAM,UAAU,CAAC;AAW7D,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAU1B,OAAO,EAAC,wBAAwB,EAAE,4BAA4B,EAAC,MAAM,oBAAoB,CAAC;AAa1F,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,OAAO,EACP,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,OAAO,EACP,SAAS,EACT,oCAAoC,EACpC,8BAA8B,EAC9B,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AAmCrB,OAAO,EAAC,oBAAoB,EAAE,qBAAqB,EAAE,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAgBhG,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAC,MAAM,cAAc,CAAC;AAaxE,OAAO,EAAC,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,wBAAwB,EAAC,MAAM,UAAU,CAAC;AAWhG,OAAO,EAAC,uBAAuB,EAAE,uBAAuB,EAAE,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AAmBzG,OAAO,EAAC,mBAAmB,EAAE,sBAAsB,EAAC,MAAM,cAAc,CAAC;AAczE,OAAO,EAAC,gCAAgC,EAAC,MAAM,4BAA4B,CAAC;AAiB5E,OAAO,EAAC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/clients/index.ts"],"names":[],"mappings":"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"}
@@ -15,11 +15,10 @@
15
15
  * @module clients/metrics
16
16
  */
17
17
  import createClient, {} from 'openapi-fetch';
18
- import { OAuthStrategy } from '../auth/oauth.js';
19
- import { JwtOAuthStrategy } from '../auth/oauth-jwt.js';
20
18
  import { createAuthMiddleware, createLoggingMiddleware } from './middleware.js';
21
19
  import { globalMiddlewareRegistry } from './middleware-registry.js';
22
20
  import { buildTenantScope } from './custom-apis.js';
21
+ import { withScopes } from './scapi-backend-utils.js';
23
22
  /** Default OAuth scope required for the Metrics API (read-only). */
24
23
  export const METRICS_DEFAULT_SCOPES = ['sfcc.metrics'];
25
24
  /**
@@ -49,9 +48,7 @@ export function createMetricsClient(config, auth) {
49
48
  // Build required scopes: domain scope + tenant-specific scope
50
49
  const requiredScopes = config.scopes ?? [...METRICS_DEFAULT_SCOPES, buildTenantScope(config.tenantId)];
51
50
  // If auth supports scopes, add required scopes; otherwise use as-is
52
- const scopedAuth = auth instanceof OAuthStrategy || auth instanceof JwtOAuthStrategy
53
- ? auth.withAdditionalScopes(requiredScopes)
54
- : auth;
51
+ const scopedAuth = withScopes(auth, requiredScopes);
55
52
  // Core middleware: auth first
56
53
  client.use(createAuthMiddleware(scopedAuth));
57
54
  // Plugin middleware from registry
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/clients/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;GAUG;AACH,OAAO,YAAY,EAAE,EAAa,MAAM,eAAe,CAAC;AAExD,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAC,oBAAoB,EAAE,uBAAuB,EAAC,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAC,wBAAwB,EAA0B,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAiElD,oEAAoE;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,cAAc,CAAC,CAAC;AAiCvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA2B,EAAE,IAAkB;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,wBAAwB,CAAC;IAEvE,MAAM,MAAM,GAAG,YAAY,CAAQ;QACjC,OAAO,EAAE,WAAW,MAAM,CAAC,SAAS,4DAA4D;KACjG,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,sBAAsB,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvG,oEAAoE;IACpE,MAAM,UAAU,GACd,IAAI,YAAY,aAAa,IAAI,IAAI,YAAY,gBAAgB;QAC/D,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC;IAEX,8BAA8B;IAC9B,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7C,kCAAkC;IAClC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/clients/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;GAUG;AACH,OAAO,YAAY,EAAE,EAAa,MAAM,eAAe,CAAC;AAGxD,OAAO,EAAC,oBAAoB,EAAE,uBAAuB,EAAC,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAC,wBAAwB,EAA0B,MAAM,0BAA0B,CAAC;AAC3F,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AAiEpD,oEAAoE;AACpE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,cAAc,CAAC,CAAC;AAiCvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA2B,EAAE,IAAkB;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,wBAAwB,CAAC;IAEvE,MAAM,MAAM,GAAG,YAAY,CAAQ;QACjC,OAAO,EAAE,WAAW,MAAM,CAAC,SAAS,4DAA4D;KACjG,CAAC,CAAC;IAEH,8DAA8D;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,sBAAsB,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvG,oEAAoE;IACpE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAEpD,8BAA8B;IAC9B,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7C,kCAAkC;IAClC,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3D,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAC;IAE/C,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -38,7 +38,7 @@ import type { Middleware } from 'openapi-fetch';
38
38
  /**
39
39
  * Types of HTTP clients that can receive middleware.
40
40
  */
41
- export type HttpClientType = 'cip' | 'ocapi' | 'slas' | 'ods' | 'mrt' | 'mrt-b2c' | 'custom-apis' | 'scapi-schemas' | 'metrics' | 'cdn-zones' | 'granular-replications' | 'preferences' | 'webdav' | 'am-users-api' | 'am-roles-api' | 'am-apiclients-api' | 'am-orgs-api';
41
+ export type HttpClientType = 'cip' | 'ocapi' | 'slas' | 'ods' | 'mrt' | 'mrt-b2c' | 'custom-apis' | 'scapi-schemas' | 'metrics' | 'cdn-zones' | 'granular-replications' | 'preferences' | 'webdav' | 'am-users-api' | 'am-roles-api' | 'am-apiclients-api' | 'am-orgs-api' | 'scapi-jobs' | 'scapi-scripts' | 'scapi-merchant-users' | 'scapi-merchant-roles' | 'scapi-sites' | 'scapi-catalogs' | 'scapi' | 'storefront-deployments';
42
42
  /**
43
43
  * Middleware interface compatible with openapi-fetch.
44
44
  *
@@ -142,7 +142,9 @@ export declare class MiddlewareRegistry {
142
142
  * @param clientType - The type of client requesting middleware
143
143
  * @returns Array of middleware in registration order
144
144
  */
145
- getMiddleware(clientType: HttpClientType): UnifiedMiddleware[];
145
+ getMiddleware(clientType: HttpClientType, options?: {
146
+ exclude?: string[];
147
+ }): UnifiedMiddleware[];
146
148
  /**
147
149
  * Clears all registered providers.
148
150
  *
@@ -46,9 +46,11 @@ export class MiddlewareRegistry {
46
46
  * @param clientType - The type of client requesting middleware
47
47
  * @returns Array of middleware in registration order
48
48
  */
49
- getMiddleware(clientType) {
49
+ getMiddleware(clientType, options = {}) {
50
50
  const middleware = [];
51
51
  for (const provider of this.providers) {
52
+ if (options.exclude?.includes(provider.name))
53
+ continue;
52
54
  const m = provider.getMiddleware(clientType);
53
55
  if (m) {
54
56
  middleware.push(m);
@@ -1 +1 @@
1
- {"version":3,"file":"middleware-registry.js","sourceRoot":"","sources":["../../../src/clients/middleware-registry.ts"],"names":[],"mappings":"AAoIA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,kBAAkB;IACrB,SAAS,GAA6B,EAAE,CAAC;IAEjD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAgC;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC/D,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,UAA0B;QACtC,MAAM,UAAU,GAAwB,EAAE,CAAC;QAE3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"middleware-registry.js","sourceRoot":"","sources":["../../../src/clients/middleware-registry.ts"],"names":[],"mappings":"AA4IA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,kBAAkB;IACrB,SAAS,GAA6B,EAAE,CAAC;IAEjD;;;;;;OAMG;IACH,QAAQ,CAAC,QAAgC;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC/D,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,aAAa,CAAC,UAA0B,EAAE,UAAgC,EAAE;QAC1E,MAAM,UAAU,GAAwB,EAAE,CAAC;QAE3C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvD,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC;gBACN,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
@@ -30,6 +30,43 @@ export interface ExtraParamsConfig {
30
30
  * @returns Middleware that adds auth headers to requests and retries on 401
31
31
  */
32
32
  export declare function createAuthMiddleware(auth: AuthStrategy): Middleware;
33
+ /**
34
+ * Scope cascade for a SCAPI domain. The auth middleware picks `read` or
35
+ * `write` based on the per-operation `scopeMode` hint and walks the chosen
36
+ * cascade through the auth strategy until one candidate survives at AM.
37
+ *
38
+ * Each candidate is an array of scopes; the auth strategy adds any base
39
+ * scopes (e.g. tenant scope) automatically.
40
+ */
41
+ export interface ScopeCascade {
42
+ /** Scope candidates to try for read operations, in order of preference. */
43
+ read: string[][];
44
+ /** Scope candidates to try for write operations, in order of preference. */
45
+ write: string[][];
46
+ }
47
+ /**
48
+ * Internal request header read by {@link createScapiAuthMiddleware} to choose
49
+ * a cascade tier. Operations attach `'read'` or `'write'`; the header is
50
+ * stripped before the request leaves the middleware.
51
+ */
52
+ export declare const SCOPE_MODE_HEADER = "x-b2c-scope-mode";
53
+ /**
54
+ * Auth middleware for SCAPI clients with a configured {@link ScopeCascade}.
55
+ *
56
+ * Reads the {@link SCOPE_MODE_HEADER} from the request, picks the matching
57
+ * cascade, and asks the auth strategy to resolve it (cache-first, then AM
58
+ * with `invalid_scope` fallback). Strips the header before the request is
59
+ * sent.
60
+ *
61
+ * Falls back to `getAuthorizationHeader()` when:
62
+ * - the strategy doesn't implement `getAccessTokenForCascade` (e.g.
63
+ * stateful sessions, basic auth), or
64
+ * - the request didn't supply a `scopeMode` header.
65
+ *
66
+ * 401 retry behavior matches {@link createAuthMiddleware}: on a 401 after a
67
+ * prior success, invalidate the token and retry once.
68
+ */
69
+ export declare function createScapiAuthMiddleware(auth: AuthStrategy, cascade: ScopeCascade): Middleware;
33
70
  /**
34
71
  * Configuration for rate limiting middleware.
35
72
  */
@@ -90,6 +127,8 @@ export interface LoggingMiddlewareConfig {
90
127
  * @example ['data', 'password', 'secret']
91
128
  */
92
129
  maskBodyKeys?: string[];
130
+ /** Log headers and bodies at trace level. Disable for authentication endpoints. Defaults to true. */
131
+ logDetails?: boolean;
93
132
  }
94
133
  /**
95
134
  * Creates logging middleware for openapi-fetch clients.
@@ -14,6 +14,10 @@ function headersToObject(headers) {
14
14
  const retriedRequests = new WeakSet();
15
15
  // Store cloned request bodies for potential retry (body can only be read once)
16
16
  const requestBodies = new WeakMap();
17
+ // Remembers the SCAPI scope mode ('read' or 'write') a request was authorized
18
+ // with, so the 401 retry path can re-authorize at the same tier instead of
19
+ // hard-coding write.
20
+ const requestScopeModes = new WeakMap();
17
21
  /**
18
22
  * Creates authentication middleware for openapi-fetch.
19
23
  *
@@ -89,6 +93,91 @@ export function createAuthMiddleware(auth) {
89
93
  },
90
94
  };
91
95
  }
96
+ /**
97
+ * Internal request header read by {@link createScapiAuthMiddleware} to choose
98
+ * a cascade tier. Operations attach `'read'` or `'write'`; the header is
99
+ * stripped before the request leaves the middleware.
100
+ */
101
+ export const SCOPE_MODE_HEADER = 'x-b2c-scope-mode';
102
+ /**
103
+ * Auth middleware for SCAPI clients with a configured {@link ScopeCascade}.
104
+ *
105
+ * Reads the {@link SCOPE_MODE_HEADER} from the request, picks the matching
106
+ * cascade, and asks the auth strategy to resolve it (cache-first, then AM
107
+ * with `invalid_scope` fallback). Strips the header before the request is
108
+ * sent.
109
+ *
110
+ * Falls back to `getAuthorizationHeader()` when:
111
+ * - the strategy doesn't implement `getAccessTokenForCascade` (e.g.
112
+ * stateful sessions, basic auth), or
113
+ * - the request didn't supply a `scopeMode` header.
114
+ *
115
+ * 401 retry behavior matches {@link createAuthMiddleware}: on a 401 after a
116
+ * prior success, invalidate the token and retry once.
117
+ */
118
+ export function createScapiAuthMiddleware(auth, cascade) {
119
+ const logger = getLogger();
120
+ let hasHadSuccess = false;
121
+ async function authorize(request) {
122
+ const mode = request.headers.get(SCOPE_MODE_HEADER);
123
+ request.headers.delete(SCOPE_MODE_HEADER);
124
+ if (mode && auth.getAccessTokenForCascade) {
125
+ requestScopeModes.set(request, mode);
126
+ const candidates = cascade[mode];
127
+ const token = await auth.getAccessTokenForCascade(candidates);
128
+ request.headers.set('Authorization', `Bearer ${token}`);
129
+ return;
130
+ }
131
+ if (auth.getAuthorizationHeader) {
132
+ request.headers.set('Authorization', await auth.getAuthorizationHeader());
133
+ }
134
+ }
135
+ return {
136
+ async onRequest({ request }) {
137
+ await authorize(request);
138
+ // Clone body for potential 401 retry (body is single-use).
139
+ if (request.body && auth.invalidateToken) {
140
+ const cloned = request.clone();
141
+ const bodyBuffer = await cloned.arrayBuffer();
142
+ requestBodies.set(request, bodyBuffer);
143
+ }
144
+ return request;
145
+ },
146
+ async onResponse({ request, response }) {
147
+ if (response.status !== 401) {
148
+ hasHadSuccess = true;
149
+ }
150
+ if (response.status === 401 && hasHadSuccess && !retriedRequests.has(request) && auth.invalidateToken) {
151
+ logger.debug('[ScapiAuthMiddleware] Received 401, invalidating token and retrying');
152
+ retriedRequests.add(request);
153
+ auth.invalidateToken();
154
+ const newHeaders = new Headers(request.headers);
155
+ // The original scope-mode header was stripped on the way in. Re-run
156
+ // the cascade at the same tier the original request used so a
157
+ // read-only request doesn't get retried as a write (which would fail
158
+ // for clients that only have the read scope).
159
+ const retryRequest = new Request(request.url, {
160
+ method: request.method,
161
+ headers: newHeaders,
162
+ body: requestBodies.get(request) ?? undefined,
163
+ ...(requestBodies.get(request) ? { duplex: 'half' } : {}),
164
+ });
165
+ if (auth.getAccessTokenForCascade) {
166
+ const originalMode = requestScopeModes.get(request) ?? 'write';
167
+ const token = await auth.getAccessTokenForCascade(cascade[originalMode]);
168
+ retryRequest.headers.set('Authorization', `Bearer ${token}`);
169
+ }
170
+ else if (auth.getAuthorizationHeader) {
171
+ retryRequest.headers.set('Authorization', await auth.getAuthorizationHeader());
172
+ }
173
+ const retryResponse = await fetch(retryRequest);
174
+ logger.debug({ status: retryResponse.status }, `[ScapiAuthMiddleware] Retry response: ${retryResponse.status}`);
175
+ return retryResponse;
176
+ }
177
+ return response;
178
+ },
179
+ };
180
+ }
92
181
  const DEFAULT_RATE_LIMIT_MAX_RETRIES = 3;
93
182
  const DEFAULT_RATE_LIMIT_BASE_DELAY_MS = 1000;
94
183
  const DEFAULT_RATE_LIMIT_MAX_DELAY_MS = 30000;
@@ -286,7 +375,7 @@ function maskBody(body, keysToMask) {
286
375
  */
287
376
  export function createLoggingMiddleware(config) {
288
377
  // Support both string (prefix) and config object for backwards compatibility
289
- const { prefix, maskBodyKeys } = typeof config === 'string' ? { prefix: config, maskBodyKeys: undefined } : (config ?? {});
378
+ const { prefix, maskBodyKeys, logDetails = true, } = typeof config === 'string' ? { prefix: config, maskBodyKeys: undefined } : (config ?? {});
290
379
  const reqTag = prefix ? `[${prefix} REQ]` : '';
291
380
  const respTag = prefix ? `[${prefix} RESP]` : '';
292
381
  return {
@@ -294,22 +383,34 @@ export function createLoggingMiddleware(config) {
294
383
  const logger = getLogger();
295
384
  const url = request.url;
296
385
  logger.debug({ method: request.method, url }, `${reqTag} ${request.method} ${url}`);
297
- // Read body from the request (already serialized by openapi-fetch)
386
+ request._startTime = Date.now();
387
+ if (!logDetails)
388
+ return request;
389
+ // Read body from the request (already serialized by openapi-fetch).
390
+ // Skip binary/multipart payloads: reading them would buffer the entire
391
+ // (potentially large) body into memory on every request, and the raw
392
+ // bytes should never be logged. maskBodyKeys only covers JSON keys, so a
393
+ // multipart bundle upload would otherwise leak its archive at trace level.
298
394
  let body;
299
395
  if (request.body) {
300
- const clonedRequest = request.clone();
301
- const text = await clonedRequest.text();
302
- try {
303
- body = JSON.parse(text);
396
+ const contentType = request.headers.get('content-type') ?? '';
397
+ if (contentType.startsWith('multipart/') || contentType.startsWith('application/octet-stream')) {
398
+ body = `[${contentType} body omitted]`;
304
399
  }
305
- catch {
306
- body = text;
400
+ else {
401
+ const clonedRequest = request.clone();
402
+ const text = await clonedRequest.text();
403
+ try {
404
+ body = JSON.parse(text);
405
+ }
406
+ catch {
407
+ body = text;
408
+ }
307
409
  }
308
410
  }
309
411
  // Mask sensitive/large body keys before logging
310
412
  const maskedBody = maskBody(body, maskBodyKeys);
311
413
  logger.trace({ method: request.method, url, headers: headersToObject(request.headers), body: maskedBody }, `${reqTag} ${request.method} ${url} body`);
312
- request._startTime = Date.now();
313
414
  return request;
314
415
  },
315
416
  async onResponse({ request, response }) {
@@ -317,7 +418,17 @@ export function createLoggingMiddleware(config) {
317
418
  const startTime = request._startTime ?? Date.now();
318
419
  const duration = Date.now() - startTime;
319
420
  const url = request.url;
320
- logger.debug({ method: request.method, url, status: response.status, duration }, `${respTag} ${request.method} ${url} ${response.status} ${duration}ms`);
421
+ logger.debug({
422
+ method: request.method,
423
+ url,
424
+ status: response.status,
425
+ duration,
426
+ ...(response.headers.has('sfdc_correlation_id')
427
+ ? { correlationId: response.headers.get('sfdc_correlation_id') }
428
+ : {}),
429
+ }, `${respTag} ${request.method} ${url} ${response.status} ${duration}ms`);
430
+ if (!logDetails)
431
+ return response;
321
432
  const clonedResponse = response.clone();
322
433
  let responseBody;
323
434
  // Read as text first, then try to parse as JSON.
@@ -413,11 +524,7 @@ export function createExtraParamsMiddleware(config) {
413
524
  newHeaders.set(key, value);
414
525
  }
415
526
  logger.trace({ extraHeaders: config.headers }, '[ExtraParams] Adding extra headers to request');
416
- modifiedRequest = new Request(modifiedRequest.url, {
417
- method: modifiedRequest.method,
418
- headers: newHeaders,
419
- ...(canHaveBody && modifiedRequest.body ? { body: modifiedRequest.body, duplex: 'half' } : {}),
420
- });
527
+ modifiedRequest = new Request(modifiedRequest, { headers: newHeaders });
421
528
  }
422
529
  // Add extra query parameters
423
530
  if (config.query && Object.keys(config.query).length > 0) {
@@ -428,11 +535,8 @@ export function createExtraParamsMiddleware(config) {
428
535
  }
429
536
  }
430
537
  logger.trace({ extraQuery: config.query, originalUrl: modifiedRequest.url, newUrl: url.toString() }, '[ExtraParams] Adding extra query params to URL');
431
- modifiedRequest = new Request(url.toString(), {
432
- method: modifiedRequest.method,
433
- headers: modifiedRequest.headers,
434
- ...(canHaveBody && modifiedRequest.body ? { body: modifiedRequest.body, duplex: 'half' } : {}),
435
- });
538
+ // Preserve redirect mode and other fetch options when replacing the URL.
539
+ modifiedRequest = new Request(url, modifiedRequest);
436
540
  }
437
541
  // Merge extra body fields for JSON requests
438
542
  if (config.body && Object.keys(config.body).length > 0) {
@@ -444,9 +548,7 @@ export function createExtraParamsMiddleware(config) {
444
548
  const parsedBody = JSON.parse(originalBody);
445
549
  const mergedBody = { ...parsedBody, ...config.body };
446
550
  logger.trace({ originalBody: parsedBody, extraBody: config.body, mergedBody }, '[ExtraParams] Merging extra body fields into request');
447
- modifiedRequest = new Request(modifiedRequest.url, {
448
- method: modifiedRequest.method,
449
- headers: modifiedRequest.headers,
551
+ modifiedRequest = new Request(modifiedRequest, {
450
552
  body: JSON.stringify(mergedBody),
451
553
  });
452
554
  }
@@ -459,8 +561,7 @@ export function createExtraParamsMiddleware(config) {
459
561
  logger.trace({ body: config.body }, '[ExtraParams] Creating new body with extra fields');
460
562
  const headers = new Headers(modifiedRequest.headers);
461
563
  headers.set('content-type', 'application/json');
462
- modifiedRequest = new Request(modifiedRequest.url, {
463
- method: modifiedRequest.method,
564
+ modifiedRequest = new Request(modifiedRequest, {
464
565
  headers,
465
566
  body: JSON.stringify(config.body),
466
567
  });