47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import Flow from '../models/flow';
|
|
import globalVariable from '../helpers/global-variable';
|
|
import EarlyExitError from '../errors/early-exit';
|
|
import HttpError from '../errors/http-error';
|
|
|
|
type ProcessFlowOptions = {
|
|
flowId: string;
|
|
testRun?: boolean;
|
|
};
|
|
|
|
export const processFlow = async (options: ProcessFlowOptions) => {
|
|
const flow = await Flow.query().findById(options.flowId).throwIfNotFound();
|
|
|
|
const triggerStep = await flow.getTriggerStep();
|
|
const triggerCommand = await triggerStep.getTriggerCommand();
|
|
|
|
const $ = await globalVariable({
|
|
flow,
|
|
connection: await triggerStep.$relatedQuery('connection'),
|
|
app: await triggerStep.getApp(),
|
|
step: triggerStep,
|
|
testRun: options.testRun,
|
|
});
|
|
|
|
try {
|
|
await triggerCommand.run($);
|
|
} catch (error) {
|
|
if (error instanceof EarlyExitError === false) {
|
|
if (error instanceof HttpError) {
|
|
$.triggerOutput.error = error.error;
|
|
} else {
|
|
try {
|
|
$.triggerOutput.error = JSON.parse(error.message);
|
|
} catch {
|
|
$.triggerOutput.error = { error: error.message };
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (triggerCommand?.sort) {
|
|
$.triggerOutput.data.sort(triggerCommand.sort);
|
|
}
|
|
|
|
return $.triggerOutput;
|
|
};
|