@falcondev-oss/workflow 0.3.0 → 0.5.0

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 CHANGED
@@ -14,10 +14,15 @@ declare class WorkflowInputError extends UnrecoverableError {
14
14
  }
15
15
  //#endregion
16
16
  //#region src/settings.d.ts
17
+ type WorkflowLogger = {
18
+ info?: (...data: any[]) => void;
19
+ success?: (...data: any[]) => void;
20
+ };
17
21
  declare const Settings: {
18
22
  defaultPrefix: string;
19
23
  defaultConnection: IORedis | undefined;
20
24
  defaultCronTimezone: string | undefined;
25
+ logger: WorkflowLogger | undefined;
21
26
  };
22
27
  //#endregion
23
28
  //#region src/serializer.d.ts
@@ -88,6 +93,7 @@ interface WorkflowOptions<RunInput, Input, Output> {
88
93
  connection?: ConnectionOptions;
89
94
  }
90
95
  declare class Workflow<RunInput, Input, Output> {
96
+ id: string;
91
97
  private opts;
92
98
  private queue?;
93
99
  private queueEvents?;
package/dist/index.mjs CHANGED
@@ -20,7 +20,8 @@ var WorkflowInputError = class extends UnrecoverableError {
20
20
  const Settings = {
21
21
  defaultPrefix: "falcondev-oss-workflow",
22
22
  defaultConnection: void 0,
23
- defaultCronTimezone: void 0
23
+ defaultCronTimezone: void 0,
24
+ logger: void 0
24
25
  };
25
26
  const defaultRedisConnection = createSingletonPromise(async () => {
26
27
  if (Settings.defaultConnection) return Settings.defaultConnection;
@@ -61,22 +62,26 @@ function getTracer() {
61
62
  return trace.getTracer("falcondev-oss-workflow");
62
63
  }
63
64
  async function runWithTracing(spanName, options, fn, context$1) {
64
- const span = getTracer().startSpan(spanName, options, context$1);
65
- try {
66
- const result = await fn(span);
67
- span.setStatus({ code: SpanStatusCode.OK });
68
- return result;
69
- } catch (err_) {
70
- const err = err_;
71
- span.recordException(err);
72
- span.setStatus({
73
- code: SpanStatusCode.ERROR,
74
- message: err.message
75
- });
76
- throw err_;
77
- } finally {
78
- span.end();
79
- }
65
+ return context$1 ? getTracer().startActiveSpan(spanName, options, context$1, runWithSpan(fn)) : getTracer().startActiveSpan(spanName, options, runWithSpan(fn));
66
+ }
67
+ function runWithSpan(fn) {
68
+ return async (span) => {
69
+ try {
70
+ const result = await fn(span);
71
+ span.setStatus({ code: SpanStatusCode.OK });
72
+ return result;
73
+ } catch (err_) {
74
+ const err = err_;
75
+ span.recordException(err);
76
+ span.setStatus({
77
+ code: SpanStatusCode.ERROR,
78
+ message: err.message
79
+ });
80
+ throw err_;
81
+ } finally {
82
+ span.end();
83
+ }
84
+ };
80
85
  }
81
86
 
82
87
  //#endregion
@@ -188,15 +193,18 @@ var WorkflowStep = class WorkflowStep {
188
193
  //#endregion
189
194
  //#region src/workflow.ts
190
195
  var Workflow = class {
196
+ id;
191
197
  opts;
192
198
  queue;
193
199
  queueEvents;
194
200
  constructor(opts) {
201
+ this.id = opts.id;
195
202
  this.opts = opts;
196
203
  }
197
204
  async work(opts) {
198
205
  const queue = await this.getOrCreateQueue();
199
206
  await new Worker(this.opts.id, async (job) => {
207
+ Settings.logger?.info?.(`Processing workflow job ${job.id} of workflow ${this.opts.id}`);
200
208
  const jobId = job.id;
201
209
  if (!jobId) throw new Error("Job ID is missing");
202
210
  const deserializedData = deserialize$1(job.data);
@@ -209,7 +217,8 @@ var Workflow = class {
209
217
  },
210
218
  kind: SpanKind.CONSUMER
211
219
  }, async (span) => {
212
- return serialize$1(await this.opts.run({
220
+ const start = performance.now();
221
+ const result = await this.opts.run({
213
222
  input: parsedData?.value,
214
223
  step: new WorkflowStep({
215
224
  queue,
@@ -217,13 +226,17 @@ var Workflow = class {
217
226
  workflowId: this.opts.id
218
227
  }),
219
228
  span
220
- }));
229
+ });
230
+ const end = performance.now();
231
+ Settings.logger?.success?.(`Completed workflow job ${job.id} of workflow ${this.opts.id} in ${(end - start).toFixed(2)} ms`);
232
+ return serialize$1(result);
221
233
  }, propagation.extract(ROOT_CONTEXT, deserializedData.tracingHeaders));
222
234
  }, {
223
235
  connection: this.opts.connection ?? await defaultRedisConnection(),
224
236
  prefix: Settings.defaultPrefix,
225
237
  ...opts
226
238
  }).waitUntilReady();
239
+ Settings.logger?.info?.(`Worker started for workflow ${this.opts.id}`);
227
240
  return this;
228
241
  }
229
242
  async run(input, opts) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@falcondev-oss/workflow",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.5.0",
5
5
  "description": "Simple type-safe queue worker with durable execution based on BullMQ.",
6
6
  "license": "MIT",
7
7
  "repository": "github:falcondev-oss/workflow",