7ea463ed08
保留 SpacetimeDB 历史表、迁移白名单与最小兼容读取定义 移除旧创作前后端、worker、业务过程及纯业务 crate 的编译依赖 恢复现役创作、项目、我的入口及桌面移动导航 收紧 Vite、TypeScript、ESLint、Vitest 与静态资源退役边界 补齐开发栈、网关、原生壳和文档退役约束
81 lines
2.7 KiB
JavaScript
81 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 后生效。');
|