opticedge-cloud-utils 1.0.22 → 1.0.23
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/dist/utils/task.d.ts +1 -1
- package/dist/utils/task.js +10 -2
- package/dist/utils/task.test.js +13 -0
- package/package.json +1 -1
- package/src/types/notify.ts +1 -1
- package/src/utils/task.test.ts +27 -0
- package/src/utils/task.ts +14 -2
package/dist/utils/task.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function createTask(projectId: string, region: string, queueId: string, data: unknown, serviceAccount: string, audience: string): Promise<string>;
|
|
1
|
+
export declare function createTask(projectId: string, region: string, queueId: string, data: unknown, serviceAccount: string, audience: string, delaySeconds?: number): Promise<string>;
|
package/dist/utils/task.js
CHANGED
|
@@ -3,11 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createTask = createTask;
|
|
4
4
|
const tasks_1 = require("@google-cloud/tasks");
|
|
5
5
|
const tasksClient = new tasks_1.CloudTasksClient();
|
|
6
|
-
async function createTask(projectId, region, queueId, data, serviceAccount, audience) {
|
|
6
|
+
async function createTask(projectId, region, queueId, data, serviceAccount, audience, delaySeconds = 0) {
|
|
7
7
|
if (!projectId || !region || !queueId || !serviceAccount || !audience) {
|
|
8
8
|
throw new Error('Missing required parameters for Cloud Tasks setup');
|
|
9
9
|
}
|
|
10
10
|
const parent = tasksClient.queuePath(projectId, region, queueId);
|
|
11
|
+
const now = Date.now() / 1000;
|
|
12
|
+
const scheduledTime = delaySeconds > 0
|
|
13
|
+
? {
|
|
14
|
+
seconds: Math.floor(now + delaySeconds)
|
|
15
|
+
}
|
|
16
|
+
: undefined;
|
|
11
17
|
const task = {
|
|
12
18
|
httpRequest: {
|
|
13
19
|
httpMethod: tasks_1.protos.google.cloud.tasks.v2.HttpMethod.POST,
|
|
@@ -20,11 +26,13 @@ async function createTask(projectId, region, queueId, data, serviceAccount, audi
|
|
|
20
26
|
serviceAccountEmail: serviceAccount,
|
|
21
27
|
audience
|
|
22
28
|
}
|
|
23
|
-
}
|
|
29
|
+
},
|
|
30
|
+
scheduleTime: scheduledTime
|
|
24
31
|
};
|
|
25
32
|
const [response] = await tasksClient.createTask({ parent, task });
|
|
26
33
|
if (!response.name) {
|
|
27
34
|
throw new Error('Failed to create task: no name returned');
|
|
28
35
|
}
|
|
36
|
+
console.log(`✅ Created Cloud Task: ${response.name}`);
|
|
29
37
|
return response.name;
|
|
30
38
|
}
|
package/dist/utils/task.test.js
CHANGED
|
@@ -51,4 +51,17 @@ describe('createTask', () => {
|
|
|
51
51
|
mockCreateTask.mockResolvedValue([{}]); // Simulate missing name
|
|
52
52
|
await expect((0, task_1.createTask)('test-project', 'us-central1', 'test-queue', { foo: 'bar' }, 'test@project.iam.gserviceaccount.com', 'https://example.com')).rejects.toThrow('Failed to create task: no name returned');
|
|
53
53
|
});
|
|
54
|
+
it('should include scheduleTime if delaySeconds is set', async () => {
|
|
55
|
+
const mockTaskName = 'projects/test/locations/us-central1/queues/test/tasks/task-456';
|
|
56
|
+
mockCreateTask.mockResolvedValue([{ name: mockTaskName }]);
|
|
57
|
+
const delaySeconds = 120;
|
|
58
|
+
const before = Math.floor(Date.now() / 1000) + delaySeconds;
|
|
59
|
+
await (0, task_1.createTask)('test', 'us-central1', 'test', { message: 'delayed' }, 'sa@test.iam.gserviceaccount.com', 'https://run-url', delaySeconds);
|
|
60
|
+
const taskArg = mockCreateTask.mock.calls[0][0].task;
|
|
61
|
+
const scheduleTime = taskArg.scheduleTime?.seconds;
|
|
62
|
+
const after = Math.floor(Date.now() / 1000) + delaySeconds;
|
|
63
|
+
expect(typeof scheduleTime).toBe('number');
|
|
64
|
+
expect(scheduleTime).toBeGreaterThanOrEqual(before);
|
|
65
|
+
expect(scheduleTime).toBeLessThanOrEqual(after);
|
|
66
|
+
});
|
|
54
67
|
});
|
package/package.json
CHANGED
package/src/types/notify.ts
CHANGED
package/src/utils/task.test.ts
CHANGED
|
@@ -91,4 +91,31 @@ describe('createTask', () => {
|
|
|
91
91
|
)
|
|
92
92
|
).rejects.toThrow('Failed to create task: no name returned')
|
|
93
93
|
})
|
|
94
|
+
|
|
95
|
+
it('should include scheduleTime if delaySeconds is set', async () => {
|
|
96
|
+
const mockTaskName = 'projects/test/locations/us-central1/queues/test/tasks/task-456'
|
|
97
|
+
mockCreateTask.mockResolvedValue([{ name: mockTaskName }])
|
|
98
|
+
|
|
99
|
+
const delaySeconds = 120
|
|
100
|
+
const before = Math.floor(Date.now() / 1000) + delaySeconds
|
|
101
|
+
|
|
102
|
+
await createTask(
|
|
103
|
+
'test',
|
|
104
|
+
'us-central1',
|
|
105
|
+
'test',
|
|
106
|
+
{ message: 'delayed' },
|
|
107
|
+
'sa@test.iam.gserviceaccount.com',
|
|
108
|
+
'https://run-url',
|
|
109
|
+
delaySeconds
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
const taskArg = mockCreateTask.mock.calls[0][0].task
|
|
113
|
+
const scheduleTime = taskArg.scheduleTime?.seconds
|
|
114
|
+
|
|
115
|
+
const after = Math.floor(Date.now() / 1000) + delaySeconds
|
|
116
|
+
|
|
117
|
+
expect(typeof scheduleTime).toBe('number')
|
|
118
|
+
expect(scheduleTime).toBeGreaterThanOrEqual(before)
|
|
119
|
+
expect(scheduleTime).toBeLessThanOrEqual(after)
|
|
120
|
+
})
|
|
94
121
|
})
|
package/src/utils/task.ts
CHANGED
|
@@ -8,7 +8,8 @@ export async function createTask(
|
|
|
8
8
|
queueId: string,
|
|
9
9
|
data: unknown,
|
|
10
10
|
serviceAccount: string,
|
|
11
|
-
audience: string
|
|
11
|
+
audience: string,
|
|
12
|
+
delaySeconds: number = 0
|
|
12
13
|
): Promise<string> {
|
|
13
14
|
if (!projectId || !region || !queueId || !serviceAccount || !audience) {
|
|
14
15
|
throw new Error('Missing required parameters for Cloud Tasks setup')
|
|
@@ -16,6 +17,14 @@ export async function createTask(
|
|
|
16
17
|
|
|
17
18
|
const parent = tasksClient.queuePath(projectId, region, queueId)
|
|
18
19
|
|
|
20
|
+
const now = Date.now() / 1000
|
|
21
|
+
const scheduledTime: protos.google.protobuf.ITimestamp | undefined =
|
|
22
|
+
delaySeconds > 0
|
|
23
|
+
? {
|
|
24
|
+
seconds: Math.floor(now + delaySeconds)
|
|
25
|
+
}
|
|
26
|
+
: undefined
|
|
27
|
+
|
|
19
28
|
const task: protos.google.cloud.tasks.v2.ITask = {
|
|
20
29
|
httpRequest: {
|
|
21
30
|
httpMethod: protos.google.cloud.tasks.v2.HttpMethod.POST,
|
|
@@ -28,12 +37,15 @@ export async function createTask(
|
|
|
28
37
|
serviceAccountEmail: serviceAccount,
|
|
29
38
|
audience
|
|
30
39
|
}
|
|
31
|
-
}
|
|
40
|
+
},
|
|
41
|
+
scheduleTime: scheduledTime
|
|
32
42
|
}
|
|
33
43
|
|
|
34
44
|
const [response] = await tasksClient.createTask({ parent, task })
|
|
35
45
|
if (!response.name) {
|
|
36
46
|
throw new Error('Failed to create task: no name returned')
|
|
37
47
|
}
|
|
48
|
+
|
|
49
|
+
console.log(`✅ Created Cloud Task: ${response.name}`)
|
|
38
50
|
return response.name
|
|
39
51
|
}
|