@salesforce/b2c-tooling-sdk 1.24.2 → 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 (460) 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 +80 -116
  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 +1 -0
  15. package/dist/esm/auth/oauth-implicit.js +1 -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 +1 -0
  21. package/dist/esm/auth/oauth-pkce-fallback.js +1 -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 +1 -0
  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/types.d.ts +44 -0
  33. package/dist/esm/auth/types.js.map +1 -1
  34. package/dist/esm/cli/base-command.d.ts +9 -0
  35. package/dist/esm/cli/base-command.js +31 -0
  36. package/dist/esm/cli/base-command.js.map +1 -1
  37. package/dist/esm/cli/bm-command.d.ts +15 -0
  38. package/dist/esm/cli/bm-command.js +25 -0
  39. package/dist/esm/cli/bm-command.js.map +1 -0
  40. package/dist/esm/cli/code-command.d.ts +14 -0
  41. package/dist/esm/cli/code-command.js +22 -0
  42. package/dist/esm/cli/code-command.js.map +1 -0
  43. package/dist/esm/cli/config.js +3 -0
  44. package/dist/esm/cli/config.js.map +1 -1
  45. package/dist/esm/cli/index.d.ts +5 -1
  46. package/dist/esm/cli/index.js +7 -1
  47. package/dist/esm/cli/index.js.map +1 -1
  48. package/dist/esm/cli/instance-command.d.ts +45 -0
  49. package/dist/esm/cli/instance-command.js +66 -1
  50. package/dist/esm/cli/instance-command.js.map +1 -1
  51. package/dist/esm/cli/job-command.d.ts +37 -16
  52. package/dist/esm/cli/job-command.js +73 -23
  53. package/dist/esm/cli/job-command.js.map +1 -1
  54. package/dist/esm/cli/mrt-command.d.ts +138 -9
  55. package/dist/esm/cli/mrt-command.js +277 -16
  56. package/dist/esm/cli/mrt-command.js.map +1 -1
  57. package/dist/esm/cli/oauth-command.d.ts +1 -1
  58. package/dist/esm/cli/oauth-command.js +2 -0
  59. package/dist/esm/cli/oauth-command.js.map +1 -1
  60. package/dist/esm/cli/webdav-command.d.ts +1 -0
  61. package/dist/esm/clients/cdn-zones.js +2 -5
  62. package/dist/esm/clients/cdn-zones.js.map +1 -1
  63. package/dist/esm/clients/cip.d.ts +12 -3
  64. package/dist/esm/clients/cip.js +85 -30
  65. package/dist/esm/clients/cip.js.map +1 -1
  66. package/dist/esm/clients/custom-apis.js +2 -5
  67. package/dist/esm/clients/custom-apis.js.map +1 -1
  68. package/dist/esm/clients/dual-backend-factory.d.ts +70 -0
  69. package/dist/esm/clients/dual-backend-factory.js +48 -0
  70. package/dist/esm/clients/dual-backend-factory.js.map +1 -0
  71. package/dist/esm/clients/error-utils.d.ts +62 -0
  72. package/dist/esm/clients/error-utils.js +98 -0
  73. package/dist/esm/clients/error-utils.js.map +1 -1
  74. package/dist/esm/clients/granular-replications.js +2 -5
  75. package/dist/esm/clients/granular-replications.js.map +1 -1
  76. package/dist/esm/clients/index.d.ts +28 -3
  77. package/dist/esm/clients/index.js +24 -2
  78. package/dist/esm/clients/index.js.map +1 -1
  79. package/dist/esm/clients/metrics.js +2 -5
  80. package/dist/esm/clients/metrics.js.map +1 -1
  81. package/dist/esm/clients/middleware-registry.d.ts +4 -2
  82. package/dist/esm/clients/middleware-registry.js +3 -1
  83. package/dist/esm/clients/middleware-registry.js.map +1 -1
  84. package/dist/esm/clients/middleware.d.ts +39 -0
  85. package/dist/esm/clients/middleware.js +126 -25
  86. package/dist/esm/clients/middleware.js.map +1 -1
  87. package/dist/esm/clients/mrt-b2c.js +3 -0
  88. package/dist/esm/clients/mrt-b2c.js.map +1 -1
  89. package/dist/esm/clients/mrt.d.ts +27 -10
  90. package/dist/esm/clients/mrt.generated.d.ts +77 -0
  91. package/dist/esm/clients/mrt.js +68 -0
  92. package/dist/esm/clients/mrt.js.map +1 -1
  93. package/dist/esm/clients/preferences.js +2 -5
  94. package/dist/esm/clients/preferences.js.map +1 -1
  95. package/dist/esm/clients/scapi-backend-utils.d.ts +163 -0
  96. package/dist/esm/clients/scapi-backend-utils.js +180 -0
  97. package/dist/esm/clients/scapi-backend-utils.js.map +1 -0
  98. package/dist/esm/clients/scapi-catalogs.d.ts +12 -0
  99. package/dist/esm/clients/scapi-catalogs.generated.d.ts +104 -0
  100. package/dist/esm/clients/scapi-catalogs.generated.js +6 -0
  101. package/dist/esm/clients/scapi-catalogs.generated.js.map +1 -0
  102. package/dist/esm/clients/scapi-catalogs.js +14 -0
  103. package/dist/esm/clients/scapi-catalogs.js.map +1 -0
  104. package/dist/esm/clients/scapi-client-factory.d.ts +81 -0
  105. package/dist/esm/clients/scapi-client-factory.js +84 -0
  106. package/dist/esm/clients/scapi-client-factory.js.map +1 -0
  107. package/dist/esm/clients/scapi-fallback-backend.d.ts +34 -0
  108. package/dist/esm/clients/scapi-fallback-backend.js +132 -0
  109. package/dist/esm/clients/scapi-fallback-backend.js.map +1 -0
  110. package/dist/esm/clients/scapi-jobs.d.ts +32 -0
  111. package/dist/esm/clients/scapi-jobs.generated.d.ts +535 -0
  112. package/dist/esm/clients/scapi-jobs.generated.js +6 -0
  113. package/dist/esm/clients/scapi-jobs.generated.js.map +1 -0
  114. package/dist/esm/clients/scapi-jobs.js +24 -0
  115. package/dist/esm/clients/scapi-jobs.js.map +1 -0
  116. package/dist/esm/clients/scapi-merchant-roles.d.ts +19 -0
  117. package/dist/esm/clients/scapi-merchant-roles.generated.d.ts +726 -0
  118. package/dist/esm/clients/scapi-merchant-roles.generated.js +6 -0
  119. package/dist/esm/clients/scapi-merchant-roles.generated.js.map +1 -0
  120. package/dist/esm/clients/scapi-merchant-roles.js +12 -0
  121. package/dist/esm/clients/scapi-merchant-roles.js.map +1 -0
  122. package/dist/esm/clients/scapi-merchant-users.d.ts +19 -0
  123. package/dist/esm/clients/scapi-merchant-users.generated.d.ts +300 -0
  124. package/dist/esm/clients/scapi-merchant-users.generated.js +6 -0
  125. package/dist/esm/clients/scapi-merchant-users.generated.js.map +1 -0
  126. package/dist/esm/clients/scapi-merchant-users.js +12 -0
  127. package/dist/esm/clients/scapi-merchant-users.js.map +1 -0
  128. package/dist/esm/clients/scapi-schemas.js +2 -5
  129. package/dist/esm/clients/scapi-schemas.js.map +1 -1
  130. package/dist/esm/clients/scapi-scope-tier.d.ts +78 -0
  131. package/dist/esm/clients/scapi-scope-tier.js +113 -0
  132. package/dist/esm/clients/scapi-scope-tier.js.map +1 -0
  133. package/dist/esm/clients/scapi-scripts.d.ts +17 -0
  134. package/dist/esm/clients/scapi-scripts.generated.d.ts +392 -0
  135. package/dist/esm/clients/scapi-scripts.generated.js +6 -0
  136. package/dist/esm/clients/scapi-scripts.generated.js.map +1 -0
  137. package/dist/esm/clients/scapi-scripts.js +12 -0
  138. package/dist/esm/clients/scapi-scripts.js.map +1 -0
  139. package/dist/esm/clients/scapi-sites.d.ts +26 -0
  140. package/dist/esm/clients/scapi-sites.generated.d.ts +500 -0
  141. package/dist/esm/clients/scapi-sites.generated.js +6 -0
  142. package/dist/esm/clients/scapi-sites.generated.js.map +1 -0
  143. package/dist/esm/clients/scapi-sites.js +25 -0
  144. package/dist/esm/clients/scapi-sites.js.map +1 -0
  145. package/dist/esm/clients/slas-shopper.d.ts +19 -0
  146. package/dist/esm/clients/slas-shopper.generated.d.ts +165 -0
  147. package/dist/esm/clients/slas-shopper.generated.js +6 -0
  148. package/dist/esm/clients/slas-shopper.generated.js.map +1 -0
  149. package/dist/esm/clients/slas-shopper.js +35 -0
  150. package/dist/esm/clients/slas-shopper.js.map +1 -0
  151. package/dist/esm/clients/storefront-deployments.d.ts +56 -0
  152. package/dist/esm/clients/storefront-deployments.generated.d.ts +558 -0
  153. package/dist/esm/clients/storefront-deployments.generated.js +6 -0
  154. package/dist/esm/clients/storefront-deployments.generated.js.map +1 -0
  155. package/dist/esm/clients/storefront-deployments.js +24 -0
  156. package/dist/esm/clients/storefront-deployments.js.map +1 -0
  157. package/dist/esm/clients/webdav.js +4 -1
  158. package/dist/esm/clients/webdav.js.map +1 -1
  159. package/dist/esm/compat/dispatcher.d.ts +49 -0
  160. package/dist/esm/compat/dispatcher.js +124 -0
  161. package/dist/esm/compat/dispatcher.js.map +1 -0
  162. package/dist/esm/compat/index.d.ts +10 -0
  163. package/dist/esm/compat/index.js +15 -0
  164. package/dist/esm/compat/index.js.map +1 -0
  165. package/dist/esm/compat/jobs-backend.d.ts +31 -0
  166. package/dist/esm/compat/jobs-backend.js +76 -0
  167. package/dist/esm/compat/jobs-backend.js.map +1 -0
  168. package/dist/esm/config/dw-json.d.ts +4 -0
  169. package/dist/esm/config/dw-json.js.map +1 -1
  170. package/dist/esm/config/index.d.ts +1 -1
  171. package/dist/esm/config/index.js.map +1 -1
  172. package/dist/esm/config/mapping.d.ts +2 -5
  173. package/dist/esm/config/mapping.js +25 -1
  174. package/dist/esm/config/mapping.js.map +1 -1
  175. package/dist/esm/config/resolved-config.d.ts +2 -2
  176. package/dist/esm/config/resolved-config.js.map +1 -1
  177. package/dist/esm/config/sources/env-source.js +17 -0
  178. package/dist/esm/config/sources/env-source.js.map +1 -1
  179. package/dist/esm/config/types.d.ts +21 -2
  180. package/dist/esm/docs/search.js +2 -25
  181. package/dist/esm/docs/search.js.map +1 -1
  182. package/dist/esm/guidance/catalog.d.ts +37 -0
  183. package/dist/esm/guidance/catalog.js +282 -0
  184. package/dist/esm/guidance/catalog.js.map +1 -0
  185. package/dist/esm/guidance/index.d.ts +8 -0
  186. package/dist/esm/guidance/index.js +14 -0
  187. package/dist/esm/guidance/index.js.map +1 -0
  188. package/dist/esm/guidance/markdown.d.ts +10 -0
  189. package/dist/esm/guidance/markdown.js +52 -0
  190. package/dist/esm/guidance/markdown.js.map +1 -0
  191. package/dist/esm/guidance/types.d.ts +92 -0
  192. package/dist/esm/guidance/types.js +17 -0
  193. package/dist/esm/guidance/types.js.map +1 -0
  194. package/dist/esm/index.d.ts +14 -5
  195. package/dist/esm/index.js +14 -2
  196. package/dist/esm/index.js.map +1 -1
  197. package/dist/esm/instance/index.d.ts +96 -2
  198. package/dist/esm/instance/index.js +98 -5
  199. package/dist/esm/instance/index.js.map +1 -1
  200. package/dist/esm/operations/bm-roles/backend.d.ts +4 -0
  201. package/dist/esm/operations/bm-roles/backend.js +11 -0
  202. package/dist/esm/operations/bm-roles/backend.js.map +1 -0
  203. package/dist/esm/operations/bm-roles/index.d.ts +6 -0
  204. package/dist/esm/operations/bm-roles/index.js +4 -0
  205. package/dist/esm/operations/bm-roles/index.js.map +1 -1
  206. package/dist/esm/operations/bm-roles/ocapi-backend.d.ts +17 -0
  207. package/dist/esm/operations/bm-roles/ocapi-backend.js +151 -0
  208. package/dist/esm/operations/bm-roles/ocapi-backend.js.map +1 -0
  209. package/dist/esm/operations/bm-roles/roles.js +13 -17
  210. package/dist/esm/operations/bm-roles/roles.js.map +1 -1
  211. package/dist/esm/operations/bm-roles/scapi-backend.d.ts +27 -0
  212. package/dist/esm/operations/bm-roles/scapi-backend.js +138 -0
  213. package/dist/esm/operations/bm-roles/scapi-backend.js.map +1 -0
  214. package/dist/esm/operations/bm-roles/types.d.ts +49 -0
  215. package/dist/esm/operations/bm-roles/types.js +2 -0
  216. package/dist/esm/operations/bm-roles/types.js.map +1 -0
  217. package/dist/esm/operations/bm-users/backend.d.ts +4 -0
  218. package/dist/esm/operations/bm-users/backend.js +11 -0
  219. package/dist/esm/operations/bm-users/backend.js.map +1 -0
  220. package/dist/esm/operations/bm-users/index.d.ts +11 -3
  221. package/dist/esm/operations/bm-users/index.js +9 -3
  222. package/dist/esm/operations/bm-users/index.js.map +1 -1
  223. package/dist/esm/operations/bm-users/ocapi-backend.d.ts +13 -0
  224. package/dist/esm/operations/bm-users/ocapi-backend.js +92 -0
  225. package/dist/esm/operations/bm-users/ocapi-backend.js.map +1 -0
  226. package/dist/esm/operations/bm-users/scapi-backend.d.ts +23 -0
  227. package/dist/esm/operations/bm-users/scapi-backend.js +199 -0
  228. package/dist/esm/operations/bm-users/scapi-backend.js.map +1 -0
  229. package/dist/esm/operations/bm-users/types.d.ts +99 -0
  230. package/dist/esm/operations/bm-users/types.js +2 -0
  231. package/dist/esm/operations/bm-users/types.js.map +1 -0
  232. package/dist/esm/operations/bm-users/users.d.ts +4 -3
  233. package/dist/esm/operations/bm-users/users.js +23 -19
  234. package/dist/esm/operations/bm-users/users.js.map +1 -1
  235. package/dist/esm/operations/cap/install.js +23 -45
  236. package/dist/esm/operations/cap/install.js.map +1 -1
  237. package/dist/esm/operations/cap/list.js +4 -8
  238. package/dist/esm/operations/cap/list.js.map +1 -1
  239. package/dist/esm/operations/cap/uninstall.js +17 -37
  240. package/dist/esm/operations/cap/uninstall.js.map +1 -1
  241. package/dist/esm/operations/catalogs/catalogs-backend.d.ts +4 -0
  242. package/dist/esm/operations/catalogs/catalogs-backend.js +16 -0
  243. package/dist/esm/operations/catalogs/catalogs-backend.js.map +1 -0
  244. package/dist/esm/operations/catalogs/catalogs-types.d.ts +14 -0
  245. package/dist/esm/operations/catalogs/catalogs-types.js +2 -0
  246. package/dist/esm/operations/catalogs/catalogs-types.js.map +1 -0
  247. package/dist/esm/operations/catalogs/index.d.ts +7 -0
  248. package/dist/esm/operations/catalogs/index.js +10 -0
  249. package/dist/esm/operations/catalogs/index.js.map +1 -0
  250. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.d.ts +8 -0
  251. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js +36 -0
  252. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js.map +1 -0
  253. package/dist/esm/operations/catalogs/scapi-catalogs-backend.d.ts +15 -0
  254. package/dist/esm/operations/catalogs/scapi-catalogs-backend.js +42 -0
  255. package/dist/esm/operations/catalogs/scapi-catalogs-backend.js.map +1 -0
  256. package/dist/esm/operations/cip/index.js +10 -2
  257. package/dist/esm/operations/cip/index.js.map +1 -1
  258. package/dist/esm/operations/cip/reports.js +19 -3
  259. package/dist/esm/operations/cip/reports.js.map +1 -1
  260. package/dist/esm/operations/cip/types.d.ts +8 -4
  261. package/dist/esm/operations/code/deploy.d.ts +3 -0
  262. package/dist/esm/operations/code/deploy.js +5 -3
  263. package/dist/esm/operations/code/deploy.js.map +1 -1
  264. package/dist/esm/operations/code/download.d.ts +3 -0
  265. package/dist/esm/operations/code/download.js +5 -5
  266. package/dist/esm/operations/code/download.js.map +1 -1
  267. package/dist/esm/operations/code/index.d.ts +7 -1
  268. package/dist/esm/operations/code/index.js +5 -1
  269. package/dist/esm/operations/code/index.js.map +1 -1
  270. package/dist/esm/operations/code/ocapi-scripts-backend.d.ts +12 -0
  271. package/dist/esm/operations/code/ocapi-scripts-backend.js +40 -0
  272. package/dist/esm/operations/code/ocapi-scripts-backend.js.map +1 -0
  273. package/dist/esm/operations/code/scapi-scripts-backend.d.ts +22 -0
  274. package/dist/esm/operations/code/scapi-scripts-backend.js +94 -0
  275. package/dist/esm/operations/code/scapi-scripts-backend.js.map +1 -0
  276. package/dist/esm/operations/code/scripts-backend.d.ts +17 -0
  277. package/dist/esm/operations/code/scripts-backend.js +40 -0
  278. package/dist/esm/operations/code/scripts-backend.js.map +1 -0
  279. package/dist/esm/operations/code/scripts-types.d.ts +43 -0
  280. package/dist/esm/operations/code/scripts-types.js +2 -0
  281. package/dist/esm/operations/code/scripts-types.js.map +1 -0
  282. package/dist/esm/operations/code/upload-files.d.ts +6 -0
  283. package/dist/esm/operations/code/upload-files.js +58 -7
  284. package/dist/esm/operations/code/upload-files.js.map +1 -1
  285. package/dist/esm/operations/code/versions.d.ts +0 -20
  286. package/dist/esm/operations/code/versions.js +16 -51
  287. package/dist/esm/operations/code/versions.js.map +1 -1
  288. package/dist/esm/operations/code/watch.d.ts +3 -0
  289. package/dist/esm/operations/code/watch.js +3 -2
  290. package/dist/esm/operations/code/watch.js.map +1 -1
  291. package/dist/esm/operations/jobs/discover.d.ts +1 -1
  292. package/dist/esm/operations/jobs/discover.js +51 -21
  293. package/dist/esm/operations/jobs/discover.js.map +1 -1
  294. package/dist/esm/operations/jobs/index.d.ts +14 -57
  295. package/dist/esm/operations/jobs/index.js +15 -59
  296. package/dist/esm/operations/jobs/index.js.map +1 -1
  297. package/dist/esm/operations/jobs/ocapi-mapping.d.ts +34 -0
  298. package/dist/esm/operations/jobs/ocapi-mapping.js +100 -0
  299. package/dist/esm/operations/jobs/ocapi-mapping.js.map +1 -0
  300. package/dist/esm/operations/jobs/run-system-job.d.ts +81 -0
  301. package/dist/esm/operations/jobs/run-system-job.js +137 -0
  302. package/dist/esm/operations/jobs/run-system-job.js.map +1 -0
  303. package/dist/esm/operations/jobs/run.js +16 -4
  304. package/dist/esm/operations/jobs/run.js.map +1 -1
  305. package/dist/esm/operations/jobs/scapi-ops.d.ts +61 -0
  306. package/dist/esm/operations/jobs/scapi-ops.js +214 -0
  307. package/dist/esm/operations/jobs/scapi-ops.js.map +1 -0
  308. package/dist/esm/operations/jobs/site-archive.js +28 -66
  309. package/dist/esm/operations/jobs/site-archive.js.map +1 -1
  310. package/dist/esm/operations/jobs/types.d.ts +46 -0
  311. package/dist/esm/operations/jobs/types.js +2 -0
  312. package/dist/esm/operations/jobs/types.js.map +1 -0
  313. package/dist/esm/operations/jobs/wait-canonical.d.ts +28 -0
  314. package/dist/esm/operations/jobs/wait-canonical.js +48 -0
  315. package/dist/esm/operations/jobs/wait-canonical.js.map +1 -0
  316. package/dist/esm/operations/mrt/bundle.d.ts +164 -2
  317. package/dist/esm/operations/mrt/bundle.js +315 -9
  318. package/dist/esm/operations/mrt/bundle.js.map +1 -1
  319. package/dist/esm/operations/mrt/deployment.d.ts +221 -0
  320. package/dist/esm/operations/mrt/deployment.js +239 -0
  321. package/dist/esm/operations/mrt/deployment.js.map +1 -1
  322. package/dist/esm/operations/mrt/index.d.ts +8 -6
  323. package/dist/esm/operations/mrt/index.js +5 -3
  324. package/dist/esm/operations/mrt/index.js.map +1 -1
  325. package/dist/esm/operations/mrt/mrt-backend.d.ts +117 -0
  326. package/dist/esm/operations/mrt/mrt-backend.js +84 -0
  327. package/dist/esm/operations/mrt/mrt-backend.js.map +1 -0
  328. package/dist/esm/operations/mrt/push.d.ts +83 -1
  329. package/dist/esm/operations/mrt/push.js +102 -1
  330. package/dist/esm/operations/mrt/push.js.map +1 -1
  331. package/dist/esm/operations/sites/cartridges.d.ts +10 -8
  332. package/dist/esm/operations/sites/cartridges.js +35 -67
  333. package/dist/esm/operations/sites/cartridges.js.map +1 -1
  334. package/dist/esm/operations/sites/index.d.ts +10 -6
  335. package/dist/esm/operations/sites/index.js +9 -6
  336. package/dist/esm/operations/sites/index.js.map +1 -1
  337. package/dist/esm/operations/sites/ocapi-sites-backend.d.ts +20 -0
  338. package/dist/esm/operations/sites/ocapi-sites-backend.js +98 -0
  339. package/dist/esm/operations/sites/ocapi-sites-backend.js.map +1 -0
  340. package/dist/esm/operations/sites/scapi-sites-backend.d.ts +33 -0
  341. package/dist/esm/operations/sites/scapi-sites-backend.js +166 -0
  342. package/dist/esm/operations/sites/scapi-sites-backend.js.map +1 -0
  343. package/dist/esm/operations/sites/sites-backend.d.ts +9 -0
  344. package/dist/esm/operations/sites/sites-backend.js +16 -0
  345. package/dist/esm/operations/sites/sites-backend.js.map +1 -0
  346. package/dist/esm/operations/sites/sites-scopes.d.ts +2 -0
  347. package/dist/esm/operations/sites/sites-scopes.js +16 -0
  348. package/dist/esm/operations/sites/sites-scopes.js.map +1 -0
  349. package/dist/esm/operations/sites/sites-types.d.ts +50 -0
  350. package/dist/esm/operations/sites/sites-types.js +2 -0
  351. package/dist/esm/operations/sites/sites-types.js.map +1 -0
  352. package/dist/esm/safety/safety-middleware.d.ts +7 -3
  353. package/dist/esm/safety/safety-middleware.js +13 -9
  354. package/dist/esm/safety/safety-middleware.js.map +1 -1
  355. package/dist/esm/scaffold/sources.js +6 -9
  356. package/dist/esm/scaffold/sources.js.map +1 -1
  357. package/dist/esm/scapi/auth-primitives.d.ts +3 -0
  358. package/dist/esm/scapi/auth-primitives.js +104 -0
  359. package/dist/esm/scapi/auth-primitives.js.map +1 -0
  360. package/dist/esm/scapi/authentication.d.ts +30 -0
  361. package/dist/esm/scapi/authentication.js +136 -0
  362. package/dist/esm/scapi/authentication.js.map +1 -0
  363. package/dist/esm/scapi/catalog.d.ts +29 -0
  364. package/dist/esm/scapi/catalog.js +81 -0
  365. package/dist/esm/scapi/catalog.js.map +1 -0
  366. package/dist/esm/scapi/index.d.ts +12 -0
  367. package/dist/esm/scapi/index.js +13 -0
  368. package/dist/esm/scapi/index.js.map +1 -0
  369. package/dist/esm/scapi/request.d.ts +15 -0
  370. package/dist/esm/scapi/request.js +239 -0
  371. package/dist/esm/scapi/request.js.map +1 -0
  372. package/dist/esm/scapi/runtime.d.ts +20 -0
  373. package/dist/esm/scapi/runtime.js +131 -0
  374. package/dist/esm/scapi/runtime.js.map +1 -0
  375. package/dist/esm/scapi/snippets.d.ts +22 -0
  376. package/dist/esm/scapi/snippets.js +140 -0
  377. package/dist/esm/scapi/snippets.js.map +1 -0
  378. package/dist/esm/scapi/worker-source.d.ts +2 -0
  379. package/dist/esm/scapi/worker-source.js +101 -0
  380. package/dist/esm/scapi/worker-source.js.map +1 -0
  381. package/dist/esm/search/ranking.d.ts +12 -0
  382. package/dist/esm/search/ranking.js +28 -0
  383. package/dist/esm/search/ranking.js.map +1 -0
  384. package/dist/esm/skills/sources.d.ts +2 -2
  385. package/dist/esm/skills/sources.js +10 -2
  386. package/dist/esm/skills/sources.js.map +1 -1
  387. package/dist/esm/skills/types.d.ts +1 -1
  388. package/dist/esm/slas/token.js +33 -94
  389. package/dist/esm/slas/token.js.map +1 -1
  390. package/dist/esm/slas/types.d.ts +5 -0
  391. package/node_modules/@salesforce/b2c-api-schemas/README.md +23 -0
  392. package/node_modules/@salesforce/b2c-api-schemas/manifest.json +576 -0
  393. package/node_modules/@salesforce/b2c-api-schemas/package.json +15 -0
  394. package/node_modules/@salesforce/b2c-api-schemas/scapi/cdn/zones/v1.json +11490 -0
  395. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/orders/v1.json +3589 -0
  396. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v1.json +6544 -0
  397. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v2.json +7148 -0
  398. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-orders/v1.json +4411 -0
  399. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-payments/v1.json +643 -0
  400. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/cors/v1.json +295 -0
  401. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/preferences/v1.json +2036 -0
  402. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/shopper-configurations/v1.json +327 -0
  403. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/timeouts/v1.json +234 -0
  404. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/custom-objects/v1.json +1542 -0
  405. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/shopper-custom-objects/v1.json +405 -0
  406. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/customers/v1.json +2531 -0
  407. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/shopper-customers/v1.json +7944 -0
  408. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/custom-apis/v1.json +292 -0
  409. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/object-definitions/v1.json +2537 -0
  410. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scapi-schemas/v1.json +517 -0
  411. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scripts/v1.json +589 -0
  412. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/experiences/v1.json +3600 -0
  413. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/shopper-experience/v1.json +2319 -0
  414. package/node_modules/@salesforce/b2c-api-schemas/scapi/intelligence/analytics/v1.json +658 -0
  415. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/availability/v1.json +2649 -0
  416. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/impex/v1.json +6615 -0
  417. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/reservation/v1.json +2103 -0
  418. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/roles/v1.json +1760 -0
  419. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/users/v1.json +640 -0
  420. package/node_modules/@salesforce/b2c-api-schemas/scapi/observability/metrics/v1.json +1263 -0
  421. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/jobs/v1.json +1259 -0
  422. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/replications/v1.json +760 -0
  423. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/assignments/v1.json +1047 -0
  424. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/campaigns/v1.json +1929 -0
  425. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/coupons/v1.json +1542 -0
  426. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/gift-certificates/v1.json +1093 -0
  427. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/promotions/v1.json +1324 -0
  428. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-gift-certificates/v1.json +325 -0
  429. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-promotions/v1.json +631 -0
  430. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/source-code-groups/v1.json +1036 -0
  431. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/catalogs/v1.json +5175 -0
  432. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/inventory-lists/v1.json +866 -0
  433. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/price-books/v1.json +747 -0
  434. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/products/v1.json +5076 -0
  435. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-availability/v1.json +509 -0
  436. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-delivery-estimates/v1.json +517 -0
  437. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-products/v1.json +2961 -0
  438. package/node_modules/@salesforce/b2c-api-schemas/scapi/search/shopper-search/v1.json +1889 -0
  439. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth/v1.json +7014 -0
  440. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth-admin/v1.json +1898 -0
  441. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/consents/v1.json +622 -0
  442. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-agents/v1.json +192 -0
  443. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-consents/v1.json +913 -0
  444. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-context/v1.json +630 -0
  445. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/seo/v1.json +223 -0
  446. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/shopper-seo/v1.json +423 -0
  447. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/sites/v1.json +1088 -0
  448. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/shopper-stores/v1.json +798 -0
  449. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/store-redirect-mappings/v1.json +607 -0
  450. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/stores/v1.json +1418 -0
  451. package/package.json +24 -3
  452. package/specs/dx-scripts-v1.yaml +409 -0
  453. package/specs/merchant-roles-v1.yaml +1085 -0
  454. package/specs/merchant-users-v1.yaml +398 -0
  455. package/specs/mrt-api-v1.json +105 -0
  456. package/specs/operations-jobs-v1.yaml +793 -0
  457. package/specs/product-catalogs-v1.yaml +111 -0
  458. package/specs/site-sites-v1.yaml +667 -0
  459. package/specs/slas-shopper-v1.yaml +83 -0
  460. package/specs/storefront-deployments-v1.yaml +630 -0
