071faa482c
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口 完成项目 TypeScript/Prettier 与 Rust 全量格式化 修复 Pingora expected executable 门禁的空白敏感误报 同步开发运维文档与 AGC skill pack 格式化忽略规则
83 lines
2.7 KiB
JavaScript
83 lines
2.7 KiB
JavaScript
import { mergeApiServerEnv } from './dev-utils.mjs';
|
||
|
||
const REQUIRED_FOR_PUZZLE_GENERATION = [
|
||
'VECTOR_ENGINE_BASE_URL',
|
||
'VECTOR_ENGINE_API_KEY',
|
||
'ALIYUN_OSS_BUCKET',
|
||
'ALIYUN_OSS_ENDPOINT',
|
||
'ALIYUN_OSS_ACCESS_KEY_ID',
|
||
'ALIYUN_OSS_ACCESS_KEY_SECRET',
|
||
];
|
||
|
||
const COMMON_MISTYPED_KEYS = [
|
||
'ALIYUN_0SS_BUCKET',
|
||
'ALIYUN_0SS_ENDPOINT',
|
||
'ALIYUN_0SS_ACCESS_KEY_ID',
|
||
'ALIYUN_0SS_ACCESS_KEY_SECRET',
|
||
];
|
||
|
||
function hasValue(value) {
|
||
return typeof value === 'string' && value.trim().length > 0;
|
||
}
|
||
|
||
function printStatus(key, present) {
|
||
console.log(`${key}: ${present ? 'present' : 'missing'}`);
|
||
}
|
||
|
||
const env = mergeApiServerEnv(process.cwd(), process.env);
|
||
const missing = [];
|
||
|
||
console.log('[api-server-env] 认证短信配置检查');
|
||
printStatus('SMS_AUTH_ENABLED', env.SMS_AUTH_ENABLED === 'true');
|
||
printStatus('SMS_AUTH_PROVIDER', hasValue(env.SMS_AUTH_PROVIDER));
|
||
|
||
console.log('[api-server-env] 编辑器真实生成配置检查');
|
||
for (const key of REQUIRED_FOR_PUZZLE_GENERATION) {
|
||
const present = hasValue(env[key]);
|
||
printStatus(key, present);
|
||
if (!present) {
|
||
missing.push(key);
|
||
}
|
||
}
|
||
|
||
const typoKeys = COMMON_MISTYPED_KEYS.filter((key) => hasValue(env[key]));
|
||
if (typoKeys.length > 0) {
|
||
console.log(
|
||
`[api-server-env] 检测到疑似拼错的 OSS 键名:${typoKeys.join(', ')}`,
|
||
);
|
||
}
|
||
|
||
// 阿里云通用抠图兜底层:默认 enabled=true,但 AccessKey 缺失时会被静默跳过,
|
||
// BgFilter 失败直接本地去背(质量下降)。属可选降级项,只告警不阻断部署。
|
||
console.log('[api-server-env] 抠图兜底(阿里云通用抠图)配置检查');
|
||
const mattingEnabled = env.GENARRATIVE_ALIYUN_MATTING_ENABLED !== 'false';
|
||
const mattingKeyPresent =
|
||
hasValue(env.GENARRATIVE_ALIYUN_MATTING_ACCESS_KEY_ID) ||
|
||
hasValue(env.ALIBABA_CLOUD_ACCESS_KEY_ID);
|
||
const mattingSecretPresent =
|
||
hasValue(env.GENARRATIVE_ALIYUN_MATTING_ACCESS_KEY_SECRET) ||
|
||
hasValue(env.ALIBABA_CLOUD_ACCESS_KEY_SECRET);
|
||
printStatus(
|
||
'GENARRATIVE_ALIYUN_MATTING_ACCESS_KEY_ID / ALIBABA_CLOUD_ACCESS_KEY_ID',
|
||
mattingKeyPresent,
|
||
);
|
||
printStatus(
|
||
'GENARRATIVE_ALIYUN_MATTING_ACCESS_KEY_SECRET / ALIBABA_CLOUD_ACCESS_KEY_SECRET',
|
||
mattingSecretPresent,
|
||
);
|
||
if (mattingEnabled && !(mattingKeyPresent && mattingSecretPresent)) {
|
||
console.warn(
|
||
'[api-server-env] 警告:GENARRATIVE_ALIYUN_MATTING_ENABLED 未关闭但缺少 AccessKey,' +
|
||
'阿里云抠图兜底层将被跳过,BgFilter 失败后直接本地去背(质量下降)。',
|
||
);
|
||
}
|
||
|
||
if (missing.length > 0) {
|
||
console.error(`[api-server-env] 缺少:${missing.join(', ')}`);
|
||
process.exit(1);
|
||
}
|
||
|
||
console.log(
|
||
'[api-server-env] 配置齐全。重启 npm run dev:api-server 或 npm run dev 后生效。',
|
||
);
|