@openfn/ws-worker 0.1.3 → 0.1.4

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,11 @@
1
1
  # ws-worker
2
2
 
3
+ ## 0.1.4
4
+
5
+ ### Patch Changes
6
+
7
+ - Accept backoff as startup command
8
+
3
9
  ## 0.1.3
4
10
 
5
11
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -8,14 +8,16 @@ declare type CLAIM_ATTEMPT = {
8
8
  };
9
9
 
10
10
  declare type ServerOptions = {
11
- backoff?: number;
12
- maxBackoff?: number;
13
11
  maxWorkflows?: number;
14
12
  port?: number;
15
13
  lightning?: string;
16
14
  logger?: Logger;
17
15
  noLoop?: boolean;
18
16
  secret?: string;
17
+ backoff?: {
18
+ min?: number;
19
+ max?: number;
20
+ };
19
21
  };
20
22
  interface ServerApp extends Koa {
21
23
  id: string;
package/dist/index.js CHANGED
@@ -7,20 +7,9 @@ import { humanId } from "human-id";
7
7
  import { createMockLogger as createMockLogger2 } from "@openfn/logger";
8
8
 
9
9
  // src/util/try-with-backoff.ts
10
- var MAX_BACKOFF = 1e3 * 30;
10
+ var BACKOFF_MULTIPLIER = 1.15;
11
11
  var tryWithBackoff = (fn, opts = {}) => {
12
- if (!opts.timeout) {
13
- opts.timeout = 100;
14
- }
15
- if (!opts.attempts) {
16
- opts.attempts = 1;
17
- }
18
- if (!opts.maxBackoff) {
19
- opts.maxBackoff = MAX_BACKOFF;
20
- }
21
- let { timeout, attempts, maxAttempts } = opts;
22
- timeout = timeout;
23
- attempts = attempts;
12
+ const { min = 1e3, max = 1e4, maxAttempts, attempts = 1 } = opts;
24
13
  let cancelled = false;
25
14
  if (!opts.isCancelled) {
26
15
  opts.isCancelled = () => cancelled;
@@ -43,11 +32,12 @@ var tryWithBackoff = (fn, opts = {}) => {
43
32
  const nextOpts = {
44
33
  maxAttempts,
45
34
  attempts: attempts + 1,
46
- timeout: Math.min(opts.maxBackoff, timeout * 1.2),
35
+ min: Math.min(max, min * BACKOFF_MULTIPLIER),
36
+ max,
47
37
  isCancelled: opts.isCancelled
48
38
  };
49
39
  tryWithBackoff(fn, nextOpts).then(resolve).catch(reject);
50
- }, timeout);
40
+ }, min);
51
41
  }
52
42
  });
