diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json index ce0d01074685b..a42987864c391 100644 --- a/packages/editor-ui/src/plugins/i18n/locales/en.json +++ b/packages/editor-ui/src/plugins/i18n/locales/en.json @@ -1951,6 +1951,7 @@ "workflowPreview.showError.previewError.title": "Preview error", "workflowRun.noActiveConnectionToTheServer": "Lost connection to the server", "workflowRun.showError.title": "Problem running workflow", + "workflowRun.showError.payloadTooLarge": "Please execute the whole workflow, rather than just the node. (Existing execution data is too large.)", "workflowRun.showMessage.message": "Please fix them before executing", "workflowRun.showMessage.title": "Workflow has issues", "workflowSettings.callerIds": "IDs of workflows that can call this one", diff --git a/packages/editor-ui/src/stores/workflows.store.ts b/packages/editor-ui/src/stores/workflows.store.ts index 074c14916bf1a..a61e311516193 100644 --- a/packages/editor-ui/src/stores/workflows.store.ts +++ b/packages/editor-ui/src/stores/workflows.store.ts @@ -82,6 +82,8 @@ import { useNodeTypesStore } from '@/stores/nodeTypes.store'; import { useUsersStore } from '@/stores/users.store'; import { useSettingsStore } from '@/stores/settings.store'; import { getCredentialOnlyNodeTypeName } from '@/utils/credentialOnlyNodes'; +import { ResponseError } from '@/utils/apiUtils'; +import { i18n } from '@/plugins/i18n'; const defaults: Omit & { settings: NonNullable } = { name: '', @@ -1338,12 +1340,22 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, { async runWorkflow(startRunData: IStartRunData): Promise { const rootStore = useRootStore(); - return await makeRestApiRequest( - rootStore.getRestApiContext, - 'POST', - '/workflows/run', - startRunData as unknown as IDataObject, - ); + try { + return await makeRestApiRequest( + rootStore.getRestApiContext, + 'POST', + '/workflows/run', + startRunData as unknown as IDataObject, + ); + } catch (error) { + if (error.response?.status === 413) { + throw new ResponseError(i18n.baseText('workflowRun.showError.payloadTooLarge'), { + errorCode: 413, + httpStatusCode: 413, + }); + } + throw error; + } }, async removeTestWebhook(workflowId: string): Promise { diff --git a/packages/editor-ui/src/utils/apiUtils.ts b/packages/editor-ui/src/utils/apiUtils.ts index 4c935a63f1612..cc6b73c2b948f 100644 --- a/packages/editor-ui/src/utils/apiUtils.ts +++ b/packages/editor-ui/src/utils/apiUtils.ts @@ -6,7 +6,7 @@ import { parse } from 'flatted'; export const NO_NETWORK_ERROR_CODE = 999; -class ResponseError extends Error { +export class ResponseError extends Error { // The HTTP status code of response httpStatusCode?: number;