@salesforce/b2c-tooling-sdk 1.9.0 → 1.11.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 (649) hide show
  1. package/data/content-schemas/componenttype.json +37 -0
  2. package/dist/esm/config/dw-json.d.ts +9 -2
  3. package/dist/esm/config/dw-json.js.map +1 -1
  4. package/dist/esm/config/index.d.ts +2 -2
  5. package/dist/esm/config/index.js +1 -1
  6. package/dist/esm/config/index.js.map +1 -1
  7. package/dist/esm/config/mapping.d.ts +7 -1
  8. package/dist/esm/config/mapping.js +10 -0
  9. package/dist/esm/config/mapping.js.map +1 -1
  10. package/dist/esm/config/sources/package-json-source.js +1 -0
  11. package/dist/esm/config/sources/package-json-source.js.map +1 -1
  12. package/dist/esm/config/types.d.ts +23 -2
  13. package/dist/esm/operations/content/validate.js +46 -4
  14. package/dist/esm/operations/content/validate.js.map +1 -1
  15. package/dist/esm/operations/jobs/site-archive.d.ts +12 -0
  16. package/dist/esm/operations/jobs/site-archive.js +107 -3
  17. package/dist/esm/operations/jobs/site-archive.js.map +1 -1
  18. package/package.json +73 -285
  19. package/dist/cjs/auth/api-key.d.ts +0 -28
  20. package/dist/cjs/auth/api-key.js +0 -45
  21. package/dist/cjs/auth/api-key.js.map +0 -1
  22. package/dist/cjs/auth/basic.d.ts +0 -7
  23. package/dist/cjs/auth/basic.js +0 -20
  24. package/dist/cjs/auth/basic.js.map +0 -1
  25. package/dist/cjs/auth/index.d.ts +0 -74
  26. package/dist/cjs/auth/index.js +0 -76
  27. package/dist/cjs/auth/index.js.map +0 -1
  28. package/dist/cjs/auth/jwt-utils.d.ts +0 -25
  29. package/dist/cjs/auth/jwt-utils.js +0 -66
  30. package/dist/cjs/auth/jwt-utils.js.map +0 -1
  31. package/dist/cjs/auth/middleware.d.ts +0 -196
  32. package/dist/cjs/auth/middleware.js +0 -190
  33. package/dist/cjs/auth/middleware.js.map +0 -1
  34. package/dist/cjs/auth/oauth-implicit.d.ts +0 -89
  35. package/dist/cjs/auth/oauth-implicit.js +0 -350
  36. package/dist/cjs/auth/oauth-implicit.js.map +0 -1
  37. package/dist/cjs/auth/oauth-jwt.d.ts +0 -99
  38. package/dist/cjs/auth/oauth-jwt.js +0 -343
  39. package/dist/cjs/auth/oauth-jwt.js.map +0 -1
  40. package/dist/cjs/auth/oauth.d.ts +0 -88
  41. package/dist/cjs/auth/oauth.js +0 -252
  42. package/dist/cjs/auth/oauth.js.map +0 -1
  43. package/dist/cjs/auth/resolve.d.ts +0 -100
  44. package/dist/cjs/auth/resolve.js +0 -175
  45. package/dist/cjs/auth/resolve.js.map +0 -1
  46. package/dist/cjs/auth/stateful-oauth-strategy.d.ts +0 -39
  47. package/dist/cjs/auth/stateful-oauth-strategy.js +0 -130
  48. package/dist/cjs/auth/stateful-oauth-strategy.js.map +0 -1
  49. package/dist/cjs/auth/stateful-store.d.ts +0 -49
  50. package/dist/cjs/auth/stateful-store.js +0 -166
  51. package/dist/cjs/auth/stateful-store.js.map +0 -1
  52. package/dist/cjs/auth/types.d.ts +0 -124
  53. package/dist/cjs/auth/types.js +0 -8
  54. package/dist/cjs/auth/types.js.map +0 -1
  55. package/dist/cjs/cli/am-command.d.ts +0 -74
  56. package/dist/cjs/cli/am-command.js +0 -199
  57. package/dist/cjs/cli/am-command.js.map +0 -1
  58. package/dist/cjs/cli/base-command.d.ts +0 -232
  59. package/dist/cjs/cli/base-command.js +0 -695
  60. package/dist/cjs/cli/base-command.js.map +0 -1
  61. package/dist/cjs/cli/cartridge-command.d.ts +0 -67
  62. package/dist/cjs/cli/cartridge-command.js +0 -146
  63. package/dist/cjs/cli/cartridge-command.js.map +0 -1
  64. package/dist/cjs/cli/cartridge-providers.d.ts +0 -149
  65. package/dist/cjs/cli/cartridge-providers.js +0 -103
  66. package/dist/cjs/cli/cartridge-providers.js.map +0 -1
  67. package/dist/cjs/cli/columns.d.ts +0 -128
  68. package/dist/cjs/cli/columns.js +0 -128
  69. package/dist/cjs/cli/columns.js.map +0 -1
  70. package/dist/cjs/cli/config.d.ts +0 -159
  71. package/dist/cjs/cli/config.js +0 -185
  72. package/dist/cjs/cli/config.js.map +0 -1
  73. package/dist/cjs/cli/details.d.ts +0 -69
  74. package/dist/cjs/cli/details.js +0 -72
  75. package/dist/cjs/cli/details.js.map +0 -1
  76. package/dist/cjs/cli/hooks.d.ts +0 -324
  77. package/dist/cjs/cli/hooks.js +0 -3
  78. package/dist/cjs/cli/hooks.js.map +0 -1
  79. package/dist/cjs/cli/index.d.ts +0 -108
  80. package/dist/cjs/cli/index.js +0 -111
  81. package/dist/cjs/cli/index.js.map +0 -1
  82. package/dist/cjs/cli/instance-command.d.ts +0 -131
  83. package/dist/cjs/cli/instance-command.js +0 -214
  84. package/dist/cjs/cli/instance-command.js.map +0 -1
  85. package/dist/cjs/cli/job-command.d.ts +0 -32
  86. package/dist/cjs/cli/job-command.js +0 -60
  87. package/dist/cjs/cli/job-command.js.map +0 -1
  88. package/dist/cjs/cli/lifecycle.d.ts +0 -189
  89. package/dist/cjs/cli/lifecycle.js +0 -130
  90. package/dist/cjs/cli/lifecycle.js.map +0 -1
  91. package/dist/cjs/cli/mrt-command.d.ts +0 -57
  92. package/dist/cjs/cli/mrt-command.js +0 -95
  93. package/dist/cjs/cli/mrt-command.js.map +0 -1
  94. package/dist/cjs/cli/oauth-command.d.ts +0 -122
  95. package/dist/cjs/cli/oauth-command.js +0 -311
  96. package/dist/cjs/cli/oauth-command.js.map +0 -1
  97. package/dist/cjs/cli/ods-command.d.ts +0 -97
  98. package/dist/cjs/cli/ods-command.js +0 -136
  99. package/dist/cjs/cli/ods-command.js.map +0 -1
  100. package/dist/cjs/cli/table.d.ts +0 -113
  101. package/dist/cjs/cli/table.js +0 -175
  102. package/dist/cjs/cli/table.js.map +0 -1
  103. package/dist/cjs/cli/webdav-command.d.ts +0 -110
  104. package/dist/cjs/cli/webdav-command.js +0 -106
  105. package/dist/cjs/cli/webdav-command.js.map +0 -1
  106. package/dist/cjs/clients/am-api.d.ts +0 -521
  107. package/dist/cjs/clients/am-api.js +0 -992
  108. package/dist/cjs/clients/am-api.js.map +0 -1
  109. package/dist/cjs/clients/am-apiclients-api.generated.d.ts +0 -803
  110. package/dist/cjs/clients/am-apiclients-api.generated.js +0 -6
  111. package/dist/cjs/clients/am-apiclients-api.generated.js.map +0 -1
  112. package/dist/cjs/clients/am-roles-api.generated.d.ts +0 -298
  113. package/dist/cjs/clients/am-roles-api.generated.js +0 -6
  114. package/dist/cjs/clients/am-roles-api.generated.js.map +0 -1
  115. package/dist/cjs/clients/am-users-api.generated.d.ts +0 -954
  116. package/dist/cjs/clients/am-users-api.generated.js +0 -6
  117. package/dist/cjs/clients/am-users-api.generated.js.map +0 -1
  118. package/dist/cjs/clients/cdn-zones.d.ts +0 -186
  119. package/dist/cjs/clients/cdn-zones.generated.d.ts +0 -8330
  120. package/dist/cjs/clients/cdn-zones.generated.js +0 -6
  121. package/dist/cjs/clients/cdn-zones.generated.js.map +0 -1
  122. package/dist/cjs/clients/cdn-zones.js +0 -103
  123. package/dist/cjs/clients/cdn-zones.js.map +0 -1
  124. package/dist/cjs/clients/cip.d.ts +0 -162
  125. package/dist/cjs/clients/cip.js +0 -572
  126. package/dist/cjs/clients/cip.js.map +0 -1
  127. package/dist/cjs/clients/custom-apis.d.ts +0 -174
  128. package/dist/cjs/clients/custom-apis.generated.d.ts +0 -202
  129. package/dist/cjs/clients/custom-apis.generated.js +0 -6
  130. package/dist/cjs/clients/custom-apis.generated.js.map +0 -1
  131. package/dist/cjs/clients/custom-apis.js +0 -140
  132. package/dist/cjs/clients/custom-apis.js.map +0 -1
  133. package/dist/cjs/clients/error-utils.d.ts +0 -35
  134. package/dist/cjs/clients/error-utils.js +0 -69
  135. package/dist/cjs/clients/error-utils.js.map +0 -1
  136. package/dist/cjs/clients/granular-replications.d.ts +0 -70
  137. package/dist/cjs/clients/granular-replications.generated.d.ts +0 -416
  138. package/dist/cjs/clients/granular-replications.generated.js +0 -6
  139. package/dist/cjs/clients/granular-replications.generated.js.map +0 -1
  140. package/dist/cjs/clients/granular-replications.js +0 -73
  141. package/dist/cjs/clients/granular-replications.js.map +0 -1
  142. package/dist/cjs/clients/index.d.ts +0 -145
  143. package/dist/cjs/clients/index.js +0 -137
  144. package/dist/cjs/clients/index.js.map +0 -1
  145. package/dist/cjs/clients/middleware-registry.d.ts +0 -184
  146. package/dist/cjs/clients/middleware-registry.js +0 -104
  147. package/dist/cjs/clients/middleware-registry.js.map +0 -1
  148. package/dist/cjs/clients/middleware.d.ts +0 -183
  149. package/dist/cjs/clients/middleware.js +0 -465
  150. package/dist/cjs/clients/middleware.js.map +0 -1
  151. package/dist/cjs/clients/mrt-b2c.d.ts +0 -138
  152. package/dist/cjs/clients/mrt-b2c.generated.d.ts +0 -176
  153. package/dist/cjs/clients/mrt-b2c.generated.js +0 -6
  154. package/dist/cjs/clients/mrt-b2c.generated.js.map +0 -1
  155. package/dist/cjs/clients/mrt-b2c.js +0 -86
  156. package/dist/cjs/clients/mrt-b2c.js.map +0 -1
  157. package/dist/cjs/clients/mrt.d.ts +0 -143
  158. package/dist/cjs/clients/mrt.generated.d.ts +0 -3806
  159. package/dist/cjs/clients/mrt.generated.js +0 -6
  160. package/dist/cjs/clients/mrt.generated.js.map +0 -1
  161. package/dist/cjs/clients/mrt.js +0 -93
  162. package/dist/cjs/clients/mrt.js.map +0 -1
  163. package/dist/cjs/clients/ocapi.d.ts +0 -128
  164. package/dist/cjs/clients/ocapi.generated.d.ts +0 -26052
  165. package/dist/cjs/clients/ocapi.generated.js +0 -6
  166. package/dist/cjs/clients/ocapi.generated.js.map +0 -1
  167. package/dist/cjs/clients/ocapi.js +0 -78
  168. package/dist/cjs/clients/ocapi.js.map +0 -1
  169. package/dist/cjs/clients/ods.d.ts +0 -160
  170. package/dist/cjs/clients/ods.generated.d.ts +0 -2860
  171. package/dist/cjs/clients/ods.generated.js +0 -6
  172. package/dist/cjs/clients/ods.generated.js.map +0 -1
  173. package/dist/cjs/clients/ods.js +0 -103
  174. package/dist/cjs/clients/ods.js.map +0 -1
  175. package/dist/cjs/clients/scapi-schemas.d.ts +0 -161
  176. package/dist/cjs/clients/scapi-schemas.generated.d.ts +0 -328
  177. package/dist/cjs/clients/scapi-schemas.generated.js +0 -6
  178. package/dist/cjs/clients/scapi-schemas.generated.js.map +0 -1
  179. package/dist/cjs/clients/scapi-schemas.js +0 -98
  180. package/dist/cjs/clients/scapi-schemas.js.map +0 -1
  181. package/dist/cjs/clients/slas-admin.d.ts +0 -132
  182. package/dist/cjs/clients/slas-admin.generated.d.ts +0 -1434
  183. package/dist/cjs/clients/slas-admin.generated.js +0 -6
  184. package/dist/cjs/clients/slas-admin.generated.js.map +0 -1
  185. package/dist/cjs/clients/slas-admin.js +0 -79
  186. package/dist/cjs/clients/slas-admin.js.map +0 -1
  187. package/dist/cjs/clients/tls-dispatcher.d.ts +0 -42
  188. package/dist/cjs/clients/tls-dispatcher.js +0 -107
  189. package/dist/cjs/clients/tls-dispatcher.js.map +0 -1
  190. package/dist/cjs/clients/user-agent.d.ts +0 -43
  191. package/dist/cjs/clients/user-agent.js +0 -87
  192. package/dist/cjs/clients/user-agent.js.map +0 -1
  193. package/dist/cjs/clients/webdav.d.ts +0 -186
  194. package/dist/cjs/clients/webdav.js +0 -395
  195. package/dist/cjs/clients/webdav.js.map +0 -1
  196. package/dist/cjs/config/config-source-registry.d.ts +0 -115
  197. package/dist/cjs/config/config-source-registry.js +0 -103
  198. package/dist/cjs/config/config-source-registry.js.map +0 -1
  199. package/dist/cjs/config/dw-json.d.ts +0 -267
  200. package/dist/cjs/config/dw-json.js +0 -333
  201. package/dist/cjs/config/dw-json.js.map +0 -1
  202. package/dist/cjs/config/index.d.ts +0 -100
  203. package/dist/cjs/config/index.js +0 -110
  204. package/dist/cjs/config/index.js.map +0 -1
  205. package/dist/cjs/config/instance-manager.d.ts +0 -97
  206. package/dist/cjs/config/instance-manager.js +0 -166
  207. package/dist/cjs/config/instance-manager.js.map +0 -1
  208. package/dist/cjs/config/mapping.d.ts +0 -193
  209. package/dist/cjs/config/mapping.js +0 -530
  210. package/dist/cjs/config/mapping.js.map +0 -1
  211. package/dist/cjs/config/resolved-config.d.ts +0 -29
  212. package/dist/cjs/config/resolved-config.js +0 -81
  213. package/dist/cjs/config/resolved-config.js.map +0 -1
  214. package/dist/cjs/config/resolver.d.ts +0 -191
  215. package/dist/cjs/config/resolver.js +0 -406
  216. package/dist/cjs/config/resolver.js.map +0 -1
  217. package/dist/cjs/config/sources/dw-json-source.d.ts +0 -27
  218. package/dist/cjs/config/sources/dw-json-source.js +0 -106
  219. package/dist/cjs/config/sources/dw-json-source.js.map +0 -1
  220. package/dist/cjs/config/sources/env-source.d.ts +0 -32
  221. package/dist/cjs/config/sources/env-source.js +0 -116
  222. package/dist/cjs/config/sources/env-source.js.map +0 -1
  223. package/dist/cjs/config/sources/index.d.ts +0 -9
  224. package/dist/cjs/config/sources/index.js +0 -15
  225. package/dist/cjs/config/sources/index.js.map +0 -1
  226. package/dist/cjs/config/sources/mobify-source.d.ts +0 -25
  227. package/dist/cjs/config/sources/mobify-source.js +0 -84
  228. package/dist/cjs/config/sources/mobify-source.js.map +0 -1
  229. package/dist/cjs/config/sources/package-json-source.d.ts +0 -14
  230. package/dist/cjs/config/sources/package-json-source.js +0 -96
  231. package/dist/cjs/config/sources/package-json-source.js.map +0 -1
  232. package/dist/cjs/config/types.d.ts +0 -407
  233. package/dist/cjs/config/types.js +0 -2
  234. package/dist/cjs/config/types.js.map +0 -1
  235. package/dist/cjs/defaults.d.ts +0 -36
  236. package/dist/cjs/defaults.js +0 -54
  237. package/dist/cjs/defaults.js.map +0 -1
  238. package/dist/cjs/discovery/detector.d.ts +0 -75
  239. package/dist/cjs/discovery/detector.js +0 -108
  240. package/dist/cjs/discovery/detector.js.map +0 -1
  241. package/dist/cjs/discovery/index.d.ts +0 -63
  242. package/dist/cjs/discovery/index.js +0 -70
  243. package/dist/cjs/discovery/index.js.map +0 -1
  244. package/dist/cjs/discovery/patterns/cartridges.d.ts +0 -16
  245. package/dist/cjs/discovery/patterns/cartridges.js +0 -16
  246. package/dist/cjs/discovery/patterns/cartridges.js.map +0 -1
  247. package/dist/cjs/discovery/patterns/index.d.ts +0 -21
  248. package/dist/cjs/discovery/patterns/index.js +0 -16
  249. package/dist/cjs/discovery/patterns/index.js.map +0 -1
  250. package/dist/cjs/discovery/patterns/pwa-kit.d.ts +0 -15
  251. package/dist/cjs/discovery/patterns/pwa-kit.js +0 -26
  252. package/dist/cjs/discovery/patterns/pwa-kit.js.map +0 -1
  253. package/dist/cjs/discovery/patterns/sfra.d.ts +0 -34
  254. package/dist/cjs/discovery/patterns/sfra.js +0 -50
  255. package/dist/cjs/discovery/patterns/sfra.js.map +0 -1
  256. package/dist/cjs/discovery/patterns/storefront-next.d.ts +0 -10
  257. package/dist/cjs/discovery/patterns/storefront-next.js +0 -65
  258. package/dist/cjs/discovery/patterns/storefront-next.js.map +0 -1
  259. package/dist/cjs/discovery/types.d.ts +0 -47
  260. package/dist/cjs/discovery/types.js +0 -12
  261. package/dist/cjs/discovery/types.js.map +0 -1
  262. package/dist/cjs/discovery/utils.d.ts +0 -44
  263. package/dist/cjs/discovery/utils.js +0 -82
  264. package/dist/cjs/discovery/utils.js.map +0 -1
  265. package/dist/cjs/docs/download.d.ts +0 -45
  266. package/dist/cjs/docs/download.js +0 -96
  267. package/dist/cjs/docs/download.js.map +0 -1
  268. package/dist/cjs/docs/index.d.ts +0 -44
  269. package/dist/cjs/docs/index.js +0 -12
  270. package/dist/cjs/docs/index.js.map +0 -1
  271. package/dist/cjs/docs/schema.d.ts +0 -26
  272. package/dist/cjs/docs/schema.js +0 -92
  273. package/dist/cjs/docs/schema.js.map +0 -1
  274. package/dist/cjs/docs/search.d.ts +0 -67
  275. package/dist/cjs/docs/search.js +0 -128
  276. package/dist/cjs/docs/search.js.map +0 -1
  277. package/dist/cjs/docs/types.d.ts +0 -64
  278. package/dist/cjs/docs/types.js +0 -15
  279. package/dist/cjs/docs/types.js.map +0 -1
  280. package/dist/cjs/errors/http-error.d.ts +0 -34
  281. package/dist/cjs/errors/http-error.js +0 -45
  282. package/dist/cjs/errors/http-error.js.map +0 -1
  283. package/dist/cjs/errors/index.d.ts +0 -12
  284. package/dist/cjs/errors/index.js +0 -18
  285. package/dist/cjs/errors/index.js.map +0 -1
  286. package/dist/cjs/i18n/index.d.ts +0 -144
  287. package/dist/cjs/i18n/index.js +0 -245
  288. package/dist/cjs/i18n/index.js.map +0 -1
  289. package/dist/cjs/i18n/locales/de.d.ts +0 -13
  290. package/dist/cjs/i18n/locales/de.js +0 -19
  291. package/dist/cjs/i18n/locales/de.js.map +0 -1
  292. package/dist/cjs/i18n/locales/index.d.ts +0 -28
  293. package/dist/cjs/i18n/locales/index.js +0 -25
  294. package/dist/cjs/i18n/locales/index.js.map +0 -1
  295. package/dist/cjs/index.d.ts +0 -33
  296. package/dist/cjs/index.js +0 -41
  297. package/dist/cjs/index.js.map +0 -1
  298. package/dist/cjs/instance/index.d.ts +0 -136
  299. package/dist/cjs/instance/index.js +0 -131
  300. package/dist/cjs/instance/index.js.map +0 -1
  301. package/dist/cjs/logging/index.d.ts +0 -116
  302. package/dist/cjs/logging/index.js +0 -121
  303. package/dist/cjs/logging/index.js.map +0 -1
  304. package/dist/cjs/logging/logger.d.ts +0 -9
  305. package/dist/cjs/logging/logger.js +0 -138
  306. package/dist/cjs/logging/logger.js.map +0 -1
  307. package/dist/cjs/logging/types.d.ts +0 -45
  308. package/dist/cjs/logging/types.js +0 -10
  309. package/dist/cjs/logging/types.js.map +0 -1
  310. package/dist/cjs/operations/bm-roles/index.d.ts +0 -52
  311. package/dist/cjs/operations/bm-roles/index.js +0 -57
  312. package/dist/cjs/operations/bm-roles/index.js.map +0 -1
  313. package/dist/cjs/operations/bm-roles/roles.d.ts +0 -155
  314. package/dist/cjs/operations/bm-roles/roles.js +0 -194
  315. package/dist/cjs/operations/bm-roles/roles.js.map +0 -1
  316. package/dist/cjs/operations/bm-users/index.d.ts +0 -50
  317. package/dist/cjs/operations/bm-users/index.js +0 -55
  318. package/dist/cjs/operations/bm-users/index.js.map +0 -1
  319. package/dist/cjs/operations/bm-users/users.d.ts +0 -189
  320. package/dist/cjs/operations/bm-users/users.js +0 -229
  321. package/dist/cjs/operations/bm-users/users.js.map +0 -1
  322. package/dist/cjs/operations/cap/index.d.ts +0 -56
  323. package/dist/cjs/operations/cap/index.js +0 -57
  324. package/dist/cjs/operations/cap/index.js.map +0 -1
  325. package/dist/cjs/operations/cap/install.d.ts +0 -53
  326. package/dist/cjs/operations/cap/install.js +0 -181
  327. package/dist/cjs/operations/cap/install.js.map +0 -1
  328. package/dist/cjs/operations/cap/list.d.ts +0 -92
  329. package/dist/cjs/operations/cap/list.js +0 -230
  330. package/dist/cjs/operations/cap/list.js.map +0 -1
  331. package/dist/cjs/operations/cap/package.d.ts +0 -39
  332. package/dist/cjs/operations/cap/package.js +0 -77
  333. package/dist/cjs/operations/cap/package.js.map +0 -1
  334. package/dist/cjs/operations/cap/pull.d.ts +0 -21
  335. package/dist/cjs/operations/cap/pull.js +0 -77
  336. package/dist/cjs/operations/cap/pull.js.map +0 -1
  337. package/dist/cjs/operations/cap/uninstall.d.ts +0 -46
  338. package/dist/cjs/operations/cap/uninstall.js +0 -87
  339. package/dist/cjs/operations/cap/uninstall.js.map +0 -1
  340. package/dist/cjs/operations/cap/validate.d.ts +0 -47
  341. package/dist/cjs/operations/cap/validate.js +0 -235
  342. package/dist/cjs/operations/cap/validate.js.map +0 -1
  343. package/dist/cjs/operations/cip/index.d.ts +0 -35
  344. package/dist/cjs/operations/cip/index.js +0 -128
  345. package/dist/cjs/operations/cip/index.js.map +0 -1
  346. package/dist/cjs/operations/cip/reports.d.ts +0 -2
  347. package/dist/cjs/operations/cip/reports.js +0 -210
  348. package/dist/cjs/operations/cip/reports.js.map +0 -1
  349. package/dist/cjs/operations/cip/types.d.ts +0 -97
  350. package/dist/cjs/operations/cip/types.js +0 -7
  351. package/dist/cjs/operations/cip/types.js.map +0 -1
  352. package/dist/cjs/operations/code/cartridges.d.ts +0 -46
  353. package/dist/cjs/operations/code/cartridges.js +0 -69
  354. package/dist/cjs/operations/code/cartridges.js.map +0 -1
  355. package/dist/cjs/operations/code/deploy.d.ts +0 -121
  356. package/dist/cjs/operations/code/deploy.js +0 -255
  357. package/dist/cjs/operations/code/deploy.js.map +0 -1
  358. package/dist/cjs/operations/code/download.d.ts +0 -77
  359. package/dist/cjs/operations/code/download.js +0 -300
  360. package/dist/cjs/operations/code/download.js.map +0 -1
  361. package/dist/cjs/operations/code/index.d.ts +0 -74
  362. package/dist/cjs/operations/code/index.js +0 -80
  363. package/dist/cjs/operations/code/index.js.map +0 -1
  364. package/dist/cjs/operations/code/upload-files.d.ts +0 -47
  365. package/dist/cjs/operations/code/upload-files.js +0 -116
  366. package/dist/cjs/operations/code/upload-files.js.map +0 -1
  367. package/dist/cjs/operations/code/versions.d.ts +0 -99
  368. package/dist/cjs/operations/code/versions.js +0 -156
  369. package/dist/cjs/operations/code/versions.js.map +0 -1
  370. package/dist/cjs/operations/code/watch.d.ts +0 -58
  371. package/dist/cjs/operations/code/watch.js +0 -175
  372. package/dist/cjs/operations/code/watch.js.map +0 -1
  373. package/dist/cjs/operations/content/asset-query.d.ts +0 -22
  374. package/dist/cjs/operations/content/asset-query.js +0 -77
  375. package/dist/cjs/operations/content/asset-query.js.map +0 -1
  376. package/dist/cjs/operations/content/export.d.ts +0 -57
  377. package/dist/cjs/operations/content/export.js +0 -221
  378. package/dist/cjs/operations/content/export.js.map +0 -1
  379. package/dist/cjs/operations/content/index.d.ts +0 -56
  380. package/dist/cjs/operations/content/index.js +0 -60
  381. package/dist/cjs/operations/content/index.js.map +0 -1
  382. package/dist/cjs/operations/content/library.d.ts +0 -137
  383. package/dist/cjs/operations/content/library.js +0 -396
  384. package/dist/cjs/operations/content/library.js.map +0 -1
  385. package/dist/cjs/operations/content/types.d.ts +0 -144
  386. package/dist/cjs/operations/content/types.js +0 -7
  387. package/dist/cjs/operations/content/types.js.map +0 -1
  388. package/dist/cjs/operations/content/validate.d.ts +0 -64
  389. package/dist/cjs/operations/content/validate.js +0 -170
  390. package/dist/cjs/operations/content/validate.js.map +0 -1
  391. package/dist/cjs/operations/debug/dap-adapter.d.ts +0 -72
  392. package/dist/cjs/operations/debug/dap-adapter.js +0 -505
  393. package/dist/cjs/operations/debug/dap-adapter.js.map +0 -1
  394. package/dist/cjs/operations/debug/debug-session.d.ts +0 -51
  395. package/dist/cjs/operations/debug/debug-session.js +0 -234
  396. package/dist/cjs/operations/debug/debug-session.js.map +0 -1
  397. package/dist/cjs/operations/debug/index.d.ts +0 -20
  398. package/dist/cjs/operations/debug/index.js +0 -21
  399. package/dist/cjs/operations/debug/index.js.map +0 -1
  400. package/dist/cjs/operations/debug/projections.d.ts +0 -72
  401. package/dist/cjs/operations/debug/projections.js +0 -84
  402. package/dist/cjs/operations/debug/projections.js.map +0 -1
  403. package/dist/cjs/operations/debug/resolve-path.d.ts +0 -15
  404. package/dist/cjs/operations/debug/resolve-path.js +0 -52
  405. package/dist/cjs/operations/debug/resolve-path.js.map +0 -1
  406. package/dist/cjs/operations/debug/sdapi-client.d.ts +0 -44
  407. package/dist/cjs/operations/debug/sdapi-client.js +0 -169
  408. package/dist/cjs/operations/debug/sdapi-client.js.map +0 -1
  409. package/dist/cjs/operations/debug/source-mapping.d.ts +0 -13
  410. package/dist/cjs/operations/debug/source-mapping.js +0 -57
  411. package/dist/cjs/operations/debug/source-mapping.js.map +0 -1
  412. package/dist/cjs/operations/debug/types.d.ts +0 -95
  413. package/dist/cjs/operations/debug/types.js +0 -2
  414. package/dist/cjs/operations/debug/types.js.map +0 -1
  415. package/dist/cjs/operations/debug/variable-store.d.ts +0 -35
  416. package/dist/cjs/operations/debug/variable-store.js +0 -52
  417. package/dist/cjs/operations/debug/variable-store.js.map +0 -1
  418. package/dist/cjs/operations/jobs/index.d.ts +0 -66
  419. package/dist/cjs/operations/jobs/index.js +0 -72
  420. package/dist/cjs/operations/jobs/index.js.map +0 -1
  421. package/dist/cjs/operations/jobs/run.d.ts +0 -239
  422. package/dist/cjs/operations/jobs/run.js +0 -324
  423. package/dist/cjs/operations/jobs/run.js.map +0 -1
  424. package/dist/cjs/operations/jobs/site-archive.d.ts +0 -267
  425. package/dist/cjs/operations/jobs/site-archive.js +0 -423
  426. package/dist/cjs/operations/jobs/site-archive.js.map +0 -1
  427. package/dist/cjs/operations/logs/index.d.ts +0 -65
  428. package/dist/cjs/operations/logs/index.js +0 -73
  429. package/dist/cjs/operations/logs/index.js.map +0 -1
  430. package/dist/cjs/operations/logs/list.d.ts +0 -35
  431. package/dist/cjs/operations/logs/list.js +0 -144
  432. package/dist/cjs/operations/logs/list.js.map +0 -1
  433. package/dist/cjs/operations/logs/path-normalizer.d.ts +0 -82
  434. package/dist/cjs/operations/logs/path-normalizer.js +0 -190
  435. package/dist/cjs/operations/logs/path-normalizer.js.map +0 -1
  436. package/dist/cjs/operations/logs/tail.d.ts +0 -92
  437. package/dist/cjs/operations/logs/tail.js +0 -525
  438. package/dist/cjs/operations/logs/tail.js.map +0 -1
  439. package/dist/cjs/operations/logs/types.d.ts +0 -132
  440. package/dist/cjs/operations/logs/types.js +0 -7
  441. package/dist/cjs/operations/logs/types.js.map +0 -1
  442. package/dist/cjs/operations/mrt/access-control.d.ts +0 -192
  443. package/dist/cjs/operations/mrt/access-control.js +0 -152
  444. package/dist/cjs/operations/mrt/access-control.js.map +0 -1
  445. package/dist/cjs/operations/mrt/b2c-config.d.ts +0 -201
  446. package/dist/cjs/operations/mrt/b2c-config.js +0 -210
  447. package/dist/cjs/operations/mrt/b2c-config.js.map +0 -1
  448. package/dist/cjs/operations/mrt/bundle.d.ts +0 -114
  449. package/dist/cjs/operations/mrt/bundle.js +0 -166
  450. package/dist/cjs/operations/mrt/bundle.js.map +0 -1
  451. package/dist/cjs/operations/mrt/cache.d.ts +0 -80
  452. package/dist/cjs/operations/mrt/cache.js +0 -65
  453. package/dist/cjs/operations/mrt/cache.js.map +0 -1
  454. package/dist/cjs/operations/mrt/certificate.d.ts +0 -60
  455. package/dist/cjs/operations/mrt/certificate.js +0 -76
  456. package/dist/cjs/operations/mrt/certificate.js.map +0 -1
  457. package/dist/cjs/operations/mrt/deployment.d.ts +0 -157
  458. package/dist/cjs/operations/mrt/deployment.js +0 -109
  459. package/dist/cjs/operations/mrt/deployment.js.map +0 -1
  460. package/dist/cjs/operations/mrt/env-var.d.ts +0 -176
  461. package/dist/cjs/operations/mrt/env-var.js +0 -231
  462. package/dist/cjs/operations/mrt/env-var.js.map +0 -1
  463. package/dist/cjs/operations/mrt/env.d.ts +0 -491
  464. package/dist/cjs/operations/mrt/env.js +0 -425
  465. package/dist/cjs/operations/mrt/env.js.map +0 -1
  466. package/dist/cjs/operations/mrt/index.d.ts +0 -75
  467. package/dist/cjs/operations/mrt/index.js +0 -81
  468. package/dist/cjs/operations/mrt/index.js.map +0 -1
  469. package/dist/cjs/operations/mrt/member.d.ts +0 -281
  470. package/dist/cjs/operations/mrt/member.js +0 -244
  471. package/dist/cjs/operations/mrt/member.js.map +0 -1
  472. package/dist/cjs/operations/mrt/notification.d.ts +0 -252
  473. package/dist/cjs/operations/mrt/notification.js +0 -206
  474. package/dist/cjs/operations/mrt/notification.js.map +0 -1
  475. package/dist/cjs/operations/mrt/organization-member.d.ts +0 -68
  476. package/dist/cjs/operations/mrt/organization-member.js +0 -88
  477. package/dist/cjs/operations/mrt/organization-member.js.map +0 -1
  478. package/dist/cjs/operations/mrt/organization.d.ts +0 -80
  479. package/dist/cjs/operations/mrt/organization.js +0 -53
  480. package/dist/cjs/operations/mrt/organization.js.map +0 -1
  481. package/dist/cjs/operations/mrt/project.d.ts +0 -261
  482. package/dist/cjs/operations/mrt/project.js +0 -232
  483. package/dist/cjs/operations/mrt/project.js.map +0 -1
  484. package/dist/cjs/operations/mrt/push.d.ts +0 -290
  485. package/dist/cjs/operations/mrt/push.js +0 -288
  486. package/dist/cjs/operations/mrt/push.js.map +0 -1
  487. package/dist/cjs/operations/mrt/redirect.d.ts +0 -337
  488. package/dist/cjs/operations/mrt/redirect.js +0 -256
  489. package/dist/cjs/operations/mrt/redirect.js.map +0 -1
  490. package/dist/cjs/operations/mrt/tail-logs.d.ts +0 -130
  491. package/dist/cjs/operations/mrt/tail-logs.js +0 -224
  492. package/dist/cjs/operations/mrt/tail-logs.js.map +0 -1
  493. package/dist/cjs/operations/mrt/user.d.ts +0 -135
  494. package/dist/cjs/operations/mrt/user.js +0 -153
  495. package/dist/cjs/operations/mrt/user.js.map +0 -1
  496. package/dist/cjs/operations/ods/index.d.ts +0 -10
  497. package/dist/cjs/operations/ods/index.js +0 -14
  498. package/dist/cjs/operations/ods/index.js.map +0 -1
  499. package/dist/cjs/operations/ods/sandbox-lookup.d.ts +0 -63
  500. package/dist/cjs/operations/ods/sandbox-lookup.js +0 -130
  501. package/dist/cjs/operations/ods/sandbox-lookup.js.map +0 -1
  502. package/dist/cjs/operations/ods/wait-for-clone.d.ts +0 -46
  503. package/dist/cjs/operations/ods/wait-for-clone.js +0 -100
  504. package/dist/cjs/operations/ods/wait-for-clone.js.map +0 -1
  505. package/dist/cjs/operations/ods/wait-for-sandbox.d.ts +0 -64
  506. package/dist/cjs/operations/ods/wait-for-sandbox.js +0 -114
  507. package/dist/cjs/operations/ods/wait-for-sandbox.js.map +0 -1
  508. package/dist/cjs/operations/orgs/index.d.ts +0 -74
  509. package/dist/cjs/operations/orgs/index.js +0 -33
  510. package/dist/cjs/operations/orgs/index.js.map +0 -1
  511. package/dist/cjs/operations/roles/index.d.ts +0 -43
  512. package/dist/cjs/operations/roles/index.js +0 -48
  513. package/dist/cjs/operations/roles/index.js.map +0 -1
  514. package/dist/cjs/operations/sites/cartridges.d.ts +0 -114
  515. package/dist/cjs/operations/sites/cartridges.js +0 -378
  516. package/dist/cjs/operations/sites/cartridges.js.map +0 -1
  517. package/dist/cjs/operations/sites/index.d.ts +0 -46
  518. package/dist/cjs/operations/sites/index.js +0 -51
  519. package/dist/cjs/operations/sites/index.js.map +0 -1
  520. package/dist/cjs/operations/users/index.d.ts +0 -153
  521. package/dist/cjs/operations/users/index.js +0 -139
  522. package/dist/cjs/operations/users/index.js.map +0 -1
  523. package/dist/cjs/operations/util/zip.d.ts +0 -5
  524. package/dist/cjs/operations/util/zip.js +0 -25
  525. package/dist/cjs/operations/util/zip.js.map +0 -1
  526. package/dist/cjs/package.json +0 -1
  527. package/dist/cjs/plugins/discovery.d.ts +0 -46
  528. package/dist/cjs/plugins/discovery.js +0 -122
  529. package/dist/cjs/plugins/discovery.js.map +0 -1
  530. package/dist/cjs/plugins/index.d.ts +0 -26
  531. package/dist/cjs/plugins/index.js +0 -32
  532. package/dist/cjs/plugins/index.js.map +0 -1
  533. package/dist/cjs/plugins/loader.d.ts +0 -34
  534. package/dist/cjs/plugins/loader.js +0 -59
  535. package/dist/cjs/plugins/loader.js.map +0 -1
  536. package/dist/cjs/plugins/manager.d.ts +0 -70
  537. package/dist/cjs/plugins/manager.js +0 -173
  538. package/dist/cjs/plugins/manager.js.map +0 -1
  539. package/dist/cjs/safety/index.d.ts +0 -12
  540. package/dist/cjs/safety/index.js +0 -11
  541. package/dist/cjs/safety/index.js.map +0 -1
  542. package/dist/cjs/safety/safety-guard.d.ts +0 -92
  543. package/dist/cjs/safety/safety-guard.js +0 -270
  544. package/dist/cjs/safety/safety-guard.js.map +0 -1
  545. package/dist/cjs/safety/safety-middleware.d.ts +0 -130
  546. package/dist/cjs/safety/safety-middleware.js +0 -248
  547. package/dist/cjs/safety/safety-middleware.js.map +0 -1
  548. package/dist/cjs/safety/types.d.ts +0 -81
  549. package/dist/cjs/safety/types.js +0 -16
  550. package/dist/cjs/safety/types.js.map +0 -1
  551. package/dist/cjs/safety/with-confirmation.d.ts +0 -58
  552. package/dist/cjs/safety/with-confirmation.js +0 -67
  553. package/dist/cjs/safety/with-confirmation.js.map +0 -1
  554. package/dist/cjs/scaffold/engine.d.ts +0 -68
  555. package/dist/cjs/scaffold/engine.js +0 -149
  556. package/dist/cjs/scaffold/engine.js.map +0 -1
  557. package/dist/cjs/scaffold/executor.d.ts +0 -36
  558. package/dist/cjs/scaffold/executor.js +0 -293
  559. package/dist/cjs/scaffold/executor.js.map +0 -1
  560. package/dist/cjs/scaffold/index.d.ts +0 -76
  561. package/dist/cjs/scaffold/index.js +0 -23
  562. package/dist/cjs/scaffold/index.js.map +0 -1
  563. package/dist/cjs/scaffold/merge.d.ts +0 -63
  564. package/dist/cjs/scaffold/merge.js +0 -192
  565. package/dist/cjs/scaffold/merge.js.map +0 -1
  566. package/dist/cjs/scaffold/parameter-resolver.d.ts +0 -86
  567. package/dist/cjs/scaffold/parameter-resolver.js +0 -191
  568. package/dist/cjs/scaffold/parameter-resolver.js.map +0 -1
  569. package/dist/cjs/scaffold/registry.d.ts +0 -60
  570. package/dist/cjs/scaffold/registry.js +0 -225
  571. package/dist/cjs/scaffold/registry.js.map +0 -1
  572. package/dist/cjs/scaffold/sources.d.ts +0 -83
  573. package/dist/cjs/scaffold/sources.js +0 -236
  574. package/dist/cjs/scaffold/sources.js.map +0 -1
  575. package/dist/cjs/scaffold/types.d.ts +0 -282
  576. package/dist/cjs/scaffold/types.js +0 -14
  577. package/dist/cjs/scaffold/types.js.map +0 -1
  578. package/dist/cjs/scaffold/validation.d.ts +0 -81
  579. package/dist/cjs/scaffold/validation.js +0 -250
  580. package/dist/cjs/scaffold/validation.js.map +0 -1
  581. package/dist/cjs/scaffold/validators.d.ts +0 -33
  582. package/dist/cjs/scaffold/validators.js +0 -340
  583. package/dist/cjs/scaffold/validators.js.map +0 -1
  584. package/dist/cjs/schemas/collapse.d.ts +0 -150
  585. package/dist/cjs/schemas/collapse.js +0 -180
  586. package/dist/cjs/schemas/collapse.js.map +0 -1
  587. package/dist/cjs/schemas/index.d.ts +0 -58
  588. package/dist/cjs/schemas/index.js +0 -65
  589. package/dist/cjs/schemas/index.js.map +0 -1
  590. package/dist/cjs/schemas/security-schemes.d.ts +0 -26
  591. package/dist/cjs/schemas/security-schemes.js +0 -44
  592. package/dist/cjs/schemas/security-schemes.js.map +0 -1
  593. package/dist/cjs/skills/agents.d.ts +0 -42
  594. package/dist/cjs/skills/agents.js +0 -200
  595. package/dist/cjs/skills/agents.js.map +0 -1
  596. package/dist/cjs/skills/github.d.ts +0 -31
  597. package/dist/cjs/skills/github.js +0 -450
  598. package/dist/cjs/skills/github.js.map +0 -1
  599. package/dist/cjs/skills/index.d.ts +0 -43
  600. package/dist/cjs/skills/index.js +0 -16
  601. package/dist/cjs/skills/index.js.map +0 -1
  602. package/dist/cjs/skills/installer.d.ts +0 -35
  603. package/dist/cjs/skills/installer.js +0 -182
  604. package/dist/cjs/skills/installer.js.map +0 -1
  605. package/dist/cjs/skills/parser.d.ts +0 -39
  606. package/dist/cjs/skills/parser.js +0 -126
  607. package/dist/cjs/skills/parser.js.map +0 -1
  608. package/dist/cjs/skills/sources.d.ts +0 -4
  609. package/dist/cjs/skills/sources.js +0 -52
  610. package/dist/cjs/skills/sources.js.map +0 -1
  611. package/dist/cjs/skills/types.d.ts +0 -153
  612. package/dist/cjs/skills/types.js +0 -7
  613. package/dist/cjs/skills/types.js.map +0 -1
  614. package/dist/cjs/slas/index.d.ts +0 -12
  615. package/dist/cjs/slas/index.js +0 -8
  616. package/dist/cjs/slas/index.js.map +0 -1
  617. package/dist/cjs/slas/pkce.d.ts +0 -13
  618. package/dist/cjs/slas/pkce.js +0 -35
  619. package/dist/cjs/slas/pkce.js.map +0 -1
  620. package/dist/cjs/slas/token.d.ts +0 -24
  621. package/dist/cjs/slas/token.js +0 -261
  622. package/dist/cjs/slas/token.js.map +0 -1
  623. package/dist/cjs/slas/types.d.ts +0 -43
  624. package/dist/cjs/slas/types.js +0 -7
  625. package/dist/cjs/slas/types.js.map +0 -1
  626. package/dist/cjs/telemetry/index.d.ts +0 -34
  627. package/dist/cjs/telemetry/index.js +0 -32
  628. package/dist/cjs/telemetry/index.js.map +0 -1
  629. package/dist/cjs/telemetry/telemetry.d.ts +0 -88
  630. package/dist/cjs/telemetry/telemetry.js +0 -298
  631. package/dist/cjs/telemetry/telemetry.js.map +0 -1
  632. package/dist/cjs/telemetry/types.d.ts +0 -62
  633. package/dist/cjs/telemetry/types.js +0 -7
  634. package/dist/cjs/telemetry/types.js.map +0 -1
  635. package/dist/cjs/test-utils/config-isolation.d.ts +0 -2
  636. package/dist/cjs/test-utils/config-isolation.js +0 -48
  637. package/dist/cjs/test-utils/config-isolation.js.map +0 -1
  638. package/dist/cjs/test-utils/index.d.ts +0 -1
  639. package/dist/cjs/test-utils/index.js +0 -7
  640. package/dist/cjs/test-utils/index.js.map +0 -1
  641. package/dist/cjs/ux/confirm.d.ts +0 -14
  642. package/dist/cjs/ux/confirm.js +0 -36
  643. package/dist/cjs/ux/confirm.js.map +0 -1
  644. package/dist/cjs/ux/index.d.ts +0 -1
  645. package/dist/cjs/ux/index.js +0 -7
  646. package/dist/cjs/ux/index.js.map +0 -1
  647. package/dist/cjs/version.d.ts +0 -14
  648. package/dist/cjs/version.js +0 -29
  649. package/dist/cjs/version.js.map +0 -1
