sfdx-hardis 6.0.6-beta202508141313.0 → 6.0.7-beta202508191748.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 (206) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/defaults/refresh-sandbox/package-certificates-to-save.xml +8 -0
  3. package/defaults/refresh-sandbox/package-metadatas-to-save.xml +44 -0
  4. package/lib/commands/hardis/auth/login.js +3 -1
  5. package/lib/commands/hardis/auth/login.js.map +1 -1
  6. package/lib/commands/hardis/doc/fieldusage.js +3 -1
  7. package/lib/commands/hardis/doc/fieldusage.js.map +1 -1
  8. package/lib/commands/hardis/doc/flow2markdown.js +3 -1
  9. package/lib/commands/hardis/doc/flow2markdown.js.map +1 -1
  10. package/lib/commands/hardis/doc/mkdocs-to-cf.js +3 -1
  11. package/lib/commands/hardis/doc/mkdocs-to-cf.js.map +1 -1
  12. package/lib/commands/hardis/doc/mkdocs-to-salesforce.js +40 -38
  13. package/lib/commands/hardis/doc/mkdocs-to-salesforce.js.map +1 -1
  14. package/lib/commands/hardis/doc/override-prompts.js +3 -1
  15. package/lib/commands/hardis/doc/override-prompts.js.map +1 -1
  16. package/lib/commands/hardis/doc/packagexml2markdown.js +28 -26
  17. package/lib/commands/hardis/doc/packagexml2markdown.js.map +1 -1
  18. package/lib/commands/hardis/doc/plugin/generate.js +3 -1
  19. package/lib/commands/hardis/doc/plugin/generate.js.map +1 -1
  20. package/lib/commands/hardis/git/pull-requests/extract.js +3 -1
  21. package/lib/commands/hardis/git/pull-requests/extract.js.map +1 -1
  22. package/lib/commands/hardis/lint/access.js +3 -1
  23. package/lib/commands/hardis/lint/access.js.map +1 -1
  24. package/lib/commands/hardis/lint/metadatastatus.js +3 -1
  25. package/lib/commands/hardis/lint/metadatastatus.js.map +1 -1
  26. package/lib/commands/hardis/lint/missingattributes.js +3 -1
  27. package/lib/commands/hardis/lint/missingattributes.js.map +1 -1
  28. package/lib/commands/hardis/lint/unusedmetadatas.js +3 -1
  29. package/lib/commands/hardis/lint/unusedmetadatas.js.map +1 -1
  30. package/lib/commands/hardis/mdapi/deploy.d.ts +1 -1
  31. package/lib/commands/hardis/mdapi/deploy.js +3 -1
  32. package/lib/commands/hardis/mdapi/deploy.js.map +1 -1
  33. package/lib/commands/hardis/misc/custom-label-translations.js +3 -1
  34. package/lib/commands/hardis/misc/custom-label-translations.js.map +1 -1
  35. package/lib/commands/hardis/misc/purge-references.js +3 -1
  36. package/lib/commands/hardis/misc/purge-references.js.map +1 -1
  37. package/lib/commands/hardis/misc/toml2csv.js +3 -1
  38. package/lib/commands/hardis/misc/toml2csv.js.map +1 -1
  39. package/lib/commands/hardis/org/community/update.d.ts +1 -1
  40. package/lib/commands/hardis/org/community/update.js +3 -1
  41. package/lib/commands/hardis/org/community/update.js.map +1 -1
  42. package/lib/commands/hardis/org/configure/data.js +3 -1
  43. package/lib/commands/hardis/org/configure/data.js.map +1 -1
  44. package/lib/commands/hardis/org/configure/files.js +3 -1
  45. package/lib/commands/hardis/org/configure/files.js.map +1 -1
  46. package/lib/commands/hardis/org/configure/monitoring.js +3 -1
  47. package/lib/commands/hardis/org/configure/monitoring.js.map +1 -1
  48. package/lib/commands/hardis/org/connect.js +3 -1
  49. package/lib/commands/hardis/org/connect.js.map +1 -1
  50. package/lib/commands/hardis/org/create.js +3 -1
  51. package/lib/commands/hardis/org/create.js.map +1 -1
  52. package/lib/commands/hardis/org/data/delete.js +3 -1
  53. package/lib/commands/hardis/org/data/delete.js.map +1 -1
  54. package/lib/commands/hardis/org/data/export.js +3 -1
  55. package/lib/commands/hardis/org/data/export.js.map +1 -1
  56. package/lib/commands/hardis/org/diagnose/instanceupgrade.js +3 -1
  57. package/lib/commands/hardis/org/diagnose/instanceupgrade.js.map +1 -1
  58. package/lib/commands/hardis/org/diagnose/licenses.js +3 -1
  59. package/lib/commands/hardis/org/diagnose/licenses.js.map +1 -1
  60. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js +3 -1
  61. package/lib/commands/hardis/org/diagnose/unused-connected-apps.js.map +1 -1
  62. package/lib/commands/hardis/org/diagnose/unusedlicenses.js +15 -3
  63. package/lib/commands/hardis/org/diagnose/unusedlicenses.js.map +1 -1
  64. package/lib/commands/hardis/org/diagnose/unusedusers.js +6 -4
  65. package/lib/commands/hardis/org/diagnose/unusedusers.js.map +1 -1
  66. package/lib/commands/hardis/org/files/export.js +3 -1
  67. package/lib/commands/hardis/org/files/export.js.map +1 -1
  68. package/lib/commands/hardis/org/files/import.js +3 -1
  69. package/lib/commands/hardis/org/files/import.js.map +1 -1
  70. package/lib/commands/hardis/org/generate/packagexmlfull.js +3 -1
  71. package/lib/commands/hardis/org/generate/packagexmlfull.js.map +1 -1
  72. package/lib/commands/hardis/org/monitor/limits.js +3 -1
  73. package/lib/commands/hardis/org/monitor/limits.js.map +1 -1
  74. package/lib/commands/hardis/org/multi-org-query.js +3 -1
  75. package/lib/commands/hardis/org/multi-org-query.js.map +1 -1
  76. package/lib/commands/hardis/org/purge/apexlog.js +3 -1
  77. package/lib/commands/hardis/org/purge/apexlog.js.map +1 -1
  78. package/lib/commands/hardis/org/purge/flow.js +3 -1
  79. package/lib/commands/hardis/org/purge/flow.js.map +1 -1
  80. package/lib/commands/hardis/org/refresh/after-refresh.d.ts +22 -0
  81. package/lib/commands/hardis/org/refresh/after-refresh.js +272 -0
  82. package/lib/commands/hardis/org/refresh/after-refresh.js.map +1 -0
  83. package/lib/commands/hardis/org/refresh/before-refresh.d.ts +42 -0
  84. package/lib/commands/hardis/org/refresh/before-refresh.js +725 -0
  85. package/lib/commands/hardis/org/refresh/before-refresh.js.map +1 -0
  86. package/lib/commands/hardis/org/retrieve/packageconfig.js +3 -1
  87. package/lib/commands/hardis/org/retrieve/packageconfig.js.map +1 -1
  88. package/lib/commands/hardis/org/retrieve/sources/analytics.js +3 -1
  89. package/lib/commands/hardis/org/retrieve/sources/analytics.js.map +1 -1
  90. package/lib/commands/hardis/org/retrieve/sources/dx.js +3 -1
  91. package/lib/commands/hardis/org/retrieve/sources/dx.js.map +1 -1
  92. package/lib/commands/hardis/org/retrieve/sources/dx2.js +3 -1
  93. package/lib/commands/hardis/org/retrieve/sources/dx2.js.map +1 -1
  94. package/lib/commands/hardis/org/retrieve/sources/metadata.js +3 -1
  95. package/lib/commands/hardis/org/retrieve/sources/metadata.js.map +1 -1
  96. package/lib/commands/hardis/org/select.js +3 -1
  97. package/lib/commands/hardis/org/select.js.map +1 -1
  98. package/lib/commands/hardis/org/user/freeze.js +3 -1
  99. package/lib/commands/hardis/org/user/freeze.js.map +1 -1
  100. package/lib/commands/hardis/org/user/unfreeze.js +3 -1
  101. package/lib/commands/hardis/org/user/unfreeze.js.map +1 -1
  102. package/lib/commands/hardis/package/create.js +3 -1
  103. package/lib/commands/hardis/package/create.js.map +1 -1
  104. package/lib/commands/hardis/package/mergexml.js +3 -1
  105. package/lib/commands/hardis/package/mergexml.js.map +1 -1
  106. package/lib/commands/hardis/package/version/create.js +3 -1
  107. package/lib/commands/hardis/package/version/create.js.map +1 -1
  108. package/lib/commands/hardis/package/version/list.js +3 -1
  109. package/lib/commands/hardis/package/version/list.js.map +1 -1
  110. package/lib/commands/hardis/package/version/promote.js +3 -1
  111. package/lib/commands/hardis/package/version/promote.js.map +1 -1
  112. package/lib/commands/hardis/packagexml/append.d.ts +1 -1
  113. package/lib/commands/hardis/packagexml/append.js +3 -1
  114. package/lib/commands/hardis/packagexml/append.js.map +1 -1
  115. package/lib/commands/hardis/packagexml/remove.d.ts +1 -1
  116. package/lib/commands/hardis/packagexml/remove.js +3 -1
  117. package/lib/commands/hardis/packagexml/remove.js.map +1 -1
  118. package/lib/commands/hardis/project/audit/callincallout.js +3 -1
  119. package/lib/commands/hardis/project/audit/callincallout.js.map +1 -1
  120. package/lib/commands/hardis/project/audit/duplicatefiles.js +3 -1
  121. package/lib/commands/hardis/project/audit/duplicatefiles.js.map +1 -1
  122. package/lib/commands/hardis/project/audit/remotesites.js +3 -1
  123. package/lib/commands/hardis/project/audit/remotesites.js.map +1 -1
  124. package/lib/commands/hardis/project/clean/emptyitems.js +3 -1
  125. package/lib/commands/hardis/project/clean/emptyitems.js.map +1 -1
  126. package/lib/commands/hardis/project/clean/filter-xml-content.d.ts +1 -1
  127. package/lib/commands/hardis/project/clean/filter-xml-content.js +3 -1
  128. package/lib/commands/hardis/project/clean/filter-xml-content.js.map +1 -1
  129. package/lib/commands/hardis/project/clean/hiddenitems.js +3 -1
  130. package/lib/commands/hardis/project/clean/hiddenitems.js.map +1 -1
  131. package/lib/commands/hardis/project/clean/manageditems.js +3 -1
  132. package/lib/commands/hardis/project/clean/manageditems.js.map +1 -1
  133. package/lib/commands/hardis/project/clean/orgmissingitems.js +3 -1
  134. package/lib/commands/hardis/project/clean/orgmissingitems.js.map +1 -1
  135. package/lib/commands/hardis/project/clean/references.js +3 -1
  136. package/lib/commands/hardis/project/clean/references.js.map +1 -1
  137. package/lib/commands/hardis/project/clean/retrievefolders.js +3 -1
  138. package/lib/commands/hardis/project/clean/retrievefolders.js.map +1 -1
  139. package/lib/commands/hardis/project/clean/standarditems.js +3 -1
  140. package/lib/commands/hardis/project/clean/standarditems.js.map +1 -1
  141. package/lib/commands/hardis/project/clean/systemdebug.js +3 -1
  142. package/lib/commands/hardis/project/clean/systemdebug.js.map +1 -1
  143. package/lib/commands/hardis/project/configure/auth.js +2 -1
  144. package/lib/commands/hardis/project/configure/auth.js.map +1 -1
  145. package/lib/commands/hardis/project/convert/profilestopermsets.js +3 -1
  146. package/lib/commands/hardis/project/convert/profilestopermsets.js.map +1 -1
  147. package/lib/commands/hardis/project/deploy/simulate.js +3 -1
  148. package/lib/commands/hardis/project/deploy/simulate.js.map +1 -1
  149. package/lib/commands/hardis/project/fix/profiletabs.js +3 -1
  150. package/lib/commands/hardis/project/fix/profiletabs.js.map +1 -1
  151. package/lib/commands/hardis/project/fix/v53flexipages.js +3 -1
  152. package/lib/commands/hardis/project/fix/v53flexipages.js.map +1 -1
  153. package/lib/commands/hardis/project/generate/bypass.js +3 -1
  154. package/lib/commands/hardis/project/generate/bypass.js.map +1 -1
  155. package/lib/commands/hardis/project/generate/gitdelta.js +3 -1
  156. package/lib/commands/hardis/project/generate/gitdelta.js.map +1 -1
  157. package/lib/commands/hardis/project/lint.js +3 -1
  158. package/lib/commands/hardis/project/lint.js.map +1 -1
  159. package/lib/commands/hardis/scratch/delete.js +3 -1
  160. package/lib/commands/hardis/scratch/delete.js.map +1 -1
  161. package/lib/commands/hardis/scratch/pool/localauth.js +3 -1
  162. package/lib/commands/hardis/scratch/pool/localauth.js.map +1 -1
  163. package/lib/commands/hardis/scratch/pool/refresh.js +3 -1
  164. package/lib/commands/hardis/scratch/pool/refresh.js.map +1 -1
  165. package/lib/commands/hardis/scratch/pool/reset.js +3 -1
  166. package/lib/commands/hardis/scratch/pool/reset.js.map +1 -1
  167. package/lib/commands/hardis/scratch/pool/view.js +3 -1
  168. package/lib/commands/hardis/scratch/pool/view.js.map +1 -1
  169. package/lib/commands/hardis/scratch/pull.js +3 -1
  170. package/lib/commands/hardis/scratch/pull.js.map +1 -1
  171. package/lib/commands/hardis/scratch/push.js +3 -1
  172. package/lib/commands/hardis/scratch/push.js.map +1 -1
  173. package/lib/commands/hardis/source/retrieve.d.ts +1 -1
  174. package/lib/commands/hardis/source/retrieve.js +3 -1
  175. package/lib/commands/hardis/source/retrieve.js.map +1 -1
  176. package/lib/commands/hardis/work/new.js +26 -10
  177. package/lib/commands/hardis/work/new.js.map +1 -1
  178. package/lib/commands/hardis/work/refresh.js +3 -1
  179. package/lib/commands/hardis/work/refresh.js.map +1 -1
  180. package/lib/commands/hardis/work/resetselection.js +3 -1
  181. package/lib/commands/hardis/work/resetselection.js.map +1 -1
  182. package/lib/commands/hardis/work/save.js +3 -1
  183. package/lib/commands/hardis/work/save.js.map +1 -1
  184. package/lib/commands/hardis/work/ws.js +3 -1
  185. package/lib/commands/hardis/work/ws.js.map +1 -1
  186. package/lib/commands/hello/world.d.ts +1 -1
  187. package/lib/commands/hello/world.js +3 -1
  188. package/lib/commands/hello/world.js.map +1 -1
  189. package/lib/common/utils/apiUtils.js +4 -4
  190. package/lib/common/utils/apiUtils.js.map +1 -1
  191. package/lib/common/utils/deployUtils.js +2 -2
  192. package/lib/common/utils/deployUtils.js.map +1 -1
  193. package/lib/common/utils/filesUtils.d.ts +1 -0
  194. package/lib/common/utils/filesUtils.js +5 -3
  195. package/lib/common/utils/filesUtils.js.map +1 -1
  196. package/lib/common/utils/orgConfigUtils.d.ts +6 -0
  197. package/lib/common/utils/orgConfigUtils.js +17 -8
  198. package/lib/common/utils/orgConfigUtils.js.map +1 -1
  199. package/lib/common/utils/orgUtils.js +14 -1
  200. package/lib/common/utils/orgUtils.js.map +1 -1
  201. package/lib/common/utils/refresh/connectedAppUtils.d.ts +68 -0
  202. package/lib/common/utils/refresh/connectedAppUtils.js +340 -0
  203. package/lib/common/utils/refresh/connectedAppUtils.js.map +1 -0
  204. package/oclif.lock +730 -699
  205. package/oclif.manifest.json +428 -189
  206. package/package.json +5 -5
