prostgles-server 4.2.704 → 4.2.706
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/DboBuilder/QueryBuilder/Functions/ARRAY_SEARCH.d.ts +1 -2
- package/dist/DboBuilder/QueryBuilder/Functions/ARRAY_SEARCH.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/ARRAY_SEARCH.js +21 -19
- package/dist/DboBuilder/QueryBuilder/Functions/ARRAY_SEARCH.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/Functions.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/Functions.js +19 -0
- package/dist/DboBuilder/QueryBuilder/Functions/Functions.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions/createFunc.d.ts +24 -0
- package/dist/DboBuilder/QueryBuilder/Functions/createFunc.d.ts.map +1 -0
- package/dist/DboBuilder/QueryBuilder/Functions/createFunc.js +53 -0
- package/dist/DboBuilder/QueryBuilder/Functions/createFunc.js.map +1 -0
- package/dist/Filtering/getFilterItemCondition.d.ts.map +1 -1
- package/dist/Filtering/getFilterItemCondition.js +6 -0
- package/dist/Filtering/getFilterItemCondition.js.map +1 -1
- package/dist/Jobs/JobTypes.d.ts +48 -8
- package/dist/Jobs/JobTypes.d.ts.map +1 -1
- package/dist/Jobs/JobTypes.js.map +1 -1
- package/dist/Jobs/claimJob.d.ts +2 -0
- package/dist/Jobs/claimJob.d.ts.map +1 -1
- package/dist/Jobs/claimJob.js +26 -6
- package/dist/Jobs/claimJob.js.map +1 -1
- package/dist/Jobs/controlJob.d.ts +2 -2
- package/dist/Jobs/controlJob.d.ts.map +1 -1
- package/dist/Jobs/controlJob.js +10 -4
- package/dist/Jobs/controlJob.js.map +1 -1
- package/dist/Jobs/controlManualJob.d.ts +6 -0
- package/dist/Jobs/controlManualJob.d.ts.map +1 -0
- package/dist/Jobs/controlManualJob.js +53 -0
- package/dist/Jobs/controlManualJob.js.map +1 -0
- package/dist/Jobs/createJobControlFunctionDefiner.d.ts +57 -13
- package/dist/Jobs/createJobControlFunctionDefiner.d.ts.map +1 -1
- package/dist/Jobs/createJobControlFunctionDefiner.js +37 -7
- package/dist/Jobs/createJobControlFunctionDefiner.js.map +1 -1
- package/dist/Jobs/createJobsAPI.d.ts.map +1 -1
- package/dist/Jobs/createJobsAPI.js +16 -9
- package/dist/Jobs/createJobsAPI.js.map +1 -1
- package/dist/Jobs/createManualJobControlFunction.d.ts +49 -0
- package/dist/Jobs/createManualJobControlFunction.d.ts.map +1 -0
- package/dist/Jobs/createManualJobControlFunction.js +44 -0
- package/dist/Jobs/createManualJobControlFunction.js.map +1 -0
- package/dist/Jobs/enqueueJob.d.ts +1 -1
- package/dist/Jobs/enqueueJob.d.ts.map +1 -1
- package/dist/Jobs/enqueueJob.js +2 -1
- package/dist/Jobs/enqueueJob.js.map +1 -1
- package/dist/Jobs/getJobDefinition.d.ts.map +1 -1
- package/dist/Jobs/getJobDefinition.js +7 -4
- package/dist/Jobs/getJobDefinition.js.map +1 -1
- package/dist/Jobs/getJobRetention.d.ts.map +1 -1
- package/dist/Jobs/getJobRetention.js +5 -5
- package/dist/Jobs/getJobRetention.js.map +1 -1
- package/dist/Jobs/getJobTableHooks.js +1 -1
- package/dist/Jobs/getJobTableHooks.js.map +1 -1
- package/dist/Jobs/jobTableConfig.d.ts +2 -0
- package/dist/Jobs/jobTableConfig.d.ts.map +1 -1
- package/dist/Jobs/jobUtils.d.ts +2 -1
- package/dist/Jobs/jobUtils.d.ts.map +1 -1
- package/dist/Jobs/jobUtils.js +10 -1
- package/dist/Jobs/jobUtils.js.map +1 -1
- package/dist/Jobs/runJob.d.ts.map +1 -1
- package/dist/Jobs/runJob.js +14 -3
- package/dist/Jobs/runJob.js.map +1 -1
- package/dist/Jobs/startJob.d.ts +10 -0
- package/dist/Jobs/startJob.d.ts.map +1 -0
- package/dist/Jobs/startJob.js +40 -0
- package/dist/Jobs/startJob.js.map +1 -0
- package/dist/ProstglesTypes.d.ts +1 -1
- package/dist/ProstglesTypes.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/Jobs/claimJob.js
CHANGED
|
@@ -10,11 +10,30 @@ const claimJob = async (prostgles, name, concurrency) => {
|
|
|
10
10
|
await t.one("SELECT pg_advisory_xact_lock(hashtextextended(${advisoryLockKey}, 0))", {
|
|
11
11
|
advisoryLockKey: JSON.stringify([tableSQL, name]),
|
|
12
12
|
});
|
|
13
|
-
await t.none(`UPDATE ${tableSQL}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
await t.none(`UPDATE ${tableSQL}
|
|
14
|
+
SET
|
|
15
|
+
status = CASE
|
|
16
|
+
WHEN cancel_requested THEN 'cancelled'
|
|
17
|
+
WHEN stalled_count >= max_stalled_count THEN 'failed'
|
|
18
|
+
ELSE 'pending'
|
|
19
|
+
END,
|
|
20
|
+
stalled_count = stalled_count + 1,
|
|
21
|
+
error = jsonb_build_object('code', 'WORKER_INTERRUPTED', 'message', 'Worker interrupted'),
|
|
22
|
+
lease_token = NULL,
|
|
23
|
+
locked_until = NULL,
|
|
24
|
+
run_at = CASE
|
|
25
|
+
WHEN cancel_requested OR stalled_count >= max_stalled_count THEN run_at
|
|
26
|
+
ELSE clock_timestamp() + LEAST(2147483647, delay_ms::numeric *
|
|
27
|
+
CASE WHEN backoff = 'exponential' THEN power(2::numeric, LEAST(stalled_count, 1024)) ELSE 1 END
|
|
28
|
+
) * interval '1 millisecond'
|
|
29
|
+
END,
|
|
30
|
+
finished_at = CASE
|
|
31
|
+
WHEN cancel_requested OR stalled_count >= max_stalled_count THEN clock_timestamp()
|
|
32
|
+
END
|
|
33
|
+
WHERE
|
|
34
|
+
job_name = \${jobName}
|
|
35
|
+
AND status = 'running'
|
|
36
|
+
AND locked_until < clock_timestamp()`, { jobName: name });
|
|
18
37
|
const count = await jobs.count({ job_name: name, status: "running" });
|
|
19
38
|
if (+count >= concurrency)
|
|
20
39
|
return;
|
|
@@ -23,7 +42,8 @@ const claimJob = async (prostgles, name, concurrency) => {
|
|
|
23
42
|
SELECT j.id FROM ${tableSQL} j
|
|
24
43
|
WHERE j.job_name = \${jobName} AND j.status = 'pending' AND j.run_at <= clock_timestamp()
|
|
25
44
|
AND NOT EXISTS (
|
|
26
|
-
SELECT 1 FROM ${tableSQL} earlier
|
|
45
|
+
SELECT 1 FROM ${tableSQL} earlier
|
|
46
|
+
WHERE earlier.job_name = j.job_name
|
|
27
47
|
AND earlier.target_table IS NOT DISTINCT FROM j.target_table AND earlier.target_row_pkey = j.target_row_pkey
|
|
28
48
|
AND (earlier.status = 'running' OR (earlier.status = 'pending'
|
|
29
49
|
AND (earlier.created_at, earlier.id) < (j.created_at, j.id)))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimJob.js","sourceRoot":"","sources":["../../lib/Jobs/claimJob.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAGzC,6DAA0D;AAEnD,MAAM,QAAQ,GAAG,KAAK,EAAE,SAAoB,EAAE,IAAY,EAAE,WAAmB,EAAE,EAAE;IACxF,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,IAAA,uCAAkB,EAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,CAAC,GAAG,CAAC,uEAAuE,EAAE;YACnF,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAClD,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,IAAI,CACV,UAAU,QAAQ
|
|
1
|
+
{"version":3,"file":"claimJob.js","sourceRoot":"","sources":["../../lib/Jobs/claimJob.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AAGzC,6DAA0D;AAEnD,MAAM,QAAQ,GAAG,KAAK,EAAE,SAAoB,EAAE,IAAY,EAAE,WAAmB,EAAE,EAAE;IACxF,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzC,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;QACjD,MAAM,IAAI,GAAG,IAAA,uCAAkB,EAAC,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,CAAC,GAAG,CAAC,uEAAuE,EAAE;YACnF,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;SAClD,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,IAAI,CACV,UAAU,QAAQ;;;;;;;;;;;;;;;;;;;;;;;6CAuBqB,EACvC,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK,IAAI,WAAW;YAAE,OAAO;QAClC,OAAO,CAAC,CAAC,SAAS,CAChB;;2BAEqB,QAAQ;;;4BAGP,QAAQ;;;;;;;;eAQrB,QAAQ;;;KAGlB,EACC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAA,wBAAU,GAAE,EAAE,CAC5C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAzDW,QAAA,QAAQ,YAyDnB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type AnyObject } from "prostgles-types";
|
|
2
2
|
import type { Prostgles } from "../Prostgles";
|
|
3
3
|
import type { AuthClientRequest } from "../Auth/AuthTypes";
|
|
4
|
-
import type { JobControlOptions, JobTransaction } from "./JobTypes";
|
|
5
|
-
export declare const controlJob: <S, Row extends AnyObject>(prostgles: Prostgles, transaction: JobTransaction, clientReq: AuthClientRequest, name: string, options: JobControlOptions<S, Row>) => Promise<{
|
|
4
|
+
import type { JobControlOptions, JobTransaction, ManualJobControlOptions } from "./JobTypes";
|
|
5
|
+
export declare const controlJob: <S, Row extends AnyObject>(prostgles: Prostgles, transaction: JobTransaction, clientReq: AuthClientRequest, name: string, options: JobControlOptions<S, Row> | ManualJobControlOptions<S>) => Promise<{
|
|
6
6
|
jobId: string;
|
|
7
7
|
}>;
|
|
8
8
|
//# sourceMappingURL=controlJob.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlJob.d.ts","sourceRoot":"","sources":["../../lib/Jobs/controlJob.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK3D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"controlJob.d.ts","sourceRoot":"","sources":["../../lib/Jobs/controlJob.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK3D,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EACd,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAQpB,eAAO,MAAM,UAAU,GAAU,CAAC,EAAE,GAAG,SAAS,SAAS,EACvD,WAAW,SAAS,EACpB,aAAa,cAAc,EAC3B,WAAW,iBAAiB,EAC5B,MAAM,MAAM,EACZ,SAAS,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC;;EAyGhE,CAAC"}
|
package/dist/Jobs/controlJob.js
CHANGED
|
@@ -7,14 +7,21 @@ const runClientRequest_1 = require("../runClientRequest");
|
|
|
7
7
|
const enqueueJob_1 = require("./enqueueJob");
|
|
8
8
|
const getJobDefinition_1 = require("./getJobDefinition");
|
|
9
9
|
const getJobTableHandler_1 = require("./getJobTableHandler");
|
|
10
|
-
const JobTypes_1 = require("./JobTypes");
|
|
11
10
|
const jobUtils_1 = require("./jobUtils");
|
|
11
|
+
const controlManualJob_1 = require("./controlManualJob");
|
|
12
12
|
const controlJob = async (prostgles, transaction, clientReq, name, options) => {
|
|
13
13
|
const { definition } = (0, getJobDefinition_1.getJobDefinition)(prostgles, name);
|
|
14
14
|
const { trigger } = definition;
|
|
15
|
+
if (trigger.type === "manual") {
|
|
16
|
+
if ("row" in options)
|
|
17
|
+
throw new Error(`Manual job ${name} does not accept a row`);
|
|
18
|
+
return (0, controlManualJob_1.controlManualJob)(prostgles, transaction, name, options);
|
|
19
|
+
}
|
|
15
20
|
if (trigger.type !== "row" || !trigger.jobIdColumn) {
|
|
16
21
|
throw new Error(`Job control requires a row job with jobIdColumn: ${name}`);
|
|
17
22
|
}
|
|
23
|
+
if (!("row" in options))
|
|
24
|
+
throw new Error(`Job control requires a row: ${name}`);
|
|
18
25
|
const findReadableRows = (filter) => runClientRequest_1.runClientRequest.call(prostgles, {
|
|
19
26
|
tableName: trigger.table,
|
|
20
27
|
command: "find",
|
|
@@ -66,9 +73,8 @@ const controlJob = async (prostgles, transaction, clientReq, name, options) => {
|
|
|
66
73
|
(0, prostgles_types_1.stableStringify)(job.target_row_pkey) !== (0, prostgles_types_1.stableStringify)(targetRowPkey))) {
|
|
67
74
|
throw new Error("Linked job does not match the target row");
|
|
68
75
|
}
|
|
69
|
-
if (job
|
|
70
|
-
|
|
71
|
-
}
|
|
76
|
+
if (job)
|
|
77
|
+
(0, jobUtils_1.assertJobControlStatus)(job, options.operation);
|
|
72
78
|
if (!job && options.operation !== "startOrRetry") {
|
|
73
79
|
throw new Error("Job has not started");
|
|
74
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlJob.js","sourceRoot":"","sources":["../../lib/Jobs/controlJob.ts"],"names":[],"mappings":";;;AAAA,qDAA4E;AAE5E,0DAAoD;AAGpD,0DAAuD;AACvD,6CAA0C;AAC1C,yDAAsD;AACtD,6DAA0D;
|
|
1
|
+
{"version":3,"file":"controlJob.js","sourceRoot":"","sources":["../../lib/Jobs/controlJob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Prostgles } from "../Prostgles";
|
|
2
|
+
import type { JobTransaction, ManualJobControlOptions } from "./JobTypes";
|
|
3
|
+
export declare const controlManualJob: <S>(prostgles: Prostgles, transaction: JobTransaction, name: string, options: ManualJobControlOptions<S>) => Promise<{
|
|
4
|
+
jobId: string;
|
|
5
|
+
}>;
|
|
6
|
+
//# sourceMappingURL=controlManualJob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlManualJob.d.ts","sourceRoot":"","sources":["../../lib/Jobs/controlManualJob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,OAAO,KAAK,EAAa,cAAc,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAGrF,eAAO,MAAM,gBAAgB,GAAU,CAAC,EACtC,WAAW,SAAS,EACpB,aAAa,cAAc,EAC3B,MAAM,MAAM,EACZ,SAAS,uBAAuB,CAAC,CAAC,CAAC;;EAmDpC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.controlManualJob = void 0;
|
|
4
|
+
const enqueueJob_1 = require("./enqueueJob");
|
|
5
|
+
const getJobDefinition_1 = require("./getJobDefinition");
|
|
6
|
+
const getJobParams_1 = require("./getJobParams");
|
|
7
|
+
const jobUtils_1 = require("./jobUtils");
|
|
8
|
+
const controlManualJob = async (prostgles, transaction, name, options) => {
|
|
9
|
+
const { jobId, operation } = options;
|
|
10
|
+
const transactionJobs = prostgles.jobs.api.withTransaction(transaction.dbx);
|
|
11
|
+
let job;
|
|
12
|
+
if (jobId !== undefined) {
|
|
13
|
+
if (!(await transactionJobs.get(jobId)))
|
|
14
|
+
throw new Error("Job is unavailable or not readable");
|
|
15
|
+
job =
|
|
16
|
+
(await transaction.t.oneOrNone(`SELECT * FROM ${prostgles.jobs.tableSQL} WHERE id = \${jobId} FOR UPDATE`, { jobId })) ?? undefined;
|
|
17
|
+
if (!job || !(await transactionJobs.get(jobId)))
|
|
18
|
+
throw new Error("Job is unavailable or not readable");
|
|
19
|
+
if (job.job_name !== name || job.target_table !== null) {
|
|
20
|
+
throw new Error("Job does not match the manual job definition");
|
|
21
|
+
}
|
|
22
|
+
(0, jobUtils_1.assertJobControlStatus)(job, operation);
|
|
23
|
+
}
|
|
24
|
+
else if (operation !== "startOrRetry") {
|
|
25
|
+
throw new Error("Job ID is required");
|
|
26
|
+
}
|
|
27
|
+
const { definition } = (0, getJobDefinition_1.getJobDefinition)(prostgles, name);
|
|
28
|
+
const params = operation === "cancel" ?
|
|
29
|
+
(job?.params ?? {})
|
|
30
|
+
: await (0, getJobParams_1.getJobParams)(prostgles, definition.params, {
|
|
31
|
+
...job?.params,
|
|
32
|
+
...options.params,
|
|
33
|
+
});
|
|
34
|
+
await options.run?.({
|
|
35
|
+
job,
|
|
36
|
+
params,
|
|
37
|
+
dbx: transaction.dbx,
|
|
38
|
+
});
|
|
39
|
+
if (operation === "cancel") {
|
|
40
|
+
if (!job)
|
|
41
|
+
throw new Error("Job ID is required");
|
|
42
|
+
await transactionJobs.cancel(job.id);
|
|
43
|
+
return { jobId: job.id };
|
|
44
|
+
}
|
|
45
|
+
const { jobId: startedJobId } = await (0, enqueueJob_1.enqueueJob)(prostgles, transaction, name, {}, {
|
|
46
|
+
userId: prostgles.getExecution()?.user?.id,
|
|
47
|
+
reason: job ? "rerun" : "trigger",
|
|
48
|
+
params,
|
|
49
|
+
});
|
|
50
|
+
return { jobId: startedJobId };
|
|
51
|
+
};
|
|
52
|
+
exports.controlManualJob = controlManualJob;
|
|
53
|
+
//# sourceMappingURL=controlManualJob.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controlManualJob.js","sourceRoot":"","sources":["../../lib/Jobs/controlManualJob.ts"],"names":[],"mappings":";;;AAEA,6CAA0C;AAC1C,yDAAsD;AACtD,iDAA8C;AAE9C,yCAAoD;AAE7C,MAAM,gBAAgB,GAAG,KAAK,EACnC,SAAoB,EACpB,WAA2B,EAC3B,IAAY,EACZ,OAAmC,EACnC,EAAE;IACF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACrC,MAAM,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC5E,IAAI,GAA0B,CAAC;IAC/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC/F,GAAG;YACD,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,SAAS,CAC5B,iBAAiB,SAAS,CAAC,IAAI,CAAC,QAAQ,kCAAkC,EAC1E,EAAE,KAAK,EAAE,CACV,CAAC,IAAI,SAAS,CAAC;QAClB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,IAAA,iCAAsB,EAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,mCAAgB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,MAAM,GACV,SAAS,KAAK,QAAQ,CAAC,CAAC;QACtB,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;QACrB,CAAC,CAAC,MAAM,IAAA,2BAAY,EAAC,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE;YAC/C,GAAG,GAAG,EAAE,MAAM;YACd,GAAG,OAAO,CAAC,MAAM;SAClB,CAAC,CAAC;IACP,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QAClB,GAAG;QACH,MAAM;QACN,GAAG,EAAE,WAAW,CAAC,GAA8C;KAChE,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAChD,MAAM,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,uBAAU,EAC9C,SAAS,EACT,WAAW,EACX,IAAI,EACJ,EAAE,EACF;QACE,MAAM,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACjC,MAAM;KACP,CACF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AACjC,CAAC,CAAC;AAvDW,QAAA,gBAAgB,oBAuD3B"}
|
|
@@ -2,25 +2,63 @@ import type { AnyObject, MaybePromise } from "prostgles-types";
|
|
|
2
2
|
import type { SessionUser } from "../Auth/AuthTypes";
|
|
3
3
|
import type { DBTableHandlersFromSchema } from "../DBSchemaBuilder/DBSchemaBuilder";
|
|
4
4
|
import type { ServerFunctionContextMarker, UnrestrictedFunctionContext } from "../PublishParser/defineServerFunction";
|
|
5
|
-
import type { JobControlOperation, JobsConfig } from "./JobTypes";
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import type { JobControlOperation, JobsConfig, ParamsSchema } from "./JobTypes";
|
|
6
|
+
import { type ManualJobControlFunctionContext } from "./createManualJobControlFunction";
|
|
7
|
+
/**
|
|
8
|
+
* Row controls accept { row }; manual controls accept { jobId, params }.
|
|
9
|
+
* Omit jobId only for a new manual startOrRetry. Existing rows/runs must be readable by the caller.
|
|
10
|
+
*/
|
|
11
|
+
export declare const createJobControlFunctionDefiner: <S = void, Context = undefined, SUser extends SessionUser = SessionUser>() => <Definitions extends JobsConfig<S, Context>>(jobs: Definitions) => <Name extends ControllableJobName<Definitions>, Operation extends JobControlOperation>(definition: {
|
|
8
12
|
jobName: Name;
|
|
9
|
-
operation:
|
|
13
|
+
operation: Operation;
|
|
10
14
|
description?: string;
|
|
11
|
-
/** Validate and prepare the
|
|
12
|
-
run?: (context:
|
|
13
|
-
|
|
15
|
+
/** Validate and prepare in the control transaction. Throw to roll back everything. */
|
|
16
|
+
run?: (context: Definitions[Name] extends {
|
|
17
|
+
trigger: {
|
|
18
|
+
type: "manual";
|
|
19
|
+
};
|
|
20
|
+
} ? ManualJobControlFunctionContext<S, SUser, Context, JobParams<Definitions, Name>> : JobControlFunctionContext<S, SUser, Context, JobRow<Definitions, Name>>) => MaybePromise<void>;
|
|
21
|
+
}) => Definitions[Name] extends {
|
|
22
|
+
trigger: {
|
|
23
|
+
type: "manual";
|
|
24
|
+
};
|
|
25
|
+
} ? {
|
|
26
|
+
input: {
|
|
27
|
+
jobId: {
|
|
28
|
+
type: "string";
|
|
29
|
+
optional: Operation extends "startOrRetry" ? true : false;
|
|
30
|
+
};
|
|
31
|
+
} & (Operation extends "cancel" ? {} : {
|
|
32
|
+
params: {
|
|
33
|
+
optional: true;
|
|
34
|
+
type: JobParamsSchema<Definitions, Name> extends infer T extends ParamsSchema ? { [Key in keyof T]: Omit<T[Key] extends {
|
|
35
|
+
jsonbSchema: infer Field;
|
|
36
|
+
} ? Field : {
|
|
37
|
+
type: T[Key]["jsonbSchemaType"];
|
|
38
|
+
}, "optional"> & {
|
|
39
|
+
optional: true;
|
|
40
|
+
}; } : never;
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
description: string | undefined;
|
|
44
|
+
unrestrictedDbAccess: true;
|
|
45
|
+
run: (input: {
|
|
46
|
+
jobId?: string;
|
|
47
|
+
params?: Record<string, import("prostgles-types").JobValue>;
|
|
48
|
+
}, context: UnrestrictedFunctionContext<S, SUser, Context>) => Promise<{
|
|
49
|
+
jobId: string;
|
|
50
|
+
}>;
|
|
51
|
+
} & ServerFunctionContextMarker<S, SUser, Context> : {
|
|
14
52
|
input: {
|
|
15
53
|
row: {
|
|
16
54
|
type: "RowLookup";
|
|
17
|
-
table:
|
|
55
|
+
table: string;
|
|
18
56
|
};
|
|
19
57
|
};
|
|
20
58
|
description: string | undefined;
|
|
21
59
|
unrestrictedDbAccess: true;
|
|
22
60
|
jobControl: {
|
|
23
|
-
jobName:
|
|
61
|
+
jobName: string;
|
|
24
62
|
rowArg: "row";
|
|
25
63
|
operation: JobControlOperation;
|
|
26
64
|
};
|
|
@@ -30,20 +68,26 @@ export declare const createJobControlFunctionDefiner: <S = void, Context = undef
|
|
|
30
68
|
jobId: string;
|
|
31
69
|
}>;
|
|
32
70
|
} & ServerFunctionContextMarker<S, SUser, Context>;
|
|
33
|
-
type
|
|
34
|
-
[Name in keyof Definitions]: Definitions[Name] extends {
|
|
71
|
+
type ControllableJobName<Definitions> = {
|
|
72
|
+
[Name in keyof Definitions]: Definitions[Name] extends ({
|
|
35
73
|
trigger: {
|
|
36
|
-
type: "row";
|
|
74
|
+
type: "row" | "manual";
|
|
37
75
|
};
|
|
38
|
-
} ? Name : never;
|
|
76
|
+
}) ? Name : never;
|
|
39
77
|
}[keyof Definitions] & string;
|
|
40
78
|
type JobRow<Definitions extends Record<string, {
|
|
41
79
|
run: (...args: any[]) => unknown;
|
|
42
80
|
}>, Name extends keyof Definitions> = NonNullable<Parameters<Definitions[Name]["run"]>[0]["row"]>;
|
|
81
|
+
type JobParams<Definitions extends Record<string, {
|
|
82
|
+
run: (...args: any[]) => unknown;
|
|
83
|
+
}>, Name extends keyof Definitions> = Parameters<Definitions[Name]["run"]>[0]["params"];
|
|
43
84
|
type JobControlFunctionContext<S, SUser extends SessionUser, Context, Row> = Omit<UnrestrictedFunctionContext<S, SUser, Context>, "dbo" | "db" | "sql"> & {
|
|
44
85
|
row: Row;
|
|
45
86
|
/** Transactional handlers for validation and preparation writes. */
|
|
46
87
|
dbx: DBTableHandlersFromSchema<S>;
|
|
47
88
|
};
|
|
89
|
+
type JobParamsSchema<Definitions extends Record<string, {
|
|
90
|
+
params?: ParamsSchema;
|
|
91
|
+
}>, Name extends keyof Definitions> = NonNullable<Definitions[Name]["params"]>;
|
|
48
92
|
export {};
|
|
49
93
|
//# sourceMappingURL=createJobControlFunctionDefiner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createJobControlFunctionDefiner.d.ts","sourceRoot":"","sources":["../../lib/Jobs/createJobControlFunctionDefiner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"createJobControlFunctionDefiner.d.ts","sourceRoot":"","sources":["../../lib/Jobs/createJobControlFunctionDefiner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createJobControlFunctionDefiner = void 0;
|
|
4
|
-
|
|
4
|
+
const createManualJobControlFunction_1 = require("./createManualJobControlFunction");
|
|
5
|
+
/**
|
|
6
|
+
* Row controls accept { row }; manual controls accept { jobId, params }.
|
|
7
|
+
* Omit jobId only for a new manual startOrRetry. Existing rows/runs must be readable by the caller.
|
|
8
|
+
*/
|
|
5
9
|
const createJobControlFunctionDefiner = () => (jobs) => (definition) => {
|
|
6
10
|
const { jobName, operation, description, run } = definition;
|
|
7
|
-
const
|
|
8
|
-
if (
|
|
9
|
-
throw new Error(`
|
|
11
|
+
const job = jobs[jobName];
|
|
12
|
+
if (!job)
|
|
13
|
+
throw new Error(`Unknown job: ${jobName}`);
|
|
14
|
+
const { trigger } = job;
|
|
15
|
+
if (trigger.type === "manual") {
|
|
16
|
+
return (0, createManualJobControlFunction_1.createManualJobControlFunction)({
|
|
17
|
+
jobName,
|
|
18
|
+
operation,
|
|
19
|
+
description,
|
|
20
|
+
params: job.params,
|
|
21
|
+
run: run,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
if (trigger.type !== "row" || !trigger.jobIdColumn)
|
|
25
|
+
throw new Error(`Job control requires a manual job or a row job with jobIdColumn: ${jobName}`);
|
|
26
|
+
return createRowJobControlFunction({
|
|
27
|
+
jobName,
|
|
28
|
+
operation,
|
|
29
|
+
description,
|
|
30
|
+
table: trigger.table,
|
|
31
|
+
run: run,
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
exports.createJobControlFunctionDefiner = createJobControlFunctionDefiner;
|
|
35
|
+
const createRowJobControlFunction = ({ jobName, operation, description, table, run, }) => {
|
|
10
36
|
const functionDefinition = {
|
|
11
|
-
input: { row: { type: "RowLookup", table
|
|
37
|
+
input: { row: { type: "RowLookup", table } },
|
|
12
38
|
description,
|
|
13
39
|
unrestrictedDbAccess: true,
|
|
14
40
|
jobControl: { jobName, rowArg: "row", operation },
|
|
@@ -16,10 +42,14 @@ const createJobControlFunctionDefiner = () => (jobs) => (definition) => {
|
|
|
16
42
|
row: input.row,
|
|
17
43
|
operation,
|
|
18
44
|
run: run &&
|
|
19
|
-
((row, dbx) => run({
|
|
45
|
+
((row, dbx) => run({
|
|
46
|
+
...context,
|
|
47
|
+
row,
|
|
48
|
+
dbx,
|
|
49
|
+
jobs: context.jobs.withTransaction(dbx),
|
|
50
|
+
})),
|
|
20
51
|
}),
|
|
21
52
|
};
|
|
22
53
|
return functionDefinition;
|
|
23
54
|
};
|
|
24
|
-
exports.createJobControlFunctionDefiner = createJobControlFunctionDefiner;
|
|
25
55
|
//# sourceMappingURL=createJobControlFunctionDefiner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createJobControlFunctionDefiner.js","sourceRoot":"","sources":["../../lib/Jobs/createJobControlFunctionDefiner.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"createJobControlFunctionDefiner.js","sourceRoot":"","sources":["../../lib/Jobs/createJobControlFunctionDefiner.ts"],"names":[],"mappings":";;;AAQA,qFAG0C;AAE1C;;;GAGG;AACI,MAAM,+BAA+B,GAC1C,GAA2E,EAAE,CAC7E,CAA6C,IAAiB,EAAE,EAAE,CAClE,CAGE,UAUD,EAAE,EAAE;IACH,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IAiBxB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAA,+DAA8B,EAMnC;YACA,OAAO;YACP,SAAS;YACT,WAAW;YACX,MAAM,EAAE,GAAG,CAAC,MAAwD;YACpE,GAAG,EAAE,GAA2C;SACjD,CAAuB,CAAC;IAC3B,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,WAAW;QAChD,MAAM,IAAI,KAAK,CACb,oEAAoE,OAAO,EAAE,CAC9E,CAAC;IACJ,OAAO,2BAA2B,CAA+C;QAC/E,OAAO;QACP,SAAS;QACT,WAAW;QACX,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,EAAE,GAAwC;KAC9C,CAAuB,CAAC;AAC3B,CAAC,CAAC;AA/DS,QAAA,+BAA+B,mCA+DxC;AAEJ,MAAM,2BAA2B,GAAG,CAA+D,EACjG,OAAO,EACP,SAAS,EACT,WAAW,EACX,KAAK,EACL,GAAG,GASJ,EAAE,EAAE;IACH,MAAM,kBAAkB,GAAG;QACzB,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE,KAAK,EAAE,EAAE;QACrD,WAAW;QACX,oBAAoB,EAAE,IAAa;QACnC,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAc,EAAE,SAAS,EAAE;QAC1D,GAAG,EAAE,CAAC,KAAyB,EAAE,OAAuD,EAAE,EAAE,CAC1F,OAAO,CAAC,IAAI,CAAC,OAAO,CAAS,OAAO,EAAE;YACpC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,SAAS;YACT,GAAG,EACD,GAAG;gBACH,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACZ,GAAG,CAAC;oBACF,GAAG,OAAO;oBACV,GAAG;oBACH,GAAG;oBACH,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;iBACxC,CAAC,CAAC;SACR,CAAC;KACL,CAAC;IACF,OAAO,kBACyC,CAAC;AACnD,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createJobsAPI.d.ts","sourceRoot":"","sources":["../../lib/Jobs/createJobsAPI.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createJobsAPI.d.ts","sourceRoot":"","sources":["../../lib/Jobs/createJobsAPI.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAK9C,OAAO,KAAK,EAGV,IAAI,EAGL,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,aAAa,GAAI,WAAW,SAAS,EAAE,KAAK,MAAM,GAAG,SAAS,KAAG,IAyG7E,CAAC"}
|
|
@@ -7,6 +7,7 @@ const runClientRequest_1 = require("../runClientRequest");
|
|
|
7
7
|
const controlJob_1 = require("./controlJob");
|
|
8
8
|
const enqueueJob_1 = require("./enqueueJob");
|
|
9
9
|
const getJobTableHandler_1 = require("./getJobTableHandler");
|
|
10
|
+
const startJob_1 = require("./startJob");
|
|
10
11
|
const createJobsAPI = (prostgles, dbx) => {
|
|
11
12
|
const runInTransaction = async (callback) => {
|
|
12
13
|
prostgles.checkNotDestroyed();
|
|
@@ -22,6 +23,15 @@ const createJobsAPI = (prostgles, dbx) => {
|
|
|
22
23
|
throw error;
|
|
23
24
|
}
|
|
24
25
|
};
|
|
26
|
+
const getUserId = async (userId) => {
|
|
27
|
+
const clientReq = getClientRequest(prostgles, userId);
|
|
28
|
+
if (!clientReq)
|
|
29
|
+
return;
|
|
30
|
+
const publishParser = prostgles.publishParser;
|
|
31
|
+
if (!publishParser)
|
|
32
|
+
throw new Error("Publish parser is not initialized");
|
|
33
|
+
return (await publishParser.getPublishParams(clientReq, undefined)).user?.id;
|
|
34
|
+
};
|
|
25
35
|
return {
|
|
26
36
|
withTransaction: (dbx) => {
|
|
27
37
|
prostgles.dboBuilder.getTransactionForHandlers(dbx);
|
|
@@ -42,6 +52,11 @@ const createJobsAPI = (prostgles, dbx) => {
|
|
|
42
52
|
};
|
|
43
53
|
return dbx ? runInTransaction(read) : read(undefined);
|
|
44
54
|
},
|
|
55
|
+
start: (name, params = {}, options) => runInTransaction(async (transaction) => (0, startJob_1.startJob)(prostgles, transaction, name, {
|
|
56
|
+
params,
|
|
57
|
+
row: options?.row,
|
|
58
|
+
userId: await getUserId(options?.userId),
|
|
59
|
+
})),
|
|
45
60
|
cancel: (id) => runInTransaction(async (transaction) => {
|
|
46
61
|
const job = await (0, getJobTableHandler_1.getJobTableHandler)(prostgles, transaction).findOne({ id });
|
|
47
62
|
if (!job)
|
|
@@ -55,15 +70,7 @@ const createJobsAPI = (prostgles, dbx) => {
|
|
|
55
70
|
AND status IN ('pending', 'running')`, { jobId: id });
|
|
56
71
|
}),
|
|
57
72
|
rerun: (id, params = {}, options) => runInTransaction(async (transaction) => {
|
|
58
|
-
const userId = await (
|
|
59
|
-
const clientReq = getClientRequest(prostgles, options?.userId);
|
|
60
|
-
if (!clientReq)
|
|
61
|
-
return;
|
|
62
|
-
const publishParser = prostgles.publishParser;
|
|
63
|
-
if (!publishParser)
|
|
64
|
-
throw new Error("Publish parser is not initialized");
|
|
65
|
-
return (await publishParser.getPublishParams(clientReq, undefined)).user?.id;
|
|
66
|
-
})();
|
|
73
|
+
const userId = await getUserId(options?.userId);
|
|
67
74
|
const job = await (0, getJobTableHandler_1.getJobTableHandler)(prostgles, transaction).findOne({ id });
|
|
68
75
|
if (!job)
|
|
69
76
|
throw new Error("Job not found");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createJobsAPI.js","sourceRoot":"","sources":["../../lib/Jobs/createJobsAPI.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"createJobsAPI.js","sourceRoot":"","sources":["../../lib/Jobs/createJobsAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { MaybePromise } from "prostgles-types";
|
|
2
|
+
import type { SessionUser } from "../Auth/AuthTypes";
|
|
3
|
+
import type { DBTableHandlersFromSchema } from "../DBSchemaBuilder/DBSchemaBuilder";
|
|
4
|
+
import type { ServerFunctionContextMarker, UnrestrictedFunctionContext } from "../PublishParser/defineServerFunction";
|
|
5
|
+
import type { JobControlOperation, JobRecord, JobValue, ParamsOutput, ParamsSchema } from "./JobTypes";
|
|
6
|
+
export declare const createManualJobControlFunction: <S, SUser extends SessionUser, Context, Schema extends ParamsSchema, Operation extends JobControlOperation>({ jobName, operation, description, params, run, }: {
|
|
7
|
+
jobName: string;
|
|
8
|
+
operation: Operation;
|
|
9
|
+
description: string | undefined;
|
|
10
|
+
params: Schema | undefined;
|
|
11
|
+
run: ((context: ManualJobControlFunctionContext<S, SUser, Context, ParamsOutput<Schema>>) => MaybePromise<void>) | undefined;
|
|
12
|
+
}) => {
|
|
13
|
+
input: ManualControlInput<Schema, Operation>;
|
|
14
|
+
description: string | undefined;
|
|
15
|
+
unrestrictedDbAccess: true;
|
|
16
|
+
run: (input: {
|
|
17
|
+
jobId?: string;
|
|
18
|
+
params?: Record<string, JobValue>;
|
|
19
|
+
}, context: UnrestrictedFunctionContext<S, SUser, Context>) => Promise<{
|
|
20
|
+
jobId: string;
|
|
21
|
+
}>;
|
|
22
|
+
} & ServerFunctionContextMarker<S, SUser, Context>;
|
|
23
|
+
export type ManualJobControlFunctionContext<S, SUser extends SessionUser, Context, Params> = Omit<UnrestrictedFunctionContext<S, SUser, Context>, "dbo" | "db" | "sql"> & {
|
|
24
|
+
row: undefined;
|
|
25
|
+
job: JobRecord | undefined;
|
|
26
|
+
params: Params;
|
|
27
|
+
dbx: DBTableHandlersFromSchema<S>;
|
|
28
|
+
};
|
|
29
|
+
type ManualControlInput<Schema extends ParamsSchema, Operation extends JobControlOperation> = {
|
|
30
|
+
jobId: {
|
|
31
|
+
type: "string";
|
|
32
|
+
optional: Operation extends "startOrRetry" ? true : false;
|
|
33
|
+
};
|
|
34
|
+
} & (Operation extends "cancel" ? {} : {
|
|
35
|
+
params: {
|
|
36
|
+
optional: true;
|
|
37
|
+
type: {
|
|
38
|
+
[Key in keyof Schema]: Omit<Schema[Key] extends {
|
|
39
|
+
jsonbSchema: infer Field;
|
|
40
|
+
} ? Field : {
|
|
41
|
+
type: Schema[Key]["jsonbSchemaType"];
|
|
42
|
+
}, "optional"> & {
|
|
43
|
+
optional: true;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=createManualJobControlFunction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createManualJobControlFunction.d.ts","sourceRoot":"","sources":["../../lib/Jobs/createManualJobControlFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,KAAK,EACV,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EACV,mBAAmB,EACnB,SAAS,EACT,QAAQ,EAER,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,8BAA8B,GACzC,CAAC,EACD,KAAK,SAAS,WAAW,EACzB,OAAO,EACP,MAAM,SAAS,YAAY,EAC3B,SAAS,SAAS,mBAAmB,EACrC,mDAMC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,GAAG,EACC,CAAC,CACC,OAAO,EAAE,+BAA+B,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,KAC9E,YAAY,CAAC,IAAI,CAAC,CAAC,GACxB,SAAS,CAAC;CACf,KA4C8B;;;;iBArBlB;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE,WACnD,2BAA2B,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;;;IAqBzD,2BAA2B,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAChD,CAAC;AAEF,MAAM,MAAM,+BAA+B,CAAC,CAAC,EAAE,KAAK,SAAS,WAAW,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,CAC/F,2BAA2B,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAC9C,KAAK,GAAG,IAAI,GAAG,KAAK,CACrB,GAAG;IACF,GAAG,EAAE,SAAS,CAAC;IACf,GAAG,EAAE,SAAS,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF,KAAK,kBAAkB,CAAC,MAAM,SAAS,YAAY,EAAE,SAAS,SAAS,mBAAmB,IAAI;IAC5F,KAAK,EAAE;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,SAAS,SAAS,cAAc,GAAG,IAAI,GAAG,KAAK,CAAA;KAAE,CAAC;CACtF,GAAG,CAAC,SAAS,SAAS,QAAQ,GAAG,EAAE,GAClC;IACE,MAAM,EAAE;QACN,QAAQ,EAAE,IAAI,CAAC;QACf,IAAI,EAAE;aACH,GAAG,IAAI,MAAM,MAAM,GAAG,IAAI,CACzB,MAAM,CAAC,GAAG,CAAC,SAAS;gBAAE,WAAW,EAAE,MAAM,KAAK,CAAA;aAAE,GAAG,KAAK,GACtD;gBAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAA;aAAE,EAC1C,UAAU,CACX,GAAG;gBAAE,QAAQ,EAAE,IAAI,CAAA;aAAE;SACvB,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createManualJobControlFunction = void 0;
|
|
4
|
+
const createManualJobControlFunction = ({ jobName, operation, description, params, run, }) => {
|
|
5
|
+
const input = {
|
|
6
|
+
jobId: { type: "string", optional: operation === "startOrRetry" },
|
|
7
|
+
...(operation !== "cancel" && {
|
|
8
|
+
params: {
|
|
9
|
+
type: Object.fromEntries(Object.entries(params ?? {}).map(([key, field]) => [
|
|
10
|
+
key,
|
|
11
|
+
{
|
|
12
|
+
...(field.jsonbSchema ?? { type: field.jsonbSchemaType }),
|
|
13
|
+
optional: true,
|
|
14
|
+
},
|
|
15
|
+
])),
|
|
16
|
+
optional: true,
|
|
17
|
+
},
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
20
|
+
const functionDefinition = {
|
|
21
|
+
input,
|
|
22
|
+
description,
|
|
23
|
+
unrestrictedDbAccess: true,
|
|
24
|
+
run: (input, context) => {
|
|
25
|
+
const prepare = run &&
|
|
26
|
+
(({ job, params, dbx }) => run({
|
|
27
|
+
...context,
|
|
28
|
+
row: undefined,
|
|
29
|
+
job,
|
|
30
|
+
params: params,
|
|
31
|
+
dbx,
|
|
32
|
+
jobs: context.jobs.withTransaction(dbx),
|
|
33
|
+
}));
|
|
34
|
+
return context.jobs.control(jobName, {
|
|
35
|
+
...input,
|
|
36
|
+
operation,
|
|
37
|
+
run: prepare,
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
return functionDefinition;
|
|
42
|
+
};
|
|
43
|
+
exports.createManualJobControlFunction = createManualJobControlFunction;
|
|
44
|
+
//# sourceMappingURL=createManualJobControlFunction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createManualJobControlFunction.js","sourceRoot":"","sources":["../../lib/Jobs/createManualJobControlFunction.ts"],"names":[],"mappings":";;;AAgBO,MAAM,8BAA8B,GAAG,CAM5C,EACA,OAAO,EACP,SAAS,EACT,WAAW,EACX,MAAM,EACN,GAAG,GAWJ,EAAE,EAAE;IACH,MAAM,KAAK,GAAG;QACZ,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,KAAK,cAAc,EAAE;QACjE,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI;YAC5B,MAAM,EAAE;gBACN,IAAI,EAAE,MAAM,CAAC,WAAW,CACtB,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;oBACjD,GAAG;oBACH;wBACE,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;wBACzD,QAAQ,EAAE,IAAI;qBACI;iBACrB,CAAC,CACH;gBACD,QAAQ,EAAE,IAAI;aACf;SACF,CAAC;KACsC,CAAC;IAC3C,MAAM,kBAAkB,GAAG;QACzB,KAAK;QACL,WAAW;QACX,oBAAoB,EAAE,IAAa;QACnC,GAAG,EAAE,CACH,KAA4D,EAC5D,OAAuD,EACvD,EAAE;YACF,MAAM,OAAO,GACX,GAAG;gBACH,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CACxB,GAAG,CAAC;oBACF,GAAG,OAAO;oBACV,GAAG,EAAE,SAAS;oBACd,GAAG;oBACH,MAAM,EAAE,MAAyC;oBACjD,GAAG;oBACH,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;iBACxC,CAAC,CAAC,CAAC;YACR,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAI,OAAO,EAAE;gBACtC,GAAG,KAAK;gBACR,SAAS;gBACT,GAAG,EAAE,OAAO;aACb,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IACF,OAAO,kBACyC,CAAC;AACnD,CAAC,CAAC;AApEW,QAAA,8BAA8B,kCAoEzC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Prostgles } from "../Prostgles";
|
|
2
2
|
import type { JobRecord, JobTransaction } from "./JobTypes";
|
|
3
|
-
/**
|
|
3
|
+
/** Enqueue configured jobs inside the trigger, start or rerun transaction. */
|
|
4
4
|
export declare const enqueueJob: (prostgles: Prostgles, transaction: JobTransaction, name: string, targetRowPkey: JobRecord["target_row_pkey"], options?: {
|
|
5
5
|
userId?: string;
|
|
6
6
|
params?: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enqueueJob.d.ts","sourceRoot":"","sources":["../../lib/Jobs/enqueueJob.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5D,
|
|
1
|
+
{"version":3,"file":"enqueueJob.d.ts","sourceRoot":"","sources":["../../lib/Jobs/enqueueJob.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI5D,8EAA8E;AAC9E,eAAO,MAAM,UAAU,GACrB,WAAW,SAAS,EACpB,aAAa,cAAc,EAC3B,MAAM,MAAM,EACZ,eAAe,SAAS,CAAC,iBAAiB,CAAC,EAC3C,UAAS;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,+FAA+F;IAC/F,UAAU,CAAC,EAAE,IAAI,CAAC;CACd;;;EAyFP,CAAC"}
|
package/dist/Jobs/enqueueJob.js
CHANGED
|
@@ -6,7 +6,7 @@ const node_crypto_1 = require("node:crypto");
|
|
|
6
6
|
const getJobDefinition_1 = require("./getJobDefinition");
|
|
7
7
|
const getJobTableHandler_1 = require("./getJobTableHandler");
|
|
8
8
|
const getJobParams_1 = require("./getJobParams");
|
|
9
|
-
/**
|
|
9
|
+
/** Enqueue configured jobs inside the trigger, start or rerun transaction. */
|
|
10
10
|
const enqueueJob = async (prostgles, transaction, name, targetRowPkey, options = {}) => {
|
|
11
11
|
const { definition } = (0, getJobDefinition_1.getJobDefinition)(prostgles, name);
|
|
12
12
|
if (definition.runAs === "user" && !options.userId) {
|
|
@@ -80,6 +80,7 @@ const enqueueJob = async (prostgles, transaction, name, targetRowPkey, options =
|
|
|
80
80
|
occurrence: options.occurrence?.toISOString() ?? null,
|
|
81
81
|
reason: options.reason ?? "trigger",
|
|
82
82
|
max_attempts: definition.retry?.maxAttempts ?? 1,
|
|
83
|
+
max_stalled_count: definition.retry?.maxStalledCount ?? 3,
|
|
83
84
|
delay_ms: definition.retry?.delayMs ?? 1000,
|
|
84
85
|
backoff: definition.retry?.backoff ?? "fixed",
|
|
85
86
|
});
|