{"record":{"id":"f00cb509e3a469ba","repo":"DIYgod/RSSHub","slug":"skeb-followings-rss-is-disabled-due-to-the-lack-of","errorCode":null,"errorMessage":"Skeb followings RSS is disabled due to the lack of relevant config","messagePattern":"Skeb followings RSS is disabled due to the lack of relevant config","errorType":"error_code","errorClass":"ConfigNotFoundError","httpStatus":503,"severity":"error","filePath":"lib/routes/skeb/following-creators.ts","lineNumber":44,"sourceCode":"    },\n    name: 'Following Creators',\n    maintainers: ['SnowAgar25'],\n    handler,\n    radar: [\n        {\n            title: 'Following Creators',\n            source: ['skeb.jp/:username'],\n            target: '/following_creators/:username',\n        },\n    ],\n    description: 'Get the list of creators the specified user is following on Skeb.',\n};\n\nasync function handler(ctx): Promise<Data> {\n    const username = ctx.req.param('username');\n\n    if (!config.skeb || !config.skeb.bearerToken) {\n        throw new ConfigNotFoundError('Skeb followings RSS is disabled due to the lack of relevant config');\n    }\n\n    const items = await getFollowingsItems(username, 'following_creators');\n\n    return {\n        title: `Skeb - ${username} - フォロー中のクリエイター`,\n        link: `https://skeb.jp/${username}`,\n        item: items as DataItem[],\n    };\n}\n","sourceCodeStart":26,"sourceCodeEnd":55,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/skeb/following-creators.ts#L26-L55","documentation":"The Skeb following-creators route calls the Skeb API on behalf of a user and requires `config.skeb.bearerToken` for authentication. If `config.skeb` is undefined or its `bearerToken` is empty, the handler throws `ConfigNotFoundError` before calling `getFollowingsItems`. Skeb has no anonymous access for followings, so there is no fallback.","triggerScenarios":"A request to /following_creators/:username on an instance where `SKEB_BEARER_TOKEN` is not set. The check runs before the helper is invoked.","commonSituations":"Self-hosted deploy without Skeb config; user expects shared credentials on a public instance; token name typo in env.","solutions":["Obtain a Skeb bearer token (from your authenticated Skeb session's Authorization header) and set `SKEB_BEARER_TOKEN=<token>` in the RSSHub environment, then restart.","Rotate the token when it expires — Skeb sessions are not long-lived.","If you do not have a Skeb account, the route is unavailable."],"exampleFix":"// before\n# no skeb config\n\n// after\nSKEB_BEARER_TOKEN=Bearer xxxxxxxx","handlingStrategy":"validation","validationCode":"if (!config.skeb?.bearerToken) {\n    return ctx.body('Skeb route requires SKEB_BEARER_TOKEN.', 503);\n}","typeGuard":"const hasSkebToken = (c: typeof config): boolean => Boolean(c.skeb?.bearerToken);","tryCatchPattern":null,"preventionTips":["Store the bearer token in a secret manager.","Rotate the token before it expires.","Add a startup self-test that pings the Skeb API."],"tags":["config-missing","auth-token","artist-platform"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}