53
43
  promise.cancel = () => {
@@ -92,14 +82,14 @@ var claim = (channel, execute2, logger = mockLogger) => {
92
82
  var claim_default = claim;
93
83
 
94
84
  // src/api/workloop.ts
95
- var startWorkloop = (channel, execute2, logger, options = {}) => {
85
+ var startWorkloop = (channel, execute2, logger, minBackoff, maxBackoff) => {
96
86
  let promise;
97
87
  let cancelled = false;
98
88
  const workLoop = () => {
99
89
  if (!cancelled) {
100
90
  promise = try_with_backoff_default(() => claim_default(channel, execute2, logger), {
101
- timeout: options.timeout,
102
- maxBackoff: options.maxBackoff
91
+ min: minBackoff,
92
+ max: maxBackoff
103
93
  });
104
94
  promise.then(() => {
105
95
  if (!cancelled) {
@@ -438,6 +428,8 @@ var worker_queue_default = connectToWorkerQueue;
438
428
 
439
429
  // src/server.ts
440
430
  var DEFAULT_PORT = 1234;
431
+ var MIN_BACKOFF = 1e3;
432
+ var MAX_BACKOFF = 1e3 * 30;
441
433
  function connect(app, engine, logger, options = {}) {
442
434
  logger.debug("Connecting to Lightning at", options.lightning);
443
435
  worker_queue_default(options.lightning, app.id, options.secret).then(({ socket, channel }) => {
@@ -445,10 +437,18 @@ function connect(app, engine, logger, options = {}) {
445
437
  app.socket = socket;
446
438
  app.channel = channel;
447
439
  if (!options.noLoop) {
440
+ if (app.killWorkloop) {
441
+ logger.info("Terminating old workloop");
442
+ app.killWorkloop();
443
+ }
448
444
  logger.info("Starting workloop");
449
- app.killWorkloop = workloop_default(channel, app.execute, logger, {
450
- maxBackoff: options.maxBackoff
451
- });
445
+ app.killWorkloop = workloop_default(
446
+ channel,
447
+ app.execute,
448
+ logger,
449
+ options.backoff?.min || MIN_BACKOFF,
450
+ options.backoff?.max || MAX_BACKOFF
451
+ );
452
452
  } else {
453
453
  logger.break();
454
454
  logger.warn("Workloop not starting");
package/dist/start.js CHANGED
@@ -4981,20 +4981,9 @@ import { humanId } from "human-id";
4981
4981
  import { createMockLogger as createMockLogger2 } from "@openfn/logger";
4982
4982
 
4983
4983
  // src/util/try-with-backoff.ts
4984
- var MAX_BACKOFF = 1e3 * 30;
4984
+ var BACKOFF_MULTIPLIER = 1.15;
4985
4985
  var tryWithBackoff = (fn, opts = {}) => {
4986
- if (!opts.timeout) {
4987
- opts.timeout = 100;
4988
- }
4989
- if (!opts.attempts) {
4990
- opts.attempts = 1;
4991
- }
4992
- if (!opts.maxBackoff) {
4993
- opts.maxBackoff = MAX_BACKOFF;
4994
- }
4995
- let { timeout, attempts, maxAttempts } = opts;
4996
- timeout = timeout;
4997
- attempts = attempts;
4986
+ const { min = 1e3, max = 1e4, maxAttempts, attempts = 1 } = opts;
4998
4987
  let cancelled = false;
4999
4988
  if (!opts.isCancelled) {
5000
4989
  opts.isCancelled = () => cancelled;
@@ -5017,11 +5006,12 @@ var tryWithBackoff = (fn, opts = {}) => {
5017
5006
  const nextOpts = {
5018
5007
  maxAttempts,
5019
5008
  attempts: attempts + 1,
5020
- timeout: Math.min(opts.maxBackoff, timeout * 1.2),
5009
+ min: Math.min(max, min * BACKOFF_MULTIPLIER),
5010
+ max,
5021
5011
  isCancelled: opts.isCancelled
5022
5012
  };
5023
5013
  tryWithBackoff(fn, nextOpts).then(resolve5).catch(reject);
5024
- }, timeout);
5014
+ }, min);
5025
5015
  }
5026
5016
  });
5027
5017
  promise.cancel = () => {
@@ -5066,14 +5056,14 @@ var claim = (channel, execute2, logger2 = mockLogger) => {
5066
5056
  var claim_default = claim;
5067
5057
 
5068
5058
  // src/api/workloop.ts
5069
- var startWorkloop = (channel, execute2, logger2, options = {}) => {
5059
+ var startWorkloop = (channel, execute2, logger2, minBackoff2, maxBackoff2) => {
5070
5060
  let promise;
5071
5061
  let cancelled = false;
5072
5062
  const workLoop = () => {
5073
5063
  if (!cancelled) {
5074
5064
  promise = try_with_backoff_default(() => claim_default(channel, execute2, logger2), {
5075
- timeout: options.timeout,
5076
- maxBackoff: options.maxBackoff
5065
+ min: minBackoff2,
5066
+ max: maxBackoff2
5077
5067
  });
5078
5068
  promise.then(() => {
5079
5069
  if (!cancelled) {
@@ -5412,6 +5402,8 @@ var worker_queue_default = connectToWorkerQueue;
5412
5402
 
5413
5403
  // src/server.ts
5414
5404
  var DEFAULT_PORT = 1234;
5405
+ var MIN_BACKOFF = 1e3;
5406
+ var MAX_BACKOFF = 1e3 * 30;
5415
5407
  function connect(app, engine, logger2, options = {}) {
5416
5408
  logger2.debug("Connecting to Lightning at", options.lightning);
5417
5409
  worker_queue_default(options.lightning, app.id, options.secret).then(({ socket, channel }) => {
@@ -5419,10 +5411,18 @@ function connect(app, engine, logger2, options = {}) {
5419
5411
  app.socket = socket;
5420
5412
  app.channel = channel;
5421
5413
  if (!options.noLoop) {
5414
+ if (app.killWorkloop) {
5415
+ logger2.info("Terminating old workloop");
5416
+ app.killWorkloop();
5417
+ }
5422
5418
  logger2.info("Starting workloop");
5423
- app.killWorkloop = workloop_default(channel, app.execute, logger2, {
5424
- maxBackoff: options.maxBackoff
5425
- });
5419
+ app.killWorkloop = workloop_default(
5420
+ channel,
5421
+ app.execute,
5422
+ logger2,
5423
+ options.backoff?.min || MIN_BACKOFF,
5424
+ options.backoff?.max || MAX_BACKOFF
5425
+ );
5426
5426
  } else {
5427
5427
  logger2.break();
5428
5428
  logger2.warn("Workloop not starting");
@@ -5532,6 +5532,9 @@ var args = yargs_default(hideBin(process.argv)).command("server", "Start a ws-wo
5532
5532
  description: "Use a mock runtime engine",
5533
5533
  default: false,
5534
5534
  type: "boolean"
5535
+ }).option("backoff", {
5536
+ description: "Claim backoff rules: min/max (s)",
5537
+ default: "1/10"
5535
5538
  }).parse();
5536
5539
  var logger = createLogger("SRV", { level: args.log });
5537
5540
  if (args.lightning === "mock") {
@@ -5547,13 +5550,19 @@ if (args.lightning === "mock") {
5547
5550
  }
5548
5551
  args.secret = WORKER_SECRET;
5549
5552
  }
5553
+ var [minBackoff, maxBackoff] = args.backoff.split("/").map((n) => parseInt(n, 10) * 1e3);
5554
+ console.log(minBackoff, maxBackoff);
5550
5555
  function engineReady(engine) {
5551
5556
  server_default(engine, {
5552
5557
  port: args.port,
5553
5558
  lightning: args.lightning,
5554
5559
  logger,
5555
5560
  secret: args.secret,
5556
- noLoop: !args.loop
5561
+ noLoop: !args.loop,
5562
+ backoff: {
5563
+ min: minBackoff,
5564
+ max: maxBackoff
5565
+ }
5557
5566
  });
5558
5567
  }
5559
5568
  if (args.mock) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openfn/ws-worker",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "A Websocket Worker to connect Lightning to a Runtime Engine",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",