diff --git a/packages/backend/src/apps/scheduler/triggers/every-day/index.ts b/packages/backend/src/apps/scheduler/triggers/every-day/index.ts index b765cb75..b92de092 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-day/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-day/index.ts @@ -24,13 +24,13 @@ export default { options: [ { label: 'Yes', - value: true + value: true, }, { label: 'No', - value: false - } - ] + value: false, + }, + ], }, { label: 'Time of day', @@ -42,111 +42,111 @@ export default { options: [ { label: '00:00', - value: 0 + value: 0, }, { label: '01:00', - value: 1 + value: 1, }, { label: '02:00', - value: 2 + value: 2, }, { label: '03:00', - value: 3 + value: 3, }, { label: '04:00', - value: 4 + value: 4, }, { label: '05:00', - value: 5 + value: 5, }, { label: '06:00', - value: 6 + value: 6, }, { label: '07:00', - value: 7 + value: 7, }, { label: '08:00', - value: 8 + value: 8, }, { label: '09:00', - value: 9 + value: 9, }, { label: '10:00', - value: 10 + value: 10, }, { label: '11:00', - value: 11 + value: 11, }, { label: '12:00', - value: 12 + value: 12, }, { label: '13:00', - value: 13 + value: 13, }, { label: '14:00', - value: 14 + value: 14, }, { label: '15:00', - value: 15 + value: 15, }, { label: '16:00', - value: 16 + value: 16, }, { label: '17:00', - value: 17 + value: 17, }, { label: '18:00', - value: 18 + value: 18, }, { label: '19:00', - value: 19 + value: 19, }, { label: '20:00', - value: 20 + value: 20, }, { label: '21:00', - value: 21 + value: 21, }, { label: '22:00', - value: 22 + value: 22, }, { label: '23:00', - value: 23 - } - ] - } - ] + value: 23, + }, + ], + }, + ], }, { key: 'testStep', - name: 'Test trigger' - } + name: 'Test trigger', + }, ], - getInterval(parameters: IGlobalVariable["db"]["step"]["parameters"]) { + getInterval(parameters: IGlobalVariable['step']['parameters']) { if (parameters.triggersOnWeekend as boolean) { return cronTimes.everyDayAt(parameters.hour as number); } @@ -156,14 +156,20 @@ export default { async run($: IGlobalVariable, startDateTime: Date) { const dateTime = DateTime.fromJSDate(startDateTime); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue; + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + dateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, async testRun($: IGlobalVariable) { - const nextCronDateTime = getNextCronDateTime(this.getInterval($.db.step.parameters)); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue; + const nextCronDateTime = getNextCronDateTime( + this.getInterval($.step.parameters) + ); + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + nextCronDateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, diff --git a/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts b/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts index 063e81d1..b0c11cd8 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts @@ -24,25 +24,25 @@ export default { options: [ { label: 'Yes', - value: true + value: true, }, { label: 'No', - value: false - } - ] - } - ] + value: false, + }, + ], + }, + ], }, { key: 'testStep', - name: 'Test trigger' - } + name: 'Test trigger', + }, ], - getInterval(parameters: IGlobalVariable["db"]["step"]["parameters"]) { + getInterval(parameters: IGlobalVariable['step']['parameters']) { if (parameters.triggersOnWeekend) { - return cronTimes.everyHour + return cronTimes.everyHour; } return cronTimes.everyHourExcludingWeekends; @@ -50,14 +50,20 @@ export default { async run($: IGlobalVariable, startDateTime: Date) { const dateTime = DateTime.fromJSDate(startDateTime); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue; + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + dateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, async testRun($: IGlobalVariable) { - const nextCronDateTime = getNextCronDateTime(this.getInterval($.db.step.parameters)); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue; + const nextCronDateTime = getNextCronDateTime( + this.getInterval($.step.parameters) + ); + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + nextCronDateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, diff --git a/packages/backend/src/apps/scheduler/triggers/every-month/index.ts b/packages/backend/src/apps/scheduler/triggers/every-month/index.ts index d09a3935..5850503b 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-month/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-month/index.ts @@ -23,129 +23,129 @@ export default { options: [ { label: 1, - value: 1 + value: 1, }, { label: 2, - value: 2 + value: 2, }, { label: 3, - value: 3 + value: 3, }, { label: 4, - value: 4 + value: 4, }, { label: 5, - value: 5 + value: 5, }, { label: 6, - value: 6 + value: 6, }, { label: 7, - value: 7 + value: 7, }, { label: 8, - value: 8 + value: 8, }, { label: 9, - value: 9 + value: 9, }, { label: 10, - value: 10 + value: 10, }, { label: 11, - value: 11 + value: 11, }, { label: 12, - value: 12 + value: 12, }, { label: 13, - value: 13 + value: 13, }, { label: 14, - value: 14 + value: 14, }, { label: 15, - value: 15 + value: 15, }, { label: 16, - value: 16 + value: 16, }, { label: 17, - value: 17 + value: 17, }, { label: 18, - value: 18 + value: 18, }, { label: 19, - value: 19 + value: 19, }, { label: 20, - value: 20 + value: 20, }, { label: 21, - value: 21 + value: 21, }, { label: 22, - value: 22 + value: 22, }, { label: 23, - value: 23 + value: 23, }, { label: 24, - value: 24 + value: 24, }, { label: 25, - value: 25 + value: 25, }, { label: 26, - value: 26 + value: 26, }, { label: 27, - value: 27 + value: 27, }, { label: 28, - value: 28 + value: 28, }, { label: 29, - value: 29 + value: 29, }, { label: 30, - value: 30 + value: 30, }, { label: 31, - value: 31 - } - ] + value: 31, + }, + ], }, { label: 'Time of day', @@ -157,126 +157,135 @@ export default { options: [ { label: '00:00', - value: 0 + value: 0, }, { label: '01:00', - value: 1 + value: 1, }, { label: '02:00', - value: 2 + value: 2, }, { label: '03:00', - value: 3 + value: 3, }, { label: '04:00', - value: 4 + value: 4, }, { label: '05:00', - value: 5 + value: 5, }, { label: '06:00', - value: 6 + value: 6, }, { label: '07:00', - value: 7 + value: 7, }, { label: '08:00', - value: 8 + value: 8, }, { label: '09:00', - value: 9 + value: 9, }, { label: '10:00', - value: 10 + value: 10, }, { label: '11:00', - value: 11 + value: 11, }, { label: '12:00', - value: 12 + value: 12, }, { label: '13:00', - value: 13 + value: 13, }, { label: '14:00', - value: 14 + value: 14, }, { label: '15:00', - value: 15 + value: 15, }, { label: '16:00', - value: 16 + value: 16, }, { label: '17:00', - value: 17 + value: 17, }, { label: '18:00', - value: 18 + value: 18, }, { label: '19:00', - value: 19 + value: 19, }, { label: '20:00', - value: 20 + value: 20, }, { label: '21:00', - value: 21 + value: 21, }, { label: '22:00', - value: 22 + value: 22, }, { label: '23:00', - value: 23 - } - ] - } - ] + value: 23, + }, + ], + }, + ], }, { key: 'testStep', - name: 'Test trigger' - } + name: 'Test trigger', + }, ], - getInterval(parameters: IGlobalVariable["db"]["step"]["parameters"]) { - const interval = cronTimes.everyMonthOnAndAt(parameters.day as number, parameters.hour as number); + getInterval(parameters: IGlobalVariable['step']['parameters']) { + const interval = cronTimes.everyMonthOnAndAt( + parameters.day as number, + parameters.hour as number + ); return interval; }, async run($: IGlobalVariable, startDateTime: Date) { const dateTime = DateTime.fromJSDate(startDateTime); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue; + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + dateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, async testRun($: IGlobalVariable) { - const nextCronDateTime = getNextCronDateTime(this.getInterval($.db.step.parameters)); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue; + const nextCronDateTime = getNextCronDateTime( + this.getInterval($.step.parameters) + ); + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + nextCronDateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, diff --git a/packages/backend/src/apps/scheduler/triggers/every-week/index.ts b/packages/backend/src/apps/scheduler/triggers/every-week/index.ts index 0fa3b4ab..878b005b 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-week/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-week/index.ts @@ -23,33 +23,33 @@ export default { options: [ { label: 'Monday', - value: 1 + value: 1, }, { label: 'Tuesday', - value: 2 + value: 2, }, { label: 'Wednesday', - value: 3 + value: 3, }, { label: 'Thursday', - value: 4 + value: 4, }, { label: 'Friday', - value: 5 + value: 5, }, { label: 'Saturday', - value: 6 + value: 6, }, { label: 'Sunday', - value: 0 - } - ] + value: 0, + }, + ], }, { label: 'Time of day', @@ -61,126 +61,135 @@ export default { options: [ { label: '00:00', - value: 0 + value: 0, }, { label: '01:00', - value: 1 + value: 1, }, { label: '02:00', - value: 2 + value: 2, }, { label: '03:00', - value: 3 + value: 3, }, { label: '04:00', - value: 4 + value: 4, }, { label: '05:00', - value: 5 + value: 5, }, { label: '06:00', - value: 6 + value: 6, }, { label: '07:00', - value: 7 + value: 7, }, { label: '08:00', - value: 8 + value: 8, }, { label: '09:00', - value: 9 + value: 9, }, { label: '10:00', - value: 10 + value: 10, }, { label: '11:00', - value: 11 + value: 11, }, { label: '12:00', - value: 12 + value: 12, }, { label: '13:00', - value: 13 + value: 13, }, { label: '14:00', - value: 14 + value: 14, }, { label: '15:00', - value: 15 + value: 15, }, { label: '16:00', - value: 16 + value: 16, }, { label: '17:00', - value: 17 + value: 17, }, { label: '18:00', - value: 18 + value: 18, }, { label: '19:00', - value: 19 + value: 19, }, { label: '20:00', - value: 20 + value: 20, }, { label: '21:00', - value: 21 + value: 21, }, { label: '22:00', - value: 22 + value: 22, }, { label: '23:00', - value: 23 - } - ] - } - ] + value: 23, + }, + ], + }, + ], }, { key: 'testStep', - name: 'Test trigger' - } + name: 'Test trigger', + }, ], - getInterval(parameters: IGlobalVariable["db"]["step"]["parameters"]) { - const interval = cronTimes.everyWeekOnAndAt(parameters.weekday as number, parameters.hour as number); + getInterval(parameters: IGlobalVariable['step']['parameters']) { + const interval = cronTimes.everyWeekOnAndAt( + parameters.weekday as number, + parameters.hour as number + ); return interval; }, async run($: IGlobalVariable, startDateTime: Date) { const dateTime = DateTime.fromJSDate(startDateTime); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(dateTime) as IJSONValue; + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + dateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, async testRun($: IGlobalVariable) { - const nextCronDateTime = getNextCronDateTime(this.getInterval($.db.step.parameters)); - const dateTimeObjectRepresentation = getDateTimeObjectRepresentation(nextCronDateTime) as IJSONValue; + const nextCronDateTime = getNextCronDateTime( + this.getInterval($.step.parameters) + ); + const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( + nextCronDateTime + ) as IJSONValue; return { data: [dateTimeObjectRepresentation] }; }, diff --git a/packages/backend/src/apps/slack/actions/find-message/find-message.ts b/packages/backend/src/apps/slack/actions/find-message/find-message.ts index 57c93041..31206bb6 100644 --- a/packages/backend/src/apps/slack/actions/find-message/find-message.ts +++ b/packages/backend/src/apps/slack/actions/find-message/find-message.ts @@ -1,4 +1,4 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; +import { IGlobalVariable, IActionOutput } from '@automatisch/types'; type FindMessageOptions = { query: string; @@ -8,11 +8,6 @@ type FindMessageOptions = { }; const findMessage = async ($: IGlobalVariable, options: FindMessageOptions) => { - const message: { - data?: IJSONObject; - error?: IJSONObject; - } = {}; - const headers = { Authorization: `Bearer ${$.auth.data.accessToken}`, }; @@ -29,20 +24,14 @@ const findMessage = async ($: IGlobalVariable, options: FindMessageOptions) => { params, }); - if (response.integrationError) { - message.error = response.integrationError; - return message; - } - const data = response.data; - if (!data.ok) { - message.error = data; - return message; - } - - const messages = data.messages.matches; - message.data = messages?.[0]; + const message: IActionOutput = { + data: { + raw: data?.data?.messages.matches[0], + }, + error: response?.integrationError || (!data.ok && data), + }; return message; }; diff --git a/packages/backend/src/apps/slack/actions/find-message/index.ts b/packages/backend/src/apps/slack/actions/find-message/index.ts index c6132e2c..26d7a333 100644 --- a/packages/backend/src/apps/slack/actions/find-message/index.ts +++ b/packages/backend/src/apps/slack/actions/find-message/index.ts @@ -72,7 +72,7 @@ export default { ], async run($: IGlobalVariable) { - const parameters = $.db.step.parameters; + const parameters = $.step.parameters; const query = parameters.query as string; const sortBy = parameters.sortBy as string; const sortDirection = parameters.sortDirection as string; diff --git a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts index d2033c1e..d5806108 100644 --- a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts +++ b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts @@ -49,8 +49,8 @@ export default { ], async run($: IGlobalVariable) { - const channelId = $.db.step.parameters.channel as string; - const text = $.db.step.parameters.message as string; + const channelId = $.step.parameters.channel as string; + const text = $.step.parameters.message as string; const message = await postMessage($, channelId, text); diff --git a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.ts b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.ts index 8a499767..40d9969e 100644 --- a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.ts +++ b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/post-message.ts @@ -1,18 +1,10 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; +import { IGlobalVariable, IActionOutput } from '@automatisch/types'; const postMessage = async ( $: IGlobalVariable, channelId: string, text: string ) => { - const message: { - data: IJSONObject | null | undefined; - error: IJSONObject | null | undefined; - } = { - data: null, - error: null, - }; - const headers = { Authorization: `Bearer ${$.auth.data.accessToken}`, }; @@ -24,8 +16,12 @@ const postMessage = async ( const response = await $.http.post('/chat.postMessage', params, { headers }); - message.error = response?.integrationError; - message.data = response?.data?.message; + const message: IActionOutput = { + data: { + raw: response?.data?.message, + }, + error: response?.integrationError, + }; if (response.data.ok === false) { message.error = response.data; diff --git a/packages/backend/src/apps/twitter/common/get-user-followers.ts b/packages/backend/src/apps/twitter/common/get-user-followers.ts index 0d4e1e64..8f2563fe 100644 --- a/packages/backend/src/apps/twitter/common/get-user-followers.ts +++ b/packages/backend/src/apps/twitter/common/get-user-followers.ts @@ -1,4 +1,8 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; +import { + IGlobalVariable, + IJSONObject, + ITriggerOutput, +} from '@automatisch/types'; import { URLSearchParams } from 'url'; import { omitBy, isEmpty } from 'lodash'; import generateRequest from './generate-request'; @@ -14,12 +18,8 @@ const getUserFollowers = async ( ) => { let response; - const followers: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { + const followers: ITriggerOutput = { data: [], - error: null, }; do { @@ -54,7 +54,10 @@ const getUserFollowers = async ( !options.lastInternalId || Number(tweet.id) > Number(options.lastInternalId) ) { - followers.data.push(tweet); + followers.data.push({ + raw: tweet, + meta: { internalId: tweet.id as string }, + }); } else { return; } diff --git a/packages/backend/src/apps/twitter/common/get-user-tweets.ts b/packages/backend/src/apps/twitter/common/get-user-tweets.ts index 901d22a3..67cfcade 100644 --- a/packages/backend/src/apps/twitter/common/get-user-tweets.ts +++ b/packages/backend/src/apps/twitter/common/get-user-tweets.ts @@ -1,4 +1,8 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; +import { + IGlobalVariable, + IJSONObject, + ITriggerOutput, +} from '@automatisch/types'; import { URLSearchParams } from 'url'; import omitBy from 'lodash/omitBy'; import isEmpty from 'lodash/isEmpty'; @@ -22,19 +26,15 @@ const getUserTweets = async ( const currentUser = await getCurrentUser($); username = currentUser.username as string; } else { - username = $.db.step.parameters.username as string; + username = $.step.parameters.username as string; } const user = await getUserByUsername($, username); let response; - const tweets: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { + const tweets: ITriggerOutput = { data: [], - error: null, }; do { @@ -65,7 +65,10 @@ const getUserTweets = async ( !options.lastInternalId || Number(tweet.id) > Number(options.lastInternalId) ) { - tweets.data.push(tweet); + tweets.data.push({ + raw: tweet, + meta: { internalId: tweet.id as string }, + }); } else { return; } diff --git a/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts index e6cb95a0..591e6a28 100644 --- a/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts @@ -20,7 +20,7 @@ export default { async run($: IGlobalVariable) { return await getUserTweets($, { currentUser: true, - lastInternalId: $.db.flow.lastInternalId, + lastInternalId: $.flow.lastInternalId, }); }, diff --git a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts index c9b4be84..3bc6335d 100644 --- a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts +++ b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts @@ -18,7 +18,7 @@ export default { ], async run($: IGlobalVariable) { - return await myFollowers($, $.db.flow.lastInternalId); + return await myFollowers($, $.flow.lastInternalId); }, async testRun($: IGlobalVariable) { diff --git a/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts index 0f67d908..67f4e5a6 100644 --- a/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts @@ -32,14 +32,14 @@ export default { async run($: IGlobalVariable) { return await searchTweets($, { - searchTerm: $.db.step.parameters.searchTerm as string, - lastInternalId: $.db.flow.lastInternalId, + searchTerm: $.step.parameters.searchTerm as string, + lastInternalId: $.flow.lastInternalId, }); }, async testRun($: IGlobalVariable) { return await searchTweets($, { - searchTerm: $.db.step.parameters.searchTerm as string, + searchTerm: $.step.parameters.searchTerm as string, }); }, }; diff --git a/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.ts b/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.ts index 8e3886c6..a7559bb3 100644 --- a/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.ts +++ b/packages/backend/src/apps/twitter/triggers/search-tweets/search-tweets.ts @@ -1,4 +1,8 @@ -import { IGlobalVariable, IJSONObject } from '@automatisch/types'; +import { + IGlobalVariable, + IJSONObject, + ITriggerOutput, +} from '@automatisch/types'; import qs from 'qs'; import generateRequest from '../../common/generate-request'; import { omitBy, isEmpty } from 'lodash'; @@ -14,12 +18,8 @@ const searchTweets = async ( ) => { let response; - const tweets: { - data: IJSONObject[]; - error: IJSONObject | null; - } = { + const tweets: ITriggerOutput = { data: [], - error: null, }; do { @@ -56,7 +56,14 @@ const searchTweets = async ( !options.lastInternalId || Number(tweet.id) > Number(options.lastInternalId) ) { - tweets.data.push(tweet); + const dataItem = { + raw: tweet, + meta: { + internalId: tweet.id as string, + }, + }; + + tweets.data.push(dataItem); } else { return; } diff --git a/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts index 23517c9e..a116e6fe 100644 --- a/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts @@ -32,15 +32,15 @@ export default { async run($: IGlobalVariable) { return await getUserTweets($, { currentUser: false, - userId: $.db.step.parameters.username as string, - lastInternalId: $.db.flow.lastInternalId, + userId: $.step.parameters.username as string, + lastInternalId: $.flow.lastInternalId, }); }, async testRun($: IGlobalVariable) { return await getUserTweets($, { currentUser: false, - userId: $.db.step.parameters.username as string, + userId: $.step.parameters.username as string, }); }, }; diff --git a/packages/backend/src/graphql/mutations/create-auth-data.ts b/packages/backend/src/graphql/mutations/create-auth-data.ts index 91ff8d60..fd3e020b 100644 --- a/packages/backend/src/graphql/mutations/create-auth-data.ts +++ b/packages/backend/src/graphql/mutations/create-auth-data.ts @@ -29,7 +29,7 @@ const createAuthData = async ( .default; const app = await App.findOneByKey(connection.key); - const $ = await globalVariable(connection, app); + const $ = await globalVariable({ connection, app }); await authInstance.createAuthData($); try { diff --git a/packages/backend/src/graphql/mutations/verify-connection.ts b/packages/backend/src/graphql/mutations/verify-connection.ts index 081752b9..61f119d3 100644 --- a/packages/backend/src/graphql/mutations/verify-connection.ts +++ b/packages/backend/src/graphql/mutations/verify-connection.ts @@ -21,7 +21,7 @@ const verifyConnection = async ( .throwIfNotFound(); const app = await App.findOneByKey(connection.key); - const $ = await globalVariable(connection, app); + const $ = await globalVariable({ connection, app }); await app.auth.verifyCredentials($); connection = await connection.$query().patchAndFetch({ diff --git a/packages/backend/src/graphql/queries/get-data.ts b/packages/backend/src/graphql/queries/get-data.ts index 5b158869..e8ea2acd 100644 --- a/packages/backend/src/graphql/queries/get-data.ts +++ b/packages/backend/src/graphql/queries/get-data.ts @@ -25,7 +25,7 @@ const getData = async (_parent: unknown, params: Params, context: Context) => { if (!connection || !step.appKey) return null; const app = await App.findOneByKey(step.appKey); - const $ = await globalVariable(connection, app, step.flow, step); + const $ = await globalVariable({ connection, app, flow: step.flow, step }); const command = app.data.find((data: IData) => data.key === params.key); diff --git a/packages/backend/src/graphql/queries/test-connection.ts b/packages/backend/src/graphql/queries/test-connection.ts index 5aa90fd1..1fa4d036 100644 --- a/packages/backend/src/graphql/queries/test-connection.ts +++ b/packages/backend/src/graphql/queries/test-connection.ts @@ -20,10 +20,9 @@ const testConnection = async ( .throwIfNotFound(); const app = await App.findOneByKey(connection.key, false); - const $ = await globalVariable(connection, app); + const $ = await globalVariable({ connection, app }); - const isStillVerified = - await app.auth.isStillVerified($); + const isStillVerified = await app.auth.isStillVerified($); connection = await connection.$query().patchAndFetch({ formattedData: connection.formattedData, diff --git a/packages/backend/src/helpers/global-variable.ts b/packages/backend/src/helpers/global-variable.ts index 30a8f6be..7077d914 100644 --- a/packages/backend/src/helpers/global-variable.ts +++ b/packages/backend/src/helpers/global-variable.ts @@ -4,12 +4,18 @@ import Flow from '../models/flow'; import Step from '../models/step'; import { IJSONObject, IApp, IGlobalVariable } from '@automatisch/types'; +type GlobalVariableOptions = { + connection?: Connection; + app: IApp; + flow?: Flow; + step?: Step; +}; + const globalVariable = async ( - connection: Connection, - appData: IApp, - flow?: Flow, - currentStep?: Step + options: GlobalVariableOptions ): Promise => { + const { connection, app, flow, step } = options; + const lastInternalId = await flow?.lastInternalId(); return { @@ -28,15 +34,13 @@ const globalVariable = async ( }, data: connection?.formattedData, }, - app: appData, - http: createHttpClient({ baseURL: appData.baseUrl }), - db: { - flow: { - lastInternalId, - }, - step: { - parameters: currentStep?.parameters || {}, - }, + app: app, + http: createHttpClient({ baseURL: app.baseUrl }), + flow: { + lastInternalId, + }, + step: { + parameters: step?.parameters || {}, }, }; }; diff --git a/packages/backend/src/services/processor.ts b/packages/backend/src/services/processor.ts index 896cbf38..92bf2805 100644 --- a/packages/backend/src/services/processor.ts +++ b/packages/backend/src/services/processor.ts @@ -1,5 +1,5 @@ import get from 'lodash.get'; -import { IJSONObject } from '@automatisch/types'; +import { IActionOutput } from '@automatisch/types'; import App from '../models/app'; import Flow from '../models/flow'; @@ -61,8 +61,8 @@ class Processor { if (initialTriggerData.data.length > 1) { initialTriggerData.data = initialTriggerData.data.sort( - (item: IJSONObject, nextItem: IJSONObject) => { - return (item.id as number) - (nextItem.id as number); + (item, nextItem) => { + return (item.raw.id as number) - (nextItem.raw.id as number); } ); } @@ -73,7 +73,7 @@ class Processor { const execution = await Execution.query().insert({ flowId: this.flow.id, testRun: this.testRun, - internalId: data.id as string, + internalId: data.meta.internalId as string, }); executions.push(execution); @@ -81,12 +81,8 @@ class Processor { let previousExecutionStep: ExecutionStep; const priorExecutionSteps: ExecutionSteps = {}; - let fetchedActionData: { - data: IJSONObject | null; - error: IJSONObject | null; - } = { + let fetchedActionData: IActionOutput = { data: null, - error: null, }; for await (const step of steps) { @@ -105,12 +101,12 @@ class Processor { const clonedStep = Object.assign({}, step); clonedStep.parameters = computedParameters; - const $ = await globalVariable( - step.connection, + const $ = await globalVariable({ + connection: step.connection, app, - this.flow, - clonedStep - ); + flow: this.flow, + step: clonedStep, + }); if (!isTrigger && key) { const command = app.actions.find((action) => action.key === key); @@ -135,7 +131,7 @@ class Processor { stepId: id, status: 'success', dataIn: isTrigger ? rawParameters : computedParameters, - dataOut: isTrigger ? data : fetchedActionData.data, + dataOut: isTrigger ? data.raw : fetchedActionData.data.raw, }); priorExecutionSteps[id] = previousExecutionStep; @@ -176,12 +172,12 @@ class Processor { if (!step.appKey || !step.key) return null; const app = await App.findOneByKey(step.appKey); - const $ = await globalVariable( - step.connection, + const $ = await globalVariable({ + connection: step.connection, app, - this.flow, + flow: this.flow, step, - ) + }); const command = app.triggers.find((trigger) => trigger.key === step.key); diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts index 43898860..8925fa8d 100644 --- a/packages/types/index.d.ts +++ b/packages/types/index.d.ts @@ -172,9 +172,9 @@ export interface IData { } export interface IAuth { - createAuthData($: IGlobalVariable): Promise, - verifyCredentials($: IGlobalVariable): Promise, - isStillVerified($: IGlobalVariable): Promise, + createAuthData($: IGlobalVariable): Promise; + verifyCredentials($: IGlobalVariable): Promise; + isStillVerified($: IGlobalVariable): Promise; fields: IField[]; authenticationSteps: IAuthenticationStep[]; reconnectionSteps: IAuthenticationStep[]; @@ -187,23 +187,46 @@ export interface IService { data?: any; } +export interface ITriggerOutput { + data: ITriggerDataItem[]; + error?: IJSONObject; +} + +export interface ITriggerDataItem { + raw: IJSONObject; + meta: { + internalId: string; + }; +} + export interface ITrigger { name: string; - key: string, + key: string; pollInterval: number; description: string; substeps: ISubstep[]; - getInterval(parameters: IGlobalVariable["db"]["step"]["parameters"]): string; - run($: IGlobalVariable): Promise<{ data: IJSONObject[], error: IJSONObject | null }>; - testRun($: IGlobalVariable, startTime?: Date): Promise<{ data: IJSONObject[], error: IJSONObject | null }>; + getInterval(parameters: IGlobalVariable['step']['parameters']): string; + run($: IGlobalVariable): Promise; + testRun($: IGlobalVariable): Promise; +} + +export interface IActionOutput { + data: IActionDataItem; + error?: IJSONObject; +} + +export interface IActionDataItem { + raw: { + data?: IJSONObject; + }; } export interface IAction { name: string; - key: string, + key: string; description: string; substeps: ISubstep[]; - run($: IGlobalVariable): Promise<{ data: IJSONObject, error: IJSONObject | null }>; + run($: IGlobalVariable): Promise; } export interface IAuthentication { @@ -229,13 +252,11 @@ export type IGlobalVariable = { }; app: IApp; http: IHttpClient; - db: { - flow: { - lastInternalId: string; - }; - step: { - parameters: IJSONObject; - } + flow: { + lastInternalId: string; + }; + step: { + parameters: IJSONObject; }; };