@io-orkes/conductor-javascript 1.2.1-rc.2 → 1.2.1-rc.3

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
@@ -1,5 +1,5 @@
1
- import { O as OrkesApiConfig, C as ConductorHttpRequest, a as ConductorClient, b as ConductorClientAPIConfig, F as FetchFn, c as OpenAPIConfig, A as ApiRequestOptions, d as CancelablePromise } from './types-1a12e2c4.js';
2
- export { p as Action, m as ApiError, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, a9 as ClearAssigment, au as CommonTaskDef, aR as ConductorError, ap as ConductorLogLevel, ao as ConductorLogger, j as ConductorWorker, ar as DefaultLogger, aq as DefaultLoggerConfig, ax as DoWhileTaskDef, aa as Escalate, E as EventHandler, _ as EventResourceService, ay as EventTaskDef, q as ExternalStorageLocation, ab as FFAAssignment, a7 as Fixed, aB as ForkJoinDynamicDef, az as ForkJoinTaskDef, G as GenerateTokenRequest, ac as HTScrollableSearchResultHumanTaskEntry, $ as HealthCheckResourceService, aC as HttpInputParameters, aD as HttpTaskDef, aT as HumanExecutor, ad as HumanTaskActionLogEntry, ae as HumanTaskEntry, af as HumanTaskLoad, ag as HumanTaskStateLogEntry, ah as HumanTaskTemplate, ai as HumanTaskTemplateEntry, aF as InlineTaskDef, aE as InlineTaskInputParameters, aA as JoinTaskDef, aG as JsonJQTransformTaskDef, aH as KafkaPublishInputParameters, aI as KafkaPublishTaskDef, aj as LeastBusyGroupMemberAssignment, a0 as MetadataResourceService, ak as Never, l as OnCancel, P as PollData, at as RequestType, r as RerunWorkflowRequest, s as Response, R as RunnerArgs, S as SaveScheduleRequest, a1 as SchedulerResourceService, t as ScrollableSearchResultWorkflowSummary, al as SearchResultHumanTaskEntry, u as SearchResultTask, v as SearchResultTaskSummary, w as SearchResultWorkflow, x as SearchResultWorkflowScheduleExecutionModel, y as SearchResultWorkflowSummary, aJ as SetVariableTaskDef, aK as SimpleTaskDef, z as SkipTaskRequest, D as StartWorkflow, H as StartWorkflowRequest, I as SubWorkflowParams, aL as SubWorkflowTaskDef, aM as SwitchTaskDef, J as Task, K as TaskDef, aw as TaskDefTypes, L as TaskDetails, T as TaskErrorHandler, M as TaskExecLog, i as TaskManager, h as TaskManagerConfig, g as TaskManagerOptions, a2 as TaskResourceService, N as TaskResult, aS as TaskResultStatus, f as TaskRunner, e as TaskRunnerOptions, Q as TaskSummary, av as TaskType, am as Terminate, aN as TerminateTaskDef, an as TimeoutPolicy, a3 as TokenResourceService, aO as WaitTaskDef, W as Workflow, a4 as WorkflowBulkResourceService, aP as WorkflowDef, aQ as WorkflowExecutor, a5 as WorkflowResourceService, U as WorkflowSchedule, V as WorkflowScheduleExecutionModel, X as WorkflowStatus, Y as WorkflowSummary, Z as WorkflowTask, aZ as conductorEventTask, aU as doWhileTask, aW as dynamicForkTask, aX as eventTask, a_ as forkTask, a$ as forkTaskJoin, br as generate, be as generateDoWhileTask, bf as generateEventTask, bg as generateForkJoinTask, bi as generateHTTPTask, bj as generateInlineTask, bk as generateJQTransformTask, bh as generateJoinTask, bl as generateKafkaPublishTask, bn as generateSetVariableTask, bd as generateSimpleTask, bm as generateSubWorkflowTask, bq as generateSwitchTask, bo as generateTerminateTask, bp as generateWaitTask, b0 as httpTask, b1 as inlineTask, b2 as joinTask, b3 as jsonJqTask, b4 as kafkaPublishTask, aV as newLoopTask, n as noopErrorHandler, as as noopLogger, b5 as setVariableTask, b6 as simpleTask, aY as sqsEventTask, b7 as subWorkflowTask, b8 as switchTask, bs as taskGenMapper, b9 as terminateTask, ba as waitTaskDuration, bb as waitTaskUntil, bc as workflow } from './types-1a12e2c4.js';
1
+ import { O as OrkesApiConfig, C as ConductorHttpRequest, a as ConductorClient, b as ConductorClientAPIConfig, F as FetchFn, c as OpenAPIConfig, A as ApiRequestOptions, d as CancelablePromise } from './types-1e3272c6.js';
2
+ export { p as Action, m as ApiError, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, a9 as ClearAssigment, au as CommonTaskDef, aR as ConductorError, ap as ConductorLogLevel, ao as ConductorLogger, j as ConductorWorker, ar as DefaultLogger, aq as DefaultLoggerConfig, ax as DoWhileTaskDef, aa as Escalate, E as EventHandler, _ as EventResourceService, ay as EventTaskDef, q as ExternalStorageLocation, ab as FFAAssignment, a7 as Fixed, aB as ForkJoinDynamicDef, az as ForkJoinTaskDef, G as GenerateTokenRequest, ac as HTScrollableSearchResultHumanTaskEntry, $ as HealthCheckResourceService, aC as HttpInputParameters, aD as HttpTaskDef, aT as HumanExecutor, ad as HumanTaskActionLogEntry, ae as HumanTaskEntry, af as HumanTaskLoad, ag as HumanTaskStateLogEntry, ah as HumanTaskTemplate, ai as HumanTaskTemplateEntry, aF as InlineTaskDef, aE as InlineTaskInputParameters, aA as JoinTaskDef, aG as JsonJQTransformTaskDef, aH as KafkaPublishInputParameters, aI as KafkaPublishTaskDef, aj as LeastBusyGroupMemberAssignment, a0 as MetadataResourceService, ak as Never, l as OnCancel, P as PollData, at as RequestType, r as RerunWorkflowRequest, s as Response, R as RunnerArgs, S as SaveScheduleRequest, a1 as SchedulerResourceService, t as ScrollableSearchResultWorkflowSummary, al as SearchResultHumanTaskEntry, u as SearchResultTask, v as SearchResultTaskSummary, w as SearchResultWorkflow, x as SearchResultWorkflowScheduleExecutionModel, y as SearchResultWorkflowSummary, aJ as SetVariableTaskDef, aK as SimpleTaskDef, z as SkipTaskRequest, D as StartWorkflow, H as StartWorkflowRequest, I as SubWorkflowParams, aL as SubWorkflowTaskDef, aM as SwitchTaskDef, J as Task, K as TaskDef, aw as TaskDefTypes, L as TaskDetails, T as TaskErrorHandler, M as TaskExecLog, i as TaskManager, h as TaskManagerConfig, g as TaskManagerOptions, a2 as TaskResourceService, N as TaskResult, aS as TaskResultStatus, f as TaskRunner, e as TaskRunnerOptions, Q as TaskSummary, av as TaskType, am as Terminate, aN as TerminateTaskDef, an as TimeoutPolicy, a3 as TokenResourceService, aO as WaitTaskDef, W as Workflow, a4 as WorkflowBulkResourceService, aP as WorkflowDef, aQ as WorkflowExecutor, a5 as WorkflowResourceService, U as WorkflowSchedule, V as WorkflowScheduleExecutionModel, X as WorkflowStatus, Y as WorkflowSummary, Z as WorkflowTask, aZ as conductorEventTask, aU as doWhileTask, aW as dynamicForkTask, aX as eventTask, a_ as forkTask, a$ as forkTaskJoin, br as generate, be as generateDoWhileTask, bf as generateEventTask, bg as generateForkJoinTask, bi as generateHTTPTask, bj as generateInlineTask, bk as generateJQTransformTask, bh as generateJoinTask, bl as generateKafkaPublishTask, bn as generateSetVariableTask, bd as generateSimpleTask, bm as generateSubWorkflowTask, bq as generateSwitchTask, bo as generateTerminateTask, bp as generateWaitTask, b0 as httpTask, b1 as inlineTask, b2 as joinTask, b3 as jsonJqTask, b4 as kafkaPublishTask, aV as newLoopTask, n as noopErrorHandler, as as noopLogger, b5 as setVariableTask, b6 as simpleTask, aY as sqsEventTask, b7 as subWorkflowTask, b8 as switchTask, bs as taskGenMapper, b9 as terminateTask, ba as waitTaskDuration, bb as waitTaskUntil, bc as workflow } from './types-1e3272c6.js';
3
3
 
