/** * Relay 配置加载 */ export function getPort(): number { return process.env.PORT ? parseInt(process.env.PORT, 10) : 4000; } export function getDbPath(): string { return process.env.DB_PATH || './data/relay.db'; } export function getAdminKey(): string { return process.env.ADMIN_KEY || ''; } /** Shared secret configured once on the upstream token-wide callback. */ export function getUpstreamCallbackSecret(): string { return process.env.UPSTREAM_CALLBACK_SECRET || ''; } export function getLogLevel(): string { return process.env.LOG_LEVEL || 'info'; } export function getEventTtlSeconds(): number { return process.env.EVENT_TTL_SECONDS ? parseInt(process.env.EVENT_TTL_SECONDS, 10) : 604800; } export function getMaxPendingEventsPerTenant(): number { return process.env.MAX_PENDING_EVENTS_PER_TENANT ? parseInt(process.env.MAX_PENDING_EVENTS_PER_TENANT, 10) : 5000; } export function getPollBatchSize(): number { return process.env.POLL_BATCH_SIZE ? parseInt(process.env.POLL_BATCH_SIZE, 10) : 100; } export function getPollWaitMs(): number { return process.env.POLL_WAIT_MS ? parseInt(process.env.POLL_WAIT_MS, 10) : 30000; } /** Relay 对外公网地址(注册接口返回给客户端) */ export function getRelayPublicUrl(): string { return ( process.env.RELAY_PUBLIC_URL || `http://${process.env.HOST || '8.138.37.248'}:${getPort()}` ); } /** Fmode 网关地址,用于校验用户 token */ export function getFmodeGatewayUrl(): string { return (process.env.FMODE_GATEWAY_URL || 'https://server.fmode.cn/api/qiwei').replace(/\/$/, ''); } /** 校验 Fmode token 时调用的 doApi method(默认用 /user/getProfile) */ export function getFmodeTokenValidateMethod(): string { return process.env.FMODE_TOKEN_VALIDATE_METHOD || '/user/getProfile'; } /** 注册接口 IP 限流窗口(秒),默认 60 秒 */ export function getRegisterRateLimitSeconds(): number { return process.env.REGISTER_RATE_LIMIT_SECONDS ? parseInt(process.env.REGISTER_RATE_LIMIT_SECONDS, 10) : 60; } /** 注册接口单个 IP 在窗口内最多允许次数 */ export function getRegisterRateLimitPerIp(): number { return process.env.REGISTER_RATE_LIMIT_PER_IP ? parseInt(process.env.REGISTER_RATE_LIMIT_PER_IP, 10) : 5; } /** 单个 Fmode 用户在窗口内最多注册次数(通常 =1) */ export function getRegisterRateLimitPerUser(): number { return process.env.REGISTER_RATE_LIMIT_PER_USER ? parseInt(process.env.REGISTER_RATE_LIMIT_PER_USER, 10) : 1; }