@openfn/ws-worker 1.5.0 → 1.5.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/CHANGELOG.md +7 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +23 -14
- package/dist/start.js +39 -19
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -29,7 +29,7 @@ var name, version, description, main, type, scripts, bin, author, license, depen
|
|
|
29
29
|
var init_package = __esm({
|
|
30
30
|
"package.json"() {
|
|
31
31
|
name = "@openfn/ws-worker";
|
|
32
|
-
version = "1.5.
|
|
32
|
+
version = "1.5.1";
|
|
33
33
|
description = "A Websocket Worker to connect Lightning to a Runtime Engine";
|
|
34
34
|
main = "dist/index.js";
|
|
35
35
|
type = "module";
|
|
@@ -167,7 +167,7 @@ var waitForRuns = (app, logger) => new Promise((resolve) => {
|
|
|
167
167
|
log();
|
|
168
168
|
app.events.on(INTERNAL_RUN_COMPLETE, onRunComplete);
|
|
169
169
|
} else {
|
|
170
|
-
logger.debug("No active
|
|
170
|
+
logger.debug("No active runs detected, closing immediately");
|
|
171
171
|
resolve();
|
|
172
172
|
}
|
|
173
173
|
});
|
|
@@ -242,7 +242,10 @@ var claim = (app, logger = mockLogger, options = {}) => {
|
|
|
242
242
|
}
|
|
243
243
|
logger.debug("requesting run...");
|
|
244
244
|
app.queueChannel.push(CLAIM, { demand: 1 }).receive("ok", ({ runs }) => {
|
|
245
|
-
logger.debug(
|
|
245
|
+
logger.debug(
|
|
246
|
+
`claimed ${runs.length} runs: `,
|
|
247
|
+
runs.map((r) => r.id).join(",")
|
|
248
|
+
);
|
|
246
249
|
if (!runs?.length) {
|
|
247
250
|
return reject(new Error("No runs returned"));
|
|
248
251
|
}
|
|
@@ -265,10 +268,10 @@ var claim = (app, logger = mockLogger, options = {}) => {
|
|
|
265
268
|
app.execute(run);
|
|
266
269
|
resolve();
|
|
267
270
|
});
|
|
268
|
-
}).receive("error", () => {
|
|
269
|
-
logger.
|
|
271
|
+
}).receive("error", (e) => {
|
|
272
|
+
logger.error("Error on claim", e);
|
|
270
273
|
}).receive("timeout", () => {
|
|
271
|
-
logger.
|
|
274
|
+
logger.error("TIMEOUT on claim. Runs may be lost.");
|
|
272
275
|
reject(new Error("timeout"));
|
|
273
276
|
});
|
|
274
277
|
});
|
|
@@ -942,7 +945,7 @@ var generateWorkerToken = async (secret, workerId, logger) => {
|
|
|
942
945
|
var worker_token_default = generateWorkerToken;
|
|
943
946
|
|
|
944
947
|
// src/channels/worker-queue.ts
|
|
945
|
-
var connectToWorkerQueue = (endpoint, serverId, secret, logger, SocketConstructor = PhxSocket) => {
|
|
948
|
+
var connectToWorkerQueue = (endpoint, serverId, secret, timeout = 10, logger, SocketConstructor = PhxSocket) => {
|
|
946
949
|
const events = new EventEmitter();
|
|
947
950
|
worker_token_default(secret, serverId, logger).then(async (token) => {
|
|
948
951
|
const pkg = await Promise.resolve().then(() => (init_package(), package_exports));
|
|
@@ -953,7 +956,8 @@ var connectToWorkerQueue = (endpoint, serverId, secret, logger, SocketConstructo
|
|
|
953
956
|
};
|
|
954
957
|
const socket = new SocketConstructor(endpoint, {
|
|
955
958
|
params,
|
|
956
|
-
transport: WebSocket
|
|
959
|
+
transport: WebSocket,
|
|
960
|
+
timeout: timeout * 1e3
|
|
957
961
|
});
|
|
958
962
|
let didOpen = false;
|
|
959
963
|
socket.onOpen(() => {
|
|
@@ -985,7 +989,7 @@ var connectToWorkerQueue = (endpoint, serverId, secret, logger, SocketConstructo
|
|
|
985
989
|
var worker_queue_default = connectToWorkerQueue;
|
|
986
990
|
|
|
987
991
|
// src/server.ts
|
|
988
|
-
var DEFAULT_PORT =
|
|
992
|
+
var DEFAULT_PORT = 2222;
|
|
989
993
|
var MIN_BACKOFF = 1e3;
|
|
990
994
|
var MAX_BACKOFF = 1e3 * 30;
|
|
991
995
|
function connect(app, logger, options = {}) {
|
|
@@ -1007,13 +1011,12 @@ function connect(app, logger, options = {}) {
|
|
|
1007
1011
|
options.maxWorkflows
|
|
1008
1012
|
);
|
|
1009
1013
|
} else {
|
|
1014
|
+
const port = app.server?.address().port;
|
|
1010
1015
|
logger.break();
|
|
1011
|
-
logger.warn("
|
|
1016
|
+
logger.warn("Noloop active: workloop has not started");
|
|
1012
1017
|
logger.info("This server will not auto-pull work from lightning.");
|
|
1013
1018
|
logger.info("You can manually claim by posting to /claim, eg:");
|
|
1014
|
-
logger.info(
|
|
1015
|
-
` curl -X POST http://locahost:${options.port || DEFAULT_PORT}/claim`
|
|
1016
|
-
);
|
|
1019
|
+
logger.info(` curl -X POST http://localhost:${port}/claim`);
|
|
1017
1020
|
logger.break();
|
|
1018
1021
|
}
|
|
1019
1022
|
};
|
|
@@ -1037,7 +1040,13 @@ function connect(app, logger, options = {}) {
|
|
|
1037
1040
|
);
|
|
1038
1041
|
logger.debug(e);
|
|
1039
1042
|
};
|
|
1040
|
-
worker_queue_default(
|
|
1043
|
+
worker_queue_default(
|
|
1044
|
+
options.lightning,
|
|
1045
|
+
app.id,
|
|
1046
|
+
options.secret,
|
|
1047
|
+
options.socketTimeoutSeconds,
|
|
1048
|
+
logger
|
|
1049
|
+
).on("connect", onConnect).on("disconnect", onDisconnect).on("error", onError);
|
|
1041
1050
|
}
|
|
1042
1051
|
function createServer(engine, options = {}) {
|
|
1043
1052
|
const logger = options.logger || createMockLogger2();
|
package/dist/start.js
CHANGED
|
@@ -37,7 +37,7 @@ var name, version, description, main, type, scripts, bin, author, license, depen
|
|
|
37
37
|
var init_package = __esm({
|
|
38
38
|
"package.json"() {
|
|
39
39
|
name = "@openfn/ws-worker";
|
|
40
|
-
version = "1.5.
|
|
40
|
+
version = "1.5.1";
|
|
41
41
|
description = "A Websocket Worker to connect Lightning to a Runtime Engine";
|
|
42
42
|
main = "dist/index.js";
|
|
43
43
|
type = "module";
|
|
@@ -306,7 +306,7 @@ var waitForRuns = (app, logger2) => new Promise((resolve5) => {
|
|
|
306
306
|
log();
|
|
307
307
|
app.events.on(INTERNAL_RUN_COMPLETE, onRunComplete);
|
|
308
308
|
} else {
|
|
309
|
-
logger2.debug("No active
|
|
309
|
+
logger2.debug("No active runs detected, closing immediately");
|
|
310
310
|
resolve5();
|
|
311
311
|
}
|
|
312
312
|
});
|
|
@@ -381,7 +381,10 @@ var claim = (app, logger2 = mockLogger, options = {}) => {
|
|
|
381
381
|
}
|
|
382
382
|
logger2.debug("requesting run...");
|
|
383
383
|
app.queueChannel.push(CLAIM, { demand: 1 }).receive("ok", ({ runs }) => {
|
|
384
|
-
logger2.debug(
|
|
384
|
+
logger2.debug(
|
|
385
|
+
`claimed ${runs.length} runs: `,
|
|
386
|
+
runs.map((r) => r.id).join(",")
|
|
387
|
+
);
|
|
385
388
|
if (!runs?.length) {
|
|
386
389
|
return reject(new Error("No runs returned"));
|
|
387
390
|
}
|
|
@@ -404,10 +407,10 @@ var claim = (app, logger2 = mockLogger, options = {}) => {
|
|
|
404
407
|
app.execute(run2);
|
|
405
408
|
resolve5();
|
|
406
409
|
});
|
|
407
|
-
}).receive("error", () => {
|
|
408
|
-
logger2.
|
|
410
|
+
}).receive("error", (e) => {
|
|
411
|
+
logger2.error("Error on claim", e);
|
|
409
412
|
}).receive("timeout", () => {
|
|
410
|
-
logger2.
|
|
413
|
+
logger2.error("TIMEOUT on claim. Runs may be lost.");
|
|
411
414
|
reject(new Error("timeout"));
|
|
412
415
|
});
|
|
413
416
|
});
|
|
@@ -1081,7 +1084,7 @@ var generateWorkerToken = async (secret, workerId, logger2) => {
|
|
|
1081
1084
|
var worker_token_default = generateWorkerToken;
|
|
1082
1085
|
|
|
1083
1086
|
// src/channels/worker-queue.ts
|
|
1084
|
-
var connectToWorkerQueue = (endpoint, serverId, secret, logger2, SocketConstructor = PhxSocket) => {
|
|
1087
|
+
var connectToWorkerQueue = (endpoint, serverId, secret, timeout = 10, logger2, SocketConstructor = PhxSocket) => {
|
|
1085
1088
|
const events = new EventEmitter2();
|
|
1086
1089
|
worker_token_default(secret, serverId, logger2).then(async (token) => {
|
|
1087
1090
|
const pkg = await Promise.resolve().then(() => (init_package(), package_exports));
|
|
@@ -1092,7 +1095,8 @@ var connectToWorkerQueue = (endpoint, serverId, secret, logger2, SocketConstruct
|
|
|
1092
1095
|
};
|
|
1093
1096
|
const socket = new SocketConstructor(endpoint, {
|
|
1094
1097
|
params,
|
|
1095
|
-
transport: WebSocket
|
|
1098
|
+
transport: WebSocket,
|
|
1099
|
+
timeout: timeout * 1e3
|
|
1096
1100
|
});
|
|
1097
1101
|
let didOpen = false;
|
|
1098
1102
|
socket.onOpen(() => {
|
|
@@ -1124,7 +1128,7 @@ var connectToWorkerQueue = (endpoint, serverId, secret, logger2, SocketConstruct
|
|
|
1124
1128
|
var worker_queue_default = connectToWorkerQueue;
|
|
1125
1129
|
|
|
1126
1130
|
// src/server.ts
|
|
1127
|
-
var DEFAULT_PORT =
|
|
1131
|
+
var DEFAULT_PORT = 2222;
|
|
1128
1132
|
var MIN_BACKOFF = 1e3;
|
|
1129
1133
|
var MAX_BACKOFF = 1e3 * 30;
|
|
1130
1134
|
function connect(app, logger2, options = {}) {
|
|
@@ -1146,13 +1150,12 @@ function connect(app, logger2, options = {}) {
|
|
|
1146
1150
|
options.maxWorkflows
|
|
1147
1151
|
);
|
|
1148
1152
|
} else {
|
|
1153
|
+
const port = app.server?.address().port;
|
|
1149
1154
|
logger2.break();
|
|
1150
|
-
logger2.warn("
|
|
1155
|
+
logger2.warn("Noloop active: workloop has not started");
|
|
1151
1156
|
logger2.info("This server will not auto-pull work from lightning.");
|
|
1152
1157
|
logger2.info("You can manually claim by posting to /claim, eg:");
|
|
1153
|
-
logger2.info(
|
|
1154
|
-
` curl -X POST http://locahost:${options.port || DEFAULT_PORT}/claim`
|
|
1155
|
-
);
|
|
1158
|
+
logger2.info(` curl -X POST http://localhost:${port}/claim`);
|
|
1156
1159
|
logger2.break();
|
|
1157
1160
|
}
|
|
1158
1161
|
};
|
|
@@ -1176,7 +1179,13 @@ function connect(app, logger2, options = {}) {
|
|
|
1176
1179
|
);
|
|
1177
1180
|
logger2.debug(e);
|
|
1178
1181
|
};
|
|
1179
|
-
worker_queue_default(
|
|
1182
|
+
worker_queue_default(
|
|
1183
|
+
options.lightning,
|
|
1184
|
+
app.id,
|
|
1185
|
+
options.secret,
|
|
1186
|
+
options.socketTimeoutSeconds,
|
|
1187
|
+
logger2
|
|
1188
|
+
).on("connect", onConnect).on("disconnect", onDisconnect).on("error", onError);
|
|
1180
1189
|
}
|
|
1181
1190
|
function createServer(engine, options = {}) {
|
|
1182
1191
|
const logger2 = options.logger || createMockLogger2();
|
|
@@ -6124,6 +6133,9 @@ var Yargs = YargsFactory(esm_default);
|
|
|
6124
6133
|
var yargs_default = Yargs;
|
|
6125
6134
|
|
|
6126
6135
|
// src/util/cli.ts
|
|
6136
|
+
var DEFAULT_PORT2 = 2222;
|
|
6137
|
+
var DEFAULT_WORKER_CAPACITY = 5;
|
|
6138
|
+
var DEFAULT_SOCKET_TIMEOUT_SECONDS = 10;
|
|
6127
6139
|
function setArg(argValue, envValue, defaultValue) {
|
|
6128
6140
|
if (Array.isArray(defaultValue) && !argValue && typeof envValue === "string") {
|
|
6129
6141
|
return envValue.split(",");
|
|
@@ -6146,11 +6158,12 @@ function parseArgs(argv) {
|
|
|
6146
6158
|
WORKER_PORT,
|
|
6147
6159
|
WORKER_REPO_DIR,
|
|
6148
6160
|
WORKER_SECRET,
|
|
6149
|
-
WORKER_STATE_PROPS_TO_REMOVE
|
|
6161
|
+
WORKER_STATE_PROPS_TO_REMOVE,
|
|
6162
|
+
WORKER_SOCKET_TIMEOUT_SECONDS
|
|
6150
6163
|
} = process.env;
|
|
6151
6164
|
const parser2 = yargs_default(hideBin(argv)).command("server", "Start a ws-worker server").option("port", {
|
|
6152
6165
|
alias: "p",
|
|
6153
|
-
description:
|
|
6166
|
+
description: `Port to run the server on. Default ${DEFAULT_PORT2}. Env: WORKER_PORT`,
|
|
6154
6167
|
type: "number"
|
|
6155
6168
|
}).option("lightning", {
|
|
6156
6169
|
alias: ["l", "lightning-service-url"],
|
|
@@ -6161,6 +6174,8 @@ function parseArgs(argv) {
|
|
|
6161
6174
|
}).option("secret", {
|
|
6162
6175
|
alias: "s",
|
|
6163
6176
|
description: "Worker secret. (comes from WORKER_SECRET by default). Env: WORKER_SECRET"
|
|
6177
|
+
}).option("socket-timeout", {
|
|
6178
|
+
description: `Timeout for websockets to Lighting, in seconds. Defaults to 10.`
|
|
6164
6179
|
}).option("lightning-public-key", {
|
|
6165
6180
|
description: "Base64-encoded public key. Used to verify run tokens. Env: WORKER_LIGHTNING_PUBLIC_KEY"
|
|
6166
6181
|
}).option("log", {
|
|
@@ -6176,7 +6191,7 @@ function parseArgs(argv) {
|
|
|
6176
6191
|
}).option("backoff", {
|
|
6177
6192
|
description: "Claim backoff rules: min/max (in seconds). Env: WORKER_BACKOFF"
|
|
6178
6193
|
}).option("capacity", {
|
|
6179
|
-
description:
|
|
6194
|
+
description: `max concurrent workers. Default ${DEFAULT_WORKER_CAPACITY}. Env: WORKER_CAPACITY`,
|
|
6180
6195
|
type: "number"
|
|
6181
6196
|
}).option("state-props-to-remove", {
|
|
6182
6197
|
description: "A list of properties to remove from the final state returned by a job. Env: WORKER_STATE_PROPS_TO_REMOVE",
|
|
@@ -6195,7 +6210,7 @@ function parseArgs(argv) {
|
|
|
6195
6210
|
const args2 = parser2.parse();
|
|
6196
6211
|
return {
|
|
6197
6212
|
...args2,
|
|
6198
|
-
port: setArg(args2.port, WORKER_PORT,
|
|
6213
|
+
port: setArg(args2.port, WORKER_PORT, DEFAULT_PORT2),
|
|
6199
6214
|
lightning: setArg(
|
|
6200
6215
|
args2.lightning,
|
|
6201
6216
|
WORKER_LIGHTNING_SERVICE_URL,
|
|
@@ -6209,7 +6224,7 @@ function parseArgs(argv) {
|
|
|
6209
6224
|
),
|
|
6210
6225
|
log: setArg(args2.log, WORKER_LOG_LEVEL, "debug"),
|
|
6211
6226
|
backoff: setArg(args2.backoff, WORKER_BACKOFF, "1/10"),
|
|
6212
|
-
capacity: setArg(args2.capacity, WORKER_CAPACITY,
|
|
6227
|
+
capacity: setArg(args2.capacity, WORKER_CAPACITY, DEFAULT_WORKER_CAPACITY),
|
|
6213
6228
|
statePropsToRemove: setArg(
|
|
6214
6229
|
args2.statePropsToRemove,
|
|
6215
6230
|
WORKER_STATE_PROPS_TO_REMOVE,
|
|
@@ -6221,6 +6236,11 @@ function parseArgs(argv) {
|
|
|
6221
6236
|
args2.maxRunDurationSeconds,
|
|
6222
6237
|
WORKER_MAX_RUN_DURATION_SECONDS,
|
|
6223
6238
|
300
|
|
6239
|
+
),
|
|
6240
|
+
socketTimeoutSeconds: setArg(
|
|
6241
|
+
args2.socketTimeoutSeconds,
|
|
6242
|
+
WORKER_SOCKET_TIMEOUT_SECONDS,
|
|
6243
|
+
DEFAULT_SOCKET_TIMEOUT_SECONDS
|
|
6224
6244
|
)
|
|
6225
6245
|
};
|
|
6226
6246
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openfn/ws-worker",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "A Websocket Worker to connect Lightning to a Runtime Engine",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"phoenix": "1.7.10",
|
|
24
24
|
"ws": "^8.14.1",
|
|
25
25
|
"@openfn/engine-multi": "1.2.1",
|
|
26
|
-
"@openfn/logger": "1.0.1",
|
|
27
26
|
"@openfn/lexicon": "^1.0.2",
|
|
27
|
+
"@openfn/logger": "1.0.1",
|
|
28
28
|
"@openfn/runtime": "1.4.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|