(key: string, value: string)
| 195 | } |
| 196 | |
| 197 | static validateConfig(key: string, value: string): { isValid: boolean; error?: string } { |
| 198 | if (value.length > 10000) { |
| 199 | return { isValid: false, error: "输入值过长,最大允许10000字符" }; |
| 200 | } |
| 201 | |
| 202 | const validators = { |
| 203 | [CONFIG_KEYS.GEMINI_API_KEY]: (v: string) => { |
| 204 | if (!v || v.trim().length === 0) return "API密钥不能为空"; |
| 205 | if (v.length < 10) return "API密钥格式无效"; |
| 206 | if (!/^[A-Za-z0-9_-]+$/.test(v)) return "API密钥包含无效字符"; |
| 207 | return null; |
| 208 | }, |
| 209 | [CONFIG_KEYS.GEMINI_MAX_TOKENS]: (v: string) => { |
| 210 | const tokens = parseInt(v); |
| 211 | if (isNaN(tokens) || tokens < 0) return "Token数量必须为非负整数"; |
| 212 | if (tokens > 1000000) return "Token数量过大,最大允许1000000"; |
| 213 | return null; |
| 214 | }, |
| 215 | [CONFIG_KEYS.GEMINI_BASE_URL]: (v: string) => { |
| 216 | if (v && !v.startsWith('http')) return "URL必须以http://或https://开头"; |
| 217 | if (v && v.length > 500) return "URL长度过长"; |
| 218 | |
| 219 | if (v) { |
| 220 | try { |
| 221 | new URL(v); |
| 222 | } catch { |
| 223 | return "URL格式无效"; |
| 224 | } |
| 225 | } |
| 226 | return null; |
| 227 | }, |
| 228 | [CONFIG_KEYS.GEMINI_TELEGRAPH_LIMIT]: (v: string) => { |
| 229 | const limit = parseInt(v); |
| 230 | if (isNaN(limit) || limit < 0) return "限制必须为非负整数"; |
| 231 | if (limit > 100000) return "限制值过大,最大允许100000"; |
| 232 | return null; |
| 233 | }, |
| 234 | [CONFIG_KEYS.GEMINI_CONTEXT_ENABLED]: (v: string) => { |
| 235 | if (v !== "on" && v !== "off") return "值必须为 'on' 或 'off'"; |
| 236 | return null; |
| 237 | }, |
| 238 | [CONFIG_KEYS.GEMINI_TELEGRAPH_ENABLED]: (v: string) => { |
| 239 | if (v !== "on" && v !== "off") return "值必须为 'on' 或 'off'"; |
| 240 | return null; |
| 241 | }, |
| 242 | [CONFIG_KEYS.GEMINI_COLLAPSIBLE_QUOTE_ENABLED]: (v: string) => { |
| 243 | if (v !== "on" && v !== "off") return "值必须为 'on' 或 'off'"; |
| 244 | return null; |
| 245 | } |
| 246 | }; |
| 247 | const validator = validators[key]; |
| 248 | if (validator) { |
| 249 | const error = validator(value); |
| 250 | return error ? { isValid: false, error } : { isValid: true }; |
| 251 | } |
| 252 | return { isValid: true }; |
| 253 | } |
| 254 |
no outgoing calls
no test coverage detected