@salesforce/b2c-tooling-sdk 1.24.2 → 2.1.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 (482) 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 +83 -119
  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 +10 -1
  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 +154 -9
  55. package/dist/esm/cli/mrt-command.js +299 -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 +2 -0
  61. package/dist/esm/cli/webdav-command.js +1 -0
  62. package/dist/esm/cli/webdav-command.js.map +1 -1
  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 +30 -3
  79. package/dist/esm/clients/index.js +25 -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 +57 -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/storefront-environments.d.ts +56 -0
  160. package/dist/esm/clients/storefront-environments.generated.d.ts +208 -0
  161. package/dist/esm/clients/storefront-environments.generated.js +6 -0
  162. package/dist/esm/clients/storefront-environments.generated.js.map +1 -0
  163. package/dist/esm/clients/storefront-environments.js +24 -0
  164. package/dist/esm/clients/storefront-environments.js.map +1 -0
  165. package/dist/esm/clients/webdav.js +4 -1
  166. package/dist/esm/clients/webdav.js.map +1 -1
  167. package/dist/esm/compat/dispatcher.d.ts +49 -0
  168. package/dist/esm/compat/dispatcher.js +124 -0
  169. package/dist/esm/compat/dispatcher.js.map +1 -0
  170. package/dist/esm/compat/index.d.ts +10 -0
  171. package/dist/esm/compat/index.js +15 -0
  172. package/dist/esm/compat/index.js.map +1 -0
  173. package/dist/esm/compat/jobs-backend.d.ts +31 -0
  174. package/dist/esm/compat/jobs-backend.js +76 -0
  175. package/dist/esm/compat/jobs-backend.js.map +1 -0
  176. package/dist/esm/config/dw-json.d.ts +4 -0
  177. package/dist/esm/config/dw-json.js.map +1 -1
  178. package/dist/esm/config/index.d.ts +1 -1
  179. package/dist/esm/config/index.js.map +1 -1
  180. package/dist/esm/config/mapping.d.ts +2 -5
  181. package/dist/esm/config/mapping.js +25 -1
  182. package/dist/esm/config/mapping.js.map +1 -1
  183. package/dist/esm/config/resolved-config.d.ts +2 -2
  184. package/dist/esm/config/resolved-config.js.map +1 -1
  185. package/dist/esm/config/resolver.js +12 -0
  186. package/dist/esm/config/resolver.js.map +1 -1
  187. package/dist/esm/config/sources/env-source.d.ts +10 -1
  188. package/dist/esm/config/sources/env-source.js +46 -1
  189. package/dist/esm/config/sources/env-source.js.map +1 -1
  190. package/dist/esm/config/types.d.ts +22 -3
  191. package/dist/esm/docs/search.js +2 -25
  192. package/dist/esm/docs/search.js.map +1 -1
  193. package/dist/esm/guidance/catalog.d.ts +37 -0
  194. package/dist/esm/guidance/catalog.js +282 -0
  195. package/dist/esm/guidance/catalog.js.map +1 -0
  196. package/dist/esm/guidance/index.d.ts +8 -0
  197. package/dist/esm/guidance/index.js +14 -0
  198. package/dist/esm/guidance/index.js.map +1 -0
  199. package/dist/esm/guidance/markdown.d.ts +10 -0
  200. package/dist/esm/guidance/markdown.js +52 -0
  201. package/dist/esm/guidance/markdown.js.map +1 -0
  202. package/dist/esm/guidance/types.d.ts +96 -0
  203. package/dist/esm/guidance/types.js +17 -0
  204. package/dist/esm/guidance/types.js.map +1 -0
  205. package/dist/esm/index.d.ts +14 -5
  206. package/dist/esm/index.js +14 -2
  207. package/dist/esm/index.js.map +1 -1
  208. package/dist/esm/instance/index.d.ts +96 -2
  209. package/dist/esm/instance/index.js +98 -5
  210. package/dist/esm/instance/index.js.map +1 -1
  211. package/dist/esm/operations/bm-roles/backend.d.ts +4 -0
  212. package/dist/esm/operations/bm-roles/backend.js +11 -0
  213. package/dist/esm/operations/bm-roles/backend.js.map +1 -0
  214. package/dist/esm/operations/bm-roles/index.d.ts +6 -0
  215. package/dist/esm/operations/bm-roles/index.js +4 -0
  216. package/dist/esm/operations/bm-roles/index.js.map +1 -1
  217. package/dist/esm/operations/bm-roles/ocapi-backend.d.ts +17 -0
  218. package/dist/esm/operations/bm-roles/ocapi-backend.js +151 -0
  219. package/dist/esm/operations/bm-roles/ocapi-backend.js.map +1 -0
  220. package/dist/esm/operations/bm-roles/roles.js +13 -17
  221. package/dist/esm/operations/bm-roles/roles.js.map +1 -1
  222. package/dist/esm/operations/bm-roles/scapi-backend.d.ts +27 -0
  223. package/dist/esm/operations/bm-roles/scapi-backend.js +138 -0
  224. package/dist/esm/operations/bm-roles/scapi-backend.js.map +1 -0
  225. package/dist/esm/operations/bm-roles/types.d.ts +49 -0
  226. package/dist/esm/operations/bm-roles/types.js +2 -0
  227. package/dist/esm/operations/bm-roles/types.js.map +1 -0
  228. package/dist/esm/operations/bm-users/backend.d.ts +4 -0
  229. package/dist/esm/operations/bm-users/backend.js +11 -0
  230. package/dist/esm/operations/bm-users/backend.js.map +1 -0
  231. package/dist/esm/operations/bm-users/index.d.ts +11 -3
  232. package/dist/esm/operations/bm-users/index.js +9 -3
  233. package/dist/esm/operations/bm-users/index.js.map +1 -1
  234. package/dist/esm/operations/bm-users/ocapi-backend.d.ts +13 -0
  235. package/dist/esm/operations/bm-users/ocapi-backend.js +92 -0
  236. package/dist/esm/operations/bm-users/ocapi-backend.js.map +1 -0
  237. package/dist/esm/operations/bm-users/scapi-backend.d.ts +23 -0
  238. package/dist/esm/operations/bm-users/scapi-backend.js +199 -0
  239. package/dist/esm/operations/bm-users/scapi-backend.js.map +1 -0
  240. package/dist/esm/operations/bm-users/types.d.ts +99 -0
  241. package/dist/esm/operations/bm-users/types.js +2 -0
  242. package/dist/esm/operations/bm-users/types.js.map +1 -0
  243. package/dist/esm/operations/bm-users/users.d.ts +4 -3
  244. package/dist/esm/operations/bm-users/users.js +23 -19
  245. package/dist/esm/operations/bm-users/users.js.map +1 -1
  246. package/dist/esm/operations/cap/install.js +23 -45
  247. package/dist/esm/operations/cap/install.js.map +1 -1
  248. package/dist/esm/operations/cap/list.js +4 -8
  249. package/dist/esm/operations/cap/list.js.map +1 -1
  250. package/dist/esm/operations/cap/uninstall.js +17 -37
  251. package/dist/esm/operations/cap/uninstall.js.map +1 -1
  252. package/dist/esm/operations/catalogs/catalogs-backend.d.ts +4 -0
  253. package/dist/esm/operations/catalogs/catalogs-backend.js +16 -0
  254. package/dist/esm/operations/catalogs/catalogs-backend.js.map +1 -0
  255. package/dist/esm/operations/catalogs/catalogs-types.d.ts +14 -0
  256. package/dist/esm/operations/catalogs/catalogs-types.js +2 -0
  257. package/dist/esm/operations/catalogs/catalogs-types.js.map +1 -0
  258. package/dist/esm/operations/catalogs/index.d.ts +7 -0
  259. package/dist/esm/operations/catalogs/index.js +10 -0
  260. package/dist/esm/operations/catalogs/index.js.map +1 -0
  261. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.d.ts +8 -0
  262. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js +36 -0
  263. package/dist/esm/operations/catalogs/ocapi-catalogs-backend.js.map +1 -0
  264. package/dist/esm/operations/catalogs/scapi-catalogs-backend.d.ts +15 -0
  265. package/dist/esm/operations/catalogs/scapi-catalogs-backend.js +42 -0
  266. package/dist/esm/operations/catalogs/scapi-catalogs-backend.js.map +1 -0
  267. package/dist/esm/operations/cip/index.js +10 -2
  268. package/dist/esm/operations/cip/index.js.map +1 -1
  269. package/dist/esm/operations/cip/reports.js +19 -3
  270. package/dist/esm/operations/cip/reports.js.map +1 -1
  271. package/dist/esm/operations/cip/types.d.ts +8 -4
  272. package/dist/esm/operations/code/deploy.d.ts +3 -0
  273. package/dist/esm/operations/code/deploy.js +9 -3
  274. package/dist/esm/operations/code/deploy.js.map +1 -1
  275. package/dist/esm/operations/code/download.d.ts +3 -0
  276. package/dist/esm/operations/code/download.js +5 -5
  277. package/dist/esm/operations/code/download.js.map +1 -1
  278. package/dist/esm/operations/code/index.d.ts +7 -1
  279. package/dist/esm/operations/code/index.js +5 -1
  280. package/dist/esm/operations/code/index.js.map +1 -1
  281. package/dist/esm/operations/code/ocapi-scripts-backend.d.ts +12 -0
  282. package/dist/esm/operations/code/ocapi-scripts-backend.js +40 -0
  283. package/dist/esm/operations/code/ocapi-scripts-backend.js.map +1 -0
  284. package/dist/esm/operations/code/scapi-scripts-backend.d.ts +22 -0
  285. package/dist/esm/operations/code/scapi-scripts-backend.js +94 -0
  286. package/dist/esm/operations/code/scapi-scripts-backend.js.map +1 -0
  287. package/dist/esm/operations/code/scripts-backend.d.ts +17 -0
  288. package/dist/esm/operations/code/scripts-backend.js +40 -0
  289. package/dist/esm/operations/code/scripts-backend.js.map +1 -0
  290. package/dist/esm/operations/code/scripts-types.d.ts +43 -0
  291. package/dist/esm/operations/code/scripts-types.js +2 -0
  292. package/dist/esm/operations/code/scripts-types.js.map +1 -0
  293. package/dist/esm/operations/code/upload-files.d.ts +6 -0
  294. package/dist/esm/operations/code/upload-files.js +58 -7
  295. package/dist/esm/operations/code/upload-files.js.map +1 -1
  296. package/dist/esm/operations/code/versions.d.ts +0 -20
  297. package/dist/esm/operations/code/versions.js +16 -51
  298. package/dist/esm/operations/code/versions.js.map +1 -1
  299. package/dist/esm/operations/code/watch.d.ts +3 -0
  300. package/dist/esm/operations/code/watch.js +3 -2
  301. package/dist/esm/operations/code/watch.js.map +1 -1
  302. package/dist/esm/operations/jobs/discover.d.ts +1 -1
  303. package/dist/esm/operations/jobs/discover.js +51 -21
  304. package/dist/esm/operations/jobs/discover.js.map +1 -1
  305. package/dist/esm/operations/jobs/index.d.ts +14 -57
  306. package/dist/esm/operations/jobs/index.js +15 -59
  307. package/dist/esm/operations/jobs/index.js.map +1 -1
  308. package/dist/esm/operations/jobs/ocapi-mapping.d.ts +34 -0
  309. package/dist/esm/operations/jobs/ocapi-mapping.js +100 -0
  310. package/dist/esm/operations/jobs/ocapi-mapping.js.map +1 -0
  311. package/dist/esm/operations/jobs/run-system-job.d.ts +81 -0
  312. package/dist/esm/operations/jobs/run-system-job.js +137 -0
  313. package/dist/esm/operations/jobs/run-system-job.js.map +1 -0
  314. package/dist/esm/operations/jobs/run.js +16 -4
  315. package/dist/esm/operations/jobs/run.js.map +1 -1
  316. package/dist/esm/operations/jobs/scapi-ops.d.ts +61 -0
  317. package/dist/esm/operations/jobs/scapi-ops.js +214 -0
  318. package/dist/esm/operations/jobs/scapi-ops.js.map +1 -0
  319. package/dist/esm/operations/jobs/site-archive.d.ts +7 -0
  320. package/dist/esm/operations/jobs/site-archive.js +28 -66
  321. package/dist/esm/operations/jobs/site-archive.js.map +1 -1
  322. package/dist/esm/operations/jobs/types.d.ts +46 -0
  323. package/dist/esm/operations/jobs/types.js +2 -0
  324. package/dist/esm/operations/jobs/types.js.map +1 -0
  325. package/dist/esm/operations/jobs/wait-canonical.d.ts +28 -0
  326. package/dist/esm/operations/jobs/wait-canonical.js +48 -0
  327. package/dist/esm/operations/jobs/wait-canonical.js.map +1 -0
  328. package/dist/esm/operations/mrt/bundle.d.ts +164 -2
  329. package/dist/esm/operations/mrt/bundle.js +315 -9
  330. package/dist/esm/operations/mrt/bundle.js.map +1 -1
  331. package/dist/esm/operations/mrt/deployment.d.ts +248 -0
  332. package/dist/esm/operations/mrt/deployment.js +252 -0
  333. package/dist/esm/operations/mrt/deployment.js.map +1 -1
  334. package/dist/esm/operations/mrt/env-var.d.ts +135 -0
  335. package/dist/esm/operations/mrt/env-var.js +203 -0
  336. package/dist/esm/operations/mrt/env-var.js.map +1 -1
  337. package/dist/esm/operations/mrt/index.d.ts +10 -8
  338. package/dist/esm/operations/mrt/index.js +6 -4
  339. package/dist/esm/operations/mrt/index.js.map +1 -1
  340. package/dist/esm/operations/mrt/mrt-backend.d.ts +117 -0
  341. package/dist/esm/operations/mrt/mrt-backend.js +84 -0
  342. package/dist/esm/operations/mrt/mrt-backend.js.map +1 -0
  343. package/dist/esm/operations/mrt/push.d.ts +285 -1
  344. package/dist/esm/operations/mrt/push.js +382 -1
  345. package/dist/esm/operations/mrt/push.js.map +1 -1
  346. package/dist/esm/operations/sites/cartridges.d.ts +10 -8
  347. package/dist/esm/operations/sites/cartridges.js +35 -67
  348. package/dist/esm/operations/sites/cartridges.js.map +1 -1
  349. package/dist/esm/operations/sites/index.d.ts +10 -6
  350. package/dist/esm/operations/sites/index.js +9 -6
  351. package/dist/esm/operations/sites/index.js.map +1 -1
  352. package/dist/esm/operations/sites/ocapi-sites-backend.d.ts +20 -0
  353. package/dist/esm/operations/sites/ocapi-sites-backend.js +98 -0
  354. package/dist/esm/operations/sites/ocapi-sites-backend.js.map +1 -0
  355. package/dist/esm/operations/sites/scapi-sites-backend.d.ts +33 -0
  356. package/dist/esm/operations/sites/scapi-sites-backend.js +166 -0
  357. package/dist/esm/operations/sites/scapi-sites-backend.js.map +1 -0
  358. package/dist/esm/operations/sites/sites-backend.d.ts +9 -0
  359. package/dist/esm/operations/sites/sites-backend.js +16 -0
  360. package/dist/esm/operations/sites/sites-backend.js.map +1 -0
  361. package/dist/esm/operations/sites/sites-scopes.d.ts +2 -0
  362. package/dist/esm/operations/sites/sites-scopes.js +16 -0
  363. package/dist/esm/operations/sites/sites-scopes.js.map +1 -0
  364. package/dist/esm/operations/sites/sites-types.d.ts +50 -0
  365. package/dist/esm/operations/sites/sites-types.js +2 -0
  366. package/dist/esm/operations/sites/sites-types.js.map +1 -0
  367. package/dist/esm/safety/safety-guard.d.ts +1 -0
  368. package/dist/esm/safety/safety-guard.js +2 -1
  369. package/dist/esm/safety/safety-guard.js.map +1 -1
  370. package/dist/esm/safety/safety-middleware.d.ts +7 -3
  371. package/dist/esm/safety/safety-middleware.js +13 -9
  372. package/dist/esm/safety/safety-middleware.js.map +1 -1
  373. package/dist/esm/safety/types.d.ts +2 -2
  374. package/dist/esm/scaffold/sources.js +6 -9
  375. package/dist/esm/scaffold/sources.js.map +1 -1
  376. package/dist/esm/scapi/auth-primitives.d.ts +3 -0
  377. package/dist/esm/scapi/auth-primitives.js +104 -0
  378. package/dist/esm/scapi/auth-primitives.js.map +1 -0
  379. package/dist/esm/scapi/authentication.d.ts +30 -0
  380. package/dist/esm/scapi/authentication.js +136 -0
  381. package/dist/esm/scapi/authentication.js.map +1 -0
  382. package/dist/esm/scapi/catalog.d.ts +29 -0
  383. package/dist/esm/scapi/catalog.js +81 -0
  384. package/dist/esm/scapi/catalog.js.map +1 -0
  385. package/dist/esm/scapi/index.d.ts +12 -0
  386. package/dist/esm/scapi/index.js +13 -0
  387. package/dist/esm/scapi/index.js.map +1 -0
  388. package/dist/esm/scapi/request.d.ts +28 -0
  389. package/dist/esm/scapi/request.js +273 -0
  390. package/dist/esm/scapi/request.js.map +1 -0
  391. package/dist/esm/scapi/runtime.d.ts +27 -0
  392. package/dist/esm/scapi/runtime.js +161 -0
  393. package/dist/esm/scapi/runtime.js.map +1 -0
  394. package/dist/esm/scapi/snippets.d.ts +22 -0
  395. package/dist/esm/scapi/snippets.js +140 -0
  396. package/dist/esm/scapi/snippets.js.map +1 -0
  397. package/dist/esm/scapi/worker-source.d.ts +2 -0
  398. package/dist/esm/scapi/worker-source.js +101 -0
  399. package/dist/esm/scapi/worker-source.js.map +1 -0
  400. package/dist/esm/search/ranking.d.ts +12 -0
  401. package/dist/esm/search/ranking.js +28 -0
  402. package/dist/esm/search/ranking.js.map +1 -0
  403. package/dist/esm/skills/sources.d.ts +2 -2
  404. package/dist/esm/skills/sources.js +18 -2
  405. package/dist/esm/skills/sources.js.map +1 -1
  406. package/dist/esm/skills/types.d.ts +1 -1
  407. package/dist/esm/slas/token.js +33 -94
  408. package/dist/esm/slas/token.js.map +1 -1
  409. package/dist/esm/slas/types.d.ts +5 -0
  410. package/dist/esm/test-utils/config-isolation.js +2 -2
  411. package/dist/esm/test-utils/config-isolation.js.map +1 -1
  412. package/node_modules/@salesforce/b2c-api-schemas/README.md +23 -0
  413. package/node_modules/@salesforce/b2c-api-schemas/manifest.json +576 -0
  414. package/node_modules/@salesforce/b2c-api-schemas/package.json +15 -0
  415. package/node_modules/@salesforce/b2c-api-schemas/scapi/cdn/zones/v1.json +11490 -0
  416. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/orders/v1.json +3589 -0
  417. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v1.json +6544 -0
  418. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-baskets/v2.json +7148 -0
  419. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-orders/v1.json +4411 -0
  420. package/node_modules/@salesforce/b2c-api-schemas/scapi/checkout/shopper-payments/v1.json +643 -0
  421. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/cors/v1.json +295 -0
  422. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/preferences/v1.json +2036 -0
  423. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/shopper-configurations/v1.json +327 -0
  424. package/node_modules/@salesforce/b2c-api-schemas/scapi/configuration/timeouts/v1.json +234 -0
  425. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/custom-objects/v1.json +1542 -0
  426. package/node_modules/@salesforce/b2c-api-schemas/scapi/custom-object/shopper-custom-objects/v1.json +405 -0
  427. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/customers/v1.json +2531 -0
  428. package/node_modules/@salesforce/b2c-api-schemas/scapi/customer/shopper-customers/v1.json +7944 -0
  429. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/custom-apis/v1.json +292 -0
  430. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/object-definitions/v1.json +2537 -0
  431. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scapi-schemas/v1.json +517 -0
  432. package/node_modules/@salesforce/b2c-api-schemas/scapi/dx/scripts/v1.json +589 -0
  433. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/experiences/v1.json +3600 -0
  434. package/node_modules/@salesforce/b2c-api-schemas/scapi/experience/shopper-experience/v1.json +2319 -0
  435. package/node_modules/@salesforce/b2c-api-schemas/scapi/intelligence/analytics/v1.json +658 -0
  436. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/availability/v1.json +2649 -0
  437. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/impex/v1.json +6615 -0
  438. package/node_modules/@salesforce/b2c-api-schemas/scapi/inventory/reservation/v1.json +2103 -0
  439. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/roles/v1.json +1760 -0
  440. package/node_modules/@salesforce/b2c-api-schemas/scapi/merchant/users/v1.json +640 -0
  441. package/node_modules/@salesforce/b2c-api-schemas/scapi/observability/metrics/v1.json +1263 -0
  442. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/jobs/v1.json +1259 -0
  443. package/node_modules/@salesforce/b2c-api-schemas/scapi/operation/replications/v1.json +760 -0
  444. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/assignments/v1.json +1047 -0
  445. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/campaigns/v1.json +1929 -0
  446. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/coupons/v1.json +1542 -0
  447. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/gift-certificates/v1.json +1093 -0
  448. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/promotions/v1.json +1324 -0
  449. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-gift-certificates/v1.json +325 -0
  450. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/shopper-promotions/v1.json +631 -0
  451. package/node_modules/@salesforce/b2c-api-schemas/scapi/pricing/source-code-groups/v1.json +1036 -0
  452. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/catalogs/v1.json +5175 -0
  453. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/inventory-lists/v1.json +866 -0
  454. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/price-books/v1.json +747 -0
  455. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/products/v1.json +5076 -0
  456. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-availability/v1.json +509 -0
  457. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-delivery-estimates/v1.json +517 -0
  458. package/node_modules/@salesforce/b2c-api-schemas/scapi/product/shopper-products/v1.json +2961 -0
  459. package/node_modules/@salesforce/b2c-api-schemas/scapi/search/shopper-search/v1.json +1889 -0
  460. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth/v1.json +7014 -0
  461. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/auth-admin/v1.json +1898 -0
  462. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/consents/v1.json +622 -0
  463. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-agents/v1.json +192 -0
  464. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-consents/v1.json +913 -0
  465. package/node_modules/@salesforce/b2c-api-schemas/scapi/shopper/shopper-context/v1.json +630 -0
  466. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/seo/v1.json +223 -0
  467. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/shopper-seo/v1.json +423 -0
  468. package/node_modules/@salesforce/b2c-api-schemas/scapi/site/sites/v1.json +1088 -0
  469. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/shopper-stores/v1.json +798 -0
  470. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/store-redirect-mappings/v1.json +607 -0
  471. package/node_modules/@salesforce/b2c-api-schemas/scapi/store/stores/v1.json +1418 -0
  472. package/package.json +24 -3
  473. package/specs/dx-scripts-v1.yaml +409 -0
  474. package/specs/merchant-roles-v1.yaml +1085 -0
  475. package/specs/merchant-users-v1.yaml +398 -0
  476. package/specs/mrt-api-v1.json +105 -0
  477. package/specs/operations-jobs-v1.yaml +793 -0
  478. package/specs/product-catalogs-v1.yaml +111 -0
  479. package/specs/site-sites-v1.yaml +667 -0
  480. package/specs/slas-shopper-v1.yaml +83 -0
  481. package/specs/storefront-deployments-v1.yaml +630 -0
  482. package/specs/storefront-environments-v1.yaml +272 -0