4
4
  /**
5
5
  * Takes a config with keyId and keySecret returns a promise with an instance of ConductorClient
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as OrkesApiConfig, C as ConductorHttpRequest, a as ConductorClient, b as ConductorClientAPIConfig, F as FetchFn, c as OpenAPIConfig, A as ApiRequestOptions, d as CancelablePromise } from './types-1a12e2c4.js';
2
- export { p as Action, m as ApiError, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, a9 as ClearAssigment, au as CommonTaskDef, aR as ConductorError, ap as ConductorLogLevel, ao as ConductorLogger, j as ConductorWorker, ar as DefaultLogger, aq as DefaultLoggerConfig, ax as DoWhileTaskDef, aa as Escalate, E as EventHandler, _ as EventResourceService, ay as EventTaskDef, q as ExternalStorageLocation, ab as FFAAssignment, a7 as Fixed, aB as ForkJoinDynamicDef, az as ForkJoinTaskDef, G as GenerateTokenRequest, ac as HTScrollableSearchResultHumanTaskEntry, $ as HealthCheckResourceService, aC as HttpInputParameters, aD as HttpTaskDef, aT as HumanExecutor, ad as HumanTaskActionLogEntry, ae as HumanTaskEntry, af as HumanTaskLoad, ag as HumanTaskStateLogEntry, ah as HumanTaskTemplate, ai as HumanTaskTemplateEntry, aF as InlineTaskDef, aE as InlineTaskInputParameters, aA as JoinTaskDef, aG as JsonJQTransformTaskDef, aH as KafkaPublishInputParameters, aI as KafkaPublishTaskDef, aj as LeastBusyGroupMemberAssignment, a0 as MetadataResourceService, ak as Never, l as OnCancel, P as PollData, at as RequestType, r as RerunWorkflowRequest, s as Response, R as RunnerArgs, S as SaveScheduleRequest, a1 as SchedulerResourceService, t as ScrollableSearchResultWorkflowSummary, al as SearchResultHumanTaskEntry, u as SearchResultTask, v as SearchResultTaskSummary, w as SearchResultWorkflow, x as SearchResultWorkflowScheduleExecutionModel, y as SearchResultWorkflowSummary, aJ as SetVariableTaskDef, aK as SimpleTaskDef, z as SkipTaskRequest, D as StartWorkflow, H as StartWorkflowRequest, I as SubWorkflowParams, aL as SubWorkflowTaskDef, aM as SwitchTaskDef, J as Task, K as TaskDef, aw as TaskDefTypes, L as TaskDetails, T as TaskErrorHandler, M as TaskExecLog, i as TaskManager, h as TaskManagerConfig, g as TaskManagerOptions, a2 as TaskResourceService, N as TaskResult, aS as TaskResultStatus, f as TaskRunner, e as TaskRunnerOptions, Q as TaskSummary, av as TaskType, am as Terminate, aN as TerminateTaskDef, an as TimeoutPolicy, a3 as TokenResourceService, aO as WaitTaskDef, W as Workflow, a4 as WorkflowBulkResourceService, aP as WorkflowDef, aQ as WorkflowExecutor, a5 as WorkflowResourceService, U as WorkflowSchedule, V as WorkflowScheduleExecutionModel, X as WorkflowStatus, Y as WorkflowSummary, Z as WorkflowTask, aZ as conductorEventTask, aU as doWhileTask, aW as dynamicForkTask, aX as eventTask, a_ as forkTask, a$ as forkTaskJoin, br as generate, be as generateDoWhileTask, bf as generateEventTask, bg as generateForkJoinTask, bi as generateHTTPTask, bj as generateInlineTask, bk as generateJQTransformTask, bh as generateJoinTask, bl as generateKafkaPublishTask, bn as generateSetVariableTask, bd as generateSimpleTask, bm as generateSubWorkflowTask, bq as generateSwitchTask, bo as generateTerminateTask, bp as generateWaitTask, b0 as httpTask, b1 as inlineTask, b2 as joinTask, b3 as jsonJqTask, b4 as kafkaPublishTask, aV as newLoopTask, n as noopErrorHandler, as as noopLogger, b5 as setVariableTask, b6 as simpleTask, aY as sqsEventTask, b7 as subWorkflowTask, b8 as switchTask, bs as taskGenMapper, b9 as terminateTask, ba as waitTaskDuration, bb as waitTaskUntil, bc as workflow } from './types-1a12e2c4.js';
1
+ import { O as OrkesApiConfig, C as ConductorHttpRequest, a as ConductorClient, b as ConductorClientAPIConfig, F as FetchFn, c as OpenAPIConfig, A as ApiRequestOptions, d as CancelablePromise } from './types-1e3272c6.js';
2
+ export { p as Action, m as ApiError, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, a9 as ClearAssigment, au as CommonTaskDef, aR as ConductorError, ap as ConductorLogLevel, ao as ConductorLogger, j as ConductorWorker, ar as DefaultLogger, aq as DefaultLoggerConfig, ax as DoWhileTaskDef, aa as Escalate, E as EventHandler, _ as EventResourceService, ay as EventTaskDef, q as ExternalStorageLocation, ab as FFAAssignment, a7 as Fixed, aB as ForkJoinDynamicDef, az as ForkJoinTaskDef, G as GenerateTokenRequest, ac as HTScrollableSearchResultHumanTaskEntry, $ as HealthCheckResourceService, aC as HttpInputParameters, aD as HttpTaskDef, aT as HumanExecutor, ad as HumanTaskActionLogEntry, ae as HumanTaskEntry, af as HumanTaskLoad, ag as HumanTaskStateLogEntry, ah as HumanTaskTemplate, ai as HumanTaskTemplateEntry, aF as InlineTaskDef, aE as InlineTaskInputParameters, aA as JoinTaskDef, aG as JsonJQTransformTaskDef, aH as KafkaPublishInputParameters, aI as KafkaPublishTaskDef, aj as LeastBusyGroupMemberAssignment, a0 as MetadataResourceService, ak as Never, l as OnCancel, P as PollData, at as RequestType, r as RerunWorkflowRequest, s as Response, R as RunnerArgs, S as SaveScheduleRequest, a1 as SchedulerResourceService, t as ScrollableSearchResultWorkflowSummary, al as SearchResultHumanTaskEntry, u as SearchResultTask, v as SearchResultTaskSummary, w as SearchResultWorkflow, x as SearchResultWorkflowScheduleExecutionModel, y as SearchResultWorkflowSummary, aJ as SetVariableTaskDef, aK as SimpleTaskDef, z as SkipTaskRequest, D as StartWorkflow, H as StartWorkflowRequest, I as SubWorkflowParams, aL as SubWorkflowTaskDef, aM as SwitchTaskDef, J as Task, K as TaskDef, aw as TaskDefTypes, L as TaskDetails, T as TaskErrorHandler, M as TaskExecLog, i as TaskManager, h as TaskManagerConfig, g as TaskManagerOptions, a2 as TaskResourceService, N as TaskResult, aS as TaskResultStatus, f as TaskRunner, e as TaskRunnerOptions, Q as TaskSummary, av as TaskType, am as Terminate, aN as TerminateTaskDef, an as TimeoutPolicy, a3 as TokenResourceService, aO as WaitTaskDef, W as Workflow, a4 as WorkflowBulkResourceService, aP as WorkflowDef, aQ as WorkflowExecutor, a5 as WorkflowResourceService, U as WorkflowSchedule, V as WorkflowScheduleExecutionModel, X as WorkflowStatus, Y as WorkflowSummary, Z as WorkflowTask, aZ as conductorEventTask, aU as doWhileTask, aW as dynamicForkTask, aX as eventTask, a_ as forkTask, a$ as forkTaskJoin, br as generate, be as generateDoWhileTask, bf as generateEventTask, bg as generateForkJoinTask, bi as generateHTTPTask, bj as generateInlineTask, bk as generateJQTransformTask, bh as generateJoinTask, bl as generateKafkaPublishTask, bn as generateSetVariableTask, bd as generateSimpleTask, bm as generateSubWorkflowTask, bq as generateSwitchTask, bo as generateTerminateTask, bp as generateWaitTask, b0 as httpTask, b1 as inlineTask, b2 as joinTask, b3 as jsonJqTask, b4 as kafkaPublishTask, aV as newLoopTask, n as noopErrorHandler, as as noopLogger, b5 as setVariableTask, b6 as simpleTask, aY as sqsEventTask, b7 as subWorkflowTask, b8 as switchTask, bs as taskGenMapper, b9 as terminateTask, ba as waitTaskDuration, bb as waitTaskUntil, bc as workflow } from './types-1e3272c6.js';
3
3
 
4
4
  /**
5
5
  * Takes a config with keyId and keySecret returns a promise with an instance of ConductorClient
package/dist/index.js CHANGED
@@ -2289,14 +2289,17 @@ var BaseHttpRequest = class {
2289
2289
 
2290
2290
  // src/task/Poller.ts
2291
2291
  var Poller = class {
2292
- constructor(pollFunction, performWorkFunction, pollerOptions, logger) {
2292
+ constructor(pollerId, pollFunction, performWorkFunction, pollerOptions, logger) {
2293
2293
  this.performWorkFunction = async () => {
2294
2294
  };
2295
2295
  this.polling = false;
2296
2296
  this._tasksInProcess = 0;
2297
+ this._counterAtO = 0;
2298
+ this._pollerId = "";
2297
2299
  this.options = {
2298
- pollInterval: 1e3,
2299
- concurrency: 1
2300
+ pollInterval: 100,
2301
+ concurrency: 1,
2302
+ warnAtO: 100
2300
2303
  };
2301
2304
  this.logger = noopLogger;
2302
2305
  /**
@@ -2323,10 +2326,30 @@ var Poller = class {
2323
2326
  };
2324
2327
  this.poll = async () => {
2325
2328
  while (this.isPolling) {
2326
- const count = this.options.concurrency > this._tasksInProcess ? this.options.concurrency - this._tasksInProcess : this._tasksInProcess;
2327
- const taskResult = await this.pollFunction(count);
2328
- this._tasksInProcess = taskResult.length;
2329
- taskResult.forEach(this.performWork);
2329
+ try {
2330
+ const count = Math.max(
2331
+ 0,
2332
+ this.options.concurrency - this._tasksInProcess
2333
+ );
2334
+ if (count == 0) {
2335
+ this.logger.debug(
2336
+ "Max in process reached, Will skip polling for " + this._pollerId
2337
+ );
2338
+ this._counterAtO++;
2339
+ if (this._counterAtO > (this.options.warnAtO ?? 100)) {
2340
+ this.logger.info(
2341
+ `Not polling anything because in process tasks is maxed as concurrency level. ${this._pollerId}`
2342
+ );
2343
+ }
2344
+ } else {
2345
+ this._counterAtO = 0;
2346
+ const tasksResult = await this.pollFunction(count);
2347
+ this._tasksInProcess = this._tasksInProcess + (tasksResult ?? []).length;
2348
+ tasksResult.forEach(this.performWork);
2349
+ }
2350
+ } catch (e) {
2351
+ this.logger.error(`Error polling for tasks: ${e.message}`, e);
2352
+ }
2330
2353
  await new Promise(
2331
2354
  (r) => this.isPolling ? this.timeoutHandler = setTimeout(
2332
2355
  () => r(true),
@@ -2335,6 +2358,7 @@ var Poller = class {
2335
2358
  );
2336
2359
  }
2337
2360
  };
2361
+ this._pollerId = pollerId;
2338
2362
  this.pollFunction = pollFunction;
2339
2363
  this.performWorkFunction = performWorkFunction;
2340
2364
  this.options = { ...this.options, ...pollerOptions };
@@ -2357,6 +2381,13 @@ var DEFAULT_ERROR_MESSAGE = "An unknown error occurred";
2357
2381
  var MAX_RETRIES = 3;
2358
2382
  var noopErrorHandler = (__error) => {
2359
2383
  };
2384
+ var defaultRunnerOptions = {
2385
+ workerID: "",
2386
+ pollInterval: 100,
2387
+ domain: void 0,
2388
+ concurrency: 1,
2389
+ batchPollingTimeout: 100
2390
+ };
2360
2391
  var TaskRunner = class {
2361
2392
  constructor({
2362
2393
  worker,
@@ -2370,6 +2401,9 @@ var TaskRunner = class {
2370
2401
  */
