sfdx-hardis 7.0.1 → 7.2.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.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![sfdx-hardis by Cloudity Banner](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/sfdx-hardis-banner.png)](https://sfdx-hardis.cloudity.com)
4
4
 
5
- _Presented at_ [_Dreamforce 23_](https://reg.salesforce.com/flow/plus/df23/sessioncatalog/page/catalog/session/1684196389783001OqEl) _and [_Dreamforce 24!_](https://reg.salesforce.com/flow/plus/df24/sessioncatalog/page/catalog/session/1718915808069001Q7HH)_
5
+ _Presented at_ [_Dreamforce 23_](https://reg.salesforce.com/flow/plus/df23/sessioncatalog/page/catalog/session/1684196389783001OqEl) _and [_Dreamforce 24!_](https://reg.salesforce.com/flow/plus/df24/sessioncatalog/page/catalog/session/1718915808069001Q7HH)_ - [**See sfdx-hardis v7 Walkthrough video**](https://www.youtube.com/watch?v=t8jT6IPd9n4)
6
6
 
7
7
  [![Version](https://img.shields.io/npm/v/sfdx-hardis.svg)](https://npmjs.org/package/sfdx-hardis)
8
8
  [![Downloads/week](https://img.shields.io/npm/dw/sfdx-hardis.svg)](https://npmjs.org/package/sfdx-hardis)
@@ -49,6 +49,10 @@ ___
49
49
 
50
50
  ___
51
51
 
52
+ _See sfdx-hardis v7 Walkthrough_
53
+
54
+ [![sfdx-hardis v7 walkthrough](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/sfdx-hardis-v7-demo.png)](https://www.youtube.com/watch?v=t8jT6IPd9n4)
55
+
52
56
  _Featured on SalesforceBen_
53
57
 
54
58
  [![SalesforceBen Interview](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/sfben-sfdx-hardis.jpg)](https://www.youtube.com/watch?v=vtWx_IWoL9k)
@@ -446,7 +450,7 @@ sfdx-hardis is primarily led by Nicolas Vuillamy & [Cloudity](https://www.cloudi
446
450
  - [Roman Hentschke](https://www.linkedin.com/in/derroman/), for building the BitBucket CI/CD integration and german translation
447
451
  - [Leo Jokinen](https://www.linkedin.com/in/leojokinen/), for building the GitHub CI/CD integration
448
452
  - [Mariia Pyvovarchuk](https://www.linkedin.com/in/mpyvo/), for her work about generating automations documentation
449
- - [Matheus Delazeri](https://www.linkedin.com/in/matheus-delazeri-souza/), for the PDF output of documentation
453
+ - [Matheus Delazeri](https://www.linkedin.com/in/matheus-delazeri-souza/), for the PDF output of documentation and brazilian-portuguese translation
450
454
  - [Taha Basri](https://www.linkedin.com/in/tahabasri/), for his work about generating documentation of LWC
451
455
  - [Anush Poudel](https://www.linkedin.com/in/anushpoudel/), for integrating sfdx-hardis with multiple LLMs using langchainJs
452
456
  - [Sebastien Colladon](https://www.linkedin.com/in/sebastien-colladon/), for providing sfdx-git-delta which is highly used within sfdx-hardis
@@ -470,6 +474,7 @@ sfdx-hardis is primarily led by Nicolas Vuillamy & [Cloudity](https://www.cloudi
470
474
  - German: [Roman Hentschke](https://www.linkedin.com/in/derroman/)
471
475
  - Polish: [Dagmara Ryborz](https://www.linkedin.com/in/dagmara-ryborz-7618b991/)
472
476
  - Japanese: [Shinnosuke Takakura](https://www.linkedin.com/in/shinnosuke-takakura-9041ba217/)
477
+ - Brazilian-portuguese: [Matheus Delazeri](https://www.linkedin.com/in/matheus-delazeri-souza/)
473
478
 
474
479
  <!-- contributors.md end -->
475
480
 
@@ -59,7 +59,7 @@ jobs:
59
59
  SFDX_CLIENT_KEY_PREPROD: ${{ secrets.SFDX_CLIENT_KEY_PREPROD}}
60
60
  SFDX_CLIENT_ID_MAIN: ${{ secrets.SFDX_CLIENT_ID_MAIN}}
61
61
  SFDX_CLIENT_KEY_MAIN: ${{ secrets.SFDX_CLIENT_KEY_MAIN}}
62
- SFDX_AUTH_URL_TECHNICAL_ORG: ${{ SFDX_AUTH_URL_TECHNICAL_ORG }}
62
+ SFDX_AUTH_URL_TECHNICAL_ORG: ${{ secrets.SFDX_AUTH_URL_TECHNICAL_ORG }}
63
63
  SFDX_DEPLOY_WAIT_MINUTES: ${{ vars.SFDX_DEPLOY_WAIT_MINUTES || '120' }}
64
64
  SFDX_TEST_WAIT_MINUTES: ${{ vars.SFDX_TEST_WAIT_MINUTES || '120' }}
65
65
  CI_COMMIT_REF_NAME: ${{ github.event.pull_request.base.ref }} # Defines the target branch of the PR
@@ -0,0 +1,17 @@
1
+ import { SfCommand } from '@salesforce/sf-plugins-core';
2
+ import { AnyJson } from '@salesforce/ts-types';
3
+ export default class DiagnoseApexApiVersion extends SfCommand<any> {
4
+ static title: string;
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: any;
8
+ static requiresProject: boolean;
9
+ protected static triggerNotification: boolean;
10
+ protected debugMode: boolean;
11
+ protected outputFile: any;
12
+ protected outputFilesRes: any;
13
+ protected deprecatedClasses: any[];
14
+ protected deprecatedTriggers: any[];
15
+ protected statusCode: number;
16
+ run(): Promise<AnyJson>;
17
+ }
@@ -0,0 +1,176 @@
1
+ /* jscpd:ignore-start */
2
+ import { SfCommand, Flags, requiredOrgFlagWithDeprecations } from '@salesforce/sf-plugins-core';
3
+ import { Messages } from '@salesforce/core';
4
+ import c from 'chalk';
5
+ import { uxLog, uxLogTable } from '../../../../common/utils/index.js';
6
+ import { soqlQueryTooling } from '../../../../common/utils/apiUtils.js';
7
+ import { generateCsvFile, generateReportPath } from '../../../../common/utils/filesUtils.js';
8
+ import { getNotificationButtons, getOrgMarkdown, getSeverityIcon } from '../../../../common/utils/notifUtils.js';
9
+ import { NotifProvider } from '../../../../common/notifProvider/index.js';
10
+ import { setConnectionVariables } from '../../../../common/utils/orgUtils.js';
11
+ import { CONSTANTS, getEnvVar } from '../../../../config/index.js';
12
+ import { isTestClass } from '../../../../common/utils/apexLimitUtils.js';
13
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
14
+ const messages = Messages.loadMessages('sfdx-hardis', 'org');
15
+ const DEFAULT_DEPRECATED_APEX_API_VERSION = 50;
16
+ export default class DiagnoseApexApiVersion extends SfCommand {
17
+ static title = 'Check Apex classes and triggers for deprecated API versions';
18
+ static description = `Detects Apex classes and triggers deployed with API versions at or below a configurable threshold.
19
+
20
+ **Apex metadata API version** is the version the code was compiled against. This is separate from \`hardis:org:diagnose:legacyapi\`, which checks deprecated **API call** versions (SOAP, REST, Bulk) from EventLogFile.
21
+
22
+ Key functionalities:
23
+
24
+ - **Threshold-based detection:** API versions at or below the threshold are flagged as deprecated. Configure via \`DEPRECATED_APEX_API_VERSION\` env var (default: \`50\`).
25
+ - **Apex classes:** Queries custom Apex classes (excludes managed packages). Optionally excludes \`@isTest\` classes via \`--includetestclasses\`.
26
+ - **Apex triggers:** Queries custom Apex triggers (excludes managed packages).
27
+ - **CSV report:** Generates a report listing all deprecated classes and triggers with their ApiVersion.
28
+ - **Notifications:** Sends alerts to Grafana, Slack, MS Teams when deprecated Apex is found.
29
+
30
+ This command is part of [sfdx-hardis Monitoring](${CONSTANTS.DOC_URL_ROOT}/salesforce-monitoring-home/) and can output Grafana, Slack and MsTeams Notifications.
31
+ `;
32
+ static examples = [
33
+ '$ sf hardis:org:diagnose:apex-api-version',
34
+ '$ sf hardis:org:diagnose:apex-api-version --threshold 55',
35
+ '$ sf hardis:org:diagnose:apex-api-version --outputfile ./reports/apex-api-version.csv',
36
+ ];
37
+ static flags = {
38
+ threshold: Flags.integer({
39
+ char: 't',
40
+ description: `API version threshold. Classes/triggers with ApiVersion <= this value are flagged. Overrides DEPRECATED_APEX_API_VERSION env var.`,
41
+ }),
42
+ includetestclasses: Flags.boolean({
43
+ char: 'i',
44
+ default: false,
45
+ description: 'Include @isTest classes in the report (excluded by default)',
46
+ }),
47
+ outputfile: Flags.string({
48
+ char: 'f',
49
+ description: 'Force the path and name of output report file. Must end with .csv',
50
+ }),
51
+ debug: Flags.boolean({
52
+ char: 'd',
53
+ default: false,
54
+ description: messages.getMessage('debugMode'),
55
+ }),
56
+ websocket: Flags.string({
57
+ description: messages.getMessage('websocket'),
58
+ }),
59
+ skipauth: Flags.boolean({
60
+ description: 'Skip authentication check when a default username is required',
61
+ }),
62
+ 'target-org': requiredOrgFlagWithDeprecations,
63
+ };
64
+ static requiresProject = false;
65
+ static triggerNotification = true;
66
+ debugMode = false;
67
+ outputFile;
68
+ outputFilesRes = {};
69
+ deprecatedClasses = [];
70
+ deprecatedTriggers = [];
71
+ statusCode = 0;
72
+ /* jscpd:ignore-end */
73
+ async run() {
74
+ const { flags } = await this.parse(DiagnoseApexApiVersion);
75
+ this.debugMode = flags.debug || false;
76
+ this.outputFile = flags.outputfile || null;
77
+ const threshold = flags.threshold ??
78
+ parseInt(getEnvVar('DEPRECATED_APEX_API_VERSION') || String(DEFAULT_DEPRECATED_APEX_API_VERSION), 10);
79
+ if (!Number.isFinite(threshold) || threshold < 1) {
80
+ throw new Error(`Invalid DEPRECATED_APEX_API_VERSION or --threshold: must be a positive integer`);
81
+ }
82
+ const includeTestClasses = flags.includetestclasses ?? false;
83
+ const conn = flags['target-org'].getConnection();
84
+ uxLog("action", this, c.cyan(`Querying Apex classes and triggers with ApiVersion <= ${threshold} (custom/unmanaged only)...`));
85
+ // Query Apex classes - need Body to detect @isTest when excluding
86
+ const classesQuery = includeTestClasses
87
+ ? `SELECT Id, Name, ApiVersion FROM ApexClass WHERE NamespacePrefix = null AND ApiVersion <= ${threshold} ORDER BY ApiVersion ASC, Name ASC`
88
+ : `SELECT Id, Name, ApiVersion, Body FROM ApexClass WHERE NamespacePrefix = null AND ApiVersion <= ${threshold} ORDER BY ApiVersion ASC, Name ASC`;
89
+ const classesRes = await soqlQueryTooling(classesQuery, conn);
90
+ let classes = (classesRes.records || []);
91
+ if (!includeTestClasses && classes.length > 0) {
92
+ classes = classes.filter((cls) => !isTestClass(cls.Body));
93
+ }
94
+ this.deprecatedClasses = classes.map((cls) => ({
95
+ Type: 'ApexClass',
96
+ Name: cls.Name,
97
+ ApiVersion: cls.ApiVersion,
98
+ severity: 'warning',
99
+ severityIcon: getSeverityIcon('warning'),
100
+ }));
101
+ // Query Apex triggers
102
+ const triggersQuery = `SELECT Id, Name, ApiVersion FROM ApexTrigger WHERE NamespacePrefix = null AND ApiVersion <= ${threshold} ORDER BY ApiVersion ASC, Name ASC`;
103
+ const triggersRes = await soqlQueryTooling(triggersQuery, conn);
104
+ const triggers = (triggersRes.records || []);
105
+ this.deprecatedTriggers = triggers.map((trg) => ({
106
+ Type: 'ApexTrigger',
107
+ Name: trg.Name,
108
+ ApiVersion: trg.ApiVersion,
109
+ severity: 'warning',
110
+ severityIcon: getSeverityIcon('warning'),
111
+ }));
112
+ const allDeprecated = [...this.deprecatedClasses, ...this.deprecatedTriggers];
113
+ const totalCount = allDeprecated.length;
114
+ // Display summary
115
+ uxLog("action", this, c.cyan('Results'));
116
+ uxLog("log", this, c.grey(`Found ${this.deprecatedClasses.length} deprecated Apex class(es) and ${this.deprecatedTriggers.length} deprecated Apex trigger(s) with ApiVersion <= ${threshold}`));
117
+ if (totalCount > 0) {
118
+ this.statusCode = 1;
119
+ uxLogTable(this, allDeprecated);
120
+ uxLog("warning", this, c.yellow(`Consider upgrading these to a newer API version. Use \`sf hardis:project:audit:apiversion\` to update metadata files.`));
121
+ }
122
+ else {
123
+ uxLog("success", this, c.green(`No Apex classes or triggers with ApiVersion <= ${threshold} found.`));
124
+ }
125
+ // Generate CSV report
126
+ this.outputFile = await generateReportPath('apex-api-version', this.outputFile);
127
+ this.outputFilesRes = await generateCsvFile(allDeprecated, this.outputFile, {
128
+ fileTitle: 'Apex API Version (Deprecated)',
129
+ });
130
+ // Notifications
131
+ await setConnectionVariables(flags['target-org']?.getConnection());
132
+ const orgMarkdown = await getOrgMarkdown(flags['target-org']?.getConnection()?.instanceUrl);
133
+ const notifButtons = await getNotificationButtons();
134
+ let notifSeverity = 'log';
135
+ let notifText = `No deprecated Apex API versions found in ${orgMarkdown} (threshold: ${threshold})`;
136
+ const notifAttachments = [];
137
+ if (totalCount > 0) {
138
+ notifSeverity = 'warning';
139
+ notifText = `${totalCount} Apex class(es)/trigger(s) with deprecated API version (<= ${threshold}) in ${orgMarkdown}`;
140
+ const detailText = allDeprecated
141
+ .slice(0, 20)
142
+ .map((r) => `• ${r.Type} ${r.Name}: ApiVersion ${r.ApiVersion}`)
143
+ .join('\n');
144
+ notifAttachments.push({
145
+ text: totalCount > 20 ? `${detailText}\n... and ${totalCount - 20} more` : detailText,
146
+ });
147
+ }
148
+ await NotifProvider.postNotifications({
149
+ type: 'APEX_API_VERSION',
150
+ text: notifText,
151
+ attachments: notifAttachments,
152
+ buttons: notifButtons,
153
+ severity: notifSeverity,
154
+ attachedFiles: this.outputFilesRes.xlsxFile ? [this.outputFilesRes.xlsxFile] : [],
155
+ logElements: allDeprecated,
156
+ data: { metric: totalCount, threshold },
157
+ metrics: {
158
+ deprecatedApexClasses: this.deprecatedClasses.length,
159
+ deprecatedApexTriggers: this.deprecatedTriggers.length,
160
+ deprecatedApexTotal: totalCount,
161
+ },
162
+ });
163
+ if ((this.argv || []).includes('apex-api-version')) {
164
+ process.exitCode = this.statusCode;
165
+ }
166
+ return {
167
+ status: this.statusCode,
168
+ threshold,
169
+ deprecatedClasses: this.deprecatedClasses.length,
170
+ deprecatedTriggers: this.deprecatedTriggers.length,
171
+ total: totalCount,
172
+ outputFile: this.outputFile,
173
+ };
174
+ }
175
+ }
176
+ //# sourceMappingURL=apex-api-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apex-api-version.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/org/diagnose/apex-api-version.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { SfCommand } from '@salesforce/sf-plugins-core';
2
+ import { AnyJson } from '@salesforce/ts-types';
3
+ export default class DiagnoseMinimalPermsets extends SfCommand<any> {
4
+ static title: string;
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: any;
8
+ static requiresProject: boolean;
9
+ protected static triggerNotification: boolean;
10
+ protected debugMode: boolean;
11
+ protected outputFile: any;
12
+ protected outputFilesRes: any;
13
+ protected minimalPermSets: any[];
14
+ protected totalCount: number;
15
+ protected errorCount: number;
16
+ protected statusCode: number;
17
+ /**
18
+ * Count permission-granting elements in a parsed PermissionSet XML object.
19
+ * Uses structure to differentiate: leaf elements (primitives/arrays of primitives) are metadata-only;
20
+ * nested elements (objects/arrays of objects) are actual permissions. No hard-coded element names.
21
+ */
22
+ private countPermissionElements;
23
+ run(): Promise<AnyJson>;
24
+ }
@@ -0,0 +1,252 @@
1
+ /* jscpd:ignore-start */
2
+ import { SfCommand, Flags, requiredOrgFlagWithDeprecations } from '@salesforce/sf-plugins-core';
3
+ import { Messages } from '@salesforce/core';
4
+ import c from 'chalk';
5
+ import * as path from 'path';
6
+ import { uxLog, uxLogTable } from '../../../../common/utils/index.js';
7
+ import { generateCsvFile, generateReportPath } from '../../../../common/utils/filesUtils.js';
8
+ import { getNotificationButtons, getOrgMarkdown, getSeverityIcon } from '../../../../common/utils/notifUtils.js';
9
+ import { NotifProvider } from '../../../../common/notifProvider/index.js';
10
+ import { setConnectionVariables } from '../../../../common/utils/orgUtils.js';
11
+ import { CONSTANTS, getEnvVar } from '../../../../config/index.js';
12
+ import { parseXmlFile } from '../../../../common/utils/xmlUtils.js';
13
+ import fs from 'fs-extra';
14
+ import { glob } from 'glob';
15
+ import sortArray from 'sort-array';
16
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
17
+ const messages = Messages.loadMessages('sfdx-hardis', 'org');
18
+ /** xml2js parser keys (attributes, text content) - not permission elements */
19
+ const XML2JS_RESERVED_KEYS = new Set(['$', '_']);
20
+ const DEFAULT_MINIMAL_PERMSETS_THRESHOLD = 5;
21
+ /**
22
+ * Returns true if the value represents a nested/permission element (object or array of objects).
23
+ * Nested elements grant actual permissions (e.g. objectPermissions, fieldPermissions).
24
+ */
25
+ function isPermissionElementValue(value) {
26
+ if (value == null)
27
+ return false;
28
+ if (Array.isArray(value)) {
29
+ return value.length > 0 && typeof value[0] === 'object' && value[0] !== null;
30
+ }
31
+ return typeof value === 'object';
32
+ }
33
+ const GLOB_IGNORE_PATTERNS = ['**/node_modules/**', '**/.git/**'];
34
+ export default class DiagnoseMinimalPermsets extends SfCommand {
35
+ static title = 'Detect permission sets with minimal permissions';
36
+ static description = `Analyzes permission set metadata files in the sfdx project to identify permission sets with very few permissions (configurable threshold, default: 5 or fewer).
37
+
38
+ These "minimal" permission sets may be candidates for consolidation to reduce org complexity and improve maintainability.
39
+
40
+ Key functionalities:
41
+
42
+ - **Project-based analysis:** Scans \`.permissionset-meta.xml\` files in the project (no org connection required for analysis).
43
+ - **Permission counting:** Uses structure to differentiate leaf elements (primitives) from nested elements (objects). Leaf elements are metadata-only; nested elements grant permissions. Future API additions are supported automatically.
44
+ - **Configurable threshold:** Set \`MINIMAL_PERMSETS_THRESHOLD\` env var or use \`--threshold\` (default: 5).
45
+ - **Metadata directory:** Uses \`--metadata-dir\` or scans \`**/*.permissionset-meta.xml\` in the project.
46
+ - **CSV report:** Generates a report listing minimal permission sets with their permission count.
47
+ - **Notifications:** Sends alerts to Grafana, Slack, MS Teams when minimal permission sets are found.
48
+
49
+ This command is part of [sfdx-hardis Monitoring](${CONSTANTS.DOC_URL_ROOT}/salesforce-monitoring-home/) and can output Grafana, Slack and MsTeams Notifications.
50
+ `;
51
+ static examples = [
52
+ '$ sf hardis:org:diagnose:minimalpermsets',
53
+ '$ sf hardis:org:diagnose:minimalpermsets --threshold 5',
54
+ '$ sf hardis:org:diagnose:minimalpermsets --metadata-dir force-app/main/default/permissionsets',
55
+ ];
56
+ static flags = {
57
+ threshold: Flags.integer({
58
+ char: 't',
59
+ description: `Maximum number of permissions to be considered minimal. Overrides MINIMAL_PERMSETS_THRESHOLD env var.`,
60
+ }),
61
+ 'metadata-dir': Flags.string({
62
+ char: 'm',
63
+ description: 'Directory containing .permissionset-meta.xml files. If not set, scans entire project for **/*.permissionset-meta.xml',
64
+ }),
65
+ outputfile: Flags.string({
66
+ char: 'f',
67
+ description: 'Force the path and name of output report file. Must end with .csv',
68
+ }),
69
+ debug: Flags.boolean({
70
+ char: 'd',
71
+ default: false,
72
+ description: messages.getMessage('debugMode'),
73
+ }),
74
+ websocket: Flags.string({
75
+ description: messages.getMessage('websocket'),
76
+ }),
77
+ skipauth: Flags.boolean({
78
+ description: 'Skip authentication check when a default username is required',
79
+ }),
80
+ 'target-org': requiredOrgFlagWithDeprecations,
81
+ };
82
+ static requiresProject = true;
83
+ static triggerNotification = true;
84
+ debugMode = false;
85
+ outputFile;
86
+ outputFilesRes = {};
87
+ minimalPermSets = [];
88
+ totalCount = 0;
89
+ errorCount = 0;
90
+ statusCode = 0;
91
+ /* jscpd:ignore-end */
92
+ /**
93
+ * Count permission-granting elements in a parsed PermissionSet XML object.
94
+ * Uses structure to differentiate: leaf elements (primitives/arrays of primitives) are metadata-only;
95
+ * nested elements (objects/arrays of objects) are actual permissions. No hard-coded element names.
96
+ */
97
+ countPermissionElements(psObj) {
98
+ if (!psObj || typeof psObj !== 'object') {
99
+ return 0;
100
+ }
101
+ let count = 0;
102
+ for (const [key, value] of Object.entries(psObj)) {
103
+ const elementName = key.replace(/^[^:]+:/, ''); // strip namespace prefix if present
104
+ if (XML2JS_RESERVED_KEYS.has(elementName)) {
105
+ continue;
106
+ }
107
+ if (!isPermissionElementValue(value)) {
108
+ continue; // leaf/primitive element - metadata only
109
+ }
110
+ if (Array.isArray(value)) {
111
+ count += value.length;
112
+ }
113
+ else {
114
+ count += 1;
115
+ }
116
+ }
117
+ return count;
118
+ }
119
+ async run() {
120
+ const { flags } = await this.parse(DiagnoseMinimalPermsets);
121
+ this.debugMode = flags.debug || false;
122
+ this.outputFile = flags.outputfile || null;
123
+ const threshold = flags.threshold ??
124
+ parseInt(getEnvVar('MINIMAL_PERMSETS_THRESHOLD') || String(DEFAULT_MINIMAL_PERMSETS_THRESHOLD), 10);
125
+ if (!Number.isFinite(threshold) || threshold < 0) {
126
+ throw new Error(`Invalid MINIMAL_PERMSETS_THRESHOLD or --threshold: must be a non-negative integer`);
127
+ }
128
+ const metadataDir = flags['metadata-dir'];
129
+ const cwd = process.cwd();
130
+ let psFiles;
131
+ if (metadataDir) {
132
+ const dirPath = path.isAbsolute(metadataDir) ? metadataDir : path.join(cwd, metadataDir);
133
+ if (!(await fs.pathExists(dirPath))) {
134
+ uxLog("error", this, c.red(`Metadata directory not found: ${dirPath}`));
135
+ process.exitCode = 1;
136
+ return { status: 1, message: 'Metadata directory not found', minimalPermSets: [] };
137
+ }
138
+ psFiles = await glob('*.permissionset-meta.xml', { cwd: dirPath, absolute: true });
139
+ }
140
+ else {
141
+ psFiles = await glob('**/*.permissionset-meta.xml', { cwd, ignore: GLOB_IGNORE_PATTERNS, absolute: true });
142
+ }
143
+ uxLog("action", this, c.cyan(`Scanning ${psFiles.length} permission set(s) for minimal permissions (threshold: <= ${threshold})...`));
144
+ this.totalCount = psFiles.length;
145
+ this.minimalPermSets = [];
146
+ this.errorCount = 0;
147
+ for (const filePath of psFiles) {
148
+ const fileName = path.basename(filePath);
149
+ const cleanName = fileName.replace(/\.permissionset-meta\.xml$/, '');
150
+ try {
151
+ const parsed = await parseXmlFile(filePath);
152
+ const psRoot = parsed?.PermissionSet ?? parsed?.['sf:PermissionSet'] ?? Object.values(parsed || {})[0];
153
+ if (!psRoot) {
154
+ uxLog("warning", this, c.yellow(` Skipped ${fileName}: no PermissionSet root found`));
155
+ this.errorCount++;
156
+ continue;
157
+ }
158
+ const permissionCount = this.countPermissionElements(psRoot);
159
+ if (permissionCount <= threshold) {
160
+ const label = (Array.isArray(psRoot.label) ? psRoot.label[0] : psRoot.label) || cleanName;
161
+ const relPath = path.relative(cwd, filePath);
162
+ const isZeroValue = permissionCount === 0;
163
+ this.minimalPermSets.push({
164
+ Name: label,
165
+ FilePath: relPath,
166
+ PermissionCount: permissionCount,
167
+ severity: isZeroValue ? 'error' : 'warning',
168
+ severityIcon: getSeverityIcon(isZeroValue ? 'error' : 'warning'),
169
+ });
170
+ if (this.debugMode) {
171
+ uxLog("log", this, c.grey(` MINIMAL: ${label} (${fileName}) - ${permissionCount} permissions`));
172
+ }
173
+ }
174
+ }
175
+ catch (e) {
176
+ uxLog("warning", this, c.yellow(` ERROR parsing ${fileName}: ${e?.message || e}`));
177
+ this.errorCount++;
178
+ }
179
+ }
180
+ this.minimalPermSets = sortArray(this.minimalPermSets, { by: ['Name'], order: ['asc'] });
181
+ // Display summary
182
+ uxLog("action", this, c.cyan('Results'));
183
+ uxLog("log", this, c.grey(`Found ${this.minimalPermSets.length} minimal permission set(s) (<= ${threshold} permissions) out of ${this.totalCount} total. Parse errors: ${this.errorCount}`));
184
+ if (this.minimalPermSets.length > 0) {
185
+ this.statusCode = 1;
186
+ uxLogTable(this, this.minimalPermSets);
187
+ uxLog("warning", this, c.yellow(`Consider consolidating these permission sets to reduce org complexity and improve maintainability.`));
188
+ }
189
+ else {
190
+ uxLog("success", this, c.green(`No minimal permission sets found (all have > ${threshold} permissions).`));
191
+ }
192
+ // Generate CSV report
193
+ this.outputFile = await generateReportPath('minimal-permission-sets', this.outputFile);
194
+ this.outputFilesRes = await generateCsvFile(this.minimalPermSets, this.outputFile, {
195
+ fileTitle: 'Minimal Permission Sets',
196
+ });
197
+ // Notifications
198
+ await setConnectionVariables(flags['target-org']?.getConnection());
199
+ const orgMarkdown = await getOrgMarkdown(flags['target-org']?.getConnection()?.instanceUrl);
200
+ const notifButtons = await getNotificationButtons();
201
+ let notifSeverity = 'log';
202
+ let notifText = `No minimal permission sets found in project for ${orgMarkdown} (threshold: ${threshold})`;
203
+ const notifAttachments = [];
204
+ if (this.minimalPermSets.length > 0) {
205
+ const zeroValueCount = this.minimalPermSets.filter((ps) => ps.PermissionCount === 0).length;
206
+ notifSeverity = zeroValueCount > 0 ? 'error' : 'warning';
207
+ notifText = `${this.minimalPermSets.length} minimal permission set(s) (<= ${threshold} permissions) in project for ${orgMarkdown}`;
208
+ if (zeroValueCount > 0) {
209
+ notifText = `${zeroValueCount} zero-value permission set(s) (0 permissions) and ${this.minimalPermSets.length - zeroValueCount} minimal in project for ${orgMarkdown}`;
210
+ }
211
+ const detailText = this.minimalPermSets
212
+ .slice(0, 20)
213
+ .map((ps) => {
214
+ const prefix = ps.PermissionCount === 0 ? '❌' : '⚠️';
215
+ return `${prefix} ${ps.Name}: ${ps.PermissionCount} permissions`;
216
+ })
217
+ .join('\n');
218
+ notifAttachments.push({
219
+ text: this.minimalPermSets.length > 20 ? `${detailText}\n... and ${this.minimalPermSets.length - 20} more` : detailText,
220
+ });
221
+ }
222
+ await NotifProvider.postNotifications({
223
+ type: 'MINIMAL_PERMSETS',
224
+ text: notifText,
225
+ attachments: notifAttachments,
226
+ buttons: notifButtons,
227
+ severity: notifSeverity,
228
+ attachedFiles: this.outputFilesRes.xlsxFile ? [this.outputFilesRes.xlsxFile] : [],
229
+ logElements: this.minimalPermSets,
230
+ data: { metric: this.minimalPermSets.length, threshold },
231
+ metrics: {
232
+ minimalPermissionSets: this.minimalPermSets.length,
233
+ zeroValuePermissionSets: this.minimalPermSets.filter((ps) => ps.PermissionCount === 0).length,
234
+ totalPermissionSets: this.totalCount,
235
+ parseErrors: this.errorCount,
236
+ },
237
+ });
238
+ if ((this.argv || []).includes('minimalpermsets')) {
239
+ process.exitCode = this.statusCode;
240
+ }
241
+ return {
242
+ status: this.statusCode,
243
+ threshold,
244
+ totalPermissionSets: this.totalCount,
245
+ minimalPermissionSets: this.minimalPermSets.length,
246
+ errorCount: this.errorCount,
247
+ minimalPermSets: this.minimalPermSets,
248
+ outputFile: this.outputFile,
249
+ };
250
+ }
251
+ }
252
+ //# sourceMappingURL=minimalpermsets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minimalpermsets.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/org/diagnose/minimalpermsets.ts"],"names":[],"mappings":"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"}
@@ -118,6 +118,12 @@ export default class MonitorAll extends SfCommand {
118
118
  command: 'sf hardis:org:diagnose:unused-apex-classes',
119
119
  frequency: 'weekly',
120
120
  },
121
+ {
122
+ key: 'APEX_API_VERSION',
123
+ title: 'Detect Apex classes and triggers with deprecated API version',
124
+ command: 'sf hardis:org:diagnose:apex-api-version',
125
+ frequency: 'weekly',
126
+ },
121
127
  {
122
128
  key: 'CONNECTED_APPS',
123
129
  title: 'Detect unused Connected Apps in an org',
@@ -142,6 +148,12 @@ export default class MonitorAll extends SfCommand {
142
148
  command: 'sf hardis:org:diagnose:underusedpermsets',
143
149
  frequency: 'weekly',
144
150
  },
151
+ {
152
+ key: 'MINIMAL_PERMSETS',
153
+ title: 'Detect permission sets with minimal permissions in project',
154
+ command: 'sf hardis:org:diagnose:minimalpermsets',
155
+ frequency: 'weekly',
156
+ },
145
157
  ];
146
158
  static description = `Monitor org, generate reports and sends notifications
147
159
 
@@ -1 +1 @@
1
- {"version":3,"file":"all.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/org/monitor/all.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"all.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/org/monitor/all.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ export interface NotifButton {
6
6
  }
7
7
  export interface NotifMessage {
8
8
  text: string;
9
- type: "ACTIVE_USERS" | "ACTIVE_USERS_CRM_WEEKLY" | "ACTIVE_USERS_EXPERIENCE_MONTHLY" | "UNUSED_USERS" | "UNUSED_USERS_CRM_6_MONTHS" | "UNUSED_USERS_EXPERIENCE_6_MONTHS" | "AUDIT_TRAIL" | "APEX_TESTS" | "BACKUP" | "DEPLOYMENT" | "LEGACY_API" | "LICENSES" | "LINT_ACCESS" | "UNUSED_METADATAS" | "METADATA_STATUS" | "MISSING_ATTRIBUTES" | "SERVICENOW_REPORT" | "UNUSED_LICENSES" | "UNDERUSED_PERMSETS" | "UNUSED_APEX_CLASSES" | "CONNECTED_APPS" | "UNSECURED_CONNECTED_APPS" | "ORG_HEALTH_CHECK" | "ORG_INFO" | "ORG_LIMITS" | "RELEASE_UPDATES" | "AGENTFORCE_CONVERSATIONS" | "AGENTFORCE_FEEDBACK" | "APEX_ERROR" | "FLOW_ERROR";
9
+ type: "ACTIVE_USERS" | "ACTIVE_USERS_CRM_WEEKLY" | "ACTIVE_USERS_EXPERIENCE_MONTHLY" | "UNUSED_USERS" | "UNUSED_USERS_CRM_6_MONTHS" | "UNUSED_USERS_EXPERIENCE_6_MONTHS" | "AUDIT_TRAIL" | "APEX_TESTS" | "BACKUP" | "DEPLOYMENT" | "LEGACY_API" | "LICENSES" | "LINT_ACCESS" | "UNUSED_METADATAS" | "METADATA_STATUS" | "MISSING_ATTRIBUTES" | "SERVICENOW_REPORT" | "UNUSED_LICENSES" | "UNDERUSED_PERMSETS" | "MINIMAL_PERMSETS" | "UNUSED_APEX_CLASSES" | "APEX_API_VERSION" | "CONNECTED_APPS" | "UNSECURED_CONNECTED_APPS" | "ORG_HEALTH_CHECK" | "ORG_INFO" | "ORG_LIMITS" | "RELEASE_UPDATES" | "AGENTFORCE_CONVERSATIONS" | "AGENTFORCE_FEEDBACK" | "APEX_ERROR" | "FLOW_ERROR";
10
10
  buttons?: NotifButton[];
11
11
  attachments?: any[];
12
12
  severity: NotifSeverity;