@salesforce/b2c-tooling-sdk 0.3.0 → 0.4.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 (350) hide show
  1. package/README.md +180 -13
  2. package/data/scaffolds/cartridge/files/.project.ejs +17 -0
  3. package/data/scaffolds/cartridge/files/cartridge/cartridge.properties.ejs +4 -0
  4. package/data/scaffolds/cartridge/files/cartridge/controllers/Example.js.ejs +19 -0
  5. package/data/scaffolds/cartridge/files/cartridge/models/example.js.ejs +14 -0
  6. package/data/scaffolds/cartridge/files/cartridge/scripts/helpers/exampleHelpers.js.ejs +18 -0
  7. package/data/scaffolds/cartridge/files/cartridge/static/default/css/example.css +6 -0
  8. package/data/scaffolds/cartridge/files/cartridge/templates/default/example/show.isml.ejs +11 -0
  9. package/data/scaffolds/cartridge/scaffold.json +88 -0
  10. package/data/scaffolds/controller/files/controller.js.ejs +134 -0
  11. package/data/scaffolds/controller/files/template.isml.ejs +22 -0
  12. package/data/scaffolds/controller/scaffold.json +64 -0
  13. package/data/scaffolds/custom-api/files/api.json.ejs +11 -0
  14. package/data/scaffolds/custom-api/files/schema.yaml.ejs +188 -0
  15. package/data/scaffolds/custom-api/files/script.js.ejs +95 -0
  16. package/data/scaffolds/custom-api/scaffold.json +65 -0
  17. package/data/scaffolds/hook/files/hook.js.ejs +99 -0
  18. package/data/scaffolds/hook/files/hooks-entry.json.ejs +6 -0
  19. package/data/scaffolds/hook/scaffold.json +60 -0
  20. package/data/scaffolds/job-step/files/step-chunk.js.ejs +136 -0
  21. package/data/scaffolds/job-step/files/step-task.js.ejs +47 -0
  22. package/data/scaffolds/job-step/files/steptypes-entry.json.ejs +41 -0
  23. package/data/scaffolds/job-step/scaffold.json +64 -0
  24. package/data/scaffolds/page-designer-component/files/component.isml.ejs +23 -0
  25. package/data/scaffolds/page-designer-component/files/component.js.ejs +35 -0
  26. package/data/scaffolds/page-designer-component/files/component.json.ejs +50 -0
  27. package/data/scaffolds/page-designer-component/scaffold.json +66 -0
  28. package/data/scaffolds/service/files/service-http.js.ejs +245 -0
  29. package/data/scaffolds/service/files/service-sftp.js.ejs +371 -0
  30. package/data/scaffolds/service/files/service-soap.js.ejs +230 -0
  31. package/data/scaffolds/service/scaffold.json +83 -0
  32. package/data/script-api/dw.extensions.payments.SalesforcePaymentsMgr.md +48 -0
  33. package/data/script-api/dw.system.Request.md +5 -0
  34. package/data/script-api/dw.web.Cookie.md +108 -31
  35. package/data/script-api/index.json +2 -2
  36. package/data/script-api/index.md +1 -1
  37. package/dist/cjs/auth/oauth-implicit.d.ts +1 -0
  38. package/dist/cjs/auth/oauth-implicit.js +8 -3
  39. package/dist/cjs/auth/oauth-implicit.js.map +1 -1
  40. package/dist/cjs/auth/oauth.d.ts +1 -0
  41. package/dist/cjs/auth/oauth.js +8 -3
  42. package/dist/cjs/auth/oauth.js.map +1 -1
  43. package/dist/cjs/auth/types.d.ts +5 -0
  44. package/dist/cjs/auth/types.js.map +1 -1
  45. package/dist/cjs/cli/am-command.d.ts +74 -0
  46. package/dist/cjs/cli/am-command.js +189 -0
  47. package/dist/cjs/cli/am-command.js.map +1 -0
  48. package/dist/cjs/cli/base-command.d.ts +38 -0
  49. package/dist/cjs/cli/base-command.js +142 -0
  50. package/dist/cjs/cli/base-command.js.map +1 -1
  51. package/dist/cjs/cli/config.d.ts +9 -0
  52. package/dist/cjs/cli/config.js +19 -2
  53. package/dist/cjs/cli/config.js.map +1 -1
  54. package/dist/cjs/cli/index.d.ts +1 -0
  55. package/dist/cjs/cli/index.js +1 -0
  56. package/dist/cjs/cli/index.js.map +1 -1
  57. package/dist/cjs/cli/instance-command.d.ts +1 -0
  58. package/dist/cjs/cli/oauth-command.d.ts +21 -1
  59. package/dist/cjs/cli/oauth-command.js +52 -7
  60. package/dist/cjs/cli/oauth-command.js.map +1 -1
  61. package/dist/cjs/cli/ods-command.d.ts +5 -1
  62. package/dist/cjs/cli/ods-command.js +10 -4
  63. package/dist/cjs/cli/ods-command.js.map +1 -1
  64. package/dist/cjs/cli/webdav-command.d.ts +1 -0
  65. package/dist/cjs/clients/am-api.d.ts +491 -0
  66. package/dist/cjs/clients/am-api.js +944 -0
  67. package/dist/cjs/clients/am-api.js.map +1 -0
  68. package/dist/cjs/clients/am-apiclients-api.generated.d.ts +803 -0
  69. package/dist/cjs/clients/am-apiclients-api.generated.js +6 -0
  70. package/dist/cjs/clients/am-apiclients-api.generated.js.map +1 -0
  71. package/dist/cjs/clients/am-roles-api.generated.d.ts +298 -0
  72. package/dist/cjs/clients/am-roles-api.generated.js +6 -0
  73. package/dist/cjs/clients/am-roles-api.generated.js.map +1 -0
  74. package/dist/cjs/clients/am-users-api.generated.d.ts +891 -0
  75. package/dist/cjs/clients/am-users-api.generated.js +6 -0
  76. package/dist/cjs/clients/am-users-api.generated.js.map +1 -0
  77. package/dist/cjs/clients/index.d.ts +4 -2
  78. package/dist/cjs/clients/index.js +2 -1
  79. package/dist/cjs/clients/index.js.map +1 -1
  80. package/dist/cjs/clients/middleware-registry.d.ts +1 -1
  81. package/dist/cjs/clients/middleware-registry.js.map +1 -1
  82. package/dist/cjs/clients/middleware.d.ts +49 -2
  83. package/dist/cjs/clients/middleware.js +214 -2
  84. package/dist/cjs/clients/middleware.js.map +1 -1
  85. package/dist/cjs/clients/mrt.js +5 -1
  86. package/dist/cjs/clients/mrt.js.map +1 -1
  87. package/dist/cjs/config/dw-json.d.ts +104 -33
  88. package/dist/cjs/config/dw-json.js +167 -2
  89. package/dist/cjs/config/dw-json.js.map +1 -1
  90. package/dist/cjs/config/index.d.ts +6 -4
  91. package/dist/cjs/config/index.js +6 -2
  92. package/dist/cjs/config/index.js.map +1 -1
  93. package/dist/cjs/config/instance-manager.d.ts +97 -0
  94. package/dist/cjs/config/instance-manager.js +166 -0
  95. package/dist/cjs/config/instance-manager.js.map +1 -0
  96. package/dist/cjs/config/mapping.d.ts +63 -5
  97. package/dist/cjs/config/mapping.js +165 -20
  98. package/dist/cjs/config/mapping.js.map +1 -1
  99. package/dist/cjs/config/sources/dw-json-source.d.ts +17 -1
  100. package/dist/cjs/config/sources/dw-json-source.js +70 -3
  101. package/dist/cjs/config/sources/dw-json-source.js.map +1 -1
  102. package/dist/cjs/config/sources/package-json-source.js +6 -3
  103. package/dist/cjs/config/sources/package-json-source.js.map +1 -1
  104. package/dist/cjs/config/types.d.ts +72 -0
  105. package/dist/cjs/defaults.d.ts +6 -0
  106. package/dist/cjs/defaults.js +6 -0
  107. package/dist/cjs/defaults.js.map +1 -1
  108. package/dist/cjs/i18n/index.js +3 -0
  109. package/dist/cjs/i18n/index.js.map +1 -1
  110. package/dist/cjs/index.d.ts +8 -4
  111. package/dist/cjs/index.js +9 -3
  112. package/dist/cjs/index.js.map +1 -1
  113. package/dist/cjs/logging/logger.js +13 -1
  114. package/dist/cjs/logging/logger.js.map +1 -1
  115. package/dist/cjs/operations/content/asset-query.d.ts +22 -0
  116. package/dist/cjs/operations/content/asset-query.js +77 -0
  117. package/dist/cjs/operations/content/asset-query.js.map +1 -0
  118. package/dist/cjs/operations/content/export.d.ts +57 -0
  119. package/dist/cjs/operations/content/export.js +224 -0
  120. package/dist/cjs/operations/content/export.js.map +1 -0
  121. package/dist/cjs/operations/content/index.d.ts +43 -0
  122. package/dist/cjs/operations/content/index.js +48 -0
  123. package/dist/cjs/operations/content/index.js.map +1 -0
  124. package/dist/cjs/operations/content/library.d.ts +137 -0
  125. package/dist/cjs/operations/content/library.js +392 -0
  126. package/dist/cjs/operations/content/library.js.map +1 -0
  127. package/dist/cjs/operations/content/types.d.ts +144 -0
  128. package/dist/cjs/operations/content/types.js +7 -0
  129. package/dist/cjs/operations/content/types.js.map +1 -0
  130. package/dist/cjs/operations/mrt/b2c-config.js +19 -4
  131. package/dist/cjs/operations/mrt/b2c-config.js.map +1 -1
  132. package/dist/cjs/operations/mrt/index.d.ts +2 -0
  133. package/dist/cjs/operations/mrt/index.js +2 -0
  134. package/dist/cjs/operations/mrt/index.js.map +1 -1
  135. package/dist/cjs/operations/mrt/tail-logs.d.ts +130 -0
  136. package/dist/cjs/operations/mrt/tail-logs.js +223 -0
  137. package/dist/cjs/operations/mrt/tail-logs.js.map +1 -0
  138. package/dist/cjs/operations/ods/index.d.ts +2 -0
  139. package/dist/cjs/operations/ods/index.js +1 -0
  140. package/dist/cjs/operations/ods/index.js.map +1 -1
  141. package/dist/cjs/operations/ods/wait-for-sandbox.d.ts +64 -0
  142. package/dist/cjs/operations/ods/wait-for-sandbox.js +114 -0
  143. package/dist/cjs/operations/ods/wait-for-sandbox.js.map +1 -0
  144. package/dist/cjs/operations/orgs/index.d.ts +74 -0
  145. package/dist/cjs/operations/orgs/index.js +33 -0
  146. package/dist/cjs/operations/orgs/index.js.map +1 -0
  147. package/dist/cjs/operations/roles/index.d.ts +43 -0
  148. package/dist/cjs/operations/roles/index.js +48 -0
  149. package/dist/cjs/operations/roles/index.js.map +1 -0
  150. package/dist/cjs/operations/users/index.d.ts +143 -0
  151. package/dist/cjs/operations/users/index.js +141 -0
  152. package/dist/cjs/operations/users/index.js.map +1 -0
  153. package/dist/cjs/scaffold/engine.d.ts +68 -0
  154. package/dist/cjs/scaffold/engine.js +149 -0
  155. package/dist/cjs/scaffold/engine.js.map +1 -0
  156. package/dist/cjs/scaffold/executor.d.ts +36 -0
  157. package/dist/cjs/scaffold/executor.js +285 -0
  158. package/dist/cjs/scaffold/executor.js.map +1 -0
  159. package/dist/cjs/scaffold/index.d.ts +74 -0
  160. package/dist/cjs/scaffold/index.js +23 -0
  161. package/dist/cjs/scaffold/index.js.map +1 -0
  162. package/dist/cjs/scaffold/merge.d.ts +56 -0
  163. package/dist/cjs/scaffold/merge.js +183 -0
  164. package/dist/cjs/scaffold/merge.js.map +1 -0
  165. package/dist/cjs/scaffold/parameter-resolver.d.ts +86 -0
  166. package/dist/cjs/scaffold/parameter-resolver.js +179 -0
  167. package/dist/cjs/scaffold/parameter-resolver.js.map +1 -0
  168. package/dist/cjs/scaffold/registry.d.ts +45 -0
  169. package/dist/cjs/scaffold/registry.js +219 -0
  170. package/dist/cjs/scaffold/registry.js.map +1 -0
  171. package/dist/cjs/scaffold/sources.d.ts +45 -0
  172. package/dist/cjs/scaffold/sources.js +113 -0
  173. package/dist/cjs/scaffold/sources.js.map +1 -0
  174. package/dist/cjs/scaffold/types.d.ts +280 -0
  175. package/dist/cjs/scaffold/types.js +14 -0
  176. package/dist/cjs/scaffold/types.js.map +1 -0
  177. package/dist/cjs/scaffold/validation.d.ts +81 -0
  178. package/dist/cjs/scaffold/validation.js +250 -0
  179. package/dist/cjs/scaffold/validation.js.map +1 -0
  180. package/dist/cjs/scaffold/validators.d.ts +33 -0
  181. package/dist/cjs/scaffold/validators.js +334 -0
  182. package/dist/cjs/scaffold/validators.js.map +1 -0
  183. package/dist/cjs/telemetry/index.d.ts +26 -0
  184. package/dist/cjs/telemetry/index.js +32 -0
  185. package/dist/cjs/telemetry/index.js.map +1 -0
  186. package/dist/cjs/telemetry/telemetry.d.ts +90 -0
  187. package/dist/cjs/telemetry/telemetry.js +283 -0
  188. package/dist/cjs/telemetry/telemetry.js.map +1 -0
  189. package/dist/cjs/telemetry/types.d.ts +62 -0
  190. package/dist/cjs/telemetry/types.js +7 -0
  191. package/dist/cjs/telemetry/types.js.map +1 -0
  192. package/dist/esm/auth/oauth-implicit.d.ts +1 -0
  193. package/dist/esm/auth/oauth-implicit.js +8 -3
  194. package/dist/esm/auth/oauth-implicit.js.map +1 -1
  195. package/dist/esm/auth/oauth.d.ts +1 -0
  196. package/dist/esm/auth/oauth.js +8 -3
  197. package/dist/esm/auth/oauth.js.map +1 -1
  198. package/dist/esm/auth/types.d.ts +5 -0
  199. package/dist/esm/auth/types.js.map +1 -1
  200. package/dist/esm/cli/am-command.d.ts +74 -0
  201. package/dist/esm/cli/am-command.js +196 -0
  202. package/dist/esm/cli/am-command.js.map +1 -0
  203. package/dist/esm/cli/base-command.d.ts +38 -0
  204. package/dist/esm/cli/base-command.js +142 -0
  205. package/dist/esm/cli/base-command.js.map +1 -1
  206. package/dist/esm/cli/config.d.ts +9 -0
  207. package/dist/esm/cli/config.js +19 -2
  208. package/dist/esm/cli/config.js.map +1 -1
  209. package/dist/esm/cli/index.d.ts +1 -0
  210. package/dist/esm/cli/index.js +1 -0
  211. package/dist/esm/cli/index.js.map +1 -1
  212. package/dist/esm/cli/instance-command.d.ts +1 -0
  213. package/dist/esm/cli/oauth-command.d.ts +21 -1
  214. package/dist/esm/cli/oauth-command.js +52 -7
  215. package/dist/esm/cli/oauth-command.js.map +1 -1
  216. package/dist/esm/cli/ods-command.d.ts +5 -1
  217. package/dist/esm/cli/ods-command.js +10 -4
  218. package/dist/esm/cli/ods-command.js.map +1 -1
  219. package/dist/esm/cli/webdav-command.d.ts +1 -0
  220. package/dist/esm/clients/am-api.d.ts +491 -0
  221. package/dist/esm/clients/am-api.js +944 -0
  222. package/dist/esm/clients/am-api.js.map +1 -0
  223. package/dist/esm/clients/am-apiclients-api.generated.d.ts +803 -0
  224. package/dist/esm/clients/am-apiclients-api.generated.js +6 -0
  225. package/dist/esm/clients/am-apiclients-api.generated.js.map +1 -0
  226. package/dist/esm/clients/am-roles-api.generated.d.ts +298 -0
  227. package/dist/esm/clients/am-roles-api.generated.js +6 -0
  228. package/dist/esm/clients/am-roles-api.generated.js.map +1 -0
  229. package/dist/esm/clients/am-users-api.generated.d.ts +891 -0
  230. package/dist/esm/clients/am-users-api.generated.js +6 -0
  231. package/dist/esm/clients/am-users-api.generated.js.map +1 -0
  232. package/dist/esm/clients/index.d.ts +4 -2
  233. package/dist/esm/clients/index.js +2 -1
  234. package/dist/esm/clients/index.js.map +1 -1
  235. package/dist/esm/clients/middleware-registry.d.ts +1 -1
  236. package/dist/esm/clients/middleware-registry.js.map +1 -1
  237. package/dist/esm/clients/middleware.d.ts +49 -2
  238. package/dist/esm/clients/middleware.js +214 -2
  239. package/dist/esm/clients/middleware.js.map +1 -1
  240. package/dist/esm/clients/mrt.js +5 -1
  241. package/dist/esm/clients/mrt.js.map +1 -1
  242. package/dist/esm/config/dw-json.d.ts +104 -33
  243. package/dist/esm/config/dw-json.js +167 -2
  244. package/dist/esm/config/dw-json.js.map +1 -1
  245. package/dist/esm/config/index.d.ts +6 -4
  246. package/dist/esm/config/index.js +6 -2
  247. package/dist/esm/config/index.js.map +1 -1
  248. package/dist/esm/config/instance-manager.d.ts +97 -0
  249. package/dist/esm/config/instance-manager.js +166 -0
  250. package/dist/esm/config/instance-manager.js.map +1 -0
  251. package/dist/esm/config/mapping.d.ts +63 -5
  252. package/dist/esm/config/mapping.js +165 -20
  253. package/dist/esm/config/mapping.js.map +1 -1
  254. package/dist/esm/config/sources/dw-json-source.d.ts +17 -1
  255. package/dist/esm/config/sources/dw-json-source.js +70 -3
  256. package/dist/esm/config/sources/dw-json-source.js.map +1 -1
  257. package/dist/esm/config/sources/package-json-source.js +6 -3
  258. package/dist/esm/config/sources/package-json-source.js.map +1 -1
  259. package/dist/esm/config/types.d.ts +72 -0
  260. package/dist/esm/defaults.d.ts +6 -0
  261. package/dist/esm/defaults.js +6 -0
  262. package/dist/esm/defaults.js.map +1 -1
  263. package/dist/esm/i18n/index.js +3 -0
  264. package/dist/esm/i18n/index.js.map +1 -1
  265. package/dist/esm/index.d.ts +8 -4
  266. package/dist/esm/index.js +9 -3
  267. package/dist/esm/index.js.map +1 -1
  268. package/dist/esm/logging/logger.js +13 -1
  269. package/dist/esm/logging/logger.js.map +1 -1
  270. package/dist/esm/operations/content/asset-query.d.ts +22 -0
  271. package/dist/esm/operations/content/asset-query.js +77 -0
  272. package/dist/esm/operations/content/asset-query.js.map +1 -0
  273. package/dist/esm/operations/content/export.d.ts +57 -0
  274. package/dist/esm/operations/content/export.js +224 -0
  275. package/dist/esm/operations/content/export.js.map +1 -0
  276. package/dist/esm/operations/content/index.d.ts +43 -0
  277. package/dist/esm/operations/content/index.js +48 -0
  278. package/dist/esm/operations/content/index.js.map +1 -0
  279. package/dist/esm/operations/content/library.d.ts +137 -0
  280. package/dist/esm/operations/content/library.js +392 -0
  281. package/dist/esm/operations/content/library.js.map +1 -0
  282. package/dist/esm/operations/content/types.d.ts +144 -0
  283. package/dist/esm/operations/content/types.js +7 -0
  284. package/dist/esm/operations/content/types.js.map +1 -0
  285. package/dist/esm/operations/mrt/b2c-config.js +19 -4
  286. package/dist/esm/operations/mrt/b2c-config.js.map +1 -1
  287. package/dist/esm/operations/mrt/index.d.ts +2 -0
  288. package/dist/esm/operations/mrt/index.js +2 -0
  289. package/dist/esm/operations/mrt/index.js.map +1 -1
  290. package/dist/esm/operations/mrt/tail-logs.d.ts +130 -0
  291. package/dist/esm/operations/mrt/tail-logs.js +223 -0
  292. package/dist/esm/operations/mrt/tail-logs.js.map +1 -0
  293. package/dist/esm/operations/ods/index.d.ts +2 -0
  294. package/dist/esm/operations/ods/index.js +1 -0
  295. package/dist/esm/operations/ods/index.js.map +1 -1
  296. package/dist/esm/operations/ods/wait-for-sandbox.d.ts +64 -0
  297. package/dist/esm/operations/ods/wait-for-sandbox.js +114 -0
  298. package/dist/esm/operations/ods/wait-for-sandbox.js.map +1 -0
  299. package/dist/esm/operations/orgs/index.d.ts +74 -0
  300. package/dist/esm/operations/orgs/index.js +33 -0
  301. package/dist/esm/operations/orgs/index.js.map +1 -0
  302. package/dist/esm/operations/roles/index.d.ts +43 -0
  303. package/dist/esm/operations/roles/index.js +48 -0
  304. package/dist/esm/operations/roles/index.js.map +1 -0
  305. package/dist/esm/operations/users/index.d.ts +143 -0
  306. package/dist/esm/operations/users/index.js +141 -0
  307. package/dist/esm/operations/users/index.js.map +1 -0
  308. package/dist/esm/scaffold/engine.d.ts +68 -0
  309. package/dist/esm/scaffold/engine.js +149 -0
  310. package/dist/esm/scaffold/engine.js.map +1 -0
  311. package/dist/esm/scaffold/executor.d.ts +36 -0
  312. package/dist/esm/scaffold/executor.js +285 -0
  313. package/dist/esm/scaffold/executor.js.map +1 -0
  314. package/dist/esm/scaffold/index.d.ts +74 -0
  315. package/dist/esm/scaffold/index.js +23 -0
  316. package/dist/esm/scaffold/index.js.map +1 -0
  317. package/dist/esm/scaffold/merge.d.ts +56 -0
  318. package/dist/esm/scaffold/merge.js +183 -0
  319. package/dist/esm/scaffold/merge.js.map +1 -0
  320. package/dist/esm/scaffold/parameter-resolver.d.ts +86 -0
  321. package/dist/esm/scaffold/parameter-resolver.js +179 -0
  322. package/dist/esm/scaffold/parameter-resolver.js.map +1 -0
  323. package/dist/esm/scaffold/registry.d.ts +45 -0
  324. package/dist/esm/scaffold/registry.js +219 -0
  325. package/dist/esm/scaffold/registry.js.map +1 -0
  326. package/dist/esm/scaffold/sources.d.ts +45 -0
  327. package/dist/esm/scaffold/sources.js +113 -0
  328. package/dist/esm/scaffold/sources.js.map +1 -0
  329. package/dist/esm/scaffold/types.d.ts +280 -0
  330. package/dist/esm/scaffold/types.js +14 -0
  331. package/dist/esm/scaffold/types.js.map +1 -0
  332. package/dist/esm/scaffold/validation.d.ts +81 -0
  333. package/dist/esm/scaffold/validation.js +250 -0
  334. package/dist/esm/scaffold/validation.js.map +1 -0
  335. package/dist/esm/scaffold/validators.d.ts +33 -0
  336. package/dist/esm/scaffold/validators.js +334 -0
  337. package/dist/esm/scaffold/validators.js.map +1 -0
  338. package/dist/esm/telemetry/index.d.ts +26 -0
  339. package/dist/esm/telemetry/index.js +32 -0
  340. package/dist/esm/telemetry/index.js.map +1 -0
  341. package/dist/esm/telemetry/telemetry.d.ts +90 -0
  342. package/dist/esm/telemetry/telemetry.js +283 -0
  343. package/dist/esm/telemetry/telemetry.js.map +1 -0
  344. package/dist/esm/telemetry/types.d.ts +62 -0
  345. package/dist/esm/telemetry/types.js +7 -0
  346. package/dist/esm/telemetry/types.js.map +1 -0
  347. package/package.json +86 -17
  348. package/specs/am-apiclients-api-v1.yaml +965 -0
  349. package/specs/am-roles-api-v1.yaml +316 -0
  350. package/specs/am-users-api-v1.yaml +1102 -0