2371
2402
  this.startPolling = () => {
2372
2403
  this.poller.startPolling();
2404
+ this.logger.info(
2405
+ `TaskWorker ${this.worker.taskDefName} initialized with concurrency of ${this.poller.options.concurrency} and poll interval of ${this.poller.options.pollInterval}`
2406
+ );
2373
2407
  };
2374
2408
  /**
2375
2409
  * Stops Polling for work
@@ -2379,13 +2413,15 @@ var TaskRunner = class {
2379
2413
  };
2380
2414
  this.batchPoll = async (count) => {
2381
2415
  const { workerID } = this.options;
2382
- const task = await this.taskResource.batchPoll(
2416
+ const tasks = await this.taskResource.batchPoll(
2383
2417
  this.worker.taskDefName,
2384
2418
  workerID,
2385
2419
  this.worker.domain ?? this.options.domain,
2386
- count
2420
+ count,
2421
+ this.options.batchPollingTimeout ?? 100
2422
+ // default batch poll defined in the method
2387
2423
  );
2388
- return task;
2424
+ return tasks;
2389
2425
  };
2390
2426
  this.updateTaskWithRetry = async (task, taskResult) => {
2391
2427
  let retryCount = 0;
@@ -2444,12 +2480,16 @@ var TaskRunner = class {
2444
2480
  this.taskResource = taskResource;
2445
2481
  this.logger = logger;
2446
2482
  this.worker = worker;
2447
- this.options = options;
2483
+ this.options = { ...defaultRunnerOptions, ...options };
2448
2484
  this.errorHandler = errorHandler;
2449
2485
  this.poller = new Poller(
2486
+ worker.taskDefName,
2450
2487
  this.batchPoll,
2451
2488
  this.executeTask,
2452
- { concurrency: options.concurrency, pollInterval: options.pollInterval },
2489
+ {
2490
+ concurrency: worker.concurrency ?? options.concurrency,
2491
+ pollInterval: worker.pollInterval ?? options.pollInterval
2492
+ },
2453
2493
  this.logger
2454
2494
  );
2455
2495
  }
@@ -2462,6 +2502,9 @@ var TaskRunner = class {
2462
2502
  concurrency: newOptions.concurrency,
2463
2503
  pollInterval: newOptions.pollInterval
2464
2504
  });
2505
+ this.logger.info(
2506
+ `TaskWorker ${this.worker.taskDefName} configuration updated with concurrency of ${this.poller.options.concurrency} and poll interval of ${this.poller.options.pollInterval}`
2507
+ );
2465
2508
  this.options = newOptions;
2466
2509
  }
2467
2510
  get getOptions() {
@@ -2473,24 +2516,36 @@ var TaskRunner = class {
2473
2516
  var import_os = __toESM(require("os"));
2474
2517
  var defaultManagerOptions = {
2475
2518
  workerID: "",
2476
- pollInterval: 1e3,
2519
+ pollInterval: 100,
2477
2520
  domain: void 0,
2478
- concurrency: 1
2521
+ concurrency: 1,
2522
+ batchPollingTimeout: 100
2479
2523
  };
2480
2524
  function workerId(options) {
2481
2525
  return options.workerID ?? import_os.default.hostname();
2482
2526
  }
2483
2527
  var TaskManager = class {
2484
2528
  constructor(client, workers, config = {}) {
2485
- this.tasks = {};
2529
+ this.workerRunners = /* @__PURE__ */ new Map();
2486
2530
  this.polling = false;
