duron 0.3.0-beta.14 → 0.3.0-beta.17
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/action.d.ts +53 -4
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +5 -0
- package/dist/adapters/postgres/base.d.ts +1 -1
- package/dist/adapters/postgres/base.d.ts.map +1 -1
- package/dist/adapters/postgres/base.js +17 -6
- package/dist/adapters/postgres/schema.d.ts +19 -4
- package/dist/adapters/postgres/schema.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.default.d.ts +19 -4
- package/dist/adapters/postgres/schema.default.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.js +4 -2
- package/dist/adapters/schemas.d.ts +13 -0
- package/dist/adapters/schemas.d.ts.map +1 -1
- package/dist/adapters/schemas.js +5 -0
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +8 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -0
- package/dist/step-manager.js +9 -1
- package/migrations/postgres/{20260120154151_mean_magdalene → 20260121160012_normal_bloodstrike}/migration.sql +5 -1
- package/migrations/postgres/{20260121134451_thankful_manta → 20260121160012_normal_bloodstrike}/snapshot.json +38 -4
- package/package.json +1 -1
- package/src/action.ts +59 -2
- package/src/adapters/postgres/base.ts +17 -3
- package/src/adapters/postgres/schema.ts +4 -2
- package/src/adapters/schemas.ts +5 -0
- package/src/client.ts +11 -0
- package/src/index.ts +1 -0
- package/src/server.ts +2 -0
- package/src/step-manager.ts +10 -1
- package/migrations/postgres/20260120154151_mean_magdalene/snapshot.json +0 -1469
- package/migrations/postgres/20260121134451_thankful_manta/migration.sql +0 -2
package/dist/client.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface JobResult {
|
|
|
19
19
|
actionName: string;
|
|
20
20
|
status: JobStatus;
|
|
21
21
|
groupKey: string;
|
|
22
|
+
description: string | null;
|
|
22
23
|
input: unknown;
|
|
23
24
|
output: unknown;
|
|
24
25
|
error: Job['error'];
|
|
@@ -31,6 +32,7 @@ export interface TypedJobResult<TAction extends Action<any, any, any>> {
|
|
|
31
32
|
actionName: string;
|
|
32
33
|
status: JobStatus;
|
|
33
34
|
groupKey: string;
|
|
35
|
+
description: string | null;
|
|
34
36
|
input: InferActionSchema<NonNullable<TAction['input']>>;
|
|
35
37
|
output: InferActionSchema<NonNullable<TAction['output']>>;
|
|
36
38
|
error: Job['error'];
|
|
@@ -352,6 +354,7 @@ export declare class Client<TActions extends Record<string, Action<any, any, TVa
|
|
|
352
354
|
id: string;
|
|
353
355
|
actionName: string;
|
|
354
356
|
groupKey: string;
|
|
357
|
+
description: string | null;
|
|
355
358
|
input: any;
|
|
356
359
|
output: any;
|
|
357
360
|
error: any;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -207,6 +207,11 @@ export class Client {
|
|
|
207
207
|
if (action.groups?.concurrency) {
|
|
208
208
|
concurrencyLimit = await action.groups.concurrency(concurrencyCtx);
|
|
209
209
|
}
|
|
210
|
+
// Calculate description if provided
|
|
211
|
+
let description = null;
|
|
212
|
+
if (action.description) {
|
|
213
|
+
description = await action.description(concurrencyCtx);
|
|
214
|
+
}
|
|
210
215
|
// Create job in database
|
|
211
216
|
const jobId = await this.#database.createJob({
|
|
212
217
|
queue: action.name,
|
|
@@ -216,6 +221,7 @@ export class Client {
|
|
|
216
221
|
checksum: action.checksum,
|
|
217
222
|
concurrencyLimit,
|
|
218
223
|
concurrencyStepLimit: action.steps.concurrency,
|
|
224
|
+
description,
|
|
219
225
|
});
|
|
220
226
|
if (!jobId) {
|
|
221
227
|
throw new Error(`Failed to create job for action ${String(actionName)}`);
|
|
@@ -508,6 +514,7 @@ export class Client {
|
|
|
508
514
|
actionName: job.actionName,
|
|
509
515
|
status: job.status,
|
|
510
516
|
groupKey: job.groupKey,
|
|
517
|
+
description: job.description,
|
|
511
518
|
input: job.input,
|
|
512
519
|
output: job.output,
|
|
513
520
|
error: job.error,
|
|
@@ -724,6 +731,7 @@ export class Client {
|
|
|
724
731
|
actionName: job.actionName,
|
|
725
732
|
status: job.status,
|
|
726
733
|
groupKey: job.groupKey,
|
|
734
|
+
description: job.description,
|
|
727
735
|
input: job.input,
|
|
728
736
|
output: job.output,
|
|
729
737
|
error: job.error,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Action } from './action.js';
|
|
2
2
|
import { Client, type ClientOptions } from './client.js';
|
|
3
|
-
export { createStep, defineAction, type StepDefinition, type StepDefinitionHandlerContext, type StepDefinitionInput, } from './action.js';
|
|
3
|
+
export { createStep, defineAction, type StepDefinition, type StepDefinitionHandlerContext, type StepDefinitionInput, type StepNameContext, } from './action.js';
|
|
4
4
|
export * from './client.js';
|
|
5
5
|
export * from './constants.js';
|
|
6
6
|
export { NonRetriableError, UnhandledChildStepsError } from './errors.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,4BAA4B,EACjC,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAA;AACpB,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACzE,cAAc,aAAa,CAAA;AAC3B,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,cAAc,sBAAsB,CAAA;AAEpC,eAAO,MAAM,KAAK,GAChB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAC7D,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEpC,SAAS,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,iCACA,CAAA"}
|
package/dist/server.d.ts
CHANGED
|
@@ -89,6 +89,7 @@ export declare const GetJobsQuerySchema: z.ZodPipe<z.ZodObject<{
|
|
|
89
89
|
fActionName: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
90
90
|
fGroupKey: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
91
91
|
fClientId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>;
|
|
92
|
+
fDescription: z.ZodOptional<z.ZodString>;
|
|
92
93
|
fCreatedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodCoercedDate<unknown>, z.ZodArray<z.ZodCoercedDate<unknown>>]>>;
|
|
93
94
|
fStartedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodCoercedDate<unknown>, z.ZodArray<z.ZodCoercedDate<unknown>>]>>;
|
|
94
95
|
fFinishedAt: z.ZodOptional<z.ZodUnion<readonly [z.ZodCoercedDate<unknown>, z.ZodArray<z.ZodCoercedDate<unknown>>]>>;
|
|
@@ -112,6 +113,7 @@ export declare const GetJobsQuerySchema: z.ZodPipe<z.ZodObject<{
|
|
|
112
113
|
fActionName?: string | string[] | undefined;
|
|
113
114
|
fGroupKey?: string | string[] | undefined;
|
|
114
115
|
fClientId?: string | string[] | undefined;
|
|
116
|
+
fDescription?: string | undefined;
|
|
115
117
|
fCreatedAt?: Date | Date[] | undefined;
|
|
116
118
|
fStartedAt?: Date | Date[] | undefined;
|
|
117
119
|
fFinishedAt?: Date | Date[] | undefined;
|
|
@@ -126,6 +128,7 @@ export declare const GetJobsResponseSchema: z.ZodObject<{
|
|
|
126
128
|
id: z.ZodString;
|
|
127
129
|
actionName: z.ZodString;
|
|
128
130
|
groupKey: z.ZodString;
|
|
131
|
+
description: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
129
132
|
input: z.ZodAny;
|
|
130
133
|
output: z.ZodNullable<z.ZodAny>;
|
|
131
134
|
error: z.ZodNullable<z.ZodAny>;
|
|
@@ -585,6 +588,7 @@ export declare function createServer<P extends string>({ client, prefix, login,
|
|
|
585
588
|
id: string;
|
|
586
589
|
actionName: string;
|
|
587
590
|
groupKey: string;
|
|
591
|
+
description: string | null;
|
|
588
592
|
input: any;
|
|
589
593
|
output: any;
|
|
590
594
|
error: any;
|
|
@@ -713,6 +717,7 @@ export declare function createServer<P extends string>({ client, prefix, login,
|
|
|
713
717
|
id: string;
|
|
714
718
|
actionName: string;
|
|
715
719
|
groupKey: string;
|
|
720
|
+
description: string | null;
|
|
716
721
|
input: any;
|
|
717
722
|
output: any;
|
|
718
723
|
error: any;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAML,kBAAkB,EAKlB,eAAe,EAEf,mBAAmB,EACpB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAMzC;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC;;;;OAIG;gBACS,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C;;;;OAIG;gBACS,OAAO,EAAE,MAAM;CAI5B;AAUD,eAAO,MAAM,sBAAsB;;;;;;;;;GAQ9B,CAAA;AAGL,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAA0B,CAAA;AAEhE,eAAO,MAAM,kBAAkB
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -60,6 +60,7 @@ export const GetJobsQuerySchema = z
|
|
|
60
60
|
fActionName: z.union([z.string(), z.array(z.string())]).optional(),
|
|
61
61
|
fGroupKey: z.union([z.string(), z.array(z.string())]).optional(),
|
|
62
62
|
fClientId: z.union([z.string(), z.array(z.string())]).optional(),
|
|
63
|
+
fDescription: z.string().optional(),
|
|
63
64
|
// Date filters: can be a single ISO string or JSON array [start, end] - both coerced to Date objects
|
|
64
65
|
fCreatedAt: z.union([z.coerce.date(), z.array(z.coerce.date())]).optional(),
|
|
65
66
|
fStartedAt: z.union([z.coerce.date(), z.array(z.coerce.date())]).optional(),
|
|
@@ -82,6 +83,8 @@ export const GetJobsQuerySchema = z
|
|
|
82
83
|
filters.groupKey = data.fGroupKey;
|
|
83
84
|
if (data.fClientId)
|
|
84
85
|
filters.clientId = data.fClientId;
|
|
86
|
+
if (data.fDescription)
|
|
87
|
+
filters.description = data.fDescription;
|
|
85
88
|
if (data.fCreatedAt)
|
|
86
89
|
filters.createdAt = data.fCreatedAt;
|
|
87
90
|
if (data.fStartedAt)
|
package/dist/step-manager.js
CHANGED
|
@@ -722,7 +722,15 @@ class ActionContext {
|
|
|
722
722
|
})
|
|
723
723
|
: input;
|
|
724
724
|
// Resolve step name (static or dynamic)
|
|
725
|
-
|
|
725
|
+
// If it's a function, pass the full context including input, variables, jobId, and parentStepId
|
|
726
|
+
const stepName = typeof stepDef.name === 'function'
|
|
727
|
+
? stepDef.name({
|
|
728
|
+
input: validatedInput,
|
|
729
|
+
var: this.#variables,
|
|
730
|
+
jobId: this.#jobId,
|
|
731
|
+
parentStepId,
|
|
732
|
+
})
|
|
733
|
+
: stepDef.name;
|
|
726
734
|
// Merge options: action defaults -> step definition -> call-time overrides
|
|
727
735
|
const mergedOptions = {
|
|
728
736
|
...this.#action.steps,
|
|
@@ -27,6 +27,7 @@ CREATE TABLE "duron"."jobs" (
|
|
|
27
27
|
"id" uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
28
28
|
"action_name" text NOT NULL,
|
|
29
29
|
"group_key" text NOT NULL,
|
|
30
|
+
"description" text,
|
|
30
31
|
"status" text DEFAULT 'created' NOT NULL,
|
|
31
32
|
"checksum" text NOT NULL,
|
|
32
33
|
"input" jsonb DEFAULT '{}' NOT NULL,
|
|
@@ -37,7 +38,8 @@ CREATE TABLE "duron"."jobs" (
|
|
|
37
38
|
"started_at" timestamp with time zone,
|
|
38
39
|
"finished_at" timestamp with time zone,
|
|
39
40
|
"client_id" text,
|
|
40
|
-
"concurrency_limit" integer
|
|
41
|
+
"concurrency_limit" integer NOT NULL,
|
|
42
|
+
"concurrency_step_limit" integer NOT NULL,
|
|
41
43
|
"created_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
42
44
|
"updated_at" timestamp with time zone DEFAULT now() NOT NULL,
|
|
43
45
|
CONSTRAINT "jobs_status_check" CHECK ("status" IN ('created','active','completed','failed','cancelled'))
|
|
@@ -73,12 +75,14 @@ CREATE INDEX "idx_job_steps_output_fts" ON "duron"."job_steps" USING gin (to_tsv
|
|
|
73
75
|
CREATE INDEX "idx_jobs_action_name" ON "duron"."jobs" ("action_name");--> statement-breakpoint
|
|
74
76
|
CREATE INDEX "idx_jobs_status" ON "duron"."jobs" ("status");--> statement-breakpoint
|
|
75
77
|
CREATE INDEX "idx_jobs_group_key" ON "duron"."jobs" ("group_key");--> statement-breakpoint
|
|
78
|
+
CREATE INDEX "idx_jobs_description" ON "duron"."jobs" ("description");--> statement-breakpoint
|
|
76
79
|
CREATE INDEX "idx_jobs_started_at" ON "duron"."jobs" ("started_at");--> statement-breakpoint
|
|
77
80
|
CREATE INDEX "idx_jobs_finished_at" ON "duron"."jobs" ("finished_at");--> statement-breakpoint
|
|
78
81
|
CREATE INDEX "idx_jobs_expires_at" ON "duron"."jobs" ("expires_at");--> statement-breakpoint
|
|
79
82
|
CREATE INDEX "idx_jobs_client_id" ON "duron"."jobs" ("client_id");--> statement-breakpoint
|
|
80
83
|
CREATE INDEX "idx_jobs_checksum" ON "duron"."jobs" ("checksum");--> statement-breakpoint
|
|
81
84
|
CREATE INDEX "idx_jobs_concurrency_limit" ON "duron"."jobs" ("concurrency_limit");--> statement-breakpoint
|
|
85
|
+
CREATE INDEX "idx_jobs_concurrency_step_limit" ON "duron"."jobs" ("concurrency_step_limit");--> statement-breakpoint
|
|
82
86
|
CREATE INDEX "idx_jobs_action_status" ON "duron"."jobs" ("action_name","status");--> statement-breakpoint
|
|
83
87
|
CREATE INDEX "idx_jobs_action_group" ON "duron"."jobs" ("action_name","group_key");--> statement-breakpoint
|
|
84
88
|
CREATE INDEX "idx_jobs_input_fts" ON "duron"."jobs" USING gin (to_tsvector('english', "input"::text));--> statement-breakpoint
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "8",
|
|
3
3
|
"dialect": "postgres",
|
|
4
|
-
"id": "
|
|
5
|
-
"prevIds": ["
|
|
4
|
+
"id": "47ec47b1-f323-4e7e-a4bc-605f703aa384",
|
|
5
|
+
"prevIds": ["00000000-0000-0000-0000-000000000000"],
|
|
6
6
|
"ddl": [
|
|
7
7
|
{
|
|
8
8
|
"name": "duron",
|
|
@@ -299,6 +299,19 @@
|
|
|
299
299
|
"schema": "duron",
|
|
300
300
|
"table": "jobs"
|
|
301
301
|
},
|
|
302
|
+
{
|
|
303
|
+
"type": "text",
|
|
304
|
+
"typeSchema": null,
|
|
305
|
+
"notNull": false,
|
|
306
|
+
"dimensions": 0,
|
|
307
|
+
"default": null,
|
|
308
|
+
"generated": null,
|
|
309
|
+
"identity": null,
|
|
310
|
+
"name": "description",
|
|
311
|
+
"entityType": "columns",
|
|
312
|
+
"schema": "duron",
|
|
313
|
+
"table": "jobs"
|
|
314
|
+
},
|
|
302
315
|
{
|
|
303
316
|
"type": "text",
|
|
304
317
|
"typeSchema": null,
|
|
@@ -434,7 +447,7 @@
|
|
|
434
447
|
"typeSchema": null,
|
|
435
448
|
"notNull": true,
|
|
436
449
|
"dimensions": 0,
|
|
437
|
-
"default":
|
|
450
|
+
"default": null,
|
|
438
451
|
"generated": null,
|
|
439
452
|
"identity": null,
|
|
440
453
|
"name": "concurrency_limit",
|
|
@@ -447,7 +460,7 @@
|
|
|
447
460
|
"typeSchema": null,
|
|
448
461
|
"notNull": true,
|
|
449
462
|
"dimensions": 0,
|
|
450
|
-
"default":
|
|
463
|
+
"default": null,
|
|
451
464
|
"generated": null,
|
|
452
465
|
"identity": null,
|
|
453
466
|
"name": "concurrency_step_limit",
|
|
@@ -908,6 +921,27 @@
|
|
|
908
921
|
"schema": "duron",
|
|
909
922
|
"table": "jobs"
|
|
910
923
|
},
|
|
924
|
+
{
|
|
925
|
+
"nameExplicit": true,
|
|
926
|
+
"columns": [
|
|
927
|
+
{
|
|
928
|
+
"value": "description",
|
|
929
|
+
"isExpression": false,
|
|
930
|
+
"asc": true,
|
|
931
|
+
"nullsFirst": false,
|
|
932
|
+
"opclass": null
|
|
933
|
+
}
|
|
934
|
+
],
|
|
935
|
+
"isUnique": false,
|
|
936
|
+
"where": null,
|
|
937
|
+
"with": "",
|
|
938
|
+
"method": "btree",
|
|
939
|
+
"concurrently": false,
|
|
940
|
+
"name": "idx_jobs_description",
|
|
941
|
+
"entityType": "indexes",
|
|
942
|
+
"schema": "duron",
|
|
943
|
+
"table": "jobs"
|
|
944
|
+
},
|
|
911
945
|
{
|
|
912
946
|
"nameExplicit": true,
|
|
913
947
|
"columns": [
|
package/package.json
CHANGED
package/src/action.ts
CHANGED
|
@@ -142,9 +142,20 @@ export interface StepDefinitionHandlerContext<TInput extends z.ZodObject, TVaria
|
|
|
142
142
|
export interface StepDefinition<TInput extends z.ZodObject, TResult, TVariables = Record<string, unknown>> {
|
|
143
143
|
/**
|
|
144
144
|
* The name of the step.
|
|
145
|
-
* Can be a static string or a function that generates the name from the
|
|
145
|
+
* Can be a static string or a function that generates the name from the context.
|
|
146
|
+
* The function receives a context object with input, variables, jobId, and parentStepId.
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* name: (ctx) => `process-user-${ctx.input.userId}`
|
|
151
|
+
* ```
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* name: (ctx) => `step-${ctx.var.environment}-${ctx.jobId.slice(0, 8)}`
|
|
156
|
+
* ```
|
|
146
157
|
*/
|
|
147
|
-
name: string | ((ctx:
|
|
158
|
+
name: string | ((ctx: StepNameContext<TInput, TVariables>) => string)
|
|
148
159
|
|
|
149
160
|
/**
|
|
150
161
|
* Zod schema for validating the step input.
|
|
@@ -183,6 +194,32 @@ export interface ConcurrencyHandlerContext<TInput extends z.ZodObject, TVariable
|
|
|
183
194
|
var: TVariables
|
|
184
195
|
}
|
|
185
196
|
|
|
197
|
+
/**
|
|
198
|
+
* Context available when generating dynamic step names.
|
|
199
|
+
* Provides access to input, variables, job ID, and parent step ID.
|
|
200
|
+
*/
|
|
201
|
+
export interface StepNameContext<TInput extends z.ZodObject, TVariables = Record<string, unknown>> {
|
|
202
|
+
/**
|
|
203
|
+
* The validated input for this step.
|
|
204
|
+
*/
|
|
205
|
+
input: z.infer<TInput>
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Variables shared across the action.
|
|
209
|
+
*/
|
|
210
|
+
var: TVariables
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* The job ID this step belongs to.
|
|
214
|
+
*/
|
|
215
|
+
jobId: string
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* The ID of the parent step, or null if this is a root step.
|
|
219
|
+
*/
|
|
220
|
+
parentStepId: string | null
|
|
221
|
+
}
|
|
222
|
+
|
|
186
223
|
/**
|
|
187
224
|
* Retry configuration options for actions and steps.
|
|
188
225
|
* Controls how failed operations are retried with exponential backoff.
|
|
@@ -387,6 +424,21 @@ export interface ActionDefinitionInput<
|
|
|
387
424
|
*/
|
|
388
425
|
expire?: number
|
|
389
426
|
|
|
427
|
+
/**
|
|
428
|
+
* Function to generate a dynamic description for the job.
|
|
429
|
+
* The description is calculated at job creation time and stored in the database.
|
|
430
|
+
* Use this to provide context about what the specific job instance is doing.
|
|
431
|
+
*
|
|
432
|
+
* @param ctx - Context containing the validated input and variables
|
|
433
|
+
* @returns Promise resolving to the description string
|
|
434
|
+
*
|
|
435
|
+
* @example
|
|
436
|
+
* ```typescript
|
|
437
|
+
* description: async (ctx) => `Send email to ${ctx.input.email}`
|
|
438
|
+
* ```
|
|
439
|
+
*/
|
|
440
|
+
description?: (ctx: ConcurrencyHandlerContext<TInput, TVariables>) => Promise<string>
|
|
441
|
+
|
|
390
442
|
/**
|
|
391
443
|
* The handler function that executes the action logic.
|
|
392
444
|
* Receives a context object with validated input, variables, logger, and step functions.
|
|
@@ -497,6 +549,11 @@ export function createActionDefinitionSchema<
|
|
|
497
549
|
}),
|
|
498
550
|
concurrency: z.number().default(100),
|
|
499
551
|
expire: z.number().default(15 * 60 * 1000),
|
|
552
|
+
description: z
|
|
553
|
+
.custom<(ctx: ConcurrencyHandlerContext<TInput, TVariables>) => Promise<string>>((val) => {
|
|
554
|
+
return !val || val instanceof Function
|
|
555
|
+
})
|
|
556
|
+
.optional(),
|
|
500
557
|
handler: z.custom<(ctx: ActionHandlerContext<TInput, TVariables>) => Promise<z.infer<TOutput>>>((val) => {
|
|
501
558
|
return val instanceof Function
|
|
502
559
|
}),
|
|
@@ -149,12 +149,14 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
149
149
|
checksum,
|
|
150
150
|
concurrencyLimit,
|
|
151
151
|
concurrencyStepLimit,
|
|
152
|
+
description,
|
|
152
153
|
}: CreateJobOptions) {
|
|
153
154
|
const [result] = await this.db
|
|
154
155
|
.insert(this.tables.jobsTable)
|
|
155
156
|
.values({
|
|
156
157
|
action_name: queue,
|
|
157
158
|
group_key: groupKey,
|
|
159
|
+
description: description ?? null,
|
|
158
160
|
checksum,
|
|
159
161
|
input,
|
|
160
162
|
status: JOB_STATUS_CREATED,
|
|
@@ -263,11 +265,13 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
263
265
|
SELECT
|
|
264
266
|
j.action_name,
|
|
265
267
|
j.group_key,
|
|
268
|
+
j.description,
|
|
266
269
|
j.checksum,
|
|
267
270
|
j.input,
|
|
268
271
|
j.timeout_ms,
|
|
269
272
|
j.created_at,
|
|
270
|
-
j.concurrency_limit
|
|
273
|
+
j.concurrency_limit,
|
|
274
|
+
j.concurrency_step_limit
|
|
271
275
|
FROM ${this.tables.jobsTable} j
|
|
272
276
|
WHERE j.id = ${jobId}
|
|
273
277
|
AND j.status IN (${JOB_STATUS_COMPLETED}, ${JOB_STATUS_CANCELLED}, ${JOB_STATUS_FAILED})
|
|
@@ -292,15 +296,18 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
292
296
|
INSERT INTO ${this.tables.jobsTable} (
|
|
293
297
|
action_name,
|
|
294
298
|
group_key,
|
|
299
|
+
description,
|
|
295
300
|
checksum,
|
|
296
301
|
input,
|
|
297
302
|
status,
|
|
298
303
|
timeout_ms,
|
|
299
|
-
concurrency_limit
|
|
304
|
+
concurrency_limit,
|
|
305
|
+
concurrency_step_limit
|
|
300
306
|
)
|
|
301
307
|
SELECT
|
|
302
308
|
ls.action_name,
|
|
303
309
|
ls.group_key,
|
|
310
|
+
ls.description,
|
|
304
311
|
ls.checksum,
|
|
305
312
|
ls.input,
|
|
306
313
|
${JOB_STATUS_CREATED},
|
|
@@ -316,7 +323,8 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
316
323
|
LIMIT 1
|
|
317
324
|
),
|
|
318
325
|
ls.concurrency_limit
|
|
319
|
-
)
|
|
326
|
+
),
|
|
327
|
+
ls.concurrency_step_limit
|
|
320
328
|
FROM locked_source ls
|
|
321
329
|
WHERE NOT EXISTS (SELECT 1 FROM existing_retry)
|
|
322
330
|
RETURNING id
|
|
@@ -666,6 +674,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
666
674
|
j.id,
|
|
667
675
|
j.action_name as "actionName",
|
|
668
676
|
j.group_key as "groupKey",
|
|
677
|
+
j.description,
|
|
669
678
|
j.input,
|
|
670
679
|
j.output,
|
|
671
680
|
j.error,
|
|
@@ -1037,6 +1046,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1037
1046
|
id: jobsTable.id,
|
|
1038
1047
|
actionName: jobsTable.action_name,
|
|
1039
1048
|
groupKey: jobsTable.group_key,
|
|
1049
|
+
description: jobsTable.description,
|
|
1040
1050
|
input: jobsTable.input,
|
|
1041
1051
|
output: jobsTable.output,
|
|
1042
1052
|
error: jobsTable.error,
|
|
@@ -1140,6 +1150,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1140
1150
|
filters.clientId
|
|
1141
1151
|
? inArray(jobsTable.client_id, Array.isArray(filters.clientId) ? filters.clientId : [filters.clientId])
|
|
1142
1152
|
: undefined,
|
|
1153
|
+
filters.description ? ilike(jobsTable.description, `%${filters.description}%`) : undefined,
|
|
1143
1154
|
filters.createdAt && Array.isArray(filters.createdAt)
|
|
1144
1155
|
? between(
|
|
1145
1156
|
sql`date_trunc('second', ${jobsTable.created_at})`,
|
|
@@ -1177,6 +1188,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1177
1188
|
? or(
|
|
1178
1189
|
ilike(jobsTable.action_name, `%${fuzzySearch}%`),
|
|
1179
1190
|
ilike(jobsTable.group_key, `%${fuzzySearch}%`),
|
|
1191
|
+
ilike(jobsTable.description, `%${fuzzySearch}%`),
|
|
1180
1192
|
ilike(jobsTable.client_id, `%${fuzzySearch}%`),
|
|
1181
1193
|
sql`${jobsTable.id}::text ilike ${`%${fuzzySearch}%`}`,
|
|
1182
1194
|
sql`to_tsvector('english', ${jobsTable.input}::text) @@ plainto_tsquery('english', ${fuzzySearch})`,
|
|
@@ -1234,6 +1246,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1234
1246
|
actionName: jobsTable.action_name,
|
|
1235
1247
|
expiresAt: jobsTable.expires_at,
|
|
1236
1248
|
duration: durationMs,
|
|
1249
|
+
description: jobsTable.description,
|
|
1237
1250
|
}
|
|
1238
1251
|
|
|
1239
1252
|
const jobs = await this.db
|
|
@@ -1241,6 +1254,7 @@ export class PostgresBaseAdapter<Database extends DrizzleDatabase, Connection> e
|
|
|
1241
1254
|
id: jobsTable.id,
|
|
1242
1255
|
actionName: jobsTable.action_name,
|
|
1243
1256
|
groupKey: jobsTable.group_key,
|
|
1257
|
+
description: jobsTable.description,
|
|
1244
1258
|
input: jobsTable.input,
|
|
1245
1259
|
output: jobsTable.output,
|
|
1246
1260
|
error: jobsTable.error,
|
|
@@ -26,6 +26,7 @@ export default function createSchema(schemaName: string) {
|
|
|
26
26
|
id: uuid('id').primaryKey().defaultRandom(),
|
|
27
27
|
action_name: text('action_name').notNull(),
|
|
28
28
|
group_key: text('group_key').notNull(),
|
|
29
|
+
description: text('description'),
|
|
29
30
|
status: text('status').$type<JobStatus>().notNull().default('created'),
|
|
30
31
|
checksum: text('checksum').notNull(),
|
|
31
32
|
input: jsonb('input').notNull().default({}),
|
|
@@ -36,8 +37,8 @@ export default function createSchema(schemaName: string) {
|
|
|
36
37
|
started_at: timestamp('started_at', { withTimezone: true }),
|
|
37
38
|
finished_at: timestamp('finished_at', { withTimezone: true }),
|
|
38
39
|
client_id: text('client_id'),
|
|
39
|
-
concurrency_limit: integer('concurrency_limit').notNull()
|
|
40
|
-
concurrency_step_limit: integer('concurrency_step_limit').notNull()
|
|
40
|
+
concurrency_limit: integer('concurrency_limit').notNull(),
|
|
41
|
+
concurrency_step_limit: integer('concurrency_step_limit').notNull(),
|
|
41
42
|
created_at: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
|
|
42
43
|
updated_at: timestamp('updated_at', { withTimezone: true })
|
|
43
44
|
.notNull()
|
|
@@ -54,6 +55,7 @@ export default function createSchema(schemaName: string) {
|
|
|
54
55
|
index('idx_jobs_action_name').on(table.action_name),
|
|
55
56
|
index('idx_jobs_status').on(table.status),
|
|
56
57
|
index('idx_jobs_group_key').on(table.group_key),
|
|
58
|
+
index('idx_jobs_description').on(table.description),
|
|
57
59
|
index('idx_jobs_started_at').on(table.started_at),
|
|
58
60
|
index('idx_jobs_finished_at').on(table.finished_at),
|
|
59
61
|
index('idx_jobs_expires_at').on(table.expires_at),
|
package/src/adapters/schemas.ts
CHANGED
|
@@ -34,6 +34,7 @@ export const JobSchema = z.object({
|
|
|
34
34
|
id: z.string(),
|
|
35
35
|
actionName: z.string(),
|
|
36
36
|
groupKey: z.string(),
|
|
37
|
+
description: z.string().nullable().default(null),
|
|
37
38
|
input: z.any(),
|
|
38
39
|
output: z.any().nullable(),
|
|
39
40
|
error: z.any().nullable(),
|
|
@@ -96,6 +97,7 @@ export const JobSortFieldSchema = z.enum([
|
|
|
96
97
|
'actionName',
|
|
97
98
|
'expiresAt',
|
|
98
99
|
'duration',
|
|
100
|
+
'description',
|
|
99
101
|
])
|
|
100
102
|
|
|
101
103
|
export const JobSortSchema = z.object({
|
|
@@ -108,6 +110,7 @@ export const JobFiltersSchema = z.object({
|
|
|
108
110
|
actionName: z.union([z.string(), z.array(z.string())]).optional(),
|
|
109
111
|
groupKey: z.union([z.string(), z.array(z.string())]).optional(),
|
|
110
112
|
clientId: z.union([z.string(), z.array(z.string())]).optional(),
|
|
113
|
+
description: z.string().optional(),
|
|
111
114
|
createdAt: z.union([DateSchema, z.array(DateSchema).length(2)]).optional(),
|
|
112
115
|
startedAt: z.union([DateSchema, z.array(DateSchema).length(2)]).optional(),
|
|
113
116
|
finishedAt: z.union([DateSchema, z.array(DateSchema).length(2)]).optional(),
|
|
@@ -149,6 +152,8 @@ export const CreateJobOptionsSchema = z.object({
|
|
|
149
152
|
concurrencyLimit: z.number(),
|
|
150
153
|
/** The concurrency limit for steps within this job */
|
|
151
154
|
concurrencyStepLimit: z.number(),
|
|
155
|
+
/** Optional description for the job */
|
|
156
|
+
description: z.string().nullable().optional(),
|
|
152
157
|
})
|
|
153
158
|
|
|
154
159
|
export const RecoverJobsOptionsSchema = z.object({
|
package/src/client.ts
CHANGED
|
@@ -39,6 +39,7 @@ export interface JobResult {
|
|
|
39
39
|
actionName: string
|
|
40
40
|
status: JobStatus
|
|
41
41
|
groupKey: string
|
|
42
|
+
description: string | null
|
|
42
43
|
input: unknown
|
|
43
44
|
output: unknown
|
|
44
45
|
error: Job['error']
|
|
@@ -52,6 +53,7 @@ export interface TypedJobResult<TAction extends Action<any, any, any>> {
|
|
|
52
53
|
actionName: string
|
|
53
54
|
status: JobStatus
|
|
54
55
|
groupKey: string
|
|
56
|
+
description: string | null
|
|
55
57
|
input: InferActionSchema<NonNullable<TAction['input']>>
|
|
56
58
|
output: InferActionSchema<NonNullable<TAction['output']>>
|
|
57
59
|
error: Job['error']
|
|
@@ -554,6 +556,12 @@ export class Client<
|
|
|
554
556
|
concurrencyLimit = await action.groups.concurrency(concurrencyCtx)
|
|
555
557
|
}
|
|
556
558
|
|
|
559
|
+
// Calculate description if provided
|
|
560
|
+
let description: string | null = null
|
|
561
|
+
if (action.description) {
|
|
562
|
+
description = await action.description(concurrencyCtx)
|
|
563
|
+
}
|
|
564
|
+
|
|
557
565
|
// Create job in database
|
|
558
566
|
const jobId = await this.#database.createJob({
|
|
559
567
|
queue: action.name,
|
|
@@ -563,6 +571,7 @@ export class Client<
|
|
|
563
571
|
checksum: action.checksum,
|
|
564
572
|
concurrencyLimit,
|
|
565
573
|
concurrencyStepLimit: action.steps.concurrency,
|
|
574
|
+
description,
|
|
566
575
|
})
|
|
567
576
|
|
|
568
577
|
if (!jobId) {
|
|
@@ -916,6 +925,7 @@ export class Client<
|
|
|
916
925
|
actionName: job.actionName,
|
|
917
926
|
status: job.status,
|
|
918
927
|
groupKey: job.groupKey,
|
|
928
|
+
description: job.description,
|
|
919
929
|
input: job.input,
|
|
920
930
|
output: job.output,
|
|
921
931
|
error: job.error,
|
|
@@ -1175,6 +1185,7 @@ export class Client<
|
|
|
1175
1185
|
actionName: job.actionName,
|
|
1176
1186
|
status: job.status,
|
|
1177
1187
|
groupKey: job.groupKey,
|
|
1188
|
+
description: job.description,
|
|
1178
1189
|
input: job.input,
|
|
1179
1190
|
output: job.output,
|
|
1180
1191
|
error: job.error,
|
package/src/index.ts
CHANGED
package/src/server.ts
CHANGED
|
@@ -86,6 +86,7 @@ export const GetJobsQuerySchema = z
|
|
|
86
86
|
fActionName: z.union([z.string(), z.array(z.string())]).optional(),
|
|
87
87
|
fGroupKey: z.union([z.string(), z.array(z.string())]).optional(),
|
|
88
88
|
fClientId: z.union([z.string(), z.array(z.string())]).optional(),
|
|
89
|
+
fDescription: z.string().optional(),
|
|
89
90
|
// Date filters: can be a single ISO string or JSON array [start, end] - both coerced to Date objects
|
|
90
91
|
fCreatedAt: z.union([z.coerce.date(), z.array(z.coerce.date())]).optional(),
|
|
91
92
|
fStartedAt: z.union([z.coerce.date(), z.array(z.coerce.date())]).optional(),
|
|
@@ -107,6 +108,7 @@ export const GetJobsQuerySchema = z
|
|
|
107
108
|
if (data.fActionName) filters.actionName = data.fActionName
|
|
108
109
|
if (data.fGroupKey) filters.groupKey = data.fGroupKey
|
|
109
110
|
if (data.fClientId) filters.clientId = data.fClientId
|
|
111
|
+
if (data.fDescription) filters.description = data.fDescription
|
|
110
112
|
if (data.fCreatedAt) filters.createdAt = data.fCreatedAt
|
|
111
113
|
if (data.fStartedAt) filters.startedAt = data.fStartedAt
|
|
112
114
|
if (data.fFinishedAt) filters.finishedAt = data.fFinishedAt
|