@falcondev-oss/workflow 0.4.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
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
@@ -199,6 +204,7 @@ var Workflow = class {
199
204
  async work(opts) {
200
205
  const queue = await this.getOrCreateQueue();
201
206
  await new Worker(this.opts.id, async (job) => {
207
+ Settings.logger?.info?.(`Processing workflow job ${job.id} of workflow ${this.opts.id}`);
202
208
  const jobId = job.id;
203
209
  if (!jobId) throw new Error("Job ID is missing");
204
210
  const deserializedData = deserialize$1(job.data);
@@ -211,7 +217,8 @@ var Workflow = class {
211
217
  },
212
218
  kind: SpanKind.CONSUMER
213
219
  }, async (span) => {
214
- return serialize$1(await this.opts.run({
220
+ const start = performance.now();
221
+ const result = await this.opts.run({
215
222
  input: parsedData?.value,
216
223
  step: new WorkflowStep({
217
224
  queue,
@@ -219,13 +226,17 @@ var Workflow = class {
219
226
  workflowId: this.opts.id
220
227
  }),
221
228
  span
222
- }));
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);
223
233
  }, propagation.extract(ROOT_CONTEXT, deserializedData.tracingHeaders));
224
234
  }, {
225
235
  connection: this.opts.connection ?? await defaultRedisConnection(),
226
236
  prefix: Settings.defaultPrefix,
227
237
  ...opts
228
238
  }).waitUntilReady();
239
+ Settings.logger?.info?.(`Worker started for workflow ${this.opts.id}`);
229
240
  return this;
230
241
  }
231
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.4.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",