@mxpicture/gcp-functions-generator 1.1.73 → 1.1.75
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.
|
@@ -59,8 +59,11 @@ export interface TaskConfig {
|
|
|
59
59
|
region: string;
|
|
60
60
|
serviceAccount: string;
|
|
61
61
|
queueId: string;
|
|
62
|
+
targetUrl: string;
|
|
62
63
|
}
|
|
63
|
-
export interface
|
|
64
|
-
|
|
64
|
+
export interface TaskScheduleParams extends TaskConfig {
|
|
65
|
+
days: number;
|
|
66
|
+
payload?: string;
|
|
67
|
+
taskId?: string;
|
|
65
68
|
}
|
|
66
69
|
//# sourceMappingURL=types.common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.common.d.ts","sourceRoot":"","sources":["../../src/common/types.common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACf,MAAM,2CAA2C,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,IAAI,EAAE,YAAY,CAAC;IACnB,yCAAyC;IACzC,GAAG,EAAE,iBAAiB,CAAC;IACvB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB,EAAE,OAAO,CAAC;IAEjC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.common.d.ts","sourceRoot":"","sources":["../../src/common/types.common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACf,MAAM,2CAA2C,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,IAAI,EAAE,YAAY,CAAC;IACnB,yCAAyC;IACzC,GAAG,EAAE,iBAAiB,CAAC;IACvB,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAEpB,uBAAuB,EAAE,OAAO,CAAC;IAEjC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { CloudTasksClient } from "@google-cloud/tasks";
|
|
2
|
-
import { TaskConfig } from "../common/types.common.js";
|
|
2
|
+
import { TaskConfig, TaskScheduleParams } from "../common/types.common.js";
|
|
3
|
+
export declare const scheduleTask: (params: TaskScheduleParams) => Promise<string | null>;
|
|
3
4
|
export declare class TaskHandler {
|
|
4
5
|
protected readonly config: TaskConfig;
|
|
5
6
|
protected tasksClient: CloudTasksClient;
|
|
6
7
|
constructor(config: TaskConfig);
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
taskId: string;
|
|
10
|
-
payload: string;
|
|
11
|
-
targetUrl: string;
|
|
12
|
-
}): Promise<string | null>;
|
|
8
|
+
ensureTaskName(taskId: string | undefined | null): string | null;
|
|
9
|
+
add(days: number, payload?: string, taskId?: string): Promise<string | null>;
|
|
13
10
|
/**
|
|
14
11
|
* Returns a Date in UTC in the allowed window (23:00–06:00).
|
|
15
12
|
* Strategy:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskHandler.d.ts","sourceRoot":"","sources":["../../src/tasks/TaskHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskHandler.d.ts","sourceRoot":"","sources":["../../src/tasks/TaskHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,eAAO,MAAM,YAAY,GACvB,QAAQ,kBAAkB,KACzB,OAAO,CAAC,MAAM,GAAG,IAAI,CACiD,CAAC;AAE1E,qBAAa,WAAW;IAGH,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU;IAFxD,SAAS,CAAC,WAAW,EAAE,gBAAgB,CAAC;gBAEF,MAAM,EAAE,UAAU;IAIjD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI;IAO1D,GAAG,CACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA2CzB;;;;;;;OAOG;IACI,2BAA2B,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAkBpD,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM;CAIlC"}
|
|
@@ -1,56 +1,44 @@
|
|
|
1
1
|
import { CloudTasksClient } from "@google-cloud/tasks";
|
|
2
|
-
|
|
3
|
-
// taskName: string;
|
|
4
|
-
// days: number;
|
|
5
|
-
// targetAt: Date;
|
|
6
|
-
// status: string;
|
|
7
|
-
// }
|
|
2
|
+
export const scheduleTask = async (params) => new TaskHandler(params).add(params.days, params.payload, params.taskId);
|
|
8
3
|
export class TaskHandler {
|
|
9
4
|
config;
|
|
10
5
|
tasksClient;
|
|
11
|
-
// protected store: Store<TaskDoc>;
|
|
12
6
|
constructor(config) {
|
|
13
7
|
this.config = config;
|
|
14
8
|
this.tasksClient = new CloudTasksClient();
|
|
15
|
-
// this.store = new Store<TaskDoc>("task", "common");
|
|
16
9
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
ensureTaskName(taskId) {
|
|
11
|
+
if (!taskId)
|
|
12
|
+
return null;
|
|
13
|
+
const prefix = `projects/${this.config.projectId}/locations/${this.config.region}/queues/${this.config.queueId}/tasks/`;
|
|
14
|
+
if (taskId.startsWith(prefix))
|
|
15
|
+
return taskId;
|
|
16
|
+
return `${prefix}${taskId}`;
|
|
17
|
+
}
|
|
18
|
+
async add(days, payload, taskId) {
|
|
19
|
+
this.assertDays(days);
|
|
20
|
+
const name = this.ensureTaskName(taskId);
|
|
21
|
+
const base = new Date(Date.now() + days * 24 * 60 * 60 * 1000);
|
|
20
22
|
const targetAt = this.computeNightScheduleTimeUtc(base);
|
|
21
|
-
// let prev: TaskDoc | null = null;
|
|
22
|
-
// try {
|
|
23
|
-
// prev = await this.readTask(taskId);
|
|
24
|
-
// } catch {}
|
|
25
|
-
// // delete previous task if any (best-effort)
|
|
26
|
-
// if (prev?.taskName) {
|
|
27
|
-
// try {
|
|
28
|
-
// await this.tasksClient.deleteTask({ name: prev.taskName });
|
|
29
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
30
|
-
// } catch (e: any) {
|
|
31
|
-
// // If already executed/deleted, ignore
|
|
32
|
-
// console.warn(
|
|
33
|
-
// `Failed to delete previous task ${prev.taskName}:`,
|
|
34
|
-
// e?.message || e,
|
|
35
|
-
// );
|
|
36
|
-
// }
|
|
37
|
-
// }
|
|
38
23
|
const queuePath = this.tasksClient.queuePath(this.config.projectId, this.config.region, this.config.queueId);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
24
|
+
let body = null;
|
|
25
|
+
let headers = null;
|
|
26
|
+
if (payload) {
|
|
27
|
+
body = Buffer.from(payload, "utf8").toString("base64");
|
|
28
|
+
headers = {
|
|
29
|
+
"Content-Type": "application/json",
|
|
30
|
+
};
|
|
31
|
+
}
|
|
43
32
|
const [task] = await this.tasksClient.createTask({
|
|
44
33
|
parent: queuePath,
|
|
45
34
|
task: {
|
|
46
35
|
scheduleTime: { seconds: Math.floor(targetAt.getTime() / 1000) },
|
|
36
|
+
name,
|
|
47
37
|
httpRequest: {
|
|
48
38
|
httpMethod: "POST",
|
|
49
|
-
url:
|
|
50
|
-
headers
|
|
51
|
-
|
|
52
|
-
},
|
|
53
|
-
body: p.payload,
|
|
39
|
+
url: this.config.targetUrl,
|
|
40
|
+
headers,
|
|
41
|
+
body,
|
|
54
42
|
oidcToken: {
|
|
55
43
|
serviceAccountEmail: this.config.serviceAccount,
|
|
56
44
|
// Optional: set audience; often leave unset, or set to the URL depending on your auth expectations
|
|
@@ -60,13 +48,6 @@ export class TaskHandler {
|
|
|
60
48
|
},
|
|
61
49
|
});
|
|
62
50
|
return task.name ?? null;
|
|
63
|
-
// await this.writeTask({
|
|
64
|
-
// id: taskId,
|
|
65
|
-
// days,
|
|
66
|
-
// targetAt,
|
|
67
|
-
// taskName: task.name ?? "unknown",
|
|
68
|
-
// status: "scheduled",
|
|
69
|
-
// });
|
|
70
51
|
}
|
|
71
52
|
/**
|
|
72
53
|
* Returns a Date in UTC in the allowed window (23:00–06:00).
|
|
@@ -90,16 +71,6 @@ export class TaskHandler {
|
|
|
90
71
|
const rounded = Math.ceil(ms / fiveMin) * fiveMin;
|
|
91
72
|
return new Date(rounded);
|
|
92
73
|
}
|
|
93
|
-
// protected async readTask(taskId: string): Promise<TaskDoc> {
|
|
94
|
-
// return this.store.get(taskId);
|
|
95
|
-
// }
|
|
96
|
-
// protected async writeTask(doc: TaskDoc): Promise<TaskDoc> {
|
|
97
|
-
// try {
|
|
98
|
-
// return await this.store.update(doc.id, doc);
|
|
99
|
-
// } catch {
|
|
100
|
-
// return await this.store.create(doc);
|
|
101
|
-
// }
|
|
102
|
-
// }
|
|
103
74
|
assertDays(days) {
|
|
104
75
|
if (!Number.isInteger(days) || days < 1 || days > 100)
|
|
105
76
|
throw new Error("days must be an integer between 1 and 100");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskHandler.js","sourceRoot":"","sources":["../../src/tasks/TaskHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,
|
|
1
|
+
{"version":3,"file":"TaskHandler.js","sourceRoot":"","sources":["../../src/tasks/TaskHandler.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxpicture/gcp-functions-generator",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.75",
|
|
4
4
|
"description": "Tools for google cloud functions",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "MXPicture",
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"@google-cloud/scheduler": "^5.3.1",
|
|
39
39
|
"@google-cloud/tasks": "^6.2.1",
|
|
40
40
|
"@mxpicture/build-api": "^0.2.59",
|
|
41
|
-
"@mxpicture/gcp-functions-backend": "^1.1.
|
|
42
|
-
"@mxpicture/gcp-functions-common": "^1.1.
|
|
43
|
-
"@mxpicture/gcp-functions-frontend": "^1.1.
|
|
41
|
+
"@mxpicture/gcp-functions-backend": "^1.1.75",
|
|
42
|
+
"@mxpicture/gcp-functions-common": "^1.1.75",
|
|
43
|
+
"@mxpicture/gcp-functions-frontend": "^1.1.75",
|
|
44
44
|
"google-auth-library": "^10.6.2",
|
|
45
45
|
"googleapis": "^171.4.0",
|
|
46
46
|
"json5": "^2.2.3"
|