@@ -14,6 +14,7 @@
14
14
  import * as fs from 'node:fs';
15
15
  import * as path from 'node:path';
16
16
  import { getLogger } from '../logging/logger.js';
17
+ import { normalizeConfigKeys } from './mapping.js';
17
18
  /**
18
19
  * Finds dw.json by searching upward from the starting directory.
19
20
  *
@@ -83,6 +84,164 @@ function selectConfig(json, instanceName) {
83
84
  logger.trace({ selection: 'root', instanceName: json.name }, `[DwJsonSource] Selected config "${json.name ?? 'root'}" (default to root)`);
84
85
  return json;
85
86
  }
87
+ /**
88
+ * Load the raw dw.json file without selecting a specific instance.
89
+ *
90
+ * This is useful for instance management operations that need to work
91
+ * with the full configs array.
92
+ *
93
+ * @param options - Loading options
94
+ * @returns The raw multi-config structure and path, or undefined if not found
95
+ */
96
+ export function loadFullDwJson(options = {}) {
97
+ const logger = getLogger();
98
+ const dwJsonPath = options.path ?? path.join(options.startDir || process.cwd(), 'dw.json');
99
+ logger.trace({ path: dwJsonPath }, '[DwJsonSource] Checking for config file');
100
+ if (!fs.existsSync(dwJsonPath)) {
101
+ logger.trace({ path: dwJsonPath }, '[DwJsonSource] No config file found');
102
+ return undefined;
103
+ }
104
+ try {
105
+ const content = fs.readFileSync(dwJsonPath, 'utf8');
106
+ const json = JSON.parse(content);
107
+ return { config: json, path: dwJsonPath };
108
+ }
109
+ catch (error) {
110
+ const message = error instanceof Error ? error.message : String(error);
111
+ logger.trace({ path: dwJsonPath, error: message }, '[DwJsonSource] Failed to parse config file');
112
+ throw error;
113
+ }
114
+ }
115
+ /**
116
+ * Save a dw.json configuration to disk.
117
+ *
118
+ * @param config - The configuration to save
119
+ * @param filePath - Path to save to
120
+ */
121
+ export function saveDwJson(config, filePath) {
122
+ const content = JSON.stringify(config, null, 2) + '\n';
123
+ fs.writeFileSync(filePath, content, 'utf8');
124
+ }
125
+ /**
126
+ * Add a new instance to dw.json.
127
+ *
128
+ * If dw.json doesn't exist, creates a new one. If an instance with the same
129
+ * name already exists, throws an error.
130
+ *
131
+ * @param instance - The instance configuration to add
132
+ * @param options - Options for adding
133
+ * @throws Error if instance with same name already exists
134
+ */
135
+ export function addInstance(instance, options = {}) {
136
+ const dwJsonPath = options.path ?? path.join(options.startDir || process.cwd(), 'dw.json');
137
+ let existing = {};
138
+ if (fs.existsSync(dwJsonPath)) {
139
+ const content = fs.readFileSync(dwJsonPath, 'utf8');
140
+ existing = JSON.parse(content);
141
+ }
142
+ // Check if instance name already exists
143
+ const instanceName = instance.name;
144
+ if (!instanceName) {
145
+ throw new Error('Instance must have a name');
146
+ }
147
+ // Check root config
148
+ if (existing.name === instanceName) {
149
+ throw new Error(`Instance "${instanceName}" already exists`);
150
+ }
151
+ // Check configs array
152
+ if (existing.configs?.some((c) => c.name === instanceName)) {
153
+ throw new Error(`Instance "${instanceName}" already exists`);
154
+ }
155
+ // Handle setActive - clear other active flags
156
+ if (options.setActive) {
157
+ instance.active = true;
158
+ // Clear active on root if it has it
159
+ if (existing.active !== undefined) {
160
+ existing.active = false;
161
+ }
162
+ // Clear active on all other configs
163
+ if (existing.configs) {
164
+ for (const c of existing.configs) {
165
+ if (c.active !== undefined) {
166
+ c.active = false;
167
+ }
168
+ }
169
+ }
170
+ }
171
+ // Initialize configs array if needed
172
+ if (!existing.configs) {
173
+ existing.configs = [];
174
+ }
175
+ // Add the new instance
176
+ existing.configs.push(instance);
177
+ saveDwJson(existing, dwJsonPath);
178
+ }
179
+ /**
180
+ * Remove an instance from dw.json.
181
+ *
182
+ * @param name - Name of the instance to remove
183
+ * @param options - Options for removal
184
+ * @throws Error if instance not found or dw.json doesn't exist
185
+ */
186
+ export function removeInstance(name, options = {}) {
187
+ const dwJsonPath = options.path ?? path.join(options.startDir || process.cwd(), 'dw.json');
188
+ if (!fs.existsSync(dwJsonPath)) {
189
+ throw new Error('No dw.json file found');
190
+ }
191
+ const content = fs.readFileSync(dwJsonPath, 'utf8');
192
+ const existing = JSON.parse(content);
193
+ // Check if trying to remove root config
194
+ if (existing.name === name) {
195
+ throw new Error(`Cannot remove root instance "${name}". Edit dw.json manually to remove root config.`);
196
+ }
197
+ // Find and remove from configs array
198
+ if (!existing.configs || !existing.configs.some((c) => c.name === name)) {
199
+ throw new Error(`Instance "${name}" not found`);
200
+ }
201
+ existing.configs = existing.configs.filter((c) => c.name !== name);
202
+ saveDwJson(existing, dwJsonPath);
203
+ }
204
+ /**
205
+ * Set an instance as the active default.
206
+ *
207
+ * @param name - Name of the instance to set as active
208
+ * @param options - Options
209
+ * @throws Error if instance not found or dw.json doesn't exist
210
+ */
211
+ export function setActiveInstance(name, options = {}) {
212
+ const dwJsonPath = options.path ?? path.join(options.startDir || process.cwd(), 'dw.json');
213
+ if (!fs.existsSync(dwJsonPath)) {
214
+ throw new Error('No dw.json file found');
215
+ }
216
+ const content = fs.readFileSync(dwJsonPath, 'utf8');
217
+ const existing = JSON.parse(content);
218
+ // Find the target instance
219
+ let found = false;
220
+ // Check root config
221
+ if (existing.name === name) {
222
+ found = true;
223
+ existing.active = true;
224
+ }
225
+ else if (existing.active !== undefined) {
226
+ existing.active = false;
227
+ }
228
+ // Check and update configs array
229
+ if (existing.configs) {
230
+ for (const c of existing.configs) {
231
+ if (c.name === name) {
232
+ found = true;
233
+ c.active = true;
234
+ }
235
+ else if (c.active !== undefined) {
236
+ c.active = false;
237
+ }
238
+ }
239
+ }
240
+ if (!found) {
241
+ throw new Error(`Instance "${name}" not found`);
242
+ }
243
+ saveDwJson(existing, dwJsonPath);
244
+ }
86
245
  /**
87
246
  * Loads configuration from a dw.json file.
88
247
  *
@@ -122,8 +281,14 @@ export function loadDwJson(options = {}) {
122
281
  }
123
282
  try {
124
283
  const content = fs.readFileSync(dwJsonPath, 'utf8');
125
- const json = JSON.parse(content);
126
- const config = selectConfig(json, options.instance);
284
+ const raw = JSON.parse(content);
285
+ // Normalize root-level keys to camelCase
286
+ const normalized = normalizeConfigKeys(raw);
287
+ // Normalize keys in each configs[] item
288
+ if (Array.isArray(normalized.configs)) {
289
+ normalized.configs = normalized.configs.map((item) => normalizeConfigKeys(item));
290
+ }
291
+ const config = selectConfig(normalized, options.instance);
127
292
  if (!config) {
128
293
  return undefined;
129
294
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dw-json.js","sourceRoot":"","sources":["../../../src/config/dw-json.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAC,SAAS,EAAC,MAAM,sBAAsB,CAAC;AAiG/C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;IACzD,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAElC,OAAO,GAAG,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,OAAO,UAAU,CAAC;QACpB,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,IAAuB,EAAE,YAAqB;IAClE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,oCAAoC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,KAAK,CACV,EAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,EAAC,EAC5C,mCAAmC,IAAI,CAAC,IAAI,IAAI,MAAM,mBAAmB,CAC1E,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAwB;IACxB,IAAI,YAAY,EAAE,CAAC;QACjB,mBAAmB;QACnB,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CACV,EAAC,SAAS,EAAE,OAAO,EAAE,YAAY,EAAC,EAClC,mCAAmC,YAAY,kBAAkB,CAClE,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QACD,2BAA2B;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAChE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,EAAC,SAAS,EAAE,OAAO,EAAE,YAAY,EAAC,EAAE,mCAAmC,YAAY,WAAW,CAAC,CAAC;YAC7G,OAAO,KAAK,CAAC;QACf,CAAC;QACD,iEAAiE;QACjE,MAAM,CAAC,KAAK,CAAC,EAAC,iBAAiB,EAAE,YAAY,EAAC,EAAE,kCAAkC,YAAY,aAAa,CAAC,CAAC;QAC7G,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,qBAAqB;IACrB,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1B,+CAA+C;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;QACjE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CACV,EAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,IAAI,EAAC,EACtD,mCAAmC,YAAY,CAAC,IAAI,kBAAkB,CACvE,CAAC;YACF,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,KAAK,CACV,EAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,EAAC,EAC5C,mCAAmC,IAAI,CAAC,IAAI,IAAI,MAAM,qBAAqB,CAC5E,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,UAAU,CAAC,UAA6B,EAAE;IACxD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,uFAAuF;IACvF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAE3F,MAAM,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,UAAU,EAAC,EAAE,yCAAyC,CAAC,CAAC;IAE5E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,UAAU,EAAC,EAAE,qCAAqC,CAAC,CAAC;QACxE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;QACtD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,MAAM;YACN,IAAI,EAAE,UAAU;SACjB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+DAA+D;QAC/D,iEAAiE;QACjE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,KAAK,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAC,EAAE,4CAA4C,CAAC,CAAC;QAC/F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"dw-json.js","sourceRoot":"","sources":["../../../src/config/dw-json.ts"],"names":[],"mappings":"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"}
@@ -90,7 +90,9 @@
90
90
  * @module config
91
91
  */
