orca/src/shared/codex-auth-errors.ts

38 lines
1.2 KiB
TypeScript

const CODEX_AUTH_ERROR_PATTERNS = [
/access token could not be refreshed/i,
/authentication session could not be refreshed/i,
/refresh token (?:has expired|was already used|was revoked)/i,
/you have since logged out or signed in to another account/i,
/please (?:log out and )?sign in again/i,
/please reauthenticate/i,
/not logged in/i,
/token data is not available/i,
/auth (?:is missing|tokens are missing|does not expose)/i
]
const ANSI_ESCAPE_RE = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*[a-zA-Z]`, 'g')
export function isCodexAuthError(error: string | null | undefined): boolean {
const message = error?.trim()
if (!message) {
return false
}
return CODEX_AUTH_ERROR_PATTERNS.some((pattern) => pattern.test(message))
}
export function extractCodexAuthError(output: string | null | undefined): string | null {
const cleanOutput = output?.replace(ANSI_ESCAPE_RE, '').trim()
if (!cleanOutput) {
return null
}
const matchingLine = cleanOutput
.split(/\r?\n/)
.map((line) => line.trim())
.find(isCodexAuthError)
if (matchingLine) {
return matchingLine
}
return isCodexAuthError(cleanOutput) ? cleanOutput.slice(0, 4_000) : null
}