2487
2531
  this.workerManagerWorkerOptions = (worker) => {
2488
2532
  return {
2489
2533
  ...this.options,
2490
2534
  concurrency: worker.concurrency ?? this.options.concurrency,
2535
+ pollInterval: worker.pollInterval ?? this.options.pollInterval,
2491
2536
  domain: worker.domain ?? this.options.domain
2492
2537
  };
2493
2538
  };
2539
+ this.updatePollingOptionForWorker = (workerTaskDefName, options) => {
2540
+ const maybeRunner = this.workerRunners.get(workerTaskDefName);
2541
+ if (maybeRunner != null) {
2542
+ maybeRunner.updateOptions(options);
2543
+ } else {
2544
+ this.logger.info(
2545
+ `No runner found for worker with taskDefName: ${workerTaskDefName}`
2546
+ );
2547
+ }
2548
+ };
2494
2549
  /**
2495
2550
  * new options will get merged to existing options
2496
2551
  * @param options new options to update polling options
@@ -2501,24 +2556,30 @@ var TaskManager = class {
2501
2556
  ...this.workerManagerWorkerOptions(worker),
2502
2557
  ...options
2503
2558
  };
2504
- const runners = this.tasks[worker.taskDefName];
2505
- runners.forEach((runner) => {
2506
- runner.updateOptions(newOptions);
2507
- });
2559
+ this.updatePollingOptionForWorker(worker.taskDefName, newOptions);
2508
2560
  });
2509
2561
  this.options.concurrency = options.concurrency ?? this.options.concurrency;
2510
2562
  this.options.pollInterval = options.pollInterval ?? this.options.pollInterval;
2511
2563
  };
2564
+ this.sanityCheck = () => {
2565
+ if (this.workers.length === 0) {
2566
+ throw new Error("No workers supplied to TaskManager");
2567
+ }
2568
+ const workerIDs = /* @__PURE__ */ new Set();
2569
+ for (const item of this.workers) {
2570
+ if (workerIDs.has(item.taskDefName)) {
2571
+ throw new Error(`Duplicate worker taskDefName: ${item.taskDefName}`);
2572
+ }
2573
+ workerIDs.add(item.taskDefName);
2574
+ }
2575
+ };
2512
2576
  /**
2513
2577
  * Start polling for tasks
2514
2578
  */
