sfdx-hardis 6.16.1-beta202512161830.0 → 6.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +18 -6
  2. package/lib/commands/hardis/datacloud/extract/agentforce-conversations.d.ts +14 -0
  3. package/lib/commands/hardis/datacloud/extract/agentforce-conversations.js +369 -0
  4. package/lib/commands/hardis/datacloud/extract/agentforce-conversations.js.map +1 -0
  5. package/lib/commands/hardis/datacloud/extract/agentforce-feedback.d.ts +14 -0
  6. package/lib/commands/hardis/datacloud/extract/agentforce-feedback.js +333 -0
  7. package/lib/commands/hardis/datacloud/extract/agentforce-feedback.js.map +1 -0
  8. package/lib/commands/hardis/datacloud/sql-query.d.ts +14 -0
  9. package/lib/commands/hardis/datacloud/sql-query.js +145 -0
  10. package/lib/commands/hardis/datacloud/sql-query.js.map +1 -0
  11. package/lib/commands/hardis/org/select.js +1 -1
  12. package/lib/commands/hardis/org/select.js.map +1 -1
  13. package/lib/common/notifProvider/emailProvider.js +6 -1
  14. package/lib/common/notifProvider/emailProvider.js.map +1 -1
  15. package/lib/common/notifProvider/index.d.ts +2 -1
  16. package/lib/common/notifProvider/index.js +2 -2
  17. package/lib/common/notifProvider/index.js.map +1 -1
  18. package/lib/common/notifProvider/notifProviderRoot.js +3 -0
  19. package/lib/common/notifProvider/notifProviderRoot.js.map +1 -1
  20. package/lib/common/utils/agentforceQueryUtils.d.ts +48 -0
  21. package/lib/common/utils/agentforceQueryUtils.js +373 -0
  22. package/lib/common/utils/agentforceQueryUtils.js.map +1 -0
  23. package/lib/common/utils/authUtils.js +16 -3
  24. package/lib/common/utils/authUtils.js.map +1 -1
  25. package/lib/common/utils/dataCloudUtils.d.ts +39 -0
  26. package/lib/common/utils/dataCloudUtils.js +279 -0
  27. package/lib/common/utils/dataCloudUtils.js.map +1 -0
  28. package/lib/common/utils/filesUtils.d.ts +12 -13
  29. package/lib/common/utils/filesUtils.js +114 -43
  30. package/lib/common/utils/filesUtils.js.map +1 -1
  31. package/lib/common/utils/orgUtils.js +5 -1
  32. package/lib/common/utils/orgUtils.js.map +1 -1
  33. package/lib/common/utils/utilsAgentforceQuery.d.ts +1 -0
  34. package/lib/common/utils/utilsAgentforceQuery.js +2 -0
  35. package/lib/common/utils/utilsAgentforceQuery.js.map +1 -0
  36. package/oclif.lock +697 -697
  37. package/oclif.manifest.json +1405 -1020
  38. package/package.json +5 -5
