diff --git a/packages/backend/src/apps/discord/info.json b/packages/backend/src/apps/discord/info.json index 94292370..1c450749 100644 --- a/packages/backend/src/apps/discord/info.json +++ b/packages/backend/src/apps/discord/info.json @@ -53,7 +53,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -100,7 +100,7 @@ "value": "{createConnection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -145,7 +145,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -192,7 +192,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/firebase/info.json b/packages/backend/src/apps/firebase/info.json index 4e1775ab..f39e30f8 100644 --- a/packages/backend/src/apps/firebase/info.json +++ b/packages/backend/src/apps/firebase/info.json @@ -53,7 +53,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -100,7 +100,7 @@ "value": "{createConnection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -145,7 +145,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -192,7 +192,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/flickr/info.json b/packages/backend/src/apps/flickr/info.json index 0ab9dc7f..5d44e6d1 100644 --- a/packages/backend/src/apps/flickr/info.json +++ b/packages/backend/src/apps/flickr/info.json @@ -53,7 +53,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -100,7 +100,7 @@ "value": "{createConnection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -145,7 +145,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -192,7 +192,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/github/info.json b/packages/backend/src/apps/github/info.json index d5d6af57..a13aa157 100644 --- a/packages/backend/src/apps/github/info.json +++ b/packages/backend/src/apps/github/info.json @@ -53,7 +53,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -100,7 +100,7 @@ "value": "{createConnection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -145,7 +145,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -192,7 +192,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/postgresql/info.json b/packages/backend/src/apps/postgresql/info.json index fb8fa633..e0bf0f16 100644 --- a/packages/backend/src/apps/postgresql/info.json +++ b/packages/backend/src/apps/postgresql/info.json @@ -89,7 +89,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -154,7 +154,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/smtp/info.json b/packages/backend/src/apps/smtp/info.json index fc1ea420..1a6c0d0e 100644 --- a/packages/backend/src/apps/smtp/info.json +++ b/packages/backend/src/apps/smtp/info.json @@ -89,7 +89,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -154,7 +154,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/twilio/info.json b/packages/backend/src/apps/twilio/info.json index 3de5c3ea..e9e5d9ff 100644 --- a/packages/backend/src/apps/twilio/info.json +++ b/packages/backend/src/apps/twilio/info.json @@ -41,7 +41,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -90,7 +90,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/twitch/info.json b/packages/backend/src/apps/twitch/info.json index 23059540..696b27e7 100644 --- a/packages/backend/src/apps/twitch/info.json +++ b/packages/backend/src/apps/twitch/info.json @@ -53,7 +53,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -100,7 +100,7 @@ "value": "{createConnection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -145,7 +145,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -192,7 +192,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/twitter/info.json b/packages/backend/src/apps/twitter/info.json index a7d0eacd..6da528a3 100644 --- a/packages/backend/src/apps/twitter/info.json +++ b/packages/backend/src/apps/twitter/info.json @@ -53,7 +53,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -100,7 +100,7 @@ "value": "{createConnection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -145,7 +145,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -192,7 +192,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/apps/typeform/info.json b/packages/backend/src/apps/typeform/info.json index 11cdf13b..da008064 100644 --- a/packages/backend/src/apps/typeform/info.json +++ b/packages/backend/src/apps/typeform/info.json @@ -53,7 +53,7 @@ "value": "{key}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -100,7 +100,7 @@ "value": "{createConnection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -145,7 +145,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { @@ -192,7 +192,7 @@ "value": "{connection.id}" }, { - "name": "data", + "name": "formattedData", "value": null, "properties": [ { diff --git a/packages/backend/src/graphql/mutations/execute-flow.ts b/packages/backend/src/graphql/mutations/execute-flow.ts index de64ccea..b5d11123 100644 --- a/packages/backend/src/graphql/mutations/execute-flow.ts +++ b/packages/backend/src/graphql/mutations/execute-flow.ts @@ -5,7 +5,6 @@ import Processor from '../../services/processor'; type Params = { stepId: string; - data: Record; }; const executeFlowResolver = async ( params: Params, diff --git a/packages/backend/src/graphql/mutations/update-connection.ts b/packages/backend/src/graphql/mutations/update-connection.ts index d5f34c53..a2e769b5 100644 --- a/packages/backend/src/graphql/mutations/update-connection.ts +++ b/packages/backend/src/graphql/mutations/update-connection.ts @@ -34,7 +34,7 @@ const updateConnection = { type: connectionType, args: { id: { type: GraphQLNonNull(GraphQLString) }, - data: { type: GraphQLNonNull(GraphQLJSONObject) }, + formattedData: { type: GraphQLNonNull(GraphQLJSONObject) }, }, resolve: (_: any, params: Params, req: RequestWithCurrentUser) => updateConnectionResolver(params, req), diff --git a/packages/backend/src/models/connection.ts b/packages/backend/src/models/connection.ts index a0a173ae..28ee9f43 100644 --- a/packages/backend/src/models/connection.ts +++ b/packages/backend/src/models/connection.ts @@ -19,7 +19,7 @@ class Connection extends Base { static jsonSchema = { type: 'object', - required: ['key', 'data'], + required: ['key'], properties: { id: { type: 'string', format: 'uuid' }, @@ -44,14 +44,18 @@ class Connection extends Base { encryptData(): void { if (!this.eligibleForEncryption()) return; + this.data = AES.encrypt( JSON.stringify(this.formattedData), appConfig.encryptionKey ).toString(); + + delete this['formattedData']; } decryptData(): void { - if (!this.eligibleForEncryption()) return; + if (!this.eligibleForDecryption()) return; + this.formattedData = JSON.parse( AES.decrypt(this.data, appConfig.encryptionKey).toString(enc.Utf8) ); @@ -61,6 +65,10 @@ class Connection extends Base { return this.formattedData ? true : false; } + eligibleForDecryption(): boolean { + return this.data ? true : false; + } + // TODO: Make another abstraction like beforeSave instead of using // beforeInsert and beforeUpdate separately for the same operation. async $beforeInsert(queryContext: QueryContext): Promise { diff --git a/packages/backend/src/services/processor.ts b/packages/backend/src/services/processor.ts index f203ef88..cc9dece4 100644 --- a/packages/backend/src/services/processor.ts +++ b/packages/backend/src/services/processor.ts @@ -41,12 +41,19 @@ class Processor { key, type, parameters: rawParameters = {}, - id + id, } = step; const isTrigger = type === 'trigger'; const AppClass = (await import(`../apps/${appKey}`)).default; - const computedParameters = Processor.computeParameters(rawParameters, priorExecutionSteps); - const appInstance = new AppClass(appData, connection.data, computedParameters); + const computedParameters = Processor.computeParameters( + rawParameters, + priorExecutionSteps + ); + const appInstance = new AppClass( + appData, + connection.formattedData, + computedParameters + ); const commands = isTrigger ? appInstance.triggers : appInstance.actions; const command = commands[key]; fetchedData = await command.run(); @@ -70,30 +77,35 @@ class Processor { return fetchedData; } - static computeParameters(parameters: Step["parameters"], executionSteps: ExecutionSteps): Step["parameters"] { + static computeParameters( + parameters: Step['parameters'], + executionSteps: ExecutionSteps + ): Step['parameters'] { const entries = Object.entries(parameters); return entries.reduce((result, [key, value]: [string, string]) => { const parts = value.split(Processor.variableRegExp); - const computedValue = parts.map((part: string) => { - const isVariable = part.match(Processor.variableRegExp); - if (isVariable) { - const stepIdAndKeyPath = part.replace(/{{step.|}}/g, '') as string; - const [stepId, ...keyPaths] = stepIdAndKeyPath.split('.'); - const keyPath = keyPaths.join('.'); - const executionStep = executionSteps[stepId.toString() as string]; - const data = executionStep?.dataOut; - const dataValue = get(data, keyPath); - return dataValue; - } + const computedValue = parts + .map((part: string) => { + const isVariable = part.match(Processor.variableRegExp); + if (isVariable) { + const stepIdAndKeyPath = part.replace(/{{step.|}}/g, '') as string; + const [stepId, ...keyPaths] = stepIdAndKeyPath.split('.'); + const keyPath = keyPaths.join('.'); + const executionStep = executionSteps[stepId.toString() as string]; + const data = executionStep?.dataOut; + const dataValue = get(data, keyPath); + return dataValue; + } - return part; - }).join(''); + return part; + }) + .join(''); return { ...result, [key]: computedValue, - } + }; }, {}); } } diff --git a/packages/web/src/graphql/mutations/create-connection.ts b/packages/web/src/graphql/mutations/create-connection.ts index 38fbd6e8..ade3f3e6 100644 --- a/packages/web/src/graphql/mutations/create-connection.ts +++ b/packages/web/src/graphql/mutations/create-connection.ts @@ -1,8 +1,11 @@ import { gql } from '@apollo/client'; export const CREATE_CONNECTION = gql` - mutation CreateConnection($key: AvailableAppsEnumType!, $data: JSONObject!) { - createConnection(key: $key, formattedData: $data) { + mutation CreateConnection( + $key: AvailableAppsEnumType! + $formattedData: JSONObject! + ) { + createConnection(key: $key, formattedData: $formattedData) { id key verified diff --git a/packages/web/src/graphql/mutations/update-connection.ts b/packages/web/src/graphql/mutations/update-connection.ts index 8f323d61..46efb39b 100644 --- a/packages/web/src/graphql/mutations/update-connection.ts +++ b/packages/web/src/graphql/mutations/update-connection.ts @@ -1,8 +1,8 @@ import { gql } from '@apollo/client'; export const UPDATE_CONNECTION = gql` - mutation UpdateConnection($id: String!, $data: JSONObject!) { - updateConnection(id: $id, data: $data) { + mutation UpdateConnection($id: String!, $formattedData: JSONObject!) { + updateConnection(id: $id, formattedData: $formattedData) { id key verified