openclaw/src/commands/auth-choice.apply.api-providers.ts
2026-03-16 01:20:56 -07:00

80 lines
2.6 KiB
TypeScript

import { resolveManifestProviderApiKeyChoice } from "../plugins/provider-auth-choices.js";
import {
createAuthChoiceDefaultModelApplierForMutableState,
normalizeSecretInputModeInput,
normalizeTokenProviderInput,
} from "./auth-choice.apply-helpers.js";
import { applyLiteLlmApiKeyProvider } from "./auth-choice.apply.api-key-providers.js";
import type { ApplyAuthChoiceParams, ApplyAuthChoiceResult } from "./auth-choice.apply.js";
import type { AuthChoice } from "./onboard-types.js";
const CORE_API_KEY_TOKEN_PROVIDER_AUTH_CHOICES: Partial<Record<string, AuthChoice>> = {
litellm: "litellm-api-key",
};
export function normalizeApiKeyTokenProviderAuthChoice(params: {
authChoice: AuthChoice;
tokenProvider?: string;
config?: ApplyAuthChoiceParams["config"];
workspaceDir?: string;
env?: NodeJS.ProcessEnv;
}): AuthChoice {
if (params.authChoice !== "apiKey" || !params.tokenProvider) {
return params.authChoice;
}
const normalizedTokenProvider = normalizeTokenProviderInput(params.tokenProvider);
if (!normalizedTokenProvider) {
return params.authChoice;
}
return (
(resolveManifestProviderApiKeyChoice({
providerId: normalizedTokenProvider,
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
})?.choiceId as AuthChoice | undefined) ??
CORE_API_KEY_TOKEN_PROVIDER_AUTH_CHOICES[normalizedTokenProvider] ??
params.authChoice
);
}
export async function applyAuthChoiceApiProviders(
params: ApplyAuthChoiceParams,
): Promise<ApplyAuthChoiceResult | null> {
let nextConfig = params.config;
let agentModelOverride: string | undefined;
const applyProviderDefaultModel = createAuthChoiceDefaultModelApplierForMutableState(
params,
() => nextConfig,
(config) => (nextConfig = config),
() => agentModelOverride,
(model) => (agentModelOverride = model),
);
const authChoice = normalizeApiKeyTokenProviderAuthChoice({
authChoice: params.authChoice,
tokenProvider: params.opts?.tokenProvider,
config: params.config,
env: process.env,
});
const normalizedTokenProvider = normalizeTokenProviderInput(params.opts?.tokenProvider);
const requestedSecretInputMode = normalizeSecretInputModeInput(params.opts?.secretInputMode);
const litellmResult = await applyLiteLlmApiKeyProvider({
params,
authChoice,
config: nextConfig,
setConfig: (config) => (nextConfig = config),
getConfig: () => nextConfig,
normalizedTokenProvider,
requestedSecretInputMode,
applyProviderDefaultModel,
getAgentModelOverride: () => agentModelOverride,
});
if (litellmResult) {
return litellmResult;
}
return null;
}