refactor: compute reconnectionSteps out of auth steps
This commit is contained in:
81
packages/backend/src/helpers/add-reconnection-steps.ts
Normal file
81
packages/backend/src/helpers/add-reconnection-steps.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import { IApp, IAuthenticationStep, IAuthenticationStepField } from '@automatisch/types';
|
||||
import cloneDeep from 'lodash/cloneDeep';
|
||||
|
||||
const connectionIdArgument = {
|
||||
name: 'id',
|
||||
value: '{connection.id}',
|
||||
};
|
||||
|
||||
const resetConnectionStep = {
|
||||
type: 'mutation' as const,
|
||||
name: 'resetConnection',
|
||||
arguments: [
|
||||
connectionIdArgument,
|
||||
],
|
||||
};
|
||||
|
||||
function replaceCreateConnection(string: string) {
|
||||
return string.replace(
|
||||
'{createConnection.id}',
|
||||
'{connection.id}'
|
||||
);
|
||||
}
|
||||
|
||||
function removeAppKeyArgument(args: IAuthenticationStepField[]) {
|
||||
return args.filter((argument) => argument.name !== 'key');
|
||||
}
|
||||
|
||||
function addConnectionId(step: IAuthenticationStep) {
|
||||
step.arguments = step.arguments.map((argument) => {
|
||||
if (typeof argument.value === 'string') {
|
||||
argument.value = replaceCreateConnection(argument.value);
|
||||
}
|
||||
|
||||
if (argument.properties) {
|
||||
argument.properties = argument.properties.map((property) => {
|
||||
return {
|
||||
name: property.name,
|
||||
value: replaceCreateConnection(property.value),
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return argument;
|
||||
});
|
||||
|
||||
return step;
|
||||
}
|
||||
|
||||
function replaceCreateConnectionsWithUpdate(steps: IAuthenticationStep[]) {
|
||||
const updatedSteps = cloneDeep(steps);
|
||||
return updatedSteps.map((step) => {
|
||||
const updatedStep = addConnectionId(step);
|
||||
|
||||
if (step.name === 'createConnection') {
|
||||
updatedStep.name = 'updateConnection';
|
||||
updatedStep.arguments = removeAppKeyArgument(updatedStep.arguments);
|
||||
updatedStep.arguments.unshift(connectionIdArgument);
|
||||
|
||||
return updatedStep;
|
||||
}
|
||||
|
||||
return step;
|
||||
})
|
||||
}
|
||||
|
||||
function addReconnectionSteps(app: IApp): IApp {
|
||||
const hasReconnectionSteps = app.auth.reconnectionSteps;
|
||||
|
||||
if (hasReconnectionSteps) return app;
|
||||
|
||||
const updatedSteps = replaceCreateConnectionsWithUpdate(app.auth.authenticationSteps);
|
||||
|
||||
app.auth.reconnectionSteps = [
|
||||
resetConnectionStep,
|
||||
...updatedSteps,
|
||||
]
|
||||
|
||||
return app;
|
||||
}
|
||||
|
||||
export default addReconnectionSteps;
|
@@ -6,6 +6,7 @@ import {
|
||||
ITrigger,
|
||||
} from '@automatisch/types';
|
||||
import { omit, cloneDeep } from 'lodash';
|
||||
import addReconnectionSteps from './add-reconnection-steps';
|
||||
|
||||
async function getDefaultExport(path: string) {
|
||||
return (await import(path)).default;
|
||||
@@ -16,7 +17,11 @@ function stripFunctions<C>(data: C): C {
|
||||
}
|
||||
|
||||
const getApp = async (appKey: string, stripFuncs = true) => {
|
||||
const appData: IApp = cloneDeep(await getDefaultExport(`../apps/${appKey}`));
|
||||
let appData: IApp = cloneDeep(await getDefaultExport(`../apps/${appKey}`));
|
||||
|
||||
if (appData.auth) {
|
||||
appData = addReconnectionSteps(appData);
|
||||
}
|
||||
|
||||
appData.triggers = appData?.triggers?.map((trigger: IRawTrigger) => {
|
||||
return addStaticSubsteps('trigger', appData, trigger);
|
||||
|
Reference in New Issue
Block a user