@falcondev-oss/workflow 0.7.3 → 0.8.1
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/index.d.mts +15 -12
- package/dist/index.mjs +20 -21
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { Meter, Span } from "@opentelemetry/api";
|
|
|
4
4
|
import { SuperJSONResult } from "superjson";
|
|
5
5
|
import { Options } from "p-retry";
|
|
6
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
7
|
-
import { AddOptions, Job, Queue, QueueOptions, WorkerOptions } from "groupmq";
|
|
7
|
+
import { AddOptions, Job, Queue, QueueOptions, Worker, WorkerOptions } from "groupmq";
|
|
8
8
|
import { Except, IsUnknown, SetOptional, Tagged } from "type-fest";
|
|
9
9
|
|
|
10
10
|
//#region src/settings.d.ts
|
|
@@ -103,18 +103,21 @@ type WorkflowWorkerOptions<Input> = Except<WorkerOptions<WorkflowJobPayloadInter
|
|
|
103
103
|
};
|
|
104
104
|
};
|
|
105
105
|
declare class Workflow<RunInput, Input, Output> {
|
|
106
|
-
id: string;
|
|
107
|
-
private opts;
|
|
108
|
-
private queue?;
|
|
106
|
+
'id': string;
|
|
107
|
+
private 'opts';
|
|
108
|
+
private 'queue'?;
|
|
109
|
+
'~internal': {
|
|
110
|
+
getOrCreateQueue: () => Promise<WorkflowQueueInternal<Input>>;
|
|
111
|
+
};
|
|
109
112
|
constructor(opts: WorkflowOptions<RunInput, Input, Output>);
|
|
110
|
-
work(opts?: WorkflowWorkerOptions<Input>): Promise<
|
|
111
|
-
run(input: RunInput, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
112
|
-
runIn(input: RunInput, delayMs: number, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
113
|
-
runAt(input: RunInput, date: Date, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
114
|
-
runCron(scheduleId: string, cron: string, input: RunInput, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
115
|
-
runEvery(scheduleId: string, everyMs: number, input: RunInput, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
116
|
-
private getOrCreateQueue;
|
|
117
|
-
private setupMetrics;
|
|
113
|
+
'work'(opts?: WorkflowWorkerOptions<Input>): Promise<Worker<WorkflowJobPayloadInternal<Input>>>;
|
|
114
|
+
'run'(input: RunInput, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
115
|
+
'runIn'(input: RunInput, delayMs: number, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
116
|
+
'runAt'(input: RunInput, date: Date, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
117
|
+
'runCron'(scheduleId: string, cron: string, input: RunInput, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
118
|
+
'runEvery'(scheduleId: string, everyMs: number, input: RunInput, opts?: WorkflowJobRunOptions<Input>): Promise<WorkflowJob<Output>>;
|
|
119
|
+
private 'getOrCreateQueue';
|
|
120
|
+
private 'setupMetrics';
|
|
118
121
|
}
|
|
119
122
|
interface WorkflowRunContext<Input> {
|
|
120
123
|
input: IsUnknown<Input> extends true ? undefined : Input;
|
package/dist/index.mjs
CHANGED
|
@@ -9706,18 +9706,19 @@ var WorkflowStep = class WorkflowStep {
|
|
|
9706
9706
|
//#endregion
|
|
9707
9707
|
//#region src/workflow.ts
|
|
9708
9708
|
var Workflow = class {
|
|
9709
|
-
id;
|
|
9710
|
-
opts;
|
|
9711
|
-
queue;
|
|
9712
|
-
|
|
9709
|
+
"id";
|
|
9710
|
+
"opts";
|
|
9711
|
+
"queue";
|
|
9712
|
+
"~internal" = { getOrCreateQueue: this.getOrCreateQueue.bind(this) };
|
|
9713
|
+
"constructor"(opts) {
|
|
9713
9714
|
this.id = opts.id;
|
|
9714
9715
|
this.opts = opts;
|
|
9715
9716
|
}
|
|
9716
|
-
async work(opts) {
|
|
9717
|
+
async "work"(opts) {
|
|
9717
9718
|
const queue = await this.getOrCreateQueue();
|
|
9718
9719
|
const worker = new Worker({
|
|
9719
9720
|
handler: async (job) => {
|
|
9720
|
-
Settings.logger?.info?.(`
|
|
9721
|
+
Settings.logger?.info?.(`[${this.opts.id}] Processing job ${job.id} `);
|
|
9721
9722
|
const jobId = job.id;
|
|
9722
9723
|
if (!jobId) throw new Error("Job ID is missing");
|
|
9723
9724
|
const deserializedData = deserialize$1(job.data);
|
|
@@ -9741,7 +9742,7 @@ var Workflow = class {
|
|
|
9741
9742
|
span
|
|
9742
9743
|
});
|
|
9743
9744
|
const end = performance.now();
|
|
9744
|
-
Settings.logger?.success?.(`
|
|
9745
|
+
Settings.logger?.success?.(`[${this.opts.id}] Completed job ${job.id} in ${(end - start).toFixed(2)} ms`);
|
|
9745
9746
|
return serialize$1(result);
|
|
9746
9747
|
}, propagation.extract(ROOT_CONTEXT, deserializedData.tracingHeaders));
|
|
9747
9748
|
},
|
|
@@ -9749,24 +9750,22 @@ var Workflow = class {
|
|
|
9749
9750
|
...this.opts.workerOptions,
|
|
9750
9751
|
...opts
|
|
9751
9752
|
});
|
|
9752
|
-
worker.on("ready", () => {
|
|
9753
|
-
Settings.logger?.info?.(`Worker started for workflow ${this.opts.id}`);
|
|
9754
|
-
});
|
|
9755
9753
|
worker.on("failed", (job) => {
|
|
9756
|
-
Settings.logger?.info?.(`
|
|
9754
|
+
Settings.logger?.info?.(`[${this.opts.id}] Job ${job.id} failed`);
|
|
9757
9755
|
});
|
|
9758
9756
|
worker.on("error", (error) => {
|
|
9759
|
-
Settings.logger?.error?.(`
|
|
9757
|
+
Settings.logger?.error?.(`[${this.opts.id}] Error during worker startup:`, error);
|
|
9760
9758
|
});
|
|
9759
|
+
Settings.logger?.info?.(`[${this.opts.id}] Worker started`);
|
|
9761
9760
|
const metricsOpts = opts?.metrics ?? this.opts.workerOptions?.metrics ?? Settings.metrics;
|
|
9762
9761
|
if (metricsOpts) await this.setupMetrics(metricsOpts);
|
|
9763
9762
|
asyncExitHook(async (signal) => {
|
|
9764
|
-
Settings.logger?.info?.(`Received ${signal}, shutting down worker
|
|
9763
|
+
Settings.logger?.info?.(`[${this.opts.id}] Received ${signal}, shutting down worker...`);
|
|
9765
9764
|
await worker.close();
|
|
9766
9765
|
}, { wait: 1e4 });
|
|
9767
|
-
return
|
|
9766
|
+
return worker;
|
|
9768
9767
|
}
|
|
9769
|
-
async run(input, opts) {
|
|
9768
|
+
async "run"(input, opts) {
|
|
9770
9769
|
const parsedInput = this.opts.schema && await this.opts.schema["~standard"].validate(input);
|
|
9771
9770
|
if (parsedInput?.issues) throw new Error("Invalid workflow input");
|
|
9772
9771
|
const queue = await this.getOrCreateQueue();
|
|
@@ -9790,33 +9789,33 @@ var Workflow = class {
|
|
|
9790
9789
|
}) });
|
|
9791
9790
|
});
|
|
9792
9791
|
}
|
|
9793
|
-
async runIn(input, delayMs, opts) {
|
|
9792
|
+
async "runIn"(input, delayMs, opts) {
|
|
9794
9793
|
return this.run(input, {
|
|
9795
9794
|
delay: delayMs,
|
|
9796
9795
|
...opts
|
|
9797
9796
|
});
|
|
9798
9797
|
}
|
|
9799
|
-
async runAt(input, date, opts) {
|
|
9798
|
+
async "runAt"(input, date, opts) {
|
|
9800
9799
|
return this.run(input, {
|
|
9801
9800
|
runAt: date,
|
|
9802
9801
|
...opts
|
|
9803
9802
|
});
|
|
9804
9803
|
}
|
|
9805
|
-
async runCron(scheduleId, cron, input, opts) {
|
|
9804
|
+
async "runCron"(scheduleId, cron, input, opts) {
|
|
9806
9805
|
return this.run(input, {
|
|
9807
9806
|
groupId: scheduleId,
|
|
9808
9807
|
repeat: { pattern: cron },
|
|
9809
9808
|
...opts
|
|
9810
9809
|
});
|
|
9811
9810
|
}
|
|
9812
|
-
async runEvery(scheduleId, everyMs, input, opts) {
|
|
9811
|
+
async "runEvery"(scheduleId, everyMs, input, opts) {
|
|
9813
9812
|
return this.run(input, {
|
|
9814
9813
|
groupId: scheduleId,
|
|
9815
9814
|
repeat: { every: everyMs },
|
|
9816
9815
|
...opts
|
|
9817
9816
|
});
|
|
9818
9817
|
}
|
|
9819
|
-
async getOrCreateQueue() {
|
|
9818
|
+
async "getOrCreateQueue"() {
|
|
9820
9819
|
if (!this.queue) this.queue = new Queue({
|
|
9821
9820
|
namespace: this.opts.id,
|
|
9822
9821
|
redis: this.opts.redis ?? await defaultRedisConnection(),
|
|
@@ -9825,7 +9824,7 @@ var Workflow = class {
|
|
|
9825
9824
|
});
|
|
9826
9825
|
return this.queue;
|
|
9827
9826
|
}
|
|
9828
|
-
async setupMetrics({ meter, prefix }) {
|
|
9827
|
+
async "setupMetrics"({ meter, prefix }) {
|
|
9829
9828
|
const attributes = { workflow_id: this.opts.id };
|
|
9830
9829
|
const queue = await this.getOrCreateQueue();
|
|
9831
9830
|
const completedJobsGauge = meter.createObservableGauge(`${prefix}_workflow_completed_jobs`, { description: "Number of completed workflow jobs" });
|
package/package.json
CHANGED