DIYgod/RSSHub · error · Error

The user does not exist.

Error message

The user does not exist.

What it means

Thrown when the Pawchive API responds with an empty array for a given service/user id. An empty array means the user has no archived posts in Pawchive, which the route interprets as the user not existing (Pawchive only indexes users that have been requested). It is a plain Error surfaced as a route failure.

Source

Thrown at lib/routes/pawchive/index.tsx:139

                        }

                        return <li style={{ listStyleType: 'none' }}>{element}</li>;
                    })}
                </ul>
            )}
            {post.content && <h2>Content</h2>}
            {post.content && raw(post.content)}
        </>
    );

async function handler(ctx: Context) {
    const { service, id } = ctx.req.param();

    const apiUrl = `${apiBaseUrl}/${service}/user/${id}`;
    const response = await ofetch(apiUrl);

    if (response.length === 0) {
        throw new Error('The user does not exist.');
    }

    const author = (await cache.tryGet(`pawchive:${service}:${id}`, async () => {
        const profileUrl = `${apiBaseUrl}/${service}/user/${id}/profile`;
        const data = await ofetch(profileUrl);
        return data.name || 'Unknown User';
    })) as Promise<string>;

    const items = response.map((post) => {
        const description = render(post, processPostFiles(post));
        return {
            title: post.title || 'Untitled Post',
            description,
            author,
            pubDate: parseDate(post.published),
            link: `${baseUrl}/${post.service}/user/${post.user}/post/${post.id}`,
            guid: `pawchive:${post.service}:${post.user}:post:${post.id}`,
            ...generateEnclosureInfo(description),

View on GitHub (pinned to bed535e087)

Solutions

  1. Verify the service/id pair on https://pawchive.pw — confirm the user page exists and lists posts.
  2. If the user isn't archived, request import on Pawchive first; the RSS feed only works post-archive.
  3. Double-check the service value ('patreon' or 'fanbox') matches the source platform.
  4. If the page exists but the API returns [], check Pawchive's API health/rate-limiting.

Example fix

// before
if (response.length === 0) {
    throw new Error('The user does not exist.');
}

// after — distinguish 'not archived' from 'wrong id' using the profile lookup
if (response.length === 0) {
    throw new Error(`User "${id}" not found on Pawchive under service "${service}" (the user may not be archived yet).`);
}
Defensive patterns

Strategy: validation

Validate before calling

const VALID_SERVICES = new Set(['patreon', 'fanbox']);
if (!VALID_SERVICES.has(service)) {
    throw new InvalidParameterError(`Unsupported service: ${service}`);
}
// Optionally probe the profile endpoint to distinguish 'not archived' from 'wrong id'.

Type guard

const isPawchiveService = (s: string): s is 'patreon' | 'fanbox' => s === 'patreon' || s === 'fanbox';

Try / catch

try {
    return await buildFeed(ctx);
} catch (e) {
    if (e instanceof Error && /does not exist/.test(e.message)) {
        return ctx.json({ error: `User ${id} not found on Pawchive under ${service}.` }, 404);
    }
    throw e;
}

Prevention

When it happens

Trigger: GET {apiBaseUrl}/{service}/user/{id} returns [] (empty array). response.length === 0 evaluates true and the throw fires. service is 'patreon' or 'fanbox'; id is the upstream user id.

Common situations: The user id is wrong or mistyped; the user exists on Patreon/Fanbox but has never been imported into Pawchive (Pawchive is opt-in/queue-based); the service segment is wrong (e.g. 'patreon' vs 'fanbox'); Pawchive's API silently returns [] on rate-limit.

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/556c22f95daed823. Report an issue: GitHub.