@@ -0,0 +1,180 @@
1
+ import { getApiErrorMessage } from './error-utils.js';
2
+ /** Platform release used when documenting currently-unavailable SCAPI capabilities. */
3
+ export const SCAPI_CAPABILITY_BASELINE_RELEASE = '26.8';
4
+ /** Error raised when browser-based Account Manager user auth is passed to a SCAPI Admin client. */
5
+ export class ScapiUserAuthUnsupportedError extends Error {
6
+ constructor() {
7
+ super(`SCAPI Admin APIs do not currently support browser user authentication as of B2C Commerce release ${SCAPI_CAPABILITY_BASELINE_RELEASE}. ` +
8
+ 'Use client credentials or JWT Bearer authentication, or set apiBackend to "ocapi" ' +
9
+ '(CLI: --api-backend ocapi) for now. The tooling will be updated when SCAPI support becomes available.');
10
+ this.name = 'ScapiUserAuthUnsupportedError';
11
+ }
12
+ }
13
+ /** Reject browser user-auth strategies before a SCAPI request is attempted. */
14
+ export function assertScapiAdminAuthSupported(auth) {
15
+ if ('authMethod' in auth && (auth.authMethod === 'user' || auth.authMethod === 'implicit')) {
16
+ throw new ScapiUserAuthUnsupportedError();
17
+ }
18
+ }
19
+ /**
20
+ * Returns a copy of `auth` with `additionalScopes` merged in, or the original
21
+ * `auth` if the strategy doesn't support scope merging (e.g., basic/api-key
22
+ * auth, or a stored-session strategy where scopes were fixed at acquisition).
23
+ *
24
+ * Centralized so SCAPI client factories don't have to keep extending an
25
+ * `instanceof` chain as new OAuth strategy types are added.
26
+ */
27
+ export function withScopes(auth, additionalScopes) {
28
+ assertScapiAdminAuthSupported(auth);
29
+ if (typeof auth.withAdditionalScopes === 'function') {
30
+ return auth.withAdditionalScopes(additionalScopes);
31
+ }
32
+ return auth;
33
+ }
34
+ /**
35
+ * Detects an Account Manager `invalid_scope` error.
36
+ *
37
+ * When a client's API client doesn't have the requested scope configured,
38
+ * Account Manager returns `{"error":"invalid_scope", ...}` on the token
39
+ * request. The OAuth strategy surfaces that as an Error whose message
40
+ * contains `invalid_scope`.
41
+ *
42
+ * Used by fallback wrappers to decide whether to downgrade to OCAPI.
43
+ */
44
+ export function isInvalidScopeError(error) {
45
+ return error instanceof Error && error.message.includes('invalid_scope');
46
+ }
47
+ /**
48
+ * Thrown by SCAPI backends when a requested operation cannot be expressed on
49
+ * SCAPI (e.g., toggling the `disabled` flag via the SCAPI Users PATCH, which
50
+ * the SCAPI schema does not include). The fallback wrapper recognizes this
51
+ * and falls back to OCAPI; in explicit `scapi` mode it propagates so the
52
+ * caller sees the limitation.
53
+ */
54
+ export class ScapiCapabilityUnsupportedError extends Error {
55
+ constructor(message) {
56
+ super(message);
57
+ this.name = 'ScapiCapabilityUnsupportedError';
58
+ }
59
+ }
60
+ /** Builds the canonical error for a capability absent from the current live SCAPI schemas. */
61
+ export function scapiCapabilityUnsupportedMessage(capability) {
62
+ return (`SCAPI does not currently support ${capability} as of B2C Commerce release ${SCAPI_CAPABILITY_BASELINE_RELEASE}. ` +
63
+ 'Set apiBackend to "ocapi" (CLI: --api-backend ocapi) for now. ' +
64
+ 'The tooling will be updated when SCAPI support becomes available.');
65
+ }
66
+ /**
67
+ * Prevents an OCAPI-only compatibility operation from silently contacting
68
+ * OCAPI when the caller explicitly selected SCAPI. `auto` remains eligible
69
+ * for the temporary compatibility path, while explicit OCAPI is always
70
+ * allowed.
71
+ */
72
+ export function assertOcapiCompatibilityAllowed(preference, capability) {
73
+ if (preference === 'scapi') {
74
+ throw new ScapiCapabilityUnsupportedError(scapiCapabilityUnsupportedMessage(capability));
75
+ }
76
+ }
77
+ /**
78
+ * HTTP statuses that prove SCAPI rejected a request before performing it.
79
+ *
80
+ * These are safe for the temporary `auto` compatibility mode to retry over
81
+ * OCAPI. Ambiguous responses (`429`, `5xx`) and network failures are excluded
82
+ * because a mutating request might already have reached the platform.
83
+ */
84
+ export const SAFE_SCAPI_FALLBACK_STATUSES = new Set([400, 401, 403, 404, 405, 406, 415]);
85
+ /**
86
+ * A structured SCAPI response failure. Backends must retain the response
87
+ * status so the shared fallback policy can distinguish a definite rejection
88
+ * from an ambiguous transport/server failure.
89
+ */
90
+ export class ScapiRequestError extends Error {
91
+ status;
92
+ constructor(message,
93
+ /** HTTP status returned by SCAPI. */
94
+ status, options) {
95
+ super(message, options);
96
+ this.status = status;
97
+ this.name = 'ScapiRequestError';
98
+ }
99
+ }
100
+ /** Creates a structured SCAPI error using the repository's common formatter. */
101
+ export function createScapiRequestError(error, response, fallbackMessage) {
102
+ const message = error ? getApiErrorMessage(error, response) : fallbackMessage;
103
+ return new ScapiRequestError(message || fallbackMessage, response.status, { cause: error });
104
+ }
105
+ /**
106
+ * Detects whether an error should trigger an OCAPI fallback. Currently:
107
+ * - {@link isInvalidScopeError}: AM rejected the requested scope.
108
+ * - {@link ScapiCapabilityUnsupportedError}: the SCAPI surface lacks the
109
+ * capability the caller asked for.
110
+ * - {@link ScapiRequestError}: SCAPI definitively rejected the request with
111
+ * a safe client-error status.
112
+ */
113
+ export function isFallbackTrigger(error) {
114
+ return (isInvalidScopeError(error) ||
115
+ error instanceof ScapiCapabilityUnsupportedError ||
116
+ (error instanceof ScapiRequestError && SAFE_SCAPI_FALLBACK_STATUSES.has(error.status)));
117
+ }
118
+ /**
119
+ * Message for when explicit SCAPI is requested but the instance can't reach it.
120
+ *
121
+ * Names both reasons the SCAPI client config can be unavailable — missing
122
+ * coordinates OR an auth flow that can't request scopes — because a user who
123
+ * hits this in explicit `--api-backend scapi` mode often *does* have shortCode
124
+ * and tenantId configured; the real blocker can be browser user auth, which
125
+ * SCAPI Admin APIs do not currently support, or a fixed-scope stored token.
126
+ * The old message only mentioned missing credentials, which was misleading.
127
+ */
128
+ export function scapiUnavailableMessage(domainName) {
129
+ return (`${domainName} SCAPI backend requires shortCode, tenantId, and a stateless OAuth flow ` +
130
+ `(client-credentials or JWT Bearer) that can request the required scopes. ` +
131
+ `Browser user auth (Authorization Code + PKCE or implicit) is not supported by SCAPI Admin APIs ` +
132
+ `as of B2C Commerce release ${SCAPI_CAPABILITY_BASELINE_RELEASE} and is currently OCAPI/WebDAV-only; ` +
133
+ `fixed-token stored sessions cannot request SCAPI scopes — ` +
134
+ `use client-credentials/JWT, or set --api-backend ocapi for now. ` +
135
+ `The tooling will be updated when SCAPI support becomes available.`);
136
+ }
137
+ /**
138
+ * Generic tri-state backend resolver shared by SCAPI-vs-OCAPI and SCAPI-vs-legacy
139
+ * domains — the single definition of the preference/availability precedence.
140
+ *
141
+ * - Explicit primary → primary.
142
+ * - Explicit `'scapi'` → `'scapi'`, throwing `unavailableMessage()` when the SCAPI
143
+ * config is missing (fail loud; never silently downgrade).
144
+ * - `'auto'` → `'scapi'` when config is available, otherwise the primary backend.
145
+ */
146
+ export function resolvePreferredBackend(opts) {
147
+ const { preference, primary, hasScapiConfig, unavailableMessage } = opts;
148
+ if (preference === primary)
149
+ return primary;
150
+ if (preference === 'scapi') {
151
+ if (!hasScapiConfig) {
152
+ throw new Error(unavailableMessage());
153
+ }
154
+ return 'scapi';
155
+ }
156
+ // auto
157
+ return hasScapiConfig ? 'scapi' : primary;
158
+ }
159
+ /**
160
+ * Resolves a user preference + config availability into a concrete backend choice.
161
+ *
162
+ * - Explicit `'ocapi'` always returns `'ocapi'`.
163
+ * - Explicit `'scapi'` requires SCAPI config and throws if missing.
164
+ * - `'auto'` returns `'scapi'` if SCAPI config is available, otherwise `'ocapi'`.
165
+ *
166
+ * Throws an error with the domain name in the message when explicit SCAPI is
167
+ * requested without the required configuration. The error identifies release
168
+ * 26.8 as the current platform capability baseline so it can be revised when
169
+ * SCAPI adds support.
170
+ */
171
+ export function resolveScapiOrOcapi(opts) {
172
+ const { preference, hasScapiConfig, domainName } = opts;
173
+ return resolvePreferredBackend({
174
+ preference,
175
+ primary: 'ocapi',
176
+ hasScapiConfig,
177
+ unavailableMessage: () => scapiUnavailableMessage(domainName),
178
+ });
179
+ }
180
+ //# sourceMappingURL=scapi-backend-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scapi-backend-utils.js","sourceRoot":"","sources":["../../../src/clients/scapi-backend-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Client } from 'openapi-fetch';
2
+ import type { AuthStrategy } from '../auth/types.js';
3
+ import type { paths, components } from './scapi-catalogs.generated.js';
4
+ import { type ScapiClientConfig } from './scapi-client-factory.js';
5
+ import type { ScopeCascade } from './middleware.js';
6
+ export type { paths, components };
7
+ export type ScapiCatalogsClient = Client<paths>;
8
+ export type ScapiCatalogsClientConfig = ScapiClientConfig;
9
+ export type Catalog = components['schemas']['Catalog'];
10
+ export type Catalogs = components['schemas']['Catalogs'];
11
+ export declare const SCAPI_CATALOGS_CASCADE: ScopeCascade;
12
+ export declare function createScapiCatalogsClient(config: ScapiCatalogsClientConfig, auth: AuthStrategy): ScapiCatalogsClient;
@@ -0,0 +1,104 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export interface paths {
6
+ "/organizations/{organizationId}/catalogs": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ get: operations["getCatalogs"];
14
+ put?: never;
15
+ post?: never;
16
+ delete?: never;
17
+ options?: never;
18
+ head?: never;
19
+ patch?: never;
20
+ trace?: never;
21
+ };
22
+ }
23
+ export type webhooks = Record<string, never>;
24
+ export interface components {
25
+ schemas: {
26
+ Catalog: {
27
+ id: string;
28
+ name?: {
29
+ [key: string]: string;
30
+ };
31
+ description?: {
32
+ [key: string]: string;
33
+ };
34
+ online?: boolean;
35
+ } & {
36
+ [key: string]: unknown;
37
+ };
38
+ Catalogs: {
39
+ data: components["schemas"]["Catalog"][];
40
+ limit: number;
41
+ offset: number;
42
+ total: number;
43
+ };
44
+ ErrorResponse: {
45
+ title: string;
46
+ type: string;
47
+ detail: string;
48
+ instance?: string;
49
+ } & {
50
+ [key: string]: unknown;
51
+ };
52
+ };
53
+ responses: never;
54
+ parameters: never;
55
+ requestBodies: never;
56
+ headers: never;
57
+ pathItems: never;
58
+ }
59
+ export type $defs = Record<string, never>;
60
+ export interface operations {
61
+ getCatalogs: {
62
+ parameters: {
63
+ query?: {
64
+ limit?: number;
65
+ offset?: number;
66
+ };
67
+ header?: never;
68
+ path: {
69
+ organizationId: string;
70
+ };
71
+ cookie?: never;
72
+ };
73
+ requestBody?: never;
74
+ responses: {
75
+ /** @description Catalogs retrieved successfully. */
76
+ 200: {
77
+ headers: {
78
+ [name: string]: unknown;
79
+ };
80
+ content: {
81
+ "application/json": components["schemas"]["Catalogs"];
82
+ };
83
+ };
84
+ /** @description Bad Request */
85
+ 400: {
86
+ headers: {
87
+ [name: string]: unknown;
88
+ };
89
+ content: {
90
+ "application/problem+json": components["schemas"]["ErrorResponse"];
91
+ };
92
+ };
93
+ /** @description Unauthorized */
94
+ 401: {
95
+ headers: {
96
+ [name: string]: unknown;
97
+ };
98
+ content: {
99
+ "application/problem+json": components["schemas"]["ErrorResponse"];
100
+ };
101
+ };
102
+ };
103
+ };
104
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=scapi-catalogs.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scapi-catalogs.generated.js","sourceRoot":"","sources":["../../../src/clients/scapi-catalogs.generated.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,14 @@
1
+ import { buildScapiClient } from './scapi-client-factory.js';
2
+ export const SCAPI_CATALOGS_CASCADE = {
3
+ read: [['sfcc.catalogs.rw'], ['sfcc.catalogs']],
4
+ write: [['sfcc.catalogs.rw']],
5
+ };
6
+ export function createScapiCatalogsClient(config, auth) {
7
+ return buildScapiClient({
8
+ pathSegment: 'product/catalogs/v1',
9
+ domainKey: 'scapi-catalogs',
10
+ scopeCascade: SCAPI_CATALOGS_CASCADE,
11
+ logPrefix: 'SCAPI-CATALOGS',
12
+ }, config, auth);
13
+ }
14
+ //# sourceMappingURL=scapi-catalogs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scapi-catalogs.js","sourceRoot":"","sources":["../../../src/clients/scapi-catalogs.ts"],"names":[],"mappings":"AAQA,OAAO,EAAC,gBAAgB,EAAyB,MAAM,2BAA2B,CAAC;AASnF,MAAM,CAAC,MAAM,sBAAsB,GAAiB;IAClD,IAAI,EAAE,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IAC/C,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC;CAC9B,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,MAAiC,EAAE,IAAkB;IAC7F,OAAO,gBAAgB,CACrB;QACE,WAAW,EAAE,qBAAqB;QAClC,SAAS,EAAE,gBAAgB;QAC3B,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,gBAAgB;KAC5B,EACD,MAAM,EACN,IAAI,CACL,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Generic builder for SCAPI Admin API clients.
3
+ *
4
+ * The four new SCAPI clients (jobs, scripts, merchant-users, merchant-roles)
5
+ * each had ~20 lines of nearly-identical setup: build the openapi-fetch
6
+ * client with a domain URL, install auth middleware with merged scopes,
7
+ * install plugin middleware from the registry, then rate-limit and logging.
8
+ *
9
+ * This module collapses that setup into one helper.
10
+ *
11
+ * @module clients/scapi-client-factory
12
+ */
13
+ import { type Client } from 'openapi-fetch';
14
+ import type { AuthStrategy } from '../auth/types.js';
15
+ import { type ScopeCascade } from './middleware.js';
16
+ import { type HttpClientType, type MiddlewareRegistry } from './middleware-registry.js';
17
+ export interface BuildScapiClientOptions {
18
+ /**
19
+ * URL path segment after the SCAPI host root, e.g. `'operation/jobs/v1'`.
20
+ */
21
+ pathSegment: string;
22
+ /**
23
+ * Middleware registry key, e.g. `'scapi-jobs'`. Plugin middleware
24
+ * registered under this key gets installed on the client.
25
+ */
26
+ domainKey: HttpClientType;
27
+ /**
28
+ * Per-operation scope cascade. When supplied, operations attach a
29
+ * `x-b2c-scope-mode` header (`'read'` or `'write'`) and the auth
30
+ * middleware walks the matching cascade until AM accepts one. Mutually
31
+ * exclusive with {@link defaultScopes}; new domains should prefer this.
32
+ */
33
+ scopeCascade?: ScopeCascade;
34
+ /**
35
+ * Legacy: a single scope set requested for every operation. Used by
36
+ * domains that still rely on `ScopeTierManager` to switch clients
37
+ * between rw and ro. Mutually exclusive with {@link scopeCascade}.
38
+ *
39
+ * @deprecated Use {@link scopeCascade} for new domains.
40
+ */
41
+ defaultScopes?: string[];
42
+ /**
43
+ * Logging/rate-limit prefix, e.g. `'SCAPI-JOBS'`. Used in log lines.
44
+ */
45
+ logPrefix: string;
46
+ }
47
+ export interface ScapiClientConfig {
48
+ shortCode: string;
49
+ tenantId: string;
50
+ /**
51
+ * Override the requested scopes. When omitted, defaults to
52
+ * `[...defaultScopes, buildTenantScope(tenantId)]`.
53
+ */
54
+ scopes?: string[];
55
+ /** Override the global middleware registry (mainly for tests). */
56
+ middlewareRegistry?: MiddlewareRegistry;
57
+ }
58
+ /**
59
+ * Builds a typed openapi-fetch client for a SCAPI Admin API.
60
+ *
61
+ * @param options - Domain-specific URL/key/scopes/log-prefix
62
+ * @param config - Caller-supplied shortCode, tenantId, optional overrides
63
+ * @param auth - Auth strategy (scopes are merged via {@link withScopes})
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * export function createScapiJobsClient(config: ScapiClientConfig, auth: AuthStrategy): ScapiJobsClient {
68
+ * return buildScapiClient<paths>(
69
+ * {
70
+ * pathSegment: 'operation/jobs/v1',
71
+ * domainKey: 'scapi-jobs',
72
+ * defaultScopes: SCAPI_JOBS_RW_SCOPES,
73
+ * logPrefix: 'SCAPI-JOBS',
74
+ * },
75
+ * config,
76
+ * auth,
77
+ * );
78
+ * }
79
+ * ```
80
+ */
81
+ export declare function buildScapiClient<P extends Record<string, any>>(options: BuildScapiClientOptions, config: ScapiClientConfig, auth: AuthStrategy): Client<P>;
@@ -0,0 +1,84 @@
1
+ /*
2
+ * Copyright (c) 2025, Salesforce, Inc.
3
+ * SPDX-License-Identifier: Apache-2
4
+ * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
+ */
6
+ /**
7
+ * Generic builder for SCAPI Admin API clients.
8
+ *
9
+ * The four new SCAPI clients (jobs, scripts, merchant-users, merchant-roles)
10
+ * each had ~20 lines of nearly-identical setup: build the openapi-fetch
11
+ * client with a domain URL, install auth middleware with merged scopes,
12
+ * install plugin middleware from the registry, then rate-limit and logging.
13
+ *
14
+ * This module collapses that setup into one helper.
15
+ *
16
+ * @module clients/scapi-client-factory
17
+ */
18
+ import createClient, {} from 'openapi-fetch';
19
+ import { createAuthMiddleware, createLoggingMiddleware, createRateLimitMiddleware, createScapiAuthMiddleware, } from './middleware.js';
20
+ import { globalMiddlewareRegistry } from './middleware-registry.js';
21
+ import { buildTenantScope } from './custom-apis.js';
22
+ import { withScopes } from './scapi-backend-utils.js';
23
+ /**
24
+ * Builds a typed openapi-fetch client for a SCAPI Admin API.
25
+ *
26
+ * @param options - Domain-specific URL/key/scopes/log-prefix
27
+ * @param config - Caller-supplied shortCode, tenantId, optional overrides
28
+ * @param auth - Auth strategy (scopes are merged via {@link withScopes})
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * export function createScapiJobsClient(config: ScapiClientConfig, auth: AuthStrategy): ScapiJobsClient {
33
+ * return buildScapiClient<paths>(
34
+ * {
35
+ * pathSegment: 'operation/jobs/v1',
36
+ * domainKey: 'scapi-jobs',
37
+ * defaultScopes: SCAPI_JOBS_RW_SCOPES,
38
+ * logPrefix: 'SCAPI-JOBS',
39
+ * },
40
+ * config,
41
+ * auth,
42
+ * );
43
+ * }
44
+ * ```
45
+ */
46
+ // `paths` types from openapi-typescript are `interface paths { ... }` shapes
47
+ // which don't satisfy `Record<string, unknown>`. The unconstrained generic
48
+ // is fine since openapi-fetch's `Client<P>` constraint handles the shape check.
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ export function buildScapiClient(options, config, auth) {
51
+ const registry = config.middlewareRegistry ?? globalMiddlewareRegistry;
52
+ if (options.scopeCascade && options.defaultScopes) {
53
+ throw new Error(`[buildScapiClient] ${options.domainKey}: scopeCascade and defaultScopes are mutually exclusive.`);
54
+ }
55
+ if (!options.scopeCascade && !options.defaultScopes) {
56
+ throw new Error(`[buildScapiClient] ${options.domainKey}: must provide either scopeCascade or defaultScopes.`);
57
+ }
58
+ const client = createClient({
59
+ baseUrl: `https://${config.shortCode}.api.commercecloud.salesforce.com/${options.pathSegment}`,
60
+ });
61
+ if (options.scopeCascade) {
62
+ // Cascade-aware path: bake the tenant scope into the auth strategy as a
63
+ // "base scope" applied to every cascade attempt; the cascade itself only
64
+ // varies the domain (rw/ro) scope per operation.
65
+ const tenantBase = config.scopes ?? [buildTenantScope(config.tenantId)];
66
+ const scopedAuth = withScopes(auth, tenantBase);
67
+ client.use(createScapiAuthMiddleware(scopedAuth, options.scopeCascade));
68
+ }
69
+ else {
70
+ // Legacy path: single static scope set requested for every operation.
71
+ // Used by domains still on ScopeTierManager (scripts/users/roles until
72
+ // they migrate to scopeCascade).
73
+ const requiredScopes = config.scopes ?? [...options.defaultScopes, buildTenantScope(config.tenantId)];
74
+ const scopedAuth = withScopes(auth, requiredScopes);
75
+ client.use(createAuthMiddleware(scopedAuth));
76
+ }
77
+ for (const middleware of registry.getMiddleware(options.domainKey)) {
78
+ client.use(middleware);
79
+ }
80
+ client.use(createRateLimitMiddleware({ prefix: options.logPrefix }));
81
+ client.use(createLoggingMiddleware(options.logPrefix));
82
+ return client;
83
+ }
84
+ //# sourceMappingURL=scapi-client-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scapi-client-factory.js","sourceRoot":"","sources":["../../../src/clients/scapi-client-factory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;GAWG;AACH,OAAO,YAAY,EAAE,EAAa,MAAM,eAAe,CAAC;AAExD,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,GAE1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,wBAAwB,EAA+C,MAAM,0BAA0B,CAAC;AAChH,OAAO,EAAC,gBAAgB,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAC,UAAU,EAAC,MAAM,0BAA0B,CAAC;AA6CpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAChF,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAC9B,OAAgC,EAChC,MAAyB,EACzB,IAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,IAAI,wBAAwB,CAAC;IAEvE,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,0DAA0D,CAAC,CAAC;IACrH,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,SAAS,sDAAsD,CAAC,CAAC;IACjH,CAAC;IAED,MAAM,MAAM,GAAG,YAAY,CAAI;QAC7B,OAAO,EAAE,WAAW,MAAM,CAAC,SAAS,qCAAqC,OAAO,CAAC,WAAW,EAAE;KAC/F,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,wEAAwE;QACxE,yEAAyE;QACzE,iDAAiD;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QACN,sEAAsE;QACtE,uEAAuE;QACvE,iCAAiC;QACjC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,aAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvG,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAC,MAAM,EAAE,OAAO,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,GAAG,CAAC,uBAAuB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { type BackendBase } from './scapi-backend-utils.js';
2
+ /**
3
+ * Creates a fallback wrapper over `scapi` and `ocapi` backends.
4
+ *
5
+ * The returned object presents the same interface as `T`. Method calls are
6
+ * intercepted: the first call tries SCAPI; on a safe fallback trigger it falls back
7
+ * to OCAPI. The choice is cached for the wrapper's lifetime.
8
+ *
9
+ * **Contract:**
10
+ * - Both `scapi` and `ocapi` must implement `T`. TypeScript enforces this
11
+ * at the call site since both are typed as `T`.
12
+ * - Only methods of `T` are routed through the fallback logic. The `name`
13
+ * getter is special-cased to reflect the resolved backend.
14
+ * - **Non-method properties** are returned from the SCAPI target only and
15
+ * are not switched on fallback. By convention, backends should be method
16
+ * bags — any state beyond `name` should be encapsulated, not exposed.
17
+ * - **Concurrency:** if two calls race before resolution, both may attempt
18
+ * SCAPI. This is benign for read operations (idempotent retries) and
19
+ * acceptable for writes (both either succeed or fail with the same
20
+ * error). Each Proxy instance has its own state, so this concerns only
21
+ * shared use of a single wrapper.
22
+ *
23
+ * @param scapi - Primary (SCAPI) backend implementation
24
+ * @param ocapi - Fallback (OCAPI) backend implementation
25
+ * @param domainName - Used in fallback log messages, e.g. `'jobs'`
26
+ * @returns A Proxy over `scapi` whose methods route through fallback logic
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const backend = createFallbackBackend<JobsBackend>(scapiJobs, ocapiJobs, 'jobs');
31
+ * await backend.executeJob('my-job'); // tries SCAPI, may fall back to OCAPI
32
+ * ```
33
+ */
34
+ export declare function createFallbackBackend<T extends BackendBase>(scapi: T, ocapi: T, domainName: string): T;