92
92
  export { resolveConfig, ConfigResolver, createConfigResolver } from './resolver.js';
93
- export type { NormalizedConfig, ConfigSource, ConfigLoadResult, ConfigSourceInfo, ConfigResolutionResult, ConfigWarning, ConfigWarningCode, ResolveConfigOptions, ResolvedB2CConfig, CreateOAuthOptions, } from './types.js';
94
- export { createInstanceFromConfig } from './mapping.js';
95
- export { loadDwJson, findDwJson } from './dw-json.js';
96
- export type { DwJsonConfig, DwJsonMultiConfig, LoadDwJsonOptions, LoadDwJsonResult } from './dw-json.js';
93
+ export type { NormalizedConfig, ConfigSource, ConfigLoadResult, ConfigSourceInfo, ConfigResolutionResult, ConfigWarning, ConfigWarningCode, ResolveConfigOptions, ResolvedB2CConfig, CreateOAuthOptions, InstanceInfo, CreateInstanceOptions, } from './types.js';
94
+ export { createInstanceFromConfig, normalizeConfigKeys } from './mapping.js';
95
+ export { loadDwJson, loadFullDwJson, findDwJson, saveDwJson, addInstance, removeInstance, setActiveInstance, } from './dw-json.js';
96
+ export type { DwJsonConfig, DwJsonMultiConfig, LoadDwJsonOptions, LoadDwJsonResult, AddInstanceOptions, RemoveInstanceOptions, SetActiveInstanceOptions, } from './dw-json.js';
97
+ export { InstanceManager, createInstanceManager } from './instance-manager.js';
98
+ export { DwJsonSource } from './sources/dw-json-source.js';
@@ -97,7 +97,11 @@
97
97
  // High-level API (preferred)