@@ -1,270 +0,0 @@
1
- /*
2
- * Copyright (c) 2025, Salesforce, Inc.
3
- * SPDX-License-Identifier: Apache-2
4
- * For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5
- */
6
- /**
7
- * SafetyGuard: SDK-level safety evaluation engine.
8
- *
9
- * Evaluates operations against safety rules and levels, producing typed
10
- * evaluations (allow/block/confirm). Used by both the HTTP middleware
11
- * (automatic) and command-level checks (opt-in).
12
- *
13
- * @module safety/safety-guard
14
- */
15
- import { Minimatch } from 'minimatch';
16
- import { getLogger } from '../logging/index.js';
17
- import { SafetyBlockedError, SafetyConfirmationRequired, checkLevelViolation, describeSafetyLevel, } from './safety-middleware.js';
18
- /** Regex to extract job ID from OCAPI job execution URLs. */
19
- const JOB_EXECUTION_PATTERN = /\/jobs\/([^/]+)\/executions/;
20
- /**
21
- * Extract a job ID from a URL path if it's a job execution endpoint.
22
- *
23
- * Matches patterns like:
24
- * - `/s/-/dw/data/v24_5/jobs/sfcc-site-archive-import/executions`
25
- * - `/jobs/sfcc-site-archive-export/executions`
26
- */
27
- export function extractJobIdFromPath(path) {
28
- const match = JOB_EXECUTION_PATTERN.exec(path);
29
- return match?.[1];
30
- }
31
- /**
32
- * Test whether a string matches a glob pattern.
33
- * Uses minimatch with dot matching enabled.
34
- */
35
- function matchGlob(value, pattern) {
36
- const matcher = new Minimatch(pattern, { dot: true, nocase: true });
37
- return matcher.match(value);
38
- }
39
- /**
40
- * Check if a rule matches an operation.
41
- */
42
- function ruleMatchesOperation(rule, operation) {
43
- // Command matcher
44
- if (rule.command !== undefined) {
45
- if (!operation.commandId)
46
- return false;
47
- return matchGlob(operation.commandId, rule.command);
48
- }
49
- // Job matcher
50
- if (rule.job !== undefined) {
51
- const jobId = operation.jobId ?? (operation.path ? extractJobIdFromPath(operation.path) : undefined);
52
- if (!jobId)
53
- return false;
54
- return matchGlob(jobId, rule.job);
55
- }
56
- // HTTP method + path matcher
57
- if (rule.path !== undefined) {
58
- if (!operation.path)
59
- return false;
60
- if (!matchGlob(operation.path, rule.path))
61
- return false;
62
- // If method is specified, it must also match
63
- if (rule.method !== undefined) {
64
- if (!operation.method)
65
- return false;
66
- return matchGlob(operation.method.toUpperCase(), rule.method.toUpperCase());
67
- }
68
- return true;
69
- }
70
- // Method-only matcher (no path)
71
- if (rule.method !== undefined) {
72
- if (!operation.method)
73
- return false;
74
- return matchGlob(operation.method.toUpperCase(), rule.method.toUpperCase());
75
- }
76
- // Rule has no matchers — does not match anything
77
- return false;
78
- }
79
- /**
80
- * SafetyGuard evaluates operations against safety rules and levels.
81
- *
82
- * The guard provides three levels of API:
83
- * - {@link evaluate} — returns a {@link SafetyEvaluation} describing what should happen
84
- * - {@link assert} — throws {@link SafetyBlockedError} or {@link SafetyConfirmationRequired}
85
- * - {@link temporarilyAllow} — creates a scoped exemption for confirmed operations
86
- *
87
- * The HTTP middleware uses the guard internally so all HTTP requests are
88
- * evaluated automatically. CLI commands and other consumers can use the
89
- * guard directly for richer safety interaction (command-level checks,
90
- * confirmation flows).
91
- *
92
- * @example
93
- * ```typescript
94
- * const guard = new SafetyGuard({
95
- * level: 'NO_UPDATE',
96
- * confirm: true,
97
- * rules: [{ job: 'sfcc-site-archive-export', action: 'allow' }],
98
- * });
99
- *
100
- * const evaluation = guard.evaluate({ type: 'job', jobId: 'sfcc-site-archive-export' });
101
- * // evaluation.action === 'allow'
102
- * ```
103
- */
104
- export class SafetyGuard {
105
- config;
106
- temporaryAllows = [];
107
- logger;
108
- constructor(config) {
109
- this.config = config;
110
- this.logger = getLogger();
111
- }
112
- /**
113
- * Evaluate an operation against safety rules and level.
114
- *
115
- * Evaluation order:
116
- * 1. Temporary allows (from confirmed retries) — if matched, allow
117
- * 2. Config rules in order — first matching rule's action wins
118
- * 3. Level-based default — confirm if `confirm: true`, otherwise block/allow
119
- *
120
- * All evaluations are trace-logged for diagnostics.
121
- */
122
- evaluate(operation) {
123
- // 1. Check temporary allows (confirmed operations)
124
- for (const rule of this.temporaryAllows) {
125
- if (ruleMatchesOperation(rule, operation)) {
126
- const evaluation = {
127
- action: 'allow',
128
- reason: 'Temporarily allowed after confirmation',
129
- operation,
130
- rule,
131
- };
132
- this.logger.trace({ operation, evaluation }, '[SafetyGuard] Allowed by temporary exemption');
133
- return evaluation;
134
- }
135
- }
136
- // 2. Check config rules (first match wins)
137
- if (this.config.rules) {
138
- for (const rule of this.config.rules) {
139
- if (ruleMatchesOperation(rule, operation)) {
140
- const evaluation = {
141
- action: rule.action,
142
- reason: this.describeRuleMatch(rule, operation),
143
- operation,
144
- rule,
145
- };
146
- this.logger.trace({ operation, rule, action: rule.action }, '[SafetyGuard] Matched rule');
147
- return evaluation;
148
- }
149
- }
150
- }
151
- // 3. Fall back to level-based evaluation
152
- return this.evaluateByLevel(operation);
153
- }
154
- /**
155
- * Assert that an operation is allowed.
156
- *
157
- * @throws {SafetyBlockedError} if the operation is blocked
158
- * @throws {SafetyConfirmationRequired} if the operation needs confirmation
159
- */
160
- assert(operation) {
161
- const evaluation = this.evaluate(operation);
162
- switch (evaluation.action) {
163
- case 'allow':
164
- return;
165
- case 'block':
166
- throw new SafetyBlockedError(evaluation.reason, operation.method ?? '', operation.url ?? '', this.config.level);
167
- case 'confirm':
168
- throw new SafetyConfirmationRequired(evaluation);
169
- }
170
- }
171
- /**
172
- * Create a temporary exemption for a confirmed operation.
173
- *
174
- * Returns a cleanup function that removes the exemption. Use this
175
- * to retry an operation after the user has confirmed.
176
- */
177
- temporarilyAllow(operation) {
178
- const rule = this.operationToRule(operation);
179
- return this.temporarilyAddRule(rule);
180
- }
181
- /**
182
- * Add a temporary safety rule for a scoped exemption.
183
- *
184
- * Unlike {@link temporarilyAllow} which derives a rule from an operation,
185
- * this accepts an arbitrary rule — useful for granting broad temporary
186
- * access (e.g., allowing WebDAV DELETE on Impex paths during a job export).
187
- *
188
- * Returns a cleanup function that removes the rule.
189
- */
190
- temporarilyAddRule(rule) {
191
- this.temporaryAllows.push(rule);
192
- this.logger.trace({ rule }, '[SafetyGuard] Added temporary rule');
193
- return () => {
194
- const idx = this.temporaryAllows.indexOf(rule);
195
- if (idx >= 0) {
196
- this.temporaryAllows.splice(idx, 1);
197
- this.logger.trace({ rule }, '[SafetyGuard] Removed temporary rule');
198
- }
199
- };
200
- }
201
- /**
202
- * Evaluate an operation using only the safety level (no rules).
203
- */
204
- evaluateByLevel(operation) {
205
- // For HTTP operations, check the level
206
- if (operation.method && operation.path) {
207
- const violation = checkLevelViolation(operation.method, operation.path, this.config.level);
208
- if (violation) {
209
- const action = this.config.confirm ? 'confirm' : 'block';
210
- const evaluation = {
211
- action,
212
- reason: this.describeLevelBlock(operation),
213
- operation,
214
- };
215
- this.logger.trace({ operation, action, level: this.config.level }, '[SafetyGuard] Level evaluation');
216
- return evaluation;
217
- }
218
- }
219
- // For command operations, no level-based blocking (levels are HTTP-level)
220
- // Commands opt into safety via rules or assertDestructiveOperationAllowed()
221
- const evaluation = {
222
- action: 'allow',
223
- reason: 'No matching rule and level allows this operation',
224
- operation,
225
- };
226
- this.logger.trace({ operation, level: this.config.level }, '[SafetyGuard] Allowed by level');
227
- return evaluation;
228
- }
229
- /**
230
- * Convert an operation to a temporary allow rule for retry.
231
- */
232
- operationToRule(operation) {
233
- if (operation.commandId) {
234
- return { command: operation.commandId, action: 'allow' };
235
- }
236
- if (operation.jobId) {
237
- return { job: operation.jobId, action: 'allow' };
238
- }
239
- // HTTP operation — match exact method + path
240
- return {
241
- method: operation.method,
242
- path: operation.path,
243
- action: 'allow',
244
- };
245
- }
246
- /**
247
- * Describe why a rule matched, for user-facing messages.
248
- */
249
- describeRuleMatch(rule, operation) {
250
- if (rule.command) {
251
- return `Command "${operation.commandId}" matched safety rule (command: "${rule.command}", action: ${rule.action})`;
252
- }
253
- if (rule.job) {
254
- return `Job "${operation.jobId}" matched safety rule (job: "${rule.job}", action: ${rule.action})`;
255
- }
256
- const method = operation.method ?? 'unknown';
257
- const path = operation.path ?? 'unknown';
258
- return `${method} ${path} matched safety rule (action: ${rule.action})`;
259
- }
260
- /**
261
- * Describe why the level blocked an operation, for user-facing messages.
262
- */
263
- describeLevelBlock(operation) {
264
- const method = operation.method ?? 'unknown';
265
- const path = operation.path ?? 'unknown';
266
- const levelDesc = describeSafetyLevel(this.config.level);
267
- return `${method} ${path} blocked by safety level ${this.config.level} — ${levelDesc}`;
268
- }
269
- }
270
- //# sourceMappingURL=safety-guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safety-guard.js","sourceRoot":"","sources":["../../../src/safety/safety-guard.ts"],"names":[],"mappings":"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"}
@@ -1,130 +0,0 @@
1
- import type { SafetyRule } from './types.js';
2
- import type { SafetyEvaluation } from './types.js';
3
- /**
4
- * Safety levels for preventing destructive operations.
5
- *
6
- * - NONE: No safety restrictions (default)
7
- * - NO_DELETE: Block DELETE operations only
8
- * - NO_UPDATE: Block DELETE and destructive operations (reset, stop, restart)
9
- * - READ_ONLY: Block all write operations (only GET allowed)
10
- */
11
- export type SafetyLevel = 'NONE' | 'NO_DELETE' | 'NO_UPDATE' | 'READ_ONLY';
12
- /**
13
- * Safety configuration.
14
- *
15
- * Supports both simple level-based blocking and granular per-rule actions.
16
- */
17
- export interface SafetyConfig {
18
- /** The base safety level. */
19
- level: SafetyLevel;
20
- /** When true, operations that the level would block require confirmation instead of hard-blocking. */
21
- confirm?: boolean;
22
- /** Ordered list of rules. First matching rule wins. */
23
- rules?: SafetyRule[];
24
- }
25
- /**
26
- * Returns the more restrictive of two safety levels.
27
- */
28
- export declare function maxSafetyLevel(a: SafetyLevel, b: SafetyLevel): SafetyLevel;
29
- /**
30
- * Check if a string is a valid SafetyLevel.
31
- */
32
- export declare function isValidSafetyLevel(value: string): value is SafetyLevel;
33
- /**
34
- * Parse a string to a SafetyLevel, returning undefined for invalid values.
35
- * Accepts case-insensitive input and converts dashes to underscores.
36
- */
37
- export declare function parseSafetyLevelString(value: string | undefined): SafetyLevel | undefined;
38
- /**
39
- * Safety error thrown when an operation is blocked by safety configuration.
40
- */
41
- export declare class SafetyBlockedError extends Error {
42
- readonly method: string;
43
- readonly url: string;
44
- readonly safetyLevel: SafetyLevel;
45
- constructor(message: string, method: string, url: string, safetyLevel: SafetyLevel);
46
- }
47
- /**
48
- * Error thrown when an operation requires interactive confirmation.
49
- *
50
- * Callers can catch this error, prompt the user, and retry the operation
51
- * using {@link withSafetyConfirmation}.
52
- */
53
- export declare class SafetyConfirmationRequired extends Error {
54
- readonly evaluation: SafetyEvaluation;
55
- constructor(evaluation: SafetyEvaluation);
56
- }
57
- /**
58
- * Checks if an HTTP operation should be blocked based on a safety level.
59
- *
60
- * This is the low-level level check. For full rule-based evaluation,
61
- * use {@link SafetyGuard.evaluate}.
62
- *
63
- * @param method - HTTP method (GET, POST, PUT, PATCH, DELETE)
64
- * @param path - URL pathname
65
- * @param level - Safety level to check against
66
- * @returns Error message if blocked, undefined if allowed
67
- */
68
- export declare function checkLevelViolation(method: string, path: string, level: SafetyLevel): string | undefined;
69
- /**
70
- * Checks if an HTTP operation should be blocked based on safety configuration.
71
- *
72
- * @param method - HTTP method (GET, POST, PUT, PATCH, DELETE)
73
- * @param url - Request URL
74
- * @param config - Safety configuration
75
- * @returns Error message if blocked, undefined if allowed
76
- * @deprecated Use {@link SafetyGuard.evaluate} for full rule-based evaluation.
77
- */
78
- export declare function checkSafetyViolation(method: string, url: string, config: SafetyConfig): string | undefined;
79
- /**
80
- * Parse safety level from environment variable.
81
- *
82
- * Reads from SFCC_SAFETY_LEVEL. Valid values: NONE, NO_DELETE, NO_UPDATE, READ_ONLY
83
- * (case-insensitive; dashes converted to underscores). Invalid values are logged
84
- * as a warning and the default level is returned.
85
- *
86
- * @param defaultLevel - Default level if no environment variable is set or value is invalid
87
- * @returns Parsed safety level
88
- */
89
- export declare function getSafetyLevel(defaultLevel?: SafetyLevel): SafetyLevel;
90
- /**
91
- * Get a user-friendly description of the safety level.
92
- */
93
- export declare function describeSafetyLevel(level: SafetyLevel): string;
94
- /** Validated safety config fragment (shared by global and per-instance). */
95
- export interface SafetyConfigFragment {
96
- level?: SafetyLevel;
97
- confirm?: boolean;
98
- rules?: SafetyRule[];
99
- }
100
- /**
101
- * Load global safety configuration from a JSON file.
102
- *
103
- * Resolution order:
104
- * 1. `SFCC_SAFETY_CONFIG` env var — explicit path to a safety config file
105
- * 2. `{configDir}/safety.json` — oclif config directory (e.g., `~/.config/b2c/safety.json`)
106
- *
107
- * The file has the same shape as the `safety` object in dw.json:
108
- * ```json
109
- * { "level": "NO_DELETE", "confirm": true, "rules": [...] }
110
- * ```
111
- *
112
- * @param configDir - oclif config directory path (e.g., `this.config.configDir`)
113
- * @returns Validated safety config fragment, or undefined if no file found
114
- */
115
- export declare function loadGlobalSafetyConfig(configDir?: string): SafetyConfigFragment | undefined;
116
- /**
117
- * Compute effective safety config by merging environment variables, global
118
- * safety config, and per-instance config.
119
- *
120
- * Merge strategy:
121
- * - **Level**: `max(env, global, instance)` — most restrictive wins
122
- * - **Confirm**: OR across all sources
123
- * - **Rules**: instance rules first, then global rules (first-match-wins,
124
- * so instance rules can override global policy)
125
- *
126
- * @param instanceSafety - Per-instance safety config from dw.json
127
- * @param globalSafety - Global safety config from safety.json
128
- * @returns Merged SafetyConfig
129
- */
130
- export declare function resolveEffectiveSafetyConfig(instanceSafety?: SafetyConfigFragment, globalSafety?: SafetyConfigFragment): SafetyConfig;
@@ -1,248 +0,0 @@
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 { existsSync, readFileSync } from 'node:fs';
7
- import { join } from 'node:path';
8
- import { getLogger } from '../logging/logger.js';
9
- import { isValidSafetyAction } from './types.js';
10
- /**
11
- * Ordering of safety levels from least to most restrictive.
12
- */
13
- const LEVEL_ORDER = {
14
- NONE: 0,
15
- NO_DELETE: 1,
16
- NO_UPDATE: 2,
17
- READ_ONLY: 3,
18
- };
19
- /**
20
- * Valid safety level strings.
21
- */
22
- const VALID_LEVELS = ['NONE', 'NO_DELETE', 'NO_UPDATE', 'READ_ONLY'];
23
- /**
24
- * Returns the more restrictive of two safety levels.
25
- */
26
- export function maxSafetyLevel(a, b) {
27
- return LEVEL_ORDER[a] >= LEVEL_ORDER[b] ? a : b;
28
- }
29
- /**
30
- * Check if a string is a valid SafetyLevel.
31
- */
32
- export function isValidSafetyLevel(value) {
33
- return VALID_LEVELS.includes(value);
34
- }
35
- /**
36
- * Parse a string to a SafetyLevel, returning undefined for invalid values.
37
- * Accepts case-insensitive input and converts dashes to underscores.
38
- */
39
- export function parseSafetyLevelString(value) {
40
- if (!value)
41
- return undefined;
42
- const normalized = value.toUpperCase().replace(/-/g, '_');
43
- return isValidSafetyLevel(normalized) ? normalized : undefined;
44
- }
45
- /**
46
- * Safety error thrown when an operation is blocked by safety configuration.
47
- */
48
- export class SafetyBlockedError extends Error {
49
- method;
50
- url;
51
- safetyLevel;
52
- constructor(message, method, url, safetyLevel) {
53
- super(message);
54
- this.method = method;
55
- this.url = url;
56
- this.safetyLevel = safetyLevel;
57
- this.name = 'SafetyBlockedError';
58
- }
59
- }
60
- /**
61
- * Error thrown when an operation requires interactive confirmation.
62
- *
63
- * Callers can catch this error, prompt the user, and retry the operation
64
- * using {@link withSafetyConfirmation}.
65
- */
66
- export class SafetyConfirmationRequired extends Error {
67
- evaluation;
68
- constructor(evaluation) {
69
- super(`Confirmation required: ${evaluation.reason}`);
70
- this.evaluation = evaluation;
71
- this.name = 'SafetyConfirmationRequired';
72
- }
73
- }
74
- /**
75
- * Checks if an HTTP operation should be blocked based on a safety level.
76
- *
77
- * This is the low-level level check. For full rule-based evaluation,
78
- * use {@link SafetyGuard.evaluate}.
79
- *
80
- * @param method - HTTP method (GET, POST, PUT, PATCH, DELETE)
81
- * @param path - URL pathname
82
- * @param level - Safety level to check against
83
- * @returns Error message if blocked, undefined if allowed
84
- */
85
- export function checkLevelViolation(method, path, level) {
86
- const upperMethod = method.toUpperCase();
87
- switch (level) {
88
- case 'NONE':
89
- return undefined;
90
- case 'NO_DELETE':
91
- if (upperMethod === 'DELETE') {
92
- return `Delete operation blocked: DELETE ${path} (NO_DELETE mode prevents deletions)`;
93
- }
94
- return undefined;
95
- case 'NO_UPDATE': {
96
- if (upperMethod === 'DELETE') {
97
- return `Delete operation blocked: DELETE ${path} (NO_UPDATE mode prevents deletions)`;
98
- }
99
- const destructivePatterns = ['/reset', '/stop', '/restart', '/operations'];
100
- if (destructivePatterns.some((pattern) => path.includes(pattern)) && upperMethod === 'POST') {
101
- return `Destructive operation blocked: POST ${path} (NO_UPDATE mode prevents reset/stop/restart)`;
102
- }
103
- return undefined;
104
- }
105
- case 'READ_ONLY':
106
- if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(upperMethod)) {
107
- return `Write operation blocked: ${upperMethod} ${path} (READ_ONLY mode prevents all modifications)`;
108
- }
109
- return undefined;
110
- default:
111
- return undefined;
112
- }
113
- }
114
- /**
115
- * Checks if an HTTP operation should be blocked based on safety configuration.
116
- *
117
- * @param method - HTTP method (GET, POST, PUT, PATCH, DELETE)
118
- * @param url - Request URL
119
- * @param config - Safety configuration
120
- * @returns Error message if blocked, undefined if allowed
121
- * @deprecated Use {@link SafetyGuard.evaluate} for full rule-based evaluation.
122
- */
123
- export function checkSafetyViolation(method, url, config) {
124
- const path = new URL(url, 'http://dummy').pathname;
125
- return checkLevelViolation(method, path, config.level);
126
- }
127
- /**
128
- * Parse safety level from environment variable.
129
- *
130
- * Reads from SFCC_SAFETY_LEVEL. Valid values: NONE, NO_DELETE, NO_UPDATE, READ_ONLY
131
- * (case-insensitive; dashes converted to underscores). Invalid values are logged
132
- * as a warning and the default level is returned.
133
- *
134
- * @param defaultLevel - Default level if no environment variable is set or value is invalid
135
- * @returns Parsed safety level
136
- */
137
- export function getSafetyLevel(defaultLevel = 'NONE') {
138
- const safetyLevelEnv = process.env['SFCC_SAFETY_LEVEL'];
139
- if (safetyLevelEnv) {
140
- const parsed = parseSafetyLevelString(safetyLevelEnv);
141
- if (parsed)
142
- return parsed;
143
- getLogger().warn({ envValue: safetyLevelEnv, validValues: VALID_LEVELS }, 'SFCC_SAFETY_LEVEL has an invalid value; using default safety level');
144
- }
145
- return defaultLevel;
146
- }
147
- /**
148
- * Get a user-friendly description of the safety level.
149
- */
150
- export function describeSafetyLevel(level) {
151
- switch (level) {
152
- case 'NONE':
153
- return 'No safety restrictions';
154
- case 'NO_DELETE':
155
- return 'Delete operations blocked';
156
- case 'NO_UPDATE':
157
- return 'Destructive operations blocked (delete, reset, stop, restart)';
158
- case 'READ_ONLY':
159
- return 'Read-only mode - all write operations blocked';
160
- default:
161
- return 'Unknown safety level';
162
- }
163
- }
164
- /**
165
- * Load global safety configuration from a JSON file.
166
- *
167
- * Resolution order:
168
- * 1. `SFCC_SAFETY_CONFIG` env var — explicit path to a safety config file
169
- * 2. `{configDir}/safety.json` — oclif config directory (e.g., `~/.config/b2c/safety.json`)
170
- *
171
- * The file has the same shape as the `safety` object in dw.json:
172
- * ```json
173
- * { "level": "NO_DELETE", "confirm": true, "rules": [...] }
174
- * ```
175
- *
176
- * @param configDir - oclif config directory path (e.g., `this.config.configDir`)
177
- * @returns Validated safety config fragment, or undefined if no file found
178
- */
179
- export function loadGlobalSafetyConfig(configDir) {
180
- const logger = getLogger();
181
- // 1. Check SFCC_SAFETY_CONFIG env var
182
- const envPath = process.env['SFCC_SAFETY_CONFIG'];
183
- const filePath = envPath || (configDir ? join(configDir, 'safety.json') : undefined);
184
- if (!filePath || !existsSync(filePath)) {
185
- return undefined;
186
- }
187
- try {
188
- const raw = JSON.parse(readFileSync(filePath, 'utf-8'));
189
- const result = {};
190
- if (raw.level) {
191
- const parsed = parseSafetyLevelString(raw.level);
192
- if (parsed) {
193
- result.level = parsed;
194
- }
195
- else {
196
- logger.warn({ level: raw.level, file: filePath }, 'Invalid safety level in global safety config; ignoring');
197
- }
198
- }
199
- if (raw.confirm !== undefined) {
200
- result.confirm = raw.confirm === true;
201
- }
202
- if (raw.rules && Array.isArray(raw.rules)) {
203
- result.rules = raw.rules.filter((r) => {
204
- if (!isValidSafetyAction(r.action)) {
205
- logger.warn({ rule: r, file: filePath }, 'Invalid safety rule action in global safety config; skipping rule');
206
- return false;
207
- }
208
- return true;
209
- });
210
- }
211
- logger.trace({ filePath, level: result.level, ruleCount: result.rules?.length }, 'Loaded global safety config');
212
- return result;
213
- }
214
- catch (error) {
215
- logger.warn({ error, file: filePath }, 'Failed to load global safety config; ignoring');
216
- return undefined;
217
- }
218
- }
219
- /**
220
- * Compute effective safety config by merging environment variables, global
221
- * safety config, and per-instance config.
222
- *
223
- * Merge strategy:
224
- * - **Level**: `max(env, global, instance)` — most restrictive wins
225
- * - **Confirm**: OR across all sources
226
- * - **Rules**: instance rules first, then global rules (first-match-wins,
227
- * so instance rules can override global policy)
228
- *
229
- * @param instanceSafety - Per-instance safety config from dw.json
230
- * @param globalSafety - Global safety config from safety.json
231
- * @returns Merged SafetyConfig
232
- */
233
- export function resolveEffectiveSafetyConfig(instanceSafety, globalSafety) {
234
- const envLevel = getSafetyLevel('NONE');
235
- const envConfirm = process.env['SFCC_SAFETY_CONFIRM'] === 'true' || process.env['SFCC_SAFETY_CONFIRM'] === '1';
236
- const instanceLevel = instanceSafety?.level ?? 'NONE';
237
- const globalLevel = globalSafety?.level ?? 'NONE';
238
- // Merge rules: instance first, then global (first-match-wins)
239
- const instanceRules = instanceSafety?.rules ?? [];
240
- const globalRules = globalSafety?.rules ?? [];
241
- const mergedRules = [...instanceRules, ...globalRules];
242
- return {
243
- level: maxSafetyLevel(envLevel, maxSafetyLevel(globalLevel, instanceLevel)),
244
- confirm: envConfirm || instanceSafety?.confirm === true || globalSafety?.confirm === true,
245
- rules: mergedRules.length > 0 ? mergedRules : undefined,
246
- };
247
- }
248
- //# sourceMappingURL=safety-middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"safety-middleware.js","sourceRoot":"","sources":["../../../src/safety/safety-middleware.ts"],"names":[],"mappings":"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"}