/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import type { Config } from '@qwen-code/qwen-code-core'; import { AuthType, OutputFormat } from '@qwen-code/qwen-code-core'; import { USER_SETTINGS_PATH } from './config/settings.js'; import { validateAuthMethod } from './config/auth.js'; import { type LoadedSettings } from './config/settings.js'; import { handleError } from './utils/errors.js'; function getAuthTypeFromEnv(): AuthType | undefined { if (process.env['OPENAI_API_KEY']) { return AuthType.USE_OPENAI; } if (process.env['QWEN_OAUTH']) { return AuthType.QWEN_OAUTH; } return undefined; } export async function validateNonInteractiveAuth( configuredAuthType: AuthType | undefined, useExternalAuth: boolean | undefined, nonInteractiveConfig: Config, settings: LoadedSettings, ) { try { const enforcedType = settings.merged.security?.auth?.enforcedType; if (enforcedType) { const currentAuthType = getAuthTypeFromEnv(); if (currentAuthType !== enforcedType) { const message = `The configured auth type is ${enforcedType}, but the current auth type is ${currentAuthType}. Please re-authenticate with the correct type.`; throw new Error(message); } } const effectiveAuthType = enforcedType || getAuthTypeFromEnv() || configuredAuthType; if (!effectiveAuthType) { const message = `Please set an Auth method in your ${USER_SETTINGS_PATH} or specify one of the following environment variables before running: QWEN_OAUTH, OPENAI_API_KEY`; throw new Error(message); } const authType: AuthType = effectiveAuthType as AuthType; if (!useExternalAuth) { const err = validateAuthMethod(String(authType)); if (err != null) { throw new Error(err); } } await nonInteractiveConfig.refreshAuth(authType); return nonInteractiveConfig; } catch (error) { if (nonInteractiveConfig.getOutputFormat() === OutputFormat.JSON) { handleError( error instanceof Error ? error : new Error(String(error)), nonInteractiveConfig, 1, ); } else { console.error(error instanceof Error ? error.message : String(error)); process.exit(1); } } }