@@ -0,0 +1,333 @@
1
+ import { Messages } from "@salesforce/core";
2
+ import { Flags, requiredOrgFlagWithDeprecations, SfCommand } from "@salesforce/sf-plugins-core";
3
+ import c from "chalk";
4
+ import { dataCloudSqlQuery } from "../../../../common/utils/dataCloudUtils.js";
5
+ import { uxLog } from "../../../../common/utils/index.js";
6
+ import { generateCsvFile, generateReportPath } from "../../../../common/utils/filesUtils.js";
7
+ import { NotifProvider } from "../../../../common/notifProvider/index.js";
8
+ import { setConnectionVariables } from "../../../../common/utils/orgUtils.js";
9
+ import { buildConversation, buildConversationUrl, buildDateFilterClause, buildExcludedSessionFilter, extractSessionIds, fetchConversationTranscripts, normalizeKeys, resolveConversationLinkDomain, resolveDateFilterOptions, resolveExcludedConversationIds, stringValue, } from "../../../../common/utils/agentforceQueryUtils.js";
10
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
11
+ const messages = Messages.loadMessages('sfdx-hardis', 'org');
12
+ export default class DataCloudExtractAgentforceFeedback extends SfCommand {
13
+ static title = 'Extract Agentforce Feedback Data from Data Cloud';
14
+ static description = `
15
+ ## Command Behavior
16
+
17
+ **Extracts Agentforce feedback data (Good/Bad) from Data Cloud and sends notifications.**
18
+
19
+ This command focuses on retrieving explicit feedback provided by users during or after Agentforce conversations. It helps in monitoring agent performance and user satisfaction by aggregating positive and negative feedback.
20
+
21
+ Key functionalities:
22
+
23
+ - **Feedback Extraction:** Queries Data Cloud specifically for conversations where feedback (GOOD or BAD) was recorded.
24
+ - **Transcript Context:** Retrieves the full conversation transcript to provide context for the feedback.
25
+ - **Filtering:** Supports filtering by date range or rolling window.
26
+ - **Report Generation:** Generates a CSV and XLSX report detailing:
27
+ - User and Date
28
+ - Feedback type (GOOD/BAD) and message
29
+ - Full conversation context
30
+ - Direct link to the conversation
31
+ - **Notifications:** Sends a summary notification (e.g., to Slack, Teams) with the count of Good vs. Bad feedback and attaches the report.
32
+
33
+ <details markdown="1">
34
+ <summary>Technical explanations</summary>
35
+
36
+ The command's technical implementation involves:
37
+
38
+ - **Targeted Query:** Executes a SQL query filtering \`GenAIFeedback__dlm\` for 'GOOD' or 'BAD' values, joining with generation and session tables.
39
+ - **Transcript Enrichment:** Fetches full transcripts for the sessions associated with the feedback to provide a complete view of the interaction.
40
+ - **Deduplication:** Implements logic to deduplicate feedback records, ensuring the most recent feedback for a conversation is used.
41
+ - **Statistics Calculation:** Computes aggregate statistics (count of Good vs. Bad feedback) for reporting.
42
+ - **Notification Integration:** Uses \`NotifProvider\` to broadcast the feedback summary and the generated report file to configured channels (Slack, MS Teams, etc.).
43
+ - **Exclusion Filters:** Supports excluding specific conversations or sessions via environment variables \`AGENTFORCE_FEEDBACK_EXCLUDED_CONV_IDS\` and \`AGENTFORCE_EXCLUDED_SESSION_IDS\` (comma-separated IDs).
44
+ </details>
45
+ `;
46
+ static examples = [
47
+ '$ sf hardis:datacloud:extract:agentforce-feedback',
48
+ '$ sf hardis:datacloud:extract:agentforce-feedback --target-org myorg@example.com',
49
+ '$ sf hardis:datacloud:extract:agentforce-feedback --outputfile ./reports/agentforce-feedback.csv'
50
+ ];
51
+ /* jscpd:ignore-start */
52
+ static flags = {
53
+ outputfile: Flags.string({
54
+ char: 'f',
55
+ description: 'Force the path and name of output report file. Must end with .csv',
56
+ }),
57
+ debug: Flags.boolean({
58
+ char: 'd',
59
+ default: false,
60
+ description: messages.getMessage('debugMode'),
61
+ }),
62
+ 'conversation-time-filter': Flags.integer({
63
+ description: 'Time filter (days) appended to the Lightning analytics URL when generating conversation links',
64
+ default: 30,
65
+ }),
66
+ 'date-from': Flags.string({
67
+ description: 'Optional ISO-8601 timestamp (UTC) to include conversations starting from this date',
68
+ }),
69
+ 'date-to': Flags.string({
70
+ description: 'Optional ISO-8601 timestamp (UTC) to include conversations up to this date',
71
+ }),
72
+ 'last-n-days': Flags.integer({
73
+ description: 'Optional rolling window (days) to include only the most recent conversations',
74
+ }),
75
+ websocket: Flags.string({
76
+ description: messages.getMessage('websocket'),
77
+ }),
78
+ skipauth: Flags.boolean({
79
+ description: 'Skip authentication check when a default username is required',
80
+ }),
81
+ 'target-org': requiredOrgFlagWithDeprecations,
82
+ };
83
+ static requiresProject = false;
84
+ debugMode = false;
85
+ queryString = '';
86
+ outputFile;
87
+ outputFilesRes = {};
88
+ /* jscpd:ignore-end */
89
+ async run() {
90
+ const { flags } = await this.parse(DataCloudExtractAgentforceFeedback);
91
+ this.outputFile = flags.outputfile || null;
92
+ this.debugMode = flags.debug || false;
93
+ const conn = flags['target-org'].getConnection();
94
+ const timeFilterFlag = flags['conversation-time-filter'];
95
+ const timeFilterDays = Number.isFinite(timeFilterFlag) && timeFilterFlag > 0 ? timeFilterFlag : 30;
96
+ const conversationLinkDomain = resolveConversationLinkDomain(conn.instanceUrl);
97
+ const dateFilterOptions = resolveDateFilterOptions({
98
+ dateFromInput: flags['date-from'],
99
+ dateToInput: flags['date-to'],
100
+ lastNDaysInput: flags['last-n-days'],
101
+ });
102
+ this.queryString = buildMainQuery(dateFilterOptions).trim();
103
+ uxLog("action", this, c.cyan("Querying Feedbacks table..."));
104
+ const rawResult = await dataCloudSqlQuery(this.queryString, conn, {});
105
+ const sessionIds = extractSessionIds(rawResult.records);
106
+ uxLog("action", this, c.cyan("Fetching full conversations transcripts..."));
107
+ const transcriptsBySession = await fetchConversationTranscripts(sessionIds, conn, { chunkSize: 25 });
108
+ uxLog("action", this, c.cyan("Aggregating and filtering data..."));
109
+ const exportRecords = buildAgentforceFeedbackRecords(rawResult.records, {
110
+ conversationLinkDomain,
111
+ timeFilterDays,
112
+ transcriptsBySession,
113
+ });
114
+ /* jscpd:ignore-start */
115
+ const result = { ...rawResult, records: exportRecords, returnedRows: exportRecords.length };
116
+ const { records: _records, ...resultCopy } = result;
117
+ void _records;
118
+ uxLog("other", this, JSON.stringify(resultCopy, null, 2));
119
+ /* jscpd:ignore-end */
120
+ this.outputFile = await generateReportPath('datacloud-agentforce-feedback', this.outputFile);
121
+ this.outputFilesRes = await generateCsvFile(exportRecords, this.outputFile, {
122
+ fileTitle: 'DataCloud Agentforce Feedback',
123
+ columnsCustomStyles: {
124
+ 'Full conversation': { width: 60, wrap: true, maxHeight: 50 },
125
+ 'Feedback type': { width: 10 },
126
+ 'Feedback message': { width: 30, wrap: true },
127
+ 'ConversationId': { width: 35 },
128
+ 'Conversation URL': { width: 80, hyperlinkFromValue: true },
129
+ },
130
+ });
131
+ const feedbackStats = computeFeedbackStats(exportRecords);
132
+ const notifSeverity = feedbackStats.badCount > 0 ? 'warning' : 'log';
133
+ const notifText = buildNotificationText(feedbackStats, dateFilterOptions);
134
+ const attachedFiles = collectFeedbackReportFiles(this.outputFilesRes);
135
+ uxLog("action", this, c.cyan(notifText));
136
+ await setConnectionVariables(conn);
137
+ await NotifProvider.postNotifications({
138
+ type: 'AGENTFORCE_FEEDBACK',
139
+ text: notifText,
140
+ buttons: [],
141
+ attachments: [],
142
+ severity: notifSeverity,
143
+ attachedFiles,
144
+ logElements: [],
145
+ data: { metric: feedbackStats.badCount, totalFeedback: feedbackStats.totalCount },
146
+ metrics: {
147
+ agentforceFeedbackGood: feedbackStats.goodCount,
148
+ agentforceFeedbackBad: feedbackStats.badCount,
149
+ },
150
+ alwaysSend: true,
151
+ });
152
+ return {
153
+ sqlResult: JSON.parse(JSON.stringify(result)),
154
+ feedbacksGood: feedbackStats.goodCount,
155
+ feedbacksBad: feedbackStats.badCount,
156
+ csvLogFile: this.outputFile,
157
+ xlsxLogFile: this.outputFilesRes?.xlsxFile,
158
+ };
159
+ }
160
+ }
161
+ function buildAgentforceFeedbackRecords(records, options) {
162
+ const safeRecords = Array.isArray(records) ? records : [];
163
+ const safeOptions = options || {
164
+ conversationLinkDomain: null,
165
+ timeFilterDays: 30,
166
+ transcriptsBySession: new Map(),
167
+ };
168
+ const dedupMap = new Map();
169
+ safeRecords.forEach((record) => {
170
+ const normalized = normalizeKeys(record);
171
+ const userName = stringValue(normalized["username"] ?? normalized["userid"]);
172
+ const conversationDate = stringValue(normalized["conversationdate"] ?? normalized["timestamp__c"]);
173
+ const feedbackValue = stringValue(normalized["feedbacksentiment"] ?? normalized["feedback__c"]);
174
+ const feedbackMessage = stringValue(normalized["feedbackmessage"] ?? normalized["feedbacktext__c"]);
175
+ const userUtterance = stringValue(normalized["userutterance"] ?? normalized["tagvalue__c"]);
176
+ const agentResponse = stringValue(normalized["agentresponse"] ?? normalized["responsetext"]);
177
+ const conversationId = stringValue(normalized["conversationid"] ?? normalized["generationgroupid__c"]);
178
+ const sessionId = stringValue(normalized["sessionid"] ?? normalized["ssot__aiagentsessionid__c"]);
179
+ const agentApiName = stringValue(normalized["agentapiname"] ?? normalized["ssot__aiagentapiname__c"]);
180
+ const transcript = safeOptions.transcriptsBySession.get(sessionId) || '';
181
+ const conversation = transcript || buildConversation(userUtterance, agentResponse);
182
+ const conversationUrl = buildConversationUrl({
183
+ domain: safeOptions.conversationLinkDomain,
184
+ conversationId,
185
+ sessionId,
186
+ agentApiName,
187
+ timeFilterDays: safeOptions.timeFilterDays,
188
+ });
189
+ const exportRecord = {
190
+ "User": userName,
191
+ "ConversationDate": conversationDate,
192
+ "Feedback type": feedbackValue,
193
+ "Feedback message": feedbackMessage,
194
+ "Full conversation": conversation,
195
+ "ConversationId": conversationId,
196
+ "Conversation URL": conversationUrl,
197
+ };
198
+ const dedupKey = conversationId || `${userName}::${conversationDate}::${feedbackMessage}`;
199
+ const existing = dedupMap.get(dedupKey);
200
+ if (!existing || isNewer(conversationDate, existing.conversationDate)) {
201
+ dedupMap.set(dedupKey, { record: exportRecord, conversationDate });
202
+ }
203
+ });
204
+ return Array.from(dedupMap.values()).map((entry) => entry.record);
205
+ }
206
+ /* jscpd:ignore-start */
207
+ function isNewer(candidateDate, existingDate) {
208
+ if (!candidateDate) {
209
+ return false;
210
+ }
211
+ if (!existingDate) {
212
+ return true;
213
+ }
214
+ const candidateTime = Date.parse(candidateDate);
215
+ const existingTime = Date.parse(existingDate);
216
+ if (Number.isNaN(candidateTime)) {
217
+ return false;
218
+ }
219
+ if (Number.isNaN(existingTime)) {
220
+ return true;
221
+ }
222
+ return candidateTime >= existingTime;
223
+ }
224
+ /* jscpd:ignore-end */
225
+ function buildMainQuery(filters = {}) {
226
+ const excludedConversationIds = resolveExcludedConversationIds();
227
+ const excludedConversationFilter = excludedConversationIds.length
228
+ ? ` AND gar.generationGroupId__c NOT IN (${excludedConversationIds.map((id) => `'${id}'`).join(', ')})`
229
+ : '';
230
+ const excludedSessionClause = buildExcludedSessionFilter();
231
+ const dateFilterClause = buildDateFilterClause(filters);
232
+ const AGENTFORCE_FEEDBACK_QUERY = `
233
+ WITH feedback_cte AS (
234
+ SELECT
235
+ COALESCE(usr.ssot__username__c, gar.userId__c) AS userName,
236
+ ggn.timestamp__c AS conversationDate,
237
+ gaf.feedback__c AS feedbackSentiment,
238
+ gfd.feedbackText__c AS feedbackMessage,
239
+ gat.tagValue__c AS userUtterance,
240
+ ggn.responseText__c AS agentResponse,
241
+ gar.generationGroupId__c AS conversationId,
242
+ gar.gatewayRequestId__c AS gatewayRequestId
243
+ FROM GenAIGeneration__dlm ggn
244
+ JOIN GenAIGatewayResponse__dlm grs ON ggn.generationResponseId__c = grs.generationResponseId__c
245
+ JOIN GenAIGatewayRequest__dlm gar ON grs.generationRequestId__c = gar.gatewayRequestId__c
246
+ JOIN GenAIGatewayRequestTag__dlm gat ON gar.gatewayRequestId__c = gat.parent__c AND gat.tag__c = 'user_utterance'
247
+ LEFT JOIN GenAIFeedback__dlm gaf ON gar.generationGroupId__c = gaf.generationGroupId__c
248
+ LEFT JOIN GenAIFeedbackDetail__dlm gfd ON gaf.feedbackId__c = gfd.parent__c
249
+ LEFT JOIN ssot__User__dlm usr ON usr.ssot__Id__c = gar.userId__c
250
+ WHERE gaf.feedback__c IN ('GOOD','BAD')${excludedConversationFilter}${dateFilterClause}
251
+ ), session_lookup AS (
252
+ SELECT
253
+ ais.ssot__GenAiGatewayRequestId__c AS gatewayRequestId,
254
+ ai.ssot__AiAgentSessionId__c AS sessionId,
255
+ ROW_NUMBER() OVER (
256
+ PARTITION BY ais.ssot__GenAiGatewayRequestId__c
257
+ ORDER BY ais.ssot__StartTimestamp__c DESC
258
+ ) AS rowNum
259
+ FROM ssot__AiAgentInteractionStep__dlm ais
260
+ JOIN ssot__AiAgentInteraction__dlm ai ON ai.ssot__Id__c = ais.ssot__AiAgentInteractionId__c
261
+ ), session_agent_info AS (
262
+ SELECT
263
+ part.ssot__AiAgentSessionId__c AS sessionId,
264
+ MAX(part.ssot__AiAgentApiName__c) AS agentApiName
265
+ FROM ssot__AiAgentSessionParticipant__dlm part
266
+ WHERE part.ssot__AiAgentApiName__c IS NOT NULL
267
+ GROUP BY part.ssot__AiAgentSessionId__c
268
+ )
269
+ SELECT
270
+ fb.userName,
271
+ fb.conversationDate,
272
+ fb.feedbackSentiment,
273
+ fb.feedbackMessage,
274
+ fb.userUtterance,
275
+ fb.agentResponse,
276
+ fb.conversationId,
277
+ fb.gatewayRequestId,
278
+ sess.sessionId,
279
+ agent.agentApiName AS agentApiName
280
+ FROM feedback_cte fb
281
+ LEFT JOIN (SELECT gatewayRequestId, sessionId FROM session_lookup WHERE rowNum = 1) sess ON sess.gatewayRequestId = fb.gatewayRequestId
282
+ LEFT JOIN session_agent_info agent ON agent.sessionId = sess.sessionId
283
+ ${excludedSessionClause}
284
+ ORDER BY fb.conversationDate DESC
285
+ ;
286
+ `;
287
+ return AGENTFORCE_FEEDBACK_QUERY;
288
+ }
289
+ function computeFeedbackStats(records) {
290
+ let goodCount = 0;
291
+ let badCount = 0;
292
+ records.forEach((record) => {
293
+ const normalizedType = normalizeFeedbackType(record["Feedback type"]);
294
+ if (normalizedType === 'GOOD') {
295
+ goodCount += 1;
296
+ }
297
+ else if (normalizedType === 'BAD') {
298
+ badCount += 1;
299
+ }
300
+ });
301
+ return { totalCount: records.length, goodCount, badCount };
302
+ }
303
+ function buildNotificationText(stats, filters) {
304
+ const lines = [`Agentforce feedback summary: ${stats.goodCount} GOOD / ${stats.badCount} BAD (total ${stats.totalCount}).`];
305
+ const windowDescription = describeFeedbackDateRange(filters);
306
+ if (windowDescription) {
307
+ lines.push(windowDescription);
308
+ }
309
+ return lines.join('\n');
310
+ }
311
+ function describeFeedbackDateRange(filters) {
312
+ if (!filters.dateFrom && !filters.dateTo) {
313
+ return null;
314
+ }
315
+ if (filters.dateFrom && filters.dateTo) {
316
+ return `Window: ${filters.dateFrom} → ${filters.dateTo}`;
317
+ }
318
+ if (filters.dateFrom) {
319
+ return `Window starting ${filters.dateFrom}`;
320
+ }
321
+ return `Window until ${filters.dateTo}`;
322
+ }
323
+ function normalizeFeedbackType(value) {
324
+ return (value || '').trim().toUpperCase();
325
+ }
326
+ function collectFeedbackReportFiles(outputFilesRes) {
327
+ const files = [];
328
+ if (outputFilesRes?.xlsxFile) {
329
+ files.push(outputFilesRes.xlsxFile);
330
+ }
331
+ return files;
332
+ }
333
+ //# sourceMappingURL=agentforce-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentforce-feedback.js","sourceRoot":"","sources":["../../../../../src/commands/hardis/datacloud/extract/agentforce-feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { SfCommand } from "@salesforce/sf-plugins-core";
2
+ import { AnyJson } from "@salesforce/ts-types";
3
+ export default class DataCloudSqlQuery extends SfCommand<any> {
4
+ static title: string;
5
+ static description: string;
6
+ static examples: string[];
7
+ static flags: any;
8
+ static requiresProject: boolean;
9
+ protected debugMode: boolean;
10
+ protected queryString: string;
11
+ protected outputFile: any;
12
+ protected outputFilesRes: any;
13
+ run(): Promise<AnyJson>;
14
+ }
@@ -0,0 +1,145 @@
1
+ import { Messages } from "@salesforce/core";
2
+ import { Flags, requiredOrgFlagWithDeprecations, SfCommand } from "@salesforce/sf-plugins-core";
3
+ import { dataCloudSqlQuery, listAvailableDataCloudQueries, loadDataCloudQueryFromFile, saveDataCloudQueryToFile } from "../../../common/utils/dataCloudUtils.js";
4
+ import { generateCsvFile, generateReportPath } from "../../../common/utils/filesUtils.js";
5
+ import { uxLog } from "../../../common/utils/index.js";
6
+ import { prompts } from "../../../common/utils/prompts.js";
7
+ import c from "chalk";
8
+ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
9
+ const messages = Messages.loadMessages('sfdx-hardis', 'org');
10
+ export default class DataCloudSqlQuery extends SfCommand {
11
+ static title = 'Execute a SQL query on Data Cloud';
12
+ static description = `
13
+ ## Command Behavior
14
+
15
+ **Executes a SQL query against Salesforce Data Cloud and exports the results.**
16
+
17
+ This command lets you run ad-hoc or predefined SQL queries on Data Cloud objects, view the results in the CLI, and export them for further analysis.
18
+
19
+ Key functionalities:
20
+
21
+ - **Query input:** Accepts inline SQL via \`-q\`, a predefined saved query name, or an interactive prompt when no query is provided.
22
+ - **Test shortcut:** \`-q test\` runs a sample query on \`ssot__Account__dlm\` (sorted by created date, limited to 5000 rows).
23
+ - **Export:** Generates CSV and XLSX reports for the returned rows with auto-generated filenames (override with \`--outputfile\`).
24
+ - **Logging:** Prints a JSON summary (excluding full records) and supports debug output via \`--debug\`.
25
+ - **Org targeting:** Works with the provided or default org connection; respects websocket and skipauth flags.
26
+
27
+ <details markdown="1">
28
+ <summary>Technical explanations</summary>
29
+
30
+ The command's technical implementation involves:
31
+
32
+ - **Query resolution:**
33
+ - If \`-q\` is provided, it is used directly (with a special \`test\` branch loading a canned query).
34
+ - If absent, prompts the user to select from predefined queries on disk (via \`listAvailableDataCloudQueries\` / \`loadDataCloudQueryFromFile\`), or enter a custom query. Custom queries can be optionally saved locally (\`saveDataCloudQueryToFile\`).
35
+ - **Execution:** Calls \`dataCloudSqlQuery\` with the resolved SQL against the target org connection.
36
+ - **Output handling:** Logs the full result JSON to the terminal; emits a sanitized summary to \`uxLog\` (records removed for readability).
37
+ - **File generation:** Uses \`generateReportPath\` to build the output path and \`generateCsvFile\` to produce CSV/XLSX exports with a \`DataCloud Sql Query Results\` title.
38
+ - **CLI UX:** Employs \`prompts\` for interactive selection/input and \`uxLog\` for consistent colored logging with chalk.
39
+ </details>
40
+ `;
41
+ static examples = [
42
+ '$ sf hardis:datacloud:sql-query',
43
+ '$ sf hardis:datacloud:sql-query -q "SELECT ssot__Name__c, ssot__CreatedDate__c FROM ssot__Account__dlm LIMIT 10"',
44
+ '$ sf hardis:datacloud:sql-query -q test'
45
+ ];
46
+ /* jscpd:ignore-start */
47
+ static flags = {
48
+ query: Flags.string({
49
+ char: 'q',
50
+ description: 'Data Cloud query string',
51
+ }),
52
+ outputfile: Flags.string({
53
+ char: 'f',
54
+ description: 'Force the path and name of output report file. Must end with .csv',
55
+ }),
56
+ debug: Flags.boolean({
57
+ char: 'd',
58
+ default: false,
59
+ description: messages.getMessage('debugMode'),
60
+ }),
61
+ websocket: Flags.string({
62
+ description: messages.getMessage('websocket'),
63
+ }),
64
+ skipauth: Flags.boolean({
65
+ description: 'Skip authentication check when a default username is required',
66
+ }),
67
+ 'target-org': requiredOrgFlagWithDeprecations,
68
+ };
69
+ static requiresProject = false;
70
+ debugMode = false;
71
+ queryString = '';
72
+ outputFile;
73
+ outputFilesRes = {};
74
+ /* jscpd:ignore-end */
75
+ async run() {
76
+ const { flags } = await this.parse(DataCloudSqlQuery);
77
+ this.queryString = flags.query;
78
+ this.outputFile = flags.outputfile || null;
79
+ this.debugMode = flags.debug || false;
80
+ const conn = flags['target-org'].getConnection();
81
+ if (this.queryString === 'test') {
82
+ this.queryString = `
83
+ SELECT
84
+ ssot__Name__c,
85
+ ssot__CreatedDate__c
86
+ FROM
87
+ ssot__Account__dlm
88
+ ORDER BY
89
+ ssot__CreatedDate__c DESC
90
+ LIMIT 5000;
91
+ `;
92
+ }
93
+ if (this.queryString === '' || this.queryString == null) {
94
+ const availableQueries = await listAvailableDataCloudQueries();
95
+ if (availableQueries.length > 0) {
96
+ const queryChoicePromptRes = await prompts({
97
+ type: 'select',
98
+ message: 'Please select a predefined Data Cloud SQL query or choose "Custom Query" to enter your own:',
99
+ description: 'Available predefined queries',
100
+ choices: [...availableQueries.map(q => ({ title: q, value: q })), { title: 'Custom Query', value: 'custom' }],
101
+ });
102
+ if (queryChoicePromptRes.value !== 'custom') {
103
+ this.queryString = await loadDataCloudQueryFromFile(queryChoicePromptRes.value);
104
+ }
105
+ }
106
+ }
107
+ if (this.queryString === '' || this.queryString == null) {
108
+ const customQueryPromptRes = await prompts({
109
+ type: 'text',
110
+ message: 'Please enter your Data Cloud SQL query:',
111
+ description: 'Custom Data Cloud SQL query',
112
+ });
113
+ this.queryString = customQueryPromptRes.value;
114
+ // Prompt user if he wants to save the query
115
+ const saveQueryPromptRes = await prompts({
116
+ type: 'confirm',
117
+ message: 'Do you want to save this query for future use?',
118
+ description: 'Save Data Cloud SQL query in local files',
119
+ initial: false,
120
+ });
121
+ if (saveQueryPromptRes.value) {
122
+ const saveQueryNamePromptRes = await prompts({
123
+ type: 'text',
124
+ message: 'Enter a name for the saved query:',
125
+ description: 'Name of the Data Cloud SQL query to save',
126
+ });
127
+ if (saveQueryNamePromptRes.value) {
128
+ await saveDataCloudQueryToFile(saveQueryNamePromptRes.value.trim(), this.queryString);
129
+ }
130
+ }
131
+ }
132
+ uxLog("action", this, c.cyan('Executing Data Cloud SQL query...'));
133
+ const result = await dataCloudSqlQuery(this.queryString, conn, {});
134
+ this.logJson(result);
135
+ // Output results (except records)
136
+ const resultCopy = { ...result };
137
+ resultCopy.records = [{ removedFromDisplay: true }];
138
+ uxLog("other", this, JSON.stringify(resultCopy, null, 2));
139
+ // Generate output CSV file
140
+ this.outputFile = await generateReportPath('datacloud-sql-query', this.outputFile);
141
+ this.outputFilesRes = await generateCsvFile(result.records, this.outputFile, { fileTitle: 'DataCloud Sql Query Results' });
142
+ return { sqlResult: JSON.parse(JSON.stringify(result)) };
143
+ }
144
+ }
145
+ //# sourceMappingURL=sql-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-query.js","sourceRoot":"","sources":["../../../../src/commands/hardis/datacloud/sql-query.ts"],"names":[],"mappings":"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"}
@@ -90,7 +90,7 @@ The command's technical implementation involves:
90
90
  description: "If you choose 'No', the org will be connected but not set as default.",
