import { EnvConfigResolver, HuaweiObsConfig } from './types'; /** * 从系统环境变量解析华为 OBS 配置的实现。 * 只使用一套固定变量,不区分 dev/test/prod 等多环境前缀。 */ export class EnvConfigResolverImpl implements EnvConfigResolver { /** * 解析华为 OBS 配置(endpoint、ak/sk、basePrefix 等)。 * 当前实现忽略 env 参数,统一使用以下环境变量: * - OBS_ENDPOINT * - OBS_ACCESS_KEY / OBS_SECRET_KEY(也可通过 OBS_CREDENTIALS_URL 拉取 YAML 获得) * - OBS_REGION(可选) * - OBS_BASE_PREFIX(可选,作为所有 key 的基础前缀) * - OBS_CDN_BASE_URL(可选,CDN 加速根地址,上传完成后用于拼出访问 URL) */ // eslint-disable-next-line @typescript-eslint/no-unused-vars resolveHuaweiConfig(env?: string): HuaweiObsConfig { // 通过环境变量解构出 OBS 访问配置(不依赖 .env 文件,直接读取进程环境) const endpoint = process.env.OBS_ENDPOINT; const accessKey = process.env.OBS_ACCESS_KEY; const secretKey = process.env.OBS_SECRET_KEY; const region = process.env.OBS_REGION; // basePrefix 作为所有对象 key 的基础前缀,用于隔离项目/租户等 const basePrefix = process.env.OBS_BASE_PREFIX; // CDN 加速根地址,配置后用于拼出上传完成后的访问 URL const cdnBaseUrl = ['prod', 'production'].includes(env || '') ? process.env.OBS_CDN_BASE_URL_PROD : process.env.OBS_CDN_BASE_URL; if (!endpoint || !accessKey || !secretKey) { // 缺少关键配置时立即抛错,避免在后续真正上传时才暴露连接失败的问题 throw new Error('缺少华为 OBS 配置: OBS_ENDPOINT / OBS_ACCESS_KEY / OBS_SECRET_KEY'); } return { endpoint, accessKey, secretKey, region, basePrefix: basePrefix || '', cdnBaseUrl, }; } }