2515
2579
  this.startPolling = () => {
2580
+ this.sanityCheck();
2516
2581
  this.workers.forEach((worker) => {
2517
- this.tasks[worker.taskDefName] = [];
2518
2582
  const options = this.workerManagerWorkerOptions(worker);
2519
- this.logger.debug(
2520
- `Starting taskDefName=${worker.taskDefName} concurrency=${options.concurrency} domain=${options.domain}`
2521
- );
2522
2583
  const runner = new TaskRunner({
2523
2584
  worker,
2524
2585
  options,
@@ -2527,7 +2588,7 @@ var TaskManager = class {
2527
2588
  onError: this.errorHandler
2528
2589
  });
2529
2590
  runner.startPolling();
2530
- this.tasks[worker.taskDefName].push(runner);
2591
+ this.workerRunners.set(worker.taskDefName, runner);
2531
2592
  });
2532
2593
  this.polling = true;
2533
2594
  };
@@ -2535,11 +2596,10 @@ var TaskManager = class {
2535
2596
  * Stops polling for tasks
2536
2597
  */
2537
2598
  this.stopPolling = async () => {
2538
- for (const taskType in this.tasks) {
2539
- await Promise.all(
2540
- this.tasks[taskType].map((runner) => runner.stopPolling())
2541
- );
2542
- this.tasks[taskType] = [];
2599
+ for (const [workerTaskDefName, runner] of this.workerRunners) {
2600
+ this.logger.debug(`Stopping taskDefName=${workerTaskDefName}`);
2601
+ await runner.stopPolling();
2602
+ this.workerRunners.delete(workerTaskDefName);
2543
2603
  }
2544
2604
  this.polling = false;
2545
2605
  };