mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 04:21:24 +00:00
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);
|
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() {
|
function resolveCodexCliAuthPath() {
|
||||||
return path.join(resolveCodexHomePath(), CODEX_CLI_AUTH_FILENAME);
|
return path.join(resolveCodexHomePath(), CODEX_CLI_AUTH_FILENAME);
|
||||||
}
|
}
|
||||||
@@ -255,38 +286,7 @@ function readClaudeCliKeychainCredentials(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const data = JSON.parse(result.trim());
|
const data = JSON.parse(result.trim());
|
||||||
const claudeOauth = data?.claudeAiOauth;
|
return parseClaudeCliOauthCredential(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,
|
|
||||||
};
|
|
||||||
} catch {
|
} catch {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -316,38 +316,7 @@ export function readClaudeCliCredentials(options?: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const data = raw as Record<string, unknown>;
|
const data = raw as Record<string, unknown>;
|
||||||
const claudeOauth = data.claudeAiOauth as Record<string, unknown> | undefined;
|
return parseClaudeCliOauthCredential(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,
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function readClaudeCliCredentialsCached(options?: {
|
export function readClaudeCliCredentialsCached(options?: {
|
||||||
|
|||||||
Reference in New Issue
Block a user