|
import cloneDeep from 'lodash/cloneDeep.js'; |
|
|
|
const connectionIdArgument = { |
|
name: 'id', |
|
value: '{connection.id}', |
|
}; |
|
|
|
const resetConnectionStep = { |
|
type: 'mutation', |
|
name: 'resetConnection', |
|
arguments: [connectionIdArgument], |
|
}; |
|
|
|
function replaceCreateConnection(string) { |
|
return string.replace('{createConnection.id}', '{connection.id}'); |
|
} |
|
|
|
function removeAppKeyArgument(args) { |
|
return args.filter((argument) => argument.name !== 'key'); |
|
} |
|
|
|
function addConnectionId(step) { |
|
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) { |
|
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) { |
|
const hasReconnectionSteps = app.auth.reconnectionSteps; |
|
|
|
if (hasReconnectionSteps) return app; |
|
|
|
if (app.auth.authenticationSteps) { |
|
const updatedSteps = replaceCreateConnectionsWithUpdate( |
|
app.auth.authenticationSteps |
|
); |
|
|
|
app.auth.reconnectionSteps = [resetConnectionStep, ...updatedSteps]; |
|
} |
|
|
|
if (app.auth.sharedAuthenticationSteps) { |
|
const updatedStepsWithEmbeddedDefaults = replaceCreateConnectionsWithUpdate( |
|
app.auth.sharedAuthenticationSteps |
|
); |
|
|
|
app.auth.sharedReconnectionSteps = [ |
|
resetConnectionStep, |
|
...updatedStepsWithEmbeddedDefaults, |
|
]; |
|
} |
|
|
|
return app; |
|
} |
|
|
|
export default addReconnectionSteps; |
|
|