@@ -0,0 +1,340 @@
1
+ import fs from 'fs-extra';
2
+ import * as path from 'path';
3
+ import c from 'chalk';
4
+ import { glob } from 'glob';
5
+ import { execCommand, createTempDir, uxLog } from '../index.js';
6
+ import { writeXmlFile } from '../xmlUtils.js';
7
+ import { getApiVersion } from '../../../config/index.js';
8
+ import { prompts } from '../prompts.js';
9
+ import { GLOB_IGNORE_PATTERNS } from '../projectUtils.js';
10
+ export function generateConnectedAppPackageXml(connectedApps) {
11
+ return {
12
+ Package: {
13
+ $: {
14
+ xmlns: 'http://soap.sforce.com/2006/04/metadata'
15
+ },
16
+ types: [
17
+ {
18
+ members: connectedApps.map(app => app.fullName),
19
+ name: ['ConnectedApp']
20
+ }
21
+ ],
22
+ version: [getApiVersion()]
23
+ }
24
+ };
25
+ }
26
+ export function generateEmptyPackageXml() {
27
+ return {
28
+ Package: {
29
+ $: {
30
+ xmlns: 'http://soap.sforce.com/2006/04/metadata'
31
+ },
32
+ version: [getApiVersion()]
33
+ }
34
+ };
35
+ }
36
+ export async function createConnectedAppManifest(connectedApps, command) {
37
+ // Create a temporary directory for the manifest
38
+ const tmpDir = await createTempDir();
39
+ const manifestPath = path.join(tmpDir, 'connected-apps-manifest.xml');
40
+ // Generate and write the package.xml content
41
+ const packageXml = generateConnectedAppPackageXml(connectedApps);
42
+ await writeXmlFile(manifestPath, packageXml);
43
+ // Display the XML content for the manifest
44
+ const manifestContent = await fs.readFile(manifestPath, 'utf8');
45
+ uxLog("log", command, c.cyan(`Package.xml manifest for ${connectedApps.length} Connected App(s):\n${manifestContent}`));
46
+ return { manifestPath, tmpDir };
47
+ }
48
+ export async function withConnectedAppIgnoreHandling(operationFn, command) {
49
+ // Temporarily modify .forceignore to allow Connected App operations
50
+ const backupInfo = await disableConnectedAppIgnore(command);
51
+ try {
52
+ // Perform the operation
53
+ return await operationFn(backupInfo);
54
+ }
55
+ finally {
56
+ // Always restore .forceignore
57
+ await restoreConnectedAppIgnore(backupInfo, command);
58
+ }
59
+ }
60
+ export async function createDestructiveChangesManifest(connectedApps, command) {
61
+ // Create a temporary directory for the manifest
62
+ const tmpDir = await createTempDir();
63
+ const destructiveChangesPath = path.join(tmpDir, 'destructiveChanges.xml');
64
+ const packageXmlPath = path.join(tmpDir, 'package.xml');
65
+ // Generate destructiveChanges.xml using the Connected App Package XML generator
66
+ const destructiveChangesXml = generateConnectedAppPackageXml(connectedApps);
67
+ // Generate empty package.xml required for deployment
68
+ const packageXml = generateEmptyPackageXml();
69
+ await writeXmlFile(destructiveChangesPath, destructiveChangesXml);
70
+ await writeXmlFile(packageXmlPath, packageXml);
71
+ // Display the XML content for destructive changes
72
+ const destructiveXmlContent = await fs.readFile(destructiveChangesPath, 'utf8');
73
+ uxLog("log", command, c.cyan(`Destructive Changes XML for deleting ${connectedApps.length} Connected App(s):\n${destructiveXmlContent}`));
74
+ return { destructiveChangesPath, packageXmlPath, tmpDir };
75
+ }
76
+ export async function deleteConnectedApps(orgUsername, connectedApps, command, saveProjectPath) {
77
+ await withConnectedAppValidation(orgUsername, connectedApps, command, 'delete', async () => {
78
+ if (!orgUsername)
79
+ return; // This should never happen due to validation, but TypeScript needs it
80
+ // Use withConnectedAppIgnoreHandling to handle .forceignore modifications
81
+ await withConnectedAppIgnoreHandling(async () => {
82
+ // Create destructive changes manifests
83
+ const { destructiveChangesPath, packageXmlPath, tmpDir } = await createDestructiveChangesManifest(connectedApps, command);
84
+ // Deploy the destructive changes
85
+ uxLog("log", command, c.grey(`Deploying destructive changes to delete ${connectedApps.length} Connected App(s) from org...`));
86
+ try {
87
+ await execCommand(`sf project deploy start --manifest ${packageXmlPath} --post-destructive-changes ${destructiveChangesPath} --target-org ${orgUsername} --ignore-warnings --ignore-conflicts --json`, command, { output: true, fail: true, cwd: saveProjectPath });
88
+ }
89
+ catch (deleteError) {
90
+ throw new Error(`Failed to delete Connected Apps: ${deleteError.message || String(deleteError)}`);
91
+ }
92
+ // Clean up
93
+ await fs.remove(tmpDir);
94
+ uxLog("log", command, c.grey('Removed temporary deployment files'));
95
+ }, command);
96
+ });
97
+ }
98
+ export async function disableConnectedAppIgnore(command) {
99
+ const forceignorePath = path.join(process.cwd(), '.forceignore');
100
+ // Check if .forceignore exists
101
+ if (!await fs.pathExists(forceignorePath)) {
102
+ uxLog("log", command, c.grey('No .forceignore file found, no modification needed'));
103
+ return null;
104
+ }
105
+ // Create backup
106
+ const tempBackupPath = path.join(process.cwd(), '.forceignore.backup');
107
+ const originalContent = await fs.readFile(forceignorePath, 'utf8');
108
+ await fs.writeFile(tempBackupPath, originalContent);
109
+ // Read content and remove lines that would ignore Connected Apps
110
+ const lines = originalContent.split('\n');
111
+ const filteredLines = lines.filter(line => {
112
+ const trimmedLine = line.trim();
113
+ return !(trimmedLine.includes('connectedApp') ||
114
+ trimmedLine.includes('ConnectedApp') ||
115
+ trimmedLine.includes('connectedApps'));
116
+ });
117
+ // Check if any lines were filtered out
118
+ if (lines.length === filteredLines.length) {
119
+ uxLog("log", command, c.grey('No Connected App ignore patterns found in .forceignore'));
120
+ return { forceignorePath, originalContent, tempBackupPath };
121
+ }
122
+ // Write modified .forceignore
123
+ await fs.writeFile(forceignorePath, filteredLines.join('\n'));
124
+ uxLog("warning", command, c.cyan('Temporarily modified .forceignore to allow Connected App metadata operations'));
125
+ return { forceignorePath, originalContent, tempBackupPath };
126
+ }
127
+ export async function restoreConnectedAppIgnore(backupInfo, command) {
128
+ if (!backupInfo)
129
+ return;
130
+ try {
131
+ // Restore original .forceignore if backup exists
132
+ if (await fs.pathExists(backupInfo.tempBackupPath)) {
133
+ await fs.writeFile(backupInfo.forceignorePath, backupInfo.originalContent);
134
+ await fs.remove(backupInfo.tempBackupPath);
135
+ uxLog("log", command, c.grey('Restored original .forceignore file'));
136
+ }
137
+ }
138
+ catch (error) {
139
+ uxLog("warning", command, c.yellow(`Error restoring .forceignore: ${error}`));
140
+ }
141
+ }
142
+ export async function retrieveConnectedApps(orgUsername, connectedApps, command, saveProjectPath) {
143
+ await withConnectedAppValidation(orgUsername, connectedApps, command, 'retrieve', async () => {
144
+ if (!orgUsername)
145
+ return; // This should never happen due to validation, but TypeScript needs it
146
+ await performConnectedAppOperationWithManifest(orgUsername, connectedApps, command, 'retrieve', async (manifestPath, orgUsername, command) => {
147
+ await execCommand(`sf project retrieve start --manifest ${manifestPath} --target-org ${orgUsername} --ignore-conflicts --json`, command, { output: true, fail: true, cwd: saveProjectPath });
148
+ });
149
+ });
150
+ }
151
+ export async function deployConnectedApps(orgUsername, connectedApps, command, saveProjectPath) {
152
+ await withConnectedAppValidation(orgUsername, connectedApps, command, 'deploy', async () => {
153
+ if (!orgUsername)
154
+ return; // This should never happen due to validation, but TypeScript needs it
155
+ await performConnectedAppOperationWithManifest(orgUsername, connectedApps, command, 'deploy', async (manifestPath, orgUsername, command) => {
156
+ await execCommand(`sf project deploy start --manifest ${manifestPath} --target-org ${orgUsername} --ignore-warnings --json`, command, { output: true, fail: true, cwd: saveProjectPath });
157
+ });
158
+ });
159
+ }
160
+ export function toConnectedAppFormat(apps) {
161
+ return apps.map(app => {
162
+ return {
163
+ fullName: app.fullName,
164
+ fileName: app.fileName || app.fullName || (app.filePath ? path.basename(app.filePath, '.connectedApp-meta.xml') : app.fullName),
165
+ type: 'ConnectedApp'
166
+ };
167
+ });
168
+ }
169
+ export function validateConnectedApps(requestedApps, availableApps, command, context) {
170
+ // Case-insensitive matching for app names
171
+ const missingApps = requestedApps.filter(name => !availableApps.some(availableName => availableName.toLowerCase() === name.toLowerCase()));
172
+ if (missingApps.length > 0) {
173
+ const errorMsg = `The following Connected App(s) could not be found in the ${context}: ${missingApps.join(', ')}`;
174
+ uxLog("error", command, c.red(errorMsg));
175
+ if (availableApps.length > 0) {
176
+ uxLog("warning", command, c.yellow(`Available Connected Apps in the ${context}:`));
177
+ availableApps.forEach(name => {
178
+ uxLog("log", command, c.grey(` - ${name}`));
179
+ });
180
+ // Suggest similar names to help the user
181
+ missingApps.forEach(missingApp => {
182
+ const similarNames = availableApps
183
+ .filter(name => name.toLowerCase().includes(missingApp.toLowerCase()) ||
184
+ missingApp.toLowerCase().includes(name.toLowerCase()))
185
+ .slice(0, 3);
186
+ if (similarNames.length > 0) {
187
+ uxLog("warning", command, c.yellow(`Did you mean one of these instead of "${missingApp}"?`));
188
+ similarNames.forEach(name => {
189
+ uxLog("log", command, c.grey(` - ${name}`));
190
+ });
191
+ }
192
+ });
193
+ }
194
+ else {
195
+ uxLog("warning", command, c.yellow(`No Connected Apps were found in the ${context}.`));
196
+ }
197
+ uxLog("warning", command, c.yellow('Please check the app name(s) and try again.'));
198
+ throw new Error(errorMsg);
199
+ }
200
+ // Return the list of valid apps
201
+ const validApps = requestedApps.filter(name => availableApps.some(availableName => availableName.toLowerCase() === name.toLowerCase()));
202
+ return { missingApps, validApps };
203
+ }
204
+ export function validateConnectedAppParams(orgUsername, connectedApps) {
205
+ if (!orgUsername) {
206
+ throw new Error('Organization username is required');
207
+ }
208
+ if (!connectedApps || connectedApps.length === 0) {
209
+ throw new Error('No Connected Apps specified');
210
+ }
211
+ }
212
+ export async function promptForConnectedAppSelection(connectedApps, initialSelection = [], promptMessage) {
213
+ // Create choices for the prompt
214
+ const choices = connectedApps.map(app => {
215
+ return { title: app.fullName, value: app.fullName };
216
+ });
217
+ // Prompt user for selection
218
+ const promptResponse = await prompts({
219
+ type: 'multiselect',
220
+ name: 'selectedApps',
221
+ message: promptMessage,
222
+ description: 'Select Connected Apps to process',
223
+ choices: choices,
224
+ initial: initialSelection,
225
+ });
226
+ if (!promptResponse.selectedApps || promptResponse.selectedApps.length === 0) {
227
+ return [];
228
+ }
229
+ // Filter apps based on selection
230
+ const selectedApps = connectedApps.filter(app => promptResponse.selectedApps.includes(app.fullName));
231
+ return selectedApps;
232
+ }
233
+ export async function findConnectedAppFile(appName, command, saveProjectPath) {
234
+ uxLog("other", command, c.cyan(`Searching for Connected App: ${appName}`));
235
+ try {
236
+ // First, try an exact case-sensitive match
237
+ const exactPattern = `**/${appName}.connectedApp-meta.xml`;
238
+ const exactMatches = await glob(exactPattern, { ignore: GLOB_IGNORE_PATTERNS, cwd: saveProjectPath });
239
+ if (exactMatches.length > 0) {
240
+ uxLog("success", command, c.green(`✓ Found Connected App: ${exactMatches[0]}`));
241
+ return path.join(saveProjectPath, exactMatches[0]);
242
+ }
243
+ // Try standard locations with possible name variations
244
+ const possiblePaths = [
245
+ path.join(saveProjectPath, `force-app/main/default/connectedApps/${appName}.connectedApp-meta.xml`),
246
+ path.join(saveProjectPath, `force-app/main/default/connectedApps/${appName.replace(/\s/g, '_')}.connectedApp-meta.xml`),
247
+ path.join(saveProjectPath, `force-app/main/default/connectedApps/${appName.replace(/\s/g, '')}.connectedApp-meta.xml`)
248
+ ];
249
+ for (const potentialPath of possiblePaths) {
250
+ if (fs.existsSync(potentialPath)) {
251
+ uxLog("success", command, c.green(`✓ Found Connected App at standard path: ${potentialPath}`));
252
+ return potentialPath;
253
+ }
254
+ }
255
+ // If no exact match, try case-insensitive search by getting all ConnectedApp files
256
+ uxLog("warning", command, c.yellow(`No exact match found, trying case-insensitive search...`));
257
+ const allConnectedAppFiles = await glob('**/*.connectedApp-meta.xml', { ignore: GLOB_IGNORE_PATTERNS, cwd: saveProjectPath });
258
+ if (allConnectedAppFiles.length === 0) {
259
+ uxLog("error", command, c.red(`No Connected App files found in the project.`));
260
+ return null;
261
+ }
262
+ // Find a case-insensitive match
263
+ const caseInsensitiveMatch = allConnectedAppFiles.find(file => {
264
+ const baseName = path.basename(file, '.connectedApp-meta.xml');
265
+ return baseName.toLowerCase() === appName.toLowerCase() ||
266
+ baseName.toLowerCase() === appName.toLowerCase().replace(/\s/g, '_') ||
267
+ baseName.toLowerCase() === appName.toLowerCase().replace(/\s/g, '');
268
+ });
269
+ if (caseInsensitiveMatch) {
270
+ uxLog("success", command, c.green(`✓ Found case-insensitive match: ${caseInsensitiveMatch}`));
271
+ return path.join(saveProjectPath, caseInsensitiveMatch);
272
+ }
273
+ // If still not found, list available Connected Apps
274
+ uxLog("error", command, c.red(`✗ Could not find Connected App "${appName}"`));
275
+ const allConnectedAppNames = allConnectedAppFiles.map(file => "- " + path.basename(file, '.connectedApp-meta.xml')).join('\n');
276
+ uxLog("warning", command, c.yellow(`Available Connected Apps:\n${allConnectedAppNames}`));
277
+ return null;
278
+ }
279
+ catch (error) {
280
+ uxLog("error", command, c.red(`Error searching for Connected App: ${error}`));
281
+ return null;
282
+ }
283
+ }
284
+ export async function selectConnectedAppsForProcessing(connectedApps, initialSelection = [], processAll, nameFilter, promptMessage, command) {
285
+ // If all flag or name is provided, use all connected apps from the list without prompting
286
+ if (processAll || nameFilter) {
287
+ const selectionReason = processAll ? 'all flag' : 'name filter';
288
+ uxLog("action", command, c.cyan(`Processing ${connectedApps.length} Connected App(s) based on ${selectionReason}`));
289
+ return connectedApps;
290
+ }
291
+ // Otherwise, prompt for selection
292
+ return await promptForConnectedAppSelection(connectedApps, initialSelection, promptMessage);
293
+ }
294
+ export async function withConnectedAppValidation(orgUsername, connectedApps, command, operationName, operationFn) {
295
+ try {
296
+ validateConnectedAppParams(orgUsername, connectedApps);
297
+ }
298
+ catch (error) {
299
+ uxLog("log", command, c.yellow(`Skipping ${operationName} operation: ${error.message}`));
300
+ return;
301
+ }
302
+ await operationFn();
303
+ }
304
+ export async function performConnectedAppOperationWithManifest(orgUsername, connectedApps, command, operationName, commandFn) {
305
+ // Use withConnectedAppIgnoreHandling to handle .forceignore modifications
306
+ await withConnectedAppIgnoreHandling(async () => {
307
+ // Create a manifest for the Connected Apps
308
+ const { manifestPath, tmpDir } = await createConnectedAppManifest(connectedApps, command);
309
+ // Execute the operation using the manifest
310
+ uxLog("log", command, c.cyan(`${operationName === 'retrieve' ? 'Retrieving' : 'Deploying'} ${connectedApps.length} Connected App(s) ${operationName === 'retrieve' ? 'from' : 'to'} org...`));
311
+ try {
312
+ await commandFn(manifestPath, orgUsername, command);
313
+ // Wait a moment to ensure files are written to disk (especially for retrieve operations)
314
+ if (operationName === 'retrieve') {
315
+ uxLog("log", command, c.grey('Waiting for files to be written to disk...'));
316
+ await new Promise(resolve => setTimeout(resolve, 1000));
317
+ }
318
+ }
319
+ catch (error) {
320
+ throw new Error(`Failed to ${operationName} Connected Apps: ${error.message || String(error)}`);
321
+ }
322
+ // Clean up
323
+ await fs.remove(tmpDir);
324
+ uxLog("log", command, c.grey('Removed temporary manifest file'));
325
+ }, command);
326
+ }
327
+ export function createConnectedAppSuccessResponse(message, processedApps, additionalData = {}) {
328
+ return {
329
+ success: true,
330
+ message,
331
+ connectedAppsProcessed: processedApps,
332
+ ...additionalData
333
+ };
334
+ }
335
+ export function handleConnectedAppError(error, command) {
336
+ const errorMessage = error.message || JSON.stringify(error);
337
+ uxLog("error", command, c.red(`Error: ${errorMessage}`));
338
+ return { success: false, error: errorMessage };
339
+ }
340
+ //# sourceMappingURL=connectedAppUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectedAppUtils.js","sourceRoot":"","sources":["../../../../src/common/utils/refresh/connectedAppUtils.ts"],"names":[],"mappings":"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"}