@openfn/ws-worker 1.9.2 → 1.11.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/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # ws-worker
2
2
 
3
+ ## 1.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 87f10f7: Respond to `work:available` events.
8
+
9
+ When the worker receives `work:available` in the worker queue, it'll instantly trigger a claim event.
10
+
11
+ This claim is independent of the workloop and does not affect backoff in any way.
12
+
13
+ ## 1.10.0
14
+
15
+ ### Minor Changes
16
+
17
+ - 1857b46: Allow configuration of job log level
18
+
19
+ ### Patch Changes
20
+
21
+ - Updated dependencies [1857b46]
22
+ - @openfn/engine-multi@1.5.0
23
+ - @openfn/lexicon@1.2.0
24
+ - @openfn/runtime@1.6.2
25
+
3
26
  ## 1.9.2
4
27
 
5
28
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from 'node:events';
2
2
  import Koa from 'koa';
3
- import { Logger } from '@openfn/logger';
3
+ import { LogLevel, Logger } from '@openfn/logger';
4
4
  import * as l from '@openfn/lexicon/lightning';
5
5
  import { ClaimRun } from '@openfn/lexicon/lightning';
6
6
  import { ExecuteOptions, RuntimeEngine } from '@openfn/engine-multi';
@@ -49,6 +49,7 @@ interface Channel extends Channel$1 {
49
49
  type WorkerRunOptions = ExecuteOptions & {
50
50
  outputDataclips?: boolean;
51
51
  payloadLimitMb?: number;
52
+ jobLogLevel?: LogLevel;
52
53
  };
53
54
 
54
55
  type Context = {
@@ -95,6 +96,7 @@ interface ServerApp extends Koa {
95
96
  }
96
97
  declare function createServer(engine: RuntimeEngine, options?: ServerOptions): ServerApp;
97
98
 
99
+ declare const WORK_AVAILABLE = "work-available";
98
100
  declare const CLAIM = "claim";
99
101
  declare const GET_PLAN = "fetch:plan";
100
102
  declare const GET_DATACLIP = "fetch:dataclip";
@@ -132,4 +134,4 @@ type RunReplies = {
132
134
  [STEP_COMPLETE]: l.StepCompleteReply;
133
135
  };
134
136
 
135
- export { CLAIM, GET_CREDENTIAL, GET_DATACLIP, GET_PLAN, INTERNAL_RUN_COMPLETE, QueueEventReplies, QueueEvents, RUN_COMPLETE, RUN_LOG, RUN_START, RunEvents, RunReplies, STEP_COMPLETE, STEP_START, createServer as default };
137
+ export { CLAIM, GET_CREDENTIAL, GET_DATACLIP, GET_PLAN, INTERNAL_RUN_COMPLETE, QueueEventReplies, QueueEvents, RUN_COMPLETE, RUN_LOG, RUN_START, RunEvents, RunReplies, STEP_COMPLETE, STEP_START, WORK_AVAILABLE, createServer as default };
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ import { humanId } from "human-id";
10
10
  import { createMockLogger as createMockLogger2 } from "@openfn/logger";
11
11
 
12
12
  // src/events.ts
13
+ var WORK_AVAILABLE = "work-available";
13
14
  var CLAIM = "claim";
14
15
  var GET_PLAN = "fetch:plan";
15
16
  var GET_DATACLIP = "fetch:dataclip";
@@ -287,6 +288,9 @@ var convert_lightning_plan_default = (run, options = {}) => {
287
288
  if ("output_dataclips" in run.options) {
288
289
  engineOpts.outputDataclips = run.options.output_dataclips;
289
290
  }
291
+ if ("job_log_level" in run.options) {
292
+ engineOpts.jobLogLevel = run.options.job_log_level;
293
+ }
290
294
  }
291
295
  const plan = {
292
296
  id: run.id,
@@ -957,6 +961,10 @@ var connectToWorkerQueue = (endpoint, serverId, secret, timeout = 10, logger, So
957
961
  socket.onOpen(() => {
958
962
  didOpen = true;
959
963
  const channel = socket.channel("worker:queue");
964
+ channel.onMessage = (ev, load) => {
965
+ events.emit("message", ev, load);
966
+ return load;
967
+ };
960
968
  channel.join().receive("ok", () => {
961
969
  logger.debug("Connected to worker queue socket");
962
970
  events.emit("connect", { socket, channel });
@@ -1028,13 +1036,19 @@ function connect(app, logger, options = {}) {
1028
1036
  );
1029
1037
  logger.debug(e);
1030
1038
  };
1039
+ const onMessage = (event) => {
1040
+ if (event === WORK_AVAILABLE) {
1041
+ claim_default(app, logger, { maxWorkers: options.maxWorkflows }).catch(() => {
1042
+ });
1043
+ }
1044
+ };
1031
1045
  worker_queue_default(
1032
1046
  options.lightning,
1033
1047
  app.id,
1034
1048
  options.secret,
1035
1049
  options.socketTimeoutSeconds,
1036
1050
  logger
1037
- ).on("connect", onConnect).on("disconnect", onDisconnect).on("error", onError);
1051
+ ).on("connect", onConnect).on("disconnect", onDisconnect).on("error", onError).on("message", onMessage);
1038
1052
  }
1039
1053
  async function setupCollections(options, logger) {
1040
1054
  if (options.collectionsUrl) {
@@ -1206,5 +1220,6 @@ export {
1206
1220
  RUN_START,
1207
1221
  STEP_COMPLETE,
1208
1222
  STEP_START,
1223
+ WORK_AVAILABLE,
1209
1224
  src_default as default
1210
1225
  };
package/dist/start.js CHANGED
@@ -150,6 +150,7 @@ import { humanId } from "human-id";
150
150
  import { createMockLogger as createMockLogger2 } from "@openfn/logger";
151
151
 
152
152
  // src/events.ts
153
+ var WORK_AVAILABLE = "work-available";
153
154
  var CLAIM = "claim";
154
155
  var GET_PLAN = "fetch:plan";
155
156
  var GET_DATACLIP = "fetch:dataclip";
@@ -427,6 +428,9 @@ var convert_lightning_plan_default = (run2, options = {}) => {
427
428
  if ("output_dataclips" in run2.options) {
428
429
  engineOpts.outputDataclips = run2.options.output_dataclips;
429
430
  }
431
+ if ("job_log_level" in run2.options) {
432
+ engineOpts.jobLogLevel = run2.options.job_log_level;
433
+ }
430
434
  }
431
435
  const plan = {
432
436
  id: run2.id,
@@ -1097,6 +1101,10 @@ var connectToWorkerQueue = (endpoint, serverId, secret, timeout = 10, logger2, S
1097
1101
  socket.onOpen(() => {
1098
1102
  didOpen = true;
1099
1103
  const channel = socket.channel("worker:queue");
1104
+ channel.onMessage = (ev, load) => {
1105
+ events.emit("message", ev, load);
1106
+ return load;
1107
+ };
1100
1108
  channel.join().receive("ok", () => {
1101
1109
  logger2.debug("Connected to worker queue socket");
1102
1110
  events.emit("connect", { socket, channel });
@@ -1168,13 +1176,19 @@ function connect(app, logger2, options = {}) {
1168
1176
  );
1169
1177
  logger2.debug(e);
1170
1178
  };
1179
+ const onMessage = (event) => {
1180
+ if (event === WORK_AVAILABLE) {
1181
+ claim_default(app, logger2, { maxWorkers: options.maxWorkflows }).catch(() => {
1182
+ });
1183
+ }
1184
+ };
1171
1185
  worker_queue_default(
1172
1186
  options.lightning,
1173
1187
  app.id,
1174
1188
  options.secret,
1175
1189
  options.socketTimeoutSeconds,
1176
1190
  logger2
1177
- ).on("connect", onConnect).on("disconnect", onDisconnect).on("error", onError);
1191
+ ).on("connect", onConnect).on("disconnect", onDisconnect).on("error", onError).on("message", onMessage);
1178
1192
  }
1179
1193
  async function setupCollections(options, logger2) {
1180
1194
  if (options.collectionsUrl) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfn/ws-worker",
3
- "version": "1.9.2",
3
+ "version": "1.11.0",
4
4
  "description": "A Websocket Worker to connect Lightning to a Runtime Engine",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -22,9 +22,9 @@
22
22
  "koa-logger": "^3.2.1",
23
23
  "phoenix": "1.7.10",
24
24
  "ws": "^8.18.0",
25
- "@openfn/engine-multi": "1.4.9",
26
- "@openfn/lexicon": "^1.1.0",
25
+ "@openfn/lexicon": "^1.2.0",
27
26
  "@openfn/logger": "1.0.4",
27
+ "@openfn/engine-multi": "1.5.0",
28
28
  "@openfn/runtime": "1.6.2"
29
29
  },
30
30
  "devDependencies": {
@@ -41,7 +41,7 @@
41
41
  "tsup": "^6.2.3",
42
42
  "typescript": "^4.6.4",
43
43
  "yargs": "^17.6.2",
44
- "@openfn/lightning-mock": "2.0.30"
44
+ "@openfn/lightning-mock": "2.1.0"
45
45
  },
46
46
  "files": [
47
47
  "dist",