@@ -0,0 +1,136 @@
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
+ import { ScapiUserAuthUnsupportedError } from '../clients/scapi-backend-utils.js';
7
+ import { resolveScapiReference, SCAPI_METHODS } from './catalog.js';
8
+ export function isScapiTextMediaType(mediaType) {
9
+ const type = mediaType.split(';')[0].trim().toLowerCase();
10
+ return type.startsWith('text/') || type === 'application/json' || type.endsWith('+json');
11
+ }
12
+ /** Shared discovery/execution limit: code mode transports JSON requests and text responses. */
13
+ export function unsupportedScapiTransfer(document, operation) {
14
+ const body = operation.requestBody && resolveScapiReference(operation.requestBody, document.schema);
15
+ if (body?.required && !body.content?.['application/json'])
16
+ return 'This operation requires a non-JSON request body. File uploads are not supported.';
17
+ const mediaTypes = Object.entries(operation.responses ?? {})
18
+ .filter(([status]) => /^2(?:\d\d|XX)$/i.test(status))
19
+ .flatMap(([, response]) => Object.keys(resolveScapiReference(response, document.schema).content ?? {}));
20
+ if (mediaTypes.length && !mediaTypes.some(isScapiTextMediaType))
21
+ return 'This operation returns a binary file. File downloads are not supported.';
22
+ }
23
+ /** Identify supported authentication per operation, including mixed Admin/Shopper contracts. */
24
+ export function getScapiAuthInfo(document, operation) {
25
+ const security = operation.security ?? document.schema.security ?? [];
26
+ const schemes = [...new Set(security.flatMap((requirement) => Object.keys(requirement)))];
27
+ const types = new Set();
28
+ for (const scheme of schemes) {
29
+ if (scheme === 'AmOAuth2' || (scheme === 'BearerToken' && document.entry.id === 'shopper/auth-admin/v1'))
30
+ types.add('admin');
31
+ else if (/^(Shopper|RegisteredShopper)/.test(scheme))
32
+ types.add('shopper');
33
+ else
34
+ types.add('unknown');
35
+ }
36
+ // OAuth endpoints can declare credentials in grant parameters instead of security schemes.
37
+ if (!types.size)
38
+ types.add(document.entry.id === 'shopper/auth/v1' ? 'shopper' : 'unknown');
39
+ const admin = security.some((requirement) => Array.isArray(requirement.AmOAuth2) && Object.keys(requirement).length === 1);
40
+ return {
41
+ types: [...types].sort(),
42
+ schemes,
43
+ executable: admin && !unsupportedScapiTransfer(document, operation),
44
+ };
45
+ }
46
+ /** Add discovery metadata and filter operations without modifying the bundled source documents. */
47
+ export function describeScapiSchemas(documents, authType) {
48
+ return documents.flatMap((document) => {
49
+ const paths = {};
50
+ const authTypes = new Set();
51
+ for (const [path, item] of Object.entries(document.schema.paths)) {
52
+ const selected = { ...item };
53
+ let count = 0;
54
+ for (const method of SCAPI_METHODS) {
55
+ if (!item[method])
56
+ continue;
57
+ const auth = getScapiAuthInfo(document, item[method]);
58
+ if (authType && !auth.types.includes(authType)) {
59
+ delete selected[method];
60
+ continue;
61
+ }
62
+ selected[method] = { ...item[method], auth };
63
+ for (const type of auth.types)
64
+ authTypes.add(type);
65
+ count++;
66
+ }
67
+ if (count)
68
+ paths[path] = selected;
69
+ }
70
+ return Object.keys(paths).length
71
+ ? [
72
+ {
73
+ ...document,
74
+ entry: { ...document.entry, authTypes: [...authTypes].sort() },
75
+ schema: { ...document.schema, paths },
76
+ },
77
+ ]
78
+ : [];
79
+ });
80
+ }
81
+ function scopeAdvice(context) {
82
+ const choices = context.candidates.map((candidate) => candidate.join(' + ')).join(' OR ');
83
+ return (`Account Manager client grants: ${choices}; tenant scope: ${context.tenantScope}. ` +
84
+ 'Operation scopes are requested automatically; also check any extra configured scopes and instance access.');
85
+ }
86
+ /** Enrich known OAuth failures; leave network and unrelated errors intact. */
87
+ export function scapiAuthError(error, context) {
88
+ const message = error instanceof Error ? error.message : String(error);
89
+ const target = `${context.operationId} (${context.api})`;
90
+ let diagnostic;
91
+ if (/\binvalid_scope\b|\binsufficient_scope\b/i.test(message))
92
+ diagnostic = {
93
+ code: 'SCAPI_SCOPE_MISSING',
94
+ message: `Admin authentication rejected scopes for ${target}. ${scopeAdvice(context)}`,
95
+ };
96
+ else if (/OAuth requires clientId/.test(message))
97
+ diagnostic = {
98
+ code: 'SCAPI_ADMIN_CONFIG_MISSING',
99
+ message: `${target} requires an Account Manager clientId and Admin credentials (clientSecret or configured JWT strategy). Inspect resolved configuration with secrets masked; slasClientId is for Shopper authentication.`,
100
+ };
101
+ else if (error instanceof ScapiUserAuthUnsupportedError)
102
+ diagnostic = {
103
+ code: 'SCAPI_ADMIN_AUTH_UNSUPPORTED',
104
+ message: `${target} cannot use browser user authentication. Configure Account Manager client credentials or a supported JWT strategy. Inspect resolved configuration with secrets masked.`,
105
+ };
106
+ else if (/\binvalid_client\b|\bunauthorized_client\b|(?:authentication failed|Failed to get access token).*401/i.test(message))
107
+ diagnostic = {
108
+ code: 'SCAPI_ADMIN_CREDENTIALS_REJECTED',
109
+ message: `Account Manager rejected credentials for ${target}. Check clientId, clientSecret or JWT setup, client enablement, and Account Manager host. Use Admin credentials, not a SLAS Shopper client.`,
110
+ };
111
+ return diagnostic ? new Error(`${diagnostic.code}: ${diagnostic.message}`, { cause: error }) : error;
112
+ }
113
+ /** HTTP status alone cannot prove that a grant is missing. Keep the original status and body. */
114
+ export function scapiAuthResponse(status, context) {
115
+ if (status === 401)
116
+ return {
117
+ code: 'SCAPI_UNAUTHORIZED',
118
+ message: `${context.operationId}: API rejected the Admin token. Check token validity and the resolved tenant. ${scopeAdvice(context)}`,
119
+ };
120
+ if (status === 403)
121
+ return {
122
+ code: 'SCAPI_FORBIDDEN',
123
+ message: `${context.operationId}: access denied; a 403 alone does not identify the missing permission. ${scopeAdvice(context)}`,
124
+ };
125
+ }
126
+ export function unsupportedScapiAuth(document, operation) {
127
+ const auth = getScapiAuthInfo(document, operation);
128
+ const target = `${operation.operationId} (${document.entry.id})`;
129
+ const schemes = auth.schemes.join(' OR ') || 'OAuth grant parameters';
130
+ if (document.entry.id === 'shopper/auth-admin/v1')
131
+ return new Error(`SCAPI_AUTH_UNSUPPORTED: ${target} requires SLAS administration authentication and its declared admin roles. This executor supports AmOAuth2 only; use the SLAS administration CLI/SDK. A SLAS Shopper client is not an admin credential.`);
132
+ if (auth.types.includes('shopper'))
133
+ return new Error(`SCAPI_SHOPPER_AUTH_UNSUPPORTED: ${target} requires ${schemes}. Shopper execution is not supported by this executor yet. Use a Shopper client/SDK with SLAS authentication (slasClientId, siteId, and the required token flow; slasClientSecret for private clients). Follow the operation's security scopes. Adding SLAS settings will not enable this executor; do not substitute Account Manager credentials.`);
134
+ return new Error(`SCAPI_AUTH_UNSUPPORTED: ${target} declares ${schemes}; this executor supports AmOAuth2 only. Inspect the operation's security requirements before choosing a client.`);
135
+ }
136
+ //# sourceMappingURL=authentication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../src/scapi/authentication.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /** OpenAPI documents are dynamic JSON; no generated client type is required. */
2
+ export type ApiDocument = Record<string, any>;
3
+ export interface ScapiSchemaEntry {
4
+ id: string;
5
+ apiFamily: string;
6
+ apiName: string;
7
+ apiVersion: string;
8
+ schemaVersion: string;
9
+ status: string;
10
+ file: string;
11
+ source: string;
12
+ }
13
+ export interface ScapiSchemaDocument {
14
+ entry: ScapiSchemaEntry;
15
+ schema: ApiDocument;
16
+ }
17
+ /** Load the versioned, language-neutral corpus without network or configuration. */
18
+ export declare function loadScapiSchemas(): ScapiSchemaDocument[];
19
+ export declare const SCAPI_METHODS: readonly ["get", "head", "post", "put", "patch", "delete", "options"];
20
+ /** Match an actual API path to its schema, ignoring untrusted schema server origins. */
21
+ export declare function findScapiOperation(documents: ScapiSchemaDocument[], method: string, path: string): {
22
+ document: ScapiSchemaDocument;
23
+ operation: ApiDocument;
24
+ pathItem: ApiDocument;
25
+ template: string;
26
+ parameters: Record<string, string>;
27
+ };
28
+ /** Resolve one local reference for request contract inspection. */
29
+ export declare function resolveScapiReference(value: ApiDocument, schema: ApiDocument): ApiDocument;
@@ -0,0 +1,81 @@
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
+ import { readFileSync } from 'node:fs';
7
+ import { createRequire } from 'node:module';
8
+ import { dirname, resolve, sep } from 'node:path';
9
+ let bundled;
10
+ /** Load the versioned, language-neutral corpus without network or configuration. */
11
+ export function loadScapiSchemas() {
12
+ if (bundled)
13
+ return bundled;
14
+ const require = createRequire(import.meta.url);
15
+ const manifestFile = require.resolve('@salesforce/b2c-api-schemas/manifest.json');
16
+ const root = dirname(manifestFile);
17
+ const manifest = JSON.parse(readFileSync(manifestFile, 'utf8'));
18
+ if (manifest.formatVersion !== 1)
19
+ throw new Error('Unsupported SCAPI schema manifest.');
20
+ bundled = manifest.schemas.map((entry) => {
21
+ const file = resolve(root, entry.file);
22
+ if (!file.startsWith(root + sep))
23
+ throw new Error('Invalid bundled schema path.');
24
+ return { entry, schema: JSON.parse(readFileSync(file, 'utf8')) };
25
+ });
26
+ return bundled;
27
+ }
28
+ export const SCAPI_METHODS = ['get', 'head', 'post', 'put', 'patch', 'delete', 'options'];
29
+ /** Match an actual API path to its schema, ignoring untrusted schema server origins. */
30
+ export function findScapiOperation(documents, method, path) {
31
+ for (const document of documents) {
32
+ const base = `/${document.entry.id}`;
33
+ if (!path.startsWith(base + '/'))
34
+ continue;
35
+ for (const [template, item] of Object.entries(document.schema.paths ?? {})) {
36
+ const operation = item[method.toLowerCase()];
37
+ if (!operation)
38
+ continue;
39
+ const actual = path.slice(base.length).split('/');
40
+ const operationPath = document.entry.apiFamily === 'custom' ? `/organizations/{organizationId}${template}` : template;
41
+ const expected = operationPath.split('/');
42
+ if (actual.length !== expected.length)
43
+ continue;
44
+ const parameters = {};
45
+ const match = expected.every((part, index) => {
46
+ if (part.startsWith('{') && part.endsWith('}')) {
47
+ parameters[part.slice(1, -1)] = decodeURIComponent(actual[index]);
48
+ return actual[index].length > 0;
49
+ }
50
+ return part === actual[index];
51
+ });
52
+ if (match)
53
+ return {
54
+ document,
55
+ operation: operation,
56
+ pathItem: item,
57
+ template: base + operationPath,
58
+ parameters,
59
+ };
60
+ }
61
+ }
62
+ throw new Error(`SCAPI_OPERATION_NOT_FOUND: ${method} ${path}. Search the schema before calling.`);
63
+ }
64
+ /** Resolve one local reference for request contract inspection. */
65
+ export function resolveScapiReference(value, schema) {
66
+ const visited = new Set();
67
+ while (typeof value?.$ref === 'string') {
68
+ const ref = value.$ref;
69
+ if (!ref.startsWith('#/') || visited.has(ref))
70
+ throw new Error(`Unsupported schema reference: ${ref}`);
71
+ visited.add(ref);
72
+ value = ref
73
+ .slice(2)
74
+ .split('/')
75
+ .reduce((parent, key) => parent?.[key.replaceAll('~1', '/').replaceAll('~0', '~')], schema);
76
+ if (!value)
77
+ throw new Error(`Missing schema reference: ${ref}`);
78
+ }
79
+ return value;
80
+ }
81
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/scapi/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** Bundled SCAPI contracts and local JavaScript execution with SDK-authenticated requests. @module scapi */
2
+ export { loadScapiSchemas, findScapiOperation, resolveScapiReference } from './catalog.js';
3
+ export type { ApiDocument, ScapiSchemaEntry, ScapiSchemaDocument } from './catalog.js';
4
+ export { runScapiCode } from './runtime.js';
5
+ export { createScapiAuth } from './auth-primitives.js';
6
+ export type { ScapiCodeOptions, ScapiRuntimeControl } from './runtime.js';
7
+ export { loadBuiltinScapiSnippets, loadScapiSnippets, saveScapiSnippet, getScapiSnippetDirectory, initializeScapiSnippetStore, } from './snippets.js';
8
+ export type { ScapiSnippet } from './snippets.js';
9
+ export { createScapiRequest } from './request.js';
10
+ export type { ScapiRequestOptions, ScapiConfirmation } from './request.js';
11
+ export { getScapiAuthInfo } from './authentication.js';
12
+ export type { ScapiAuthType, ScapiAuthInfo, ScapiAuthDiagnostic } from './authentication.js';
@@ -0,0 +1,13 @@
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
+ /** Bundled SCAPI contracts and local JavaScript execution with SDK-authenticated requests. @module scapi */
7
+ export { loadScapiSchemas, findScapiOperation, resolveScapiReference } from './catalog.js';
8
+ export { runScapiCode } from './runtime.js';
9
+ export { createScapiAuth } from './auth-primitives.js';
10
+ export { loadBuiltinScapiSnippets, loadScapiSnippets, saveScapiSnippet, getScapiSnippetDirectory, initializeScapiSnippetStore, } from './snippets.js';
11
+ export { createScapiRequest } from './request.js';
12
+ export { getScapiAuthInfo } from './authentication.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scapi/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,4GAA4G;AAC5G,OAAO,EAAC,gBAAgB,EAAE,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,cAAc,CAAC;AAEzF,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAErD,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAC,gBAAgB,EAAC,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { AuthStrategy } from '../auth/types.js';
2
+ import { type MiddlewareRegistry } from '../clients/middleware-registry.js';
3
+ import { type SafetyConfig } from '../safety/index.js';
4
+ import { type ScapiSchemaDocument } from './catalog.js';
5
+ /** Exact, resolved request awaiting approval. Credentials are never included. */
6
+ export interface ScapiConfirmation {
7
+ operationId: string;
8
+ method: string;
9
+ url: string;
10
+ query: Record<string, unknown>;
11
+ body?: unknown;
12
+ reason: string;
13
+ }
14
+ export interface ScapiRequestOptions {
15
+ shortCode: string;
16
+ tenantId: string;
17
+ siteId?: string;
18
+ auth: AuthStrategy | (() => AuthStrategy);
19
+ safety: SafetyConfig;
20
+ documents: ScapiSchemaDocument[];
21
+ middlewareRegistry?: MiddlewareRegistry;
22
+ /** Resolve only after user approval; reject on decline/cancellation. Omit to block confirmations. */
23
+ confirm?: (request: ScapiConfirmation, signal: AbortSignal) => Promise<void>;
24
+ /** Called immediately before network dispatch, for tracking potentially applied writes. */
25
+ onDispatch?: () => void;
26
+ }
27
+ /** Build one execution's SCAPI request helper. Auth, policy, and responses stay in the host. */
28
+ export declare function createScapiRequest(options: ScapiRequestOptions): (input: unknown, signal: AbortSignal) => Promise<unknown>;
@@ -0,0 +1,273 @@
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
+ import createClient, { createQuerySerializer } from 'openapi-fetch';
7
+ import { buildTenantScope, toOrganizationId } from '../clients/custom-apis.js';
8
+ import { withScopes } from '../clients/scapi-backend-utils.js';
9
+ import { createAuthMiddleware, createSafetyMiddleware } from '../clients/middleware.js';
10
+ import { globalMiddlewareRegistry } from '../clients/middleware-registry.js';
11
+ import { SafetyGuard, extractJobIdFromPath } from '../safety/index.js';
12
+ import { getLogger } from '../logging/logger.js';
13
+ import { findScapiOperation, resolveScapiReference } from './catalog.js';
14
+ import { scapiAuthError, scapiAuthResponse, unsupportedScapiAuth, unsupportedScapiTransfer, isScapiTextMediaType, } from './authentication.js';
15
+ /** Build one execution's SCAPI request helper. Auth, policy, and responses stay in the host. */
16
+ export function createScapiRequest(options) {
17
+ if (!/^[a-z0-9-]+$/i.test(options.shortCode))
18
+ throw new Error('Invalid SCAPI shortCode.');
19
+ const origin = `https://${options.shortCode}.api.commercecloud.salesforce.com`;
20
+ const organizationId = toOrganizationId(options.tenantId);
21
+ const documents = [...options.documents];
22
+ let totalBytes = 0;
23
+ return async (input, signal) => {
24
+ signal.throwIfAborted();
25
+ if (!input || typeof input !== 'object' || Array.isArray(input))
26
+ throw new Error('Request must be an object.');
27
+ // Detach the request from caller mutations while a confirmation is outstanding.
28
+ const args = structuredClone(input);
29
+ if (Object.keys(args).some((key) => !['method', 'path', 'query', 'body'].includes(key)))
30
+ throw new Error('Request accepts method, path, query, body only.');
31
+ const method = typeof args.method === 'string' ? args.method.toUpperCase() : '';
32
+ if (!['GET', 'HEAD', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'].includes(method))
33
+ throw new Error('Unsupported SCAPI method.');
34
+ if (typeof args.path !== 'string' ||
35
+ !args.path.startsWith('/') ||
36
+ args.path.startsWith('//') ||
37
+ /[?#\\]/.test(args.path))
38
+ throw new Error('Use a SCAPI path, without origin, query, or fragment.');
39
+ const path = args.path.replaceAll('{organizationId}', encodeURIComponent(organizationId));
40
+ const decoded = decodeURIComponent(path);
41
+ if (decoded.includes('\\') || decoded.split('/').some((part) => part === '.' || part === '..') || /[{}]/.test(path))
42
+ throw new Error('Invalid SCAPI path; substitute path parameters.');
43
+ if (path.startsWith('/custom/')) {
44
+ const [, , apiName, apiVersion] = path.split('/');
45
+ const id = `custom/${apiName}/${apiVersion}`;
46
+ if (!documents.some((document) => document.entry.id === id))
47
+ throw new Error(`SCAPI_CUSTOM_SCHEMA_REQUIRED: Fetch /dx/scapi-schemas/v1/organizations/{organizationId}/schemas/${id} ` +
48
+ 'with scapi.request in this execution before calling its endpoints. Inspect the contract and declared authentication.');
49
+ }
50
+ const matched = findScapiOperation(documents, method, path);
51
+ if (matched.parameters.organizationId && matched.parameters.organizationId !== organizationId)
52
+ throw new Error('SCAPI target differs from resolved organizationId.');
53
+ const { schema } = matched.document;
54
+ const { operation } = matched;
55
+ const security = operation.security ?? schema.security ?? [];
56
+ const admin = security.find((requirement) => Array.isArray(requirement.AmOAuth2) && Object.keys(requirement).length === 1);
57
+ if (!admin)
58
+ throw unsupportedScapiAuth(matched.document, operation);
59
+ const transferLimit = unsupportedScapiTransfer(matched.document, operation);
60
+ if (transferLimit)
61
+ throw new Error(`SCAPI_TRANSFER_UNSUPPORTED: ${operation.operationId}. ${transferLimit} Use a file-capable HTTP client.`);
62
+ const query = args.query === undefined ? {} : args.query;
63
+ if (!query || typeof query !== 'object' || Array.isArray(query))
64
+ throw new Error('query must be an object.');
65
+ const queryValues = { ...query };
66
+ const parameters = [...(matched.pathItem.parameters ?? []), ...(operation.parameters ?? [])].map((param) => resolveScapiReference(param, schema));
67
+ for (const parameter of parameters) {
68
+ if (parameter.in === 'query' && parameter.name === 'siteId' && queryValues.siteId === undefined && options.siteId)
69
+ queryValues.siteId = options.siteId;
70
+ const value = parameter.in === 'path'
71
+ ? matched.parameters[parameter.name]
72
+ : parameter.in === 'query'
73
+ ? queryValues[parameter.name]
74
+ : undefined;
75
+ if (parameter.required && value === undefined)
76
+ throw new Error(`SCAPI_ARGUMENT_INVALID: ${operation.operationId} requires ${parameter.in} ${parameter.name}.` +
77
+ (parameter.name === 'siteId'
78
+ ? ' Set query.siteId or configure siteId for the selected project.'
79
+ : ' Inspect the operation parameters with scapi_search.'));
80
+ }
81
+ const body = operation.requestBody ? resolveScapiReference(operation.requestBody, schema) : undefined;
82
+ if (body?.required && args.body === undefined)
83
+ throw new Error('SCAPI_ARGUMENT_INVALID: request body is required.');
84
+ if (args.body !== undefined) {
85
+ if (!body?.content?.['application/json'])
86
+ throw new Error('This operation does not accept a JSON body.');
87
+ if (Buffer.byteLength(JSON.stringify(args.body)) > 1_048_576)
88
+ throw new Error('SCAPI_REQUEST_TOO_LARGE');
89
+ }
90
+ const scopes = admin.AmOAuth2;
91
+ // SCAPI standard contracts list ro/rw domain alternatives together; reuse SDK scope negotiation.
92
+ const alternatives = scopes.length === 2 && scopes.some((scope) => scopes.includes(`${scope}.rw`));
93
+ const candidates = alternatives
94
+ ? [...scopes].sort((a, b) => Number(a.endsWith('.rw')) - Number(b.endsWith('.rw'))).map((scope) => [scope])
95
+ : [scopes];
96
+ const authContext = {
97
+ operationId: operation.operationId,
98
+ api: matched.document.entry.id,
99
+ candidates,
100
+ tenantScope: buildTenantScope(options.tenantId),
101
+ };
102
+ const querySerializer = (values) => Object.entries(values)
103
+ .map(([name, value]) => {
104
+ const parameter = parameters.find((item) => item.in === 'query' && item.name === name);
105
+ return createQuerySerializer({
106
+ array: { style: parameter?.style ?? 'form', explode: parameter?.explode ?? true },
107
+ object: { style: parameter?.style ?? 'form', explode: parameter?.explode ?? true },
108
+ allowReserved: parameter?.allowReserved,
109
+ })({ [name]: value });
110
+ })
111
+ .filter(Boolean)
112
+ .join('&');
113
+ // Use per-execution policy instead of the CLI's startup-bound safety provider.
114
+ const url = origin + path;
115
+ const pathname = new URL(url).pathname;
116
+ // Each request owns its guard: an approval must not exempt concurrent requests.
117
+ const guard = new SafetyGuard(options.safety);
118
+ const safetyOperation = { type: 'http', method, url, path: pathname, jobId: extractJobIdFromPath(pathname) };
119
+ const evaluation = guard.evaluate(safetyOperation);
120
+ let approved = false;
121
+ if (evaluation.action === 'confirm' && options.confirm) {
122
+ await options.confirm(structuredClone({
123
+ operationId: operation.operationId,
124
+ method,
125
+ url,
126
+ query: queryValues,
127
+ body: args.body,
128
+ reason: evaluation.reason,
129
+ }), signal);
130
+ signal.throwIfAborted();
131
+ guard.temporarilyAllow(safetyOperation);
132
+ approved = true;
133
+ }
134
+ guard.assert(safetyOperation);
135
+ const queryString = querySerializer(queryValues);
136
+ const approvedUrl = new URL(url + (queryString ? `?${queryString}` : '')).href;
137
+ const approvedBody = args.body === undefined ? '' : JSON.stringify(args.body);
138
+ const checkApprovedRequest = async (request) => {
139
+ if (approved &&
140
+ (request.method !== method || request.url !== approvedUrl || (await request.clone().text()) !== approvedBody))
141
+ throw new Error('SCAPI_APPROVAL_MISMATCH: request changed after approval; no request sent.');
142
+ };
143
+ let baseAuth;
144
+ try {
145
+ baseAuth = withScopes(typeof options.auth === 'function' ? options.auth() : options.auth, [
146
+ authContext.tenantScope,
147
+ ]);
148
+ }
149
+ catch (error) {
150
+ throw scapiAuthError(error, authContext);
151
+ }
152
+ const auth = {
153
+ fetch: baseAuth.fetch.bind(baseAuth),
154
+ getAuthorizationHeader: async () => {
155
+ try {
156
+ if (baseAuth.getAccessTokenForCascade)
157
+ return `Bearer ${await baseAuth.getAccessTokenForCascade(candidates)}`;
158
+ const scoped = withScopes(baseAuth, scopes);
159
+ if (!scoped.getAuthorizationHeader)
160
+ throw new Error('SCAPI_ADMIN_AUTH_UNSUPPORTED: The configured auth strategy cannot provide an authorization header. Use Account Manager OAuth credentials or a supported JWT strategy.');
161
+ return await scoped.getAuthorizationHeader();
162
+ }
163
+ catch (error) {
164
+ throw scapiAuthError(error, authContext);
165
+ }
166
+ },
167
+ };
168
+ const client = createClient({
169
+ baseUrl: origin,
170
+ headers: { Accept: 'application/json, text/*' },
171
+ fetch: async (request) => {
172
+ signal.throwIfAborted();
173
+ await checkApprovedRequest(request);
174
+ signal.throwIfAborted();
175
+ options.onDispatch?.();
176
+ const response = await fetch(request, { signal, redirect: 'error' });
177
+ const mediaType = response.headers.get('content-type');
178
+ if (response.ok && mediaType && !isScapiTextMediaType(mediaType)) {
179
+ void response.body?.cancel().catch(() => { });
180
+ throw new Error('SCAPI_TRANSFER_UNSUPPORTED: API returned a non-text response. Use a file-capable HTTP client; check any write before retrying.');
181
+ }
182
+ const chunks = [];
183
+ let bytes = 0;
184
+ const reader = response.body?.getReader();
185
+ try {
186
+ while (reader) {
187
+ const chunk = await reader.read();
188
+ if (chunk.done)
189
+ break;
190
+ bytes += chunk.value.length;
191
+ totalBytes += chunk.value.length;
192
+ if (bytes > 1_048_576 || totalBytes > 5_242_880)
193
+ throw new Error('SCAPI_RESPONSE_TOO_LARGE: request a smaller page.');
194
+ chunks.push(chunk.value);
195
+ }
196
+ }
197
+ finally {
198
+ // A tee'd response can wait for another consumer; cleanup must not delay a limit error.
199
+ void reader?.cancel().catch(() => { });
200
+ }
201
+ getLogger().debug({ method, path: matched.template, status: response.status, bytes }, 'SCAPI code request');
202
+ return new Response(chunks.length ? Buffer.concat(chunks) : null, {
203
+ status: response.status,
204
+ statusText: response.statusText,
205
+ headers: response.headers,
206
+ });
207
+ },
208
+ });
209
+ for (const middleware of (options.middlewareRegistry ?? globalMiddlewareRegistry).getMiddleware('scapi', {
210
+ exclude: ['cli-safety-guard'],
211
+ }))
212
+ client.use(middleware);
213
+ client.use({
214
+ onRequest: async ({ request }) => {
215
+ await checkApprovedRequest(request);
216
+ },
217
+ }, createSafetyMiddleware(guard), createAuthMiddleware(auth));
218
+ const result = await client.request(method, path, {
219
+ params: { query: queryValues },
220
+ querySerializer,
221
+ body: args.body,
222
+ signal,
223
+ redirect: 'error',
224
+ parseAs: 'text',
225
+ });
226
+ const text = result.data ?? result.error;
227
+ let data = text ?? null;
228
+ if (typeof text === 'string' && text) {
229
+ try {
230
+ data = JSON.parse(text);
231
+ }
232
+ catch {
233
+ /* Keep non-JSON responses as text. */
234
+ }
235
+ }
236
+ const diagnostic = scapiAuthResponse(result.response.status, authContext);
237
+ // Only authenticated live schema responses extend this execution's custom API catalog.
238
+ if (result.response.ok &&
239
+ method === 'GET' &&
240
+ matched.document.entry.id === 'dx/scapi-schemas/v1' &&
241
+ matched.parameters.apiFamily === 'custom') {
242
+ const schema = data;
243
+ if (!schema ||
244
+ !/^3\./.test(schema.openapi) ||
245
+ !schema.paths ||
246
+ typeof schema.paths !== 'object' ||
247
+ Array.isArray(schema.paths))
248
+ throw new Error('SCAPI_CUSTOM_SCHEMA_INVALID: Expected an OpenAPI 3 contract with paths from the Schemas API.');
249
+ const { apiName, apiVersion } = matched.parameters;
250
+ const id = `custom/${apiName}/${apiVersion}`;
251
+ const document = {
252
+ entry: {
253
+ id,
254
+ apiFamily: 'custom',
255
+ apiName,
256
+ apiVersion,
257
+ schemaVersion: schema.info?.version ?? apiVersion,
258
+ status: 'live',
259
+ file: '',
260
+ source: url,
261
+ },
262
+ schema,
263
+ };
264
+ const previous = documents.findIndex((item) => item.entry.id === id);
265
+ if (previous < 0)
266
+ documents.push(document);
267
+ else
268
+ documents[previous] = document;
269
+ }
270
+ return { status: result.response.status, ok: result.response.ok, data, ...(diagnostic ? { diagnostic } : {}) };
271
+ };
272
+ }
273
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/scapi/request.ts"],"names":[],"mappings":"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"}