{"record":{"id":"556c22f95daed823","repo":"DIYgod/RSSHub","slug":"the-user-does-not-exist","errorCode":null,"errorMessage":"The user does not exist.","messagePattern":"The user does not exist\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"lib/routes/pawchive/index.tsx","lineNumber":139,"sourceCode":"                        }\n\n                        return <li style={{ listStyleType: 'none' }}>{element}</li>;\n                    })}\n                </ul>\n            )}\n            {post.content && <h2>Content</h2>}\n            {post.content && raw(post.content)}\n        </>\n    );\n\nasync function handler(ctx: Context) {\n    const { service, id } = ctx.req.param();\n\n    const apiUrl = `${apiBaseUrl}/${service}/user/${id}`;\n    const response = await ofetch(apiUrl);\n\n    if (response.length === 0) {\n        throw new Error('The user does not exist.');\n    }\n\n    const author = (await cache.tryGet(`pawchive:${service}:${id}`, async () => {\n        const profileUrl = `${apiBaseUrl}/${service}/user/${id}/profile`;\n        const data = await ofetch(profileUrl);\n        return data.name || 'Unknown User';\n    })) as Promise<string>;\n\n    const items = response.map((post) => {\n        const description = render(post, processPostFiles(post));\n        return {\n            title: post.title || 'Untitled Post',\n            description,\n            author,\n            pubDate: parseDate(post.published),\n            link: `${baseUrl}/${post.service}/user/${post.user}/post/${post.id}`,\n            guid: `pawchive:${post.service}:${post.user}:post:${post.id}`,\n            ...generateEnclosureInfo(description),","sourceCodeStart":121,"sourceCodeEnd":157,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/pawchive/index.tsx#L121-L157","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Verify the service/id pair on https://pawchive.pw — confirm the user page exists and lists posts.","If the user isn't archived, request import on Pawchive first; the RSS feed only works post-archive.","Double-check the service value ('patreon' or 'fanbox') matches the source platform.","If the page exists but the API returns [], check Pawchive's API health/rate-limiting."],"exampleFix":"// before\nif (response.length === 0) {\n    throw new Error('The user does not exist.');\n}\n\n// after — distinguish 'not archived' from 'wrong id' using the profile lookup\nif (response.length === 0) {\n    throw new Error(`User \"${id}\" not found on Pawchive under service \"${service}\" (the user may not be archived yet).`);\n}","handlingStrategy":"validation","validationCode":"const VALID_SERVICES = new Set(['patreon', 'fanbox']);\nif (!VALID_SERVICES.has(service)) {\n    throw new InvalidParameterError(`Unsupported service: ${service}`);\n}\n// Optionally probe the profile endpoint to distinguish 'not archived' from 'wrong id'.","typeGuard":"const isPawchiveService = (s: string): s is 'patreon' | 'fanbox' => s === 'patreon' || s === 'fanbox';","tryCatchPattern":"try {\n    return await buildFeed(ctx);\n} catch (e) {\n    if (e instanceof Error && /does not exist/.test(e.message)) {\n        return ctx.json({ error: `User ${id} not found on Pawchive under ${service}.` }, 404);\n    }\n    throw e;\n}","preventionTips":["Validate the service segment against the allowed set before the API call.","Confirm on pawchive.pw that the user has been archived before subscribing.","Return an allowEmpty feed if a legitimately-empty result is acceptable."],"tags":["api","data-validation","user-input","archive"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}