Files
automatisch/packages/backend/src/services/flow.ts
2022-10-28 13:36:28 +02:00

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;
};