sfdx-hardis 6.0.6-beta202508141313.0 → 6.0.7-beta202508172156.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 (204) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/lib/commands/hardis/auth/login.js +3 -1
  3. package/lib/commands/hardis/auth/login.js.map +1 -1
  4. package/lib/commands/hardis/doc/fieldusage.js +3 -1
  5. package/lib/commands/hardis/doc/fieldusage.js.map +1 -1
  6. package/lib/commands/hardis/doc/flow2markdown.js +3 -1
  7. package/lib/commands/hardis/doc/flow2markdown.js.map +1 -1
  8. package/lib/commands/hardis/doc/mkdocs-to-cf.js +3 -1
  9. package/lib/commands/hardis/doc/mkdocs-to-cf.js.map +1 -1
  10. package/lib/commands/hardis/doc/mkdocs-to-salesforce.js +40 -38
  11. package/lib/commands/hardis/doc/mkdocs-to-salesforce.js.map +1 -1
  12. package/lib/commands/hardis/doc/override-prompts.js +3 -1
  13. package/lib/commands/hardis/doc/override-prompts.js.map +1 -1
  14. package/lib/commands/hardis/doc/packagexml2markdown.js +28 -26
  15. package/lib/commands/hardis/doc/packagexml2markdown.js.map +1 -1
  16. package/lib/commands/hardis/doc/plugin/generate.js +3 -1
  17. package/lib/commands/hardis/doc/plugin/generate.js.map +1 -1
  18. package/lib/commands/hardis/git/pull-requests/extract.js +3 -1
  19. package/lib/commands/hardis/git/pull-requests/extract.js.map +1 -1
  20. package/lib/commands/hardis/lint/access.js +3 -1
  21. package/lib/commands/hardis/lint/access.js.map +1 -1
  22. package/lib/commands/hardis/lint/metadatastatus.js +3 -1
  23. package/lib/commands/hardis/lint/metadatastatus.js.map +1 -1
  24. package/lib/commands/hardis/lint/missingattributes.js +3 -1
  25. package/lib/commands/hardis/lint/missingattributes.js.map +1 -1
  26. package/lib/commands/hardis/lint/unusedmetadatas.js +3 -1
  27. package/lib/commands/hardis/lint/unusedmetadatas.js.map +1 -1
  28. package/lib/commands/hardis/mdapi/deploy.d.ts +1 -1
  29. package/lib/commands/hardis/mdapi/deploy.js +3 -1
  30. package/lib/commands/hardis/mdapi/deploy.js.map +1 -1
  31. package/lib/commands/hardis/misc/custom-label-translations.js +3 -1
  32. package/lib/commands/hardis/misc/custom-label-translations.js.map +1 -1
  33. package/lib/commands/hardis/misc/purge-references.js +3 -1
  34. package/lib/commands/hardis/misc/purge-references.js.map +1 -1
  35. package/lib/commands/hardis/misc/toml2csv.js +3 -1
  36. package/lib/commands/hardis/misc/toml2csv.js.map +1 -1
  37. package/lib/commands/hardis/org/community/update.d.ts +1 -1
  38. package/lib/commands/hardis/org/community/update.js +3 -1
  39. package/lib/commands/hardis/org/community/update.js.map +1 -1
  40. package/lib/commands/hardis/org/configure/data.js +3 -1
  41. package/lib/commands/hardis/org/configure/data.js.map +1 -1
  42. package/lib/commands/hardis/org/configure/files.js +3 -1
  43. package/lib/commands/hardis/org/configure/files.js.map +1 -1
  44. package/lib/commands/hardis/org/configure/monitoring.js +3 -1
  45. package/lib/commands/hardis/org/configure/monitoring.js.map +1 -1
  46. package/lib/commands/hardis/org/connect.js +3 -1
  47. package/lib/commands/hardis/org/connect.js.map +1 -1
  48. package/lib/commands/hardis/org/create.js +3 -1
  49. package/lib/commands/hardis/org/create.js.map +1 -1
  50. package/lib/commands/hardis/org/data/delete.js +3 -1
  51. package/lib/commands/hardis/org/data/delete.js.map +1 -1
  52. package/lib/commands/hardis/org/data/export.js +3 -1
  53. package/lib/commands/hardis/org/data/export.js.map +1 -1
  54. package/lib/commands/hardis/org/diagnose/instanceupgrade.js +3 -1
  55. package/lib/commands/hardis/org/diagnose/instanceupgrade.js.map +1 -1
  56. package/lib/commands/hardis/org/diagnose/licenses.js +3 -1
  57. package/lib/commands/hardis/org/diagnose/licenses.js.map +1 -1
  58. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js +3 -1
  59. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js.map +1 -1
  60. package/lib/commands/hardis/org/diagnose/unusedlicenses.js +15 -3
  61. package/lib/commands/hardis/org/diagnose/unusedlicenses.js.map +1 -1
  62. package/lib/commands/hardis/org/diagnose/unusedusers.js +6 -4
  63. package/lib/commands/hardis/org/diagnose/unusedusers.js.map +1 -1
  64. package/lib/commands/hardis/org/files/export.js +3 -1
  65. package/lib/commands/hardis/org/files/export.js.map +1 -1
  66. package/lib/commands/hardis/org/files/import.js +3 -1
  67. package/lib/commands/hardis/org/files/import.js.map +1 -1
  68. package/lib/commands/hardis/org/generate/packagexmlfull.js +3 -1
  69. package/lib/commands/hardis/org/generate/packagexmlfull.js.map +1 -1
  70. package/lib/commands/hardis/org/monitor/limits.js +3 -1
  71. package/lib/commands/hardis/org/monitor/limits.js.map +1 -1
  72. package/lib/commands/hardis/org/multi-org-query.js +3 -1
  73. package/lib/commands/hardis/org/multi-org-query.js.map +1 -1
  74. package/lib/commands/hardis/org/purge/apexlog.js +3 -1
  75. package/lib/commands/hardis/org/purge/apexlog.js.map +1 -1
  76. package/lib/commands/hardis/org/purge/flow.js +3 -1
  77. package/lib/commands/hardis/org/purge/flow.js.map +1 -1
  78. package/lib/commands/hardis/org/refresh/after-refresh.d.ts +22 -0
  79. package/lib/commands/hardis/org/refresh/after-refresh.js +272 -0
  80. package/lib/commands/hardis/org/refresh/after-refresh.js.map +1 -0
  81. package/lib/commands/hardis/org/refresh/before-refresh.d.ts +34 -0
  82. package/lib/commands/hardis/org/refresh/before-refresh.js +502 -0
  83. package/lib/commands/hardis/org/refresh/before-refresh.js.map +1 -0
  84. package/lib/commands/hardis/org/retrieve/packageconfig.js +3 -1
  85. package/lib/commands/hardis/org/retrieve/packageconfig.js.map +1 -1
  86. package/lib/commands/hardis/org/retrieve/sources/analytics.js +3 -1
  87. package/lib/commands/hardis/org/retrieve/sources/analytics.js.map +1 -1
  88. package/lib/commands/hardis/org/retrieve/sources/dx.js +3 -1
  89. package/lib/commands/hardis/org/retrieve/sources/dx.js.map +1 -1
  90. package/lib/commands/hardis/org/retrieve/sources/dx2.js +3 -1
  91. package/lib/commands/hardis/org/retrieve/sources/dx2.js.map +1 -1
  92. package/lib/commands/hardis/org/retrieve/sources/metadata.js +3 -1
  93. package/lib/commands/hardis/org/retrieve/sources/metadata.js.map +1 -1
  94. package/lib/commands/hardis/org/select.js +3 -1
  95. package/lib/commands/hardis/org/select.js.map +1 -1
  96. package/lib/commands/hardis/org/user/freeze.js +3 -1
  97. package/lib/commands/hardis/org/user/freeze.js.map +1 -1
  98. package/lib/commands/hardis/org/user/unfreeze.js +3 -1
  99. package/lib/commands/hardis/org/user/unfreeze.js.map +1 -1
  100. package/lib/commands/hardis/package/create.js +3 -1
  101. package/lib/commands/hardis/package/create.js.map +1 -1
  102. package/lib/commands/hardis/package/mergexml.js +3 -1
  103. package/lib/commands/hardis/package/mergexml.js.map +1 -1
  104. package/lib/commands/hardis/package/version/create.js +3 -1
  105. package/lib/commands/hardis/package/version/create.js.map +1 -1
  106. package/lib/commands/hardis/package/version/list.js +3 -1
  107. package/lib/commands/hardis/package/version/list.js.map +1 -1
  108. package/lib/commands/hardis/package/version/promote.js +3 -1
  109. package/lib/commands/hardis/package/version/promote.js.map +1 -1
  110. package/lib/commands/hardis/packagexml/append.d.ts +1 -1
  111. package/lib/commands/hardis/packagexml/append.js +3 -1
  112. package/lib/commands/hardis/packagexml/append.js.map +1 -1
  113. package/lib/commands/hardis/packagexml/remove.d.ts +1 -1
  114. package/lib/commands/hardis/packagexml/remove.js +3 -1
  115. package/lib/commands/hardis/packagexml/remove.js.map +1 -1
  116. package/lib/commands/hardis/project/audit/callincallout.js +3 -1
  117. package/lib/commands/hardis/project/audit/callincallout.js.map +1 -1
  118. package/lib/commands/hardis/project/audit/duplicatefiles.js +3 -1
  119. package/lib/commands/hardis/project/audit/duplicatefiles.js.map +1 -1
  120. package/lib/commands/hardis/project/audit/remotesites.js +3 -1
  121. package/lib/commands/hardis/project/audit/remotesites.js.map +1 -1
  122. package/lib/commands/hardis/project/clean/emptyitems.js +3 -1
  123. package/lib/commands/hardis/project/clean/emptyitems.js.map +1 -1
  124. package/lib/commands/hardis/project/clean/filter-xml-content.d.ts +1 -1
  125. package/lib/commands/hardis/project/clean/filter-xml-content.js +3 -1
  126. package/lib/commands/hardis/project/clean/filter-xml-content.js.map +1 -1
  127. package/lib/commands/hardis/project/clean/hiddenitems.js +3 -1
  128. package/lib/commands/hardis/project/clean/hiddenitems.js.map +1 -1
  129. package/lib/commands/hardis/project/clean/manageditems.js +3 -1
  130. package/lib/commands/hardis/project/clean/manageditems.js.map +1 -1
  131. package/lib/commands/hardis/project/clean/orgmissingitems.js +3 -1
  132. package/lib/commands/hardis/project/clean/orgmissingitems.js.map +1 -1
  133. package/lib/commands/hardis/project/clean/references.js +3 -1
  134. package/lib/commands/hardis/project/clean/references.js.map +1 -1
  135. package/lib/commands/hardis/project/clean/retrievefolders.js +3 -1
  136. package/lib/commands/hardis/project/clean/retrievefolders.js.map +1 -1
  137. package/lib/commands/hardis/project/clean/standarditems.js +3 -1
  138. package/lib/commands/hardis/project/clean/standarditems.js.map +1 -1
  139. package/lib/commands/hardis/project/clean/systemdebug.js +3 -1
  140. package/lib/commands/hardis/project/clean/systemdebug.js.map +1 -1
  141. package/lib/commands/hardis/project/configure/auth.js +2 -1
  142. package/lib/commands/hardis/project/configure/auth.js.map +1 -1
  143. package/lib/commands/hardis/project/convert/profilestopermsets.js +3 -1
  144. package/lib/commands/hardis/project/convert/profilestopermsets.js.map +1 -1
  145. package/lib/commands/hardis/project/deploy/simulate.js +3 -1
  146. package/lib/commands/hardis/project/deploy/simulate.js.map +1 -1
  147. package/lib/commands/hardis/project/fix/profiletabs.js +3 -1
  148. package/lib/commands/hardis/project/fix/profiletabs.js.map +1 -1
  149. package/lib/commands/hardis/project/fix/v53flexipages.js +3 -1
  150. package/lib/commands/hardis/project/fix/v53flexipages.js.map +1 -1
  151. package/lib/commands/hardis/project/generate/bypass.js +3 -1
  152. package/lib/commands/hardis/project/generate/bypass.js.map +1 -1
  153. package/lib/commands/hardis/project/generate/gitdelta.js +3 -1
  154. package/lib/commands/hardis/project/generate/gitdelta.js.map +1 -1
  155. package/lib/commands/hardis/project/lint.js +3 -1
  156. package/lib/commands/hardis/project/lint.js.map +1 -1
  157. package/lib/commands/hardis/scratch/delete.js +3 -1
  158. package/lib/commands/hardis/scratch/delete.js.map +1 -1
  159. package/lib/commands/hardis/scratch/pool/localauth.js +3 -1
  160. package/lib/commands/hardis/scratch/pool/localauth.js.map +1 -1
  161. package/lib/commands/hardis/scratch/pool/refresh.js +3 -1
  162. package/lib/commands/hardis/scratch/pool/refresh.js.map +1 -1
  163. package/lib/commands/hardis/scratch/pool/reset.js +3 -1
  164. package/lib/commands/hardis/scratch/pool/reset.js.map +1 -1
  165. package/lib/commands/hardis/scratch/pool/view.js +3 -1
  166. package/lib/commands/hardis/scratch/pool/view.js.map +1 -1
  167. package/lib/commands/hardis/scratch/pull.js +3 -1
  168. package/lib/commands/hardis/scratch/pull.js.map +1 -1
  169. package/lib/commands/hardis/scratch/push.js +3 -1
  170. package/lib/commands/hardis/scratch/push.js.map +1 -1
  171. package/lib/commands/hardis/source/retrieve.d.ts +1 -1
  172. package/lib/commands/hardis/source/retrieve.js +3 -1
  173. package/lib/commands/hardis/source/retrieve.js.map +1 -1
  174. package/lib/commands/hardis/work/new.js +26 -10
  175. package/lib/commands/hardis/work/new.js.map +1 -1
  176. package/lib/commands/hardis/work/refresh.js +3 -1
  177. package/lib/commands/hardis/work/refresh.js.map +1 -1
  178. package/lib/commands/hardis/work/resetselection.js +3 -1
  179. package/lib/commands/hardis/work/resetselection.js.map +1 -1
  180. package/lib/commands/hardis/work/save.js +3 -1
  181. package/lib/commands/hardis/work/save.js.map +1 -1
  182. package/lib/commands/hardis/work/ws.js +3 -1
  183. package/lib/commands/hardis/work/ws.js.map +1 -1
  184. package/lib/commands/hello/world.d.ts +1 -1
  185. package/lib/commands/hello/world.js +3 -1
  186. package/lib/commands/hello/world.js.map +1 -1
  187. package/lib/common/utils/apiUtils.js +4 -4
  188. package/lib/common/utils/apiUtils.js.map +1 -1
  189. package/lib/common/utils/deployUtils.js +2 -2
  190. package/lib/common/utils/deployUtils.js.map +1 -1
  191. package/lib/common/utils/filesUtils.d.ts +1 -0
  192. package/lib/common/utils/filesUtils.js +5 -3
  193. package/lib/common/utils/filesUtils.js.map +1 -1
  194. package/lib/common/utils/orgConfigUtils.d.ts +6 -0
  195. package/lib/common/utils/orgConfigUtils.js +17 -8
  196. package/lib/common/utils/orgConfigUtils.js.map +1 -1
  197. package/lib/common/utils/orgUtils.js +14 -1
  198. package/lib/common/utils/orgUtils.js.map +1 -1
  199. package/lib/common/utils/refresh/connectedAppUtils.d.ts +68 -0
  200. package/lib/common/utils/refresh/connectedAppUtils.js +340 -0
  201. package/lib/common/utils/refresh/connectedAppUtils.js.map +1 -0
  202. package/oclif.lock +730 -699
  203. package/oclif.manifest.json +429 -189
  204. package/package.json +5 -5
