@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,104 @@
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 { resolve } from 'node:path';
7
+ import { validate } from 'jsonschema';
8
+ import { OAuthStrategy } from '../auth/oauth.js';
9
+ import { JwtOAuthStrategy } from '../auth/oauth-jwt.js';
10
+ import { buildTenantScope, toOrganizationId } from '../clients/custom-apis.js';
11
+ import { getGuestToken, getRegisteredToken } from '../slas/token.js';
12
+ /** Token exports for external clients; managed SCAPI requests authenticate independently. */
13
+ export function createScapiAuth(config, cwd = process.cwd()) {
14
+ return async (operation, options, signal) => {
15
+ signal.throwIfAborted();
16
+ const string = { type: 'string', minLength: 1 };
17
+ const properties = operation === 'accountManager'
18
+ ? { scopes: { type: 'array', items: { ...string, pattern: '^\\S+$' } }, scapi: { type: 'boolean' } }
19
+ : {
20
+ flow: { enum: ['guest', 'registered'] },
21
+ siteId: string,
22
+ redirectUri: { ...string, format: 'uri' },
23
+ shopperLogin: string,
24
+ shopperPassword: string,
25
+ };
26
+ if (!['accountManager', 'slas'].includes(operation) ||
27
+ !validate(options, {
28
+ type: 'object',
29
+ properties,
30
+ additionalProperties: false,
31
+ }).valid)
32
+ throw new Error('SCAPI_AUTH_INPUT: Invalid token options. Read the SCAPI token-export reference.');
33
+ try {
34
+ if (operation === 'accountManager') {
35
+ const args = options;
36
+ if (!config.clientId)
37
+ throw new Error('Configure clientId. Use config_inspect.');
38
+ if (args.scapi && !config.tenantId)
39
+ throw new Error('Configure tenantId for a SCAPI token.');
40
+ const scopes = [
41
+ ...new Set([
42
+ ...(config.scopes ?? []),
43
+ ...(args.scopes ?? []),
44
+ ...(args.scapi ? [buildTenantScope(config.tenantId)] : []),
45
+ ]),
46
+ ];
47
+ for (const method of config.authMethods ?? ['client-credentials', 'jwt']) {
48
+ if (method === 'client-credentials' && config.clientSecret) {
49
+ return await new OAuthStrategy({
50
+ clientId: config.clientId,
51
+ clientSecret: config.clientSecret,
52
+ accountManagerHost: config.accountManagerHost,
53
+ scopes,
54
+ }).getTokenResponse(signal);
55
+ }
56
+ if (method === 'jwt' && config.jwtCertPath && config.jwtKeyPath) {
57
+ return await new JwtOAuthStrategy({
58
+ clientId: config.clientId,
59
+ certPath: resolve(cwd, config.jwtCertPath),
60
+ keyPath: resolve(cwd, config.jwtKeyPath),
61
+ passphrase: config.jwtPassphrase,
62
+ accountManagerHost: config.accountManagerHost ?? 'account.demandware.com',
63
+ scopes,
64
+ }).getTokenResponse(signal);
65
+ }
66
+ }
67
+ throw new Error('Configure an allowed client-credentials or jwt method. Browser authentication requires the CLI: b2c auth token.');
68
+ }
69
+ const args = options;
70
+ const { shortCode, tenantId, slasClientId, slasClientSecret } = config;
71
+ const siteId = args.siteId ?? config.siteId;
72
+ const missing = Object.entries({ shortCode, tenantId, slasClientId, siteId })
73
+ .filter(([, value]) => !value)
74
+ .map(([name]) => name);
75
+ if (missing.length)
76
+ throw new Error(`Configure ${missing.join(', ')}. Use config_inspect; SLAS client scopes and redirect URI must permit the requested flow.`);
77
+ const tokenConfig = {
78
+ shortCode: shortCode,
79
+ organizationId: toOrganizationId(tenantId),
80
+ slasClientId: slasClientId,
81
+ slasClientSecret,
82
+ siteId: siteId,
83
+ redirectUri: args.redirectUri ?? 'http://localhost:3000/callback',
84
+ signal,
85
+ };
86
+ if (args.flow !== 'registered' && (args.shopperLogin || args.shopperPassword))
87
+ throw new Error('Set flow: registered when supplying shopper credentials.');
88
+ if (args.flow === 'registered' && (!args.shopperLogin || !args.shopperPassword))
89
+ throw new Error('Registered flow requires shopperLogin and shopperPassword.');
90
+ return args.flow === 'registered'
91
+ ? await getRegisteredToken({
92
+ ...tokenConfig,
93
+ shopperLogin: args.shopperLogin,
94
+ shopperPassword: args.shopperPassword,
95
+ })
96
+ : await getGuestToken(tokenConfig);
97
+ }
98
+ catch (error) {
99
+ signal.throwIfAborted();
100
+ throw new Error(`SCAPI_AUTH_${operation === 'accountManager' ? 'AM' : 'SLAS'}: ${error instanceof Error ? error.message : String(error)}`);
101
+ }
102
+ };
103
+ }
104
+ //# sourceMappingURL=auth-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-primitives.js","sourceRoot":"","sources":["../../../src/scapi/auth-primitives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type ApiDocument, type ScapiSchemaDocument } from './catalog.js';
2
+ export type ScapiAuthType = 'admin' | 'shopper' | 'unknown';
3
+ export interface ScapiAuthInfo {
4
+ types: ScapiAuthType[];
5
+ schemes: string[];
6
+ executable: boolean;
7
+ }
8
+ export declare function isScapiTextMediaType(mediaType: string): boolean;
9
+ /** Shared discovery/execution limit: code mode transports JSON requests and text responses. */
10
+ export declare function unsupportedScapiTransfer(document: ScapiSchemaDocument, operation: ApiDocument): string | undefined;
11
+ /** Identify supported authentication per operation, including mixed Admin/Shopper contracts. */
12
+ export declare function getScapiAuthInfo(document: ScapiSchemaDocument, operation: ApiDocument): ScapiAuthInfo;
13
+ /** Add discovery metadata and filter operations without modifying the bundled source documents. */
14
+ export declare function describeScapiSchemas(documents: ScapiSchemaDocument[], authType?: ScapiAuthType): ScapiSchemaDocument[];
15
+ export interface ScapiAuthDiagnostic {
16
+ code: string;
17
+ message: string;
18
+ }
19
+ interface AuthContext {
20
+ operationId: string;
21
+ api: string;
22
+ tenantScope: string;
23
+ candidates: string[][];
24
+ }
25
+ /** Enrich known OAuth failures; leave network and unrelated errors intact. */
26
+ export declare function scapiAuthError(error: unknown, context: AuthContext): unknown;
27
+ /** HTTP status alone cannot prove that a grant is missing. Keep the original status and body. */
28
+ export declare function scapiAuthResponse(status: number, context: AuthContext): ScapiAuthDiagnostic | undefined;
29
+ export declare function unsupportedScapiAuth(document: ScapiSchemaDocument, operation: ApiDocument): Error;
30
+ export {};
@@ -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 } 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 } 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,15 @@
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
+ export interface ScapiRequestOptions {
6
+ shortCode: string;
7
+ tenantId: string;
8
+ siteId?: string;
9
+ auth: AuthStrategy | (() => AuthStrategy);
10
+ safety: SafetyConfig;
11
+ documents: ScapiSchemaDocument[];
12
+ middlewareRegistry?: MiddlewareRegistry;
13
+ }
14
+ /** Build one execution's SCAPI request helper. Auth, policy, and responses stay in the host. */
15
+ export declare function createScapiRequest(options: ScapiRequestOptions): (input: unknown, signal: AbortSignal) => Promise<unknown>;