* 将代理设置应用到 Electron session * 这会影响所有通过 Electron 发起的网络请求(包括主进程的 fetch)
(config: ProxyConfig)
| 124 | * 这会影响所有通过 Electron 发起的网络请求(包括主进程的 fetch) |
| 125 | */ |
| 126 | async function applyProxyConfigToSession(config: ProxyConfig): Promise<void> { |
| 127 | try { |
| 128 | switch (config.mode) { |
| 129 | case 'off': |
| 130 | // 直接连接,不使用代理 |
| 131 | await session.defaultSession.setProxy({ |
| 132 | mode: 'direct', |
| 133 | }) |
| 134 | console.log('[Proxy] Proxy disabled (direct connection)') |
| 135 | break |
| 136 | |
| 137 | case 'system': |
| 138 | // 使用系统代理设置 |
| 139 | await session.defaultSession.setProxy({ |
| 140 | mode: 'system', |
| 141 | }) |
| 142 | console.log('[Proxy] Using system proxy') |
| 143 | break |
| 144 | |
| 145 | case 'manual': |
| 146 | // 手动配置代理 |
| 147 | if (config.url) { |
| 148 | const validation = validateProxyUrl(config.url) |
| 149 | if (validation.valid) { |
| 150 | await session.defaultSession.setProxy({ |
| 151 | proxyRules: config.url, |
| 152 | }) |
| 153 | console.log(`[Proxy] Manual proxy enabled: ${config.url}`) |
| 154 | } else { |
| 155 | // URL 无效,回退到系统代理 |
| 156 | await session.defaultSession.setProxy({ |
| 157 | mode: 'system', |
| 158 | }) |
| 159 | console.log('[Proxy] Invalid manual proxy URL, falling back to system proxy') |
| 160 | } |
| 161 | } else { |
| 162 | // 没有填写 URL,回退到系统代理 |
| 163 | await session.defaultSession.setProxy({ |
| 164 | mode: 'system', |
| 165 | }) |
| 166 | console.log('[Proxy] Manual proxy URL not configured, falling back to system proxy') |
| 167 | } |
| 168 | break |
| 169 | |
| 170 | default: |
| 171 | // 未知模式,使用系统代理 |
| 172 | await session.defaultSession.setProxy({ |
| 173 | mode: 'system', |
| 174 | }) |
| 175 | console.log('[Proxy] Unknown proxy mode, using system proxy') |
| 176 | } |
| 177 | } catch (error) { |
| 178 | console.error('[Proxy] Failed to set proxy:', error) |
| 179 | } |
| 180 | } |
| 181 | |
| 182 | export function applyProxyToSession(): Promise<void> { |
| 183 | return proxyApplyQueue.apply(() => applyProxyConfigToSession(loadProxyConfig())) |
no test coverage detected