prostgles-server 4.2.705 → 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/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/JobTypes.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ export type ParamsOutput<P extends ParamsSchema> = {
|
|
|
27
27
|
export type RowTrigger<S, T extends JobTableName<S>> = {
|
|
28
28
|
type: "row";
|
|
29
29
|
table: T;
|
|
30
|
+
/** Use an empty array for rows whose jobs are started only through the jobs API. */
|
|
30
31
|
on: ("insert" | "update")[];
|
|
31
32
|
/** On updates, at least one of these columns must actually change. */
|
|
32
33
|
columns?: (keyof JobRow<S, T> & string)[];
|
|
@@ -43,6 +44,9 @@ export type ScheduleTrigger = {
|
|
|
43
44
|
cron: string;
|
|
44
45
|
timezone?: string;
|
|
45
46
|
};
|
|
47
|
+
export type ManualTrigger = {
|
|
48
|
+
type: "manual";
|
|
49
|
+
};
|
|
46
50
|
export type JobRetention = "forever" | Partial<Record<Extract<JobStatus, "succeeded" | "failed" | "cancelled">, string | {
|
|
47
51
|
/** Positive milliseconds or a PostgreSQL interval, measured from finished_at. */
|
|
48
52
|
maxAge?: number | string;
|
|
@@ -50,12 +54,13 @@ export type JobRetention = "forever" | Partial<Record<Extract<JobStatus, "succee
|
|
|
50
54
|
maxCount?: number;
|
|
51
55
|
}>>;
|
|
52
56
|
export type JobContext<S, T extends JobTableName<S> | undefined, P extends ParamsSchema, Context = undefined> = {
|
|
53
|
-
/** Re-fetched at the start of each attempt. Undefined for
|
|
57
|
+
/** Re-fetched at the start of each attempt. Undefined for jobs without a row. */
|
|
54
58
|
row: T extends string ? Required<JobRow<S, T>> : undefined;
|
|
55
59
|
params: ParamsOutput<P>;
|
|
56
60
|
dbo: DBHandlerServer<S>;
|
|
57
61
|
user: SessionUser["user"] | undefined;
|
|
58
62
|
context: Context;
|
|
63
|
+
/** An attempt released during graceful shutdown keeps its number when resumed. */
|
|
59
64
|
run: {
|
|
60
65
|
id: string;
|
|
61
66
|
attempt: number;
|
|
@@ -75,8 +80,8 @@ export type JobDefinition<S = void, T extends JobTableName<S> | undefined = JobT
|
|
|
75
80
|
trigger: RowTrigger<S, T>;
|
|
76
81
|
retention?: never;
|
|
77
82
|
} : {
|
|
78
|
-
trigger: ScheduleTrigger;
|
|
79
|
-
/** Required for
|
|
83
|
+
trigger: ScheduleTrigger | ManualTrigger;
|
|
84
|
+
/** Required for jobs without a row. "forever" keeps all history.
|
|
80
85
|
* Per-status strings shorthand maxAge; "forever" or omitted statuses keep their history.
|
|
81
86
|
* Cleanup runs periodically and preserves the current scheduling minute for deduplication.
|
|
82
87
|
*/
|
|
@@ -99,7 +104,11 @@ type DefineJob<S, Context> = {
|
|
|
99
104
|
trigger: RowTrigger<S, T>;
|
|
100
105
|
retention?: never;
|
|
101
106
|
}): JobDefinition<S, T, P, Context>;
|
|
102
|
-
<const P extends ParamsSchema = {}>(definition: JobDefinition<S, undefined, P, Context>
|
|
107
|
+
<const P extends ParamsSchema = {}, Trigger extends ScheduleTrigger | ManualTrigger = ScheduleTrigger | ManualTrigger>(definition: JobDefinition<S, undefined, P, Context> & {
|
|
108
|
+
trigger: Trigger;
|
|
109
|
+
}): JobDefinition<S, undefined, P, Context> & {
|
|
110
|
+
trigger: Trigger;
|
|
111
|
+
};
|
|
103
112
|
};
|
|
104
113
|
export declare const jobControlStatuses: Record<JobControlOperation, readonly JobStatus[]>;
|
|
105
114
|
export type JobControlOptions<S = void, Row extends AnyObject = AnyObject> = {
|
|
@@ -107,6 +116,17 @@ export type JobControlOptions<S = void, Row extends AnyObject = AnyObject> = {
|
|
|
107
116
|
operation: JobControlOperation;
|
|
108
117
|
run?: (row: Row, dbx: DBTableHandlersFromSchema<S>) => MaybePromise<void>;
|
|
109
118
|
};
|
|
119
|
+
export type ManualJobControlOptions<S = void> = {
|
|
120
|
+
/** Omit only when starting a new manual job with startOrRetry. */
|
|
121
|
+
jobId?: string;
|
|
122
|
+
params?: Record<string, JobValue>;
|
|
123
|
+
operation: JobControlOperation;
|
|
124
|
+
run?: (context: {
|
|
125
|
+
job: JobRecord | undefined;
|
|
126
|
+
params: Record<string, JobValue>;
|
|
127
|
+
dbx: DBTableHandlersFromSchema<S>;
|
|
128
|
+
}) => MaybePromise<void>;
|
|
129
|
+
};
|
|
110
130
|
/** Uses the execution request/user, or an explicit userId. Calls without either are trusted server operations.
|
|
111
131
|
* Mutations create their own transaction unless explicitly bound with withTransaction.
|
|
112
132
|
*/
|
|
@@ -117,6 +137,15 @@ export type Jobs = {
|
|
|
117
137
|
get: (id: string, options?: {
|
|
118
138
|
userId: string;
|
|
119
139
|
}) => Promise<Partial<JobRecord> | undefined>;
|
|
140
|
+
/** Server operation. Row jobs require a primary key and must satisfy trigger.when.
|
|
141
|
+
* Expose through a published function to authorize client calls, as with rerun.
|
|
142
|
+
*/
|
|
143
|
+
start: (name: string, params?: Record<string, JobValue>, options?: {
|
|
144
|
+
row?: JobRecord["target_row_pkey"];
|
|
145
|
+
userId?: string;
|
|
146
|
+
}) => Promise<{
|
|
147
|
+
jobId: string;
|
|
148
|
+
}>;
|
|
120
149
|
/** Server operation. Expose through a published function to authorize client calls. */
|
|
121
150
|
cancel: (id: string) => Promise<void>;
|
|
122
151
|
/** Server operation. The user context determines who the new run executes as. */
|
|
@@ -126,9 +155,14 @@ export type Jobs = {
|
|
|
126
155
|
jobId: string;
|
|
127
156
|
}>;
|
|
128
157
|
/** Requires an execution user. Uses the bound transaction, or creates its own. */
|
|
129
|
-
control:
|
|
130
|
-
|
|
131
|
-
|
|
158
|
+
control: {
|
|
159
|
+
<S = void, Row extends AnyObject = AnyObject>(name: string, options: JobControlOptions<S, Row>): Promise<{
|
|
160
|
+
jobId: string;
|
|
161
|
+
}>;
|
|
162
|
+
<S = void>(name: string, options: ManualJobControlOptions<S>): Promise<{
|
|
163
|
+
jobId: string;
|
|
164
|
+
}>;
|
|
165
|
+
};
|
|
132
166
|
};
|
|
133
167
|
export type JobTransaction = {
|
|
134
168
|
t: pgPromise.ITask<{}>;
|
|
@@ -139,13 +173,19 @@ type JobDefinitionOptions<S, T extends JobTableName<S> | undefined, P extends Pa
|
|
|
139
173
|
params?: P;
|
|
140
174
|
/** Defaults to system. User jobs enforce the triggering/rerunning user's publish rules. */
|
|
141
175
|
runAs?: "system" | "user";
|
|
176
|
+
/**
|
|
177
|
+
* Failures and stalled executions have separate retry budgets and backoff counts.
|
|
178
|
+
* Graceful shutdowns consume neither.
|
|
179
|
+
*/
|
|
142
180
|
retry?: {
|
|
143
181
|
maxAttempts: number;
|
|
182
|
+
/** Maximum stalled executions to recover from. Defaults to 3; 0 disables recovery. */
|
|
183
|
+
maxStalledCount?: number;
|
|
144
184
|
backoff?: "exponential" | "fixed";
|
|
145
185
|
delayMs?: number;
|
|
146
186
|
};
|
|
147
187
|
timeoutMs?: number;
|
|
148
|
-
/** Conflicts use the job name and row primary key, or just the name for
|
|
188
|
+
/** Conflicts use the job name and row primary key, or just the name for jobs without a row. */
|
|
149
189
|
onConflict?: "queue" | "replace" | "skip";
|
|
150
190
|
/** Maximum parallel runs across workers. Defaults to 1. Same-key runs are serialized. */
|
|
151
191
|
concurrency?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobTypes.d.ts","sourceRoot":"","sources":["../../lib/Jobs/JobTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,KAAK,EACL,YAAY,EACb,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,SAAS,EACT,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EACV,eAAe,EACf,yBAAyB,EAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,MAAM,MAAM,YAAY,GAAG,MAAM,CAC/B,MAAM,EACN,cAAc,GAAG,CAAC;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAC7D,CAAC;AACF,KAAK,SAAS,CAAC,CAAC,SAAS,cAAc,IACrC,CAAC,SAAS;IAAE,WAAW,EAAE,MAAM,CAAC,SAAS,KAAK,CAAC,WAAW,CAAA;CAAE,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GACnF,CAAC,SAAS;IAAE,eAAe,EAAE,MAAM,CAAC,SAAS,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,GAChG,KAAK,CAAC;AACV,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,YAAY,IAAI;IACjD,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3F,GAAG;IACF,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5F,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,IAAI;IACrD,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;IACT,EAAE,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;IAC5B,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1C,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;IAC1C;;OAEG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;CAChE,CAAC;AACF,yEAAyE;AACzE,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACpF,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,OAAO,CACL,MAAM,CACJ,OAAO,CAAC,SAAS,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC,EACtD,MAAM,GACN;IACE,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CACJ,CACF,CAAC;AACN,MAAM,MAAM,UAAU,CACpB,CAAC,EACD,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,EACrC,CAAC,SAAS,YAAY,EACtB,OAAO,GAAG,SAAS,IACjB;IACF,
|
|
1
|
+
{"version":3,"file":"JobTypes.d.ts","sourceRoot":"","sources":["../../lib/Jobs/JobTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobTypes.js","sourceRoot":"","sources":["../../lib/Jobs/JobTypes.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"JobTypes.js","sourceRoot":"","sources":["../../lib/Jobs/JobTypes.ts"],"names":[],"mappings":";;;AA6HA,oFAAoF;AAC7E,MAAM,gBAAgB,GAAG,GAAkC,EAAE,CAClE,CAAC,CAAC,UAAmB,EAAE,EAAE,CAAC,UAAU,CAA0B,CAAC;AADpD,QAAA,gBAAgB,oBACoC;AAiBpD,QAAA,kBAAkB,GAAsD;IACnF,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC;IACrC,KAAK,EAAE,CAAC,WAAW,CAAC;IACpB,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B,CAAC"}
|
package/dist/Jobs/claimJob.d.ts
CHANGED
|
@@ -10,7 +10,9 @@ export declare const claimJob: (prostgles: Prostgles, name: string, concurrency:
|
|
|
10
10
|
readonly reason: "trigger" | "rerun";
|
|
11
11
|
readonly status: "running";
|
|
12
12
|
readonly attempts: number;
|
|
13
|
+
readonly stalled_count: number;
|
|
13
14
|
readonly max_attempts: number;
|
|
15
|
+
readonly max_stalled_count: number;
|
|
14
16
|
readonly delay_ms: number;
|
|
15
17
|
readonly backoff: "fixed" | "exponential";
|
|
16
18
|
readonly cancel_requested: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claimJob.d.ts","sourceRoot":"","sources":["../../lib/Jobs/claimJob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,eAAO,MAAM,QAAQ,GAAU,WAAW,SAAS,EAAE,MAAM,MAAM,EAAE,aAAa,MAAM
|
|
1
|
+
{"version":3,"file":"claimJob.d.ts","sourceRoot":"","sources":["../../lib/Jobs/claimJob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAI9C,eAAO,MAAM,QAAQ,GAAU,WAAW,SAAS,EAAE,MAAM,MAAM,EAAE,aAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAyDrF,CAAC"}
|
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"}
|