Mintplex-Labs/anything-llm · error · Error

Failed to remove pfp.

Error message

Failed to remove pfp.

What it means

Thrown by System.removePfp when the DELETE to /api/system/remove-pfp returns non-2xx. baseHeaders() is sent (auth required). On res.ok it returns {success:true, error:null}; otherwise it throws and the .catch() returns {success:false, error:e.message}.

Source

Thrown at frontend/src/models/system.js:510

      headers: baseHeaders(),
    })
      .then((res) => {
        if (res.ok && res.status !== 204) return res.blob();
        throw new Error("Failed to fetch pfp.");
      })
      .then((blob) => (blob ? URL.createObjectURL(blob) : null))
      .catch(() => {
        return null;
      });
  },
  removePfp: async function () {
    return await fetch(`${API_BASE}/system/remove-pfp`, {
      method: "DELETE",
      headers: baseHeaders(),
    })
      .then((res) => {
        if (res.ok) return { success: true, error: null };
        throw new Error("Failed to remove pfp.");
      })
      .catch((e) => {
        console.log(e);
        return { success: false, error: e.message };
      });
  },

  isDefaultLogo: async function () {
    return await fetch(`${API_BASE}/system/is-default-logo`, {
      method: "GET",
      cache: "no-cache",
    })
      .then((res) => {
        if (!res.ok) throw new Error("Failed to get is default logo!");
        return res.json();
      })
      .then((res) => res?.isDefaultLogo)
      .catch((e) => {

View on GitHub (pinned to 526360e320)

Solutions

  1. Confirm localStorage AUTH_TOKEN is still valid before the delete.
  2. Check server logs for the underlying filesystem error on delete.
  3. Tolerate a 404 on remove (the pfp is already gone) at the UI layer.
  4. Verify write/delete permissions on the pfp storage directory.

Example fix

// before
const res = await System.removePfp();
if (!res.success) alert(res.error);

// after (treat already-removed as success)
const res = await System.removePfp();
if (!res.success && !/not found|404/i.test(res.error)) alert(res.error);
Defensive patterns

Strategy: validation

Validate before calling

function canMutatePfp() {
  return !!window.localStorage.getItem("anythingllm_authToken");
}

Type guard

/** @param {any} r @returns {r is {success:boolean, error:string|null}} */
function isMutationResult(r) { return r != null && typeof r.success === "boolean"; }

Try / catch

if (!canMutatePfp()) { routeToLogin(); return; }
const res = await System.removePfp();
if (!isMutationResult(res) || !res.success) {
  if (!/404|not found/i.test(res.error)) showError(res.error);
}

Prevention

When it happens

Trigger: Calling removePfp() when the user has no pfp to remove (404/409), when the storage delete fails server-side (500), or when the auth token is rejected/expired (401/403).

Common situations: User already removed their pfp and clicks remove again; filesystem is read-only so the server cannot delete the file; token expired before the action completed.

Related errors


AI-assisted analysis of Mintplex-Labs/anything-llm@526360e320 (2026-08-13). Data as JSON: /api/errors/8a6838674d64e46a. Report an issue: GitHub.