@io-orkes/conductor-javascript 1.0.1 → 1.1.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/dist/index.d.ts +45 -35
- package/dist/index.js +133 -41
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +133 -41
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1893,45 +1893,20 @@ interface ConductorWorker {
|
|
|
1893
1893
|
concurrency?: number;
|
|
1894
1894
|
}
|
|
1895
1895
|
|
|
1896
|
-
|
|
1896
|
+
declare type TaskErrorHandler = (error: Error, task?: Task) => void;
|
|
1897
|
+
interface TaskRunnerOptions {
|
|
1897
1898
|
workerID: string;
|
|
1898
1899
|
domain: string | undefined;
|
|
1899
1900
|
pollInterval?: number;
|
|
1900
1901
|
concurrency?: number;
|
|
1901
1902
|
}
|
|
1902
|
-
interface TaskManagerConfig {
|
|
1903
|
-
logger?: ConductorLogger;
|
|
1904
|
-
options?: Partial<TaskManagerOptions>;
|
|
1905
|
-
onError?: TaskErrorHandler;
|
|
1906
|
-
}
|
|
1907
|
-
/**
|
|
1908
|
-
* Responsible for initializing and managing the runners that poll and work different task queues.
|
|
1909
|
-
*/
|
|
1910
|
-
declare class TaskManager {
|
|
1911
|
-
private tasks;
|
|
1912
|
-
private readonly client;
|
|
1913
|
-
private readonly logger;
|
|
1914
|
-
private readonly errorHandler;
|
|
1915
|
-
private workers;
|
|
1916
|
-
private readonly taskManageOptions;
|
|
1917
|
-
constructor(client: ConductorClient, workers: Array<ConductorWorker>, config?: TaskManagerConfig);
|
|
1918
|
-
/**
|
|
1919
|
-
* Start polling for tasks
|
|
1920
|
-
*/
|
|
1921
|
-
startPolling: () => void;
|
|
1922
|
-
/**
|
|
1923
|
-
* Stops polling for tasks
|
|
1924
|
-
*/
|
|
1925
|
-
stopPolling: () => void;
|
|
1926
|
-
}
|
|
1927
|
-
|
|
1928
|
-
declare type TaskErrorHandler = (error: Error, task?: Task) => void;
|
|
1929
1903
|
interface RunnerArgs {
|
|
1930
1904
|
worker: ConductorWorker;
|
|
1931
1905
|
taskResource: TaskResourceService;
|
|
1932
|
-
options: Required<
|
|
1906
|
+
options: Required<TaskRunnerOptions>;
|
|
1933
1907
|
logger?: ConductorLogger;
|
|
1934
1908
|
onError?: TaskErrorHandler;
|
|
1909
|
+
concurrency?: number;
|
|
1935
1910
|
}
|
|
1936
1911
|
declare const noopErrorHandler: TaskErrorHandler;
|
|
1937
1912
|
/**
|
|
@@ -1944,27 +1919,62 @@ declare const noopErrorHandler: TaskErrorHandler;
|
|
|
1944
1919
|
*
|
|
1945
1920
|
*/
|
|
1946
1921
|
declare class TaskRunner {
|
|
1947
|
-
isPolling: boolean;
|
|
1948
1922
|
taskResource: TaskResourceService;
|
|
1949
1923
|
worker: ConductorWorker;
|
|
1950
|
-
logger
|
|
1951
|
-
options
|
|
1924
|
+
private logger;
|
|
1925
|
+
private options;
|
|
1952
1926
|
errorHandler: TaskErrorHandler;
|
|
1927
|
+
private poller;
|
|
1953
1928
|
constructor({ worker, taskResource, options, logger, onError: errorHandler, }: RunnerArgs);
|
|
1954
1929
|
/**
|
|
1955
1930
|
* Starts polling for work
|
|
1956
1931
|
*/
|
|
1957
|
-
startPolling: () =>
|
|
1932
|
+
startPolling: () => void;
|
|
1958
1933
|
/**
|
|
1959
1934
|
* Stops Polling for work
|
|
1960
1935
|
*/
|
|
1961
1936
|
stopPolling: () => void;
|
|
1962
|
-
|
|
1937
|
+
updateOptions(options: Partial<TaskRunnerOptions>): void;
|
|
1938
|
+
get getOptions(): TaskRunnerOptions;
|
|
1939
|
+
private pollAndExecute;
|
|
1963
1940
|
updateTaskWithRetry: (task: Task, taskResult: TaskResult) => Promise<void>;
|
|
1964
1941
|
executeTask: (task: Task) => Promise<void>;
|
|
1965
1942
|
handleUnknownError: (unknownError: unknown) => void;
|
|
1966
1943
|
}
|
|
1967
1944
|
|
|
1945
|
+
declare type TaskManagerOptions = TaskRunnerOptions;
|
|
1946
|
+
interface TaskManagerConfig {
|
|
1947
|
+
logger?: ConductorLogger;
|
|
1948
|
+
options?: Partial<TaskManagerOptions>;
|
|
1949
|
+
onError?: TaskErrorHandler;
|
|
1950
|
+
}
|
|
1951
|
+
/**
|
|
1952
|
+
* Responsible for initializing and managing the runners that poll and work different task queues.
|
|
1953
|
+
*/
|
|
1954
|
+
declare class TaskManager {
|
|
1955
|
+
private tasks;
|
|
1956
|
+
private readonly client;
|
|
1957
|
+
private readonly logger;
|
|
1958
|
+
private readonly errorHandler;
|
|
1959
|
+
private workers;
|
|
1960
|
+
private readonly taskManageOptions;
|
|
1961
|
+
constructor(client: ConductorClient, workers: Array<ConductorWorker>, config?: TaskManagerConfig);
|
|
1962
|
+
private workerManagerWorkerOptions;
|
|
1963
|
+
/**
|
|
1964
|
+
* new options will get merged to existing options
|
|
1965
|
+
* @param options new options to update polling options
|
|
1966
|
+
*/
|
|
1967
|
+
updatePollingOptions: (options: Partial<TaskManagerOptions>) => void;
|
|
1968
|
+
/**
|
|
1969
|
+
* Start polling for tasks
|
|
1970
|
+
*/
|
|
1971
|
+
startPolling: () => void;
|
|
1972
|
+
/**
|
|
1973
|
+
* Stops polling for tasks
|
|
1974
|
+
*/
|
|
1975
|
+
stopPolling: () => void;
|
|
1976
|
+
}
|
|
1977
|
+
|
|
1968
1978
|
declare class ConductorError extends Error {
|
|
1969
1979
|
private _trace;
|
|
1970
1980
|
private __proto__;
|
|
@@ -2167,4 +2177,4 @@ declare class HumanExecutor {
|
|
|
2167
2177
|
completeTask(taskId: string, requestBody?: Record<string, Record<string, any>>): Promise<void>;
|
|
2168
2178
|
}
|
|
2169
2179
|
|
|
2170
|
-
export { Action, ApiError, AssignmentPolicy, BackToAssigment, BaseHttpRequest, CancelError, CancelablePromise, ClearAssigment, CommonTaskDef, ConductorClient, ConductorError, ConductorHttpRequest, ConductorLogLevel, ConductorLogger, ConductorWorker, DefaultLogger, DefaultLoggerConfig, DoWhileTaskDef, Escalate, EventHandler, EventResourceService, EventTaskDef, ExternalStorageLocation, FFAAssignment, Fixed, ForkJoinDynamicDef, ForkJoinTaskDef, GenerateTokenRequest, HTScrollableSearchResultHumanTaskEntry, HealthCheckResourceService, HttpInputParameters, HttpTaskDef, HumanExecutor, HumanTaskActionLogEntry, HumanTaskEntry, HumanTaskLoad, HumanTaskStateLogEntry, HumanTaskTemplate, HumanTaskTemplateEntry, InlineTaskDef, InlineTaskInputParameters, JoinTaskDef, JsonJQTransformTaskDef, KafkaPublishInputParameters, KafkaPublishTaskDef, LeastBusyGroupMemberAssignment, MetadataResourceService, Never, OnCancel, OpenAPIConfig, OrkesApiConfig, PollData, RequestType, RerunWorkflowRequest, Response, RunnerArgs, SaveScheduleRequest, SchedulerResourceService, ScrollableSearchResultWorkflowSummary, SearchResultHumanTaskEntry, SearchResultTask, SearchResultTaskSummary, SearchResultWorkflow, SearchResultWorkflowScheduleExecutionModel, SearchResultWorkflowSummary, SetVariableTaskDef, SimpleTaskDef, SkipTaskRequest, StartWorkflow, StartWorkflowRequest, SubWorkflowParams, SubWorkflowTaskDef, SwitchTaskDef, Task, TaskDef, TaskDefTypes, TaskDetails, TaskErrorHandler, TaskExecLog, TaskManager, TaskManagerConfig, TaskManagerOptions, TaskResourceService, TaskResult, TaskResultStatus, TaskRunner, TaskSummary, TaskType, Terminate, TerminateTaskDef, TimeoutPolicy, TokenResourceService, WaitTaskDef, Workflow, WorkflowBulkResourceService, WorkflowDef, WorkflowExecutor, WorkflowResourceService, WorkflowSchedule, WorkflowScheduleExecutionModel, WorkflowStatus, WorkflowSummary, WorkflowTask, conductorEventTask, doWhileTask, dynamicForkTask, eventTask, forkTask, forkTaskJoin, generate, generateDoWhileTask, generateEventTask, generateForkJoinTask, generateHTTPTask, generateInlineTask, generateJQTransformTask, generateJoinTask, generateKafkaPublishTask, generateSetVariableTask, generateSimpleTask, generateSubWorkflowTask, generateSwitchTask, generateTerminateTask, generateWaitTask, httpTask, inlineTask, joinTask, jsonJqTask, kafkaPublishTask, newLoopTask, noopErrorHandler, orkesConductorClient, setVariableTask, simpleTask, sqsEventTask, subWorkflowTask, switchTask, taskGenMapper, terminateTask, waitTaskDuration, waitTaskUntil, workflow };
|
|
2180
|
+
export { Action, ApiError, AssignmentPolicy, BackToAssigment, BaseHttpRequest, CancelError, CancelablePromise, ClearAssigment, CommonTaskDef, ConductorClient, ConductorError, ConductorHttpRequest, ConductorLogLevel, ConductorLogger, ConductorWorker, DefaultLogger, DefaultLoggerConfig, DoWhileTaskDef, Escalate, EventHandler, EventResourceService, EventTaskDef, ExternalStorageLocation, FFAAssignment, Fixed, ForkJoinDynamicDef, ForkJoinTaskDef, GenerateTokenRequest, HTScrollableSearchResultHumanTaskEntry, HealthCheckResourceService, HttpInputParameters, HttpTaskDef, HumanExecutor, HumanTaskActionLogEntry, HumanTaskEntry, HumanTaskLoad, HumanTaskStateLogEntry, HumanTaskTemplate, HumanTaskTemplateEntry, InlineTaskDef, InlineTaskInputParameters, JoinTaskDef, JsonJQTransformTaskDef, KafkaPublishInputParameters, KafkaPublishTaskDef, LeastBusyGroupMemberAssignment, MetadataResourceService, Never, OnCancel, OpenAPIConfig, OrkesApiConfig, PollData, RequestType, RerunWorkflowRequest, Response, RunnerArgs, SaveScheduleRequest, SchedulerResourceService, ScrollableSearchResultWorkflowSummary, SearchResultHumanTaskEntry, SearchResultTask, SearchResultTaskSummary, SearchResultWorkflow, SearchResultWorkflowScheduleExecutionModel, SearchResultWorkflowSummary, SetVariableTaskDef, SimpleTaskDef, SkipTaskRequest, StartWorkflow, StartWorkflowRequest, SubWorkflowParams, SubWorkflowTaskDef, SwitchTaskDef, Task, TaskDef, TaskDefTypes, TaskDetails, TaskErrorHandler, TaskExecLog, TaskManager, TaskManagerConfig, TaskManagerOptions, TaskResourceService, TaskResult, TaskResultStatus, TaskRunner, TaskRunnerOptions, TaskSummary, TaskType, Terminate, TerminateTaskDef, TimeoutPolicy, TokenResourceService, WaitTaskDef, Workflow, WorkflowBulkResourceService, WorkflowDef, WorkflowExecutor, WorkflowResourceService, WorkflowSchedule, WorkflowScheduleExecutionModel, WorkflowStatus, WorkflowSummary, WorkflowTask, conductorEventTask, doWhileTask, dynamicForkTask, eventTask, forkTask, forkTaskJoin, generate, generateDoWhileTask, generateEventTask, generateForkJoinTask, generateHTTPTask, generateInlineTask, generateJQTransformTask, generateJoinTask, generateKafkaPublishTask, generateSetVariableTask, generateSimpleTask, generateSubWorkflowTask, generateSwitchTask, generateTerminateTask, generateWaitTask, httpTask, inlineTask, joinTask, jsonJqTask, kafkaPublishTask, newLoopTask, noopErrorHandler, orkesConductorClient, setVariableTask, simpleTask, sqsEventTask, subWorkflowTask, switchTask, taskGenMapper, terminateTask, waitTaskDuration, waitTaskUntil, workflow };
|
package/dist/index.js
CHANGED
|
@@ -101,11 +101,7 @@ __export(conductor_javascript_exports, {
|
|
|
101
101
|
});
|
|
102
102
|
module.exports = __toCommonJS(conductor_javascript_exports);
|
|
103
103
|
|
|
104
|
-
// src/task/
|
|
105
|
-
var DEFAULT_ERROR_MESSAGE = "An unknown error occurred";
|
|
106
|
-
var MAX_RETRIES = 3;
|
|
107
|
-
var noopErrorHandler = (__error) => {
|
|
108
|
-
};
|
|
104
|
+
// src/task/helpers.ts
|
|
109
105
|
var noopLogger = {
|
|
110
106
|
debug: (...args) => {
|
|
111
107
|
},
|
|
@@ -114,6 +110,88 @@ var noopLogger = {
|
|
|
114
110
|
error: (...args) => {
|
|
115
111
|
}
|
|
116
112
|
};
|
|
113
|
+
|
|
114
|
+
// src/task/Poller.ts
|
|
115
|
+
var Poller = class {
|
|
116
|
+
constructor(pollFunction, pollerOptions, logger) {
|
|
117
|
+
this.concurrentCalls = [];
|
|
118
|
+
this.pollFunction = async () => {
|
|
119
|
+
};
|
|
120
|
+
this.isPolling = false;
|
|
121
|
+
this.options = {
|
|
122
|
+
pollInterval: 1e3,
|
|
123
|
+
concurrency: 1
|
|
124
|
+
};
|
|
125
|
+
this.logger = noopLogger;
|
|
126
|
+
this.startPolling = () => {
|
|
127
|
+
if (this.isPolling) {
|
|
128
|
+
throw new Error("Runner is already started");
|
|
129
|
+
}
|
|
130
|
+
return this.poll();
|
|
131
|
+
};
|
|
132
|
+
this.stopPolling = () => {
|
|
133
|
+
this.isPolling = false;
|
|
134
|
+
this.concurrentCalls.forEach((call) => call.stop());
|
|
135
|
+
};
|
|
136
|
+
this.poll = async () => {
|
|
137
|
+
if (!this.isPolling) {
|
|
138
|
+
this.isPolling = true;
|
|
139
|
+
for (let i = 0; i < this.options.concurrency; i++) {
|
|
140
|
+
this.concurrentCalls.push(this.singlePoll());
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
this.singlePoll = () => {
|
|
145
|
+
let poll = this.isPolling;
|
|
146
|
+
let timeout;
|
|
147
|
+
const pollingCall = async () => {
|
|
148
|
+
while (poll) {
|
|
149
|
+
await this.pollFunction();
|
|
150
|
+
await new Promise((r) => timeout = setTimeout(() => r(true), this.options.pollInterval));
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
return {
|
|
154
|
+
promise: pollingCall(),
|
|
155
|
+
stop: () => {
|
|
156
|
+
clearTimeout(timeout);
|
|
157
|
+
poll = false;
|
|
158
|
+
this.logger.debug("stopping single poll call");
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
this.pollFunction = pollFunction;
|
|
163
|
+
this.options = __spreadValues(__spreadValues({}, this.options), pollerOptions);
|
|
164
|
+
this.logger = logger || noopLogger;
|
|
165
|
+
}
|
|
166
|
+
updateConcurrency(concurrency) {
|
|
167
|
+
if (concurrency > 0 && concurrency !== this.options.concurrency) {
|
|
168
|
+
if (concurrency < this.options.concurrency) {
|
|
169
|
+
const result = this.concurrentCalls.splice(0, this.options.concurrency - concurrency);
|
|
170
|
+
result.forEach((call) => {
|
|
171
|
+
call.stop();
|
|
172
|
+
this.logger.debug("stopping some spawned calls");
|
|
173
|
+
});
|
|
174
|
+
} else {
|
|
175
|
+
for (let i = 0; i < concurrency - this.options.concurrency; i++) {
|
|
176
|
+
this.concurrentCalls.push(this.singlePoll());
|
|
177
|
+
this.logger.debug("spawning additional poll calls");
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
this.options.concurrency = concurrency;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
updateOptions(options) {
|
|
184
|
+
const newOptions = __spreadValues(__spreadValues({}, this.options), options);
|
|
185
|
+
this.updateConcurrency(newOptions.concurrency);
|
|
186
|
+
this.options = newOptions;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// src/task/TaskRunner.ts
|
|
191
|
+
var DEFAULT_ERROR_MESSAGE = "An unknown error occurred";
|
|
192
|
+
var MAX_RETRIES = 3;
|
|
193
|
+
var noopErrorHandler = (__error) => {
|
|
194
|
+
};
|
|
117
195
|
var TaskRunner = class {
|
|
118
196
|
constructor({
|
|
119
197
|
worker,
|
|
@@ -122,32 +200,24 @@ var TaskRunner = class {
|
|
|
122
200
|
logger = noopLogger,
|
|
123
201
|
onError: errorHandler = noopErrorHandler
|
|
124
202
|
}) {
|
|
125
|
-
this.isPolling = false;
|
|
126
203
|
this.startPolling = () => {
|
|
127
|
-
|
|
128
|
-
throw new Error("Runner is already started");
|
|
129
|
-
}
|
|
130
|
-
this.isPolling = true;
|
|
131
|
-
return this.poll();
|
|
204
|
+
this.poller.startPolling();
|
|
132
205
|
};
|
|
133
206
|
this.stopPolling = () => {
|
|
134
|
-
this.
|
|
207
|
+
this.poller.stopPolling();
|
|
135
208
|
};
|
|
136
|
-
this.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
this.logger.debug(`No tasks for ${this.worker.taskDefName}`);
|
|
145
|
-
}
|
|
146
|
-
} catch (unknownError) {
|
|
147
|
-
this.handleUnknownError(unknownError);
|
|
148
|
-
this.errorHandler(unknownError);
|
|
209
|
+
this.pollAndExecute = async () => {
|
|
210
|
+
try {
|
|
211
|
+
const { workerID } = this.options;
|
|
212
|
+
const task = await this.taskResource.poll(this.worker.taskDefName, workerID, this.worker.domain ?? this.options.domain);
|
|
213
|
+
if (task && task.taskId) {
|
|
214
|
+
await this.executeTask(task);
|
|
215
|
+
} else {
|
|
216
|
+
this.logger.debug(`No tasks for ${this.worker.taskDefName}`);
|
|
149
217
|
}
|
|
150
|
-
|
|
218
|
+
} catch (unknownError) {
|
|
219
|
+
this.handleUnknownError(unknownError);
|
|
220
|
+
this.errorHandler(unknownError);
|
|
151
221
|
}
|
|
152
222
|
};
|
|
153
223
|
this.updateTaskWithRetry = async (task, taskResult) => {
|
|
@@ -201,6 +271,18 @@ var TaskRunner = class {
|
|
|
201
271
|
this.worker = worker;
|
|
202
272
|
this.options = options;
|
|
203
273
|
this.errorHandler = errorHandler;
|
|
274
|
+
this.poller = new Poller(this.pollAndExecute, { concurrency: options.concurrency, pollInterval: options.pollInterval }, this.logger);
|
|
275
|
+
}
|
|
276
|
+
updateOptions(options) {
|
|
277
|
+
const newOptions = __spreadValues(__spreadValues({}, this.options), options);
|
|
278
|
+
this.poller.updateOptions({
|
|
279
|
+
concurrency: newOptions.concurrency,
|
|
280
|
+
pollInterval: newOptions.pollInterval
|
|
281
|
+
});
|
|
282
|
+
this.options = newOptions;
|
|
283
|
+
}
|
|
284
|
+
get getOptions() {
|
|
285
|
+
return this.options;
|
|
204
286
|
}
|
|
205
287
|
};
|
|
206
288
|
|
|
@@ -2170,25 +2252,35 @@ function workerId(options) {
|
|
|
2170
2252
|
var TaskManager = class {
|
|
2171
2253
|
constructor(client, workers, config = {}) {
|
|
2172
2254
|
this.tasks = {};
|
|
2255
|
+
this.workerManagerWorkerOptions = (worker) => {
|
|
2256
|
+
return __spreadProps(__spreadValues({}, this.taskManageOptions), {
|
|
2257
|
+
concurrency: worker.concurrency ?? this.taskManageOptions.concurrency,
|
|
2258
|
+
domain: worker.domain ?? this.taskManageOptions.domain
|
|
2259
|
+
});
|
|
2260
|
+
};
|
|
2261
|
+
this.updatePollingOptions = (options) => {
|
|
2262
|
+
this.workers.forEach((worker) => {
|
|
2263
|
+
const newOptions = __spreadValues(__spreadValues({}, this.workerManagerWorkerOptions(worker)), options);
|
|
2264
|
+
const runners = this.tasks[worker.taskDefName];
|
|
2265
|
+
runners.forEach((runner) => {
|
|
2266
|
+
runner.updateOptions(newOptions);
|
|
2267
|
+
});
|
|
2268
|
+
});
|
|
2269
|
+
};
|
|
2173
2270
|
this.startPolling = () => {
|
|
2174
2271
|
this.workers.forEach((worker) => {
|
|
2175
2272
|
this.tasks[worker.taskDefName] = [];
|
|
2176
|
-
const options =
|
|
2177
|
-
concurrency: worker.concurrency ?? this.taskManageOptions.concurrency,
|
|
2178
|
-
domain: worker.domain ?? this.taskManageOptions.domain
|
|
2179
|
-
});
|
|
2273
|
+
const options = this.workerManagerWorkerOptions(worker);
|
|
2180
2274
|
this.logger.debug(`Starting taskDefName=${worker.taskDefName} concurrency=${options.concurrency} domain=${options.domain}`);
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
this.tasks[worker.taskDefName].push(runner);
|
|
2191
|
-
}
|
|
2275
|
+
const runner = new TaskRunner({
|
|
2276
|
+
worker,
|
|
2277
|
+
options,
|
|
2278
|
+
taskResource: this.client.taskResource,
|
|
2279
|
+
logger: this.logger,
|
|
2280
|
+
onError: this.errorHandler
|
|
2281
|
+
});
|
|
2282
|
+
runner.startPolling();
|
|
2283
|
+
this.tasks[worker.taskDefName].push(runner);
|
|
2192
2284
|
});
|
|
2193
2285
|
};
|
|
2194
2286
|
this.stopPolling = () => {
|