decolua/9router · error
${params.error_description || params.error}
Error message
${params.error_description || params.error} What it means
Thrown by KimchiService._handleCallback() when the browser callback reports an OAuth-style error: the query string contains an `error` parameter, and the message relays `error_description` (or the bare code). Kimchi's browser login normally delivers a token directly on the callback; an `error` param means the Kimchi web app's login flow rejected or aborted the authentication.
Source
Thrown at src/lib/oauth/services/kimchi.js:75
// Map can't grow unbounded across many logins.
result.then((r) => {
const s = sessions.get(state);
if (!s) return;
s.done = true;
s.resolved = r;
clearTimeout(s.timeout);
try { s.close(); } catch { /* already closed */ }
setTimeout(() => sessions.delete(state), SESSION_TTL_MS).unref?.();
});
const callbackUrl = `http://127.0.0.1:${port}${KIMCHI_CONFIG.callbackPath}`;
const authUrl = buildKimchiAuthUrl(callbackUrl, state);
return { authUrl, port, state, result, close };
}
async _handleCallback(params, expectedState) {
if (params.error) {
throw new Error(params.error_description || params.error);
}
const candidate = params.state;
if (!candidate || candidate !== expectedState) {
throw new Error("This request isn't valid. Please restart the Kimchi login flow.");
}
const token = params.token;
if (!token) {
throw new Error("No token was returned by the Kimchi authentication server");
}
const check = await this.validateToken(token);
if (!check.valid) {
throw new Error(check.error || "Kimchi token validation failed");
}
return { token };
}
async fetchProfile(token) {
try {View on GitHub (pinned to 90b52e06ff)
Solutions
- Read the message — error_description names the exact Kimchi-side reason.
- Restart the login flow (startLogin()) and complete the Kimchi browser step without canceling.
- Log into the Kimchi web app in the browser first to refresh the session, then retry.
- If the error persists for all attempts, check Kimchi service status / web app availability.
Example fix
null
Defensive patterns
Strategy: try-catch
Try / catch
try {
const { result } = await kimchiService.startLogin();
const outcome = await result; // resolves to { token } or { error }
if (outcome.error) throw new Error(outcome.error);
} catch (err) {
if (/denied|cancel|error/i.test(err.message)) {
console.log("Kimchi login aborted — restart the flow and complete the browser step.");
} else { throw err; }
} Prevention
- Complete the Kimchi browser login without canceling or closing the tab.
- Log into the Kimchi web app beforehand so the session is fresh.
- Only run one Kimchi login at a time.
- Check Kimchi service status if authorization errors repeat across attempts.
When it happens
Trigger: The Kimchi web app redirects to the local callback with ?error=... — user canceled in the Kimchi UI, Kimchi session expired mid-flow, or Kimchi's backend refused the login (invalid credentials, SSO failure, backend outage).
Common situations: User closing/canceling the Kimchi login tab; Kimchi account session cookie expired; Kimchi service degradation; the CLI-auth page on the Kimchi web app failing validation and redirecting back with an error code.
Related errors
- No token was returned by the Kimchi authentication server
- ${callbackParams.error_description || callbackParams.error}
- No authorization code received
- ${callbackParams.error_description || callbackParams.error}
- No authorization code received
AI-assisted analysis of decolua/9router@90b52e06ff (2026-08-30).
Data as JSON: /api/errors/693efb494ea8c161.
Report an issue: GitHub.