@forge/teamwork-graph 3.0.3-next.0 → 3.1.0-next.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.
package/README.md CHANGED
@@ -200,6 +200,78 @@ const deleteGroupsResult = await graph.deleteGroupsByExternalId({
200
200
  });
201
201
  ```
202
202
 
203
+ ### Orchestration
204
+
205
+ ```typescript
206
+ import { graph } from '@forge/teamwork-graph';
207
+
208
+ // Schedule or update a task
209
+ const scheduleResult = await graph.scheduleOrUpdateTask({
210
+ connectionId: 'data-source:connection-123',
211
+ scheduleInterval: {
212
+ value: 30,
213
+ timeUnit: 'minutes'
214
+ },
215
+ task: {
216
+ taskType: 'data-sync',
217
+ taskId: '550e8400-e29b-41d4-a716-446655440000'
218
+ }
219
+ });
220
+
221
+ if (scheduleResult.status === 'ACCEPTED') {
222
+ console.log('Task scheduled successfully:', scheduleResult.taskId);
223
+ } else if (scheduleResult.error) {
224
+ console.error('Failed to schedule task:', scheduleResult.error);
225
+ }
226
+
227
+ // Schedule a child task
228
+ const childTaskResult = await graph.scheduleChildTask({
229
+ scanId: 'scan-123',
230
+ taskExecutionId: 'execution-456',
231
+ connectionId: 'data-source:connection-789',
232
+ task: {
233
+ parentTaskId: '550e8400-e29b-41d4-a716-446655440000',
234
+ taskType: 'data-sync',
235
+ taskId: '550e8400-e29b-41d4-a716-446655440001'
236
+ }
237
+ });
238
+
239
+ if (childTaskResult.status === 'ACCEPTED') {
240
+ console.log('Child task scheduled successfully');
241
+ } else if (childTaskResult.error) {
242
+ console.error('Failed to schedule child task:', childTaskResult.error);
243
+ }
244
+
245
+ // Update task status
246
+ const statusUpdateResult = await graph.updateTaskStatus({
247
+ scanId: 'scan-456',
248
+ taskExecutionId: 'execution-789',
249
+ connectionId: 'data-source:connection-123',
250
+ status: 'success',
251
+ task: {
252
+ taskId: '550e8400-e29b-41d4-a716-446655440002'
253
+ }
254
+ });
255
+
256
+ if (statusUpdateResult.status === 'ACCEPTED') {
257
+ console.log('Task status updated successfully');
258
+ } else if (statusUpdateResult.error) {
259
+ console.error('Failed to update task status:', statusUpdateResult.error);
260
+ }
261
+
262
+ // Update task status with failure reason
263
+ const failureStatusResult = await graph.updateTaskStatus({
264
+ scanId: 'scan-456',
265
+ taskExecutionId: 'execution-789',
266
+ connectionId: 'data-source:connection-123',
267
+ status: 'failure',
268
+ task: {
269
+ taskId: '550e8400-e29b-41d4-a716-446655440002'
270
+ },
271
+ failureReason: 'RETRY_LIMIT_EXCEEDED'
272
+ });
273
+ ```
274
+
203
275
  ## Error Handling
204
276
 
205
277
  The SDK provides comprehensive error handling with consistent error responses and access to original error objects for debugging.
@@ -299,6 +371,18 @@ import type {
299
371
  GetGroupByExternalIdRequest,
300
372
  GetGroupByExternalIdResponse,
301
373
 
374
+ // Orchestration types
375
+ ScheduleInterval,
376
+ Task,
377
+ ChildTask,
378
+ TaskStatusUpdateTask,
379
+ TaskScheduleRequest,
380
+ TaskScheduleResponse,
381
+ ChildTaskScheduleRequest,
382
+ ChildTaskScheduleResponse,
383
+ TaskStatusUpdateRequest,
384
+ TaskStatusUpdateResponse,
385
+
302
386
  // Common types
303
387
  DeleteObjectsByExternalIdRequest,
304
388
  DeleteObjectsByExternalIdResponse,
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task-management.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-management.test.d.ts","sourceRoot":"","sources":["../../src/__test__/task-management.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,420 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const api_1 = require("@forge/api");
4
+ const graph_1 = require("../graph");
5
+ const endpoints_1 = require("../utils/endpoints");
6
+ jest.mock('@forge/api');
7
+ describe('TeamWorkGraphClient - Task Management APIs', () => {
8
+ let graphClient;
9
+ let mockFetch;
10
+ beforeEach(() => {
11
+ graphClient = new graph_1.TeamWorkGraphClient();
12
+ mockFetch = jest.fn();
13
+ api_1.__fetchProduct.mockReturnValue(mockFetch);
14
+ jest.clearAllMocks();
15
+ });
16
+ describe('scheduleOrUpdateTask', () => {
17
+ const validScheduleInterval = {
18
+ value: 30,
19
+ timeUnit: 'minutes'
20
+ };
21
+ const validTask = {
22
+ taskType: 'data-sync',
23
+ taskId: '550e8400-e29b-41d4-a716-446655440000'
24
+ };
25
+ const validRequest = {
26
+ connectionId: 'data-source:connection-123',
27
+ scheduleInterval: validScheduleInterval,
28
+ task: validTask
29
+ };
30
+ it('should successfully schedule a task', async () => {
31
+ const mockResponse = {
32
+ status: 'ACCEPTED',
33
+ message: 'Task scheduled successfully',
34
+ taskId: '550e8400-e29b-41d4-a716-446655440000'
35
+ };
36
+ const expectedResponse = {
37
+ status: 'ACCEPTED',
38
+ message: 'Task scheduled successfully',
39
+ taskId: '550e8400-e29b-41d4-a716-446655440000'
40
+ };
41
+ mockFetch.mockResolvedValueOnce({
42
+ ok: true,
43
+ json: () => Promise.resolve(mockResponse)
44
+ });
45
+ const result = await graphClient.scheduleOrUpdateTask(validRequest);
46
+ expect(mockFetch).toHaveBeenCalledWith((0, endpoints_1.getFullPath)(endpoints_1.ENDPOINTS.ORCHESTRATION.TASK_SCHEDULE), {
47
+ method: 'PUT',
48
+ body: JSON.stringify({
49
+ connectionId: 'data-source:connection-123',
50
+ scheduleInterval: validScheduleInterval,
51
+ task: validTask
52
+ }),
53
+ redirect: 'follow',
54
+ headers: {
55
+ 'Atl-Connection-Id': 'data-source:connection-123',
56
+ 'Content-Type': 'application/json'
57
+ }
58
+ });
59
+ expect(result).toEqual(expectedResponse);
60
+ });
61
+ it('should handle API error response', async () => {
62
+ const errorResponse = {
63
+ ok: false,
64
+ status: 400,
65
+ statusText: 'Bad Request',
66
+ headers: {
67
+ get: () => null
68
+ },
69
+ json: () => Promise.resolve({
70
+ code: 'INVALID_REQUEST',
71
+ message: 'Invalid task schedule request'
72
+ })
73
+ };
74
+ mockFetch.mockResolvedValueOnce(errorResponse);
75
+ const result = await graphClient.scheduleOrUpdateTask(validRequest);
76
+ expect(result).toEqual({
77
+ success: false,
78
+ error: 'Failed to schedule task: Bad Request - Invalid task schedule request',
79
+ originalError: expect.any(Error)
80
+ });
81
+ });
82
+ it('should throw validation error for missing connectionId', async () => {
83
+ const invalidRequest = {
84
+ ...validRequest,
85
+ connectionId: ''
86
+ };
87
+ await expect(graphClient.scheduleOrUpdateTask(invalidRequest)).rejects.toThrow('connectionId is required');
88
+ });
89
+ it('should throw validation error for invalid schedule interval value', async () => {
90
+ const invalidRequest = {
91
+ ...validRequest,
92
+ scheduleInterval: {
93
+ value: 0,
94
+ timeUnit: 'minutes'
95
+ }
96
+ };
97
+ await expect(graphClient.scheduleOrUpdateTask(invalidRequest)).rejects.toThrow('scheduleInterval.value must be between 1 and 60');
98
+ });
99
+ it('should throw validation error for invalid schedule interval timeUnit', async () => {
100
+ const invalidRequest = {
101
+ ...validRequest,
102
+ scheduleInterval: {
103
+ value: 30,
104
+ timeUnit: 'invalid'
105
+ }
106
+ };
107
+ await expect(graphClient.scheduleOrUpdateTask(invalidRequest)).rejects.toThrow('scheduleInterval.timeUnit must be one of: minutes, hours, days');
108
+ });
109
+ it('should throw validation error for missing task type', async () => {
110
+ const invalidRequest = {
111
+ ...validRequest,
112
+ task: {
113
+ ...validTask,
114
+ taskType: ''
115
+ }
116
+ };
117
+ await expect(graphClient.scheduleOrUpdateTask(invalidRequest)).rejects.toThrow('task.taskType is required');
118
+ });
119
+ it('should throw validation error for invalid task ID format', async () => {
120
+ const invalidRequest = {
121
+ ...validRequest,
122
+ task: {
123
+ ...validTask,
124
+ taskId: 'invalid-uuid'
125
+ }
126
+ };
127
+ await expect(graphClient.scheduleOrUpdateTask(invalidRequest)).rejects.toThrow('task.taskId must be a valid UUID');
128
+ });
129
+ it('should throw validation error for task type exceeding max length', async () => {
130
+ const longTaskType = 'a'.repeat(256);
131
+ const invalidRequest = {
132
+ ...validRequest,
133
+ task: {
134
+ ...validTask,
135
+ taskType: longTaskType
136
+ }
137
+ };
138
+ await expect(graphClient.scheduleOrUpdateTask(invalidRequest)).rejects.toThrow('task.taskType must not exceed 255 characters');
139
+ });
140
+ });
141
+ describe('scheduleChildTask', () => {
142
+ const validChildTask = {
143
+ parentTaskId: 'parent-task-123',
144
+ taskType: 'child-data-sync',
145
+ taskId: '550e8400-e29b-41d4-a716-446655440001'
146
+ };
147
+ const validRequest = {
148
+ scanId: 'scan-123',
149
+ taskExecutionId: 'execution-456',
150
+ connectionId: 'data-source:connection-789',
151
+ task: validChildTask
152
+ };
153
+ it('should successfully schedule a child task', async () => {
154
+ const mockResponse = {
155
+ status: 'ACCEPTED',
156
+ message: 'Child task scheduled successfully'
157
+ };
158
+ const expectedResponse = {
159
+ status: 'ACCEPTED',
160
+ message: 'Child task scheduled successfully'
161
+ };
162
+ mockFetch.mockResolvedValueOnce({
163
+ ok: true,
164
+ json: () => Promise.resolve(mockResponse)
165
+ });
166
+ const result = await graphClient.scheduleChildTask(validRequest);
167
+ expect(mockFetch).toHaveBeenCalledWith((0, endpoints_1.getFullPath)('/scan/scan-123/taskExecution/execution-456/schedule'), {
168
+ method: 'POST',
169
+ body: JSON.stringify({
170
+ connectionId: 'data-source:connection-789',
171
+ task: validChildTask
172
+ }),
173
+ redirect: 'follow',
174
+ headers: {
175
+ 'Atl-Connection-Id': 'data-source:connection-789',
176
+ 'Content-Type': 'application/json'
177
+ }
178
+ });
179
+ expect(result).toEqual(expectedResponse);
180
+ });
181
+ it('should handle API error response', async () => {
182
+ const errorResponse = {
183
+ ok: false,
184
+ status: 404,
185
+ statusText: 'Not Found',
186
+ headers: {
187
+ get: () => null
188
+ },
189
+ json: () => Promise.resolve({
190
+ code: 'SCAN_NOT_FOUND',
191
+ message: 'Scan not found'
192
+ })
193
+ };
194
+ mockFetch.mockResolvedValueOnce(errorResponse);
195
+ const result = await graphClient.scheduleChildTask(validRequest);
196
+ expect(result).toEqual({
197
+ success: false,
198
+ error: 'Failed to schedule child tasks: Not Found - Scan not found',
199
+ originalError: expect.any(Error)
200
+ });
201
+ });
202
+ it('should throw validation error for missing connectionId', async () => {
203
+ const invalidRequest = {
204
+ ...validRequest,
205
+ connectionId: ''
206
+ };
207
+ await expect(graphClient.scheduleChildTask(invalidRequest)).rejects.toThrow('connectionId is required');
208
+ });
209
+ it('should throw validation error for missing parent task ID', async () => {
210
+ const invalidRequest = {
211
+ ...validRequest,
212
+ task: {
213
+ ...validChildTask,
214
+ parentTaskId: ''
215
+ }
216
+ };
217
+ await expect(graphClient.scheduleChildTask(invalidRequest)).rejects.toThrow('task.parentTaskId is required');
218
+ });
219
+ it('should throw validation error for missing task type', async () => {
220
+ const invalidRequest = {
221
+ ...validRequest,
222
+ task: {
223
+ ...validChildTask,
224
+ taskType: ''
225
+ }
226
+ };
227
+ await expect(graphClient.scheduleChildTask(invalidRequest)).rejects.toThrow('task.taskType is required');
228
+ });
229
+ it('should throw validation error for invalid task ID format', async () => {
230
+ const invalidRequest = {
231
+ ...validRequest,
232
+ task: {
233
+ ...validChildTask,
234
+ taskId: 'not-a-uuid'
235
+ }
236
+ };
237
+ await expect(graphClient.scheduleChildTask(invalidRequest)).rejects.toThrow('task.taskId must be a valid UUID');
238
+ });
239
+ it('should throw validation error for task type exceeding max length', async () => {
240
+ const longTaskType = 'a'.repeat(256);
241
+ const invalidRequest = {
242
+ ...validRequest,
243
+ task: {
244
+ ...validChildTask,
245
+ taskType: longTaskType
246
+ }
247
+ };
248
+ await expect(graphClient.scheduleChildTask(invalidRequest)).rejects.toThrow('task.taskType must not exceed 255 characters');
249
+ });
250
+ });
251
+ describe('updateTaskStatus', () => {
252
+ const validTask = {
253
+ taskId: '550e8400-e29b-41d4-a716-446655440002'
254
+ };
255
+ const validRequest = {
256
+ scanId: 'scan-456',
257
+ taskExecutionId: 'execution-789',
258
+ connectionId: 'data-source:connection-123',
259
+ status: 'success',
260
+ task: validTask
261
+ };
262
+ it('should successfully update task status to success', async () => {
263
+ const mockResponse = {
264
+ status: 'ACCEPTED',
265
+ message: 'Task status updated successfully'
266
+ };
267
+ const expectedResponse = {
268
+ status: 'ACCEPTED',
269
+ message: 'Task status updated successfully'
270
+ };
271
+ mockFetch.mockResolvedValueOnce({
272
+ ok: true,
273
+ json: () => Promise.resolve(mockResponse)
274
+ });
275
+ const result = await graphClient.updateTaskStatus(validRequest);
276
+ expect(mockFetch).toHaveBeenCalledWith((0, endpoints_1.getFullPath)('/scan/scan-456/taskExecution/execution-789/status'), {
277
+ method: 'POST',
278
+ body: JSON.stringify({
279
+ connectionId: 'data-source:connection-123',
280
+ status: 'success',
281
+ task: validTask,
282
+ failureReason: undefined
283
+ }),
284
+ redirect: 'follow',
285
+ headers: {
286
+ 'Atl-Connection-Id': 'data-source:connection-123',
287
+ 'Content-Type': 'application/json'
288
+ }
289
+ });
290
+ expect(result).toEqual(expectedResponse);
291
+ });
292
+ it('should successfully update task status to failure with failure reason', async () => {
293
+ const mockResponse = {
294
+ status: 'ACCEPTED',
295
+ message: 'Task status updated successfully'
296
+ };
297
+ const expectedResponse = {
298
+ status: 'ACCEPTED',
299
+ message: 'Task status updated successfully'
300
+ };
301
+ mockFetch.mockResolvedValueOnce({
302
+ ok: true,
303
+ json: () => Promise.resolve(mockResponse)
304
+ });
305
+ const failureRequest = {
306
+ ...validRequest,
307
+ status: 'failure',
308
+ failureReason: 'RETRY_LIMIT_EXCEEDED'
309
+ };
310
+ const result = await graphClient.updateTaskStatus(failureRequest);
311
+ expect(mockFetch).toHaveBeenCalledWith((0, endpoints_1.getFullPath)('/scan/scan-456/taskExecution/execution-789/status'), {
312
+ method: 'POST',
313
+ body: JSON.stringify({
314
+ connectionId: 'data-source:connection-123',
315
+ status: 'failure',
316
+ task: validTask,
317
+ failureReason: 'RETRY_LIMIT_EXCEEDED'
318
+ }),
319
+ redirect: 'follow',
320
+ headers: {
321
+ 'Atl-Connection-Id': 'data-source:connection-123',
322
+ 'Content-Type': 'application/json'
323
+ }
324
+ });
325
+ expect(result).toEqual(expectedResponse);
326
+ });
327
+ it('should handle API error response', async () => {
328
+ const errorResponse = {
329
+ ok: false,
330
+ status: 500,
331
+ statusText: 'Internal Server Error',
332
+ headers: {
333
+ get: () => null
334
+ },
335
+ json: () => Promise.resolve({
336
+ code: 'INTERNAL_ERROR',
337
+ message: 'Internal server error occurred'
338
+ })
339
+ };
340
+ mockFetch.mockResolvedValueOnce(errorResponse);
341
+ const result = await graphClient.updateTaskStatus(validRequest);
342
+ expect(result).toEqual({
343
+ success: false,
344
+ error: 'Failed to update task status: Internal Server Error - Internal server error occurred',
345
+ originalError: expect.any(Error)
346
+ });
347
+ });
348
+ it('should throw validation error for missing connectionId', async () => {
349
+ const invalidRequest = {
350
+ ...validRequest,
351
+ connectionId: ''
352
+ };
353
+ await expect(graphClient.updateTaskStatus(invalidRequest)).rejects.toThrow('connectionId is required');
354
+ });
355
+ it('should throw validation error for invalid status', async () => {
356
+ const invalidRequest = {
357
+ ...validRequest,
358
+ status: 'invalid'
359
+ };
360
+ await expect(graphClient.updateTaskStatus(invalidRequest)).rejects.toThrow('status must be one of: success, failure');
361
+ });
362
+ it('should throw validation error for missing task ID', async () => {
363
+ const invalidRequest = {
364
+ ...validRequest,
365
+ task: {
366
+ taskId: ''
367
+ }
368
+ };
369
+ await expect(graphClient.updateTaskStatus(invalidRequest)).rejects.toThrow('task.taskId is required');
370
+ });
371
+ it('should throw validation error for invalid task ID format', async () => {
372
+ const invalidRequest = {
373
+ ...validRequest,
374
+ task: {
375
+ taskId: 'invalid-uuid-format'
376
+ }
377
+ };
378
+ await expect(graphClient.updateTaskStatus(invalidRequest)).rejects.toThrow('task.taskId must be a valid UUID');
379
+ });
380
+ it('should throw validation error for invalid failure reason', async () => {
381
+ const invalidRequest = {
382
+ ...validRequest,
383
+ status: 'failure',
384
+ failureReason: 'INVALID_REASON'
385
+ };
386
+ await expect(graphClient.updateTaskStatus(invalidRequest)).rejects.toThrow('failureReason must be one of: ENTITY_NOT_FOUND, RETRY_LIMIT_EXCEEDED, NON_RETRYABLE_ERROR, UNAUTHORIZED, AUTH_TOKEN_REVOKED, AUTH_TOKEN_EXPIRED, RATE_LIMITED, RETRYABLE_ERROR');
387
+ });
388
+ it('should accept all valid failure reasons', async () => {
389
+ const validFailureReasons = [
390
+ 'ENTITY_NOT_FOUND',
391
+ 'RETRY_LIMIT_EXCEEDED',
392
+ 'NON_RETRYABLE_ERROR',
393
+ 'UNAUTHORIZED',
394
+ 'AUTH_TOKEN_REVOKED',
395
+ 'AUTH_TOKEN_EXPIRED',
396
+ 'RATE_LIMITED',
397
+ 'RETRYABLE_ERROR'
398
+ ];
399
+ const mockResponse = {
400
+ status: 'ACCEPTED',
401
+ message: 'Task status updated successfully'
402
+ };
403
+ mockFetch.mockResolvedValue({
404
+ ok: true,
405
+ json: () => Promise.resolve(mockResponse)
406
+ });
407
+ for (const failureReason of validFailureReasons) {
408
+ const request = {
409
+ ...validRequest,
410
+ status: 'failure',
411
+ failureReason: failureReason
412
+ };
413
+ await expect(graphClient.updateTaskStatus(request)).resolves.toEqual({
414
+ status: 'ACCEPTED',
415
+ message: 'Task status updated successfully'
416
+ });
417
+ }
418
+ });
419
+ });
420
+ });
@@ -195,4 +195,104 @@ describe('TeamWorkGraphClient - Validators', () => {
195
195
  expect(() => (0, validators_1.validateDeleteObjectsByPropertiesRequest)(properties, null)).toThrow(errors_1.ForgeTeamWorkGraphValidationError);
196
196
  });
197
197
  });
198
+ describe('validateTaskScheduleRequest', () => {
199
+ const validScheduleInterval = {
200
+ value: 30,
201
+ timeUnit: 'minutes'
202
+ };
203
+ const validTask = {
204
+ taskType: 'data-sync',
205
+ taskId: '550e8400-e29b-41d4-a716-446655440000'
206
+ };
207
+ it('should pass with valid request', () => {
208
+ expect(() => (0, validators_1.validateTaskScheduleRequest)('data-source:connection-123', validScheduleInterval, validTask)).not.toThrow();
209
+ });
210
+ it('should throw validation error for empty connectionId', () => {
211
+ expect(() => (0, validators_1.validateTaskScheduleRequest)('', validScheduleInterval, validTask)).toThrow('connectionId is required');
212
+ });
213
+ it('should throw validation error for invalid schedule interval value', () => {
214
+ const invalidInterval = { value: 0, timeUnit: 'minutes' };
215
+ expect(() => (0, validators_1.validateTaskScheduleRequest)('data-source:connection-123', invalidInterval, validTask)).toThrow('scheduleInterval.value must be between 1 and 60');
216
+ });
217
+ it('should throw validation error for invalid schedule interval timeUnit', () => {
218
+ const invalidInterval = { value: 30, timeUnit: 'invalid' };
219
+ expect(() => (0, validators_1.validateTaskScheduleRequest)('data-source:connection-123', invalidInterval, validTask)).toThrow('scheduleInterval.timeUnit must be one of: minutes, hours, days');
220
+ });
221
+ it('should throw validation error for missing task type', () => {
222
+ const invalidTask = { ...validTask, taskType: '' };
223
+ expect(() => (0, validators_1.validateTaskScheduleRequest)('data-source:connection-123', validScheduleInterval, invalidTask)).toThrow('task.taskType is required');
224
+ });
225
+ it('should throw validation error for invalid task ID format', () => {
226
+ const invalidTask = { ...validTask, taskId: 'invalid-uuid' };
227
+ expect(() => (0, validators_1.validateTaskScheduleRequest)('data-source:connection-123', validScheduleInterval, invalidTask)).toThrow('task.taskId must be a valid UUID');
228
+ });
229
+ });
230
+ describe('validateChildTaskScheduleRequest', () => {
231
+ const validTask = {
232
+ parentTaskId: 'parent-task-123',
233
+ taskType: 'child-data-sync',
234
+ taskId: '550e8400-e29b-41d4-a716-446655440001'
235
+ };
236
+ it('should pass with valid request', () => {
237
+ expect(() => (0, validators_1.validateChildTaskScheduleRequest)('data-source:connection-123', validTask)).not.toThrow();
238
+ });
239
+ it('should throw validation error for empty connectionId', () => {
240
+ expect(() => (0, validators_1.validateChildTaskScheduleRequest)('', validTask)).toThrow('connectionId is required');
241
+ });
242
+ it('should throw validation error for missing parent task ID', () => {
243
+ const invalidTask = { ...validTask, parentTaskId: '' };
244
+ expect(() => (0, validators_1.validateChildTaskScheduleRequest)('data-source:connection-123', invalidTask)).toThrow('task.parentTaskId is required');
245
+ });
246
+ it('should throw validation error for missing task type', () => {
247
+ const invalidTask = { ...validTask, taskType: '' };
248
+ expect(() => (0, validators_1.validateChildTaskScheduleRequest)('data-source:connection-123', invalidTask)).toThrow('task.taskType is required');
249
+ });
250
+ it('should throw validation error for invalid task ID format', () => {
251
+ const invalidTask = { ...validTask, taskId: 'not-a-uuid' };
252
+ expect(() => (0, validators_1.validateChildTaskScheduleRequest)('data-source:connection-123', invalidTask)).toThrow('task.taskId must be a valid UUID');
253
+ });
254
+ });
255
+ describe('validateTaskStatusUpdateRequest', () => {
256
+ const validTask = {
257
+ taskId: '550e8400-e29b-41d4-a716-446655440002'
258
+ };
259
+ it('should pass with valid success request', () => {
260
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('data-source:connection-123', 'success', validTask)).not.toThrow();
261
+ });
262
+ it('should pass with valid failure request and failure reason', () => {
263
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('data-source:connection-123', 'failure', validTask, 'RETRY_LIMIT_EXCEEDED')).not.toThrow();
264
+ });
265
+ it('should throw validation error for empty connectionId', () => {
266
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('', 'success', validTask)).toThrow('connectionId is required');
267
+ });
268
+ it('should throw validation error for invalid status', () => {
269
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('data-source:connection-123', 'invalid', validTask)).toThrow('status must be one of: success, failure');
270
+ });
271
+ it('should throw validation error for missing task ID', () => {
272
+ const invalidTask = { taskId: '' };
273
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('data-source:connection-123', 'success', invalidTask)).toThrow('task.taskId is required');
274
+ });
275
+ it('should throw validation error for invalid task ID format', () => {
276
+ const invalidTask = { taskId: 'invalid-uuid-format' };
277
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('data-source:connection-123', 'success', invalidTask)).toThrow('task.taskId must be a valid UUID');
278
+ });
279
+ it('should throw validation error for invalid failure reason', () => {
280
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('data-source:connection-123', 'failure', validTask, 'INVALID_REASON')).toThrow('failureReason must be one of: ENTITY_NOT_FOUND, RETRY_LIMIT_EXCEEDED, NON_RETRYABLE_ERROR, UNAUTHORIZED, AUTH_TOKEN_REVOKED, AUTH_TOKEN_EXPIRED, RATE_LIMITED, RETRYABLE_ERROR');
281
+ });
282
+ it('should accept all valid failure reasons', () => {
283
+ const validFailureReasons = [
284
+ 'ENTITY_NOT_FOUND',
285
+ 'RETRY_LIMIT_EXCEEDED',
286
+ 'NON_RETRYABLE_ERROR',
287
+ 'UNAUTHORIZED',
288
+ 'AUTH_TOKEN_REVOKED',
289
+ 'AUTH_TOKEN_EXPIRED',
290
+ 'RATE_LIMITED',
291
+ 'RETRYABLE_ERROR'
292
+ ];
293
+ validFailureReasons.forEach((reason) => {
294
+ expect(() => (0, validators_1.validateTaskStatusUpdateRequest)('data-source:connection-123', 'failure', validTask, reason)).not.toThrow();
295
+ });
296
+ });
297
+ });
198
298
  });
package/out/graph.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { TeamWorkGraph, SetObjectsRequest, BulkObjectResponse, BulkUsersRequest, BulkUsersResponse, DeleteUsersByExternalIdRequest, DeleteUsersByExternalIdResponse, GetUserByExternalIdRequest, GetUserByExternalIdResponse, MapUsersRequest, MapUsersResponse, BulkGroupsRequest, BulkGroupsResponse, DeleteGroupsByExternalIdRequest, DeleteGroupsByExternalIdResponse, GetGroupByExternalIdRequest, GetGroupByExternalIdResponse, GetObjectByExternalIdRequest, GetObjectByExternalIdResponse, DeleteObjectsByExternalIdRequest, DeleteObjectsByExternalIdResponse, DeleteObjectsByPropertiesRequest, DeleteObjectsByPropertiesResponse } from './types';
1
+ import { TeamWorkGraph, SetObjectsRequest, BulkObjectResponse, BulkUsersRequest, BulkUsersResponse, DeleteUsersByExternalIdRequest, DeleteUsersByExternalIdResponse, GetUserByExternalIdRequest, GetUserByExternalIdResponse, MapUsersRequest, MapUsersResponse, BulkGroupsRequest, BulkGroupsResponse, DeleteGroupsByExternalIdRequest, DeleteGroupsByExternalIdResponse, GetGroupByExternalIdRequest, GetGroupByExternalIdResponse, GetObjectByExternalIdRequest, GetObjectByExternalIdResponse, DeleteObjectsByExternalIdRequest, DeleteObjectsByExternalIdResponse, DeleteObjectsByPropertiesRequest, DeleteObjectsByPropertiesResponse, TaskScheduleRequest, TaskScheduleResponse, ChildTaskScheduleRequest, ChildTaskScheduleResponse, TaskStatusUpdateRequest, TaskStatusUpdateResponse } from './types';
2
2
  export declare class TeamWorkGraphClient implements TeamWorkGraph {
3
3
  setObjects: (request: SetObjectsRequest) => Promise<BulkObjectResponse>;
4
4
  getObjectByExternalId: (request: GetObjectByExternalIdRequest) => Promise<GetObjectByExternalIdResponse>;
@@ -11,6 +11,9 @@ export declare class TeamWorkGraphClient implements TeamWorkGraph {
11
11
  deleteUsersByExternalId: (request: DeleteUsersByExternalIdRequest) => Promise<DeleteUsersByExternalIdResponse>;
12
12
  getUserByExternalId: (request: GetUserByExternalIdRequest) => Promise<GetUserByExternalIdResponse>;
13
13
  mapUsers: (request: MapUsersRequest) => Promise<MapUsersResponse>;
14
+ scheduleOrUpdateTask: (request: TaskScheduleRequest) => Promise<TaskScheduleResponse>;
15
+ scheduleChildTask: (request: ChildTaskScheduleRequest) => Promise<ChildTaskScheduleResponse>;
16
+ updateTaskStatus: (request: TaskStatusUpdateRequest) => Promise<TaskStatusUpdateResponse>;
14
17
  private sendRequest;
15
18
  }
16
19
  export declare const teamworkgraph: TeamWorkGraphClient;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AAEjB,qBAAa,mBAAoB,YAAW,aAAa;IACvD,UAAU,YAAmB,iBAAiB,KAAG,QAAQ,kBAAkB,CAAC,CAwB1E;IAKF,qBAAqB,YAAmB,4BAA4B,KAAG,QAAQ,6BAA6B,CAAC,CAwB3G;IAKF,yBAAyB,YACd,gCAAgC,KACxC,QAAQ,iCAAiC,CAAC,CAmB3C;IAKF,yBAAyB,YACd,gCAAgC,KACxC,QAAQ,iCAAiC,CAAC,CAsB3C;IAKF,SAAS,YAAmB,iBAAiB,KAAG,QAAQ,kBAAkB,CAAC,CAuBzE;IAKF,wBAAwB,YACb,+BAA+B,KACvC,QAAQ,gCAAgC,CAAC,CAoB1C;IAKF,oBAAoB,YAAmB,2BAA2B,KAAG,QAAQ,4BAA4B,CAAC,CAoBxG;IAEF,QAAQ,YAAmB,gBAAgB,KAAG,QAAQ,iBAAiB,CAAC,CAwBtE;IAEF,uBAAuB,YACZ,8BAA8B,KACtC,QAAQ,+BAA+B,CAAC,CAoBzC;IAEF,mBAAmB,YAAmB,0BAA0B,KAAG,QAAQ,2BAA2B,CAAC,CAoBrG;IAEF,QAAQ,YAAmB,eAAe,KAAG,QAAQ,gBAAgB,CAAC,CAuBpE;YAEY,WAAW;CAiC1B;AAED,eAAO,MAAM,aAAa,qBAA4B,CAAC"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAoBA,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,iCAAiC,EACjC,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,SAAS,CAAC;AAEjB,qBAAa,mBAAoB,YAAW,aAAa;IACvD,UAAU,YAAmB,iBAAiB,KAAG,QAAQ,kBAAkB,CAAC,CAwB1E;IAKF,qBAAqB,YAAmB,4BAA4B,KAAG,QAAQ,6BAA6B,CAAC,CAwB3G;IAKF,yBAAyB,YACd,gCAAgC,KACxC,QAAQ,iCAAiC,CAAC,CAmB3C;IAKF,yBAAyB,YACd,gCAAgC,KACxC,QAAQ,iCAAiC,CAAC,CAsB3C;IAKF,SAAS,YAAmB,iBAAiB,KAAG,QAAQ,kBAAkB,CAAC,CAuBzE;IAKF,wBAAwB,YACb,+BAA+B,KACvC,QAAQ,gCAAgC,CAAC,CAoB1C;IAKF,oBAAoB,YAAmB,2BAA2B,KAAG,QAAQ,4BAA4B,CAAC,CAoBxG;IAEF,QAAQ,YAAmB,gBAAgB,KAAG,QAAQ,iBAAiB,CAAC,CAwBtE;IAEF,uBAAuB,YACZ,8BAA8B,KACtC,QAAQ,+BAA+B,CAAC,CAoBzC;IAEF,mBAAmB,YAAmB,0BAA0B,KAAG,QAAQ,2BAA2B,CAAC,CAoBrG;IAEF,QAAQ,YAAmB,eAAe,KAAG,QAAQ,gBAAgB,CAAC,CAuBpE;IAOF,oBAAoB,YAAmB,mBAAmB,KAAG,QAAQ,oBAAoB,CAAC,CAyBxF;IAKF,iBAAiB,YAAmB,wBAAwB,KAAG,QAAQ,yBAAyB,CAAC,CA4B/F;IAKF,gBAAgB,YAAmB,uBAAuB,KAAG,QAAQ,wBAAwB,CAAC,CA6B5F;YAEY,WAAW;CAiC1B;AAED,eAAO,MAAM,aAAa,qBAA4B,CAAC"}
package/out/graph.js CHANGED
@@ -212,6 +212,72 @@ class TeamWorkGraphClient {
212
212
  return (0, error_handling_1.handleError)(error, 'map users');
213
213
  }
214
214
  };
215
+ scheduleOrUpdateTask = async (request) => {
216
+ const { scheduleInterval, task, connectionId } = request;
217
+ (0, validators_1.validateTaskScheduleRequest)(connectionId, scheduleInterval, task);
218
+ try {
219
+ const response = await this.sendRequest(endpoints_1.ENDPOINTS.ORCHESTRATION.TASK_SCHEDULE, {
220
+ method: 'PUT',
221
+ body: JSON.stringify({
222
+ connectionId,
223
+ scheduleInterval,
224
+ task
225
+ })
226
+ }, connectionId);
227
+ return {
228
+ status: response.status || 'ACCEPTED',
229
+ message: response.message || 'Task scheduled successfully',
230
+ taskId: response.taskId
231
+ };
232
+ }
233
+ catch (error) {
234
+ return (0, error_handling_1.handleError)(error, 'schedule task');
235
+ }
236
+ };
237
+ scheduleChildTask = async (request) => {
238
+ const { scanId, taskExecutionId, task, connectionId } = request;
239
+ (0, validators_1.validateChildTaskScheduleRequest)(connectionId, task);
240
+ try {
241
+ const endpoint = endpoints_1.ENDPOINTS.ORCHESTRATION.CHILD_TASK_SCHEDULE.replace('{scanId}', scanId).replace('{taskExecutionId}', taskExecutionId);
242
+ const response = await this.sendRequest(endpoint, {
243
+ method: 'POST',
244
+ body: JSON.stringify({
245
+ connectionId,
246
+ task
247
+ })
248
+ }, connectionId);
249
+ return {
250
+ status: response.status || 'ACCEPTED',
251
+ message: response.message || 'Child task scheduled successfully'
252
+ };
253
+ }
254
+ catch (error) {
255
+ return (0, error_handling_1.handleError)(error, 'schedule child tasks');
256
+ }
257
+ };
258
+ updateTaskStatus = async (request) => {
259
+ const { scanId, taskExecutionId, status, task, failureReason, connectionId } = request;
260
+ (0, validators_1.validateTaskStatusUpdateRequest)(connectionId, status, task, failureReason);
261
+ const endpoint = endpoints_1.ENDPOINTS.ORCHESTRATION.TASK_STATUS_UPDATE.replace('{scanId}', scanId).replace('{taskExecutionId}', taskExecutionId);
262
+ try {
263
+ const response = await this.sendRequest(endpoint, {
264
+ method: 'POST',
265
+ body: JSON.stringify({
266
+ connectionId,
267
+ status,
268
+ task,
269
+ failureReason
270
+ })
271
+ }, connectionId);
272
+ return {
273
+ status: response.status || 'ACCEPTED',
274
+ message: response.message || 'Task status updated successfully'
275
+ };
276
+ }
277
+ catch (error) {
278
+ return (0, error_handling_1.handleError)(error, 'update task status');
279
+ }
280
+ };
215
281
  async sendRequest(path, options, connectionId) {
216
282
  try {
217
283
  const reqPath = (0, endpoints_1.getFullPath)(path);
@@ -1,4 +1,4 @@
1
- import { SetObjectsRequest, BulkObjectResponse, BulkUsersRequest, BulkUsersResponse, DeleteUsersByExternalIdRequest, DeleteUsersByExternalIdResponse, GetUserByExternalIdRequest, GetUserByExternalIdResponse, MapUsersRequest, MapUsersResponse, BulkGroupsRequest, BulkGroupsResponse, DeleteGroupsByExternalIdRequest, DeleteGroupsByExternalIdResponse, GetGroupByExternalIdRequest, GetGroupByExternalIdResponse, GetObjectByExternalIdRequest, GetObjectByExternalIdResponse, DeleteObjectsByExternalIdRequest, DeleteObjectsByExternalIdResponse, DeleteObjectsByPropertiesRequest, DeleteObjectsByPropertiesResponse } from './';
1
+ import { SetObjectsRequest, BulkObjectResponse, BulkUsersRequest, BulkUsersResponse, DeleteUsersByExternalIdRequest, DeleteUsersByExternalIdResponse, GetUserByExternalIdRequest, GetUserByExternalIdResponse, MapUsersRequest, MapUsersResponse, BulkGroupsRequest, BulkGroupsResponse, DeleteGroupsByExternalIdRequest, DeleteGroupsByExternalIdResponse, GetGroupByExternalIdRequest, GetGroupByExternalIdResponse, GetObjectByExternalIdRequest, GetObjectByExternalIdResponse, DeleteObjectsByExternalIdRequest, DeleteObjectsByExternalIdResponse, DeleteObjectsByPropertiesRequest, DeleteObjectsByPropertiesResponse, TaskScheduleRequest, TaskScheduleResponse, ChildTaskScheduleRequest, ChildTaskScheduleResponse, TaskStatusUpdateRequest, TaskStatusUpdateResponse } from './';
2
2
  export interface TeamWorkGraph {
3
3
  setObjects(request: SetObjectsRequest): Promise<BulkObjectResponse>;
4
4
  getObjectByExternalId(request: GetObjectByExternalIdRequest): Promise<GetObjectByExternalIdResponse>;
@@ -11,5 +11,8 @@ export interface TeamWorkGraph {
11
11
  setGroups(request: BulkGroupsRequest): Promise<BulkGroupsResponse>;
12
12
  deleteGroupsByExternalId(request: DeleteGroupsByExternalIdRequest): Promise<DeleteGroupsByExternalIdResponse>;
13
13
  getGroupByExternalId(request: GetGroupByExternalIdRequest): Promise<GetGroupByExternalIdResponse>;
14
+ scheduleOrUpdateTask(request: TaskScheduleRequest): Promise<TaskScheduleResponse>;
15
+ scheduleChildTask(request: ChildTaskScheduleRequest): Promise<ChildTaskScheduleResponse>;
16
+ updateTaskStatus(request: TaskStatusUpdateRequest): Promise<TaskStatusUpdateResponse>;
14
17
  }
15
18
  //# sourceMappingURL=graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/types/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,iCAAiC,EAClC,MAAM,IAAI,CAAC;AAEZ,MAAM,WAAW,aAAa;IAE5B,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACrG,yBAAyB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACjH,yBAAyB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAGjH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChE,uBAAuB,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC3G,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC/F,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAG9D,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC9G,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;CACnG"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/types/graph.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,+BAA+B,EAC/B,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,iCAAiC,EACjC,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,IAAI,CAAC;AAEZ,MAAM,WAAW,aAAa;IAE5B,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACpE,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAC;IACrG,yBAAyB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACjH,yBAAyB,CAAC,OAAO,EAAE,gCAAgC,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;IAGjH,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChE,uBAAuB,CAAC,OAAO,EAAE,8BAA8B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC3G,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC/F,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAG9D,SAAS,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnE,wBAAwB,CAAC,OAAO,EAAE,+BAA+B,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC9G,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAGlG,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAClF,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACzF,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACvF"}
@@ -3,5 +3,6 @@ export * from './objects';
3
3
  export * from './requests';
4
4
  export * from './users';
5
5
  export * from './groups';
6
+ export * from './orchestration';
6
7
  export * from './graph';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAEzB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAGjC,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,iBAAiB,CAAC;AAEhC,cAAc,SAAS,CAAC"}
@@ -6,4 +6,5 @@ tslib_1.__exportStar(require("./objects"), exports);
6
6
  tslib_1.__exportStar(require("./requests"), exports);
7
7
  tslib_1.__exportStar(require("./users"), exports);
8
8
  tslib_1.__exportStar(require("./groups"), exports);
9
+ tslib_1.__exportStar(require("./orchestration"), exports);
9
10
  tslib_1.__exportStar(require("./graph"), exports);
@@ -0,0 +1,19 @@
1
+ export declare type ScheduleInterval = {
2
+ value: number;
3
+ timeUnit: 'minutes' | 'hours' | 'days';
4
+ };
5
+ export declare type Task = {
6
+ taskType: string;
7
+ taskId: string;
8
+ };
9
+ export declare type ChildTask = {
10
+ parentTaskId: string;
11
+ taskType: string;
12
+ taskId: string;
13
+ temporalTaskMetadata?: any;
14
+ persistentTaskMetadata?: any;
15
+ };
16
+ export declare type TaskStatusUpdateTask = {
17
+ taskId: string;
18
+ };
19
+ //# sourceMappingURL=orchestration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration.d.ts","sourceRoot":"","sources":["../../src/types/orchestration.ts"],"names":[],"mappings":"AAEA,oBAAY,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;CACxC,CAAC;AAEF,oBAAY,IAAI,GAAG;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,SAAS,GAAG;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,GAAG,CAAC;IAC3B,sBAAsB,CAAC,EAAE,GAAG,CAAC;CAC9B,CAAC;AAEF,oBAAY,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,4 +1,4 @@
1
- import { Object, UserPayload, User, GroupPayload, Group } from './';
1
+ import { Object, UserPayload, User, GroupPayload, Group, Task, ScheduleInterval, ChildTask, TaskStatusUpdateTask } from './';
2
2
  export declare type SetObjectsRequest = {
3
3
  objects: Array<Object>;
4
4
  properties?: Record<string, string>;
@@ -205,4 +205,42 @@ export declare type GetGroupByExternalIdResponse = {
205
205
  error?: string;
206
206
  originalError?: unknown;
207
207
  };
208
+ export declare type TaskScheduleRequest = {
209
+ connectionId: string;
210
+ scheduleInterval: ScheduleInterval;
211
+ task: Task;
212
+ };
213
+ export declare type TaskScheduleResponse = {
214
+ status: string;
215
+ message: string;
216
+ taskId: string;
217
+ error?: string;
218
+ originalError?: unknown;
219
+ };
220
+ export declare type ChildTaskScheduleRequest = {
221
+ scanId: string;
222
+ taskExecutionId: string;
223
+ task: ChildTask;
224
+ connectionId: string;
225
+ };
226
+ export declare type ChildTaskScheduleResponse = {
227
+ status: string;
228
+ message: string;
229
+ error?: string;
230
+ originalError?: unknown;
231
+ };
232
+ export declare type TaskStatusUpdateRequest = {
233
+ scanId: string;
234
+ taskExecutionId: string;
235
+ status: 'success' | 'failure';
236
+ task: TaskStatusUpdateTask;
237
+ failureReason?: 'ENTITY_NOT_FOUND' | 'RETRY_LIMIT_EXCEEDED' | 'NON_RETRYABLE_ERROR' | 'UNAUTHORIZED' | 'AUTH_TOKEN_REVOKED' | 'AUTH_TOKEN_EXPIRED' | 'RATE_LIMITED' | 'RETRYABLE_ERROR';
238
+ connectionId: string;
239
+ };
240
+ export declare type TaskStatusUpdateResponse = {
241
+ status: string;
242
+ message: string;
243
+ error?: string;
244
+ originalError?: unknown;
245
+ };
208
246
  //# sourceMappingURL=requests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../src/types/requests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../src/types/requests.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,11 @@ export declare const ENDPOINTS: {
16
16
  readonly GET_BY_EXTERNAL_ID: "/users";
17
17
  readonly MAPPINGS: "/usermappings";
18
18
  };
19
+ readonly ORCHESTRATION: {
20
+ readonly TASK_SCHEDULE: "/task/schedule";
21
+ readonly CHILD_TASK_SCHEDULE: "/scan/{scanId}/taskExecution/{taskExecutionId}/schedule";
22
+ readonly TASK_STATUS_UPDATE: "/scan/{scanId}/taskExecution/{taskExecutionId}/status";
23
+ };
19
24
  };
20
25
  export declare const STARGATE_BASE = "/graph/connector/{contextAri}";
21
26
  export declare const getFullPath: (endpoint: string, stargateBase?: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/utils/endpoints.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;CAuBZ,CAAC;AAKX,eAAO,MAAM,aAAa,kCAAkC,CAAC;AAM7D,eAAO,MAAM,WAAW,aAAc,MAAM,iBAAgB,MAAM,KAAmB,MAEpF,CAAC"}
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../src/utils/endpoints.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;CA8BZ,CAAC;AAKX,eAAO,MAAM,aAAa,kCAAkC,CAAC;AAM7D,eAAO,MAAM,WAAW,aAAc,MAAM,iBAAgB,MAAM,KAAmB,MAEpF,CAAC"}
@@ -18,6 +18,11 @@ exports.ENDPOINTS = {
18
18
  DELETE: '/users/bulk',
19
19
  GET_BY_EXTERNAL_ID: '/users',
20
20
  MAPPINGS: '/usermappings'
21
+ },
22
+ ORCHESTRATION: {
23
+ TASK_SCHEDULE: '/task/schedule',
24
+ CHILD_TASK_SCHEDULE: '/scan/{scanId}/taskExecution/{taskExecutionId}/schedule',
25
+ TASK_STATUS_UPDATE: '/scan/{scanId}/taskExecution/{taskExecutionId}/status'
21
26
  }
22
27
  };
23
28
  exports.STARGATE_BASE = '/graph/connector/{contextAri}';
@@ -23,4 +23,12 @@ export declare function validateGetUserByExternalIdRequest(externalId: string):
23
23
  export declare function validateGetGroupByExternalIdRequest(externalId: string): void;
24
24
  export declare function validateMapUsersRequest(directMappings: any[]): void;
25
25
  export declare function validateDeleteObjectsByPropertiesRequest(properties: Record<string, string>, objectType: string): void;
26
+ export declare function validateStringMaxLength(value: string, fieldName: string, maxLength: number): void;
27
+ export declare function validateNumberRange(value: number, fieldName: string, min: number, max: number): void;
28
+ export declare function validateUUID(value: string, fieldName: string): void;
29
+ export declare function validateTimeUnit(value: string, fieldName: string): void;
30
+ export declare function validateEnumValue(value: string, fieldName: string, allowedValues: string[]): void;
31
+ export declare function validateTaskScheduleRequest(connectionId: string, scheduleInterval: any, task: any): void;
32
+ export declare function validateChildTaskScheduleRequest(connectionId: string, task: any): void;
33
+ export declare function validateTaskStatusUpdateRequest(connectionId: string, status: string, task: any, failureReason?: string): void;
26
34
  //# sourceMappingURL=validators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAC3C,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAKvC,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOjE;AASD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,GAAG,EAAE,EACZ,oBAAoB,EAAE,MAAM,EAC5B,SAAS,EAAE,MAAM,EACjB,SAAS,SAAU,GAClB,IAAI,CAQN;AAKD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIzF;AAKD,wBAAgB,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOlE;AAKD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAShH;AAKD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAWhG;AAKD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAG1D;AAKD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAG5D;AAKD,wBAAgB,wCAAwC,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAIxG;AAKD,wBAAgB,sCAAsC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAGlF;AAKD,wBAAgB,uCAAuC,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAGnF;AAKD,wBAAgB,oCAAoC,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAGjG;AAKD,wBAAgB,kCAAkC,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE3E;AAKD,wBAAgB,mCAAmC,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE5E;AAKD,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI,CAmBnE;AAKD,wBAAgB,wCAAwC,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAIrH"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/utils/validators.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateDeleteObjectsByPropertiesRequest = exports.validateMapUsersRequest = exports.validateGetGroupByExternalIdRequest = exports.validateGetUserByExternalIdRequest = exports.validateGetObjectByExternalIdRequest = exports.validateDeleteGroupsByExternalIdRequest = exports.validateDeleteUsersByExternalIdRequest = exports.validateDeleteObjectsByExternalIdRequest = exports.validateSetGroupsRequest = exports.validateSetUsersRequest = exports.validateSetObjectsRequest = exports.validatePropertyCount = exports.validateObject = exports.validateRequiredString = exports.validateArrayMaxLength = exports.validateArray = exports.MAX_PROPERTIES_DELETE = exports.MAX_BULK_GROUPS_DELETE = exports.MAX_BULK_USERS_DELETE = exports.MAX_PROPERTIES = exports.MAX_USER_MAPPINGS = exports.MAX_BULK_OBJECTS_DELETE = exports.MAX_BULK_GROUPS = exports.MAX_BULK_USERS = exports.MAX_BULK_OBJECTS = void 0;
3
+ exports.validateTaskStatusUpdateRequest = exports.validateChildTaskScheduleRequest = exports.validateTaskScheduleRequest = exports.validateEnumValue = exports.validateTimeUnit = exports.validateUUID = exports.validateNumberRange = exports.validateStringMaxLength = exports.validateDeleteObjectsByPropertiesRequest = exports.validateMapUsersRequest = exports.validateGetGroupByExternalIdRequest = exports.validateGetUserByExternalIdRequest = exports.validateGetObjectByExternalIdRequest = exports.validateDeleteGroupsByExternalIdRequest = exports.validateDeleteUsersByExternalIdRequest = exports.validateDeleteObjectsByExternalIdRequest = exports.validateSetGroupsRequest = exports.validateSetUsersRequest = exports.validateSetObjectsRequest = exports.validatePropertyCount = exports.validateObject = exports.validateRequiredString = exports.validateArrayMaxLength = exports.validateArray = exports.MAX_PROPERTIES_DELETE = exports.MAX_BULK_GROUPS_DELETE = exports.MAX_BULK_USERS_DELETE = exports.MAX_PROPERTIES = exports.MAX_USER_MAPPINGS = exports.MAX_BULK_OBJECTS_DELETE = exports.MAX_BULK_GROUPS = exports.MAX_BULK_USERS = exports.MAX_BULK_OBJECTS = void 0;
4
4
  const errors_1 = require("./errors");
5
+ const uuid_1 = require("uuid");
5
6
  exports.MAX_BULK_OBJECTS = 100;
6
7
  exports.MAX_BULK_USERS = 100;
7
8
  exports.MAX_BULK_GROUPS = 100;
@@ -121,3 +122,79 @@ function validateDeleteObjectsByPropertiesRequest(properties, objectType) {
121
122
  validateRequiredString(objectType, 'objectType');
122
123
  }
123
124
  exports.validateDeleteObjectsByPropertiesRequest = validateDeleteObjectsByPropertiesRequest;
125
+ function validateStringMaxLength(value, fieldName, maxLength) {
126
+ if (value.length > maxLength) {
127
+ throw new errors_1.ForgeTeamWorkGraphValidationError(`${fieldName} must not exceed ${maxLength} characters. Received ${value.length}`, fieldName, { maxLength, actualLength: value.length });
128
+ }
129
+ }
130
+ exports.validateStringMaxLength = validateStringMaxLength;
131
+ function validateNumberRange(value, fieldName, min, max) {
132
+ if (value < min || value > max) {
133
+ throw new errors_1.ForgeTeamWorkGraphValidationError(`${fieldName} must be between ${min} and ${max}. Received ${value}`, fieldName, { min, max, actual: value });
134
+ }
135
+ }
136
+ exports.validateNumberRange = validateNumberRange;
137
+ function validateUUID(value, fieldName) {
138
+ if (!(0, uuid_1.validate)(value)) {
139
+ throw new errors_1.ForgeTeamWorkGraphValidationError(`${fieldName} must be a valid UUID format. Received: ${value}`, fieldName, { value });
140
+ }
141
+ }
142
+ exports.validateUUID = validateUUID;
143
+ function validateTimeUnit(value, fieldName) {
144
+ const validTimeUnits = ['minutes', 'hours', 'days'];
145
+ if (!validTimeUnits.includes(value)) {
146
+ throw new errors_1.ForgeTeamWorkGraphValidationError(`${fieldName} must be one of: ${validTimeUnits.join(', ')}. Received: ${value}`, fieldName, { value, validTimeUnits });
147
+ }
148
+ }
149
+ exports.validateTimeUnit = validateTimeUnit;
150
+ function validateEnumValue(value, fieldName, allowedValues) {
151
+ if (!allowedValues.includes(value)) {
152
+ throw new errors_1.ForgeTeamWorkGraphValidationError(`${fieldName} must be one of: ${allowedValues.join(', ')}. Received: ${value}`, fieldName, { allowedValues, received: value });
153
+ }
154
+ }
155
+ exports.validateEnumValue = validateEnumValue;
156
+ function validateTaskScheduleRequest(connectionId, scheduleInterval, task) {
157
+ validateRequiredString(connectionId, 'connectionId');
158
+ validateObject(scheduleInterval, 'scheduleInterval');
159
+ if (typeof scheduleInterval.value !== 'number' || scheduleInterval.value < 1 || scheduleInterval.value > 60) {
160
+ throw new errors_1.ForgeTeamWorkGraphValidationError('scheduleInterval.value must be between 1 and 60', 'scheduleInterval.value');
161
+ }
162
+ validateTimeUnit(scheduleInterval.timeUnit, 'scheduleInterval.timeUnit');
163
+ validateObject(task, 'task');
164
+ validateRequiredString(task.taskType, 'task.taskType');
165
+ validateStringMaxLength(task.taskType, 'task.taskType', 255);
166
+ validateRequiredString(task.taskId, 'task.taskId');
167
+ validateUUID(task.taskId, 'task.taskId');
168
+ }
169
+ exports.validateTaskScheduleRequest = validateTaskScheduleRequest;
170
+ function validateChildTaskScheduleRequest(connectionId, task) {
171
+ validateRequiredString(connectionId, 'connectionId');
172
+ validateObject(task, 'task');
173
+ validateRequiredString(task.parentTaskId, 'task.parentTaskId');
174
+ validateRequiredString(task.taskType, 'task.taskType');
175
+ validateStringMaxLength(task.taskType, 'task.taskType', 255);
176
+ validateRequiredString(task.taskId, 'task.taskId');
177
+ validateUUID(task.taskId, 'task.taskId');
178
+ }
179
+ exports.validateChildTaskScheduleRequest = validateChildTaskScheduleRequest;
180
+ function validateTaskStatusUpdateRequest(connectionId, status, task, failureReason) {
181
+ validateRequiredString(connectionId, 'connectionId');
182
+ validateEnumValue(status, 'status', ['success', 'failure']);
183
+ validateObject(task, 'task');
184
+ validateRequiredString(task.taskId, 'task.taskId');
185
+ validateUUID(task.taskId, 'task.taskId');
186
+ if (failureReason) {
187
+ const validFailureReasons = [
188
+ 'ENTITY_NOT_FOUND',
189
+ 'RETRY_LIMIT_EXCEEDED',
190
+ 'NON_RETRYABLE_ERROR',
191
+ 'UNAUTHORIZED',
192
+ 'AUTH_TOKEN_REVOKED',
193
+ 'AUTH_TOKEN_EXPIRED',
194
+ 'RATE_LIMITED',
195
+ 'RETRYABLE_ERROR'
196
+ ];
197
+ validateEnumValue(failureReason, 'failureReason', validFailureReasons);
198
+ }
199
+ }
200
+ exports.validateTaskStatusUpdateRequest = validateTaskStatusUpdateRequest;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/teamwork-graph",
3
- "version": "3.0.3-next.0",
3
+ "version": "3.1.0-next.2",
4
4
  "description": "Forge TeamworkGraph SDK",
5
5
  "author": "Atlassian",
6
6
  "license": "UNLICENSED",
@@ -17,12 +17,14 @@
17
17
  "devDependencies": {
18
18
  "@types/node": "20.19.1",
19
19
  "@types/node-fetch": "^2.6.12",
20
+ "@types/uuid": "^9.0.8",
20
21
  "expect-type": "^0.17.3",
21
22
  "node-fetch": "2.7.0",
22
23
  "jest-when": "^3.6.0"
23
24
  },
24
25
  "dependencies": {
25
- "@forge/api": "^6.2.1-next.0"
26
+ "@forge/api": "^6.3.0-next.2",
27
+ "uuid": "^9.0.1"
26
28
  },
27
29
  "publishConfig": {
28
30
  "registry": "https://packages.atlassian.com/api/npm/npm-public/"