@@ -0,0 +1,502 @@
1
+ import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
2
+ import { Messages, SfError } from '@salesforce/core';
3
+ import fs from 'fs-extra';
4
+ import c from 'chalk';
5
+ import open from 'open';
6
+ import axios from 'axios';
7
+ import path from 'path';
8
+ import puppeteer from 'puppeteer-core';
9
+ import { execCommand, execSfdxJson, isCI, uxLog } from '../../../../common/utils/index.js';
10
+ import { prompts } from '../../../../common/utils/prompts.js';
11
+ import { parseXmlFile } from '../../../../common/utils/xmlUtils.js';
12
+ import { getChromeExecutablePath } from '../../../../common/utils/orgConfigUtils.js';
13
+ import { deleteConnectedApps, retrieveConnectedApps, validateConnectedApps, findConnectedAppFile, selectConnectedAppsForProcessing, createConnectedAppSuccessResponse, handleConnectedAppError } from '../../../../common/utils/refresh/connectedAppUtils.js';
14
+ import { getConfig, setConfig } from '../../../../config/index.js';
15
+ import { soqlQuery } from '../../../../common/utils/apiUtils.js';
16
+ import { WebSocketClient } from '../../../../common/websocketClient.js';
17
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
18
+ const messages = Messages.loadMessages('sfdx-hardis', 'org');
19
+ export default class OrgRefreshBeforeRefresh extends SfCommand {
20
+ static title = 'Save info to restore before org refresh';
21
+ static description = `
22
+ ## Command Behavior
23
+
24
+ **Backs up all Connected Apps and their secrets from a Salesforce org before a sandbox refresh, enabling full restoration after the refresh.**
25
+
26
+ This command is essential for Salesforce sandbox refresh operations where Connected Apps (and their Consumer Secrets) would otherwise be lost. It automates the extraction, secure storage, and (optionally) deletion of Connected Apps, ensuring that all credentials and configuration can be restored post-refresh.
27
+
28
+ Key functionalities:
29
+
30
+ - **Connected App Discovery:** Lists all Connected Apps in the org, with options to filter by name or process all.
31
+ - **User Selection:** Allows interactive or flag-based selection of which Connected Apps to back up.
32
+ - **Metadata Retrieval:** Retrieves Connected App metadata and saves it in a dedicated project folder for the sandbox instance.
33
+ - **Consumer Secret Extraction:** Attempts to extract Consumer Secrets automatically using browser automation (Puppeteer), or prompts for manual entry if automation fails.
34
+ - **Config Persistence:** Stores the list of selected apps in the project config for use during restoration.
35
+ - **Optional Deletion:** Can delete the Connected Apps from the org after backup, as required for re-upload after refresh.
36
+ - **Summary and Reporting:** Provides a summary of actions, including which apps were saved and whether secrets were captured.
37
+
38
+ This command is part of [sfdx-hardis Sandbox Refresh](https://sfdx-hardis.cloudity.com/salesforce-sandbox-refresh/) and is designed to be run before a sandbox refresh. It ensures that all Connected Apps and their secrets are safely stored for later restoration.
39
+
40
+ <details markdown="1">
41
+ <summary>Technical explanations</summary>
42
+
43
+ - **Salesforce CLI Integration:** Uses \`sf org list metadata\` and other CLI commands to discover and retrieve Connected Apps.
44
+ - **Metadata Handling:** Saves Connected App XML files in a dedicated folder under \`scripts / sandbox - refresh / <sandbox-folder > \`.
45
+ - **Consumer Secret Handling:** Uses Puppeteer to automate browser login and extraction of Consumer Secrets, falling back to manual prompts if needed.
46
+ - **Config Management:** Updates \`config /.sfdx - hardis.yml\` with the list of selected apps for later use.
47
+ - **Deletion Logic:** Optionally deletes Connected Apps from the org (required for re-upload after refresh), with user confirmation unless running in CI or with \`--delete \` flag.
48
+ - **Error Handling:** Provides detailed error messages and guidance if retrieval or extraction fails.
49
+
50
+ </details>
51
+ `;
52
+ static examples = [
53
+ `$ sf hardis:org:refresh:before-refresh`,
54
+ `$ sf hardis:org:refresh:before-refresh --name "MyConnectedApp"`,
55
+ `$ sf hardis:org:refresh:before-refresh --name "App1,App2,App3"`,
56
+ `$ sf hardis:org:refresh:before-refresh --all`,
57
+ `$ sf hardis:org:refresh:before-refresh --delete`,
58
+ ];
59
+ static flags = {
60
+ "target-org": Flags.requiredOrg(),
61
+ delete: Flags.boolean({
62
+ char: 'd',
63
+ summary: 'Delete Connected Apps from org after saving',
64
+ description: 'By default, Connected Apps are not deleted from the org after saving. Set this flag to force their deletion so they will be able to be reuploaded again after refreshing the org.',
65
+ default: false
66
+ }),
67
+ name: Flags.string({
68
+ char: 'n',
69
+ summary: messages.getMessage('nameFilter'),
70
+ description: 'Connected App name(s) to process. For multiple apps, separate with commas (e.g., "App1,App2")'
71
+ }),
72
+ all: Flags.boolean({
73
+ char: 'a',
74
+ summary: 'Process all Connected Apps without selection prompt',
75
+ description: 'If set, all Connected Apps from the org will be processed. Takes precedence over --name if both are specified.'
76
+ }),
77
+ websocket: Flags.string({
78
+ description: messages.getMessage('websocket'),
79
+ }),
80
+ skipauth: Flags.boolean({
81
+ description: 'Skip authentication check when a default username is required',
82
+ })
83
+ };
84
+ static requiresProject = true;
85
+ conn;
86
+ saveProjectPath = '';
87
+ refreshSandboxConfig = {};
88
+ async run() {
89
+ const { flags } = await this.parse(OrgRefreshBeforeRefresh);
90
+ this.conn = flags["target-org"].getConnection();
91
+ const orgUsername = flags["target-org"].getUsername(); // Cast to string to avoid TypeScript error
92
+ const instanceUrl = this.conn.instanceUrl;
93
+ const accessToken = this.conn.accessToken; // Ensure accessToken is a string
94
+ const processAll = flags.all || false;
95
+ const nameFilter = processAll ? undefined : flags.name; // If --all is set, ignore --name
96
+ const config = await getConfig("user");
97
+ this.refreshSandboxConfig = config?.refreshSandboxConfig || {};
98
+ uxLog("action", this, c.cyan(`This command with save information that will need to be restored after org refresh`));
99
+ // Check org is connected
100
+ if (!accessToken) {
101
+ throw new SfError(c.red('Access token is required to retrieve Connected Apps from the org. Please authenticate to a default org.'));
102
+ }
103
+ this.saveProjectPath = await this.createSaveProject();
104
+ try {
105
+ // Step 1: Get Connected Apps from org or based on provided name filter
106
+ const connectedApps = await this.getConnectedApps(orgUsername, nameFilter, processAll);
107
+ if (connectedApps.length === 0) {
108
+ uxLog("warning", this, c.yellow('No Connected Apps found'));
109
+ return { success: false, message: 'No Connected Apps found' };
110
+ }
111
+ // Step 2: Determine which apps to process (all, filtered, or user-selected)
112
+ const selectedApps = await this.selectConnectedApps(connectedApps, processAll, nameFilter);
113
+ if (selectedApps.length === 0) {
114
+ uxLog("warning", this, c.yellow('No Connected Apps selected'));
115
+ return { success: false, message: 'No Connected Apps selected' };
116
+ }
117
+ this.refreshSandboxConfig.connectedApps = selectedApps.map(app => app.fullName).sort();
118
+ await this.saveConfig();
119
+ // Step 3: Process the selected Connected Apps
120
+ const updatedApps = await this.processConnectedApps(orgUsername, selectedApps, instanceUrl, accessToken);
121
+ // Step 4: Delete Connected Apps from org if required (default behavior)
122
+ let deleteApps = flags.delete || false;
123
+ if (!isCI && !deleteApps) {
124
+ const connectedAppNames = updatedApps.map(app => app.fullName).join(', ');
125
+ const deletePrompt = await prompts({
126
+ type: 'confirm',
127
+ name: 'delete',
128
+ message: `Do you want to delete the Connected Apps from the org after saving? ${connectedAppNames}`,
129
+ description: 'If you do not delete them, they will remain in the org and can be re-uploaded after refreshing the org.',
130
+ initial: false
131
+ });
132
+ deleteApps = deletePrompt.delete;
133
+ }
134
+ if (deleteApps) {
135
+ uxLog("action", this, c.cyan(`Deleting ${updatedApps.length} Connected Apps from ${this.conn.instanceUrl} ...`));
136
+ await deleteConnectedApps(orgUsername, updatedApps, this, this.saveProjectPath);
137
+ uxLog("success", this, c.green('Connected Apps were successfully deleted from the org.'));
138
+ }
139
+ const summaryMessage = deleteApps
140
+ ? `You are now ready to refresh your sandbox org, as you will be able to re-upload the Connected Apps after the refresh.`
141
+ : `Dry-run successful, run again the command with Connected Apps deletion to be able to refresh your org and re-upload the Connected Apps after the refresh.`;
142
+ uxLog("action", this, c.cyan(summaryMessage));
143
+ // Add a summary message at the end
144
+ if (updatedApps.length > 0) {
145
+ uxLog("success", this, c.green(`Successfully saved locally ${updatedApps.length} Connected App(s) with their Consumer Secrets`));
146
+ }
147
+ uxLog("success", this, c.cyan('Saved refresh sandbox configuration in config/.sfdx-hardis.yml'));
148
+ WebSocketClient.sendReportFileMessage(path.join(process.cwd(), 'config', '.sfdx-hardis.yml#refreshSandboxConfig'), "Sandbox refresh configuration", 'report');
149
+ return createConnectedAppSuccessResponse(`Successfully processed ${updatedApps.length} Connected App(s)`, updatedApps.map(app => app.fullName), {
150
+ consumerSecretsAdded: updatedApps.map(app => app.consumerSecret ? app.fullName : null).filter(Boolean)
151
+ });
152
+ }
153
+ catch (error) {
154
+ return handleConnectedAppError(error, this);
155
+ }
156
+ }
157
+ async createSaveProject() {
158
+ const folderName = this.conn.instanceUrl.replace(/https?:\/\//, '').replace("my.salesforce.com", "").replace(/\//g, '-').replace(/[^a-zA-Z0-9-]/g, '');
159
+ const sandboxRefreshRootFolder = path.join(process.cwd(), 'scripts', 'sandbox-refresh');
160
+ const projectPath = path.join(sandboxRefreshRootFolder, folderName);
161
+ await fs.ensureDir(projectPath);
162
+ uxLog("action", this, c.cyan(`Creating sfdx-project for sandbox info storage in ${projectPath}`));
163
+ const createCommand = `sf project generate --name "${folderName}"`;
164
+ await execCommand(createCommand, this, {
165
+ output: true,
166
+ fail: true,
167
+ });
168
+ uxLog("log", this, c.grey('Moving sfdx-project to root...'));
169
+ await fs.copy(folderName, projectPath, { overwrite: true });
170
+ await fs.remove(folderName);
171
+ return projectPath;
172
+ }
173
+ async getConnectedApps(orgUsername, nameFilter, processAll) {
174
+ // Set appropriate log message based on flags
175
+ if (processAll) {
176
+ uxLog("action", this, c.cyan('Processing all Connected Apps from org (selection prompt bypassed)'));
177
+ }
178
+ else if (nameFilter) {
179
+ uxLog("action", this, c.cyan(`Processing specified Connected App(s): ${nameFilter} (selection prompt bypassed)`));
180
+ }
181
+ else {
182
+ uxLog("action", this, c.cyan(`Retrieving list of Connected Apps from org ${this.conn.instanceUrl} ...`));
183
+ }
184
+ const command = `sf org list metadata --metadata-type ConnectedApp --target-org ${orgUsername}`;
185
+ const result = await execSfdxJson(command, this, { output: true });
186
+ const availableApps = result?.result && Array.isArray(result.result) ? result.result : [];
187
+ if (availableApps.length === 0) {
188
+ uxLog("warning", this, c.yellow('No Connected Apps were found in the org.'));
189
+ return [];
190
+ }
191
+ availableApps.sort((a, b) => a.fullName.localeCompare(b.fullName));
192
+ const availableAppNames = availableApps.map(app => app.fullName);
193
+ uxLog("log", this, c.grey(`Found ${availableApps.length} Connected App(s) in the org`));
194
+ // If name filter is provided, validate and filter the requested apps
195
+ if (nameFilter) {
196
+ const appNames = nameFilter.split(',').map(name => name.trim());
197
+ uxLog("action", this, c.cyan(`Validating specified Connected App(s): ${appNames.join(', ')}`));
198
+ validateConnectedApps(appNames, availableAppNames, this, 'org');
199
+ // Filter available apps to only include the ones specified in the name filter (case-insensitive)
200
+ const connectedApps = availableApps.filter(app => appNames.some(name => name.toLowerCase() === app.fullName.toLowerCase()));
201
+ uxLog("success", this, c.green(`Successfully validated ${connectedApps.length} Connected App(s) in the org`));
202
+ return connectedApps;
203
+ }
204
+ // If no name filter, return all available apps
205
+ return availableApps;
206
+ }
207
+ async selectConnectedApps(connectedApps, processAll, nameFilter) {
208
+ const initialSelection = [];
209
+ if (this.refreshSandboxConfig.connectedApps && this.refreshSandboxConfig.connectedApps.length > 0) {
210
+ initialSelection.push(...this.refreshSandboxConfig.connectedApps);
211
+ }
212
+ return selectConnectedAppsForProcessing(connectedApps, initialSelection, processAll, nameFilter, 'Select Connected Apps that you will want to restore after org refresh', this);
213
+ }
214
+ async processConnectedApps(orgUsername, connectedApps, instanceUrl, accessToken = '') {
215
+ if (!orgUsername) {
216
+ throw new Error('Organization username is required');
217
+ }
218
+ const updatedApps = [];
219
+ let browserContext = null;
220
+ try {
221
+ // Step 1: Retrieve the Connected Apps from org
222
+ await this.retrieveConnectedAppsFromOrg(orgUsername, connectedApps, this.saveProjectPath);
223
+ // Step 2: Query for applicationIds for all Connected Apps
224
+ const connectedAppIdMap = await this.queryConnectedAppIds(orgUsername, connectedApps);
225
+ // Step 3: Initialize browser for automation if access token is available
226
+ uxLog("action", this, c.cyan('Initializing browser for automated Connected App Secrets extraction...'));
227
+ try {
228
+ browserContext = await this.initializeBrowser(instanceUrl, accessToken);
229
+ }
230
+ catch (e) {
231
+ uxLog("error", this, c.red(`Error initializing browser for automated Consumer Secret extraction: ${e.message}.
232
+ You might need to set variable PUPPETEER_EXECUTABLE_PATH with the target of a Chrome/Chromium path. example: /usr/bin/chromium-browser`));
233
+ // Continue without browser automation - will fall back to manual entry
234
+ }
235
+ // Step 4: Process each Connected App
236
+ for (const app of connectedApps) {
237
+ try {
238
+ const updatedApp = await this.processIndividualApp(app, connectedAppIdMap, browserContext, instanceUrl, this.saveProjectPath);
239
+ if (updatedApp) {
240
+ updatedApps.push(updatedApp);
241
+ }
242
+ }
243
+ catch (error) {
244
+ uxLog("warning", this, c.yellow(`Error processing ${app.fullName}: ${error.message || error}`));
245
+ }
246
+ }
247
+ return updatedApps;
248
+ }
249
+ finally {
250
+ // Close browser if it was opened
251
+ if (browserContext?.browser) {
252
+ uxLog("log", this, c.cyan('Closing browser...'));
253
+ await browserContext.browser.close();
254
+ }
255
+ }
256
+ }
257
+ async retrieveConnectedAppsFromOrg(orgUsername, connectedApps, saveProjectPath) {
258
+ uxLog("action", this, c.cyan(`Retrieving ${connectedApps.length} Connected App(s) from ${orgUsername}`));
259
+ await retrieveConnectedApps(orgUsername, connectedApps, this, saveProjectPath);
260
+ this.verifyConnectedAppsRetrieval(connectedApps);
261
+ }
262
+ verifyConnectedAppsRetrieval(connectedApps) {
263
+ if (connectedApps.length === 0)
264
+ return;
265
+ // Check if the Connected App files exist in the project
266
+ const missingApps = [];
267
+ for (const app of connectedApps) {
268
+ // Try to find the app in the standard location
269
+ const appPath = path.join(this.saveProjectPath, `force-app/main/default/connectedApps/${app.fullName}.connectedApp-meta.xml`);
270
+ if (!fs.existsSync(appPath)) {
271
+ // Also check in alternative locations where it might have been retrieved
272
+ const altPaths = [
273
+ path.join(this.saveProjectPath, `force-app/main/default/connectedApps/${app.fileName}.connectedApp-meta.xml`),
274
+ path.join(this.saveProjectPath, `force-app/main/default/connectedApps/${app.fullName.replace(/\s/g, '_')}.connectedApp-meta.xml`)
275
+ ];
276
+ const found = altPaths.some(path => fs.existsSync(path));
277
+ if (!found) {
278
+ missingApps.push(app.fullName);
279
+ }
280
+ }
281
+ }
282
+ // If any apps are missing, throw an error
283
+ if (missingApps.length > 0) {
284
+ const errorMsg = `Failed to retrieve the following Connected App(s): ${missingApps.join(', ')}`;
285
+ uxLog("error", this, c.red(errorMsg));
286
+ const dtlErrorMsg = "This could be due to:\n" +
287
+ " - Temporary Salesforce API issues\n" +
288
+ " - Permissions or profile issues in the org\n" +
289
+ " - Connected Apps that exist but are not accessible\n" +
290
+ "Please exclude the app or check your permissions in the org then try again.";
291
+ uxLog("warning", this, c.yellow(dtlErrorMsg));
292
+ throw new Error(errorMsg);
293
+ }
294
+ }
295
+ async queryConnectedAppIds(orgUsername, connectedApps) {
296
+ const connectedAppIdMap = {};
297
+ const appNamesForQuery = connectedApps.map(app => `'${app.fullName}'`).join(',');
298
+ if (appNamesForQuery.length === 0) {
299
+ return connectedAppIdMap;
300
+ }
301
+ uxLog("action", this, c.cyan('Retrieving applicationIds for all Connected Apps...'));
302
+ const queryCommand = `SELECT Id, Name FROM ConnectedApplication WHERE Name IN (${appNamesForQuery})`;
303
+ try {
304
+ const appQueryRes = await soqlQuery(queryCommand, this.conn);
305
+ if (appQueryRes?.records?.length > 0) {
306
+ // Populate the map with applicationIds
307
+ let logMsg = `Found ${appQueryRes.records.length} applicationId(s) for Connected Apps:`;
308
+ for (const record of appQueryRes.records) {
309
+ connectedAppIdMap[record.Name] = record.Id;
310
+ logMsg += `\n - ${record.Name}: ${record.Id}`;
311
+ }
312
+ uxLog("log", this, c.grey(logMsg));
313
+ }
314
+ else {
315
+ uxLog("warning", this, c.yellow('No applicationIds found in the org. Will use the fallback URL.'));
316
+ }
317
+ }
318
+ catch (queryError) {
319
+ uxLog("error", this, c.yellow(`Error retrieving applicationIds: ${queryError}`));
320
+ }
321
+ return connectedAppIdMap;
322
+ }
323
+ async initializeBrowser(instanceUrl, accessToken) {
324
+ // Get chrome/chromium executable path using shared utility
325
+ const chromeExecutablePath = getChromeExecutablePath();
326
+ uxLog("log", this, c.cyan(`chromeExecutablePath: ${chromeExecutablePath}`));
327
+ const browser = await puppeteer.launch({
328
+ args: ['--no-sandbox', '--disable-setuid-sandbox'],
329
+ headless: false, // Always show the browser window
330
+ executablePath: chromeExecutablePath,
331
+ timeout: 60000 // Increase timeout for browser launch
332
+ });
333
+ // Log in once for the session
334
+ const loginUrl = `${instanceUrl}/secur/frontdoor.jsp?sid=${accessToken}`;
335
+ uxLog("log", this, c.cyan(`Log in via browser using frontdoor.jsp...`));
336
+ const page = await browser.newPage();
337
+ await page.goto(loginUrl, { waitUntil: ['domcontentloaded', 'networkidle0'] });
338
+ await page.close();
339
+ return { browser, instanceUrl, accessToken };
340
+ }
341
+ async processIndividualApp(app, connectedAppIdMap, browserContext, instanceUrl, saveProjectPath) {
342
+ const connectedAppFile = await findConnectedAppFile(app.fullName, this, saveProjectPath);
343
+ if (!connectedAppFile) {
344
+ uxLog("warning", this, c.yellow(`Connected App file not found for ${app.fullName}`));
345
+ return undefined;
346
+ }
347
+ const connectedAppId = connectedAppIdMap[app.fullName];
348
+ let consumerSecretValue = null;
349
+ let viewLink;
350
+ // Try to extract application ID and view link
351
+ if (connectedAppId) {
352
+ try {
353
+ uxLog("action", this, c.cyan(`Extracting info for Connected App ${app.fullName}...`));
354
+ const applicationId = await this.extractApplicationId(instanceUrl, connectedAppId, app.fullName, browserContext?.accessToken ?? '');
355
+ viewLink = `${instanceUrl}/app/mgmt/forceconnectedapps/forceAppDetail.apexp?applicationId=${applicationId}`;
356
+ uxLog("success", this, c.green(`Successfully extracted application ID: ${applicationId} (viewLink: ${viewLink})`));
357
+ // Try automated extraction if browser is available
358
+ if (browserContext?.browser) {
359
+ uxLog("log", this, c.cyan(`Attempting to automatically extract Consumer Secret for ${app.fullName}...`));
360
+ try {
361
+ consumerSecretValue = await this.extractConsumerSecret(browserContext.browser, viewLink);
362
+ }
363
+ catch (puppeteerError) {
364
+ uxLog("warning", this, c.yellow(`Error extracting Consumer Secret with Puppeteer: ${puppeteerError}`));
365
+ consumerSecretValue = null;
366
+ }
367
+ }
368
+ }
369
+ catch (error) {
370
+ uxLog("error", this, c.red(`Could not extract application ID for : ${app.fullName}. Error message : ${error}`));
371
+ viewLink = `${instanceUrl}/lightning/setup/NavigationMenus/home`;
372
+ uxLog("action", this, c.cyan(`Opening application list page. Please manually find ${app.fullName}.`));
373
+ }
374
+ }
375
+ else {
376
+ // Fallback to the connected apps list page if applicationId can't be found
377
+ uxLog("warning", this, c.yellow(`No applicationId found for ${app.fullName}, opening application list page instead`));
378
+ viewLink = `${instanceUrl}/lightning/setup/NavigationMenus/home`;
379
+ }
380
+ try {
381
+ // If consumer secret was automatically extracted
382
+ if (consumerSecretValue) {
383
+ const xmlData = await parseXmlFile(connectedAppFile);
384
+ if (xmlData && xmlData.ConnectedApp) {
385
+ const consumerKey = xmlData.ConnectedApp.consumerKey ? xmlData.ConnectedApp.consumerKey[0] : 'unknown';
386
+ return await this.updateConnectedAppWithSecret(connectedAppFile, xmlData, consumerSecretValue, app, consumerKey);
387
+ }
388
+ }
389
+ else {
390
+ // Manual entry flow - open browser and prompt for secret
391
+ const msg = [
392
+ `Unable to automatically extract Consumer Secret for Connected App ${app.fullName}.`,
393
+ `- Open Connected App detail page of ${app.fullName} (Contextual menu -> View)`,
394
+ '- Click "Manage Consumer Details" button',
395
+ `- Copy the ${c.green('Consumer Secret')} value`
396
+ ].join('\n');
397
+ uxLog("action", this, c.cyan(msg));
398
+ await open(viewLink);
399
+ // Prompt for the Consumer Secret (manual entry)
400
+ const secretPromptResponse = await prompts({
401
+ type: 'text',
402
+ name: 'consumerSecret',
403
+ message: `Enter the Consumer Secret for ${app.fullName}:`,
404
+ description: 'You can find this in the browser after clicking "Manage Consumer Details"',
405
+ validate: (value) => value && value.trim() !== '' ? true : 'Consumer Secret is required'
406
+ });
407
+ if (!secretPromptResponse.consumerSecret) {
408
+ uxLog("warning", this, c.yellow(`Skipping ${app.fullName} due to missing Consumer Secret`));
409
+ return undefined;
410
+ }
411
+ // Parse the Connected App XML file
412
+ const xmlData = await parseXmlFile(connectedAppFile);
413
+ if (xmlData && xmlData.ConnectedApp) {
414
+ // Store the consumer secret
415
+ const consumerSecret = secretPromptResponse.consumerSecret;
416
+ const consumerKey = xmlData.ConnectedApp.consumerKey ? xmlData.ConnectedApp.consumerKey[0] : 'unknown';
417
+ return await this.updateConnectedAppWithSecret(connectedAppFile, xmlData, consumerSecret, app, consumerKey);
418
+ }
419
+ else {
420
+ uxLog("warning", this, c.yellow(`Could not parse XML for ${app.fullName}`));
421
+ }
422
+ }
423
+ }
424
+ catch (error) {
425
+ uxLog("warning", this, c.yellow(`Error processing ${app.fullName}: ${error.message}`));
426
+ }
427
+ return undefined;
428
+ }
429
+ async extractApplicationId(instanceUrl, connectedAppId, connectedAppName, accessToken) {
430
+ uxLog("log", this, c.cyan(`Extracting application ID for Connected App with ID: ${connectedAppName}`));
431
+ const url = `${instanceUrl}/${connectedAppId}`;
432
+ const response = await axios.get(url, {
433
+ headers: {
434
+ Cookie: `sid=${accessToken}`
435
+ }
436
+ });
437
+ const html = response.data;
438
+ const appIdMatch = html.match(/applicationId=([a-zA-Z0-9]+)/i);
439
+ if (!appIdMatch || !appIdMatch[1]) {
440
+ throw new Error('Could not extract application ID from HTML');
441
+ }
442
+ return appIdMatch[1];
443
+ }
444
+ async extractConsumerSecret(browser, appUrl) {
445
+ let page;
446
+ try {
447
+ page = await browser.newPage();
448
+ uxLog("log", this, c.grey(`Navigating to Connected App detail page...`));
449
+ await page.goto(appUrl, { waitUntil: ['domcontentloaded', 'networkidle0'] });
450
+ uxLog("log", this, c.grey(`Attempting to extract Consumer Secret...`));
451
+ // Click Manage Consumer Details button
452
+ const manageBtnId = 'input[id="appsetup:setupForm:details:oauthSettingsSection:manageConsumerKeySecretSection:manageConsumer"]';
453
+ await page.waitForSelector(manageBtnId, { timeout: 60000 });
454
+ await page.click(manageBtnId);
455
+ await page.waitForNavigation();
456
+ // Extract Consumer Secret value
457
+ const consumerSecretSpanId = '#appsetup\\:setupForm\\:consumerDetails\\:oauthConsumerSection\\:consumerSecretSection\\:consumerSecret';
458
+ await page.waitForSelector(consumerSecretSpanId, { timeout: 60000 });
459
+ const consumerSecretValue = await page.$eval(consumerSecretSpanId, element => element.textContent);
460
+ uxLog("success", this, c.green(`Successfully extracted Consumer Secret`));
461
+ return consumerSecretValue || null;
462
+ }
463
+ catch (error) {
464
+ uxLog("error", this, c.red(`Error extracting Consumer Secret: ${error}`));
465
+ return null;
466
+ }
467
+ finally {
468
+ if (page)
469
+ await page.close();
470
+ }
471
+ }
472
+ async updateConnectedAppWithSecret(connectedAppFile, xmlData, consumerSecret, app, consumerKey) {
473
+ const xmlString = await fs.readFile(connectedAppFile, 'utf8');
474
+ if (xmlString.includes('<consumerSecret>')) {
475
+ const updatedXmlString = xmlString.replace(/<consumerSecret>.*?<\/consumerSecret>/, `<consumerSecret>${consumerSecret}</consumerSecret>`);
476
+ await fs.writeFile(connectedAppFile, updatedXmlString);
477
+ }
478
+ else {
479
+ // Insert consumerSecret right after consumerKey
480
+ const updatedXmlString = xmlString.replace(/<consumerKey>.*?<\/consumerKey>/, `$&\n <consumerSecret>${consumerSecret}</consumerSecret>`);
481
+ await fs.writeFile(connectedAppFile, updatedXmlString);
482
+ }
483
+ xmlData.ConnectedApp.consumerSecret = [consumerSecret];
484
+ uxLog("success", this, c.green(`Successfully added Consumer Secret to ${app.fullName} in ${connectedAppFile}`));
485
+ return {
486
+ ...app,
487
+ consumerKey: consumerKey,
488
+ consumerSecret: consumerSecret
489
+ };
490
+ }
491
+ async saveConfig() {
492
+ const config = await getConfig("project");
493
+ if (!config.refreshSandboxConfig) {
494
+ config.refreshSandboxConfig = {};
495
+ }
496
+ if (JSON.stringify(this.refreshSandboxConfig) !== JSON.stringify(config.refreshSandboxConfig)) {
497
+ await setConfig("project", { refreshSandboxConfig: this.refreshSandboxConfig });
498
+ uxLog("log", this, c.cyan('Refresh sandbox configuration has been saved successfully.'));
499
+ }
500
+ }
501
+ }
502
+ //# sourceMappingURL=before-refresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"before-refresh.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/org/refresh/before-refresh.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,8 @@ Key functionalities:
20
20
  - **Package Listing:** Connects to a specified Salesforce org (or prompts for one if not provided) and retrieves a list of all installed packages.
21
21
  - **Configuration Update:** Offers the option to update your local project's configuration with the retrieved list of installed packages. This can be beneficial for automating package installations during environment setup or CI/CD processes.
22
22
 
23
- ## Technical explanations
23
+ <details markdown="1">
24
+ <summary>Technical explanations</summary>
24
25
 
25
26
  The command's technical implementation involves:
26
27
 
@@ -29,6 +30,7 @@ The command's technical implementation involves:
29
30
  - **Interactive Prompt:** It uses the \`prompts\` library to ask the user whether they want to update their local project configuration with the retrieved package list.
30
31
  - **Configuration Management:** If the user confirms, it calls \`managePackageConfig\` to update the project's configuration file (likely \`.sfdx-hardis.yml\`) with the new package information.
31
32
  - **User Feedback:** Provides clear messages to the user about the success of the package retrieval and configuration update.
33
+ </details>
32
34
  `;
33
35
  static examples = ['$ sf hardis:org:retrieve:packageconfig', 'sf hardis:org:retrieve:packageconfig -u myOrg'];
34
36
  static flags = {
@@ -1 +1 @@
1
- {"version":3,"file":"packageconfig.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/org/retrieve/packageconfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"packageconfig.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/org/retrieve/packageconfig.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,8 @@ Key functionalities:
25
25
  - **SFDX Bug Workarounds:** Incorporates internal logic to handle common issues or limitations encountered when retrieving CRM Analytics metadata using standard Salesforce CLI commands.
26
26
  - **Target Org Selection:** Allows you to specify the Salesforce org from which to retrieve the Analytics sources. If not provided, it will prompt for selection.
27
27
 
28
- ## Technical explanations
28
+ <details markdown="1">
29
+ <summary>Technical explanations</summary>
29
30
 
30
31
  The command's technical implementation involves:
31
32
 
@@ -35,6 +36,7 @@ The command's technical implementation involves:
35
36
  - **Salesforce CLI Retrieval:** It executes the \`sf project retrieve start\` command, using the newly created Analytics-specific \`package.xml\` to retrieve the sources to your local project.
36
37
  - **Temporary File Management:** It uses \`createTempDir\` to manage temporary files and directories created during the process.
37
38
  - **Interactive Org Selection:** Uses \`promptOrgUsernameDefault\` to guide the user in selecting the target Salesforce org if not provided via flags.
39
+ </details>
38
40
  `;
39
41
  static examples = ['$ sf hardis:org:retrieve:sources:analytics'];
40
42
  static flags = {
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../../../../src/commands/hardis/org/retrieve/sources/analytics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../../../../../src/commands/hardis/org/retrieve/sources/analytics.ts"],"names":[],"mappings":"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"}
@@ -34,7 +34,8 @@ Key functionalities:
34
34
  - **Org Shape Generation (Optional):** If the \`--shape\` flag is used, it also captures the org's shape and stores installed package information.
35
35
  - **Temporary File Management:** Uses temporary folders for intermediate steps, ensuring a clean working directory.
36
36
 
37
- ## Technical explanations
37
+ <details markdown="1">
38
+ <summary>Technical explanations</summary>
38
39
 
39
40
  The command's technical implementation involves:
40
41
 
@@ -46,6 +47,7 @@ The command's technical implementation involves:
46
47
  - **Org Shape Handling:** If \`--shape\` is enabled, it copies the generated \`package.xml\` and stores information about installed packages using \`setConfig\`.
47
48
  - **Error Handling:** Includes robust error handling for Salesforce CLI commands and file system operations.
48
49
  - **WebSocket Communication:** Uses \`WebSocketClient.sendRefreshCommandsMessage\` to notify connected VS Code clients about changes to the project.
50
+ </details>
49
51
  `;
50
52
  static examples = ['$ sf hardis:org:retrieve:sources:dx'];
51
53
  static flags = {