@uipath/tasks-tool 1.202.0-preview.140 → 1.202.0-preview.142

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 (41) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/{tool-4er8cbf1.js → tool-315h4wtj.js} +5 -2
  3. package/dist/tool.js +1 -1
  4. package/package.json +5 -2
  5. package/browser.json +0 -4
  6. package/src/commands/_shared/catalog-options.spec.ts +0 -114
  7. package/src/commands/_shared/catalog-options.ts +0 -122
  8. package/src/commands/_shared/connect.spec.ts +0 -52
  9. package/src/commands/_shared/connect.ts +0 -31
  10. package/src/commands/_shared/constants.ts +0 -1
  11. package/src/commands/_shared/folder-picker-interactive.spec.ts +0 -92
  12. package/src/commands/_shared/folder-picker-interactive.ts +0 -76
  13. package/src/commands/_shared/folder-picker.spec.ts +0 -159
  14. package/src/commands/_shared/folder-picker.ts +0 -113
  15. package/src/commands/_shared/folder-resolver.spec.ts +0 -152
  16. package/src/commands/_shared/folder-resolver.ts +0 -113
  17. package/src/commands/_shared/parse.spec.ts +0 -69
  18. package/src/commands/_shared/parse.ts +0 -43
  19. package/src/commands/catalogs.ts +0 -281
  20. package/src/commands/comments.ts +0 -160
  21. package/src/commands/data.ts +0 -137
  22. package/src/commands/labels.ts +0 -93
  23. package/src/commands/metadata.ts +0 -139
  24. package/src/commands/tasks.spec.ts +0 -2449
  25. package/src/commands/tasks.ts +0 -631
  26. package/src/index.ts +0 -12
  27. package/src/tool.ts +0 -24
  28. package/src/utils/sdk-client.ts +0 -30
  29. package/tests/assign.e2e.test.ts +0 -166
  30. package/tests/assignable-users.e2e.test.ts +0 -167
  31. package/tests/catalogs.e2e.test.ts +0 -418
  32. package/tests/comments.e2e.test.ts +0 -223
  33. package/tests/complete.e2e.test.ts +0 -207
  34. package/tests/data.e2e.test.ts +0 -187
  35. package/tests/get.e2e.test.ts +0 -103
  36. package/tests/labels.e2e.test.ts +0 -184
  37. package/tests/list.e2e.test.ts +0 -234
  38. package/tests/metadata.e2e.test.ts +0 -186
  39. package/tests/performance.e2e.test.ts +0 -32
  40. package/tsconfig.json +0 -9
  41. package/vitest.config.ts +0 -1
