@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.
@@ -1,5 +1,5 @@
1
- import { O as OrkesApiConfig, C as ConductorHttpRequest, a as ConductorClient } from './types-1a12e2c4.js';
2
- export { p as Action, m as ApiError, A as ApiRequestOptions, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, d as CancelablePromise, a9 as ClearAssigment, au as CommonTaskDef, b as ConductorClientAPIConfig, 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, F as FetchFn, 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, c as OpenAPIConfig, 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 } from './types-1e3272c6.js';
2
+ export { p as Action, m as ApiError, A as ApiRequestOptions, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, d as CancelablePromise, a9 as ClearAssigment, au as CommonTaskDef, b as ConductorClientAPIConfig, 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, F as FetchFn, 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, c as OpenAPIConfig, 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/browser.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as OrkesApiConfig, C as ConductorHttpRequest, a as ConductorClient } from './types-1a12e2c4.js';
2
- export { p as Action, m as ApiError, A as ApiRequestOptions, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, d as CancelablePromise, a9 as ClearAssigment, au as CommonTaskDef, b as ConductorClientAPIConfig, 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, F as FetchFn, 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, c as OpenAPIConfig, 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 } from './types-1e3272c6.js';
2
+ export { p as Action, m as ApiError, A as ApiRequestOptions, k as ApiResult, a6 as AssignmentPolicy, a8 as BackToAssigment, B as BaseHttpRequest, o as CancelError, d as CancelablePromise, a9 as ClearAssigment, au as CommonTaskDef, b as ConductorClientAPIConfig, 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, F as FetchFn, 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, c as OpenAPIConfig, 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/browser.js CHANGED
@@ -2283,14 +2283,17 @@ var BaseHttpRequest = class {
2283
2283
 
2284
2284
  // src/task/Poller.ts
2285
2285
  var Poller = class {
2286
- constructor(pollFunction, performWorkFunction, pollerOptions, logger) {
2286
+ constructor(pollerId, pollFunction, performWorkFunction, pollerOptions, logger) {
2287
2287
  this.performWorkFunction = async () => {
2288
2288
  };
2289
2289
  this.polling = false;
2290
2290
  this._tasksInProcess = 0;
2291
+ this._counterAtO = 0;
2292
+ this._pollerId = "";
2291
2293
  this.options = {
2292
- pollInterval: 1e3,
2293
- concurrency: 1
2294
+ pollInterval: 100,
2295
+ concurrency: 1,
2296
+ warnAtO: 100
2294
2297
  };
2295
2298
  this.logger = noopLogger;
2296
2299
  /**
@@ -2317,10 +2320,30 @@ var Poller = class {
2317
2320
  };
2318
2321
  this.poll = async () => {
2319
2322
  while (this.isPolling) {
2320
- const count = this.options.concurrency > this._tasksInProcess ? this.options.concurrency - this._tasksInProcess : this._tasksInProcess;
2321
- const taskResult = await this.pollFunction(count);
2322
- this._tasksInProcess = taskResult.length;
2323
- taskResult.forEach(this.performWork);
2323
+ try {
2324
+ const count = Math.max(
2325
+ 0,
2326
+ this.options.concurrency - this._tasksInProcess
2327
+ );
2328
+ if (count == 0) {
2329
+ this.logger.debug(
2330
+ "Max in process reached, Will skip polling for " + this._pollerId
2331
+ );
2332
+ this._counterAtO++;
2333
+ if (this._counterAtO > (this.options.warnAtO ?? 100)) {
2334
+ this.logger.info(
2335
+ `Not polling anything because in process tasks is maxed as concurrency level. ${this._pollerId}`
2336
+ );
2337
+ }
2338
+ } else {
2339
+ this._counterAtO = 0;
2340
+ const tasksResult = await this.pollFunction(count);
2341
+ this._tasksInProcess = this._tasksInProcess + (tasksResult ?? []).length;
2342
+ tasksResult.forEach(this.performWork);
2343
+ }
2344
+ } catch (e) {
2345
+ this.logger.error(`Error polling for tasks: ${e.message}`, e);
2346
+ }
2324
2347
  await new Promise(
2325
2348
  (r) => this.isPolling ? this.timeoutHandler = setTimeout(
2326
2349
  () => r(true),
@@ -2329,6 +2352,7 @@ var Poller = class {
2329
2352
  );
2330
2353
  }
2331
2354
  };
2355
+ this._pollerId = pollerId;
2332
2356
  this.pollFunction = pollFunction;
2333
2357
  this.performWorkFunction = performWorkFunction;
2334
2358
  this.options = { ...this.options, ...pollerOptions };
@@ -2351,6 +2375,13 @@ var DEFAULT_ERROR_MESSAGE = "An unknown error occurred";
2351
2375
  var MAX_RETRIES = 3;
2352
2376
  var noopErrorHandler = (__error) => {
2353
2377
  };
2378
+ var defaultRunnerOptions = {
2379
+ workerID: "",
2380
+ pollInterval: 100,
2381
+ domain: void 0,
2382
+ concurrency: 1,
2383
+ batchPollingTimeout: 100
2384
+ };
2354
2385
  var TaskRunner = class {
2355
2386
  constructor({
2356
2387
  worker,
@@ -2364,6 +2395,9 @@ var TaskRunner = class {
2364
2395
  */
2365
2396
  this.startPolling = () => {
2366
2397
  this.poller.startPolling();
2398
+ this.logger.info(
2399
+ `TaskWorker ${this.worker.taskDefName} initialized with concurrency of ${this.poller.options.concurrency} and poll interval of ${this.poller.options.pollInterval}`
2400
+ );
2367
2401
  };
2368
2402
  /**
2369
2403
  * Stops Polling for work
@@ -2373,13 +2407,15 @@ var TaskRunner = class {
2373
2407
  };
2374
2408
  this.batchPoll = async (count) => {
2375
2409
  const { workerID } = this.options;
2376
- const task = await this.taskResource.batchPoll(
2410
+ const tasks = await this.taskResource.batchPoll(
2377
2411
  this.worker.taskDefName,
2378
2412
  workerID,
2379
2413
  this.worker.domain ?? this.options.domain,
2380
- count
2414
+ count,
2415
+ this.options.batchPollingTimeout ?? 100
2416
+ // default batch poll defined in the method
2381
2417
  );
2382
- return task;
2418
+ return tasks;
2383
2419
  };
2384
2420
  this.updateTaskWithRetry = async (task, taskResult) => {
2385
2421
  let retryCount = 0;
@@ -2438,12 +2474,16 @@ var TaskRunner = class {
2438
2474
  this.taskResource = taskResource;
2439
2475
  this.logger = logger;
2440
2476
  this.worker = worker;
2441
- this.options = options;
2477
+ this.options = { ...defaultRunnerOptions, ...options };
2442
2478
  this.errorHandler = errorHandler;
2443
2479
  this.poller = new Poller(
2480
+ worker.taskDefName,
2444
2481
  this.batchPoll,
2445
2482
  this.executeTask,
2446
- { concurrency: options.concurrency, pollInterval: options.pollInterval },
2483
+ {
2484
+ concurrency: worker.concurrency ?? options.concurrency,
2485
+ pollInterval: worker.pollInterval ?? options.pollInterval
2486
+ },
2447
2487
  this.logger
2448
2488
  );
2449
2489
  }
@@ -2456,6 +2496,9 @@ var TaskRunner = class {
2456
2496
  concurrency: newOptions.concurrency,
2457
2497
  pollInterval: newOptions.pollInterval
2458
2498
  });
2499
+ this.logger.info(
2500
+ `TaskWorker ${this.worker.taskDefName} configuration updated with concurrency of ${this.poller.options.concurrency} and poll interval of ${this.poller.options.pollInterval}`
2501
+ );
2459
2502
  this.options = newOptions;
2460
2503
  }
2461
2504
  get getOptions() {
@@ -2467,24 +2510,36 @@ var TaskRunner = class {
2467
2510
  var import_os = __toESM(require("os"));
2468
2511
  var defaultManagerOptions = {
2469
2512
  workerID: "",
2470
- pollInterval: 1e3,
2513
+ pollInterval: 100,
2471
2514
  domain: void 0,
2472
- concurrency: 1
2515
+ concurrency: 1,
2516
+ batchPollingTimeout: 100
2473
2517
  };
2474
2518
  function workerId(options) {
2475
2519
  return options.workerID ?? import_os.default.hostname();
2476
2520
  }
2477
2521
  var TaskManager = class {
2478
2522
  constructor(client, workers, config = {}) {
2479
- this.tasks = {};
2523
+ this.workerRunners = /* @__PURE__ */ new Map();
2480
2524
  this.polling = false;
2481
2525
  this.workerManagerWorkerOptions = (worker) => {
2482
2526
  return {
2483
2527
  ...this.options,
2484
2528
  concurrency: worker.concurrency ?? this.options.concurrency,
2529
+ pollInterval: worker.pollInterval ?? this.options.pollInterval,
2485
2530
  domain: worker.domain ?? this.options.domain
2486
2531
  };
2487
2532
  };
2533
+ this.updatePollingOptionForWorker = (workerTaskDefName, options) => {
2534
+ const maybeRunner = this.workerRunners.get(workerTaskDefName);
2535
+ if (maybeRunner != null) {
2536
+ maybeRunner.updateOptions(options);
2537
+ } else {
2538
+ this.logger.info(
2539
+ `No runner found for worker with taskDefName: ${workerTaskDefName}`
2540
+ );
2541
+ }
2542
+ };
2488
2543
  /**
2489
2544
  * new options will get merged to existing options
2490
2545
  * @param options new options to update polling options
@@ -2495,24 +2550,30 @@ var TaskManager = class {
2495
2550
  ...this.workerManagerWorkerOptions(worker),
2496
2551
  ...options
2497
2552
  };
2498
- const runners = this.tasks[worker.taskDefName];
2499
- runners.forEach((runner) => {
2500
- runner.updateOptions(newOptions);
2501
- });
2553
+ this.updatePollingOptionForWorker(worker.taskDefName, newOptions);
2502
2554
  });
2503
2555
  this.options.concurrency = options.concurrency ?? this.options.concurrency;
2504
2556
  this.options.pollInterval = options.pollInterval ?? this.options.pollInterval;
2505
2557
  };
2558
+ this.sanityCheck = () => {
2559
+ if (this.workers.length === 0) {
2560
+ throw new Error("No workers supplied to TaskManager");
2561
+ }
2562
+ const workerIDs = /* @__PURE__ */ new Set();
2563
+ for (const item of this.workers) {
2564
+ if (workerIDs.has(item.taskDefName)) {
2565
+ throw new Error(`Duplicate worker taskDefName: ${item.taskDefName}`);
2566
+ }
2567
+ workerIDs.add(item.taskDefName);
2568
+ }
2569
+ };
2506
2570
  /**
2507
2571
  * Start polling for tasks
2508
2572
  */
2509
2573
  this.startPolling = () => {
2574
+ this.sanityCheck();
2510
2575
  this.workers.forEach((worker) => {
2511
- this.tasks[worker.taskDefName] = [];
2512
2576
  const options = this.workerManagerWorkerOptions(worker);
2513
- this.logger.debug(
2514
- `Starting taskDefName=${worker.taskDefName} concurrency=${options.concurrency} domain=${options.domain}`
2515
- );
2516
2577
  const runner = new TaskRunner({
2517
2578
  worker,
2518
2579
  options,
@@ -2521,7 +2582,7 @@ var TaskManager = class {
2521
2582
  onError: this.errorHandler
2522
2583
  });
2523
2584
  runner.startPolling();
2524
- this.tasks[worker.taskDefName].push(runner);
2585
+ this.workerRunners.set(worker.taskDefName, runner);
2525
2586
  });
2526
2587
  this.polling = true;
2527
2588
  };
@@ -2529,11 +2590,10 @@ var TaskManager = class {
2529
2590
  * Stops polling for tasks
2530
2591
  */
2531
2592
  this.stopPolling = async () => {
2532
- for (const taskType in this.tasks) {
2533
- await Promise.all(
2534
- this.tasks[taskType].map((runner) => runner.stopPolling())
2535
- );
2536
- this.tasks[taskType] = [];
2593
+ for (const [workerTaskDefName, runner] of this.workerRunners) {
2594
+ this.logger.debug(`Stopping taskDefName=${workerTaskDefName}`);
2595
+ await runner.stopPolling();
2596
+ this.workerRunners.delete(workerTaskDefName);
2537
2597
  }
2538
2598
  this.polling = false;
2539
2599
  };