appsmithorg/appsmith · error · PluginActionExecutionError

${extractExecutionErrorMessage(e)}

Error message

${extractExecutionErrorMessage(e)}

What it means

Terminal fallback thrown by the file-upload branch of executePluginActionSaga. After the saga has ruled out a client-side validation error and a user cancellation, any remaining exception is wrapped in a PluginActionExecutionError whose message comes from extractExecutionErrorMessage(). That helper normalises Axios transport errors (timeout, network error), server envelopes from validateResponse, and falls back to 'Response not valid', so the original raw upstream body or credentials are never surfaced. The second constructor arg is false, marking this as a genuine failure rather than a user cancel.

Source

Thrown at app/client/src/sagas/ActionExecution/PluginActionSaga.ts:1571

      throw new UserCancelledActionExecutionError();
    }

    // In case there is no response from server and files are being uploaded
    // we report it as INVALID_RESPONSE. The server didn't send any code or the
    // request was cancelled due to timeout
    if (filePickerInstrumentation.numberOfFiles > 0) {
      triggerFileUploadInstrumentation(
        filePickerInstrumentation,
        "INVALID_RESPONSE",
        "444",
        pluginAction.name,
        pluginAction.pluginType,
        "NA",
      );
    }

    throw new PluginActionExecutionError(
      extractExecutionErrorMessage(e),
      false,
    );
  }
}

// Function to send the file upload event to segment
function triggerFileUploadInstrumentation(
  // TODO: Fix this the next time the file is edited
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  filePickerInfo: Record<string, any>,
  status: string,
  statusCode: string,
  pluginName: string,
  pluginType: string,
  timeTaken: string,
) {
  const { fileSizes, fileTypes, numberOfFiles, totalSize } = filePickerInfo;

View on GitHub (pinned to 8cd9021c24)

Solutions

  1. If the toast reads 'Action execution timed out', increase the action's timeout-in-settings or split the upload into smaller chunks.
  2. Open the browser Network panel and confirm the request reaches the Appsmith server (no DNS/CORS/502); check the response status and body the server returned.
  3. Verify the datasource configuration (base URL, auth, headers) still matches the upstream API contract.
  4. If a proxy/gateway sits in front of the server, raise its max body size and read timeout (e.g. nginx client_max_body_size, proxy_read_timeout).
  5. Check server logs for the request id to see whether the plugin itself rejected the upload.

Example fix

// In the API action settings, raise the timeout
// before: action timeout = 10000ms (default)
// after:  action timeout = 60000ms
//
// nginx (if a 413 / truncated response is the cause):
// before: client_max_body_size 1m;
// after:  client_max_body_size 50m;
Defensive patterns

Strategy: try-catch

Validate before calling

// Before triggering an upload action, sanity-check the inputs
if (!file || file.size > MAX_BYTES) {
  showAlert('File too large or missing', 'error');
  return;
}

Type guard

function isPluginActionExecutionError(e: unknown): e is PluginActionExecutionError {
  return e instanceof Error && e.name === 'PluginActionExecutionError';
}

Try / catch

try {
  await runPluginAction({ ... });
} catch (e) {
  if (e instanceof Error && e.name === 'UserCancelledActionExecutionError') return;
  // PluginActionExecutionError: surface the normalised message
  showAlert(e?.message ?? 'Upload failed', 'error');
}

Prevention

When it happens

Trigger: A plugin action that uploads files returns a non-2xx response, hits Axios' request timeout, suffers a network failure, or returns a payload that fails validateResponse. It also fires when the server closes the connection mid-upload (instrumentation logs status INVALID_RESPONSE / 444).

Common situations: Action timeout in settings too low for large uploads; datasource base URL wrong or down; CORS preflight rejected; file exceeds server max body size; plugin response schema changed after a backend upgrade; reverse proxy (nginx/cloudfront) truncating long uploads.

Related errors


AI-assisted analysis of appsmithorg/appsmith@8cd9021c24 (2026-08-12). Data as JSON: /api/errors/c9c9641766b23601. Report an issue: GitHub.