diff --git a/packages/backend/src/apps/slack/client/endpoints/post-message-to-channel.ts b/packages/backend/src/apps/slack/client/endpoints/post-message-to-channel.ts index a714c209..c8f54d7e 100644 --- a/packages/backend/src/apps/slack/client/endpoints/post-message-to-channel.ts +++ b/packages/backend/src/apps/slack/client/endpoints/post-message-to-channel.ts @@ -1,4 +1,5 @@ import SlackClient from '../index'; +import { IJSONObject } from '@automatisch/types'; export default class PostMessageToChannel { client: SlackClient; @@ -8,6 +9,14 @@ export default class PostMessageToChannel { } async run(channelId: string, text: string) { + const message: { + data: IJSONObject | null; + error: IJSONObject | null; + } = { + data: null, + error: null, + }; + const headers = { Authorization: `Bearer ${this.client.connection.formattedData.accessToken}`, }; @@ -23,12 +32,13 @@ export default class PostMessageToChannel { { headers } ); - if (response.data.ok === 'false') { - throw new Error( - `Error occured while posting a message to channel: ${response.data.error}` - ); + message.error = response?.integrationError; + message.data = response?.data?.message; + + if (response.data.ok === false) { + message.error = response.data; } - return response.data.message; + return message; } } diff --git a/packages/backend/src/models/execution-step.ts b/packages/backend/src/models/execution-step.ts index 88f971dc..2f4c45ee 100644 --- a/packages/backend/src/models/execution-step.ts +++ b/packages/backend/src/models/execution-step.ts @@ -24,7 +24,7 @@ class ExecutionStep extends Base { executionId: { type: 'string', format: 'uuid' }, stepId: { type: 'string' }, dataIn: { type: 'object' }, - dataOut: { type: 'object' }, + dataOut: { type: ['object', 'null'] }, status: { type: 'string', enum: ['success', 'failure'] }, errorDetails: { type: ['object', 'null'] }, }, diff --git a/packages/backend/src/services/processor.ts b/packages/backend/src/services/processor.ts index b54ec6f7..72556a91 100644 --- a/packages/backend/src/services/processor.ts +++ b/packages/backend/src/services/processor.ts @@ -77,7 +77,14 @@ class Processor { let previousExecutionStep: ExecutionStep; const priorExecutionSteps: ExecutionSteps = {}; - let fetchedActionData = {}; + + let fetchedActionData: { + data: IJSONObject | null; + error: IJSONObject | null; + } = { + data: null, + error: null, + }; for await (const step of steps) { if (!step.appKey) continue; @@ -101,13 +108,25 @@ class Processor { fetchedActionData = await command.run(); } + if (!isTrigger && fetchedActionData.error) { + await execution.$relatedQuery('executionSteps').insertAndFetch({ + stepId: id, + status: 'failure', + dataIn: computedParameters, + dataOut: null, + errorDetails: fetchedActionData.error, + }); + + break; + } + previousExecutionStep = await execution .$relatedQuery('executionSteps') .insertAndFetch({ stepId: id, status: 'success', dataIn: isTrigger ? rawParameters : computedParameters, - dataOut: isTrigger ? data : fetchedActionData, + dataOut: isTrigger ? data : fetchedActionData.data, }); priorExecutionSteps[id] = previousExecutionStep;