refactor(agents): dedupe claude oauth parsing
This commit is contained in:
@@ -93,6 +93,37 @@ function resolveClaudeCliCredentialsPath(homeDir?: string) {
|
||||
return path.join(baseDir, CLAUDE_CLI_CREDENTIALS_RELATIVE_PATH);
|
||||
}
|
||||
|
||||
function parseClaudeCliOauthCredential(claudeOauth: unknown): ClaudeCliCredential | null {
|
||||
if (!claudeOauth || typeof claudeOauth !== "object") {
|
||||
return null;
|
||||
}
|
||||
const accessToken = (claudeOauth as Record<string, unknown>).accessToken;
|
||||
const refreshToken = (claudeOauth as Record<string, unknown>).refreshToken;
|
||||
const expiresAt = (claudeOauth as Record<string, unknown>).expiresAt;
|
||||
|
||||
if (typeof accessToken !== "string" || !accessToken) {
|
||||
return null;
|
||||
}
|
||||
if (typeof expiresAt !== "number" || !Number.isFinite(expiresAt) || expiresAt <= 0) {
|
||||
return null;
|
||||
}
|
||||
if (typeof refreshToken === "string" && refreshToken) {
|
||||
return {
|
||||
type: "oauth",
|
||||
provider: "anthropic",
|
||||
access: accessToken,
|
||||
refresh: refreshToken,
|
||||
expires: expiresAt,
|
||||
};
|
||||
}
|
||||
return {
|
||||
type: "token",
|
||||
provider: "anthropic",
|
||||
token: accessToken,
|
||||
expires: expiresAt,
|
||||
};
|
||||
}
|
||||
|
||||
function resolveCodexCliAuthPath() {
|
||||
return path.join(resolveCodexHomePath(), CODEX_CLI_AUTH_FILENAME);
|
||||
}
|
||||
@@ -255,38 +286,7 @@ function readClaudeCliKeychainCredentials(
|
||||
);
|
||||
|
||||
const data = JSON.parse(result.trim());
|
||||
const claudeOauth = data?.claudeAiOauth;
|
||||
if (!claudeOauth || typeof claudeOauth !== "object") {
|
||||
return null;
|
||||
}
|
||||
|
||||
const accessToken = claudeOauth.accessToken;
|
||||
const refreshToken = claudeOauth.refreshToken;
|
||||
const expiresAt = claudeOauth.expiresAt;
|
||||
|
||||
if (typeof accessToken !== "string" || !accessToken) {
|
||||
return null;
|
||||
}
|
||||
if (typeof expiresAt !== "number" || expiresAt <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (typeof refreshToken === "string" && refreshToken) {
|
||||
return {
|
||||
type: "oauth",
|
||||
provider: "anthropic",
|
||||
access: accessToken,
|
||||
refresh: refreshToken,
|
||||
expires: expiresAt,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
type: "token",
|
||||
provider: "anthropic",
|
||||
token: accessToken,
|
||||
expires: expiresAt,
|
||||
};
|
||||
return parseClaudeCliOauthCredential(data?.claudeAiOauth);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
@@ -316,38 +316,7 @@ export function readClaudeCliCredentials(options?: {
|
||||
}
|
||||
|
||||
const data = raw as Record<string, unknown>;
|
||||
const claudeOauth = data.claudeAiOauth as Record<string, unknown> | undefined;
|
||||
if (!claudeOauth || typeof claudeOauth !== "object") {
|
||||
return null;
|
||||
}
|
||||
|
||||
const accessToken = claudeOauth.accessToken;
|
||||
const refreshToken = claudeOauth.refreshToken;
|
||||
const expiresAt = claudeOauth.expiresAt;
|
||||
|
||||
if (typeof accessToken !== "string" || !accessToken) {
|
||||
return null;
|
||||
}
|
||||
if (typeof expiresAt !== "number" || expiresAt <= 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (typeof refreshToken === "string" && refreshToken) {
|
||||
return {
|
||||
type: "oauth",
|
||||
provider: "anthropic",
|
||||
access: accessToken,
|
||||
refresh: refreshToken,
|
||||
expires: expiresAt,
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
type: "token",
|
||||
provider: "anthropic",
|
||||
token: accessToken,
|
||||
expires: expiresAt,
|
||||
};
|
||||
return parseClaudeCliOauthCredential(data.claudeAiOauth);
|
||||
}
|
||||
|
||||
export function readClaudeCliCredentialsCached(options?: {
|
||||
|
||||
Reference in New Issue
Block a user