98
98
  export { resolveConfig, ConfigResolver, createConfigResolver } from './resolver.js';
99
99
  // Instance creation utility (public API for CLI commands)
100
- export { createInstanceFromConfig } from './mapping.js';
100
+ export { createInstanceFromConfig, normalizeConfigKeys } from './mapping.js';
101
101
  // Low-level dw.json API (still available for advanced use)
102
- export { loadDwJson, findDwJson } from './dw-json.js';
102
+ export { loadDwJson, loadFullDwJson, findDwJson, saveDwJson, addInstance, removeInstance, setActiveInstance, } from './dw-json.js';
103
+ // Instance management
104
+ export { InstanceManager, createInstanceManager } from './instance-manager.js';
105
+ // Config sources (for direct use)
106
+ export { DwJsonSource } from './sources/dw-json-source.js';
103
107
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AAEH,6BAA6B;AAC7B,OAAO,EAAC,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAgBlF,0DAA0D;AAC1D,OAAO,EAAC,wBAAwB,EAAC,MAAM,cAAc,CAAC;AAEtD,2DAA2D;AAC3D,OAAO,EAAC,UAAU,EAAE,UAAU,EAAC,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AAEH,6BAA6B;AAC7B,OAAO,EAAC,aAAa,EAAE,cAAc,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAkBlF,0DAA0D;AAC1D,OAAO,EAAC,wBAAwB,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAE3E,2DAA2D;AAC3D,OAAO,EACL,UAAU,EACV,cAAc,EACd,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAWtB,sBAAsB;AACtB,OAAO,EAAC,eAAe,EAAE,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAE7E,kCAAkC;AAClC,OAAO,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Instance management service.
3
+ *
4
+ * Aggregates instance management operations across multiple config sources.
5
+ *
6
+ * @module config/instance-manager
7
+ */
8
+ import type { ConfigSource, InstanceInfo, CreateInstanceOptions, ResolveConfigOptions, NormalizedConfig } from './types.js';
9
+ /**
10
+ * Service for managing B2C instances across multiple config sources.
11
+ *
12
+ * This class aggregates instance management operations from all sources
13
+ * that implement the optional instance management methods.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { InstanceManager, DwJsonSource } from '@salesforce/b2c-tooling-sdk/config';
18
+ *
19
+ * const manager = new InstanceManager([new DwJsonSource()]);
20
+ *
21
+ * // List all instances
22
+ * const instances = manager.listAllInstances();
23
+ *
24
+ * // Create a new instance
25
+ * manager.createInstance({
26
+ * name: 'staging',
27
+ * config: { hostname: 'staging.example.com' },
28
+ * setActive: true,
29
+ * });
30
+ * ```
31
+ */
32
+ export declare class InstanceManager {
33
+ private readonly sources;
34
+ constructor(sources: ConfigSource[]);
35
+ /**
36
+ * List instances from all sources that implement listInstances().
37
+ *
38
+ * @param options - Resolution options
39
+ * @returns Array of all instances from all sources
40
+ */
41
+ listAllInstances(options?: ResolveConfigOptions): InstanceInfo[];
42
+ /**
43
+ * Get sources that can create instances.
44
+ *
45
+ * @returns Array of sources with createInstance() method
46
+ */
47
+ getInstanceSources(): ConfigSource[];
48
+ /**
49
+ * Get sources that can store a specific credential field.
50
+ *
51
+ * @param field - The credential field to check
52
+ * @returns Array of sources that can store the field
53
+ */
54
+ getCredentialSources(field: keyof NormalizedConfig): ConfigSource[];
55
+ /**
56
+ * Create an instance in the specified source (or default to first instance source).
57
+ *
58
+ * @param options - Instance creation options
59
+ * @param targetSource - Source name to use (optional, defaults to first available)
60
+ * @throws Error if no instance sources available or specified source not found
61
+ */
62
+ createInstance(options: CreateInstanceOptions & ResolveConfigOptions, targetSource?: string): void;
63
+ /**
64
+ * Remove an instance from the source that contains it.
65
+ *
66
+ * @param name - Instance name to remove
67
+ * @param options - Resolution options
68
+ * @throws Error if instance not found in any source
69
+ */
70
+ removeInstance(name: string, options?: ResolveConfigOptions): void;
71
+ /**
72
+ * Set an instance as active in the source that contains it.
73
+ *
74
+ * @param name - Instance name to set as active
75
+ * @param options - Resolution options
76
+ * @throws Error if instance not found in any source
77
+ */
78
+ setActiveInstance(name: string, options?: ResolveConfigOptions): void;
79
+ /**
80
+ * Store a credential for an instance in the specified source.
81
+ *
82
+ * @param instanceName - Instance name
83
+ * @param field - Config field to store
84
+ * @param value - Value to store
85
+ * @param targetSource - Source name to use (optional)
86
+ * @param options - Resolution options
87
+ * @throws Error if no credential sources support the field
88
+ */
89
+ storeCredential(instanceName: string, field: keyof NormalizedConfig, value: string, targetSource?: string, options?: ResolveConfigOptions): void;
90
+ }
91
+ /**
92
+ * Create an InstanceManager with the given sources.
93
+ *
94
+ * @param sources - Config sources to use
95
+ * @returns InstanceManager instance
96
+ */
97
+ export declare function createInstanceManager(sources: ConfigSource[]): InstanceManager;
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Service for managing B2C instances across multiple config sources.
3
+ *
4
+ * This class aggregates instance management operations from all sources
5
+ * that implement the optional instance management methods.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { InstanceManager, DwJsonSource } from '@salesforce/b2c-tooling-sdk/config';
10
+ *
11
+ * const manager = new InstanceManager([new DwJsonSource()]);
12
+ *
13
+ * // List all instances
14
+ * const instances = manager.listAllInstances();
15
+ *
16
+ * // Create a new instance
17
+ * manager.createInstance({
18
+ * name: 'staging',
19
+ * config: { hostname: 'staging.example.com' },
20
+ * setActive: true,
21
+ * });
22
+ * ```
23
+ */
24
+ export class InstanceManager {
25
+ sources;
26
+ constructor(sources) {
27
+ this.sources = sources;
28
+ }
29
+ /**
30
+ * List instances from all sources that implement listInstances().
31
+ *
32
+ * @param options - Resolution options
33
+ * @returns Array of all instances from all sources
34
+ */
35
+ listAllInstances(options) {
36
+ const allInstances = [];
37
+ for (const source of this.sources) {
38
+ if (source.listInstances) {
39
+ const instances = source.listInstances(options);
40
+ allInstances.push(...instances);
41
+ }
42
+ }
43
+ return allInstances;
44
+ }
45
+ /**
46
+ * Get sources that can create instances.
47
+ *
48
+ * @returns Array of sources with createInstance() method
49
+ */
50
+ getInstanceSources() {
51
+ return this.sources.filter((s) => s.createInstance);
52
+ }
53
+ /**
54
+ * Get sources that can store a specific credential field.
55
+ *
56
+ * @param field - The credential field to check
57
+ * @returns Array of sources that can store the field
58
+ */
59
+ getCredentialSources(field) {
60
+ return this.sources.filter((s) => s.credentialFields?.includes(field));
61
+ }
62
+ /**
63
+ * Create an instance in the specified source (or default to first instance source).
64
+ *
65
+ * @param options - Instance creation options
66
+ * @param targetSource - Source name to use (optional, defaults to first available)
67
+ * @throws Error if no instance sources available or specified source not found
68
+ */
69
+ createInstance(options, targetSource) {
70
+ const instanceSources = this.getInstanceSources();
71
+ if (instanceSources.length === 0) {
72
+ throw new Error('No config sources support instance creation');
73
+ }
74
+ let source;
75
+ if (targetSource) {
76
+ const found = instanceSources.find((s) => s.name === targetSource);
77
+ if (!found) {
78
+ throw new Error(`Source "${targetSource}" not found or does not support instance creation`);
79
+ }
80
+ source = found;
81
+ }
82
+ else {
83
+ // Default to first (highest priority) instance source
84
+ source = instanceSources[0];
85
+ }
86
+ source.createInstance(options);
87
+ }
88
+ /**
89
+ * Remove an instance from the source that contains it.
90
+ *
91
+ * @param name - Instance name to remove
92
+ * @param options - Resolution options
93
+ * @throws Error if instance not found in any source
94
+ */
95
+ removeInstance(name, options) {
96
+ // Find the source that has this instance
97
+ for (const source of this.sources) {
98
+ if (source.listInstances && source.removeInstance) {
99
+ const instances = source.listInstances(options);
100
+ if (instances.some((i) => i.name === name)) {
101
+ source.removeInstance(name, options);
102
+ return;
103
+ }
104
+ }
105
+ }
106
+ throw new Error(`Instance "${name}" not found in any source`);
107
+ }
108
+ /**
109
+ * Set an instance as active in the source that contains it.
110
+ *
111
+ * @param name - Instance name to set as active
112
+ * @param options - Resolution options
113
+ * @throws Error if instance not found in any source
114
+ */
115
+ setActiveInstance(name, options) {
116
+ // Find the source that has this instance
117
+ for (const source of this.sources) {
118
+ if (source.listInstances && source.setActiveInstance) {
119
+ const instances = source.listInstances(options);
120
+ if (instances.some((i) => i.name === name)) {
121
+ source.setActiveInstance(name, options);
122
+ return;
123
+ }
124
+ }
125
+ }
126
+ throw new Error(`Instance "${name}" not found in any source`);
127
+ }
128
+ /**
129
+ * Store a credential for an instance in the specified source.
130
+ *
131
+ * @param instanceName - Instance name
132
+ * @param field - Config field to store
133
+ * @param value - Value to store
134
+ * @param targetSource - Source name to use (optional)
135
+ * @param options - Resolution options
136
+ * @throws Error if no credential sources support the field
137
+ */
138
+ storeCredential(instanceName, field, value, targetSource, options) {
139
+ const credentialSources = this.getCredentialSources(field);
140
+ if (credentialSources.length === 0) {
141
+ throw new Error(`No config sources support storing credential field "${String(field)}"`);
142
+ }
143
+ let source;
144
+ if (targetSource) {
145
+ const found = credentialSources.find((s) => s.name === targetSource);
146
+ if (!found) {
147
+ throw new Error(`Source "${targetSource}" not found or does not support credential storage`);
148
+ }
149
+ source = found;
150
+ }
151
+ else {
152
+ source = credentialSources[0];
153
+ }
154
+ source.storeCredential(instanceName, field, value, options);
155
+ }
156
+ }
157
+ /**
158
+ * Create an InstanceManager with the given sources.
159
+ *
160
+ * @param sources - Config sources to use
161
+ * @returns InstanceManager instance
162
+ */
163
+ export function createInstanceManager(sources) {
164
+ return new InstanceManager(sources);
165
+ }
166
+ //# sourceMappingURL=instance-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-manager.js","sourceRoot":"","sources":["../../../src/config/instance-manager.ts"],"names":[],"mappings":"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"}
@@ -10,27 +10,85 @@ import type { AuthConfig } from '../auth/types.js';
10
10
  import { B2CInstance } from '../instance/index.js';
11
11
  import type { DwJsonConfig } from './dw-json.js';
12
12
  import type { NormalizedConfig, ConfigWarning } from './types.js';
13
+ /**
14
+ * Converts a kebab-case string to camelCase.
15
+ *
16
+ * @param str - The kebab-case string to convert
17
+ * @returns The camelCase equivalent
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * kebabToCamelCase('code-version'); // 'codeVersion'
22
+ * kebabToCamelCase('client-id'); // 'clientId'
23
+ * kebabToCamelCase('hostname'); // 'hostname' (no change)
24
+ * ```
25
+ */
26
+ export declare function kebabToCamelCase(str: string): string;
27
+ /**
28
+ * Legacy/non-standard aliases that cannot be derived by kebab→camel conversion.
29
+ * Maps alias → canonical camelCase field name.
30
+ */
31
+ export declare const CONFIG_KEY_ALIASES: Record<string, string>;
32
+ /**
33
+ * Normalizes config keys to canonical camelCase form.
34
+ *
35
+ * Resolution order for each key:
36
+ * 1. Check CONFIG_KEY_ALIASES for legacy/non-standard names
37
+ * 2. Fall back to kebab→camelCase conversion
38
+ * 3. First value wins when multiple keys resolve to the same canonical name
39
+ *
40
+ * @param raw - The raw config object with potentially mixed key formats
41
+ * @returns A new object with all keys in canonical camelCase
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * normalizeConfigKeys({ 'client-id': 'abc', 'code-version': 'v1' });
46
+ * // { clientId: 'abc', codeVersion: 'v1' }
47
+ *
48
+ * normalizeConfigKeys({ server: 'example.com', hostname: 'other.com' });
49
+ * // { hostname: 'example.com' } (first value wins)
50
+ * ```
51
+ */
52
+ export declare function normalizeConfigKeys(raw: Record<string, unknown>): Record<string, unknown>;
13
53
  /**
14
54
  * Maps dw.json fields to normalized config format.
15
55
  *
16
56
  * This is the SINGLE place where dw.json field mapping happens.
17
- * Handles multiple field name variants for backward compatibility:
18
- * - WebDAV hostname: `webdav-hostname`, `webdav-server`, `secureHostname`, `secure-server`
19
- * - Short code: `shortCode`, `short-code`, `scapi-shortcode`
57
+ * Keys are already normalized to camelCase by normalizeConfigKeys() in loadDwJson(),
58
+ * so this function only handles genuine renames (e.g., `name` `instanceName`,
59
+ * `oauthScopes` `scopes`).
20
60
  *
21
- * @param json - The raw dw.json config
61
+ * @param json - The normalized dw.json config (camelCase keys)
22
62
  * @returns Normalized configuration
23
63
  *
24
64
  * @example
25
65
  * ```typescript
26
66
  * import { mapDwJsonToNormalizedConfig } from '@salesforce/b2c-tooling-sdk/config';
27
67
  *
28
- * const dwJson = { hostname: 'example.com', 'code-version': 'v1' };
68
+ * const dwJson = { hostname: 'example.com', codeVersion: 'v1' };
29
69
  * const config = mapDwJsonToNormalizedConfig(dwJson);
30
70
  * // { hostname: 'example.com', codeVersion: 'v1' }
31
71
  * ```
32
72
  */
33
73
  export declare function mapDwJsonToNormalizedConfig(json: DwJsonConfig): NormalizedConfig;
74
+ /**
75
+ * Maps normalized config to dw.json format.
76
+ *
77
+ * This is the reverse of mapDwJsonToNormalizedConfig. It converts normalized
78
+ * config (camelCase) back to dw.json format (kebab-case).
79
+ *
80
+ * @param config - The normalized configuration
81
+ * @param name - Optional instance name to include
82
+ * @returns DwJsonConfig structure
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * const config = { hostname: 'example.com', codeVersion: 'v1', clientId: 'abc' };
87
+ * const dwJson = mapNormalizedConfigToDwJson(config, 'staging');
88
+ * // { name: 'staging', hostname: 'example.com', 'code-version': 'v1', 'client-id': 'abc' }
89
+ * ```
90
+ */
91
+ export declare function mapNormalizedConfigToDwJson(config: Partial<NormalizedConfig>, name?: string): DwJsonConfig;
34
92
  /**
35
93
  * Options for merging configurations.
36
94
  */