sf-debug-log 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,6 +19,181 @@ sf plugins install sf-debug-log
19
19
 
20
20
  ## Commands
21
21
  <!-- commands -->
22
+ * [`sf debug delete`](#sf-debug-delete)
23
+ * [`sf debug retrieve`](#sf-debug-retrieve)
24
+ * [`sf debuglevel list`](#sf-debuglevel-list)
25
+ * [`sf debuglevel new`](#sf-debuglevel-new)
26
+ * [`sf trace new`](#sf-trace-new)
27
+
28
+ ## `sf debug delete`
29
+
30
+ Delete Apex log files from a Salesforce org.
31
+
32
+ ```
33
+ USAGE
34
+ $ sf debug delete -o <value> [--json] [--flags-dir <value>] [--api-version <value>] [-u <value>] [-t <value>]
35
+ [-a]
36
+
37
+ FLAGS
38
+ -a, --all-users Retrieve logs for all users in the org.
39
+ -o, --targetusername=<value> (required) Username or alias of the target Salesforce org.
40
+ -t, --time=<value> Delete logs older than the specified number of minutes.
41
+ -u, --user=<value> [default: targetusername] Username, Name, or ID of the user for whom you want to delete
42
+ the logs.
43
+ --api-version=<value> [default: 65.0] API version to use.
44
+
45
+ GLOBAL FLAGS
46
+ --flags-dir=<value> Import flag values from a directory.
47
+ --json Format output as json.
48
+
49
+ DESCRIPTION
50
+ Delete Apex log files from a Salesforce org.
51
+
52
+ Deletes Apex log files from a Salesforce org.
53
+
54
+ EXAMPLES
55
+ $ sf debug delete -u "Raffaele Preziosi" -t 60
56
+
57
+ FLAG DESCRIPTIONS
58
+ --api-version=<value> API version to use.
59
+
60
+ Override the api version used for api requests made by this command
61
+ ```
62
+
63
+ ## `sf debug retrieve`
64
+
65
+ Retrieve Apex log files from the Salesforce platform.
66
+
67
+ ```
68
+ USAGE
69
+ $ sf debug retrieve -o <value> [--json] [--flags-dir <value>] [--api-version <value>] [-q <value> | [-u <value> |
70
+ -a] | -t <value> | -l <value> | ] [-d <value>]
71
+
72
+ FLAGS
73
+ -a, --all-users Retrieve logs for all users in the org.
74
+ -d, --folder=<value> The folder where the retrieved log files will be stored. If omitted, the selected logs
75
+ are streamed to stdout.
76
+ -l, --limit=<value> [default: 100] The max number of log files to retrieve.
77
+ -o, --targetusername=<value> (required) Username or alias of the target Salesforce org.
78
+ -q, --query=<value> SOQL query used to select `ApexLog` records to retrieve. This flag can't be used with
79
+ `--user`, `--time`, `--limit`, or `--all-users`.
80
+ -t, --time=<value> Retrieve logs created in the last specified number of minutes.
81
+ -u, --user=<value> [default: targetusername] Username, Name, or ID of the user for whom you want to
82
+ retrieve the logs.
83
+ --api-version=<value> [default: 65.0] API version to use.
84
+
85
+ GLOBAL FLAGS
86
+ --flags-dir=<value> Import flag values from a directory.
87
+ --json Format output as json.
88
+
89
+ DESCRIPTION
90
+ Retrieve Apex log files from the Salesforce platform.
91
+
92
+ This command allows you to retrieve Apex log files from a Salesforce org. If you don't specify `--folder`, the log
93
+ contents are streamed to stdout.
94
+
95
+ EXAMPLES
96
+ $ sf debug retrieve -o MyDeveloperEdition -u "Raffaele Preziosi" -t 10
97
+ $ sf debug retrieve -o MyDeveloperEdition -q "SELECT Id FROM ApexLog ORDER BY SystemModstamp DESC LIMIT 1" | rg "EXCEPTION"
98
+
99
+ FLAG DESCRIPTIONS
100
+ --api-version=<value> API version to use.
101
+
102
+ Override the api version used for api requests made by this command
103
+ ```
104
+
105
+ ## `sf debuglevel list`
106
+
107
+ List the debug levels in your org.
108
+
109
+ ```
110
+ USAGE
111
+ $ sf debuglevel list -o <value> [--json] [--flags-dir <value>] [--api-version <value>]
112
+
113
+ FLAGS
114
+ -o, --targetusername=<value> (required) Username or alias of the target Salesforce org.
115
+ --api-version=<value> [default: 65.0] API version to use.
116
+
117
+ GLOBAL FLAGS
118
+ --flags-dir=<value> Import flag values from a directory.
119
+ --json Format output as json.
120
+
121
+ DESCRIPTION
122
+ List the debug levels in your org.
123
+
124
+ List the debug levels in your org.
125
+
126
+ EXAMPLES
127
+ $ sf debuglevel list -o MyDeveloperEdition
128
+
129
+ FLAG DESCRIPTIONS
130
+ --api-version=<value> API version to use.
131
+
132
+ Override the api version used for api requests made by this command
133
+ ```
134
+
135
+ ## `sf debuglevel new`
136
+
137
+ Create a new DebugLevel.
138
+
139
+ ```
140
+ USAGE
141
+ $ sf debuglevel new -o <value> -n <value> [--json] [--flags-dir <value>] [--api-version <value>]
142
+
143
+ FLAGS
144
+ -n, --developername=<value> (required) The developer name of the new DebugLevel.
145
+ -o, --targetusername=<value> (required) Username or alias of the target Salesforce org.
146
+ --api-version=<value> [default: 65.0] API version to use.
147
+
148
+ GLOBAL FLAGS
149
+ --flags-dir=<value> Import flag values from a directory.
150
+ --json Format output as json.
151
+
152
+ DESCRIPTION
153
+ Create a new DebugLevel.
154
+
155
+ Create a new DebugLevel assigning level for each category.
156
+
157
+ EXAMPLES
158
+ $ sf debuglevel new
159
+
160
+ FLAG DESCRIPTIONS
161
+ --api-version=<value> API version to use.
162
+
163
+ Override the api version used for api requests made by this command
164
+ ```
165
+
166
+ ## `sf trace new`
167
+
168
+ Create a trace flag for a user.
169
+
170
+ ```
171
+ USAGE
172
+ $ sf trace new -o <value> [--json] [--flags-dir <value>] [--api-version <value>] [-u <value>] [-t <value>]
173
+ [-f] [-d <value>]
174
+
175
+ FLAGS
176
+ -d, --debuglevel=<value> [default: SFDC_DevConsole] The debug level for the trace flag.
177
+ -f, --force Force the creation of the trace flag.
178
+ -o, --targetusername=<value> (required) Username or alias of the target Salesforce org.
179
+ -t, --time=<value> [default: 60] The time for the trace flag.
180
+ -u, --user=<value> [default: targetusername] Username, Name, or ID of the user for whom you want to
181
+ retrieve the logs.
182
+ --api-version=<value> [default: 65.0] API version to use.
183
+
184
+ GLOBAL FLAGS
185
+ --flags-dir=<value> Import flag values from a directory.
186
+ --json Format output as json.
187
+
188
+ EXAMPLES
189
+ $ sf trace new -o MyDeveloperEdition -u "Raffaele Preziosi" -t 10
190
+
191
+ FLAG DESCRIPTIONS
192
+ --api-version=<value> API version to use.
193
+
194
+ Override the api version used for api requests made by this command
195
+ ```
196
+ <!-- commandsstop -->
22
197
  - [`sf trace new`](#sf-trace-new)
23
198
  - [`sf debug retrieve`](#sf-debug-retrieve)
24
199
  - [`sf debug delete`](#sf-debug-delete)
@@ -52,17 +227,20 @@ EXAMPLES
52
227
 
53
228
  ## `sf debug retrieve`
54
229
 
55
- Retrieve Apex log files from the Salesforce platform.
230
+ Retrieve Apex log files from the Salesforce platform. If `--folder` is omitted, the selected log contents are streamed to stdout.
56
231
 
57
232
  ```
58
233
  USAGE
59
- $ sf debug retrieve -o <value> [-u <value>] [-t <value>] [-d <value>] [-a]
234
+ $ sf debug retrieve -o <value> [-u <value>] [-t <value>] [-l <value>] [-q <value>] [-d <value>] [-a]
60
235
 
61
236
  FLAGS
62
237
  -a, --all-users Retrieve log files for all users.
63
- -d, --folder=<value> [default: .sfdx/tools/debug/logs] The folder where the retrieved log files will be stored.
238
+ -d, --folder=<value> The folder where the retrieved log files will be stored. If omitted, the selected logs
239
+ are streamed to stdout.
64
240
  -o, --targetusername=<value> (required) Username or alias of the target Salesforce org.
65
241
  -l, --limit=<value> [default: 100] The max number of log files to retrieve.
242
+ -q, --query=<value> SOQL query used to select ApexLog records to retrieve. This flag can't be used with
243
+ --user, --time, --limit, or --all-users.
66
244
  -t, --time=<value> The number of minutes to retrieve log files for.
67
245
  -u, --user=<value> [default: current user] Username, Name, or ID of the user for whom you want to retrieve the logs.
68
246
 
@@ -71,6 +249,8 @@ GLOBAL FLAGS
71
249
 
72
250
  EXAMPLES
73
251
  sf debug retrieve -o DeveloperEdition -u "Raffaele Preziosi" -t 10
252
+
253
+ sf debug retrieve -o DeveloperEdition -q "SELECT Id FROM ApexLog ORDER BY SystemModstamp DESC LIMIT 1" | rg "EXCEPTION"
74
254
  ```
75
255
 
76
256
  ## `sf debug delete`
@@ -133,5 +313,3 @@ DESCRIPTION
133
313
  EXAMPLES
134
314
  sf debuglevel new -o DeveloperEdition -n "DebugLevel"
135
315
  ```
136
-
137
-
@@ -1,17 +1,25 @@
1
+ import type { Interfaces } from '@oclif/core';
1
2
  import { SfCommand } from '@salesforce/sf-plugins-core';
2
3
  export default class Retrieve extends SfCommand<void> {
3
4
  static readonly summary: string;
4
5
  static readonly description: string;
5
6
  static readonly examples: string[];
6
7
  static readonly flags: {
7
- 'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
- targetusername: import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
9
- user: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
- time: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
- limit: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
- folder: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
- 'all-users': import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ 'api-version': Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
9
+ targetusername: Interfaces.OptionFlag<import("@salesforce/core").Org, Interfaces.CustomOptions>;
10
+ user: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
11
+ time: Interfaces.OptionFlag<number | undefined, Interfaces.CustomOptions>;
12
+ limit: Interfaces.OptionFlag<number, Interfaces.CustomOptions>;
13
+ query: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
14
+ folder: Interfaces.OptionFlag<string | undefined, Interfaces.CustomOptions>;
15
+ 'all-users': Interfaces.BooleanFlag<boolean>;
14
16
  };
17
+ private static pipeLog;
18
+ private static getDownloadUrl;
19
+ private static createStdoutWriter;
15
20
  run(): Promise<void>;
21
+ private getLogsFromFlags;
16
22
  private saveLogs;
23
+ private streamLogsToStdout;
24
+ private warnDownloadError;
17
25
  }
@@ -1,9 +1,16 @@
1
- import path from 'path';
1
+ import { createWriteStream } from 'node:fs';
2
+ import { mkdir } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ import { pipeline as nodePipeline, Writable } from 'node:stream';
5
+ import { promisify } from 'node:util';
2
6
  import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
3
7
  import { Messages } from '@salesforce/core';
4
- import { getUserId, createFile, getLogs } from '../../utils.js';
8
+ import { getUserId, getLogs, getLogsByQuery } from '../../utils.js';
5
9
  Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
6
10
  const messages = Messages.loadMessages('sf-debug-log', 'debug.retrieve');
11
+ const pipeline = promisify(nodePipeline);
12
+ const QUERY_EXCLUSIVE_FLAGS = ['user', 'time', 'limit', 'all-users'];
13
+ const EMPTY_DOWNLOAD_SUMMARY = { failedCount: 0, savedCount: 0 };
7
14
  export default class Retrieve extends SfCommand {
8
15
  static summary = messages.getMessage('summary');
9
16
  static description = messages.getMessage('description');
@@ -20,6 +27,7 @@ export default class Retrieve extends SfCommand {
20
27
  user: Flags.string({
21
28
  summary: messages.getMessage('flags.user.summary'),
22
29
  char: 'u',
30
+ exclusive: ['all-users'],
23
31
  }),
24
32
  time: Flags.integer({
25
33
  summary: messages.getMessage('flags.time.summary'),
@@ -28,60 +36,117 @@ export default class Retrieve extends SfCommand {
28
36
  limit: Flags.integer({
29
37
  summary: messages.getMessage('flags.limit.summary'),
30
38
  char: 'l',
31
- default: 100
39
+ default: 100,
40
+ }),
41
+ query: Flags.string({
42
+ summary: messages.getMessage('flags.query.summary'),
43
+ char: 'q',
44
+ exclusive: QUERY_EXCLUSIVE_FLAGS,
32
45
  }),
33
46
  folder: Flags.directory({
34
47
  summary: messages.getMessage('flags.folder.summary'),
35
48
  char: 'd',
36
- default: '.sfdx/tools/debug/logs',
37
49
  }),
38
50
  'all-users': Flags.boolean({
39
51
  summary: messages.getMessage('flags.all-users.summary'),
40
52
  char: 'a',
41
53
  default: false,
54
+ exclusive: ['user'],
42
55
  }),
43
56
  };
57
+ static async pipeLog(conn, log, destination) {
58
+ const request = conn.request(Retrieve.getDownloadUrl(conn, log));
59
+ await Promise.all([pipeline(request.stream(), destination), request.then(() => undefined)]);
60
+ }
61
+ static getDownloadUrl(conn, log) {
62
+ return `${conn.instanceUrl}/apexdebug/traceDownload.apexp?id=${log.Id}`;
63
+ }
64
+ static createStdoutWriter() {
65
+ return new Writable({
66
+ write(chunk, encoding, callback) {
67
+ if (typeof chunk === 'string') {
68
+ process.stdout.write(chunk, encoding, callback);
69
+ }
70
+ else {
71
+ process.stdout.write(chunk, callback);
72
+ }
73
+ },
74
+ });
75
+ }
44
76
  async run() {
45
- const { flags } = await this.parse(Retrieve);
46
- if (flags['all-users'] && flags.user) {
47
- this.error('Cannot use --all-users and --user flags together');
48
- }
77
+ const { flags: parsedFlags } = await this.parse(Retrieve);
78
+ const flags = parsedFlags;
49
79
  const conn = flags.targetusername.getConnection(flags['api-version']);
80
+ const logs = flags.query ? await getLogsByQuery(conn, flags.query) : await this.getLogsFromFlags(conn, flags);
81
+ const downloadSummary = flags.folder
82
+ ? await this.saveLogs(conn, logs, flags.folder)
83
+ : await this.streamLogsToStdout(conn, logs);
84
+ if (downloadSummary.failedCount > 0) {
85
+ const label = downloadSummary.failedCount === 1 ? 'log' : 'logs';
86
+ this.error(`Failed to retrieve ${downloadSummary.failedCount} ${label}.`);
87
+ }
88
+ if (flags.folder) {
89
+ this.log(`saved\t${downloadSummary.savedCount}`);
90
+ }
91
+ }
92
+ async getLogsFromFlags(conn, flags) {
50
93
  const getLogsOptions = {};
51
94
  if (!flags['all-users']) {
52
- // Default to the current user if no user is specified
53
- const user = flags.user ? flags.user : conn.getUsername();
95
+ const user = flags.user ?? conn.getUsername();
54
96
  const userId = await getUserId(conn, user);
55
97
  if (!userId) {
56
98
  this.error(`User ${user} not found`);
57
99
  }
58
100
  getLogsOptions.userId = userId;
59
101
  }
60
- if (flags.time) {
102
+ if (flags.time !== undefined) {
61
103
  getLogsOptions.timeLimit = flags.time;
62
104
  }
63
- if (flags.limit) {
105
+ if (flags.limit !== undefined) {
64
106
  getLogsOptions.limit = flags.limit;
65
107
  }
66
- const logs = await getLogs(conn, getLogsOptions);
67
- await this.saveLogs(conn, logs, flags.folder);
68
- this.log(`saved\t${logs.length}`);
108
+ return getLogs(conn, getLogsOptions);
69
109
  }
70
110
  async saveLogs(conn, logs, directory) {
71
- // Use Promise.all to parallelize the download and save operations
72
- await Promise.all(logs.map(async (log) => {
73
- const url = `${conn.instanceUrl}/apexdebug/traceDownload.apexp?id=${log.Id}`;
74
- const fileName = `${log.Id}.log`;
75
- const filePath = path.join(directory, fileName);
111
+ const results = await Promise.all(logs.map(async (log) => {
112
+ const filePath = path.join(directory, `${log.Id}.log`);
76
113
  try {
77
- const body = await conn.request(url);
78
- await createFile(filePath, body);
114
+ await mkdir(path.dirname(filePath), { recursive: true });
115
+ await Retrieve.pipeLog(conn, log, createWriteStream(filePath));
116
+ return { failedCount: 0, savedCount: 1 };
79
117
  }
80
118
  catch (err) {
81
- const errorMessage = err instanceof Error ? err.message : '';
82
- this.warn(`Error downloading log for ${log.Id}: ${errorMessage}`);
119
+ this.warnDownloadError(log, err);
120
+ return { failedCount: 1, savedCount: 0 };
83
121
  }
84
122
  }));
123
+ return results.reduce((summary, result) => ({
124
+ failedCount: summary.failedCount + result.failedCount,
125
+ savedCount: summary.savedCount + result.savedCount,
126
+ }), EMPTY_DOWNLOAD_SUMMARY);
127
+ }
128
+ async streamLogsToStdout(conn, logs) {
129
+ return logs.reduce(async (summaryPromise, log) => {
130
+ const summary = await summaryPromise;
131
+ try {
132
+ await Retrieve.pipeLog(conn, log, Retrieve.createStdoutWriter());
133
+ return {
134
+ failedCount: summary.failedCount,
135
+ savedCount: summary.savedCount + 1,
136
+ };
137
+ }
138
+ catch (err) {
139
+ this.warnDownloadError(log, err);
140
+ return {
141
+ failedCount: summary.failedCount + 1,
142
+ savedCount: summary.savedCount,
143
+ };
144
+ }
145
+ }, Promise.resolve(EMPTY_DOWNLOAD_SUMMARY));
146
+ }
147
+ warnDownloadError(log, err) {
148
+ const errorMessage = err instanceof Error ? err.message : '';
149
+ this.warn(`Error downloading log for ${log.Id}: ${errorMessage}`);
85
150
  }
86
151
  }
87
152
  //# sourceMappingURL=retrieve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../../src/commands/debug/retrieve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retrieve.js","sourceRoot":"","sources":["../../../src/commands/debug/retrieve.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -10,8 +10,8 @@ export interface GetLogsOptions {
10
10
  }
11
11
  export type ApexLog = {
12
12
  Id: string;
13
- LogUser: {
14
- Username: string;
13
+ LogUser?: {
14
+ Username?: string;
15
15
  };
16
16
  };
17
17
  export type TraceFlag = {
package/lib/utils.d.ts CHANGED
@@ -7,4 +7,5 @@ export declare function getDebugLevels(conn: Connection): Promise<DebugLevel[]>;
7
7
  export declare function createTraceFlag(conn: Connection, userId: string, debugLevelId: string, time: number): Promise<SaveResult>;
8
8
  export declare function createDebugLevel(conn: Connection, debugLevel: DebugLevelCreate): Promise<SaveResult>;
9
9
  export declare function getLogs(conn: Connection, options: GetLogsOptions): Promise<ApexLog[]>;
10
+ export declare function getLogsByQuery(conn: Connection, query: string): Promise<ApexLog[]>;
10
11
  export declare function deleteLogs(conn: Connection, logs: ApexLog[]): Promise<void>;
package/lib/utils.js CHANGED
@@ -112,6 +112,17 @@ export async function getLogs(conn, options) {
112
112
  const queryResult = await conn.query(queryString);
113
113
  return queryResult.records;
114
114
  }
115
+ export async function getLogsByQuery(conn, query) {
116
+ if (!/\bfrom\s+apexlog\b/i.test(query)) {
117
+ throw new Error('The --query SOQL must query ApexLog records.');
118
+ }
119
+ const queryResult = await conn.query(query);
120
+ const logs = queryResult.records;
121
+ if (logs.some((log) => !log.Id)) {
122
+ throw new Error('The --query SOQL must select the ApexLog Id field.');
123
+ }
124
+ return logs;
125
+ }
115
126
  export async function deleteLogs(conn, logs) {
116
127
  if (logs && logs.length > 0) {
117
128
  const ids = logs.map((log) => log.Id).filter((id) => id !== undefined);
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ Retrieve Apex log files from the Salesforce platform.
4
4
 
5
5
  # description
6
6
 
7
- This command allows you to retrieve Apex log files from a Salesforce org.
7
+ This command allows you to retrieve Apex log files from a Salesforce org. If you don't specify `--folder`, the log contents are streamed to stdout.
8
8
 
9
9
  # flags.user.summary
10
10
 
@@ -22,9 +22,13 @@ Retrieve logs created in the last specified number of minutes.
22
22
 
23
23
  The max number of log files to retrieve.
24
24
 
25
+ # flags.query.summary
26
+
27
+ SOQL query used to select `ApexLog` records to retrieve. This flag can't be used with `--user`, `--time`, `--limit`, or `--all-users`.
28
+
25
29
  # flags.folder.summary
26
30
 
27
- The folder where the retrieved log files will be stored.
31
+ The folder where the retrieved log files will be stored. If omitted, the selected logs are streamed to stdout.
28
32
 
29
33
  # flags.all-users.summary
30
34
 
@@ -41,3 +45,4 @@ Failed to save logs: %s.
41
45
  # examples
42
46
 
43
47
  sf debug retrieve -o MyDeveloperEdition -u "Raffaele Preziosi" -t 10
48
+ sf debug retrieve -o MyDeveloperEdition -q "SELECT Id FROM ApexLog ORDER BY SystemModstamp DESC LIMIT 1" | rg "EXCEPTION"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sf-debug-log",
3
3
  "description": "Manage Salesforce Debug Logs",
4
- "version": "0.2.5",
4
+ "version": "0.3.0",
5
5
  "type": "module",
6
6
  "exports": "./lib/index.js",
7
7
  "dependencies": {