duron 0.3.0-beta.1 → 0.3.0-beta.10
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-job.d.ts.map +1 -1
- package/dist/action-job.js +9 -7
- package/dist/action.d.ts +1 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +2 -2
- package/dist/adapters/postgres/base.d.ts.map +1 -1
- package/dist/adapters/postgres/base.js +5 -2
- package/dist/adapters/postgres/schema.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.js +3 -1
- package/dist/client.d.ts +25 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +102 -2
- package/dist/errors.d.ts +47 -9
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +78 -19
- package/dist/step-manager.d.ts +1 -0
- package/dist/step-manager.d.ts.map +1 -1
- package/dist/step-manager.js +117 -9
- package/dist/telemetry/adapter.d.ts +22 -0
- package/dist/telemetry/adapter.d.ts.map +1 -1
- package/dist/telemetry/adapter.js +6 -0
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/local.d.ts +2 -1
- package/dist/telemetry/local.d.ts.map +1 -1
- package/dist/telemetry/local.js +63 -0
- package/dist/telemetry/noop.d.ts +2 -1
- package/dist/telemetry/noop.d.ts.map +1 -1
- package/dist/telemetry/noop.js +27 -0
- package/dist/telemetry/opentelemetry.d.ts +2 -1
- package/dist/telemetry/opentelemetry.d.ts.map +1 -1
- package/dist/telemetry/opentelemetry.js +110 -0
- package/migrations/postgres/{20251203223656_conscious_johnny_blaze → 20260119153838_flimsy_thor_girl}/migration.sql +29 -2
- package/migrations/postgres/{20260118202533_wealthy_mysterio → 20260119153838_flimsy_thor_girl}/snapshot.json +5 -5
- package/package.json +1 -1
- package/src/action-job.ts +14 -7
- package/src/action.ts +23 -13
- package/src/adapters/postgres/base.ts +5 -2
- package/src/adapters/postgres/schema.ts +5 -2
- package/src/client.ts +187 -8
- package/src/errors.ts +141 -30
- package/src/step-manager.ts +171 -10
- package/src/telemetry/adapter.ts +174 -0
- package/src/telemetry/index.ts +3 -0
- package/src/telemetry/local.ts +93 -0
- package/src/telemetry/noop.ts +46 -0
- package/src/telemetry/opentelemetry.ts +145 -2
- package/migrations/postgres/20251203223656_conscious_johnny_blaze/snapshot.json +0 -941
- package/migrations/postgres/20260117231749_clumsy_penance/migration.sql +0 -3
- package/migrations/postgres/20260117231749_clumsy_penance/snapshot.json +0 -988
- package/migrations/postgres/20260118202533_wealthy_mysterio/migration.sql +0 -24
package/dist/action-job.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-job.d.ts","sourceRoot":"","sources":["../src/action-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAElC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAGpD,OAAO,KAAK,EAAQ,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGpE,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACrE,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IACxF,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,CAAA;CACf;AAQD,qBAAa,SAAS,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;;gBAuB9C,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAsCxC,OAAO;
|
|
1
|
+
{"version":3,"file":"action-job.d.ts","sourceRoot":"","sources":["../src/action-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAElC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAGpD,OAAO,KAAK,EAAQ,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGpE,MAAM,WAAW,gBAAgB,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACrE,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAA;IACxF,MAAM,EAAE,OAAO,CAAA;IACf,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,gBAAgB,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,MAAM,EAAE,MAAM,CAAA;CACf;AAQD,qBAAa,SAAS,CAAC,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;;gBAuB9C,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAsCxC,OAAO;IAkIb,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,MAAM;CAmBP"}
|
package/dist/action-job.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ActionCancelError, ActionTimeoutError, isCancelError,
|
|
1
|
+
import { ActionCancelError, ActionTimeoutError, isCancelError, isTimeoutError, serializeError } from './errors.js';
|
|
2
2
|
import { StepManager } from './step-manager.js';
|
|
3
3
|
import waitForAbort from './utils/wait-for-abort.js';
|
|
4
4
|
export class ActionJob {
|
|
@@ -28,7 +28,7 @@ export class ActionJob {
|
|
|
28
28
|
adapter: options.database,
|
|
29
29
|
telemetry: options.telemetry,
|
|
30
30
|
logger: options.logger,
|
|
31
|
-
concurrencyLimit: options.action.concurrency,
|
|
31
|
+
concurrencyLimit: options.action.steps.concurrency,
|
|
32
32
|
});
|
|
33
33
|
this.#done = new Promise((resolve) => {
|
|
34
34
|
this.#resolve = resolve;
|
|
@@ -50,7 +50,7 @@ export class ActionJob {
|
|
|
50
50
|
const observeContext = this.#telemetry.createObserveContext(this.#job.id, null, this.#jobSpan);
|
|
51
51
|
const ctx = this.#stepManager.createActionContext(this.#job, this.#action, this.#variables, this.#abortController.signal, jobLogger, observeContext);
|
|
52
52
|
this.#timeoutId = setTimeout(() => {
|
|
53
|
-
const timeoutError = new ActionTimeoutError(this.#action.name, this.#job.timeoutMs);
|
|
53
|
+
const timeoutError = new ActionTimeoutError(this.#action.name, this.#job.id, this.#job.timeoutMs);
|
|
54
54
|
this.#abortController.abort(timeoutError);
|
|
55
55
|
}, this.#job.timeoutMs);
|
|
56
56
|
this.#timeoutId?.unref?.();
|
|
@@ -84,6 +84,10 @@ export class ActionJob {
|
|
|
84
84
|
return result;
|
|
85
85
|
}
|
|
86
86
|
catch (error) {
|
|
87
|
+
if (!this.#abortController.signal.aborted) {
|
|
88
|
+
this.#abortController.abort(error);
|
|
89
|
+
}
|
|
90
|
+
await this.#stepManager.drain();
|
|
87
91
|
if (isCancelError(error) ||
|
|
88
92
|
(error instanceof Error && error.name === 'AbortError' && isCancelError(error.cause))) {
|
|
89
93
|
this.#logger.warn({ jobId: this.#job.id, actionName: this.#action.name }, '[ActionJob] Job cancelled');
|
|
@@ -93,11 +97,9 @@ export class ActionJob {
|
|
|
93
97
|
}
|
|
94
98
|
return;
|
|
95
99
|
}
|
|
96
|
-
const message = error
|
|
100
|
+
const message = isTimeoutError(error)
|
|
97
101
|
? '[ActionJob] Job timed out'
|
|
98
|
-
:
|
|
99
|
-
? '[ActionJob] Step timed out'
|
|
100
|
-
: '[ActionJob] Job failed';
|
|
102
|
+
: '[ActionJob] Job failed';
|
|
101
103
|
this.#logger.error({ jobId: this.#job.id, actionName: this.#action.name }, message);
|
|
102
104
|
await this.#database.failJob({ jobId: this.#job.id, error: serializeError(error) });
|
|
103
105
|
if (this.#jobSpan) {
|
package/dist/action.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface StepHandlerContext {
|
|
|
19
19
|
parentStepId: string | null;
|
|
20
20
|
observe: ObserveContext;
|
|
21
21
|
step: <TResult>(name: string, cb: (ctx: StepHandlerContext) => Promise<TResult>, options?: z.input<typeof StepOptionsSchema>) => Promise<TResult>;
|
|
22
|
+
run: <TStepInput extends z.ZodObject, TResult>(stepDef: StepDefinition<TStepInput, TResult, any>, input: z.input<TStepInput>, options?: Partial<z.input<typeof StepOptionsSchema>>) => Promise<TResult>;
|
|
22
23
|
}
|
|
23
24
|
export interface StepDefinitionHandlerContext<TInput extends z.ZodObject, TVariables = Record<string, unknown>> extends StepHandlerContext {
|
|
24
25
|
input: z.infer<TInput>;
|
package/dist/action.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,MAAM,WAAW,oBAAoB,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IAMd,OAAO,EAAE,cAAc,CAAA;IAUvB,IAAI,EAAE,CAAC,OAAO,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,EACjD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,KACxC,OAAO,CAAC,OAAO,CAAC,CAAA;IAUrB,GAAG,EAAE,CAAC,UAAU,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAC3C,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,EACxD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,KACjD,OAAO,CAAC,OAAO,CAAC,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IAQjC,MAAM,EAAE,WAAW,CAAA;IAKnB,MAAM,EAAE,MAAM,CAAA;IAKd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAM3B,OAAO,EAAE,cAAc,CAAA;IAYvB,IAAI,EAAE,CAAC,OAAO,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,EACjD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,KACxC,OAAO,CAAC,OAAO,CAAC,CAAA;CACtB;AAMD,MAAM,WAAW,4BAA4B,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5G,SAAQ,kBAAkB;IAI1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAKtB,GAAG,EAAE,UAAU,CAAA;IAKf,MAAM,EAAE,MAAM,CAAA;IAKd,KAAK,EAAE,MAAM,CAAA;CACd;AAMD,MAAM,WAAW,cAAc,
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAClC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE3D,MAAM,WAAW,oBAAoB,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IAMd,OAAO,EAAE,cAAc,CAAA;IAUvB,IAAI,EAAE,CAAC,OAAO,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,EACjD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,KACxC,OAAO,CAAC,OAAO,CAAC,CAAA;IAUrB,GAAG,EAAE,CAAC,UAAU,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAC3C,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,EACxD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,KACjD,OAAO,CAAC,OAAO,CAAC,CAAA;CACtB;AAED,MAAM,WAAW,kBAAkB;IAQjC,MAAM,EAAE,WAAW,CAAA;IAKnB,MAAM,EAAE,MAAM,CAAA;IAKd,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAM3B,OAAO,EAAE,cAAc,CAAA;IAYvB,IAAI,EAAE,CAAC,OAAO,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,EACjD,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,KACxC,OAAO,CAAC,OAAO,CAAC,CAAA;IAWrB,GAAG,EAAE,CAAC,UAAU,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAC3C,OAAO,EAAE,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,EACjD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAC1B,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC,KACjD,OAAO,CAAC,OAAO,CAAC,CAAA;CACtB;AAMD,MAAM,WAAW,4BAA4B,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAC5G,SAAQ,kBAAkB;IAI1B,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAKtB,GAAG,EAAE,UAAU,CAAA;IAKf,MAAM,EAAE,MAAM,CAAA;IAKd,KAAK,EAAE,MAAM,CAAA;CACd;AAMD,MAAM,WAAW,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKvG,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE,KAAK,MAAM,CAAC,CAAA;IAK5D,KAAK,CAAC,EAAE,MAAM,CAAA;IAKd,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;IAK1C,MAAM,CAAC,EAAE,MAAM,CAAA;IAKf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAKlB,OAAO,EAAE,CAAC,GAAG,EAAE,4BAA4B,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAMpF,gBAAgB,EAAE,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,yBAAyB,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACzG,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACtB,GAAG,EAAE,UAAU,CAAA;CAChB;AAED,MAAM,MAAM,gBAAgB,CAC1B,MAAM,SAAS,CAAC,CAAC,SAAS,EAC1B,OAAO,SAAS,CAAC,CAAC,SAAS,EAC3B,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAClC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;AAEzF,MAAM,MAAM,MAAM,CAChB,MAAM,SAAS,CAAC,CAAC,SAAS,EAC1B,OAAO,SAAS,CAAC,CAAC,SAAS,EAC3B,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAClC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;AAKzF,eAAO,MAAM,kBAAkB;;;;;kBAiCC,CAAA;AAKhC,eAAO,MAAM,iBAAiB;;;;;;;;;iBA0B5B,CAAA;AAUF,wBAAgB,4BAA4B,CAC1C,MAAM,SAAS,CAAC,CAAC,SAAS,EAC1B,OAAO,SAAS,CAAC,CAAC,SAAS,EAC3B,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;kDAkDZ,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,QAAjE,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;qDAejE,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,QAAjE,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;;;;;+BA6CrE,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAtE,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;;;;;;;;;;;;;;;mBAAtE,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;;;;0BA5DlE,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;6BAejE,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;mBA6CrE,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;;;;0BA5DlE,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;6BAejE,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC;;IAyD1F;AAED,eAAO,MAAM,YAAY,GAAI,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QACvD,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC,CAAC,SAAS,EAC7D,KAAK,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;4EA5EsB,OAAO,CAAC,MAAM,CAAC;+EAef,OAAO,CAAC,MAAM,CAAC;;CAmE1F,CAAA;AAKD,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAC/G,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAC3C,kBAAkB,CACnB,CAAA;AA6BD,eAAO,MAAM,UAAU,GAAI,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QACrD,MAAM,SAAS,CAAC,CAAC,SAAS,EAAE,OAAO,EACzC,KAAK,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,KACpD,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAM9C,CAAA"}
|
package/dist/action.js
CHANGED
|
@@ -48,7 +48,7 @@ export function createActionDefinitionSchema() {
|
|
|
48
48
|
.optional(),
|
|
49
49
|
steps: z
|
|
50
50
|
.object({
|
|
51
|
-
concurrency: z.number().default(
|
|
51
|
+
concurrency: z.number().default(100).describe('How many steps can run concurrently for this action'),
|
|
52
52
|
retry: RetryOptionsSchema.describe('How to retry on failure for the steps of this action'),
|
|
53
53
|
expire: z
|
|
54
54
|
.number()
|
|
@@ -56,7 +56,7 @@ export function createActionDefinitionSchema() {
|
|
|
56
56
|
.describe('How long a step can run for (milliseconds)'),
|
|
57
57
|
})
|
|
58
58
|
.default({
|
|
59
|
-
concurrency:
|
|
59
|
+
concurrency: 100,
|
|
60
60
|
retry: { limit: 4, factor: 2, minTimeout: 1000, maxTimeout: 30000 },
|
|
61
61
|
expire: 5 * 60 * 1000,
|
|
62
62
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/base.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -539,7 +539,9 @@ export class PostgresBaseAdapter extends Adapter {
|
|
|
539
539
|
step_existed AS (
|
|
540
540
|
SELECT EXISTS(
|
|
541
541
|
SELECT 1 FROM ${this.tables.jobStepsTable} s
|
|
542
|
-
WHERE s.job_id = ${jobId}
|
|
542
|
+
WHERE s.job_id = ${jobId}
|
|
543
|
+
AND s.name = ${name}
|
|
544
|
+
AND s.parent_step_id IS NOT DISTINCT FROM ${parentStepId}
|
|
543
545
|
) AS existed
|
|
544
546
|
),
|
|
545
547
|
upserted_step AS (
|
|
@@ -569,7 +571,7 @@ export class PostgresBaseAdapter extends Adapter {
|
|
|
569
571
|
0,
|
|
570
572
|
NULL
|
|
571
573
|
WHERE EXISTS (SELECT 1 FROM job_check)
|
|
572
|
-
ON CONFLICT (job_id, name) DO UPDATE
|
|
574
|
+
ON CONFLICT (job_id, name, parent_step_id) DO UPDATE
|
|
573
575
|
SET
|
|
574
576
|
timeout_ms = ${timeoutMs},
|
|
575
577
|
expires_at = now() + interval '${sql.raw(timeoutMs.toString())} milliseconds',
|
|
@@ -609,6 +611,7 @@ export class PostgresBaseAdapter extends Adapter {
|
|
|
609
611
|
INNER JOIN job_check jc ON s.job_id = jc.id
|
|
610
612
|
WHERE s.job_id = ${jobId}
|
|
611
613
|
AND s.name = ${name}
|
|
614
|
+
AND s.parent_step_id IS NOT DISTINCT FROM ${parentStepId}
|
|
612
615
|
AND NOT EXISTS (SELECT 1 FROM final_upserted)
|
|
613
616
|
)
|
|
614
617
|
SELECT * FROM final_upserted
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA4Eb,IAAI;uBAAS,iBAAiB;2BAAa,MAAM;;;;;;8BAAjD,IAAI;2BAAS,iBAAiB;+BAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/adapters/postgres/schema.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA4Eb,IAAI;uBAAS,iBAAiB;2BAAa,MAAM;;;;;;8BAAjD,IAAI;2BAAS,iBAAiB;+BAAa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2E1F"}
|
|
@@ -79,7 +79,9 @@ export default function createSchema(schemaName) {
|
|
|
79
79
|
index('idx_job_steps_job_status').on(table.job_id, table.status),
|
|
80
80
|
index('idx_job_steps_job_name').on(table.job_id, table.name),
|
|
81
81
|
index('idx_job_steps_output_fts').using('gin', sql `to_tsvector('english', ${table.output}::text)`),
|
|
82
|
-
unique('
|
|
82
|
+
unique('unique_job_step_name_parent')
|
|
83
|
+
.on(table.job_id, table.name, table.parent_step_id)
|
|
84
|
+
.nullsNotDistinct(),
|
|
83
85
|
check('job_steps_status_check', sql `${table.status} IN ${sql.raw(`(${STEP_STATUSES.map((s) => `'${s}'`).join(',')})`)}`),
|
|
84
86
|
]);
|
|
85
87
|
const metricsTable = schema.table('metrics', {
|
package/dist/client.d.ts
CHANGED
|
@@ -3,7 +3,27 @@ import * as z from 'zod';
|
|
|
3
3
|
import type { Action } from './action.js';
|
|
4
4
|
import type { Adapter, GetActionsResult, GetJobStepsOptions, GetJobStepsResult, GetJobsOptions, GetJobsResult, GetMetricsOptions, GetMetricsResult, Job, JobStep } from './adapters/adapter.js';
|
|
5
5
|
import type { JobStatusResult, JobStepStatusResult } from './adapters/schemas.js';
|
|
6
|
+
import { type JobStatus } from './constants.js';
|
|
6
7
|
import { type TelemetryAdapter } from './telemetry/index.js';
|
|
8
|
+
type InferActionSchema<T> = T extends z.ZodTypeAny ? z.infer<T> : Record<string, unknown>;
|
|
9
|
+
export interface JobResult {
|
|
10
|
+
jobId: string;
|
|
11
|
+
actionName: string;
|
|
12
|
+
status: JobStatus;
|
|
13
|
+
groupKey: string;
|
|
14
|
+
input: unknown;
|
|
15
|
+
output: unknown;
|
|
16
|
+
error: Job['error'];
|
|
17
|
+
}
|
|
18
|
+
export interface TypedJobResult<TAction extends Action<any, any, any>> {
|
|
19
|
+
jobId: string;
|
|
20
|
+
actionName: string;
|
|
21
|
+
status: JobStatus;
|
|
22
|
+
groupKey: string;
|
|
23
|
+
input: InferActionSchema<NonNullable<TAction['input']>>;
|
|
24
|
+
output: InferActionSchema<NonNullable<TAction['output']>>;
|
|
25
|
+
error: Job['error'];
|
|
26
|
+
}
|
|
7
27
|
declare const BaseOptionsSchema: z.ZodObject<{
|
|
8
28
|
id: z.ZodOptional<z.ZodString>;
|
|
9
29
|
syncPattern: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"pull">, z.ZodLiteral<"push">, z.ZodLiteral<"hybrid">, z.ZodLiteral<false>]>>;
|
|
@@ -48,6 +68,10 @@ export declare class Client<TActions extends Record<string, Action<any, any, TVa
|
|
|
48
68
|
id?: string | undefined;
|
|
49
69
|
};
|
|
50
70
|
runAction<TActionName extends keyof TActions>(actionName: TActionName, input?: NonNullable<TActions[TActionName]['input']> extends z.ZodObject ? z.input<NonNullable<TActions[TActionName]['input']>> : never): Promise<string>;
|
|
71
|
+
runActionAndWait<TActionName extends keyof TActions>(actionName: TActionName, input?: NonNullable<TActions[TActionName]['input']> extends z.ZodObject ? z.input<NonNullable<TActions[TActionName]['input']>> : never, options?: {
|
|
72
|
+
signal?: AbortSignal;
|
|
73
|
+
timeout?: number;
|
|
74
|
+
}): Promise<TypedJobResult<TActions[TActionName]>>;
|
|
51
75
|
fetch(options: FetchOptions): Promise<{
|
|
52
76
|
id: string;
|
|
53
77
|
actionName: string;
|
|
@@ -79,7 +103,7 @@ export declare class Client<TActions extends Record<string, Action<any, any, TVa
|
|
|
79
103
|
waitForJob(jobId: string, options?: {
|
|
80
104
|
timeout?: number;
|
|
81
105
|
signal?: AbortSignal;
|
|
82
|
-
}): Promise<
|
|
106
|
+
}): Promise<JobResult | null>;
|
|
83
107
|
getActions(): Promise<GetActionsResult>;
|
|
84
108
|
getMetrics(options: GetMetricsOptions): Promise<GetMetricsResult>;
|
|
85
109
|
getActionsMetadata(): Promise<Array<{
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,OAAO,KAAK,EAAE,MAAM,EAA6B,MAAM,aAAa,CAAA;AAEpE,OAAO,KAAK,EACV,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,GAAG,EACH,OAAO,EACR,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -117,6 +117,87 @@ export class Client {
|
|
|
117
117
|
this.#logger.debug({ jobId, actionName: String(actionName), groupKey }, '[Duron] Action sent/created');
|
|
118
118
|
return jobId;
|
|
119
119
|
}
|
|
120
|
+
async runActionAndWait(actionName, input, options) {
|
|
121
|
+
if (options?.signal?.aborted) {
|
|
122
|
+
throw new Error('Operation was aborted');
|
|
123
|
+
}
|
|
124
|
+
const jobId = await this.runAction(actionName, input);
|
|
125
|
+
let abortHandler;
|
|
126
|
+
if (options?.signal) {
|
|
127
|
+
abortHandler = () => {
|
|
128
|
+
this.cancelJob(jobId).catch((err) => {
|
|
129
|
+
this.#logger.error({ err, jobId }, '[Duron] Error cancelling job on abort');
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
options.signal.addEventListener('abort', abortHandler, { once: true });
|
|
133
|
+
}
|
|
134
|
+
let timeoutId;
|
|
135
|
+
let timeoutAbortController;
|
|
136
|
+
if (options?.timeout) {
|
|
137
|
+
timeoutAbortController = new AbortController();
|
|
138
|
+
timeoutId = setTimeout(() => {
|
|
139
|
+
timeoutAbortController.abort();
|
|
140
|
+
this.cancelJob(jobId).catch((err) => {
|
|
141
|
+
this.#logger.error({ err, jobId }, '[Duron] Error cancelling job on timeout');
|
|
142
|
+
});
|
|
143
|
+
}, options.timeout);
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
let waitSignal;
|
|
147
|
+
if (options?.signal && timeoutAbortController) {
|
|
148
|
+
waitSignal = AbortSignal.any([options.signal, timeoutAbortController.signal]);
|
|
149
|
+
}
|
|
150
|
+
else if (options?.signal) {
|
|
151
|
+
waitSignal = options.signal;
|
|
152
|
+
}
|
|
153
|
+
else if (timeoutAbortController) {
|
|
154
|
+
waitSignal = timeoutAbortController.signal;
|
|
155
|
+
}
|
|
156
|
+
const job = await this.waitForJob(jobId, { signal: waitSignal });
|
|
157
|
+
if (timeoutId) {
|
|
158
|
+
clearTimeout(timeoutId);
|
|
159
|
+
}
|
|
160
|
+
if (options?.signal && abortHandler) {
|
|
161
|
+
options.signal.removeEventListener('abort', abortHandler);
|
|
162
|
+
}
|
|
163
|
+
if (!job) {
|
|
164
|
+
if (options?.signal?.aborted) {
|
|
165
|
+
throw new Error('Operation was aborted');
|
|
166
|
+
}
|
|
167
|
+
if (timeoutAbortController?.signal.aborted) {
|
|
168
|
+
throw new Error('Operation timed out');
|
|
169
|
+
}
|
|
170
|
+
throw new Error('Job not found');
|
|
171
|
+
}
|
|
172
|
+
if (job.status === JOB_STATUS_CANCELLED) {
|
|
173
|
+
if (options?.signal?.aborted) {
|
|
174
|
+
throw new Error('Operation was aborted');
|
|
175
|
+
}
|
|
176
|
+
if (timeoutAbortController?.signal.aborted) {
|
|
177
|
+
throw new Error('Operation timed out');
|
|
178
|
+
}
|
|
179
|
+
throw new Error('Job was cancelled');
|
|
180
|
+
}
|
|
181
|
+
if (job.status === JOB_STATUS_FAILED) {
|
|
182
|
+
const errorMessage = job.error?.message ?? 'Job failed';
|
|
183
|
+
const error = new Error(errorMessage);
|
|
184
|
+
if (job.error?.stack) {
|
|
185
|
+
error.stack = job.error.stack;
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
return job;
|
|
190
|
+
}
|
|
191
|
+
catch (err) {
|
|
192
|
+
if (timeoutId) {
|
|
193
|
+
clearTimeout(timeoutId);
|
|
194
|
+
}
|
|
195
|
+
if (options?.signal && abortHandler) {
|
|
196
|
+
options.signal.removeEventListener('abort', abortHandler);
|
|
197
|
+
}
|
|
198
|
+
throw err;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
120
201
|
async fetch(options) {
|
|
121
202
|
await this.start();
|
|
122
203
|
if (!this.#actions) {
|
|
@@ -194,7 +275,15 @@ export class Client {
|
|
|
194
275
|
if (!job) {
|
|
195
276
|
return null;
|
|
196
277
|
}
|
|
197
|
-
return
|
|
278
|
+
return {
|
|
279
|
+
jobId: job.id,
|
|
280
|
+
actionName: job.actionName,
|
|
281
|
+
status: job.status,
|
|
282
|
+
groupKey: job.groupKey,
|
|
283
|
+
input: job.input,
|
|
284
|
+
output: job.output,
|
|
285
|
+
error: job.error,
|
|
286
|
+
};
|
|
198
287
|
}
|
|
199
288
|
}
|
|
200
289
|
this.#setupJobStatusListener();
|
|
@@ -347,6 +436,17 @@ export class Client {
|
|
|
347
436
|
return;
|
|
348
437
|
}
|
|
349
438
|
const job = await this.getJobById(event.jobId);
|
|
439
|
+
const result = job
|
|
440
|
+
? {
|
|
441
|
+
jobId: job.id,
|
|
442
|
+
actionName: job.actionName,
|
|
443
|
+
status: job.status,
|
|
444
|
+
groupKey: job.groupKey,
|
|
445
|
+
input: job.input,
|
|
446
|
+
output: job.output,
|
|
447
|
+
error: job.error,
|
|
448
|
+
}
|
|
449
|
+
: null;
|
|
350
450
|
const waitsToResolve = Array.from(pendingWaits);
|
|
351
451
|
this.#pendingJobWaits.delete(event.jobId);
|
|
352
452
|
for (const wait of waitsToResolve) {
|
|
@@ -356,7 +456,7 @@ export class Client {
|
|
|
356
456
|
if (wait.signal && wait.abortHandler) {
|
|
357
457
|
wait.signal.removeEventListener('abort', wait.abortHandler);
|
|
358
458
|
}
|
|
359
|
-
wait.resolve(
|
|
459
|
+
wait.resolve(result);
|
|
360
460
|
}
|
|
361
461
|
});
|
|
362
462
|
}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,33 +1,73 @@
|
|
|
1
|
+
export declare const ERROR_CODES: {
|
|
2
|
+
readonly DURON_ERROR: "DURON_ERROR";
|
|
3
|
+
readonly STEP_ALREADY_EXECUTED: "STEP_ALREADY_EXECUTED";
|
|
4
|
+
readonly NON_RETRIABLE: "NON_RETRIABLE";
|
|
5
|
+
readonly ACTION_TIMEOUT: "ACTION_TIMEOUT";
|
|
6
|
+
readonly STEP_TIMEOUT: "STEP_TIMEOUT";
|
|
7
|
+
readonly ACTION_CANCEL: "ACTION_CANCEL";
|
|
8
|
+
readonly UNHANDLED_CHILD_STEPS: "UNHANDLED_CHILD_STEPS";
|
|
9
|
+
};
|
|
10
|
+
export type ErrorCode = (typeof ERROR_CODES)[keyof typeof ERROR_CODES];
|
|
11
|
+
export interface ErrorMetadata {
|
|
12
|
+
jobId?: string;
|
|
13
|
+
stepId?: string;
|
|
14
|
+
parentStepId?: string | null;
|
|
15
|
+
actionName?: string;
|
|
16
|
+
stepName?: string;
|
|
17
|
+
}
|
|
1
18
|
export declare abstract class DuronError extends Error {
|
|
19
|
+
readonly code: ErrorCode;
|
|
20
|
+
readonly nonRetriable: boolean;
|
|
2
21
|
readonly cause?: unknown;
|
|
22
|
+
metadata: ErrorMetadata;
|
|
3
23
|
constructor(message: string, options?: {
|
|
4
24
|
cause?: unknown;
|
|
25
|
+
metadata?: ErrorMetadata;
|
|
5
26
|
});
|
|
27
|
+
setMetadata(metadata: ErrorMetadata): this;
|
|
6
28
|
}
|
|
7
29
|
export declare class StepAlreadyExecutedError extends DuronError {
|
|
30
|
+
readonly code: "STEP_ALREADY_EXECUTED";
|
|
31
|
+
readonly nonRetriable = true;
|
|
8
32
|
constructor(stepName: string, jobId: string, actionName: string);
|
|
9
33
|
}
|
|
10
34
|
export declare class NonRetriableError extends DuronError {
|
|
35
|
+
readonly code: ErrorCode;
|
|
36
|
+
readonly nonRetriable = true;
|
|
11
37
|
}
|
|
12
38
|
export declare class ActionTimeoutError extends DuronError {
|
|
13
|
-
|
|
39
|
+
readonly code: "ACTION_TIMEOUT";
|
|
40
|
+
readonly nonRetriable = true;
|
|
41
|
+
constructor(actionName: string, jobId: string, timeoutMs: number, options?: {
|
|
14
42
|
cause?: unknown;
|
|
15
43
|
});
|
|
16
44
|
}
|
|
17
45
|
export declare class StepTimeoutError extends DuronError {
|
|
46
|
+
readonly code: "STEP_TIMEOUT";
|
|
47
|
+
readonly nonRetriable = false;
|
|
18
48
|
constructor(stepName: string, jobId: string, timeoutMs: number, options?: {
|
|
19
49
|
cause?: unknown;
|
|
50
|
+
stepId?: string;
|
|
51
|
+
parentStepId?: string | null;
|
|
52
|
+
actionName?: string;
|
|
20
53
|
});
|
|
21
54
|
}
|
|
22
55
|
export declare class ActionCancelError extends DuronError {
|
|
56
|
+
readonly code: "ACTION_CANCEL";
|
|
57
|
+
readonly nonRetriable = true;
|
|
23
58
|
constructor(actionName: string, jobId: string, options?: {
|
|
24
59
|
cause?: unknown;
|
|
25
60
|
});
|
|
26
61
|
}
|
|
27
62
|
export declare class UnhandledChildStepsError extends NonRetriableError {
|
|
28
|
-
readonly
|
|
63
|
+
readonly code: "UNHANDLED_CHILD_STEPS";
|
|
29
64
|
readonly pendingCount: number;
|
|
30
|
-
constructor(stepName: string, pendingCount: number
|
|
65
|
+
constructor(stepName: string, pendingCount: number, options?: {
|
|
66
|
+
stepId?: string;
|
|
67
|
+
parentStepId?: string | null;
|
|
68
|
+
jobId?: string;
|
|
69
|
+
actionName?: string;
|
|
70
|
+
});
|
|
31
71
|
}
|
|
32
72
|
export declare function isDuronError(error: unknown): error is DuronError;
|
|
33
73
|
export declare function isNonRetriableError(error: unknown): error is NonRetriableError;
|
|
@@ -37,13 +77,11 @@ export declare function isCancelError(error: unknown): error is ActionCancelErro
|
|
|
37
77
|
export type SerializableError = {
|
|
38
78
|
name: string;
|
|
39
79
|
message: string;
|
|
80
|
+
code?: ErrorCode;
|
|
81
|
+
nonRetriable?: boolean;
|
|
82
|
+
metadata?: ErrorMetadata;
|
|
40
83
|
cause?: unknown;
|
|
41
84
|
stack?: string;
|
|
42
85
|
};
|
|
43
|
-
export declare function serializeError(error: unknown):
|
|
44
|
-
name: string;
|
|
45
|
-
message: string;
|
|
46
|
-
cause?: unknown;
|
|
47
|
-
stack?: string;
|
|
48
|
-
};
|
|
86
|
+
export declare function serializeError(error: unknown): SerializableError;
|
|
49
87
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
CHANGED
|
@@ -1,76 +1,135 @@
|
|
|
1
|
+
export const ERROR_CODES = {
|
|
2
|
+
DURON_ERROR: 'DURON_ERROR',
|
|
3
|
+
STEP_ALREADY_EXECUTED: 'STEP_ALREADY_EXECUTED',
|
|
4
|
+
NON_RETRIABLE: 'NON_RETRIABLE',
|
|
5
|
+
ACTION_TIMEOUT: 'ACTION_TIMEOUT',
|
|
6
|
+
STEP_TIMEOUT: 'STEP_TIMEOUT',
|
|
7
|
+
ACTION_CANCEL: 'ACTION_CANCEL',
|
|
8
|
+
UNHANDLED_CHILD_STEPS: 'UNHANDLED_CHILD_STEPS',
|
|
9
|
+
};
|
|
1
10
|
export class DuronError extends Error {
|
|
11
|
+
code = ERROR_CODES.DURON_ERROR;
|
|
12
|
+
nonRetriable = false;
|
|
2
13
|
cause;
|
|
14
|
+
metadata;
|
|
3
15
|
constructor(message, options) {
|
|
4
16
|
super(message);
|
|
5
17
|
this.cause = options?.cause;
|
|
18
|
+
this.metadata = options?.metadata ?? {};
|
|
6
19
|
this.name = this.constructor.name;
|
|
7
20
|
if (Error.captureStackTrace) {
|
|
8
21
|
Error.captureStackTrace(this, this.constructor);
|
|
9
22
|
}
|
|
10
23
|
}
|
|
24
|
+
setMetadata(metadata) {
|
|
25
|
+
this.metadata = { ...this.metadata, ...metadata };
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
11
28
|
}
|
|
12
29
|
export class StepAlreadyExecutedError extends DuronError {
|
|
30
|
+
code = ERROR_CODES.STEP_ALREADY_EXECUTED;
|
|
31
|
+
nonRetriable = true;
|
|
13
32
|
constructor(stepName, jobId, actionName) {
|
|
14
|
-
super(`Step "${stepName}" has already been executed for job "${jobId}" and action "${actionName}"
|
|
33
|
+
super(`Step "${stepName}" has already been executed for job "${jobId}" and action "${actionName}"`, {
|
|
34
|
+
metadata: { stepName, jobId, actionName },
|
|
35
|
+
});
|
|
15
36
|
}
|
|
16
37
|
}
|
|
17
38
|
export class NonRetriableError extends DuronError {
|
|
39
|
+
code = ERROR_CODES.NON_RETRIABLE;
|
|
40
|
+
nonRetriable = true;
|
|
18
41
|
}
|
|
19
42
|
export class ActionTimeoutError extends DuronError {
|
|
20
|
-
|
|
21
|
-
|
|
43
|
+
code = ERROR_CODES.ACTION_TIMEOUT;
|
|
44
|
+
nonRetriable = true;
|
|
45
|
+
constructor(actionName, jobId, timeoutMs, options) {
|
|
46
|
+
super(`Action "${actionName}" in job "${jobId}" timed out after ${timeoutMs}ms`, {
|
|
47
|
+
cause: options?.cause,
|
|
48
|
+
metadata: { actionName, jobId },
|
|
49
|
+
});
|
|
22
50
|
}
|
|
23
51
|
}
|
|
24
52
|
export class StepTimeoutError extends DuronError {
|
|
53
|
+
code = ERROR_CODES.STEP_TIMEOUT;
|
|
54
|
+
nonRetriable = false;
|
|
25
55
|
constructor(stepName, jobId, timeoutMs, options) {
|
|
26
|
-
super(`Step "${stepName}" in job "${jobId}" timed out after ${timeoutMs}ms`,
|
|
56
|
+
super(`Step "${stepName}" in job "${jobId}" timed out after ${timeoutMs}ms`, {
|
|
57
|
+
cause: options?.cause,
|
|
58
|
+
metadata: {
|
|
59
|
+
stepName,
|
|
60
|
+
jobId,
|
|
61
|
+
stepId: options?.stepId,
|
|
62
|
+
parentStepId: options?.parentStepId,
|
|
63
|
+
actionName: options?.actionName,
|
|
64
|
+
},
|
|
65
|
+
});
|
|
27
66
|
}
|
|
28
67
|
}
|
|
29
68
|
export class ActionCancelError extends DuronError {
|
|
69
|
+
code = ERROR_CODES.ACTION_CANCEL;
|
|
70
|
+
nonRetriable = true;
|
|
30
71
|
constructor(actionName, jobId, options) {
|
|
31
|
-
super(`Action "${actionName}" in job "${jobId}" was cancelled`,
|
|
72
|
+
super(`Action "${actionName}" in job "${jobId}" was cancelled`, {
|
|
73
|
+
cause: options?.cause,
|
|
74
|
+
metadata: { actionName, jobId },
|
|
75
|
+
});
|
|
32
76
|
}
|
|
33
77
|
}
|
|
34
78
|
export class UnhandledChildStepsError extends NonRetriableError {
|
|
35
|
-
|
|
79
|
+
code = ERROR_CODES.UNHANDLED_CHILD_STEPS;
|
|
36
80
|
pendingCount;
|
|
37
|
-
constructor(stepName, pendingCount) {
|
|
38
|
-
super(`Parent step "${stepName}" completed with ${pendingCount} unhandled child step(s). All child steps must be awaited before the parent returns
|
|
39
|
-
|
|
81
|
+
constructor(stepName, pendingCount, options) {
|
|
82
|
+
super(`Parent step "${stepName}" completed with ${pendingCount} unhandled child step(s). All child steps must be awaited before the parent returns.`, {
|
|
83
|
+
metadata: {
|
|
84
|
+
stepName,
|
|
85
|
+
stepId: options?.stepId,
|
|
86
|
+
parentStepId: options?.parentStepId,
|
|
87
|
+
jobId: options?.jobId,
|
|
88
|
+
actionName: options?.actionName,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
40
91
|
this.pendingCount = pendingCount;
|
|
41
92
|
}
|
|
42
93
|
}
|
|
43
94
|
export function isDuronError(error) {
|
|
44
|
-
|
|
95
|
+
const code = error?.code;
|
|
96
|
+
return code !== undefined && Object.values(ERROR_CODES).includes(code);
|
|
45
97
|
}
|
|
46
98
|
export function isNonRetriableError(error) {
|
|
47
|
-
return
|
|
48
|
-
error instanceof ActionCancelError ||
|
|
49
|
-
error instanceof ActionTimeoutError ||
|
|
50
|
-
error instanceof UnhandledChildStepsError);
|
|
99
|
+
return error?.nonRetriable === true;
|
|
51
100
|
}
|
|
52
101
|
export function isUnhandledChildStepsError(error) {
|
|
53
|
-
return error
|
|
102
|
+
return error?.code === ERROR_CODES.UNHANDLED_CHILD_STEPS;
|
|
54
103
|
}
|
|
55
104
|
export function isTimeoutError(error) {
|
|
56
|
-
|
|
105
|
+
const code = error?.code;
|
|
106
|
+
return code === ERROR_CODES.ACTION_TIMEOUT || code === ERROR_CODES.STEP_TIMEOUT;
|
|
57
107
|
}
|
|
58
108
|
export function isCancelError(error) {
|
|
59
|
-
return error
|
|
109
|
+
return error?.code === ERROR_CODES.ACTION_CANCEL;
|
|
60
110
|
}
|
|
61
111
|
export function serializeError(error) {
|
|
62
|
-
|
|
112
|
+
const code = error?.code;
|
|
113
|
+
const nonRetriable = error?.nonRetriable;
|
|
114
|
+
const metadata = error?.metadata;
|
|
115
|
+
if (isTimeoutError(error)) {
|
|
63
116
|
return {
|
|
64
117
|
name: error.name,
|
|
65
118
|
message: error.message,
|
|
119
|
+
code,
|
|
120
|
+
nonRetriable,
|
|
121
|
+
metadata,
|
|
66
122
|
cause: error.cause,
|
|
67
123
|
stack: undefined,
|
|
68
124
|
};
|
|
69
125
|
}
|
|
70
|
-
if (error
|
|
126
|
+
if (isDuronError(error)) {
|
|
71
127
|
return {
|
|
72
128
|
name: error.name,
|
|
73
129
|
message: error.message,
|
|
130
|
+
code,
|
|
131
|
+
nonRetriable,
|
|
132
|
+
metadata,
|
|
74
133
|
cause: error.cause,
|
|
75
134
|
stack: error.stack,
|
|
76
135
|
};
|
package/dist/step-manager.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ export declare class StepManager {
|
|
|
40
40
|
#private;
|
|
41
41
|
constructor(options: StepManagerOptions);
|
|
42
42
|
setJobSpan(span: Span): void;
|
|
43
|
+
setRunFnFactory(factory: (parentStepId: string | null, abortSignal: AbortSignal) => StepHandlerContext['run']): void;
|
|
43
44
|
createActionContext<TInput extends z.ZodObject, TOutput extends z.ZodObject, TVariables = Record<string, unknown>>(job: {
|
|
44
45
|
id: string;
|
|
45
46
|
input: z.infer<TInput>;
|