@salesforce/b2c-tooling-sdk 1.10.0 → 1.11.1

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 (640) hide show
  1. package/data/content-schemas/componenttype.json +37 -0
  2. package/dist/esm/operations/content/validate.js +46 -4
  3. package/dist/esm/operations/content/validate.js.map +1 -1
  4. package/dist/esm/operations/jobs/site-archive.d.ts +12 -0
  5. package/dist/esm/operations/jobs/site-archive.js +107 -3
  6. package/dist/esm/operations/jobs/site-archive.js.map +1 -1
  7. package/dist/esm/skills/agents.js +1 -1
  8. package/dist/esm/skills/agents.js.map +1 -1
  9. package/package.json +73 -285
  10. package/dist/cjs/auth/api-key.d.ts +0 -28
  11. package/dist/cjs/auth/api-key.js +0 -45
  12. package/dist/cjs/auth/api-key.js.map +0 -1
  13. package/dist/cjs/auth/basic.d.ts +0 -7
  14. package/dist/cjs/auth/basic.js +0 -20
  15. package/dist/cjs/auth/basic.js.map +0 -1
  16. package/dist/cjs/auth/index.d.ts +0 -74
  17. package/dist/cjs/auth/index.js +0 -76
  18. package/dist/cjs/auth/index.js.map +0 -1
  19. package/dist/cjs/auth/jwt-utils.d.ts +0 -25
  20. package/dist/cjs/auth/jwt-utils.js +0 -66
  21. package/dist/cjs/auth/jwt-utils.js.map +0 -1
  22. package/dist/cjs/auth/middleware.d.ts +0 -196
  23. package/dist/cjs/auth/middleware.js +0 -190
  24. package/dist/cjs/auth/middleware.js.map +0 -1
  25. package/dist/cjs/auth/oauth-implicit.d.ts +0 -89
  26. package/dist/cjs/auth/oauth-implicit.js +0 -350
  27. package/dist/cjs/auth/oauth-implicit.js.map +0 -1
  28. package/dist/cjs/auth/oauth-jwt.d.ts +0 -99
  29. package/dist/cjs/auth/oauth-jwt.js +0 -343
  30. package/dist/cjs/auth/oauth-jwt.js.map +0 -1
  31. package/dist/cjs/auth/oauth.d.ts +0 -88
  32. package/dist/cjs/auth/oauth.js +0 -252
  33. package/dist/cjs/auth/oauth.js.map +0 -1
  34. package/dist/cjs/auth/resolve.d.ts +0 -100
  35. package/dist/cjs/auth/resolve.js +0 -175
  36. package/dist/cjs/auth/resolve.js.map +0 -1
  37. package/dist/cjs/auth/stateful-oauth-strategy.d.ts +0 -39
  38. package/dist/cjs/auth/stateful-oauth-strategy.js +0 -130
  39. package/dist/cjs/auth/stateful-oauth-strategy.js.map +0 -1
  40. package/dist/cjs/auth/stateful-store.d.ts +0 -49
  41. package/dist/cjs/auth/stateful-store.js +0 -166
  42. package/dist/cjs/auth/stateful-store.js.map +0 -1
  43. package/dist/cjs/auth/types.d.ts +0 -124
  44. package/dist/cjs/auth/types.js +0 -8
  45. package/dist/cjs/auth/types.js.map +0 -1
  46. package/dist/cjs/cli/am-command.d.ts +0 -74
  47. package/dist/cjs/cli/am-command.js +0 -199
  48. package/dist/cjs/cli/am-command.js.map +0 -1
  49. package/dist/cjs/cli/base-command.d.ts +0 -232
  50. package/dist/cjs/cli/base-command.js +0 -695
  51. package/dist/cjs/cli/base-command.js.map +0 -1
  52. package/dist/cjs/cli/cartridge-command.d.ts +0 -67
  53. package/dist/cjs/cli/cartridge-command.js +0 -146
  54. package/dist/cjs/cli/cartridge-command.js.map +0 -1
  55. package/dist/cjs/cli/cartridge-providers.d.ts +0 -149
  56. package/dist/cjs/cli/cartridge-providers.js +0 -103
  57. package/dist/cjs/cli/cartridge-providers.js.map +0 -1
  58. package/dist/cjs/cli/columns.d.ts +0 -128
  59. package/dist/cjs/cli/columns.js +0 -128
  60. package/dist/cjs/cli/columns.js.map +0 -1
  61. package/dist/cjs/cli/config.d.ts +0 -159
  62. package/dist/cjs/cli/config.js +0 -185
  63. package/dist/cjs/cli/config.js.map +0 -1
  64. package/dist/cjs/cli/details.d.ts +0 -69
  65. package/dist/cjs/cli/details.js +0 -72
  66. package/dist/cjs/cli/details.js.map +0 -1
  67. package/dist/cjs/cli/hooks.d.ts +0 -324
  68. package/dist/cjs/cli/hooks.js +0 -3
  69. package/dist/cjs/cli/hooks.js.map +0 -1
  70. package/dist/cjs/cli/index.d.ts +0 -108
  71. package/dist/cjs/cli/index.js +0 -111
  72. package/dist/cjs/cli/index.js.map +0 -1
  73. package/dist/cjs/cli/instance-command.d.ts +0 -131
  74. package/dist/cjs/cli/instance-command.js +0 -214
  75. package/dist/cjs/cli/instance-command.js.map +0 -1
  76. package/dist/cjs/cli/job-command.d.ts +0 -32
  77. package/dist/cjs/cli/job-command.js +0 -60
  78. package/dist/cjs/cli/job-command.js.map +0 -1
  79. package/dist/cjs/cli/lifecycle.d.ts +0 -189
  80. package/dist/cjs/cli/lifecycle.js +0 -130
  81. package/dist/cjs/cli/lifecycle.js.map +0 -1
  82. package/dist/cjs/cli/mrt-command.d.ts +0 -57
  83. package/dist/cjs/cli/mrt-command.js +0 -95
  84. package/dist/cjs/cli/mrt-command.js.map +0 -1
  85. package/dist/cjs/cli/oauth-command.d.ts +0 -122
  86. package/dist/cjs/cli/oauth-command.js +0 -311
  87. package/dist/cjs/cli/oauth-command.js.map +0 -1
  88. package/dist/cjs/cli/ods-command.d.ts +0 -97
  89. package/dist/cjs/cli/ods-command.js +0 -136
  90. package/dist/cjs/cli/ods-command.js.map +0 -1
  91. package/dist/cjs/cli/table.d.ts +0 -113
  92. package/dist/cjs/cli/table.js +0 -175
  93. package/dist/cjs/cli/table.js.map +0 -1
  94. package/dist/cjs/cli/webdav-command.d.ts +0 -110
  95. package/dist/cjs/cli/webdav-command.js +0 -106
  96. package/dist/cjs/cli/webdav-command.js.map +0 -1
  97. package/dist/cjs/clients/am-api.d.ts +0 -521
  98. package/dist/cjs/clients/am-api.js +0 -992
  99. package/dist/cjs/clients/am-api.js.map +0 -1
  100. package/dist/cjs/clients/am-apiclients-api.generated.d.ts +0 -803
  101. package/dist/cjs/clients/am-apiclients-api.generated.js +0 -6
  102. package/dist/cjs/clients/am-apiclients-api.generated.js.map +0 -1
  103. package/dist/cjs/clients/am-roles-api.generated.d.ts +0 -298
  104. package/dist/cjs/clients/am-roles-api.generated.js +0 -6
  105. package/dist/cjs/clients/am-roles-api.generated.js.map +0 -1
  106. package/dist/cjs/clients/am-users-api.generated.d.ts +0 -954
  107. package/dist/cjs/clients/am-users-api.generated.js +0 -6
  108. package/dist/cjs/clients/am-users-api.generated.js.map +0 -1
  109. package/dist/cjs/clients/cdn-zones.d.ts +0 -186
  110. package/dist/cjs/clients/cdn-zones.generated.d.ts +0 -8330
  111. package/dist/cjs/clients/cdn-zones.generated.js +0 -6
  112. package/dist/cjs/clients/cdn-zones.generated.js.map +0 -1
  113. package/dist/cjs/clients/cdn-zones.js +0 -103
  114. package/dist/cjs/clients/cdn-zones.js.map +0 -1
  115. package/dist/cjs/clients/cip.d.ts +0 -162
  116. package/dist/cjs/clients/cip.js +0 -572
  117. package/dist/cjs/clients/cip.js.map +0 -1
  118. package/dist/cjs/clients/custom-apis.d.ts +0 -174
  119. package/dist/cjs/clients/custom-apis.generated.d.ts +0 -202
  120. package/dist/cjs/clients/custom-apis.generated.js +0 -6
  121. package/dist/cjs/clients/custom-apis.generated.js.map +0 -1
  122. package/dist/cjs/clients/custom-apis.js +0 -140
  123. package/dist/cjs/clients/custom-apis.js.map +0 -1
  124. package/dist/cjs/clients/error-utils.d.ts +0 -35
  125. package/dist/cjs/clients/error-utils.js +0 -69
  126. package/dist/cjs/clients/error-utils.js.map +0 -1
  127. package/dist/cjs/clients/granular-replications.d.ts +0 -70
  128. package/dist/cjs/clients/granular-replications.generated.d.ts +0 -416
  129. package/dist/cjs/clients/granular-replications.generated.js +0 -6
  130. package/dist/cjs/clients/granular-replications.generated.js.map +0 -1
  131. package/dist/cjs/clients/granular-replications.js +0 -73
  132. package/dist/cjs/clients/granular-replications.js.map +0 -1
  133. package/dist/cjs/clients/index.d.ts +0 -145
  134. package/dist/cjs/clients/index.js +0 -137
  135. package/dist/cjs/clients/index.js.map +0 -1
  136. package/dist/cjs/clients/middleware-registry.d.ts +0 -184
  137. package/dist/cjs/clients/middleware-registry.js +0 -104
  138. package/dist/cjs/clients/middleware-registry.js.map +0 -1
  139. package/dist/cjs/clients/middleware.d.ts +0 -183
  140. package/dist/cjs/clients/middleware.js +0 -465
  141. package/dist/cjs/clients/middleware.js.map +0 -1
  142. package/dist/cjs/clients/mrt-b2c.d.ts +0 -138
  143. package/dist/cjs/clients/mrt-b2c.generated.d.ts +0 -176
  144. package/dist/cjs/clients/mrt-b2c.generated.js +0 -6
  145. package/dist/cjs/clients/mrt-b2c.generated.js.map +0 -1
  146. package/dist/cjs/clients/mrt-b2c.js +0 -86
  147. package/dist/cjs/clients/mrt-b2c.js.map +0 -1
  148. package/dist/cjs/clients/mrt.d.ts +0 -143
  149. package/dist/cjs/clients/mrt.generated.d.ts +0 -3806
  150. package/dist/cjs/clients/mrt.generated.js +0 -6
  151. package/dist/cjs/clients/mrt.generated.js.map +0 -1
  152. package/dist/cjs/clients/mrt.js +0 -93
  153. package/dist/cjs/clients/mrt.js.map +0 -1
  154. package/dist/cjs/clients/ocapi.d.ts +0 -128
  155. package/dist/cjs/clients/ocapi.generated.d.ts +0 -26052
  156. package/dist/cjs/clients/ocapi.generated.js +0 -6
  157. package/dist/cjs/clients/ocapi.generated.js.map +0 -1
  158. package/dist/cjs/clients/ocapi.js +0 -78
  159. package/dist/cjs/clients/ocapi.js.map +0 -1
  160. package/dist/cjs/clients/ods.d.ts +0 -160
  161. package/dist/cjs/clients/ods.generated.d.ts +0 -2860
  162. package/dist/cjs/clients/ods.generated.js +0 -6
  163. package/dist/cjs/clients/ods.generated.js.map +0 -1
  164. package/dist/cjs/clients/ods.js +0 -103
  165. package/dist/cjs/clients/ods.js.map +0 -1
  166. package/dist/cjs/clients/scapi-schemas.d.ts +0 -161
  167. package/dist/cjs/clients/scapi-schemas.generated.d.ts +0 -328
  168. package/dist/cjs/clients/scapi-schemas.generated.js +0 -6
  169. package/dist/cjs/clients/scapi-schemas.generated.js.map +0 -1
  170. package/dist/cjs/clients/scapi-schemas.js +0 -98
  171. package/dist/cjs/clients/scapi-schemas.js.map +0 -1
  172. package/dist/cjs/clients/slas-admin.d.ts +0 -132
  173. package/dist/cjs/clients/slas-admin.generated.d.ts +0 -1434
  174. package/dist/cjs/clients/slas-admin.generated.js +0 -6
  175. package/dist/cjs/clients/slas-admin.generated.js.map +0 -1
  176. package/dist/cjs/clients/slas-admin.js +0 -79
  177. package/dist/cjs/clients/slas-admin.js.map +0 -1
  178. package/dist/cjs/clients/tls-dispatcher.d.ts +0 -42
  179. package/dist/cjs/clients/tls-dispatcher.js +0 -107
  180. package/dist/cjs/clients/tls-dispatcher.js.map +0 -1
  181. package/dist/cjs/clients/user-agent.d.ts +0 -43
  182. package/dist/cjs/clients/user-agent.js +0 -87
  183. package/dist/cjs/clients/user-agent.js.map +0 -1
  184. package/dist/cjs/clients/webdav.d.ts +0 -186
  185. package/dist/cjs/clients/webdav.js +0 -395
  186. package/dist/cjs/clients/webdav.js.map +0 -1
  187. package/dist/cjs/config/config-source-registry.d.ts +0 -115
  188. package/dist/cjs/config/config-source-registry.js +0 -103
  189. package/dist/cjs/config/config-source-registry.js.map +0 -1
  190. package/dist/cjs/config/dw-json.d.ts +0 -274
  191. package/dist/cjs/config/dw-json.js +0 -333
  192. package/dist/cjs/config/dw-json.js.map +0 -1
  193. package/dist/cjs/config/index.d.ts +0 -100
  194. package/dist/cjs/config/index.js +0 -110
  195. package/dist/cjs/config/index.js.map +0 -1
  196. package/dist/cjs/config/instance-manager.d.ts +0 -97
  197. package/dist/cjs/config/instance-manager.js +0 -166
  198. package/dist/cjs/config/instance-manager.js.map +0 -1
  199. package/dist/cjs/config/mapping.d.ts +0 -199
  200. package/dist/cjs/config/mapping.js +0 -540
  201. package/dist/cjs/config/mapping.js.map +0 -1
  202. package/dist/cjs/config/resolved-config.d.ts +0 -29
  203. package/dist/cjs/config/resolved-config.js +0 -81
  204. package/dist/cjs/config/resolved-config.js.map +0 -1
  205. package/dist/cjs/config/resolver.d.ts +0 -191
  206. package/dist/cjs/config/resolver.js +0 -406
  207. package/dist/cjs/config/resolver.js.map +0 -1
  208. package/dist/cjs/config/sources/dw-json-source.d.ts +0 -27
  209. package/dist/cjs/config/sources/dw-json-source.js +0 -106
  210. package/dist/cjs/config/sources/dw-json-source.js.map +0 -1
  211. package/dist/cjs/config/sources/env-source.d.ts +0 -32
  212. package/dist/cjs/config/sources/env-source.js +0 -116
  213. package/dist/cjs/config/sources/env-source.js.map +0 -1
  214. package/dist/cjs/config/sources/index.d.ts +0 -9
  215. package/dist/cjs/config/sources/index.js +0 -15
  216. package/dist/cjs/config/sources/index.js.map +0 -1
  217. package/dist/cjs/config/sources/mobify-source.d.ts +0 -25
  218. package/dist/cjs/config/sources/mobify-source.js +0 -84
  219. package/dist/cjs/config/sources/mobify-source.js.map +0 -1
  220. package/dist/cjs/config/sources/package-json-source.d.ts +0 -14
  221. package/dist/cjs/config/sources/package-json-source.js +0 -97
  222. package/dist/cjs/config/sources/package-json-source.js.map +0 -1
  223. package/dist/cjs/config/types.d.ts +0 -428
  224. package/dist/cjs/config/types.js +0 -2
  225. package/dist/cjs/config/types.js.map +0 -1
  226. package/dist/cjs/defaults.d.ts +0 -36
  227. package/dist/cjs/defaults.js +0 -54
  228. package/dist/cjs/defaults.js.map +0 -1
  229. package/dist/cjs/discovery/detector.d.ts +0 -75
  230. package/dist/cjs/discovery/detector.js +0 -108
  231. package/dist/cjs/discovery/detector.js.map +0 -1
  232. package/dist/cjs/discovery/index.d.ts +0 -63
  233. package/dist/cjs/discovery/index.js +0 -70
  234. package/dist/cjs/discovery/index.js.map +0 -1
  235. package/dist/cjs/discovery/patterns/cartridges.d.ts +0 -16
  236. package/dist/cjs/discovery/patterns/cartridges.js +0 -16
  237. package/dist/cjs/discovery/patterns/cartridges.js.map +0 -1
  238. package/dist/cjs/discovery/patterns/index.d.ts +0 -21
  239. package/dist/cjs/discovery/patterns/index.js +0 -16
  240. package/dist/cjs/discovery/patterns/index.js.map +0 -1
  241. package/dist/cjs/discovery/patterns/pwa-kit.d.ts +0 -15
  242. package/dist/cjs/discovery/patterns/pwa-kit.js +0 -26
  243. package/dist/cjs/discovery/patterns/pwa-kit.js.map +0 -1
  244. package/dist/cjs/discovery/patterns/sfra.d.ts +0 -34
  245. package/dist/cjs/discovery/patterns/sfra.js +0 -50
  246. package/dist/cjs/discovery/patterns/sfra.js.map +0 -1
  247. package/dist/cjs/discovery/patterns/storefront-next.d.ts +0 -10
  248. package/dist/cjs/discovery/patterns/storefront-next.js +0 -65
  249. package/dist/cjs/discovery/patterns/storefront-next.js.map +0 -1
  250. package/dist/cjs/discovery/types.d.ts +0 -47
  251. package/dist/cjs/discovery/types.js +0 -12
  252. package/dist/cjs/discovery/types.js.map +0 -1
  253. package/dist/cjs/discovery/utils.d.ts +0 -44
  254. package/dist/cjs/discovery/utils.js +0 -82
  255. package/dist/cjs/discovery/utils.js.map +0 -1
  256. package/dist/cjs/docs/download.d.ts +0 -45
  257. package/dist/cjs/docs/download.js +0 -96
  258. package/dist/cjs/docs/download.js.map +0 -1
  259. package/dist/cjs/docs/index.d.ts +0 -44
  260. package/dist/cjs/docs/index.js +0 -12
  261. package/dist/cjs/docs/index.js.map +0 -1
  262. package/dist/cjs/docs/schema.d.ts +0 -26
  263. package/dist/cjs/docs/schema.js +0 -92
  264. package/dist/cjs/docs/schema.js.map +0 -1
  265. package/dist/cjs/docs/search.d.ts +0 -67
  266. package/dist/cjs/docs/search.js +0 -128
  267. package/dist/cjs/docs/search.js.map +0 -1
  268. package/dist/cjs/docs/types.d.ts +0 -64
  269. package/dist/cjs/docs/types.js +0 -15
  270. package/dist/cjs/docs/types.js.map +0 -1
  271. package/dist/cjs/errors/http-error.d.ts +0 -34
  272. package/dist/cjs/errors/http-error.js +0 -45
  273. package/dist/cjs/errors/http-error.js.map +0 -1
  274. package/dist/cjs/errors/index.d.ts +0 -12
  275. package/dist/cjs/errors/index.js +0 -18
  276. package/dist/cjs/errors/index.js.map +0 -1
  277. package/dist/cjs/i18n/index.d.ts +0 -144
  278. package/dist/cjs/i18n/index.js +0 -245
  279. package/dist/cjs/i18n/index.js.map +0 -1
  280. package/dist/cjs/i18n/locales/de.d.ts +0 -13
  281. package/dist/cjs/i18n/locales/de.js +0 -19
  282. package/dist/cjs/i18n/locales/de.js.map +0 -1
  283. package/dist/cjs/i18n/locales/index.d.ts +0 -28
  284. package/dist/cjs/i18n/locales/index.js +0 -25
  285. package/dist/cjs/i18n/locales/index.js.map +0 -1
  286. package/dist/cjs/index.d.ts +0 -33
  287. package/dist/cjs/index.js +0 -41
  288. package/dist/cjs/index.js.map +0 -1
  289. package/dist/cjs/instance/index.d.ts +0 -136
  290. package/dist/cjs/instance/index.js +0 -131
  291. package/dist/cjs/instance/index.js.map +0 -1
  292. package/dist/cjs/logging/index.d.ts +0 -116
  293. package/dist/cjs/logging/index.js +0 -121
  294. package/dist/cjs/logging/index.js.map +0 -1
  295. package/dist/cjs/logging/logger.d.ts +0 -9
  296. package/dist/cjs/logging/logger.js +0 -138
  297. package/dist/cjs/logging/logger.js.map +0 -1
  298. package/dist/cjs/logging/types.d.ts +0 -45
  299. package/dist/cjs/logging/types.js +0 -10
  300. package/dist/cjs/logging/types.js.map +0 -1
  301. package/dist/cjs/operations/bm-roles/index.d.ts +0 -52
  302. package/dist/cjs/operations/bm-roles/index.js +0 -57
  303. package/dist/cjs/operations/bm-roles/index.js.map +0 -1
  304. package/dist/cjs/operations/bm-roles/roles.d.ts +0 -155
  305. package/dist/cjs/operations/bm-roles/roles.js +0 -194
  306. package/dist/cjs/operations/bm-roles/roles.js.map +0 -1
  307. package/dist/cjs/operations/bm-users/index.d.ts +0 -50
  308. package/dist/cjs/operations/bm-users/index.js +0 -55
  309. package/dist/cjs/operations/bm-users/index.js.map +0 -1
  310. package/dist/cjs/operations/bm-users/users.d.ts +0 -189
  311. package/dist/cjs/operations/bm-users/users.js +0 -229
  312. package/dist/cjs/operations/bm-users/users.js.map +0 -1
  313. package/dist/cjs/operations/cap/index.d.ts +0 -56
  314. package/dist/cjs/operations/cap/index.js +0 -57
  315. package/dist/cjs/operations/cap/index.js.map +0 -1
  316. package/dist/cjs/operations/cap/install.d.ts +0 -53
  317. package/dist/cjs/operations/cap/install.js +0 -181
  318. package/dist/cjs/operations/cap/install.js.map +0 -1
  319. package/dist/cjs/operations/cap/list.d.ts +0 -92
  320. package/dist/cjs/operations/cap/list.js +0 -230
  321. package/dist/cjs/operations/cap/list.js.map +0 -1
  322. package/dist/cjs/operations/cap/package.d.ts +0 -39
  323. package/dist/cjs/operations/cap/package.js +0 -77
  324. package/dist/cjs/operations/cap/package.js.map +0 -1
  325. package/dist/cjs/operations/cap/pull.d.ts +0 -21
  326. package/dist/cjs/operations/cap/pull.js +0 -77
  327. package/dist/cjs/operations/cap/pull.js.map +0 -1
  328. package/dist/cjs/operations/cap/uninstall.d.ts +0 -46
  329. package/dist/cjs/operations/cap/uninstall.js +0 -87
  330. package/dist/cjs/operations/cap/uninstall.js.map +0 -1
  331. package/dist/cjs/operations/cap/validate.d.ts +0 -47
  332. package/dist/cjs/operations/cap/validate.js +0 -235
  333. package/dist/cjs/operations/cap/validate.js.map +0 -1
  334. package/dist/cjs/operations/cip/index.d.ts +0 -35
  335. package/dist/cjs/operations/cip/index.js +0 -128
  336. package/dist/cjs/operations/cip/index.js.map +0 -1
  337. package/dist/cjs/operations/cip/reports.d.ts +0 -2
  338. package/dist/cjs/operations/cip/reports.js +0 -210
  339. package/dist/cjs/operations/cip/reports.js.map +0 -1
  340. package/dist/cjs/operations/cip/types.d.ts +0 -97
  341. package/dist/cjs/operations/cip/types.js +0 -7
  342. package/dist/cjs/operations/cip/types.js.map +0 -1
  343. package/dist/cjs/operations/code/cartridges.d.ts +0 -46
  344. package/dist/cjs/operations/code/cartridges.js +0 -69
  345. package/dist/cjs/operations/code/cartridges.js.map +0 -1
  346. package/dist/cjs/operations/code/deploy.d.ts +0 -121
  347. package/dist/cjs/operations/code/deploy.js +0 -255
  348. package/dist/cjs/operations/code/deploy.js.map +0 -1
  349. package/dist/cjs/operations/code/download.d.ts +0 -77
  350. package/dist/cjs/operations/code/download.js +0 -300
  351. package/dist/cjs/operations/code/download.js.map +0 -1
  352. package/dist/cjs/operations/code/index.d.ts +0 -74
  353. package/dist/cjs/operations/code/index.js +0 -80
  354. package/dist/cjs/operations/code/index.js.map +0 -1
  355. package/dist/cjs/operations/code/upload-files.d.ts +0 -47
  356. package/dist/cjs/operations/code/upload-files.js +0 -116
  357. package/dist/cjs/operations/code/upload-files.js.map +0 -1
  358. package/dist/cjs/operations/code/versions.d.ts +0 -99
  359. package/dist/cjs/operations/code/versions.js +0 -156
  360. package/dist/cjs/operations/code/versions.js.map +0 -1
  361. package/dist/cjs/operations/code/watch.d.ts +0 -58
  362. package/dist/cjs/operations/code/watch.js +0 -175
  363. package/dist/cjs/operations/code/watch.js.map +0 -1
  364. package/dist/cjs/operations/content/asset-query.d.ts +0 -22
  365. package/dist/cjs/operations/content/asset-query.js +0 -77
  366. package/dist/cjs/operations/content/asset-query.js.map +0 -1
  367. package/dist/cjs/operations/content/export.d.ts +0 -57
  368. package/dist/cjs/operations/content/export.js +0 -221
  369. package/dist/cjs/operations/content/export.js.map +0 -1
  370. package/dist/cjs/operations/content/index.d.ts +0 -56
  371. package/dist/cjs/operations/content/index.js +0 -60
  372. package/dist/cjs/operations/content/index.js.map +0 -1
  373. package/dist/cjs/operations/content/library.d.ts +0 -137
  374. package/dist/cjs/operations/content/library.js +0 -396
  375. package/dist/cjs/operations/content/library.js.map +0 -1
  376. package/dist/cjs/operations/content/types.d.ts +0 -144
  377. package/dist/cjs/operations/content/types.js +0 -7
  378. package/dist/cjs/operations/content/types.js.map +0 -1
  379. package/dist/cjs/operations/content/validate.d.ts +0 -64
  380. package/dist/cjs/operations/content/validate.js +0 -170
  381. package/dist/cjs/operations/content/validate.js.map +0 -1
  382. package/dist/cjs/operations/debug/dap-adapter.d.ts +0 -72
  383. package/dist/cjs/operations/debug/dap-adapter.js +0 -505
  384. package/dist/cjs/operations/debug/dap-adapter.js.map +0 -1
  385. package/dist/cjs/operations/debug/debug-session.d.ts +0 -51
  386. package/dist/cjs/operations/debug/debug-session.js +0 -234
  387. package/dist/cjs/operations/debug/debug-session.js.map +0 -1
  388. package/dist/cjs/operations/debug/index.d.ts +0 -20
  389. package/dist/cjs/operations/debug/index.js +0 -21
  390. package/dist/cjs/operations/debug/index.js.map +0 -1
  391. package/dist/cjs/operations/debug/projections.d.ts +0 -72
  392. package/dist/cjs/operations/debug/projections.js +0 -84
  393. package/dist/cjs/operations/debug/projections.js.map +0 -1
  394. package/dist/cjs/operations/debug/resolve-path.d.ts +0 -15
  395. package/dist/cjs/operations/debug/resolve-path.js +0 -52
  396. package/dist/cjs/operations/debug/resolve-path.js.map +0 -1
  397. package/dist/cjs/operations/debug/sdapi-client.d.ts +0 -44
  398. package/dist/cjs/operations/debug/sdapi-client.js +0 -169
  399. package/dist/cjs/operations/debug/sdapi-client.js.map +0 -1
  400. package/dist/cjs/operations/debug/source-mapping.d.ts +0 -13
  401. package/dist/cjs/operations/debug/source-mapping.js +0 -57
  402. package/dist/cjs/operations/debug/source-mapping.js.map +0 -1
  403. package/dist/cjs/operations/debug/types.d.ts +0 -95
  404. package/dist/cjs/operations/debug/types.js +0 -2
  405. package/dist/cjs/operations/debug/types.js.map +0 -1
  406. package/dist/cjs/operations/debug/variable-store.d.ts +0 -35
  407. package/dist/cjs/operations/debug/variable-store.js +0 -52
  408. package/dist/cjs/operations/debug/variable-store.js.map +0 -1
  409. package/dist/cjs/operations/jobs/index.d.ts +0 -66
  410. package/dist/cjs/operations/jobs/index.js +0 -72
  411. package/dist/cjs/operations/jobs/index.js.map +0 -1
  412. package/dist/cjs/operations/jobs/run.d.ts +0 -239
  413. package/dist/cjs/operations/jobs/run.js +0 -324
  414. package/dist/cjs/operations/jobs/run.js.map +0 -1
  415. package/dist/cjs/operations/jobs/site-archive.d.ts +0 -267
  416. package/dist/cjs/operations/jobs/site-archive.js +0 -423
  417. package/dist/cjs/operations/jobs/site-archive.js.map +0 -1
  418. package/dist/cjs/operations/logs/index.d.ts +0 -65
  419. package/dist/cjs/operations/logs/index.js +0 -73
  420. package/dist/cjs/operations/logs/index.js.map +0 -1
  421. package/dist/cjs/operations/logs/list.d.ts +0 -35
  422. package/dist/cjs/operations/logs/list.js +0 -144
  423. package/dist/cjs/operations/logs/list.js.map +0 -1
  424. package/dist/cjs/operations/logs/path-normalizer.d.ts +0 -82
  425. package/dist/cjs/operations/logs/path-normalizer.js +0 -190
  426. package/dist/cjs/operations/logs/path-normalizer.js.map +0 -1
  427. package/dist/cjs/operations/logs/tail.d.ts +0 -92
  428. package/dist/cjs/operations/logs/tail.js +0 -525
  429. package/dist/cjs/operations/logs/tail.js.map +0 -1
  430. package/dist/cjs/operations/logs/types.d.ts +0 -132
  431. package/dist/cjs/operations/logs/types.js +0 -7
  432. package/dist/cjs/operations/logs/types.js.map +0 -1
  433. package/dist/cjs/operations/mrt/access-control.d.ts +0 -192
  434. package/dist/cjs/operations/mrt/access-control.js +0 -152
  435. package/dist/cjs/operations/mrt/access-control.js.map +0 -1
  436. package/dist/cjs/operations/mrt/b2c-config.d.ts +0 -201
  437. package/dist/cjs/operations/mrt/b2c-config.js +0 -210
  438. package/dist/cjs/operations/mrt/b2c-config.js.map +0 -1
  439. package/dist/cjs/operations/mrt/bundle.d.ts +0 -114
  440. package/dist/cjs/operations/mrt/bundle.js +0 -166
  441. package/dist/cjs/operations/mrt/bundle.js.map +0 -1
  442. package/dist/cjs/operations/mrt/cache.d.ts +0 -80
  443. package/dist/cjs/operations/mrt/cache.js +0 -65
  444. package/dist/cjs/operations/mrt/cache.js.map +0 -1
  445. package/dist/cjs/operations/mrt/certificate.d.ts +0 -60
  446. package/dist/cjs/operations/mrt/certificate.js +0 -76
  447. package/dist/cjs/operations/mrt/certificate.js.map +0 -1
  448. package/dist/cjs/operations/mrt/deployment.d.ts +0 -157
  449. package/dist/cjs/operations/mrt/deployment.js +0 -109
  450. package/dist/cjs/operations/mrt/deployment.js.map +0 -1
  451. package/dist/cjs/operations/mrt/env-var.d.ts +0 -176
  452. package/dist/cjs/operations/mrt/env-var.js +0 -231
  453. package/dist/cjs/operations/mrt/env-var.js.map +0 -1
  454. package/dist/cjs/operations/mrt/env.d.ts +0 -491
  455. package/dist/cjs/operations/mrt/env.js +0 -425
  456. package/dist/cjs/operations/mrt/env.js.map +0 -1
  457. package/dist/cjs/operations/mrt/index.d.ts +0 -75
  458. package/dist/cjs/operations/mrt/index.js +0 -81
  459. package/dist/cjs/operations/mrt/index.js.map +0 -1
  460. package/dist/cjs/operations/mrt/member.d.ts +0 -281
  461. package/dist/cjs/operations/mrt/member.js +0 -244
  462. package/dist/cjs/operations/mrt/member.js.map +0 -1
  463. package/dist/cjs/operations/mrt/notification.d.ts +0 -252
  464. package/dist/cjs/operations/mrt/notification.js +0 -206
  465. package/dist/cjs/operations/mrt/notification.js.map +0 -1
  466. package/dist/cjs/operations/mrt/organization-member.d.ts +0 -68
  467. package/dist/cjs/operations/mrt/organization-member.js +0 -88
  468. package/dist/cjs/operations/mrt/organization-member.js.map +0 -1
  469. package/dist/cjs/operations/mrt/organization.d.ts +0 -80
  470. package/dist/cjs/operations/mrt/organization.js +0 -53
  471. package/dist/cjs/operations/mrt/organization.js.map +0 -1
  472. package/dist/cjs/operations/mrt/project.d.ts +0 -261
  473. package/dist/cjs/operations/mrt/project.js +0 -232
  474. package/dist/cjs/operations/mrt/project.js.map +0 -1
  475. package/dist/cjs/operations/mrt/push.d.ts +0 -290
  476. package/dist/cjs/operations/mrt/push.js +0 -288
  477. package/dist/cjs/operations/mrt/push.js.map +0 -1
  478. package/dist/cjs/operations/mrt/redirect.d.ts +0 -337
  479. package/dist/cjs/operations/mrt/redirect.js +0 -256
  480. package/dist/cjs/operations/mrt/redirect.js.map +0 -1
  481. package/dist/cjs/operations/mrt/tail-logs.d.ts +0 -130
  482. package/dist/cjs/operations/mrt/tail-logs.js +0 -224
  483. package/dist/cjs/operations/mrt/tail-logs.js.map +0 -1
  484. package/dist/cjs/operations/mrt/user.d.ts +0 -135
  485. package/dist/cjs/operations/mrt/user.js +0 -153
  486. package/dist/cjs/operations/mrt/user.js.map +0 -1
  487. package/dist/cjs/operations/ods/index.d.ts +0 -10
  488. package/dist/cjs/operations/ods/index.js +0 -14
  489. package/dist/cjs/operations/ods/index.js.map +0 -1
  490. package/dist/cjs/operations/ods/sandbox-lookup.d.ts +0 -63
  491. package/dist/cjs/operations/ods/sandbox-lookup.js +0 -130
  492. package/dist/cjs/operations/ods/sandbox-lookup.js.map +0 -1
  493. package/dist/cjs/operations/ods/wait-for-clone.d.ts +0 -46
  494. package/dist/cjs/operations/ods/wait-for-clone.js +0 -100
  495. package/dist/cjs/operations/ods/wait-for-clone.js.map +0 -1
  496. package/dist/cjs/operations/ods/wait-for-sandbox.d.ts +0 -64
  497. package/dist/cjs/operations/ods/wait-for-sandbox.js +0 -114
  498. package/dist/cjs/operations/ods/wait-for-sandbox.js.map +0 -1
  499. package/dist/cjs/operations/orgs/index.d.ts +0 -74
  500. package/dist/cjs/operations/orgs/index.js +0 -33
  501. package/dist/cjs/operations/orgs/index.js.map +0 -1
  502. package/dist/cjs/operations/roles/index.d.ts +0 -43
  503. package/dist/cjs/operations/roles/index.js +0 -48
  504. package/dist/cjs/operations/roles/index.js.map +0 -1
  505. package/dist/cjs/operations/sites/cartridges.d.ts +0 -114
  506. package/dist/cjs/operations/sites/cartridges.js +0 -378
  507. package/dist/cjs/operations/sites/cartridges.js.map +0 -1
  508. package/dist/cjs/operations/sites/index.d.ts +0 -46
  509. package/dist/cjs/operations/sites/index.js +0 -51
  510. package/dist/cjs/operations/sites/index.js.map +0 -1
  511. package/dist/cjs/operations/users/index.d.ts +0 -153
  512. package/dist/cjs/operations/users/index.js +0 -139
  513. package/dist/cjs/operations/users/index.js.map +0 -1
  514. package/dist/cjs/operations/util/zip.d.ts +0 -5
  515. package/dist/cjs/operations/util/zip.js +0 -25
  516. package/dist/cjs/operations/util/zip.js.map +0 -1
  517. package/dist/cjs/package.json +0 -1
  518. package/dist/cjs/plugins/discovery.d.ts +0 -46
  519. package/dist/cjs/plugins/discovery.js +0 -122
  520. package/dist/cjs/plugins/discovery.js.map +0 -1
  521. package/dist/cjs/plugins/index.d.ts +0 -26
  522. package/dist/cjs/plugins/index.js +0 -32
  523. package/dist/cjs/plugins/index.js.map +0 -1
  524. package/dist/cjs/plugins/loader.d.ts +0 -34
  525. package/dist/cjs/plugins/loader.js +0 -59
  526. package/dist/cjs/plugins/loader.js.map +0 -1
  527. package/dist/cjs/plugins/manager.d.ts +0 -70
  528. package/dist/cjs/plugins/manager.js +0 -173
  529. package/dist/cjs/plugins/manager.js.map +0 -1
  530. package/dist/cjs/safety/index.d.ts +0 -12
  531. package/dist/cjs/safety/index.js +0 -11
  532. package/dist/cjs/safety/index.js.map +0 -1
  533. package/dist/cjs/safety/safety-guard.d.ts +0 -92
  534. package/dist/cjs/safety/safety-guard.js +0 -270
  535. package/dist/cjs/safety/safety-guard.js.map +0 -1
  536. package/dist/cjs/safety/safety-middleware.d.ts +0 -130
  537. package/dist/cjs/safety/safety-middleware.js +0 -248
  538. package/dist/cjs/safety/safety-middleware.js.map +0 -1
  539. package/dist/cjs/safety/types.d.ts +0 -81
  540. package/dist/cjs/safety/types.js +0 -16
  541. package/dist/cjs/safety/types.js.map +0 -1
  542. package/dist/cjs/safety/with-confirmation.d.ts +0 -58
  543. package/dist/cjs/safety/with-confirmation.js +0 -67
  544. package/dist/cjs/safety/with-confirmation.js.map +0 -1
  545. package/dist/cjs/scaffold/engine.d.ts +0 -68
  546. package/dist/cjs/scaffold/engine.js +0 -149
  547. package/dist/cjs/scaffold/engine.js.map +0 -1
  548. package/dist/cjs/scaffold/executor.d.ts +0 -36
  549. package/dist/cjs/scaffold/executor.js +0 -293
  550. package/dist/cjs/scaffold/executor.js.map +0 -1
  551. package/dist/cjs/scaffold/index.d.ts +0 -76
  552. package/dist/cjs/scaffold/index.js +0 -23
  553. package/dist/cjs/scaffold/index.js.map +0 -1
  554. package/dist/cjs/scaffold/merge.d.ts +0 -63
  555. package/dist/cjs/scaffold/merge.js +0 -192
  556. package/dist/cjs/scaffold/merge.js.map +0 -1
  557. package/dist/cjs/scaffold/parameter-resolver.d.ts +0 -86
  558. package/dist/cjs/scaffold/parameter-resolver.js +0 -191
  559. package/dist/cjs/scaffold/parameter-resolver.js.map +0 -1
  560. package/dist/cjs/scaffold/registry.d.ts +0 -60
  561. package/dist/cjs/scaffold/registry.js +0 -225
  562. package/dist/cjs/scaffold/registry.js.map +0 -1
  563. package/dist/cjs/scaffold/sources.d.ts +0 -83
  564. package/dist/cjs/scaffold/sources.js +0 -236
  565. package/dist/cjs/scaffold/sources.js.map +0 -1
  566. package/dist/cjs/scaffold/types.d.ts +0 -282
  567. package/dist/cjs/scaffold/types.js +0 -14
  568. package/dist/cjs/scaffold/types.js.map +0 -1
  569. package/dist/cjs/scaffold/validation.d.ts +0 -81
  570. package/dist/cjs/scaffold/validation.js +0 -250
  571. package/dist/cjs/scaffold/validation.js.map +0 -1
  572. package/dist/cjs/scaffold/validators.d.ts +0 -33
  573. package/dist/cjs/scaffold/validators.js +0 -340
  574. package/dist/cjs/scaffold/validators.js.map +0 -1
  575. package/dist/cjs/schemas/collapse.d.ts +0 -150
  576. package/dist/cjs/schemas/collapse.js +0 -180
  577. package/dist/cjs/schemas/collapse.js.map +0 -1
  578. package/dist/cjs/schemas/index.d.ts +0 -58
  579. package/dist/cjs/schemas/index.js +0 -65
  580. package/dist/cjs/schemas/index.js.map +0 -1
  581. package/dist/cjs/schemas/security-schemes.d.ts +0 -26
  582. package/dist/cjs/schemas/security-schemes.js +0 -44
  583. package/dist/cjs/schemas/security-schemes.js.map +0 -1
  584. package/dist/cjs/skills/agents.d.ts +0 -42
  585. package/dist/cjs/skills/agents.js +0 -200
  586. package/dist/cjs/skills/agents.js.map +0 -1
  587. package/dist/cjs/skills/github.d.ts +0 -31
  588. package/dist/cjs/skills/github.js +0 -450
  589. package/dist/cjs/skills/github.js.map +0 -1
  590. package/dist/cjs/skills/index.d.ts +0 -43
  591. package/dist/cjs/skills/index.js +0 -16
  592. package/dist/cjs/skills/index.js.map +0 -1
  593. package/dist/cjs/skills/installer.d.ts +0 -35
  594. package/dist/cjs/skills/installer.js +0 -182
  595. package/dist/cjs/skills/installer.js.map +0 -1
  596. package/dist/cjs/skills/parser.d.ts +0 -39
  597. package/dist/cjs/skills/parser.js +0 -126
  598. package/dist/cjs/skills/parser.js.map +0 -1
  599. package/dist/cjs/skills/sources.d.ts +0 -4
  600. package/dist/cjs/skills/sources.js +0 -52
  601. package/dist/cjs/skills/sources.js.map +0 -1
  602. package/dist/cjs/skills/types.d.ts +0 -153
  603. package/dist/cjs/skills/types.js +0 -7
  604. package/dist/cjs/skills/types.js.map +0 -1
  605. package/dist/cjs/slas/index.d.ts +0 -12
  606. package/dist/cjs/slas/index.js +0 -8
  607. package/dist/cjs/slas/index.js.map +0 -1
  608. package/dist/cjs/slas/pkce.d.ts +0 -13
  609. package/dist/cjs/slas/pkce.js +0 -35
  610. package/dist/cjs/slas/pkce.js.map +0 -1
  611. package/dist/cjs/slas/token.d.ts +0 -24
  612. package/dist/cjs/slas/token.js +0 -261
  613. package/dist/cjs/slas/token.js.map +0 -1
  614. package/dist/cjs/slas/types.d.ts +0 -43
  615. package/dist/cjs/slas/types.js +0 -7
  616. package/dist/cjs/slas/types.js.map +0 -1
  617. package/dist/cjs/telemetry/index.d.ts +0 -34
  618. package/dist/cjs/telemetry/index.js +0 -32
  619. package/dist/cjs/telemetry/index.js.map +0 -1
  620. package/dist/cjs/telemetry/telemetry.d.ts +0 -88
  621. package/dist/cjs/telemetry/telemetry.js +0 -298
  622. package/dist/cjs/telemetry/telemetry.js.map +0 -1
  623. package/dist/cjs/telemetry/types.d.ts +0 -62
  624. package/dist/cjs/telemetry/types.js +0 -7
  625. package/dist/cjs/telemetry/types.js.map +0 -1
  626. package/dist/cjs/test-utils/config-isolation.d.ts +0 -2
  627. package/dist/cjs/test-utils/config-isolation.js +0 -48
  628. package/dist/cjs/test-utils/config-isolation.js.map +0 -1
  629. package/dist/cjs/test-utils/index.d.ts +0 -1
  630. package/dist/cjs/test-utils/index.js +0 -7
  631. package/dist/cjs/test-utils/index.js.map +0 -1
  632. package/dist/cjs/ux/confirm.d.ts +0 -14
  633. package/dist/cjs/ux/confirm.js +0 -36
  634. package/dist/cjs/ux/confirm.js.map +0 -1
  635. package/dist/cjs/ux/index.d.ts +0 -1
  636. package/dist/cjs/ux/index.js +0 -7
  637. package/dist/cjs/ux/index.js.map +0 -1
  638. package/dist/cjs/version.d.ts +0 -14
  639. package/dist/cjs/version.js +0 -29
  640. 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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"}