{"record":{"id":"f42004391ad61ecd","repo":"DIYgod/RSSHub","slug":"type-playlist-playlist-user-not-f","errorCode":null,"errorMessage":"${type === 'playlist' ? 'Playlist' : 'User'} not found","messagePattern":"(.+?) not found","errorType":"exception","errorClass":"Error","httpStatus":503,"severity":"error","filePath":"lib/routes/mixcloud/index.ts","lineNumber":116,"sourceCode":"    }\n    return `${host}/${username}/${type === 'uploads' ? '' : type + '/'}`;\n}\n\nexport async function handler(ctx) {\n    const username = ctx.req.param('username');\n    const playlistSlug = ctx.req.param('playlist');\n    const type = ctx.req.param('type') ?? (playlistSlug ? 'playlist' : 'uploads');\n\n    if (!Object.hasOwn(TYPE_CONFIG, type)) {\n        throw new InvalidParameterError(`Invalid type: ${type}`);\n    }\n\n    const { objectType, objectFields } = getObjectFields(type);\n\n    const data = await callApi(objectType, objectFields, username, playlistSlug);\n\n    if (!data) {\n        throw new Error(`${type === 'playlist' ? 'Playlist' : 'User'} not found`);\n    }\n\n    const isPlaylist = type === 'playlist';\n    const displayName = isPlaylist ? username : data.displayName;\n    const description = isPlaylist ? data.description : data.biog;\n    const picture = data.picture;\n    const image = picture && picture.urlRoot ? `${MIXCLOUD_CONFIG.imageBaseURL}${picture.urlRoot}` : '';\n\n    const itemsData = data[TYPE_CONFIG[type]];\n    const edges = itemsData?.edges || [];\n\n    const items = edges\n        .map((edge: any) => {\n            const cloudcast = getCloudcast(edge.node, type);\n\n            if (!cloudcast) {\n                return null;\n            }","sourceCodeStart":98,"sourceCodeEnd":134,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/mixcloud/index.ts#L98-L134","documentation":"Thrown (bare Error) by the Mixcloud route when the GraphQL lookup returns null/falsy data. callApi() returns response.data.data[<Type>Lookup]; a null result means Mixcloud's GraphQL found no user (or playlist) matching the supplied username/slug. The message distinguishes 'Playlist not found' from 'User not found' based on the type.","triggerScenarios":"The handler calls callApi(objectType, objectFields, username, playlistSlug); the GraphQL response's lookup field is null. Happens with a non-existent username, a typo, a deleted/renamed account, or a playlist slug that doesn't belong to that user.","commonSituations":"Username copied with wrong casing or extra characters; the user renamed their account; the playlist slug was guessed; Mixcloud's GraphQL shape changed so the lookup key no longer resolves.","solutions":["Open https://www.mixcloud.com/<username>/ in a browser — a 404 means the username is wrong.","For playlists, confirm the slug from the playlist's real URL and that it belongs to the given username.","Reproduce the GraphQL request to https://app.mixcloud.com/graphql with the same query to confirm the null lookup.","If the user was renamed, find their current username and update the feed URL."],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if (!data) {\n    throw new Error(`${type === 'playlist' ? 'Playlist' : 'User'} '${username}' not found on Mixcloud.`);\n}","typeGuard":"function isMixcloudLookupResult(data: unknown): data is { displayName?: string; biog?: string; picture?: { urlRoot?: string } } {\n    return !!data && typeof data === 'object';\n}","tryCatchPattern":null,"preventionTips":["Verify the username resolves in a browser before subscribing.","For playlists, confirm the slug belongs to the user.","Treat a null GraphQL lookup as a 404 NotFoundError rather than a bare Error for clearer client semantics."],"tags":["not-found","graphql","upstream-error","mixcloud"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}