import * as fs from 'fs';
import * as path from 'path';
import * as os from 'os';
const API_URLS = {
    prod: 'https://gen-api.optima.onl',
    stage: 'https://gen-api.stage.optima.onl',
    // 阿里云 cn-prod（yzsgo 品牌域；权威映射见 optima-terraform
    // alicloud/stacks/cn-prod-ingress-sae/main.tf 的 yzsgo_sub=gen-api）。
    'cn-prod': 'https://gen-api.yzsgo.com',
};
let cachedTokenFile = null;
/** Reset cache (for testing) */
export function _resetCache() {
    cachedTokenFile = null;
}
function readTokenFile() {
    const tokenPath = path.join(os.homedir(), '.optima', 'token.json');
    if (!fs.existsSync(tokenPath))
        return null;
    try {
        const data = JSON.parse(fs.readFileSync(tokenPath, 'utf-8'));
        if (data.access_token)
            return data;
    }
    catch {
        // invalid file
    }
    return null;
}
/**
 * 读取 Optima token
 * 优先级: ~/.optima/token.json > 环境变量 OPTIMA_TOKEN
 *
 * 容器内 token.json 会被 session-gateway 在 token refresh 时动态更新，
 * 而 OPTIMA_TOKEN 环境变量只在容器启动时注入、之后不会变。
 * 文件优先保证 CLI 拿到的是最新的 token，避免过期后调用 API 失败。
 */
export function getToken() {
    cachedTokenFile = readTokenFile();
    if (cachedTokenFile) {
        return cachedTokenFile.access_token;
    }
    if (process.env.OPTIMA_TOKEN) {
        return process.env.OPTIMA_TOKEN;
    }
    throw new Error('未找到 Optima token。请确保 ~/.optima/token.json 存在或 OPTIMA_TOKEN 环境变量已设置。');
}
/**
 * 获取 Generation API 的 base URL
 * 优先级: GENERATION_API_URL 环境变量 > token.json 的 env 字段 > 默认 prod
 */
export function getGenerationApiUrl() {
    if (process.env.GENERATION_API_URL) {
        return process.env.GENERATION_API_URL;
    }
    if (!cachedTokenFile) {
        cachedTokenFile = readTokenFile();
    }
    // 无 env 字段（无 token.json 或旧格式）→ 默认 prod（不变）。
    const env = cachedTokenFile?.env;
    if (!env) {
        return API_URLS.prod;
    }
    // fail-loud（optima-gateway#843）：以前 `API_URLS[env] || API_URLS.prod`
    // 把未知 env（如 cn-prod 旧版本）静默回退 AWS prod，cn 签发的 token
    // 被发往 AWS gen-api。改为对未知 env 抛清晰错误，逃生口 GENERATION_API_URL。
    const url = API_URLS[env];
    if (!url) {
        throw new Error(`Unknown environment "${env}" in ~/.optima/token.json. ` +
            `Known environments: ${Object.keys(API_URLS).join(', ')}. ` +
            'Upgrade gen-cli to a version that knows this environment, ' +
            'or set GENERATION_API_URL to override the endpoint explicitly.');
    }
    return url;
}
//# sourceMappingURL=auth.js.map