sfdx-hardis 5.43.0 → 5.43.2

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.
@@ -57,13 +57,12 @@
57
57
  "world:hello"
58
58
  ]
59
59
  },
60
- "hardis:auth:login": {
60
+ "hardis:cache:clear": {
61
61
  "aliases": [],
62
62
  "args": {},
63
- "description": "\nLogins to a Salesforce org from CI/CD workflows.\n\nWill use the variables and files defined by configuration commands:\n\n- CI/CD repos: [Configure Org CI Authentication](https://sfdx-hardis.cloudity.com/hardis/project/configure/auth/)\n- Monitoring repos: [Configure Org Monitoring](https://sfdx-hardis.cloudity.com/hardis/org/configure/monitoring/)\n\nIf you have a technical org (for example to call Agentforce from another org, you can define variable SFDX_AUTH_URL_TECHNICAL_ORG and it will authenticate it with alias TECHNICAL_ORG)\n\nYou can get SFDX_AUTH_URL_TECHNICAL_ORG value by running the command: `sf org display --verbose --json` and copy the value of the field `sfdxAuthUrl` in the output.\n",
63
+ "description": "Clear cache generated by sfdx-hardis",
64
64
  "examples": [
65
- "$ sf hardis:auth:login",
66
- "CI=true sf hardis:auth:login"
65
+ "$ sf hardis:cache:clear"
67
66
  ],
68
67
  "flags": {
69
68
  "json": {
@@ -81,28 +80,6 @@
81
80
  "multiple": false,
82
81
  "type": "option"
83
82
  },
84
- "instanceurl": {
85
- "char": "r",
86
- "description": "URL of org instance",
87
- "name": "instanceurl",
88
- "hasDynamicHelp": false,
89
- "multiple": false,
90
- "type": "option"
91
- },
92
- "devhub": {
93
- "char": "h",
94
- "description": "Also connect associated DevHub",
95
- "name": "devhub",
96
- "allowNo": false,
97
- "type": "boolean"
98
- },
99
- "scratchorg": {
100
- "char": "s",
101
- "description": "Scratch org",
102
- "name": "scratchorg",
103
- "allowNo": false,
104
- "type": "boolean"
105
- },
106
83
  "debug": {
107
84
  "char": "d",
108
85
  "description": "Activate debug mode (more logs)",
@@ -126,38 +103,39 @@
126
103
  },
127
104
  "hasDynamicHelp": false,
128
105
  "hiddenAliases": [],
129
- "id": "hardis:auth:login",
106
+ "id": "hardis:cache:clear",
130
107
  "pluginAlias": "sfdx-hardis",
131
108
  "pluginName": "sfdx-hardis",
132
109
  "pluginType": "core",
133
110
  "strict": true,
134
111
  "enableJsonFlag": true,
135
- "title": "Login",
112
+ "title": "Clear sfdx-hardis cache",
136
113
  "requiresProject": false,
137
114
  "isESM": true,
138
115
  "relativePath": [
139
116
  "lib",
140
117
  "commands",
141
118
  "hardis",
142
- "auth",
143
- "login.js"
119
+ "cache",
120
+ "clear.js"
144
121
  ],
145
122
  "aliasPermutations": [],
146
123
  "permutations": [
147
- "hardis:auth:login",
148
- "auth:hardis:login",
149
- "auth:login:hardis",
150
- "hardis:login:auth",
151
- "login:hardis:auth",
152
- "login:auth:hardis"
124
+ "hardis:cache:clear",
125
+ "cache:hardis:clear",
126
+ "cache:clear:hardis",
127
+ "hardis:clear:cache",
128
+ "clear:hardis:cache",
129
+ "clear:cache:hardis"
153
130
  ]
154
131
  },
155
- "hardis:cache:clear": {
132
+ "hardis:auth:login": {
156
133
  "aliases": [],
157
134
  "args": {},
158
- "description": "Clear cache generated by sfdx-hardis",
135
+ "description": "\nLogins to a Salesforce org from CI/CD workflows.\n\nWill use the variables and files defined by configuration commands:\n\n- CI/CD repos: [Configure Org CI Authentication](https://sfdx-hardis.cloudity.com/hardis/project/configure/auth/)\n- Monitoring repos: [Configure Org Monitoring](https://sfdx-hardis.cloudity.com/hardis/org/configure/monitoring/)\n\nIf you have a technical org (for example to call Agentforce from another org, you can define variable SFDX_AUTH_URL_TECHNICAL_ORG and it will authenticate it with alias TECHNICAL_ORG)\n\nYou can get SFDX_AUTH_URL_TECHNICAL_ORG value by running the command: `sf org display --verbose --json` and copy the value of the field `sfdxAuthUrl` in the output.\n",
159
136
  "examples": [
160
- "$ sf hardis:cache:clear"
137
+ "$ sf hardis:auth:login",
138
+ "CI=true sf hardis:auth:login"
161
139
  ],
162
140
  "flags": {
163
141
  "json": {
@@ -175,6 +153,28 @@
175
153
  "multiple": false,
176
154
  "type": "option"
177
155
  },
156
+ "instanceurl": {
157
+ "char": "r",
158
+ "description": "URL of org instance",
159
+ "name": "instanceurl",
160
+ "hasDynamicHelp": false,
161
+ "multiple": false,
162
+ "type": "option"
163
+ },
164
+ "devhub": {
165
+ "char": "h",
166
+ "description": "Also connect associated DevHub",
167
+ "name": "devhub",
168
+ "allowNo": false,
169
+ "type": "boolean"
170
+ },
171
+ "scratchorg": {
172
+ "char": "s",
173
+ "description": "Scratch org",
174
+ "name": "scratchorg",
175
+ "allowNo": false,
176
+ "type": "boolean"
177
+ },
178
178
  "debug": {
179
179
  "char": "d",
180
180
  "description": "Activate debug mode (more logs)",
@@ -198,30 +198,30 @@
198
198
  },
199
199
  "hasDynamicHelp": false,
200
200
  "hiddenAliases": [],
201
- "id": "hardis:cache:clear",
201
+ "id": "hardis:auth:login",
202
202
  "pluginAlias": "sfdx-hardis",
203
203
  "pluginName": "sfdx-hardis",
204
204
  "pluginType": "core",
205
205
  "strict": true,
206
206
  "enableJsonFlag": true,
207
- "title": "Clear sfdx-hardis cache",
207
+ "title": "Login",
208
208
  "requiresProject": false,
209
209
  "isESM": true,
210
210
  "relativePath": [
211
211
  "lib",
212
212
  "commands",
213
213
  "hardis",
214
- "cache",
215
- "clear.js"
214
+ "auth",
215
+ "login.js"
216
216
  ],
217
217
  "aliasPermutations": [],
218
218
  "permutations": [
219
- "hardis:cache:clear",
220
- "cache:hardis:clear",
221
- "cache:clear:hardis",
222
- "hardis:clear:cache",
223
- "clear:hardis:cache",
224
- "clear:cache:hardis"
219
+ "hardis:auth:login",
220
+ "auth:hardis:login",
221
+ "auth:login:hardis",
222
+ "hardis:login:auth",
223
+ "login:hardis:auth",
224
+ "login:auth:hardis"
225
225
  ]
226
226
  },
227
227
  "hardis:config:get": {
@@ -5476,15 +5476,12 @@
5476
5476
  "import:data:org:hardis"
5477
5477
  ]
5478
5478
  },
5479
- "hardis:org:diagnose:audittrail": {
5479
+ "hardis:org:files:export": {
5480
5480
  "aliases": [],
5481
5481
  "args": {},
5482
- "description": "Export Audit trail into a CSV file with selected criteria, and highlight suspect actions\n\nAlso detects updates of Custom Settings values (disable by defining `SKIP_AUDIT_TRAIL_CUSTOM_SETTINGS=true`)\n\nRegular setup actions performed in major orgs are filtered.\n\n- \"\"\n - createScratchOrg\n - changedsenderemail\n - deleteScratchOrg\n - loginasgrantedtopartnerbt\n- Certificate and Key Management\n - insertCertificate\n- Custom App Licenses\n - addeduserpackagelicense\n - granteduserpackagelicense\n - revokeduserpackagelicense\n- Customer Portal\n - createdcustomersuccessuser\n - CSPUserDisabled\n- Currency\n - updateddatedexchrate\n- Data Management\n - queueMembership\n- Email Administration\n - dkimRotationPreparationSuccessful\n - dkimRotationSuccessful\n- Groups\n - groupMembership\n- Holidays\n - holiday_insert\n- Inbox mobile and legacy desktop apps\n - enableSIQUserNonEAC\n- Manage Users\n - activateduser\n - createduser\n - changedcommunitynickname\n - changedemail\n - changedfederationid\n - changedpassword\n - changedinteractionuseroffon\n - changedinteractionuseronoff\n - changedmarketinguseroffon\n - changedmarketinguseronoff\n - changedofflineuseroffon\n - changedprofileforuserstdtostd\n - changedprofileforuser\n - changedprofileforusercusttostd\n - changedprofileforuserstdtocust\n - changedroleforusertonone\n - changedroleforuser\n - changedroleforuserfromnone\n - changedUserEmailVerifiedStatusUnverified\n - changedUserEmailVerifiedStatusVerified\n - changedknowledgeuseroffon\n - changedsfcontentuseroffon\n - changedsupportuseroffon\n - changedUserPhoneNumber\n - changedUserPhoneVerifiedStatusUnverified\n - deactivateduser\n - deleteAuthenticatorPairing\n - deleteTwoFactorInfo2\n - deleteTwoFactorTempCode\n - frozeuser\n - insertAuthenticatorPairing\n - insertTwoFactorInfo2\n - insertTwoFactorTempCode\n - lightningloginenroll\n - PermSetAssign\n - PermSetGroupAssign\n - PermSetGroupUnassign\n - PermSetLicenseAssign\n - PermSetUnassign\n - PermSetLicenseUnassign\n - registeredUserPhoneNumber\n - resetpassword\n - suNetworkAdminLogin\n - suNetworkAdminLogout\n - suOrgAdminLogin\n - suOrgAdminLogout\n - unfrozeuser\n - useremailchangesent\n- Mobile Administration\n - assigneduserstomobileconfig\n- Reporting Snapshots\n - createdReportJob\n - deletedReportJob\n- Sandboxes\n - DeleteSandbox\n\nBy default, deployment user defined in .sfdx-hardis.yml targetUsername property will be excluded.\n\nYou can define additional users to exclude in .sfdx-hardis.yml **monitoringExcludeUsernames** property.\n\nYou can also add more sections / actions considered as not suspect using property **monitoringAllowedSectionsActions**\n\nExample:\n\n```yaml\nmonitoringExcludeUsernames:\n - deploymentuser@cloudity.com\n - marketingcloud@cloudity.com\n - integration-user@cloudity.com\n\nmonitoringAllowedSectionsActions:\n \"Some section\": [] // Will ignore all actions from such section\n \"Some other section\": [\"actionType1\",\"actionType2\",\"actionType3\"] // Will ignore only those 3 actions from section \"Some other section\". Other actions in the same section will be considered as suspect.\n```\n\n## Excel output example\n\n![](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/screenshot-monitoring-audittrail-excel.jpg)\n\n## Local output example\n\n![](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/screenshot-monitoring-audittrail-local.jpg)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-suspect-audit-trail/) and can output Grafana, Slack and MsTeams Notifications.\n",
5482
+ "description": "Export file attachments from a Salesforce org\n\nHandles:\n\n- ContentVersion\n- Attachment\n\nSee article below:\n\n[![How to mass download notes and attachments files from a Salesforce org](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-mass-download.jpg)](https://nicolas.vuillamy.fr/how-to-mass-download-notes-and-attachments-files-from-a-salesforce-org-83a028824afd)\n",
5483
5483
  "examples": [
5484
- "$ sf hardis:org:diagnose:audittrail",
5485
- "$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com",
5486
- "$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com,bertrand@titi.com",
5487
- "$ sf hardis:org:diagnose:audittrail --lastndays 5"
5484
+ "$ sf hardis:org:files:export"
5488
5485
  ],
5489
5486
  "flags": {
5490
5487
  "json": {
@@ -5502,26 +5499,37 @@
5502
5499
  "multiple": false,
5503
5500
  "type": "option"
5504
5501
  },
5505
- "excludeusers": {
5506
- "char": "e",
5507
- "description": "Comma-separated list of usernames to exclude",
5508
- "name": "excludeusers",
5502
+ "path": {
5503
+ "char": "p",
5504
+ "description": "Path to the file export project",
5505
+ "name": "path",
5509
5506
  "hasDynamicHelp": false,
5510
5507
  "multiple": false,
5511
5508
  "type": "option"
5512
5509
  },
5513
- "lastndays": {
5510
+ "chunksize": {
5511
+ "char": "c",
5512
+ "description": "Number of records to add in a chunk before it is processed",
5513
+ "name": "chunksize",
5514
+ "default": 1000,
5515
+ "hasDynamicHelp": false,
5516
+ "multiple": false,
5517
+ "type": "option"
5518
+ },
5519
+ "polltimeout": {
5514
5520
  "char": "t",
5515
- "description": "Number of days to extract from today (included)",
5516
- "name": "lastndays",
5521
+ "description": "Timeout in MS for Bulk API calls",
5522
+ "name": "polltimeout",
5523
+ "default": 300000,
5517
5524
  "hasDynamicHelp": false,
5518
5525
  "multiple": false,
5519
5526
  "type": "option"
5520
5527
  },
5521
- "outputfile": {
5522
- "char": "f",
5523
- "description": "Force the path and name of output report file. Must end with .csv",
5524
- "name": "outputfile",
5528
+ "startchunknumber": {
5529
+ "char": "s",
5530
+ "description": "Chunk number to start from",
5531
+ "name": "startchunknumber",
5532
+ "default": 0,
5525
5533
  "hasDynamicHelp": false,
5526
5534
  "multiple": false,
5527
5535
  "type": "option"
@@ -5564,13 +5572,13 @@
5564
5572
  },
5565
5573
  "hasDynamicHelp": true,
5566
5574
  "hiddenAliases": [],
5567
- "id": "hardis:org:diagnose:audittrail",
5575
+ "id": "hardis:org:files:export",
5568
5576
  "pluginAlias": "sfdx-hardis",
5569
5577
  "pluginName": "sfdx-hardis",
5570
5578
  "pluginType": "core",
5571
5579
  "strict": true,
5572
5580
  "enableJsonFlag": true,
5573
- "title": "Diagnose content of Setup Audit Trail",
5581
+ "title": "Export files",
5574
5582
  "requiresProject": false,
5575
5583
  "isESM": true,
5576
5584
  "relativePath": [
@@ -5578,43 +5586,43 @@
5578
5586
  "commands",
5579
5587
  "hardis",
5580
5588
  "org",
5581
- "diagnose",
5582
- "audittrail.js"
5589
+ "files",
5590
+ "export.js"
5583
5591
  ],
5584
5592
  "aliasPermutations": [],
5585
5593
  "permutations": [
5586
- "hardis:org:diagnose:audittrail",
5587
- "org:hardis:diagnose:audittrail",
5588
- "org:diagnose:hardis:audittrail",
5589
- "org:diagnose:audittrail:hardis",
5590
- "hardis:diagnose:org:audittrail",
5591
- "diagnose:hardis:org:audittrail",
5592
- "diagnose:org:hardis:audittrail",
5593
- "diagnose:org:audittrail:hardis",
5594
- "hardis:diagnose:audittrail:org",
5595
- "diagnose:hardis:audittrail:org",
5596
- "diagnose:audittrail:hardis:org",
5597
- "diagnose:audittrail:org:hardis",
5598
- "hardis:org:audittrail:diagnose",
5599
- "org:hardis:audittrail:diagnose",
5600
- "org:audittrail:hardis:diagnose",
5601
- "org:audittrail:diagnose:hardis",
5602
- "hardis:audittrail:org:diagnose",
5603
- "audittrail:hardis:org:diagnose",
5604
- "audittrail:org:hardis:diagnose",
5605
- "audittrail:org:diagnose:hardis",
5606
- "hardis:audittrail:diagnose:org",
5607
- "audittrail:hardis:diagnose:org",
5608
- "audittrail:diagnose:hardis:org",
5609
- "audittrail:diagnose:org:hardis"
5594
+ "hardis:org:files:export",
5595
+ "org:hardis:files:export",
5596
+ "org:files:hardis:export",
5597
+ "org:files:export:hardis",
5598
+ "hardis:files:org:export",
5599
+ "files:hardis:org:export",
5600
+ "files:org:hardis:export",
5601
+ "files:org:export:hardis",
5602
+ "hardis:files:export:org",
5603
+ "files:hardis:export:org",
5604
+ "files:export:hardis:org",
5605
+ "files:export:org:hardis",
5606
+ "hardis:org:export:files",
5607
+ "org:hardis:export:files",
5608
+ "org:export:hardis:files",
5609
+ "org:export:files:hardis",
5610
+ "hardis:export:org:files",
5611
+ "export:hardis:org:files",
5612
+ "export:org:hardis:files",
5613
+ "export:org:files:hardis",
5614
+ "hardis:export:files:org",
5615
+ "export:hardis:files:org",
5616
+ "export:files:hardis:org",
5617
+ "export:files:org:hardis"
5610
5618
  ]
5611
5619
  },
5612
- "hardis:org:diagnose:instanceupgrade": {
5620
+ "hardis:org:files:import": {
5613
5621
  "aliases": [],
5614
5622
  "args": {},
5615
- "description": "Get the date when the org instance will be upgraded (to Spring, Summer or Winter)\n ",
5623
+ "description": "Import file attachments into a Salesforce org\n\nSee article below to see how to Export them.\n\n[![How to mass download notes and attachments files from a Salesforce org](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-mass-download.jpg)](https://nicolas.vuillamy.fr/how-to-mass-download-notes-and-attachments-files-from-a-salesforce-org-83a028824afd)\n",
5616
5624
  "examples": [
5617
- "$ sf hardis:org:diagnose:instanceupgrade"
5625
+ "$ sf hardis:org:files:import"
5618
5626
  ],
5619
5627
  "flags": {
5620
5628
  "json": {
@@ -5632,6 +5640,21 @@
5632
5640
  "multiple": false,
5633
5641
  "type": "option"
5634
5642
  },
5643
+ "path": {
5644
+ "char": "p",
5645
+ "description": "Path to the file export project",
5646
+ "name": "path",
5647
+ "hasDynamicHelp": false,
5648
+ "multiple": false,
5649
+ "type": "option"
5650
+ },
5651
+ "overwrite": {
5652
+ "char": "f",
5653
+ "description": "Override existing files (doubles the number of API calls)",
5654
+ "name": "overwrite",
5655
+ "allowNo": false,
5656
+ "type": "boolean"
5657
+ },
5635
5658
  "debug": {
5636
5659
  "char": "d",
5637
5660
  "description": "Activate debug mode (more logs)",
@@ -5670,13 +5693,13 @@
5670
5693
  },
5671
5694
  "hasDynamicHelp": true,
5672
5695
  "hiddenAliases": [],
5673
- "id": "hardis:org:diagnose:instanceupgrade",
5696
+ "id": "hardis:org:files:import",
5674
5697
  "pluginAlias": "sfdx-hardis",
5675
5698
  "pluginName": "sfdx-hardis",
5676
5699
  "pluginType": "core",
5677
5700
  "strict": true,
5678
5701
  "enableJsonFlag": true,
5679
- "title": "Get Instance Upgrade date",
5702
+ "title": "Import files",
5680
5703
  "requiresProject": false,
5681
5704
  "isESM": true,
5682
5705
  "relativePath": [
@@ -5684,46 +5707,46 @@
5684
5707
  "commands",
5685
5708
  "hardis",
5686
5709
  "org",
5687
- "diagnose",
5688
- "instanceupgrade.js"
5710
+ "files",
5711
+ "import.js"
5689
5712
  ],
5690
5713
  "aliasPermutations": [],
5691
5714
  "permutations": [
5692
- "hardis:org:diagnose:instanceupgrade",
5693
- "org:hardis:diagnose:instanceupgrade",
5694
- "org:diagnose:hardis:instanceupgrade",
5695
- "org:diagnose:instanceupgrade:hardis",
5696
- "hardis:diagnose:org:instanceupgrade",
5697
- "diagnose:hardis:org:instanceupgrade",
5698
- "diagnose:org:hardis:instanceupgrade",
5699
- "diagnose:org:instanceupgrade:hardis",
5700
- "hardis:diagnose:instanceupgrade:org",
5701
- "diagnose:hardis:instanceupgrade:org",
5702
- "diagnose:instanceupgrade:hardis:org",
5703
- "diagnose:instanceupgrade:org:hardis",
5704
- "hardis:org:instanceupgrade:diagnose",
5705
- "org:hardis:instanceupgrade:diagnose",
5706
- "org:instanceupgrade:hardis:diagnose",
5707
- "org:instanceupgrade:diagnose:hardis",
5708
- "hardis:instanceupgrade:org:diagnose",
5709
- "instanceupgrade:hardis:org:diagnose",
5710
- "instanceupgrade:org:hardis:diagnose",
5711
- "instanceupgrade:org:diagnose:hardis",
5712
- "hardis:instanceupgrade:diagnose:org",
5713
- "instanceupgrade:hardis:diagnose:org",
5714
- "instanceupgrade:diagnose:hardis:org",
5715
- "instanceupgrade:diagnose:org:hardis"
5716
- ]
5717
- },
5718
- "hardis:org:diagnose:legacyapi": {
5719
- "aliases": [],
5720
- "args": {},
5721
- "description": "Checks if an org uses retired or someday retired API version\n\n\nSee article below\n\n[![Handle Salesforce API versions Deprecation like a pro](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-deprecated-api.jpg)](https://nicolas.vuillamy.fr/handle-salesforce-api-versions-deprecation-like-a-pro-335065f52238)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-deprecated-api-calls/) and can output Grafana, Slack and MsTeams Notifications.\n",
5722
- "examples": [
5723
- "$ sf hardis:org:diagnose:legacyapi",
5724
- "$ sf hardis:org:diagnose:legacyapi -u hardis@myclient.com",
5725
- "$ sf hardis:org:diagnose:legacyapi --outputfile 'c:/path/to/folder/legacyapi.csv'",
5726
- "$ sf hardis:org:diagnose:legacyapi -u hardis@myclient.com --outputfile ./tmp/legacyapi.csv"
5715
+ "hardis:org:files:import",
5716
+ "org:hardis:files:import",
5717
+ "org:files:hardis:import",
5718
+ "org:files:import:hardis",
5719
+ "hardis:files:org:import",
5720
+ "files:hardis:org:import",
5721
+ "files:org:hardis:import",
5722
+ "files:org:import:hardis",
5723
+ "hardis:files:import:org",
5724
+ "files:hardis:import:org",
5725
+ "files:import:hardis:org",
5726
+ "files:import:org:hardis",
5727
+ "hardis:org:import:files",
5728
+ "org:hardis:import:files",
5729
+ "org:import:hardis:files",
5730
+ "org:import:files:hardis",
5731
+ "hardis:import:org:files",
5732
+ "import:hardis:org:files",
5733
+ "import:org:hardis:files",
5734
+ "import:org:files:hardis",
5735
+ "hardis:import:files:org",
5736
+ "import:hardis:files:org",
5737
+ "import:files:hardis:org",
5738
+ "import:files:org:hardis"
5739
+ ]
5740
+ },
5741
+ "hardis:org:diagnose:audittrail": {
5742
+ "aliases": [],
5743
+ "args": {},
5744
+ "description": "Export Audit trail into a CSV file with selected criteria, and highlight suspect actions\n\nAlso detects updates of Custom Settings values (disable by defining `SKIP_AUDIT_TRAIL_CUSTOM_SETTINGS=true`)\n\nRegular setup actions performed in major orgs are filtered.\n\n- \"\"\n - createScratchOrg\n - changedsenderemail\n - deleteScratchOrg\n - loginasgrantedtopartnerbt\n- Certificate and Key Management\n - insertCertificate\n- Custom App Licenses\n - addeduserpackagelicense\n - granteduserpackagelicense\n - revokeduserpackagelicense\n- Customer Portal\n - createdcustomersuccessuser\n - CSPUserDisabled\n- Currency\n - updateddatedexchrate\n- Data Management\n - queueMembership\n- Email Administration\n - dkimRotationPreparationSuccessful\n - dkimRotationSuccessful\n- Groups\n - groupMembership\n- Holidays\n - holiday_insert\n- Inbox mobile and legacy desktop apps\n - enableSIQUserNonEAC\n- Manage Users\n - activateduser\n - createduser\n - changedcommunitynickname\n - changedemail\n - changedfederationid\n - changedpassword\n - changedinteractionuseroffon\n - changedinteractionuseronoff\n - changedmarketinguseroffon\n - changedmarketinguseronoff\n - changedofflineuseroffon\n - changedprofileforuserstdtostd\n - changedprofileforuser\n - changedprofileforusercusttostd\n - changedprofileforuserstdtocust\n - changedroleforusertonone\n - changedroleforuser\n - changedroleforuserfromnone\n - changedUserEmailVerifiedStatusUnverified\n - changedUserEmailVerifiedStatusVerified\n - changedknowledgeuseroffon\n - changedsfcontentuseroffon\n - changedsupportuseroffon\n - changedUserPhoneNumber\n - changedUserPhoneVerifiedStatusUnverified\n - deactivateduser\n - deleteAuthenticatorPairing\n - deleteTwoFactorInfo2\n - deleteTwoFactorTempCode\n - frozeuser\n - insertAuthenticatorPairing\n - insertTwoFactorInfo2\n - insertTwoFactorTempCode\n - lightningloginenroll\n - PermSetAssign\n - PermSetGroupAssign\n - PermSetGroupUnassign\n - PermSetLicenseAssign\n - PermSetUnassign\n - PermSetLicenseUnassign\n - registeredUserPhoneNumber\n - resetpassword\n - suNetworkAdminLogin\n - suNetworkAdminLogout\n - suOrgAdminLogin\n - suOrgAdminLogout\n - unfrozeuser\n - useremailchangesent\n- Mobile Administration\n - assigneduserstomobileconfig\n- Reporting Snapshots\n - createdReportJob\n - deletedReportJob\n- Sandboxes\n - DeleteSandbox\n\nBy default, deployment user defined in .sfdx-hardis.yml targetUsername property will be excluded.\n\nYou can define additional users to exclude in .sfdx-hardis.yml **monitoringExcludeUsernames** property.\n\nYou can also add more sections / actions considered as not suspect using property **monitoringAllowedSectionsActions**\n\nExample:\n\n```yaml\nmonitoringExcludeUsernames:\n - deploymentuser@cloudity.com\n - marketingcloud@cloudity.com\n - integration-user@cloudity.com\n\nmonitoringAllowedSectionsActions:\n \"Some section\": [] // Will ignore all actions from such section\n \"Some other section\": [\"actionType1\",\"actionType2\",\"actionType3\"] // Will ignore only those 3 actions from section \"Some other section\". Other actions in the same section will be considered as suspect.\n```\n\n## Excel output example\n\n![](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/screenshot-monitoring-audittrail-excel.jpg)\n\n## Local output example\n\n![](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/screenshot-monitoring-audittrail-local.jpg)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-suspect-audit-trail/) and can output Grafana, Slack and MsTeams Notifications.\n",
5745
+ "examples": [
5746
+ "$ sf hardis:org:diagnose:audittrail",
5747
+ "$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com",
5748
+ "$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com,bertrand@titi.com",
5749
+ "$ sf hardis:org:diagnose:audittrail --lastndays 5"
5727
5750
  ],
5728
5751
  "flags": {
5729
5752
  "json": {
@@ -5741,20 +5764,18 @@
5741
5764
  "multiple": false,
5742
5765
  "type": "option"
5743
5766
  },
5744
- "eventtype": {
5767
+ "excludeusers": {
5745
5768
  "char": "e",
5746
- "description": "Type of EventLogFile event to analyze",
5747
- "name": "eventtype",
5748
- "default": "ApiTotalUsage",
5769
+ "description": "Comma-separated list of usernames to exclude",
5770
+ "name": "excludeusers",
5749
5771
  "hasDynamicHelp": false,
5750
5772
  "multiple": false,
5751
5773
  "type": "option"
5752
5774
  },
5753
- "limit": {
5754
- "char": "l",
5755
- "description": "Number of latest EventLogFile events to analyze",
5756
- "name": "limit",
5757
- "default": 999,
5775
+ "lastndays": {
5776
+ "char": "t",
5777
+ "description": "Number of days to extract from today (included)",
5778
+ "name": "lastndays",
5758
5779
  "hasDynamicHelp": false,
5759
5780
  "multiple": false,
5760
5781
  "type": "option"
@@ -5805,13 +5826,13 @@
5805
5826
  },
5806
5827
  "hasDynamicHelp": true,
5807
5828
  "hiddenAliases": [],
5808
- "id": "hardis:org:diagnose:legacyapi",
5829
+ "id": "hardis:org:diagnose:audittrail",
5809
5830
  "pluginAlias": "sfdx-hardis",
5810
5831
  "pluginName": "sfdx-hardis",
5811
5832
  "pluginType": "core",
5812
5833
  "strict": true,
5813
5834
  "enableJsonFlag": true,
5814
- "title": "Check for legacy API use",
5835
+ "title": "Diagnose content of Setup Audit Trail",
5815
5836
  "requiresProject": false,
5816
5837
  "isESM": true,
5817
5838
  "relativePath": [
@@ -5820,42 +5841,42 @@
5820
5841
  "hardis",
5821
5842
  "org",
5822
5843
  "diagnose",
5823
- "legacyapi.js"
5844
+ "audittrail.js"
5824
5845
  ],
5825
5846
  "aliasPermutations": [],
5826
5847
  "permutations": [
5827
- "hardis:org:diagnose:legacyapi",
5828
- "org:hardis:diagnose:legacyapi",
5829
- "org:diagnose:hardis:legacyapi",
5830
- "org:diagnose:legacyapi:hardis",
5831
- "hardis:diagnose:org:legacyapi",
5832
- "diagnose:hardis:org:legacyapi",
5833
- "diagnose:org:hardis:legacyapi",
5834
- "diagnose:org:legacyapi:hardis",
5835
- "hardis:diagnose:legacyapi:org",
5836
- "diagnose:hardis:legacyapi:org",
5837
- "diagnose:legacyapi:hardis:org",
5838
- "diagnose:legacyapi:org:hardis",
5839
- "hardis:org:legacyapi:diagnose",
5840
- "org:hardis:legacyapi:diagnose",
5841
- "org:legacyapi:hardis:diagnose",
5842
- "org:legacyapi:diagnose:hardis",
5843
- "hardis:legacyapi:org:diagnose",
5844
- "legacyapi:hardis:org:diagnose",
5845
- "legacyapi:org:hardis:diagnose",
5846
- "legacyapi:org:diagnose:hardis",
5847
- "hardis:legacyapi:diagnose:org",
5848
- "legacyapi:hardis:diagnose:org",
5849
- "legacyapi:diagnose:hardis:org",
5850
- "legacyapi:diagnose:org:hardis"
5848
+ "hardis:org:diagnose:audittrail",
5849
+ "org:hardis:diagnose:audittrail",
5850
+ "org:diagnose:hardis:audittrail",
5851
+ "org:diagnose:audittrail:hardis",
5852
+ "hardis:diagnose:org:audittrail",
5853
+ "diagnose:hardis:org:audittrail",
5854
+ "diagnose:org:hardis:audittrail",
5855
+ "diagnose:org:audittrail:hardis",
5856
+ "hardis:diagnose:audittrail:org",
5857
+ "diagnose:hardis:audittrail:org",
5858
+ "diagnose:audittrail:hardis:org",
5859
+ "diagnose:audittrail:org:hardis",
5860
+ "hardis:org:audittrail:diagnose",
5861
+ "org:hardis:audittrail:diagnose",
5862
+ "org:audittrail:hardis:diagnose",
5863
+ "org:audittrail:diagnose:hardis",
5864
+ "hardis:audittrail:org:diagnose",
5865
+ "audittrail:hardis:org:diagnose",
5866
+ "audittrail:org:hardis:diagnose",
5867
+ "audittrail:org:diagnose:hardis",
5868
+ "hardis:audittrail:diagnose:org",
5869
+ "audittrail:hardis:diagnose:org",
5870
+ "audittrail:diagnose:hardis:org",
5871
+ "audittrail:diagnose:org:hardis"
5851
5872
  ]
5852
5873
  },
5853
- "hardis:org:diagnose:licenses": {
5874
+ "hardis:org:diagnose:instanceupgrade": {
5854
5875
  "aliases": [],
5855
5876
  "args": {},
5856
- "description": "Mostly used for monitoring (Grafana) but you can also use it manually :)",
5877
+ "description": "Get the date when the org instance will be upgraded (to Spring, Summer or Winter)\n ",
5857
5878
  "examples": [
5858
- "$ sf hardis:org:diagnose:licenses"
5879
+ "$ sf hardis:org:diagnose:instanceupgrade"
5859
5880
  ],
5860
5881
  "flags": {
5861
5882
  "json": {
@@ -5873,21 +5894,6 @@
5873
5894
  "multiple": false,
5874
5895
  "type": "option"
5875
5896
  },
5876
- "outputfile": {
5877
- "char": "f",
5878
- "description": "Force the path and name of output report file. Must end with .csv",
5879
- "name": "outputfile",
5880
- "hasDynamicHelp": false,
5881
- "multiple": false,
5882
- "type": "option"
5883
- },
5884
- "usedonly": {
5885
- "char": "u",
5886
- "description": "Filter to have only used licenses",
5887
- "name": "usedonly",
5888
- "allowNo": false,
5889
- "type": "boolean"
5890
- },
5891
5897
  "debug": {
5892
5898
  "char": "d",
5893
5899
  "description": "Activate debug mode (more logs)",
@@ -5926,13 +5932,13 @@
5926
5932
  },
5927
5933
  "hasDynamicHelp": true,
5928
5934
  "hiddenAliases": [],
5929
- "id": "hardis:org:diagnose:licenses",
5935
+ "id": "hardis:org:diagnose:instanceupgrade",
5930
5936
  "pluginAlias": "sfdx-hardis",
5931
5937
  "pluginName": "sfdx-hardis",
5932
5938
  "pluginType": "core",
5933
5939
  "strict": true,
5934
5940
  "enableJsonFlag": true,
5935
- "title": "List licenses subscribed and used in a Salesforce org",
5941
+ "title": "Get Instance Upgrade date",
5936
5942
  "requiresProject": false,
5937
5943
  "isESM": true,
5938
5944
  "relativePath": [
@@ -5941,42 +5947,45 @@
5941
5947
  "hardis",
5942
5948
  "org",
5943
5949
  "diagnose",
5944
- "licenses.js"
5950
+ "instanceupgrade.js"
5945
5951
  ],
5946
5952
  "aliasPermutations": [],
5947
5953
  "permutations": [
5948
- "hardis:org:diagnose:licenses",
5949
- "org:hardis:diagnose:licenses",
5950
- "org:diagnose:hardis:licenses",
5951
- "org:diagnose:licenses:hardis",
5952
- "hardis:diagnose:org:licenses",
5953
- "diagnose:hardis:org:licenses",
5954
- "diagnose:org:hardis:licenses",
5955
- "diagnose:org:licenses:hardis",
5956
- "hardis:diagnose:licenses:org",
5957
- "diagnose:hardis:licenses:org",
5958
- "diagnose:licenses:hardis:org",
5959
- "diagnose:licenses:org:hardis",
5960
- "hardis:org:licenses:diagnose",
5961
- "org:hardis:licenses:diagnose",
5962
- "org:licenses:hardis:diagnose",
5963
- "org:licenses:diagnose:hardis",
5964
- "hardis:licenses:org:diagnose",
5965
- "licenses:hardis:org:diagnose",
5966
- "licenses:org:hardis:diagnose",
5967
- "licenses:org:diagnose:hardis",
5968
- "hardis:licenses:diagnose:org",
5969
- "licenses:hardis:diagnose:org",
5970
- "licenses:diagnose:hardis:org",
5971
- "licenses:diagnose:org:hardis"
5954
+ "hardis:org:diagnose:instanceupgrade",
5955
+ "org:hardis:diagnose:instanceupgrade",
5956
+ "org:diagnose:hardis:instanceupgrade",
5957
+ "org:diagnose:instanceupgrade:hardis",
5958
+ "hardis:diagnose:org:instanceupgrade",
5959
+ "diagnose:hardis:org:instanceupgrade",
5960
+ "diagnose:org:hardis:instanceupgrade",
5961
+ "diagnose:org:instanceupgrade:hardis",
5962
+ "hardis:diagnose:instanceupgrade:org",
5963
+ "diagnose:hardis:instanceupgrade:org",
5964
+ "diagnose:instanceupgrade:hardis:org",
5965
+ "diagnose:instanceupgrade:org:hardis",
5966
+ "hardis:org:instanceupgrade:diagnose",
5967
+ "org:hardis:instanceupgrade:diagnose",
5968
+ "org:instanceupgrade:hardis:diagnose",
5969
+ "org:instanceupgrade:diagnose:hardis",
5970
+ "hardis:instanceupgrade:org:diagnose",
5971
+ "instanceupgrade:hardis:org:diagnose",
5972
+ "instanceupgrade:org:hardis:diagnose",
5973
+ "instanceupgrade:org:diagnose:hardis",
5974
+ "hardis:instanceupgrade:diagnose:org",
5975
+ "instanceupgrade:hardis:diagnose:org",
5976
+ "instanceupgrade:diagnose:hardis:org",
5977
+ "instanceupgrade:diagnose:org:hardis"
5972
5978
  ]
5973
5979
  },
5974
- "hardis:org:diagnose:releaseupdates": {
5980
+ "hardis:org:diagnose:legacyapi": {
5975
5981
  "aliases": [],
5976
5982
  "args": {},
5977
- "description": "Export Release Updates into a CSV file with selected criteria, and highlight Release Updates that should be checked.\n\nBefore publishing **Breaking Changes** ❌, Salesforce announce them in the setup menu [**Release Updates**](https://help.salesforce.com/s/articleView?id=sf.release_updates.htm&type=5)\n\n⚠️ Some of them are very important, because if you don't make the related upgrades in time (ex: before Winter 25) , your production org can crash !\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-release-updates/) and can output Grafana, Slack and MsTeams Notifications.\n",
5983
+ "description": "Checks if an org uses retired or someday retired API version\n\n\nSee article below\n\n[![Handle Salesforce API versions Deprecation like a pro](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-deprecated-api.jpg)](https://nicolas.vuillamy.fr/handle-salesforce-api-versions-deprecation-like-a-pro-335065f52238)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-deprecated-api-calls/) and can output Grafana, Slack and MsTeams Notifications.\n",
5978
5984
  "examples": [
5979
- "$ sf hardis:org:diagnose:releaseupdates"
5985
+ "$ sf hardis:org:diagnose:legacyapi",
5986
+ "$ sf hardis:org:diagnose:legacyapi -u hardis@myclient.com",
5987
+ "$ sf hardis:org:diagnose:legacyapi --outputfile 'c:/path/to/folder/legacyapi.csv'",
5988
+ "$ sf hardis:org:diagnose:legacyapi -u hardis@myclient.com --outputfile ./tmp/legacyapi.csv"
5980
5989
  ],
5981
5990
  "flags": {
5982
5991
  "json": {
@@ -5994,6 +6003,24 @@
5994
6003
  "multiple": false,
5995
6004
  "type": "option"
5996
6005
  },
6006
+ "eventtype": {
6007
+ "char": "e",
6008
+ "description": "Type of EventLogFile event to analyze",
6009
+ "name": "eventtype",
6010
+ "default": "ApiTotalUsage",
6011
+ "hasDynamicHelp": false,
6012
+ "multiple": false,
6013
+ "type": "option"
6014
+ },
6015
+ "limit": {
6016
+ "char": "l",
6017
+ "description": "Number of latest EventLogFile events to analyze",
6018
+ "name": "limit",
6019
+ "default": 999,
6020
+ "hasDynamicHelp": false,
6021
+ "multiple": false,
6022
+ "type": "option"
6023
+ },
5997
6024
  "outputfile": {
5998
6025
  "char": "f",
5999
6026
  "description": "Force the path and name of output report file. Must end with .csv",
@@ -6040,13 +6067,13 @@
6040
6067
  },
6041
6068
  "hasDynamicHelp": true,
6042
6069
  "hiddenAliases": [],
6043
- "id": "hardis:org:diagnose:releaseupdates",
6070
+ "id": "hardis:org:diagnose:legacyapi",
6044
6071
  "pluginAlias": "sfdx-hardis",
6045
6072
  "pluginName": "sfdx-hardis",
6046
6073
  "pluginType": "core",
6047
6074
  "strict": true,
6048
6075
  "enableJsonFlag": true,
6049
- "title": "Check Release Updates of an org",
6076
+ "title": "Check for legacy API use",
6050
6077
  "requiresProject": false,
6051
6078
  "isESM": true,
6052
6079
  "relativePath": [
@@ -6055,49 +6082,48 @@
6055
6082
  "hardis",
6056
6083
  "org",
6057
6084
  "diagnose",
6058
- "releaseupdates.js"
6085
+ "legacyapi.js"
6059
6086
  ],
6060
6087
  "aliasPermutations": [],
6061
6088
  "permutations": [
6062
- "hardis:org:diagnose:releaseupdates",
6063
- "org:hardis:diagnose:releaseupdates",
6064
- "org:diagnose:hardis:releaseupdates",
6065
- "org:diagnose:releaseupdates:hardis",
6066
- "hardis:diagnose:org:releaseupdates",
6067
- "diagnose:hardis:org:releaseupdates",
6068
- "diagnose:org:hardis:releaseupdates",
6069
- "diagnose:org:releaseupdates:hardis",
6070
- "hardis:diagnose:releaseupdates:org",
6071
- "diagnose:hardis:releaseupdates:org",
6072
- "diagnose:releaseupdates:hardis:org",
6073
- "diagnose:releaseupdates:org:hardis",
6074
- "hardis:org:releaseupdates:diagnose",
6075
- "org:hardis:releaseupdates:diagnose",
6076
- "org:releaseupdates:hardis:diagnose",
6077
- "org:releaseupdates:diagnose:hardis",
6078
- "hardis:releaseupdates:org:diagnose",
6079
- "releaseupdates:hardis:org:diagnose",
6080
- "releaseupdates:org:hardis:diagnose",
6081
- "releaseupdates:org:diagnose:hardis",
6082
- "hardis:releaseupdates:diagnose:org",
6083
- "releaseupdates:hardis:diagnose:org",
6084
- "releaseupdates:diagnose:hardis:org",
6085
- "releaseupdates:diagnose:org:hardis"
6086
- ]
6087
- },
6088
- "hardis:org:diagnose:unused-apex-classes": {
6089
- "aliases": [],
6090
- "args": {},
6091
- "description": "List all async Apex classes (Batch,Queueable,Schedulable) that has not been called for more than 365 days.\n \nThe result class list probably can be removed from the project, and that will improve your test classes performances :)\n\nThe number of unused day is overridable using --days option. \n\nThe command uses queries on AsyncApexJob and CronTrigger technical tables to build the result.\n\nApex Classes CreatedBy and CreatedOn fields are calculated from MIN(date from git, date from org)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-unused-apex-classes/) and can output Grafana, Slack and MsTeams Notifications.\n\n![](https://sfdx-hardis.cloudity.com/assets/images/screenshot-monitoring-unused-apex-grafana.jpg)\n",
6092
- "examples": [
6093
- "$ sf hardis:org:diagnose:unused-apex-classes",
6094
- "$ sf hardis:org:diagnose:unused-apex-classes --days 700"
6095
- ],
6096
- "flags": {
6097
- "json": {
6098
- "description": "Format output as json.",
6099
- "helpGroup": "GLOBAL",
6100
- "name": "json",
6089
+ "hardis:org:diagnose:legacyapi",
6090
+ "org:hardis:diagnose:legacyapi",
6091
+ "org:diagnose:hardis:legacyapi",
6092
+ "org:diagnose:legacyapi:hardis",
6093
+ "hardis:diagnose:org:legacyapi",
6094
+ "diagnose:hardis:org:legacyapi",
6095
+ "diagnose:org:hardis:legacyapi",
6096
+ "diagnose:org:legacyapi:hardis",
6097
+ "hardis:diagnose:legacyapi:org",
6098
+ "diagnose:hardis:legacyapi:org",
6099
+ "diagnose:legacyapi:hardis:org",
6100
+ "diagnose:legacyapi:org:hardis",
6101
+ "hardis:org:legacyapi:diagnose",
6102
+ "org:hardis:legacyapi:diagnose",
6103
+ "org:legacyapi:hardis:diagnose",
6104
+ "org:legacyapi:diagnose:hardis",
6105
+ "hardis:legacyapi:org:diagnose",
6106
+ "legacyapi:hardis:org:diagnose",
6107
+ "legacyapi:org:hardis:diagnose",
6108
+ "legacyapi:org:diagnose:hardis",
6109
+ "hardis:legacyapi:diagnose:org",
6110
+ "legacyapi:hardis:diagnose:org",
6111
+ "legacyapi:diagnose:hardis:org",
6112
+ "legacyapi:diagnose:org:hardis"
6113
+ ]
6114
+ },
6115
+ "hardis:org:diagnose:licenses": {
6116
+ "aliases": [],
6117
+ "args": {},
6118
+ "description": "Mostly used for monitoring (Grafana) but you can also use it manually :)",
6119
+ "examples": [
6120
+ "$ sf hardis:org:diagnose:licenses"
6121
+ ],
6122
+ "flags": {
6123
+ "json": {
6124
+ "description": "Format output as json.",
6125
+ "helpGroup": "GLOBAL",
6126
+ "name": "json",
6101
6127
  "allowNo": false,
6102
6128
  "type": "boolean"
6103
6129
  },
@@ -6117,13 +6143,12 @@
6117
6143
  "multiple": false,
6118
6144
  "type": "option"
6119
6145
  },
6120
- "days": {
6121
- "char": "t",
6122
- "description": "Extracts the users that have been inactive for the amount of days specified. In CI, default is 180 days",
6123
- "name": "days",
6124
- "hasDynamicHelp": false,
6125
- "multiple": false,
6126
- "type": "option"
6146
+ "usedonly": {
6147
+ "char": "u",
6148
+ "description": "Filter to have only used licenses",
6149
+ "name": "usedonly",
6150
+ "allowNo": false,
6151
+ "type": "boolean"
6127
6152
  },
6128
6153
  "debug": {
6129
6154
  "char": "d",
@@ -6163,13 +6188,13 @@
6163
6188
  },
6164
6189
  "hasDynamicHelp": true,
6165
6190
  "hiddenAliases": [],
6166
- "id": "hardis:org:diagnose:unused-apex-classes",
6191
+ "id": "hardis:org:diagnose:licenses",
6167
6192
  "pluginAlias": "sfdx-hardis",
6168
6193
  "pluginName": "sfdx-hardis",
6169
6194
  "pluginType": "core",
6170
6195
  "strict": true,
6171
6196
  "enableJsonFlag": true,
6172
- "title": "Detect unused Apex classes in an org",
6197
+ "title": "List licenses subscribed and used in a Salesforce org",
6173
6198
  "requiresProject": false,
6174
6199
  "isESM": true,
6175
6200
  "relativePath": [
@@ -6178,42 +6203,42 @@
6178
6203
  "hardis",
6179
6204
  "org",
6180
6205
  "diagnose",
6181
- "unused-apex-classes.js"
6206
+ "licenses.js"
6182
6207
  ],
6183
6208
  "aliasPermutations": [],
6184
6209
  "permutations": [
6185
- "hardis:org:diagnose:unused-apex-classes",
6186
- "org:hardis:diagnose:unused-apex-classes",
6187
- "org:diagnose:hardis:unused-apex-classes",
6188
- "org:diagnose:unused-apex-classes:hardis",
6189
- "hardis:diagnose:org:unused-apex-classes",
6190
- "diagnose:hardis:org:unused-apex-classes",
6191
- "diagnose:org:hardis:unused-apex-classes",
6192
- "diagnose:org:unused-apex-classes:hardis",
6193
- "hardis:diagnose:unused-apex-classes:org",
6194
- "diagnose:hardis:unused-apex-classes:org",
6195
- "diagnose:unused-apex-classes:hardis:org",
6196
- "diagnose:unused-apex-classes:org:hardis",
6197
- "hardis:org:unused-apex-classes:diagnose",
6198
- "org:hardis:unused-apex-classes:diagnose",
6199
- "org:unused-apex-classes:hardis:diagnose",
6200
- "org:unused-apex-classes:diagnose:hardis",
6201
- "hardis:unused-apex-classes:org:diagnose",
6202
- "unused-apex-classes:hardis:org:diagnose",
6203
- "unused-apex-classes:org:hardis:diagnose",
6204
- "unused-apex-classes:org:diagnose:hardis",
6205
- "hardis:unused-apex-classes:diagnose:org",
6206
- "unused-apex-classes:hardis:diagnose:org",
6207
- "unused-apex-classes:diagnose:hardis:org",
6208
- "unused-apex-classes:diagnose:org:hardis"
6210
+ "hardis:org:diagnose:licenses",
6211
+ "org:hardis:diagnose:licenses",
6212
+ "org:diagnose:hardis:licenses",
6213
+ "org:diagnose:licenses:hardis",
6214
+ "hardis:diagnose:org:licenses",
6215
+ "diagnose:hardis:org:licenses",
6216
+ "diagnose:org:hardis:licenses",
6217
+ "diagnose:org:licenses:hardis",
6218
+ "hardis:diagnose:licenses:org",
6219
+ "diagnose:hardis:licenses:org",
6220
+ "diagnose:licenses:hardis:org",
6221
+ "diagnose:licenses:org:hardis",
6222
+ "hardis:org:licenses:diagnose",
6223
+ "org:hardis:licenses:diagnose",
6224
+ "org:licenses:hardis:diagnose",
6225
+ "org:licenses:diagnose:hardis",
6226
+ "hardis:licenses:org:diagnose",
6227
+ "licenses:hardis:org:diagnose",
6228
+ "licenses:org:hardis:diagnose",
6229
+ "licenses:org:diagnose:hardis",
6230
+ "hardis:licenses:diagnose:org",
6231
+ "licenses:hardis:diagnose:org",
6232
+ "licenses:diagnose:hardis:org",
6233
+ "licenses:diagnose:org:hardis"
6209
6234
  ]
6210
6235
  },
6211
- "hardis:org:diagnose:unused-connected-apps": {
6236
+ "hardis:org:diagnose:releaseupdates": {
6212
6237
  "aliases": [],
6213
6238
  "args": {},
6214
- "description": "Request objects ConnectedApp, LoginHistory and OAuthToken to find which connected apps might not be used anymore, and could be deleted for security / technical debt reasons.\n\nCheck with Connected Apps metadatas if the app is still active (inactive = \"Admin Users are pre-authorized + no Profile or Permission set assigned\")\n\nThe following default Salesforce Connected Apps are ignored:\n\n- Ant Migration Tool\n- Chatter Desktop\n- Chatter Mobile for BlackBerry\n- Force.com IDE\n- OIQ_Integration\n- Salesforce CLI\n- Salesforce Files\n- Salesforce Mobile Dashboards\n- Salesforce Touch\n- Salesforce for Outlook\n- SalesforceA\n- SalesforceA for Android\n- SalesforceA for iOS\n- SalesforceDX Namespace Registry\n- SalesforceIQ\n\nYou can add more ignored apps by defining a comma-separated list of names in variable ALLOWED_INACTIVE_CONNECTED_APPS\n\n_Example: ALLOWED_INACTIVE_CONNECTED_APPS=My App 1,My App 2, My App 3_\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-release-updates/) and can output Grafana, Slack and MsTeams Notifications.\n",
6239
+ "description": "Export Release Updates into a CSV file with selected criteria, and highlight Release Updates that should be checked.\n\nBefore publishing **Breaking Changes** ❌, Salesforce announce them in the setup menu [**Release Updates**](https://help.salesforce.com/s/articleView?id=sf.release_updates.htm&type=5)\n\n⚠️ Some of them are very important, because if you don't make the related upgrades in time (ex: before Winter 25) , your production org can crash !\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-release-updates/) and can output Grafana, Slack and MsTeams Notifications.\n",
6215
6240
  "examples": [
6216
- "$ sf hardis:org:diagnose:unused-connected-apps"
6241
+ "$ sf hardis:org:diagnose:releaseupdates"
6217
6242
  ],
6218
6243
  "flags": {
6219
6244
  "json": {
@@ -6277,30 +6302,13 @@
6277
6302
  },
6278
6303
  "hasDynamicHelp": true,
6279
6304
  "hiddenAliases": [],
6280
- "id": "hardis:org:diagnose:unused-connected-apps",
6305
+ "id": "hardis:org:diagnose:releaseupdates",
6281
6306
  "pluginAlias": "sfdx-hardis",
6282
6307
  "pluginName": "sfdx-hardis",
6283
6308
  "pluginType": "core",
6284
6309
  "strict": true,
6285
6310
  "enableJsonFlag": true,
6286
- "title": "Unused Connected Apps in an org",
6287
- "allowedInactiveConnectedApps": [
6288
- "Ant Migration Tool",
6289
- "Chatter Desktop",
6290
- "Chatter Mobile for BlackBerry",
6291
- "Force.com IDE",
6292
- "OIQ_Integration",
6293
- "Salesforce CLI",
6294
- "Salesforce Files",
6295
- "Salesforce Mobile Dashboards",
6296
- "Salesforce Touch",
6297
- "Salesforce for Outlook",
6298
- "SalesforceA",
6299
- "SalesforceA for Android",
6300
- "SalesforceA for iOS",
6301
- "SalesforceDX Namespace Registry",
6302
- "SalesforceIQ"
6303
- ],
6311
+ "title": "Check Release Updates of an org",
6304
6312
  "requiresProject": false,
6305
6313
  "isESM": true,
6306
6314
  "relativePath": [
@@ -6309,43 +6317,43 @@
6309
6317
  "hardis",
6310
6318
  "org",
6311
6319
  "diagnose",
6312
- "unused-connected-apps.js"
6320
+ "releaseupdates.js"
6313
6321
  ],
6314
6322
  "aliasPermutations": [],
6315
6323
  "permutations": [
6316
- "hardis:org:diagnose:unused-connected-apps",
6317
- "org:hardis:diagnose:unused-connected-apps",
6318
- "org:diagnose:hardis:unused-connected-apps",
6319
- "org:diagnose:unused-connected-apps:hardis",
6320
- "hardis:diagnose:org:unused-connected-apps",
6321
- "diagnose:hardis:org:unused-connected-apps",
6322
- "diagnose:org:hardis:unused-connected-apps",
6323
- "diagnose:org:unused-connected-apps:hardis",
6324
- "hardis:diagnose:unused-connected-apps:org",
6325
- "diagnose:hardis:unused-connected-apps:org",
6326
- "diagnose:unused-connected-apps:hardis:org",
6327
- "diagnose:unused-connected-apps:org:hardis",
6328
- "hardis:org:unused-connected-apps:diagnose",
6329
- "org:hardis:unused-connected-apps:diagnose",
6330
- "org:unused-connected-apps:hardis:diagnose",
6331
- "org:unused-connected-apps:diagnose:hardis",
6332
- "hardis:unused-connected-apps:org:diagnose",
6333
- "unused-connected-apps:hardis:org:diagnose",
6334
- "unused-connected-apps:org:hardis:diagnose",
6335
- "unused-connected-apps:org:diagnose:hardis",
6336
- "hardis:unused-connected-apps:diagnose:org",
6337
- "unused-connected-apps:hardis:diagnose:org",
6338
- "unused-connected-apps:diagnose:hardis:org",
6339
- "unused-connected-apps:diagnose:org:hardis"
6324
+ "hardis:org:diagnose:releaseupdates",
6325
+ "org:hardis:diagnose:releaseupdates",
6326
+ "org:diagnose:hardis:releaseupdates",
6327
+ "org:diagnose:releaseupdates:hardis",
6328
+ "hardis:diagnose:org:releaseupdates",
6329
+ "diagnose:hardis:org:releaseupdates",
6330
+ "diagnose:org:hardis:releaseupdates",
6331
+ "diagnose:org:releaseupdates:hardis",
6332
+ "hardis:diagnose:releaseupdates:org",
6333
+ "diagnose:hardis:releaseupdates:org",
6334
+ "diagnose:releaseupdates:hardis:org",
6335
+ "diagnose:releaseupdates:org:hardis",
6336
+ "hardis:org:releaseupdates:diagnose",
6337
+ "org:hardis:releaseupdates:diagnose",
6338
+ "org:releaseupdates:hardis:diagnose",
6339
+ "org:releaseupdates:diagnose:hardis",
6340
+ "hardis:releaseupdates:org:diagnose",
6341
+ "releaseupdates:hardis:org:diagnose",
6342
+ "releaseupdates:org:hardis:diagnose",
6343
+ "releaseupdates:org:diagnose:hardis",
6344
+ "hardis:releaseupdates:diagnose:org",
6345
+ "releaseupdates:hardis:diagnose:org",
6346
+ "releaseupdates:diagnose:hardis:org",
6347
+ "releaseupdates:diagnose:org:hardis"
6340
6348
  ]
6341
6349
  },
6342
- "hardis:org:diagnose:unusedlicenses": {
6350
+ "hardis:org:diagnose:unused-apex-classes": {
6343
6351
  "aliases": [],
6344
6352
  "args": {},
6345
- "description": "When you assign a Permission Set to a user, and that this Permission Set is related to a Permission Set License, a Permission Set License Assignment is automatically created for the user.\n\nBut when you unassign this Permission Set from the user, **the Permission Set License Assignment is not deleted**.\n\nThis leads that you can be **charged for Permission Set Licenses that are not used** !\n\nThis command detects such useless Permission Set Licenses Assignments and suggests to delete them.\n\nMany thanks to [Vincent Finet](https://www.linkedin.com/in/vincentfinet/) for the inspiration during his great speaker session at [French Touch Dreamin '23](https://frenchtouchdreamin.com/), and his kind agreement for reusing such inspiration in this command :)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-unused-licenses/) and can output Grafana, Slack and MsTeams Notifications.\n",
6353
+ "description": "List all async Apex classes (Batch,Queueable,Schedulable) that has not been called for more than 365 days.\n \nThe result class list probably can be removed from the project, and that will improve your test classes performances :)\n\nThe number of unused day is overridable using --days option. \n\nThe command uses queries on AsyncApexJob and CronTrigger technical tables to build the result.\n\nApex Classes CreatedBy and CreatedOn fields are calculated from MIN(date from git, date from org)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-unused-apex-classes/) and can output Grafana, Slack and MsTeams Notifications.\n\n![](https://sfdx-hardis.cloudity.com/assets/images/screenshot-monitoring-unused-apex-grafana.jpg)\n",
6346
6354
  "examples": [
6347
- "$ sf hardis:org:diagnose:unusedlicenses",
6348
- "$ sf hardis:org:diagnose:unusedlicenses --fix"
6355
+ "$ sf hardis:org:diagnose:unused-apex-classes",
6356
+ "$ sf hardis:org:diagnose:unused-apex-classes --days 700"
6349
6357
  ],
6350
6358
  "flags": {
6351
6359
  "json": {
@@ -6371,6 +6379,14 @@
6371
6379
  "multiple": false,
6372
6380
  "type": "option"
6373
6381
  },
6382
+ "days": {
6383
+ "char": "t",
6384
+ "description": "Extracts the users that have been inactive for the amount of days specified. In CI, default is 180 days",
6385
+ "name": "days",
6386
+ "hasDynamicHelp": false,
6387
+ "multiple": false,
6388
+ "type": "option"
6389
+ },
6374
6390
  "debug": {
6375
6391
  "char": "d",
6376
6392
  "description": "Activate debug mode (more logs)",
@@ -6409,32 +6425,14 @@
6409
6425
  },
6410
6426
  "hasDynamicHelp": true,
6411
6427
  "hiddenAliases": [],
6412
- "id": "hardis:org:diagnose:unusedlicenses",
6428
+ "id": "hardis:org:diagnose:unused-apex-classes",
6413
6429
  "pluginAlias": "sfdx-hardis",
6414
6430
  "pluginName": "sfdx-hardis",
6415
6431
  "pluginType": "core",
6416
6432
  "strict": true,
6417
6433
  "enableJsonFlag": true,
6418
- "title": "Detect unused Permission Set Licenses (beta)",
6434
+ "title": "Detect unused Apex classes in an org",
6419
6435
  "requiresProject": false,
6420
- "additionalPermissionSetsToAlwaysGet": [
6421
- "Sales_User"
6422
- ],
6423
- "permSetsPermSetLicenses": [
6424
- {
6425
- "permSet": "Sales_User",
6426
- "permSetLicense": "SalesUserPsl"
6427
- }
6428
- ],
6429
- "profilesPermissionSetLicenses": [
6430
- {
6431
- "profile": "Salesforce API Only",
6432
- "permSetLicense": "SalesforceAPIIntegrationPsl"
6433
- }
6434
- ],
6435
- "alwaysExcludeForActiveUsersPermissionSetLicenses": [
6436
- "IdentityConnect"
6437
- ],
6438
6436
  "isESM": true,
6439
6437
  "relativePath": [
6440
6438
  "lib",
@@ -6442,46 +6440,42 @@
6442
6440
  "hardis",
6443
6441
  "org",
6444
6442
  "diagnose",
6445
- "unusedlicenses.js"
6443
+ "unused-apex-classes.js"
6446
6444
  ],
6447
6445
  "aliasPermutations": [],
6448
6446
  "permutations": [
6449
- "hardis:org:diagnose:unusedlicenses",
6450
- "org:hardis:diagnose:unusedlicenses",
6451
- "org:diagnose:hardis:unusedlicenses",
6452
- "org:diagnose:unusedlicenses:hardis",
6453
- "hardis:diagnose:org:unusedlicenses",
6454
- "diagnose:hardis:org:unusedlicenses",
6455
- "diagnose:org:hardis:unusedlicenses",
6456
- "diagnose:org:unusedlicenses:hardis",
6457
- "hardis:diagnose:unusedlicenses:org",
6458
- "diagnose:hardis:unusedlicenses:org",
6459
- "diagnose:unusedlicenses:hardis:org",
6460
- "diagnose:unusedlicenses:org:hardis",
6461
- "hardis:org:unusedlicenses:diagnose",
6462
- "org:hardis:unusedlicenses:diagnose",
6463
- "org:unusedlicenses:hardis:diagnose",
6464
- "org:unusedlicenses:diagnose:hardis",
6465
- "hardis:unusedlicenses:org:diagnose",
6466
- "unusedlicenses:hardis:org:diagnose",
6467
- "unusedlicenses:org:hardis:diagnose",
6468
- "unusedlicenses:org:diagnose:hardis",
6469
- "hardis:unusedlicenses:diagnose:org",
6470
- "unusedlicenses:hardis:diagnose:org",
6471
- "unusedlicenses:diagnose:hardis:org",
6472
- "unusedlicenses:diagnose:org:hardis"
6473
- ]
6474
- },
6475
- "hardis:org:diagnose:unusedusers": {
6476
- "aliases": [],
6477
- "args": {},
6478
- "description": "Efficient user management is vital in Salesforce to ensure resources are optimized and costs are controlled. However, inactive or unused user accounts can often go unnoticed, leading to wasted licenses and potential security risks. This tool addresses this challenge by enabling administrators to identify users who haven't logged in within a specified period.\n\nBy analyzing user login activity and last login timestamps, this feature highlights inactive user accounts, allowing administrators to take appropriate action. Whether it's deactivating dormant accounts, freeing up licenses, or ensuring compliance with security policies, this functionality empowers administrators to maintain a lean and secure Salesforce environment.\n\nlicensetypes values are the following:\n\n- all-crm: SFDC,AUL,AUL1,AULL_IGHT\n\n- all-paying: SFDC,AUL,AUL1,AULL_IGHT,PID_Customer_Community,PID_Customer_Community_Login,PID_Partner_Community,PID_Partner_Community_Login\n\nNote: You can see the full list of available license identifiers in [Salesforce Documentation](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_userlicense.htm)\n\nUse --returnactiveusers to revert the command and retrieve active users that has logged in during the period.\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-inactive-users/) and can output Grafana, Slack and MsTeams Notifications.\n",
6479
- "examples": [
6480
- "$ sf hardis:org:diagnose:unusedusers",
6481
- "$ sf hardis:org:diagnose:unusedusers --days 365",
6482
- "$ sf hardis:org:diagnose:unusedusers --days 60 --licensetypes all-crm",
6483
- "$ sf hardis:org:diagnose:unusedusers --days 60 --licenseidentifiers SFDC,AUL,AUL1",
6484
- "$ sf hardis:org:diagnose:unusedusers --days 60 --licensetypes all-crm --returnactiveusers"
6447
+ "hardis:org:diagnose:unused-apex-classes",
6448
+ "org:hardis:diagnose:unused-apex-classes",
6449
+ "org:diagnose:hardis:unused-apex-classes",
6450
+ "org:diagnose:unused-apex-classes:hardis",
6451
+ "hardis:diagnose:org:unused-apex-classes",
6452
+ "diagnose:hardis:org:unused-apex-classes",
6453
+ "diagnose:org:hardis:unused-apex-classes",
6454
+ "diagnose:org:unused-apex-classes:hardis",
6455
+ "hardis:diagnose:unused-apex-classes:org",
6456
+ "diagnose:hardis:unused-apex-classes:org",
6457
+ "diagnose:unused-apex-classes:hardis:org",
6458
+ "diagnose:unused-apex-classes:org:hardis",
6459
+ "hardis:org:unused-apex-classes:diagnose",
6460
+ "org:hardis:unused-apex-classes:diagnose",
6461
+ "org:unused-apex-classes:hardis:diagnose",
6462
+ "org:unused-apex-classes:diagnose:hardis",
6463
+ "hardis:unused-apex-classes:org:diagnose",
6464
+ "unused-apex-classes:hardis:org:diagnose",
6465
+ "unused-apex-classes:org:hardis:diagnose",
6466
+ "unused-apex-classes:org:diagnose:hardis",
6467
+ "hardis:unused-apex-classes:diagnose:org",
6468
+ "unused-apex-classes:hardis:diagnose:org",
6469
+ "unused-apex-classes:diagnose:hardis:org",
6470
+ "unused-apex-classes:diagnose:org:hardis"
6471
+ ]
6472
+ },
6473
+ "hardis:org:diagnose:unused-connected-apps": {
6474
+ "aliases": [],
6475
+ "args": {},
6476
+ "description": "Request objects ConnectedApp, LoginHistory and OAuthToken to find which connected apps might not be used anymore, and could be deleted for security / technical debt reasons.\n\nCheck with Connected Apps metadatas if the app is still active (inactive = \"Admin Users are pre-authorized + no Profile or Permission set assigned\")\n\nThe following default Salesforce Connected Apps are ignored:\n\n- Ant Migration Tool\n- Chatter Desktop\n- Chatter Mobile for BlackBerry\n- Force.com IDE\n- OIQ_Integration\n- Salesforce CLI\n- Salesforce Files\n- Salesforce Mobile Dashboards\n- Salesforce Touch\n- Salesforce for Outlook\n- SalesforceA\n- SalesforceA for Android\n- SalesforceA for iOS\n- SalesforceDX Namespace Registry\n- SalesforceIQ\n\nYou can add more ignored apps by defining a comma-separated list of names in variable ALLOWED_INACTIVE_CONNECTED_APPS\n\n_Example: ALLOWED_INACTIVE_CONNECTED_APPS=My App 1,My App 2, My App 3_\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-release-updates/) and can output Grafana, Slack and MsTeams Notifications.\n",
6477
+ "examples": [
6478
+ "$ sf hardis:org:diagnose:unused-connected-apps"
6485
6479
  ],
6486
6480
  "flags": {
6487
6481
  "json": {
@@ -6507,41 +6501,6 @@
6507
6501
  "multiple": false,
6508
6502
  "type": "option"
6509
6503
  },
6510
- "days": {
6511
- "char": "t",
6512
- "description": "Extracts the users that have been inactive for the amount of days specified. In CI, default is 180 days",
6513
- "name": "days",
6514
- "hasDynamicHelp": false,
6515
- "multiple": false,
6516
- "type": "option"
6517
- },
6518
- "licensetypes": {
6519
- "char": "l",
6520
- "description": "Type of licenses to check. If set, do not use licenseidentifiers option. In CI, default is all-crm",
6521
- "name": "licensetypes",
6522
- "hasDynamicHelp": false,
6523
- "multiple": false,
6524
- "options": [
6525
- "all",
6526
- "all-crm",
6527
- "all-paying"
6528
- ],
6529
- "type": "option"
6530
- },
6531
- "licenseidentifiers": {
6532
- "char": "i",
6533
- "description": "Comma-separated list of license identifiers, in case licensetypes is not used.. Identifiers available at https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_userlicense.htm",
6534
- "name": "licenseidentifiers",
6535
- "hasDynamicHelp": false,
6536
- "multiple": false,
6537
- "type": "option"
6538
- },
6539
- "returnactiveusers": {
6540
- "description": "Inverts the command by returning the active users",
6541
- "name": "returnactiveusers",
6542
- "allowNo": false,
6543
- "type": "boolean"
6544
- },
6545
6504
  "debug": {
6546
6505
  "char": "d",
6547
6506
  "description": "Activate debug mode (more logs)",
@@ -6580,13 +6539,30 @@
6580
6539
  },
6581
6540
  "hasDynamicHelp": true,
6582
6541
  "hiddenAliases": [],
6583
- "id": "hardis:org:diagnose:unusedusers",
6542
+ "id": "hardis:org:diagnose:unused-connected-apps",
6584
6543
  "pluginAlias": "sfdx-hardis",
6585
6544
  "pluginName": "sfdx-hardis",
6586
6545
  "pluginType": "core",
6587
6546
  "strict": true,
6588
6547
  "enableJsonFlag": true,
6589
- "title": "Detect unused Users in Salesforce",
6548
+ "title": "Unused Connected Apps in an org",
6549
+ "allowedInactiveConnectedApps": [
6550
+ "Ant Migration Tool",
6551
+ "Chatter Desktop",
6552
+ "Chatter Mobile for BlackBerry",
6553
+ "Force.com IDE",
6554
+ "OIQ_Integration",
6555
+ "Salesforce CLI",
6556
+ "Salesforce Files",
6557
+ "Salesforce Mobile Dashboards",
6558
+ "Salesforce Touch",
6559
+ "Salesforce for Outlook",
6560
+ "SalesforceA",
6561
+ "SalesforceA for Android",
6562
+ "SalesforceA for iOS",
6563
+ "SalesforceDX Namespace Registry",
6564
+ "SalesforceIQ"
6565
+ ],
6590
6566
  "requiresProject": false,
6591
6567
  "isESM": true,
6592
6568
  "relativePath": [
@@ -6595,42 +6571,43 @@
6595
6571
  "hardis",
6596
6572
  "org",
6597
6573
  "diagnose",
6598
- "unusedusers.js"
6574
+ "unused-connected-apps.js"
6599
6575
  ],
6600
6576
  "aliasPermutations": [],
6601
6577
  "permutations": [
6602
- "hardis:org:diagnose:unusedusers",
6603
- "org:hardis:diagnose:unusedusers",
6604
- "org:diagnose:hardis:unusedusers",
6605
- "org:diagnose:unusedusers:hardis",
6606
- "hardis:diagnose:org:unusedusers",
6607
- "diagnose:hardis:org:unusedusers",
6608
- "diagnose:org:hardis:unusedusers",
6609
- "diagnose:org:unusedusers:hardis",
6610
- "hardis:diagnose:unusedusers:org",
6611
- "diagnose:hardis:unusedusers:org",
6612
- "diagnose:unusedusers:hardis:org",
6613
- "diagnose:unusedusers:org:hardis",
6614
- "hardis:org:unusedusers:diagnose",
6615
- "org:hardis:unusedusers:diagnose",
6616
- "org:unusedusers:hardis:diagnose",
6617
- "org:unusedusers:diagnose:hardis",
6618
- "hardis:unusedusers:org:diagnose",
6619
- "unusedusers:hardis:org:diagnose",
6620
- "unusedusers:org:hardis:diagnose",
6621
- "unusedusers:org:diagnose:hardis",
6622
- "hardis:unusedusers:diagnose:org",
6623
- "unusedusers:hardis:diagnose:org",
6624
- "unusedusers:diagnose:hardis:org",
6625
- "unusedusers:diagnose:org:hardis"
6578
+ "hardis:org:diagnose:unused-connected-apps",
6579
+ "org:hardis:diagnose:unused-connected-apps",
6580
+ "org:diagnose:hardis:unused-connected-apps",
6581
+ "org:diagnose:unused-connected-apps:hardis",
6582
+ "hardis:diagnose:org:unused-connected-apps",
6583
+ "diagnose:hardis:org:unused-connected-apps",
6584
+ "diagnose:org:hardis:unused-connected-apps",
6585
+ "diagnose:org:unused-connected-apps:hardis",
6586
+ "hardis:diagnose:unused-connected-apps:org",
6587
+ "diagnose:hardis:unused-connected-apps:org",
6588
+ "diagnose:unused-connected-apps:hardis:org",
6589
+ "diagnose:unused-connected-apps:org:hardis",
6590
+ "hardis:org:unused-connected-apps:diagnose",
6591
+ "org:hardis:unused-connected-apps:diagnose",
6592
+ "org:unused-connected-apps:hardis:diagnose",
6593
+ "org:unused-connected-apps:diagnose:hardis",
6594
+ "hardis:unused-connected-apps:org:diagnose",
6595
+ "unused-connected-apps:hardis:org:diagnose",
6596
+ "unused-connected-apps:org:hardis:diagnose",
6597
+ "unused-connected-apps:org:diagnose:hardis",
6598
+ "hardis:unused-connected-apps:diagnose:org",
6599
+ "unused-connected-apps:hardis:diagnose:org",
6600
+ "unused-connected-apps:diagnose:hardis:org",
6601
+ "unused-connected-apps:diagnose:org:hardis"
6626
6602
  ]
6627
6603
  },
6628
- "hardis:org:files:export": {
6604
+ "hardis:org:diagnose:unusedlicenses": {
6629
6605
  "aliases": [],
6630
6606
  "args": {},
6631
- "description": "Export file attachments from a Salesforce org\n\nHandles:\n\n- ContentVersion\n- Attachment\n\nSee article below:\n\n[![How to mass download notes and attachments files from a Salesforce org](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-mass-download.jpg)](https://nicolas.vuillamy.fr/how-to-mass-download-notes-and-attachments-files-from-a-salesforce-org-83a028824afd)\n",
6607
+ "description": "When you assign a Permission Set to a user, and that this Permission Set is related to a Permission Set License, a Permission Set License Assignment is automatically created for the user.\n\nBut when you unassign this Permission Set from the user, **the Permission Set License Assignment is not deleted**.\n\nThis leads that you can be **charged for Permission Set Licenses that are not used** !\n\nThis command detects such useless Permission Set Licenses Assignments and suggests to delete them.\n\nMany thanks to [Vincent Finet](https://www.linkedin.com/in/vincentfinet/) for the inspiration during his great speaker session at [French Touch Dreamin '23](https://frenchtouchdreamin.com/), and his kind agreement for reusing such inspiration in this command :)\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-unused-licenses/) and can output Grafana, Slack and MsTeams Notifications.\n",
6632
6608
  "examples": [
6633
- "$ sf hardis:org:files:export"
6609
+ "$ sf hardis:org:diagnose:unusedlicenses",
6610
+ "$ sf hardis:org:diagnose:unusedlicenses --fix"
6634
6611
  ],
6635
6612
  "flags": {
6636
6613
  "json": {
@@ -6648,37 +6625,10 @@
6648
6625
  "multiple": false,
6649
6626
  "type": "option"
6650
6627
  },
6651
- "path": {
6652
- "char": "p",
6653
- "description": "Path to the file export project",
6654
- "name": "path",
6655
- "hasDynamicHelp": false,
6656
- "multiple": false,
6657
- "type": "option"
6658
- },
6659
- "chunksize": {
6660
- "char": "c",
6661
- "description": "Number of records to add in a chunk before it is processed",
6662
- "name": "chunksize",
6663
- "default": 1000,
6664
- "hasDynamicHelp": false,
6665
- "multiple": false,
6666
- "type": "option"
6667
- },
6668
- "polltimeout": {
6669
- "char": "t",
6670
- "description": "Timeout in MS for Bulk API calls",
6671
- "name": "polltimeout",
6672
- "default": 300000,
6673
- "hasDynamicHelp": false,
6674
- "multiple": false,
6675
- "type": "option"
6676
- },
6677
- "startchunknumber": {
6678
- "char": "s",
6679
- "description": "Chunk number to start from",
6680
- "name": "startchunknumber",
6681
- "default": 0,
6628
+ "outputfile": {
6629
+ "char": "f",
6630
+ "description": "Force the path and name of output report file. Must end with .csv",
6631
+ "name": "outputfile",
6682
6632
  "hasDynamicHelp": false,
6683
6633
  "multiple": false,
6684
6634
  "type": "option"
@@ -6721,57 +6671,79 @@
6721
6671
  },
6722
6672
  "hasDynamicHelp": true,
6723
6673
  "hiddenAliases": [],
6724
- "id": "hardis:org:files:export",
6674
+ "id": "hardis:org:diagnose:unusedlicenses",
6725
6675
  "pluginAlias": "sfdx-hardis",
6726
6676
  "pluginName": "sfdx-hardis",
6727
6677
  "pluginType": "core",
6728
6678
  "strict": true,
6729
6679
  "enableJsonFlag": true,
6730
- "title": "Export files",
6680
+ "title": "Detect unused Permission Set Licenses (beta)",
6731
6681
  "requiresProject": false,
6682
+ "additionalPermissionSetsToAlwaysGet": [
6683
+ "Sales_User"
6684
+ ],
6685
+ "permSetsPermSetLicenses": [
6686
+ {
6687
+ "permSet": "Sales_User",
6688
+ "permSetLicense": "SalesUserPsl"
6689
+ }
6690
+ ],
6691
+ "profilesPermissionSetLicenses": [
6692
+ {
6693
+ "profile": "Salesforce API Only",
6694
+ "permSetLicense": "SalesforceAPIIntegrationPsl"
6695
+ }
6696
+ ],
6697
+ "alwaysExcludeForActiveUsersPermissionSetLicenses": [
6698
+ "IdentityConnect"
6699
+ ],
6732
6700
  "isESM": true,
6733
6701
  "relativePath": [
6734
6702
  "lib",
6735
6703
  "commands",
6736
6704
  "hardis",
6737
6705
  "org",
6738
- "files",
6739
- "export.js"
6706
+ "diagnose",
6707
+ "unusedlicenses.js"
6740
6708
  ],
6741
6709
  "aliasPermutations": [],
6742
6710
  "permutations": [
6743
- "hardis:org:files:export",
6744
- "org:hardis:files:export",
6745
- "org:files:hardis:export",
6746
- "org:files:export:hardis",
6747
- "hardis:files:org:export",
6748
- "files:hardis:org:export",
6749
- "files:org:hardis:export",
6750
- "files:org:export:hardis",
6751
- "hardis:files:export:org",
6752
- "files:hardis:export:org",
6753
- "files:export:hardis:org",
6754
- "files:export:org:hardis",
6755
- "hardis:org:export:files",
6756
- "org:hardis:export:files",
6757
- "org:export:hardis:files",
6758
- "org:export:files:hardis",
6759
- "hardis:export:org:files",
6760
- "export:hardis:org:files",
6761
- "export:org:hardis:files",
6762
- "export:org:files:hardis",
6763
- "hardis:export:files:org",
6764
- "export:hardis:files:org",
6765
- "export:files:hardis:org",
6766
- "export:files:org:hardis"
6711
+ "hardis:org:diagnose:unusedlicenses",
6712
+ "org:hardis:diagnose:unusedlicenses",
6713
+ "org:diagnose:hardis:unusedlicenses",
6714
+ "org:diagnose:unusedlicenses:hardis",
6715
+ "hardis:diagnose:org:unusedlicenses",
6716
+ "diagnose:hardis:org:unusedlicenses",
6717
+ "diagnose:org:hardis:unusedlicenses",
6718
+ "diagnose:org:unusedlicenses:hardis",
6719
+ "hardis:diagnose:unusedlicenses:org",
6720
+ "diagnose:hardis:unusedlicenses:org",
6721
+ "diagnose:unusedlicenses:hardis:org",
6722
+ "diagnose:unusedlicenses:org:hardis",
6723
+ "hardis:org:unusedlicenses:diagnose",
6724
+ "org:hardis:unusedlicenses:diagnose",
6725
+ "org:unusedlicenses:hardis:diagnose",
6726
+ "org:unusedlicenses:diagnose:hardis",
6727
+ "hardis:unusedlicenses:org:diagnose",
6728
+ "unusedlicenses:hardis:org:diagnose",
6729
+ "unusedlicenses:org:hardis:diagnose",
6730
+ "unusedlicenses:org:diagnose:hardis",
6731
+ "hardis:unusedlicenses:diagnose:org",
6732
+ "unusedlicenses:hardis:diagnose:org",
6733
+ "unusedlicenses:diagnose:hardis:org",
6734
+ "unusedlicenses:diagnose:org:hardis"
6767
6735
  ]
6768
6736
  },
6769
- "hardis:org:files:import": {
6737
+ "hardis:org:diagnose:unusedusers": {
6770
6738
  "aliases": [],
6771
6739
  "args": {},
6772
- "description": "Import file attachments into a Salesforce org\n\nSee article below to see how to Export them.\n\n[![How to mass download notes and attachments files from a Salesforce org](https://github.com/hardisgroupcom/sfdx-hardis/raw/main/docs/assets/images/article-mass-download.jpg)](https://nicolas.vuillamy.fr/how-to-mass-download-notes-and-attachments-files-from-a-salesforce-org-83a028824afd)\n",
6740
+ "description": "Efficient user management is vital in Salesforce to ensure resources are optimized and costs are controlled. However, inactive or unused user accounts can often go unnoticed, leading to wasted licenses and potential security risks. This tool addresses this challenge by enabling administrators to identify users who haven't logged in within a specified period.\n\nBy analyzing user login activity and last login timestamps, this feature highlights inactive user accounts, allowing administrators to take appropriate action. Whether it's deactivating dormant accounts, freeing up licenses, or ensuring compliance with security policies, this functionality empowers administrators to maintain a lean and secure Salesforce environment.\n\nlicensetypes values are the following:\n\n- all-crm: SFDC,AUL,AUL1,AULL_IGHT\n\n- all-paying: SFDC,AUL,AUL1,AULL_IGHT,PID_Customer_Community,PID_Customer_Community_Login,PID_Partner_Community,PID_Partner_Community_Login\n\nNote: You can see the full list of available license identifiers in [Salesforce Documentation](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_userlicense.htm)\n\nUse --returnactiveusers to revert the command and retrieve active users that has logged in during the period.\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-inactive-users/) and can output Grafana, Slack and MsTeams Notifications.\n",
6773
6741
  "examples": [
6774
- "$ sf hardis:org:files:import"
6742
+ "$ sf hardis:org:diagnose:unusedusers",
6743
+ "$ sf hardis:org:diagnose:unusedusers --days 365",
6744
+ "$ sf hardis:org:diagnose:unusedusers --days 60 --licensetypes all-crm",
6745
+ "$ sf hardis:org:diagnose:unusedusers --days 60 --licenseidentifiers SFDC,AUL,AUL1",
6746
+ "$ sf hardis:org:diagnose:unusedusers --days 60 --licensetypes all-crm --returnactiveusers"
6775
6747
  ],
6776
6748
  "flags": {
6777
6749
  "json": {
@@ -6789,18 +6761,46 @@
6789
6761
  "multiple": false,
6790
6762
  "type": "option"
6791
6763
  },
6792
- "path": {
6793
- "char": "p",
6794
- "description": "Path to the file export project",
6795
- "name": "path",
6764
+ "outputfile": {
6765
+ "char": "f",
6766
+ "description": "Force the path and name of output report file. Must end with .csv",
6767
+ "name": "outputfile",
6768
+ "hasDynamicHelp": false,
6769
+ "multiple": false,
6770
+ "type": "option"
6771
+ },
6772
+ "days": {
6773
+ "char": "t",
6774
+ "description": "Extracts the users that have been inactive for the amount of days specified. In CI, default is 180 days",
6775
+ "name": "days",
6776
+ "hasDynamicHelp": false,
6777
+ "multiple": false,
6778
+ "type": "option"
6779
+ },
6780
+ "licensetypes": {
6781
+ "char": "l",
6782
+ "description": "Type of licenses to check. If set, do not use licenseidentifiers option. In CI, default is all-crm",
6783
+ "name": "licensetypes",
6784
+ "hasDynamicHelp": false,
6785
+ "multiple": false,
6786
+ "options": [
6787
+ "all",
6788
+ "all-crm",
6789
+ "all-paying"
6790
+ ],
6791
+ "type": "option"
6792
+ },
6793
+ "licenseidentifiers": {
6794
+ "char": "i",
6795
+ "description": "Comma-separated list of license identifiers, in case licensetypes is not used.. Identifiers available at https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_userlicense.htm",
6796
+ "name": "licenseidentifiers",
6796
6797
  "hasDynamicHelp": false,
6797
6798
  "multiple": false,
6798
6799
  "type": "option"
6799
6800
  },
6800
- "overwrite": {
6801
- "char": "f",
6802
- "description": "Override existing files (doubles the number of API calls)",
6803
- "name": "overwrite",
6801
+ "returnactiveusers": {
6802
+ "description": "Inverts the command by returning the active users",
6803
+ "name": "returnactiveusers",
6804
6804
  "allowNo": false,
6805
6805
  "type": "boolean"
6806
6806
  },
@@ -6842,13 +6842,13 @@
6842
6842
  },
6843
6843
  "hasDynamicHelp": true,
6844
6844
  "hiddenAliases": [],
6845
- "id": "hardis:org:files:import",
6845
+ "id": "hardis:org:diagnose:unusedusers",
6846
6846
  "pluginAlias": "sfdx-hardis",
6847
6847
  "pluginName": "sfdx-hardis",
6848
6848
  "pluginType": "core",
6849
6849
  "strict": true,
6850
6850
  "enableJsonFlag": true,
6851
- "title": "Import files",
6851
+ "title": "Detect unused Users in Salesforce",
6852
6852
  "requiresProject": false,
6853
6853
  "isESM": true,
6854
6854
  "relativePath": [
@@ -6856,35 +6856,35 @@
6856
6856
  "commands",
6857
6857
  "hardis",
6858
6858
  "org",
6859
- "files",
6860
- "import.js"
6859
+ "diagnose",
6860
+ "unusedusers.js"
6861
6861
  ],
6862
6862
  "aliasPermutations": [],
6863
6863
  "permutations": [
6864
- "hardis:org:files:import",
6865
- "org:hardis:files:import",
6866
- "org:files:hardis:import",
6867
- "org:files:import:hardis",
6868
- "hardis:files:org:import",
6869
- "files:hardis:org:import",
6870
- "files:org:hardis:import",
6871
- "files:org:import:hardis",
6872
- "hardis:files:import:org",
6873
- "files:hardis:import:org",
6874
- "files:import:hardis:org",
6875
- "files:import:org:hardis",
6876
- "hardis:org:import:files",
6877
- "org:hardis:import:files",
6878
- "org:import:hardis:files",
6879
- "org:import:files:hardis",
6880
- "hardis:import:org:files",
6881
- "import:hardis:org:files",
6882
- "import:org:hardis:files",
6883
- "import:org:files:hardis",
6884
- "hardis:import:files:org",
6885
- "import:hardis:files:org",
6886
- "import:files:hardis:org",
6887
- "import:files:org:hardis"
6864
+ "hardis:org:diagnose:unusedusers",
6865
+ "org:hardis:diagnose:unusedusers",
6866
+ "org:diagnose:hardis:unusedusers",
6867
+ "org:diagnose:unusedusers:hardis",
6868
+ "hardis:diagnose:org:unusedusers",
6869
+ "diagnose:hardis:org:unusedusers",
6870
+ "diagnose:org:hardis:unusedusers",
6871
+ "diagnose:org:unusedusers:hardis",
6872
+ "hardis:diagnose:unusedusers:org",
6873
+ "diagnose:hardis:unusedusers:org",
6874
+ "diagnose:unusedusers:hardis:org",
6875
+ "diagnose:unusedusers:org:hardis",
6876
+ "hardis:org:unusedusers:diagnose",
6877
+ "org:hardis:unusedusers:diagnose",
6878
+ "org:unusedusers:hardis:diagnose",
6879
+ "org:unusedusers:diagnose:hardis",
6880
+ "hardis:unusedusers:org:diagnose",
6881
+ "unusedusers:hardis:org:diagnose",
6882
+ "unusedusers:org:hardis:diagnose",
6883
+ "unusedusers:org:diagnose:hardis",
6884
+ "hardis:unusedusers:diagnose:org",
6885
+ "unusedusers:hardis:diagnose:org",
6886
+ "unusedusers:diagnose:hardis:org",
6887
+ "unusedusers:diagnose:org:hardis"
6888
6888
  ]
6889
6889
  },
6890
6890
  "hardis:org:fix:listviewmine": {
@@ -9374,109 +9374,6 @@
9374
9374
  "auth:configure:project:hardis"
9375
9375
  ]
9376
9376
  },
9377
- "hardis:project:convert:profilestopermsets": {
9378
- "aliases": [],
9379
- "args": {},
9380
- "description": "Creates permission sets from existing profiles, with id PS_PROFILENAME",
9381
- "examples": [
9382
- "$ sf hardis:project:convert:profilestopermsets"
9383
- ],
9384
- "flags": {
9385
- "json": {
9386
- "description": "Format output as json.",
9387
- "helpGroup": "GLOBAL",
9388
- "name": "json",
9389
- "allowNo": false,
9390
- "type": "boolean"
9391
- },
9392
- "flags-dir": {
9393
- "helpGroup": "GLOBAL",
9394
- "name": "flags-dir",
9395
- "summary": "Import flag values from a directory.",
9396
- "hasDynamicHelp": false,
9397
- "multiple": false,
9398
- "type": "option"
9399
- },
9400
- "except": {
9401
- "char": "e",
9402
- "description": "List of filters",
9403
- "name": "except",
9404
- "default": [],
9405
- "hasDynamicHelp": false,
9406
- "multiple": true,
9407
- "type": "option"
9408
- },
9409
- "debug": {
9410
- "char": "d",
9411
- "description": "Activate debug mode (more logs)",
9412
- "name": "debug",
9413
- "allowNo": false,
9414
- "type": "boolean"
9415
- },
9416
- "websocket": {
9417
- "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
9418
- "name": "websocket",
9419
- "hasDynamicHelp": false,
9420
- "multiple": false,
9421
- "type": "option"
9422
- },
9423
- "skipauth": {
9424
- "description": "Skip authentication check when a default username is required",
9425
- "name": "skipauth",
9426
- "allowNo": false,
9427
- "type": "boolean"
9428
- }
9429
- },
9430
- "hasDynamicHelp": false,
9431
- "hiddenAliases": [],
9432
- "id": "hardis:project:convert:profilestopermsets",
9433
- "pluginAlias": "sfdx-hardis",
9434
- "pluginName": "sfdx-hardis",
9435
- "pluginType": "core",
9436
- "strict": true,
9437
- "enableJsonFlag": true,
9438
- "title": "Convert Profiles into Permission Sets",
9439
- "requiresProject": true,
9440
- "requiresSfdxPlugins": [
9441
- "shane-sfdx-plugins"
9442
- ],
9443
- "isESM": true,
9444
- "relativePath": [
9445
- "lib",
9446
- "commands",
9447
- "hardis",
9448
- "project",
9449
- "convert",
9450
- "profilestopermsets.js"
9451
- ],
9452
- "aliasPermutations": [],
9453
- "permutations": [
9454
- "hardis:project:convert:profilestopermsets",
9455
- "project:hardis:convert:profilestopermsets",
9456
- "project:convert:hardis:profilestopermsets",
9457
- "project:convert:profilestopermsets:hardis",
9458
- "hardis:convert:project:profilestopermsets",
9459
- "convert:hardis:project:profilestopermsets",
9460
- "convert:project:hardis:profilestopermsets",
9461
- "convert:project:profilestopermsets:hardis",
9462
- "hardis:convert:profilestopermsets:project",
9463
- "convert:hardis:profilestopermsets:project",
9464
- "convert:profilestopermsets:hardis:project",
9465
- "convert:profilestopermsets:project:hardis",
9466
- "hardis:project:profilestopermsets:convert",
9467
- "project:hardis:profilestopermsets:convert",
9468
- "project:profilestopermsets:hardis:convert",
9469
- "project:profilestopermsets:convert:hardis",
9470
- "hardis:profilestopermsets:project:convert",
9471
- "profilestopermsets:hardis:project:convert",
9472
- "profilestopermsets:project:hardis:convert",
9473
- "profilestopermsets:project:convert:hardis",
9474
- "hardis:profilestopermsets:convert:project",
9475
- "profilestopermsets:hardis:convert:project",
9476
- "profilestopermsets:convert:hardis:project",
9477
- "profilestopermsets:convert:project:hardis"
9478
- ]
9479
- },
9480
9377
  "hardis:project:clean:emptyitems": {
9481
9378
  "aliases": [],
9482
9379
  "args": {},
@@ -10962,6 +10859,109 @@
10962
10859
  "xml:clean:project:hardis"
10963
10860
  ]
10964
10861
  },
10862
+ "hardis:project:convert:profilestopermsets": {
10863
+ "aliases": [],
10864
+ "args": {},
10865
+ "description": "Creates permission sets from existing profiles, with id PS_PROFILENAME",
10866
+ "examples": [
10867
+ "$ sf hardis:project:convert:profilestopermsets"
10868
+ ],
10869
+ "flags": {
10870
+ "json": {
10871
+ "description": "Format output as json.",
10872
+ "helpGroup": "GLOBAL",
10873
+ "name": "json",
10874
+ "allowNo": false,
10875
+ "type": "boolean"
10876
+ },
10877
+ "flags-dir": {
10878
+ "helpGroup": "GLOBAL",
10879
+ "name": "flags-dir",
10880
+ "summary": "Import flag values from a directory.",
10881
+ "hasDynamicHelp": false,
10882
+ "multiple": false,
10883
+ "type": "option"
10884
+ },
10885
+ "except": {
10886
+ "char": "e",
10887
+ "description": "List of filters",
10888
+ "name": "except",
10889
+ "default": [],
10890
+ "hasDynamicHelp": false,
10891
+ "multiple": true,
10892
+ "type": "option"
10893
+ },
10894
+ "debug": {
10895
+ "char": "d",
10896
+ "description": "Activate debug mode (more logs)",
10897
+ "name": "debug",
10898
+ "allowNo": false,
10899
+ "type": "boolean"
10900
+ },
10901
+ "websocket": {
10902
+ "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
10903
+ "name": "websocket",
10904
+ "hasDynamicHelp": false,
10905
+ "multiple": false,
10906
+ "type": "option"
10907
+ },
10908
+ "skipauth": {
10909
+ "description": "Skip authentication check when a default username is required",
10910
+ "name": "skipauth",
10911
+ "allowNo": false,
10912
+ "type": "boolean"
10913
+ }
10914
+ },
10915
+ "hasDynamicHelp": false,
10916
+ "hiddenAliases": [],
10917
+ "id": "hardis:project:convert:profilestopermsets",
10918
+ "pluginAlias": "sfdx-hardis",
10919
+ "pluginName": "sfdx-hardis",
10920
+ "pluginType": "core",
10921
+ "strict": true,
10922
+ "enableJsonFlag": true,
10923
+ "title": "Convert Profiles into Permission Sets",
10924
+ "requiresProject": true,
10925
+ "requiresSfdxPlugins": [
10926
+ "shane-sfdx-plugins"
10927
+ ],
10928
+ "isESM": true,
10929
+ "relativePath": [
10930
+ "lib",
10931
+ "commands",
10932
+ "hardis",
10933
+ "project",
10934
+ "convert",
10935
+ "profilestopermsets.js"
10936
+ ],
10937
+ "aliasPermutations": [],
10938
+ "permutations": [
10939
+ "hardis:project:convert:profilestopermsets",
10940
+ "project:hardis:convert:profilestopermsets",
10941
+ "project:convert:hardis:profilestopermsets",
10942
+ "project:convert:profilestopermsets:hardis",
10943
+ "hardis:convert:project:profilestopermsets",
10944
+ "convert:hardis:project:profilestopermsets",
10945
+ "convert:project:hardis:profilestopermsets",
10946
+ "convert:project:profilestopermsets:hardis",
10947
+ "hardis:convert:profilestopermsets:project",
10948
+ "convert:hardis:profilestopermsets:project",
10949
+ "convert:profilestopermsets:hardis:project",
10950
+ "convert:profilestopermsets:project:hardis",
10951
+ "hardis:project:profilestopermsets:convert",
10952
+ "project:hardis:profilestopermsets:convert",
10953
+ "project:profilestopermsets:hardis:convert",
10954
+ "project:profilestopermsets:convert:hardis",
10955
+ "hardis:profilestopermsets:project:convert",
10956
+ "profilestopermsets:hardis:project:convert",
10957
+ "profilestopermsets:project:hardis:convert",
10958
+ "profilestopermsets:project:convert:hardis",
10959
+ "hardis:profilestopermsets:convert:project",
10960
+ "profilestopermsets:hardis:convert:project",
10961
+ "profilestopermsets:convert:hardis:project",
10962
+ "profilestopermsets:convert:project:hardis"
10963
+ ]
10964
+ },
10965
10965
  "hardis:project:deploy:notify": {
10966
10966
  "aliases": [],
10967
10967
  "args": {},
@@ -12352,119 +12352,6 @@
12352
12352
  "v53flexipages:fix:project:hardis"
12353
12353
  ]
12354
12354
  },
12355
- "hardis:project:metadata:findduplicates": {
12356
- "aliases": [],
12357
- "args": {},
12358
- "description": "find duplicate values in XML file(s).\n Find duplicate values in XML file(s). Keys to be checked can be configured in `config/sfdx-hardis.yml` using property metadataDuplicateFindKeys.\n\nDefault config :\nmetadataDuplicateFindKeys :\n[object Object]\n",
12359
- "examples": [
12360
- "\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Layout xmlns=\"http://soap.sforce.com/2006/04/metadata\">\n <layoutSections>\n ...\n <layoutColumns>\n <layoutItems>\n <behavior>Required</behavior>\n <field>Name</field>\n </layoutItems>\n <layoutItems>\n <behavior>Required</behavior>\n <field>Name</field>\n </layoutItems>\n </layoutColumns>\n </layoutSections>\n</Layout>\n",
12361
- "\n$ sf hardis:project:metadata:findduplicates --file layout.layout-meta.xml\n[sfdx-hardis] Duplicate values in layout.layout-meta.xml\n - Key : Layout.layoutSections.layoutColumns.layoutItems.field\n - Values : Name\n",
12362
- "\n$ sf hardis:project.metadata:findduplicates -f \"force-app/main/default/**/*.xml\"\n[sfdx-hardis] hardis:project:metadata:findduplicates execution time 0:00:00.397\n[sfdx-hardis] Duplicate values in layout1.layout-meta.xml\n - Key : Layout.layoutSections.layoutColumns.layoutItems.field\n - Values : CreatedById\n\n[sfdx-hardis] Duplicate values in layout2.layout-meta.xml\n - Key : Layout.layoutSections.layoutColumns.layoutItems.field\n - Values : LastModifiedById, Name\n"
12363
- ],
12364
- "flags": {
12365
- "json": {
12366
- "description": "Format output as json.",
12367
- "helpGroup": "GLOBAL",
12368
- "name": "json",
12369
- "allowNo": false,
12370
- "type": "boolean"
12371
- },
12372
- "flags-dir": {
12373
- "helpGroup": "GLOBAL",
12374
- "name": "flags-dir",
12375
- "summary": "Import flag values from a directory.",
12376
- "hasDynamicHelp": false,
12377
- "multiple": false,
12378
- "type": "option"
12379
- },
12380
- "files": {
12381
- "char": "f",
12382
- "description": "XML metadata files path",
12383
- "name": "files",
12384
- "hasDynamicHelp": false,
12385
- "multiple": true,
12386
- "type": "option"
12387
- },
12388
- "websocket": {
12389
- "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
12390
- "name": "websocket",
12391
- "hasDynamicHelp": false,
12392
- "multiple": false,
12393
- "type": "option"
12394
- },
12395
- "skipauth": {
12396
- "description": "Skip authentication check when a default username is required",
12397
- "name": "skipauth",
12398
- "allowNo": false,
12399
- "type": "boolean"
12400
- }
12401
- },
12402
- "hasDynamicHelp": false,
12403
- "hiddenAliases": [],
12404
- "id": "hardis:project:metadata:findduplicates",
12405
- "pluginAlias": "sfdx-hardis",
12406
- "pluginName": "sfdx-hardis",
12407
- "pluginType": "core",
12408
- "strict": true,
12409
- "enableJsonFlag": true,
12410
- "metadataDuplicateFindKeys": {
12411
- "layout": [
12412
- "Layout.layoutSections.layoutColumns.layoutItems.field",
12413
- "Layout.quickActionListItems.quickActionName"
12414
- ],
12415
- "profile": [
12416
- "Profile.fieldPermissions.field",
12417
- "Profile.objectPermissions.object",
12418
- "Profile.classAccesses.apexClass"
12419
- ],
12420
- "labels": [
12421
- "CustomLabels.labels.fullName"
12422
- ],
12423
- "permissionset": [
12424
- "PermissionSet.fieldPermissions.field",
12425
- "PermissionSet.objectPermissions.object",
12426
- "PermissionSet.classAccesses.apexClass"
12427
- ]
12428
- },
12429
- "title": "XML duplicate values finder",
12430
- "requiresProject": true,
12431
- "isESM": true,
12432
- "relativePath": [
12433
- "lib",
12434
- "commands",
12435
- "hardis",
12436
- "project",
12437
- "metadata",
12438
- "findduplicates.js"
12439
- ],
12440
- "aliasPermutations": [],
12441
- "permutations": [
12442
- "hardis:project:metadata:findduplicates",
12443
- "project:hardis:metadata:findduplicates",
12444
- "project:metadata:hardis:findduplicates",
12445
- "project:metadata:findduplicates:hardis",
12446
- "hardis:metadata:project:findduplicates",
12447
- "metadata:hardis:project:findduplicates",
12448
- "metadata:project:hardis:findduplicates",
12449
- "metadata:project:findduplicates:hardis",
12450
- "hardis:metadata:findduplicates:project",
12451
- "metadata:hardis:findduplicates:project",
12452
- "metadata:findduplicates:hardis:project",
12453
- "metadata:findduplicates:project:hardis",
12454
- "hardis:project:findduplicates:metadata",
12455
- "project:hardis:findduplicates:metadata",
12456
- "project:findduplicates:hardis:metadata",
12457
- "project:findduplicates:metadata:hardis",
12458
- "hardis:findduplicates:project:metadata",
12459
- "findduplicates:hardis:project:metadata",
12460
- "findduplicates:project:hardis:metadata",
12461
- "findduplicates:project:metadata:hardis",
12462
- "hardis:findduplicates:metadata:project",
12463
- "findduplicates:hardis:metadata:project",
12464
- "findduplicates:metadata:hardis:project",
12465
- "findduplicates:metadata:project:hardis"
12466
- ]
12467
- },
12468
12355
  "hardis:project:generate:bypass": {
12469
12356
  "aliases": [],
12470
12357
  "args": {},
@@ -12831,6 +12718,119 @@
12831
12718
  "gitdelta:generate:project:hardis"
12832
12719
  ]
12833
12720
  },
12721
+ "hardis:project:metadata:findduplicates": {
12722
+ "aliases": [],
12723
+ "args": {},
12724
+ "description": "find duplicate values in XML file(s).\n Find duplicate values in XML file(s). Keys to be checked can be configured in `config/sfdx-hardis.yml` using property metadataDuplicateFindKeys.\n\nDefault config :\nmetadataDuplicateFindKeys :\n[object Object]\n",
12725
+ "examples": [
12726
+ "\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Layout xmlns=\"http://soap.sforce.com/2006/04/metadata\">\n <layoutSections>\n ...\n <layoutColumns>\n <layoutItems>\n <behavior>Required</behavior>\n <field>Name</field>\n </layoutItems>\n <layoutItems>\n <behavior>Required</behavior>\n <field>Name</field>\n </layoutItems>\n </layoutColumns>\n </layoutSections>\n</Layout>\n",
12727
+ "\n$ sf hardis:project:metadata:findduplicates --file layout.layout-meta.xml\n[sfdx-hardis] Duplicate values in layout.layout-meta.xml\n - Key : Layout.layoutSections.layoutColumns.layoutItems.field\n - Values : Name\n",
12728
+ "\n$ sf hardis:project.metadata:findduplicates -f \"force-app/main/default/**/*.xml\"\n[sfdx-hardis] hardis:project:metadata:findduplicates execution time 0:00:00.397\n[sfdx-hardis] Duplicate values in layout1.layout-meta.xml\n - Key : Layout.layoutSections.layoutColumns.layoutItems.field\n - Values : CreatedById\n\n[sfdx-hardis] Duplicate values in layout2.layout-meta.xml\n - Key : Layout.layoutSections.layoutColumns.layoutItems.field\n - Values : LastModifiedById, Name\n"
12729
+ ],
12730
+ "flags": {
12731
+ "json": {
12732
+ "description": "Format output as json.",
12733
+ "helpGroup": "GLOBAL",
12734
+ "name": "json",
12735
+ "allowNo": false,
12736
+ "type": "boolean"
12737
+ },
12738
+ "flags-dir": {
12739
+ "helpGroup": "GLOBAL",
12740
+ "name": "flags-dir",
12741
+ "summary": "Import flag values from a directory.",
12742
+ "hasDynamicHelp": false,
12743
+ "multiple": false,
12744
+ "type": "option"
12745
+ },
12746
+ "files": {
12747
+ "char": "f",
12748
+ "description": "XML metadata files path",
12749
+ "name": "files",
12750
+ "hasDynamicHelp": false,
12751
+ "multiple": true,
12752
+ "type": "option"
12753
+ },
12754
+ "websocket": {
12755
+ "description": "Websocket host:port for VsCode SFDX Hardis UI integration",
12756
+ "name": "websocket",
12757
+ "hasDynamicHelp": false,
12758
+ "multiple": false,
12759
+ "type": "option"
12760
+ },
12761
+ "skipauth": {
12762
+ "description": "Skip authentication check when a default username is required",
12763
+ "name": "skipauth",
12764
+ "allowNo": false,
12765
+ "type": "boolean"
12766
+ }
12767
+ },
12768
+ "hasDynamicHelp": false,
12769
+ "hiddenAliases": [],
12770
+ "id": "hardis:project:metadata:findduplicates",
12771
+ "pluginAlias": "sfdx-hardis",
12772
+ "pluginName": "sfdx-hardis",
12773
+ "pluginType": "core",
12774
+ "strict": true,
12775
+ "enableJsonFlag": true,
12776
+ "metadataDuplicateFindKeys": {
12777
+ "layout": [
12778
+ "Layout.layoutSections.layoutColumns.layoutItems.field",
12779
+ "Layout.quickActionListItems.quickActionName"
12780
+ ],
12781
+ "profile": [
12782
+ "Profile.fieldPermissions.field",
12783
+ "Profile.objectPermissions.object",
12784
+ "Profile.classAccesses.apexClass"
12785
+ ],
12786
+ "labels": [
12787
+ "CustomLabels.labels.fullName"
12788
+ ],
12789
+ "permissionset": [
12790
+ "PermissionSet.fieldPermissions.field",
12791
+ "PermissionSet.objectPermissions.object",
12792
+ "PermissionSet.classAccesses.apexClass"
12793
+ ]
12794
+ },
12795
+ "title": "XML duplicate values finder",
12796
+ "requiresProject": true,
12797
+ "isESM": true,
12798
+ "relativePath": [
12799
+ "lib",
12800
+ "commands",
12801
+ "hardis",
12802
+ "project",
12803
+ "metadata",
12804
+ "findduplicates.js"
12805
+ ],
12806
+ "aliasPermutations": [],
12807
+ "permutations": [
12808
+ "hardis:project:metadata:findduplicates",
12809
+ "project:hardis:metadata:findduplicates",
12810
+ "project:metadata:hardis:findduplicates",
12811
+ "project:metadata:findduplicates:hardis",
12812
+ "hardis:metadata:project:findduplicates",
12813
+ "metadata:hardis:project:findduplicates",
12814
+ "metadata:project:hardis:findduplicates",
12815
+ "metadata:project:findduplicates:hardis",
12816
+ "hardis:metadata:findduplicates:project",
12817
+ "metadata:hardis:findduplicates:project",
12818
+ "metadata:findduplicates:hardis:project",
12819
+ "metadata:findduplicates:project:hardis",
12820
+ "hardis:project:findduplicates:metadata",
12821
+ "project:hardis:findduplicates:metadata",
12822
+ "project:findduplicates:hardis:metadata",
12823
+ "project:findduplicates:metadata:hardis",
12824
+ "hardis:findduplicates:project:metadata",
12825
+ "findduplicates:hardis:project:metadata",
12826
+ "findduplicates:project:hardis:metadata",
12827
+ "findduplicates:project:metadata:hardis",
12828
+ "hardis:findduplicates:metadata:project",
12829
+ "findduplicates:hardis:metadata:project",
12830
+ "findduplicates:metadata:hardis:project",
12831
+ "findduplicates:metadata:project:hardis"
12832
+ ]
12833
+ },
12834
12834
  "hardis:scratch:pool:create": {
12835
12835
  "aliases": [],
12836
12836
  "args": {},
@@ -14805,5 +14805,5 @@
14805
14805
  ]
14806
14806
  }
14807
14807
  },
14808
- "version": "5.43.0"
14808
+ "version": "5.43.2"
14809
14809
  }