@@ -1,281 +0,0 @@
1
- import {
2
- catchError,
3
- classifiedFailure,
4
- OutputFormatter,
5
- processContext,
6
- RESULTS,
7
- } from "@uipath/common";
8
- import type { Command } from "commander";
9
-
10
- import { createTaskCatalogsClient } from "../utils/sdk-client";
11
- import {
12
- buildCatalogCreateOptions,
13
- buildCatalogUpdateOptions,
14
- type CatalogCreateOptions,
15
- type CatalogGetOptions,
16
- type CatalogListOptions,
17
- type CatalogUpdateOptions,
18
- } from "./_shared/catalog-options";
19
- import { connectTasksClient } from "./_shared/connect";
20
- import { DEFAULT_PAGE_SIZE } from "./_shared/constants";
21
- import {
22
- addFolderScopeOptions,
23
- resolveFolderId,
24
- } from "./_shared/folder-picker";
25
- import { parseIntArg } from "./_shared/parse";
26
-
27
- export const registerCatalogsCommand = (program: Command) => {
28
- const catalogs = program
29
- .command("catalogs")
30
- .description("Manage task catalogs");
31
-
32
- addFolderScopeOptions(
33
- catalogs.command("list").description("List task catalogs in a folder"),
34
- )
35
- .option(
36
- "-l, --limit <number>",
37
- "Maximum number of items to return (fetches all if omitted)",
38
- )
39
- .trackedAction(processContext, async (options: CatalogListOptions) => {
40
- const sdk = await connectTasksClient();
41
- if (!sdk) return;
42
-
43
- const folderId = await resolveFolderId(options);
44
- if (folderId === null) return;
45
-
46
- let limit: number | undefined;
47
- if (options.limit) {
48
- const parsed = parseIntArg(options.limit, "--limit");
49
- if (parsed === null) return;
50
- limit = parsed;
51
- }
52
-
53
- const taskCatalogs = createTaskCatalogsClient(sdk);
54
- const allItems: unknown[] = [];
55
- let cursor: { value: string } | undefined;
56
-
57
- do {
58
- const getOptions: Record<string, unknown> = {
59
- folderId,
60
- pageSize: DEFAULT_PAGE_SIZE,
61
- };
62
- if (cursor) {
63
- getOptions.cursor = cursor;
64
- }
65
-
66
- const [listError, result] = await catchError(
67
- taskCatalogs.getAll(getOptions),
68
- );
69
- if (listError) {
70
- OutputFormatter.error(
71
- await classifiedFailure(
72
- "Error listing task catalogs",
73
- listError,
74
- ),
75
- );
76
- processContext.exit(1);
77
- return;
78
- }
79
-
80
- if (Array.isArray(result)) {
81
- allItems.push(...result);
82
- break;
83
- }
84
-
85
- const page = result as unknown as Record<string, unknown>;
86
- allItems.push(...((page.items ?? []) as unknown[]));
87
- cursor = page.hasNextPage
88
- ? (page.nextCursor as { value: string })
89
- : undefined;
90
-
91
- if (limit && allItems.length >= limit) {
92
- break;
93
- }
94
- } while (cursor);
95
-
96
- OutputFormatter.success({
97
- Result: RESULTS.Success,
98
- Code: "TaskCatalogList",
99
- Data: limit ? allItems.slice(0, limit) : allItems,
100
- });
101
- });
102
-
103
- addFolderScopeOptions(
104
- catalogs
105
- .command("get")
106
- .description("Get a task catalog by ID")
107
- .argument("<id>", "Task catalog ID"),
108
- ).trackedAction(
109
- processContext,
110
- async (id: string, options: CatalogGetOptions) => {
111
- const sdk = await connectTasksClient();
112
- if (!sdk) return;
113
-
114
- const parsedId = parseIntArg(id, "<id>");
115
- if (parsedId === null) return;
116
-
117
- const folderId = await resolveFolderId(options);
118
- if (folderId === null) return;
119
-
120
- const taskCatalogs = createTaskCatalogsClient(sdk);
121
- const [getError, catalog] = await catchError(
122
- taskCatalogs.getById(parsedId, { folderId }),
123
- );
124
- if (getError) {
125
- OutputFormatter.error(
126
- await classifiedFailure(
127
- `Error getting task catalog '${id}'`,
128
- getError,
129
- ),
130
- );
131
- processContext.exit(1);
132
- return;
133
- }
134
-
135
- OutputFormatter.success({
136
- Result: RESULTS.Success,
137
- Code: "TaskCatalogDetails",
138
- Data: catalog,
139
- });
140
- },
141
- );
142
-
143
- addFolderScopeOptions(
144
- catalogs
145
- .command("create")
146
- .description("Create a task catalog in a folder")
147
- .requiredOption("--name <name>", "Catalog name (required)"),
148
- )
149
- .option("--description <text>", "Catalog description")
150
- .option("--encrypted", "Encrypt the data of tasks in this catalog")
151
- .option(
152
- "--retention-action <action>",
153
- "Action at the retention limit (Delete, Archive)",
154
- )
155
- .option("--retention-period <days>", "Retention period in days")
156
- .option(
157
- "--retention-bucket-id <id>",
158
- "Storage bucket ID (used when retention action is Archive)",
159
- )
160
- .trackedAction(
161
- processContext,
162
- async (options: CatalogCreateOptions) => {
163
- const sdk = await connectTasksClient();
164
- if (!sdk) return;
165
-
166
- const folderId = await resolveFolderId(options);
167
- if (folderId === null) return;
168
-
169
- const writeOptions = buildCatalogCreateOptions(
170
- options,
171
- folderId,
172
- );
173
- if (!writeOptions) {
174
- return;
175
- }
176
-
177
- const taskCatalogs = createTaskCatalogsClient(sdk);
178
- const [createError, catalog] = await catchError(
179
- taskCatalogs.create(options.name, writeOptions),
180
- );
181
- if (createError) {
182
- OutputFormatter.error(
183
- await classifiedFailure(
184
- `Error creating task catalog '${options.name}'`,
185
- createError,
186
- ),
187
- );
188
- processContext.exit(1);
189
- return;
190
- }
191
-
192
- OutputFormatter.success({
193
- Result: RESULTS.Success,
194
- Code: "TaskCatalogCreated",
195
- Data: catalog,
196
- });
197
- },
198
- );
199
-
200
- addFolderScopeOptions(
201
- catalogs
202
- .command("update")
203
- .description("Update a task catalog")
204
- .argument("<id>", "Task catalog ID"),
205
- )
206
- .option("--name <name>", "New catalog name")
207
- .option("--description <text>", "Catalog description")
208
- .option(
209
- "--retention-action <action>",
210
- "Action at the retention limit (Delete, Archive)",
211
- )
212
- .option("--retention-period <days>", "Retention period in days")
213
- .option(
214
- "--retention-bucket-id <id>",
215
- "Storage bucket ID (used when retention action is Archive)",
216
- )
217
- .trackedAction(
218
- processContext,
219
- async (id: string, options: CatalogUpdateOptions) => {
220
- const sdk = await connectTasksClient();
221
- if (!sdk) return;
222
-
223
- const parsedId = parseIntArg(id, "<id>");
224
- if (parsedId === null) return;
225
-
226
- const hasUpdate =
227
- options.name !== undefined ||
228
- options.description !== undefined ||
229
- options.retentionAction !== undefined ||
230
- options.retentionPeriod !== undefined ||
231
- options.retentionBucketId !== undefined;
232
- if (!hasUpdate) {
233
- OutputFormatter.error({
234
- Result: RESULTS.Failure,
235
- Message: "No catalog changes provided",
236
- Instructions:
237
- "Pass at least one of --name, --description, --retention-action, --retention-period, or --retention-bucket-id.",
238
- });
239
- processContext.exit(1);
240
- return;
241
- }
242
-
243
- const folderId = await resolveFolderId(options);
244
- if (folderId === null) return;
245
-
246
- const writeOptions = buildCatalogUpdateOptions(
247
- options,
248
- folderId,
249
- );
250
- if (!writeOptions) {
251
- return;
252
- }
253
-
254
- const taskCatalogs = createTaskCatalogsClient(sdk);
255
- const [updateError] = await catchError(
256
- taskCatalogs.updateById(parsedId, writeOptions),
257
- );
258
- if (updateError) {
259
- OutputFormatter.error(
260
- await classifiedFailure(
261
- `Error updating task catalog '${id}'`,
262
- updateError,
263
- ),
264
- );
265
- processContext.exit(1);
266
- return;
267
- }
268
-
269
- OutputFormatter.success({
270
- Result: RESULTS.Success,
271
- Code: "TaskCatalogUpdated",
272
- Data: {
273
- id: parsedId,
274
- ...(options.name !== undefined
275
- ? { name: options.name }
276
- : {}),
277
- },
278
- });
279
- },
280
- );
281
- };
@@ -1,160 +0,0 @@
1
- import {
2
- catchError,
3
- extractErrorMessage,
4
- OutputFormatter,
5
- processContext,
6
- RESULTS,
7
- } from "@uipath/common";
8
- import type { Command } from "commander";
9
-
10
- import { connectTasksClient } from "./_shared/connect";
11
- import { DEFAULT_PAGE_SIZE } from "./_shared/constants";
12
- import {
13
- addFolderScopeOptions,
14
- type FolderScopeOptions,
15
- resolveFolderId,
16
- } from "./_shared/folder-picker";
17
- import { parseIntArg } from "./_shared/parse";
18
-
19
- interface CommentListOptions extends FolderScopeOptions {
20
- limit?: string;
21
- }
22
-
23
- interface CommentCreateOptions extends FolderScopeOptions {
24
- text: string;
25
- }
26
-
27
- export const registerCommentsCommand = (program: Command) => {
28
- const comments = program
29
- .command("comments")
30
- .description("Manage task comments");
31
-
32
- addFolderScopeOptions(
33
- comments
34
- .command("list")
35
- .description("List the comments on a task")
36
- .argument("<task-id>", "Task ID"),
37
- )
38
- .option(
39
- "-l, --limit <number>",
40
- "Maximum number of items to return (fetches all if omitted)",
41
- )
42
- .trackedAction(
43
- processContext,
44
- async (taskId: string, options: CommentListOptions) => {
45
- const sdk = await connectTasksClient();
46
- if (!sdk) return;
47
-
48
- const parsedTaskId = parseIntArg(taskId, "<task-id>");
49
- if (parsedTaskId === null) return;
50
-
51
- const folderId = await resolveFolderId(options);
52
- if (folderId === null) return;
53
-
54
- let limit: number | undefined;
55
- if (options.limit) {
56
- const parsed = parseIntArg(options.limit, "--limit");
57
- if (parsed === null) return;
58
- limit = parsed;
59
- }
60
-
61
- const allItems: unknown[] = [];
62
- let cursor: { value: string } | undefined;
63
-
64
- do {
65
- const getOptions: Record<string, unknown> = {
66
- folderId,
67
- pageSize: DEFAULT_PAGE_SIZE,
68
- };
69
- if (cursor) {
70
- getOptions.cursor = cursor;
71
- }
72
-
73
- const [listError, result] = await catchError(
74
- sdk.tasks.getComments(parsedTaskId, getOptions),
75
- );
76
- if (listError) {
77
- OutputFormatter.error({
78
- Result: RESULTS.Failure,
79
- Message: "Error listing task comments",
80
- Instructions: await extractErrorMessage(listError),
81
- });
82
- processContext.exit(1);
83
- return;
84
- }
85
-
86
- if (Array.isArray(result)) {
87
- allItems.push(...result);
88
- break;
89
- }
90
-
91
- const page = result as unknown as Record<string, unknown>;
92
- allItems.push(...((page.items ?? []) as unknown[]));
93
- cursor = page.hasNextPage
94
- ? (page.nextCursor as { value: string })
95
- : undefined;
96
-
97
- if (limit && allItems.length >= limit) {
98
- break;
99
- }
100
- } while (cursor);
101
-
102
- OutputFormatter.success({
103
- Result: RESULTS.Success,
104
- Code: "TaskCommentList",
105
- Data: limit ? allItems.slice(0, limit) : allItems,
106
- });
107
- },
108
- );
109
-
110
- addFolderScopeOptions(
111
- comments
112
- .command("add")
113
- .description("Add a comment to a task")
114
- .argument("<task-id>", "Task ID")
115
- .requiredOption("--text <text>", "Comment text (required)"),
116
- ).trackedAction(
117
- processContext,
118
- async (taskId: string, options: CommentCreateOptions) => {
119
- const sdk = await connectTasksClient();
120
- if (!sdk) return;
121
-
122
- const parsedTaskId = parseIntArg(taskId, "<task-id>");
123
- if (parsedTaskId === null) return;
124
-
125
- const folderId = await resolveFolderId(options);
126
- if (folderId === null) return;
127
-
128
- if (!options.text) {
129
- OutputFormatter.error({
130
- Result: RESULTS.Failure,
131
- Message: "--text cannot be empty",
132
- Instructions: "Provide comment text with --text <text>.",
133
- });
134
- processContext.exit(1);
135
- return;
136
- }
137
-
138
- const [createError, comment] = await catchError(
139
- sdk.tasks.createComment(parsedTaskId, options.text, {
140
- folderId,
141
- }),
142
- );
143
- if (createError) {
144
- OutputFormatter.error({
145
- Result: RESULTS.Failure,
146
- Message: `Error adding comment to task '${taskId}'`,
147
- Instructions: await extractErrorMessage(createError),
148
- });
149
- processContext.exit(1);
150
- return;
151
- }
152
-
153
- OutputFormatter.success({
154
- Result: RESULTS.Success,
155
- Code: "TaskCommentCreated",
156
- Data: comment,
157
- });
158
- },
159
- );
160
- };
@@ -1,137 +0,0 @@
1
- import {
2
- catchError,
3
- extractErrorMessage,
4
- extractErrorMessageSync,
5
- OutputFormatter,
6
- processContext,
7
- RESULTS,
8
- } from "@uipath/common";
9
- import type { Command } from "commander";
10
-
11
- import { connectTasksClient } from "./_shared/connect";
12
- import {
13
- addFolderScopeOptions,
14
- type FolderScopeOptions,
15
- resolveFolderId,
16
- } from "./_shared/folder-picker";
17
- import { parseIntArg } from "./_shared/parse";
18
-
19
- type DataGetOptions = FolderScopeOptions;
20
-
21
- interface DataSaveOptions extends FolderScopeOptions {
22
- data: string;
23
- }
24
-
25
- export const registerDataCommand = (program: Command) => {
26
- const data = program.command("data").description("Manage task data");
27
-
28
- addFolderScopeOptions(
29
- data
30
- .command("get")
31
- .description("Get a task's data")
32
- .argument("<task-id>", "Task ID"),
33
- ).trackedAction(
34
- processContext,
35
- async (taskId: string, options: DataGetOptions) => {
36
- const sdk = await connectTasksClient();
37
- if (!sdk) return;
38
-
39
- const parsedTaskId = parseIntArg(taskId, "<task-id>");
40
- if (parsedTaskId === null) return;
41
-
42
- const folderId = await resolveFolderId(options);
43
- if (folderId === null) return;
44
-
45
- const [getError, task] = await catchError(
46
- sdk.tasks.getDataById(parsedTaskId, { folderId }),
47
- );
48
- if (getError) {
49
- OutputFormatter.error({
50
- Result: RESULTS.Failure,
51
- Message: `Error getting data for task '${taskId}'`,
52
- Instructions: await extractErrorMessage(getError),
53
- });
54
- processContext.exit(1);
55
- return;
56
- }
57
-
58
- OutputFormatter.success({
59
- Result: RESULTS.Success,
60
- Code: "TaskData",
61
- Data: task,
62
- });
63
- },
64
- );
65
-
66
- addFolderScopeOptions(
67
- data
68
- .command("save")
69
- .description("Save a task's data")
70
- .argument("<task-id>", "Task ID")
71
- .requiredOption("--data <json>", "Task data as a JSON object"),
72
- ).trackedAction(
73
- processContext,
74
- async (taskId: string, options: DataSaveOptions) => {
75
- const sdk = await connectTasksClient();
76
- if (!sdk) return;
77
-
78
- const parsedTaskId = parseIntArg(taskId, "<task-id>");
79
- if (parsedTaskId === null) return;
80
-
81
- const folderId = await resolveFolderId(options);
82
- if (folderId === null) return;
83
-
84
- const [parseError, parsedData] = await catchError(
85
- Promise.resolve().then(
86
- () => JSON.parse(options.data) as unknown,
87
- ),
88
- );
89
- if (parseError) {
90
- OutputFormatter.error({
91
- Result: RESULTS.Failure,
92
- Message: "Invalid JSON in --data",
93
- Instructions: extractErrorMessageSync(parseError),
94
- });
95
- processContext.exit(1);
96
- return;
97
- }
98
- if (
99
- typeof parsedData !== "object" ||
100
- parsedData === null ||
101
- Array.isArray(parsedData)
102
- ) {
103
- OutputFormatter.error({
104
- Result: RESULTS.Failure,
105
- Message: "--data must be a JSON object",
106
- Instructions:
107
- 'Provide a JSON object, e.g. \'{"field":"value"}\'.',
108
- });
109
- processContext.exit(1);
110
- return;
111
- }
112
-
113
- const [saveError] = await catchError(
114
- sdk.tasks.saveData(
115
- parsedTaskId,
116
- parsedData as Record<string, unknown>,
117
- { folderId },
118
- ),
119
- );
120
- if (saveError) {
121
- OutputFormatter.error({
122
- Result: RESULTS.Failure,
123
- Message: `Error saving data for task '${taskId}'`,
124
- Instructions: await extractErrorMessage(saveError),
125
- });
126
- processContext.exit(1);
127
- return;
128
- }
129
-
130
- OutputFormatter.success({
131
- Result: RESULTS.Success,
132
- Code: "TaskDataSaved",
133
- Data: { taskId: parsedTaskId },
134
- });
135
- },
136
- );
137
- };
@@ -1,93 +0,0 @@
1
- import {
2
- catchError,
3
- extractErrorMessage,
4
- extractErrorMessageSync,
5
- OutputFormatter,
6
- processContext,
7
- RESULTS,
8
- } from "@uipath/common";
9
- import type { Tag } from "@uipath/uipath-typescript";
10
- import type { Command } from "commander";
11
-
12
- import { connectTasksClient } from "./_shared/connect";
13
- import {
14
- addFolderScopeOptions,
15
- type FolderScopeOptions,
16
- resolveFolderId,
17
- } from "./_shared/folder-picker";
18
- import { parseIntArg } from "./_shared/parse";
19
-
20
- interface LabelsOptions extends FolderScopeOptions {
21
- labels: string;
22
- }
23
-
24
- export const registerLabelsCommand = (program: Command) => {
25
- addFolderScopeOptions(
26
- program
27
- .command("labels")
28
- .description("Set or clear the labels on a task")
29
- .argument("<task-id>", "Task ID")
30
- .requiredOption(
31
- "--labels <json>",
32
- 'Labels as a JSON array, e.g. \'[{"name":"region","displayName":"Region","displayValue":"EMEA"}]\' (use \'[]\' to clear)',
33
- ),
34
- ).trackedAction(
35
- processContext,
36
- async (taskId: string, options: LabelsOptions) => {
37
- const sdk = await connectTasksClient();
38
- if (!sdk) return;
39
-
40
- const parsedTaskId = parseIntArg(taskId, "<task-id>");
41
- if (parsedTaskId === null) return;
42
-
43
- const folderId = await resolveFolderId(options);
44
- if (folderId === null) return;
45
-
46
- const [parseError, parsedLabels] = await catchError(
47
- Promise.resolve().then(
48
- () => JSON.parse(options.labels) as unknown,
49
- ),
50
- );
51
- if (parseError) {
52
- OutputFormatter.error({
53
- Result: RESULTS.Failure,
54
- Message: "Invalid JSON in --labels",
55
- Instructions: extractErrorMessageSync(parseError),
56
- });
57
- processContext.exit(1);
58
- return;
59
- }
60
- if (!Array.isArray(parsedLabels)) {
61
- OutputFormatter.error({
62
- Result: RESULTS.Failure,
63
- Message: "--labels must be a JSON array",
64
- Instructions:
65
- 'Provide a JSON array of labels, e.g. \'[{"name":"region","displayName":"Region","displayValue":"EMEA"}]\'.',
66
- });
67
- processContext.exit(1);
68
- return;
69
- }
70
-
71
- const [saveError] = await catchError(
72
- sdk.tasks.saveTags(parsedTaskId, parsedLabels as Tag[], {
73
- folderId,
74
- }),
75
- );
76
- if (saveError) {
77
- OutputFormatter.error({
78
- Result: RESULTS.Failure,
79
- Message: `Error saving labels on task '${taskId}'`,
80
- Instructions: await extractErrorMessage(saveError),
81
- });
82
- processContext.exit(1);
83
- return;
84
- }
85
-
86
- OutputFormatter.success({
87
- Result: RESULTS.Success,
88
- Code: "TaskLabelsSaved",
89
- Data: { taskId: parsedTaskId, labels: parsedLabels },
90
- });
91
- },
92
- );
93
- };