DIYgod/RSSHub · error · ConfigNotFoundError
Skeb works RSS is disabled due to the lack of <a href="https
Error message
Skeb works RSS is disabled due to the lack of <a href="https://docs.rsshub.app/deploy/config#route-specific-configurations">relevant config</a>
What it means
Thrown as a ConfigNotFoundError when config.skeb is unset or config.skeb.bearerToken is missing. The Skeb works route (/skeb/works/:username) requires an authenticated bearer token to call the private /api/users/:username/works endpoint. ConfigNotFoundError is RSSHub's convention for routes that need operator-supplied configuration; it renders the message (including the HTML link) to the end user so they know what env var to set.
Source
Thrown at lib/routes/skeb/works.ts:47
},
name: 'Creator Works',
maintainers: ['SnowAgar25'],
handler,
radar: [
{
title: 'Creator Works',
source: ['skeb.jp/:username'],
target: '/works/:username',
},
],
description: 'Get the latest works of a specific creator on Skeb',
};
async function handler(ctx): Promise<Data> {
const username = ctx.req.param('username');
if (!config.skeb || !config.skeb.bearerToken) {
throw new ConfigNotFoundError('Skeb works RSS is disabled due to the lack of <a href="https://docs.rsshub.app/deploy/config#route-specific-configurations">relevant config</a>');
}
const url = `${baseUrl}/api/users/${username.replace('@', '')}/works`;
await ensureRequestKey(url);
const items = await cache.tryGet(url, async () => {
const data = await ofetch(url, {
retry: 0,
method: 'GET',
query: { role: 'creator', sort: 'date', offset: '0' },
headers: {
'User-Agent': config.ua,
Cookie: `request_key=${await cache.get('skeb:request_key')}`,
Authorization: `Bearer ${config.skeb.bearerToken}`,
},
});
View on GitHub (pinned to bed535e087)
Solutions
- Set SKEB_BEARER_TOKEN in your RSSHub environment: log into skeb.jp, open F12 console, run localStorage.getItem('token'), and copy the value.
- If the token expired, repeat the extraction process and update the env var, then restart RSSHub.
- If you cannot obtain a token (no Skeb account), use the public Skeb routes that do not require auth: /skeb/new_art_works, /skeb/search/:keyword.
Example fix
# before # (SKEB_BEARER_TOKEN not set) # after (.env) SKEB_BEARER_TOKEN=eyJhbGciOi...your-token-here...
Defensive patterns
Strategy: validation
Validate before calling
if (!config.skeb?.bearerToken) {
throw new ConfigNotFoundError('Skeb works RSS requires SKEB_BEARER_TOKEN. Set it in your environment.');
} Type guard
function hasSkebConfig(cfg: typeof config): cfg is typeof config & { skeb: { bearerToken: string } } {
return !!cfg.skeb && typeof cfg.skeb.bearerToken === 'string' && cfg.skeb.bearerToken.length > 0;
} Prevention
- Set SKEB_BEARER_TOKEN as part of your initial RSSHub deployment checklist.
- Document the token extraction process (localStorage.getItem('token')) prominently in the route description.
- Set up monitoring to alert when the token expires and starts failing.
When it happens
Trigger: The RSSHub instance operator has not set the SKEB_BEARER_TOKEN environment variable. The bearer token is obtained from the Skeb website via localStorage.getItem('token') in the browser developer console, as documented in the route's requireConfig description.
Common situations: Self-hosted RSSHub without configuring route-specific env vars; the bearer token expired (Skeb tokens have a limited lifetime); or the operator is using a public RSSHub instance that does not support this route.
Related errors
- 什么值得买排行榜 is disabled due to the lack of SMZDM_COOKIE
- 什么值得买排行榜 is disabled due to the lack of SMZDM_COOKIE
- 什么值得买排行榜 is disabled due to the lack of SMZDM_COOKIE
- 什么值得买排行榜 is disabled due to the lack of SMZDM_COOKIE
- 什么值得买排行榜 is disabled due to the lack of SMZDM_COOKIE
AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12).
Data as JSON: /api/errors/9e95e6a075949468.
Report an issue: GitHub.