11import type { PacSlot } from "./pac-script" ;
22import { shouldBypass , chromeBypassList , deviceRpcApiHost } from "./bypass-rules" ;
33import { getKillSwitch } from "./kill-switch" ;
4+ import type {
5+ FirefoxGlobal ,
6+ FirefoxProxyApi ,
7+ FirefoxProxyDetails ,
8+ FirefoxProxyInfo ,
9+ FirefoxProxyRequestListener ,
10+ } from "../types/firefox-webext" ;
411
512export interface ProxyConfig {
613 host : string ;
@@ -23,21 +30,8 @@ const STORAGE_KEYS = {
2330 CONFIG : "proxy_config" ,
2431} as const ;
2532
26- type FirefoxProxyInfo = {
27- type : "http" | "https" | "socks" | "socks4" | "direct" ;
28- host ?: string ;
29- port ?: number ;
30- username ?: string ;
31- password ?: string ;
32- failoverTimeout ?: number ;
33- } ;
34-
35- type FirefoxProxyDetails = {
36- url : string ;
37- } ;
38-
39- function getFirefoxProxyApi ( ) : any | null {
40- return ( globalThis as any ) . browser ?. proxy ?? null ;
33+ function getFirefoxProxyApi ( ) : FirefoxProxyApi | null {
34+ return ( globalThis as FirefoxGlobal ) . browser ?. proxy ?? null ;
4135}
4236
4337function isFirefoxProxyApiAvailable ( ) : boolean {
@@ -51,7 +45,7 @@ function firefoxProxyType(scheme: ProxyConfig["scheme"]): FirefoxProxyInfo["type
5145class ProxyManager {
5246 private state : ProxyState = { enabled : false , mode : "direct" , config : null } ;
5347 private firefoxConfig : ProxyConfig | null = null ;
54- private firefoxListener : ( ( details : FirefoxProxyDetails ) => FirefoxProxyInfo [ ] ) | null = null ;
48+ private firefoxListener : FirefoxProxyRequestListener | null = null ;
5549 private firefoxMultiIpSlots : PacSlot [ ] = [ ] ;
5650 private killSwitchEnabled = true ;
5751
@@ -77,8 +71,9 @@ class ProxyManager {
7771 }
7872 }
7973
80- private ensureFirefoxListener ( ) : void {
81- if ( this . firefoxListener ) return ;
74+ /** Returns the single-proxy listener, creating it on first use. */
75+ private ensureFirefoxListener ( ) : FirefoxProxyRequestListener {
76+ if ( this . firefoxListener ) return this . firefoxListener ;
8277
8378 this . firefoxListener = ( details : FirefoxProxyDetails ) : FirefoxProxyInfo [ ] => {
8479 const config = this . firefoxConfig ;
@@ -108,24 +103,26 @@ class ProxyManager {
108103 }
109104 return [ proxyInfo , { type : "direct" } ] ;
110105 } ;
106+
107+ return this . firefoxListener ;
111108 }
112109
113110 private addFirefoxProxyListener ( config : ProxyConfig ) : void {
114111 const firefoxProxyApi = getFirefoxProxyApi ( ) ;
115112 if ( ! firefoxProxyApi ?. onRequest ) return ;
116113
117- this . ensureFirefoxListener ( ) ;
114+ const listener = this . ensureFirefoxListener ( ) ;
118115 this . firefoxConfig = config ;
119116
120117 try {
121- if ( firefoxProxyApi . onRequest . hasListener ( this . firefoxListener ) ) {
122- firefoxProxyApi . onRequest . removeListener ( this . firefoxListener ) ;
118+ if ( firefoxProxyApi . onRequest . hasListener ( listener ) ) {
119+ firefoxProxyApi . onRequest . removeListener ( listener ) ;
123120 }
124121 } catch {
125122 // Ignore stale listener cleanup failures.
126123 }
127124
128- firefoxProxyApi . onRequest . addListener ( this . firefoxListener , {
125+ firefoxProxyApi . onRequest . addListener ( listener , {
129126 urls : [ "<all_urls>" ] ,
130127 } ) ;
131128 }
@@ -151,7 +148,11 @@ class ProxyManager {
151148 enableMultiIp ( slots : PacSlot [ ] ) : void {
152149 if ( ! isFirefoxProxyApiAvailable ( ) || slots . length === 0 ) return ;
153150
154- const firefoxProxyApi = getFirefoxProxyApi ( ) ;
151+ const onRequest = getFirefoxProxyApi ( ) ?. onRequest ;
152+ // isFirefoxProxyApiAvailable() above already established this; the explicit
153+ // check is what narrows the optional event for the type checker.
154+ if ( ! onRequest ) return ;
155+
155156 this . removeFirefoxProxyListener ( ) ;
156157
157158 this . firefoxMultiIpSlots = slots ;
@@ -182,7 +183,7 @@ class ProxyManager {
182183 return proxies ;
183184 } ;
184185
185- firefoxProxyApi . onRequest . addListener ( this . firefoxListener , {
186+ onRequest . addListener ( this . firefoxListener , {
186187 urls : [ "<all_urls>" ] ,
187188 } ) ;
188189
0 commit comments