91
91
  default: true,
92
92
  });
93
- if (!promptDefaultRes) {
93
+ if (!promptDefaultRes.setDefault) {
94
94
  setDefault = false;
95
95
  }
96
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/commands/hardis/org/select.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/commands/hardis/org/select.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,CAAC,MAAM,OAAO,CAAC;AACtB,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,SAAc;IAC5C,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC;IAE5B,MAAM,CAAC,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyB7B,CAAC;IAEO,MAAM,CAAC,QAAQ,GAAG,CAAC,wBAAwB,CAAC,CAAC;IAEpD,yCAAyC;IAElC,MAAM,CAAC,KAAK,GAAQ;QACzB,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;SAC/C,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,8CAA8C;SAC5D,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iFAAiF;SAC/F,CAAE;QACH,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC9B,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,2CAA2C;SACzD,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;SAC9C,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC;YACtB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;SAC9C,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACtB,WAAW,EAAE,+DAA+D;SAC7E,CAAC;KACH,CAAC;IAEF,uGAAuG;IAChG,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;IAE5B,SAAS,GAAG,KAAK,CAAC;IAE5B,sBAAsB;IAEf,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;QAEtC,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC;gBACrC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,0DAA0D;gBACnE,WAAW,EAAE,uEAAuE;gBACpF,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;gBACjC,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,GAAG,GAAQ,EAAE,CAAC;QAClB,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,QAAQ,MAAM,CAAC,CAAC,CAAC;YACpE,MAAM,iBAAiB,GAAG,+BAA+B,QAAQ,EAAE,CAAC;YACpE,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,iBAAiB,EAAE,IAAI,EAAE;gBAChE,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YACH,GAAG,GAAG,aAAa,EAAE,MAAM,CAAC;QAC9B,CAAC;aACI,CAAC;YACJ,+BAA+B;YAC/B,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7G,CAAC;QACD,kEAAkE;QAClE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,GAAG,CAAC,QAAQ,wBAAwB,GAAG,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC;QAC/G,MAAM,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,iBAAiB,GAAG,4BAA4B,GAAG,CAAC,QAAQ,EAAE,CAAC;YACrE,MAAM,YAAY,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAC9F,eAAe,CAAC,wBAAwB,EAAE,CAAC;YAC3C,OAAO,EAAE,YAAY,EAAE,gBAAgB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1D,CAAC;aACI,CAAC;YACJ,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,QAAQ,aAAa,CAAC,CAAC,CAAC;YACpF,eAAe,CAAC,wBAAwB,EAAE,CAAC;YAC3C,OAAO,EAAE,YAAY,EAAE,iBAAiB,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC3D,CAAC;IACH,CAAC"}
@@ -19,11 +19,16 @@ export class EmailProvider extends NotifProviderRoot {
19
19
  throw new SfError("[EmailProvider] You need to define a variable NOTIF_EMAIL_ADDRESS to use sfdx-hardis Email notifications");
20
20
  }
21
21
  const emailAddresses = mainEmailAddress.split(",");
22
- // Add branch custom Teams channel if defined
22
+ // Add branch custom emaild if defined
23
23
  const customEmailChannelVariable = `NOTIF_EMAIL_ADDRESS_${(await getCurrentGitBranch() || "").toUpperCase()}`;
24
24
  if (getEnvVar(customEmailChannelVariable)) {
25
25
  emailAddresses.push(...(getEnvVar(customEmailChannelVariable) || "").split(","));
26
26
  }
27
+ // Add notif type custom emails if defined
28
+ const customEmailNotifTypeVariable = `NOTIF_EMAIL_ADDRESS_${notifMessage.type.toUpperCase()}`;
29
+ if (getEnvVar(customEmailNotifTypeVariable)) {
30
+ emailAddresses.push(...(getEnvVar(customEmailNotifTypeVariable) || "").split(","));
31
+ }
27
32
  /* jscpd:ignore-start */
28
33
  // Main block
29
34
  const firstLineMarkdown = UtilsNotifs.prefixWithSeverityEmoji(UtilsNotifs.slackToTeamsMarkdown(notifMessage.text.split("\n")[0]), notifMessage.severity);
@@ -1 +1 @@
1
- {"version":3,"file":"emailProvider.js","sourceRoot":"","sources":["../../../src/common/notifProvider/emailProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emailProvider.js","sourceRoot":"","sources":["../../../src/common/notifProvider/emailProvider.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ export declare abstract class NotifProvider {
9
9
  export type NotifSeverity = "critical" | "error" | "warning" | "info" | "success" | "log";
10
10
  export interface NotifMessage {
11
11
  text: string;
12
- type: "ACTIVE_USERS" | "AUDIT_TRAIL" | "APEX_TESTS" | "BACKUP" | "DEPLOYMENT" | "LEGACY_API" | "LICENSES" | "LINT_ACCESS" | "UNUSED_METADATAS" | "METADATA_STATUS" | "MISSING_ATTRIBUTES" | "SERVICENOW_REPORT" | "UNUSED_LICENSES" | "UNUSED_USERS" | "UNUSED_APEX_CLASSES" | "CONNECTED_APPS" | "UNSECURED_CONNECTED_APPS" | "ORG_INFO" | "ORG_LIMITS" | "RELEASE_UPDATES";
12
+ type: "ACTIVE_USERS" | "AUDIT_TRAIL" | "APEX_TESTS" | "BACKUP" | "DEPLOYMENT" | "LEGACY_API" | "LICENSES" | "LINT_ACCESS" | "UNUSED_METADATAS" | "METADATA_STATUS" | "MISSING_ATTRIBUTES" | "SERVICENOW_REPORT" | "UNUSED_LICENSES" | "UNUSED_USERS" | "UNUSED_APEX_CLASSES" | "CONNECTED_APPS" | "UNSECURED_CONNECTED_APPS" | "ORG_INFO" | "ORG_LIMITS" | "RELEASE_UPDATES" | "AGENTFORCE_CONVERSATIONS" | "AGENTFORCE_FEEDBACK";
13
13
  buttons?: NotifButton[];
14
14
  attachments?: any[];
15
15
  severity: NotifSeverity;
@@ -18,6 +18,7 @@ export interface NotifMessage {
18
18
  logElements: any[];
19
19
  metrics: any;
20
20
  data: any;
21
+ alwaysSend?: boolean;
21
22
  }
22
23
  export interface NotifButton {
23
24
  text: string;
@@ -32,13 +32,13 @@ export class NotifProvider {
32
32
  static async postNotifications(notifMessage) {
33
33
  const config = await getConfig("user");
34
34
  const notificationsDisable = config.notificationsDisable ?? (process.env?.NOTIFICATIONS_DISABLE ? process.env.NOTIFICATIONS_DISABLE.split(",") : []);
35
- uxLog("error", this, c.grey(`[NotifProvider] Handling notification of type ${notifMessage.type}...`));
35
+ uxLog("log", this, c.grey(`[NotifProvider] Handling notification of type ${notifMessage.type}...`));
36
36
  const notifProviders = this.getInstances();
37
37
  if (notifProviders.length === 0 && isCI) {
38
38
  uxLog("log", this, c.grey(`[NotifProvider] No notif has been configured: ${CONSTANTS.DOC_URL_ROOT}/salesforce-ci-cd-setup-integrations-home/#message-notifications`));
39
39
  }
40
40
  for (const notifProvider of notifProviders) {
41
- uxLog("error", this, c.grey(`[NotifProvider] - Notif target found: ${notifProvider.getLabel()}`));
41
+ uxLog("log", this, c.grey(`[NotifProvider] - Notif target found: ${notifProvider.getLabel()}`));
42
42
  // Skip if matching NOTIFICATIONS_DISABLE except for Api
43
43
  if (notificationsDisable.includes(notifMessage.type) && notifProvider.isUserNotifProvider()) {
44
44
  uxLog("warning", this, c.yellow(`[NotifProvider] Skip notification of type ${notifMessage.type} according to configuration (NOTIFICATIONS_DISABLE env var or notificationsDisable .sfdx-hardis.yml property)`));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/notifProvider/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/notifProvider/index.ts"],"names":[],"mappings":"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"}