jackwener/OpenCLI · error · AuthRequiredError
auth
Error message
auth
What it means
The in-page probe on my.hupu.com returned { kind: 'auth', ... }, meaning the page rendered but the 'u' cookie was absent — a stale/expired session. verifyHupuIdentity converts that into AuthRequiredError('hupu.com', detail).
Source
Thrown at clis/hupu/auth.js:29
throw new AuthRequiredError('hupu.com', 'Hupu u cookie missing — anonymous');
}
await page.goto('https://my.hupu.com/');
await page.wait(2);
const probe = await page.evaluate(`
(() => {
if (/passport\\.hupu\\.com\\/.*login/.test(location.href)) {
return { kind: 'auth', detail: 'Hupu my page redirected to passport login' };
}
const uCookie = (document.cookie.split('; ').find(c => c.startsWith('u=')) || '').split('=')[1] || '';
const el = document.querySelector('.user-name, .username, .nick, [class*="userName"]');
const username = (el?.innerText || '').trim();
if (!uCookie) {
return { kind: 'auth', detail: 'Hupu my page rendered but u cookie absent — stale session' };
}
return { ok: true, user_id: uCookie, username };
})()
`);
if (probe?.kind === 'auth') throw new AuthRequiredError('hupu.com', probe.detail);
if (!probe?.ok) throw new CommandExecutionError(`Unexpected Hupu probe: ${JSON.stringify(probe)}`);
return { user_id: probe.user_id, username: probe.username };
}
registerSiteAuthCommands({
site: 'hupu',
domain: 'hupu.com',
loginUrl: 'https://passport.hupu.com/pc/login',
columns: ['user_id', 'username'],
quickCheck: hasHupuUserCookie,
verify: verifyHupuIdentity,
poll: async (page) => {
if (!await hasHupuUserCookie(page)) {
throw new AuthRequiredError('hupu.com', 'Waiting for Hupu u cookie');
}
return verifyHupuIdentity(page);
},
});View on GitHub (pinned to 49907e53dc)
Solutions
- Re-login to hupu.com in the browser session and rerun identity verification
- Delete stale cookies and perform a clean login
- Check the probe detail message to confirm the stale-session diagnosis
- If redirects to passport.hupu.com occur, complete the login flow before calling verify
Defensive patterns
Strategy: try-catch
Type guard
const isAuthProbe = p => p && typeof p === 'object' && p.kind === 'auth';
Try / catch
try { const identity = await verifyHupuIdentity(page); } catch (e) { if (e instanceof AuthRequiredError && /stale session/.test(e.detail ?? e.message)) { await clearCookiesAndLogin(page); return verifyHupuIdentity(page); } throw e; } Prevention
- Treat 'u' cookie presence as necessary but not sufficient — expect server-side expiry
- Re-login when commands fail after long idle periods
- Perform a full login flow if my.hupu.com redirects to passport.hupu.com
- Keep sessions active with periodic verification instead of one-shot checks
When it happens
Trigger: The first cookie check passed (or raced), but after page.goto('https://my.hupu.com/') the session proved invalid: no u cookie in the page context, or the page redirected to passport.hupu.com login.
Common situations: Session expired between commands; server-side session revoked while the cookie still existed; intermittent redirect to the login page; clock/token expiry on Hupu's side.
Related errors
- Bilibili ${label} API requires login or permission: ${messag
- bilibili.com
- result.detail (auth required from Claude probe)
- quark.cn
- Taobao tracknick cookie missing — anonymous
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/81149516b63147d2.
Report an issue: GitHub.