1- import Browser from 'webextension-polyfill'
1+ import Browser , { Runtime } from 'webextension-polyfill'
22import { CHATGPT_HOME_URL } from '~app/consts'
33import { proxyFetch } from '~services/proxy-fetch'
44import { RequestInitSubset } from '~types/messaging'
@@ -31,21 +31,29 @@ class ProxyFetchRequester implements Requester {
3131 }
3232 }
3333
34- waitForProxyTabReady ( onReady : ( tab : Browser . Tabs . Tab ) => void ) {
35- Browser . runtime . onMessage . addListener ( async function listener ( message , sender ) {
36- if ( message . event === 'PROXY_TAB_READY' ) {
37- console . debug ( 'new proxy tab ready' )
38- Browser . runtime . onMessage . removeListener ( listener )
39- onReady ( sender . tab ! )
34+ waitForProxyTabReady ( ) : Promise < Browser . Tabs . Tab > {
35+ return new Promise ( ( resolve , reject ) => {
36+ const listener = async function ( message : any , sender : Runtime . MessageSender ) {
37+ if ( message . event === 'PROXY_TAB_READY' ) {
38+ console . debug ( 'new proxy tab ready' )
39+ Browser . runtime . onMessage . removeListener ( listener )
40+ clearTimeout ( timer )
41+ resolve ( sender . tab ! )
42+ }
4043 }
44+ const timer = setTimeout ( ( ) => {
45+ Browser . runtime . onMessage . removeListener ( listener )
46+ reject ( new Error ( 'Timeout waiting for ChatGPT tab' ) )
47+ } , 10 * 1000 )
48+
49+ Browser . runtime . onMessage . addListener ( listener )
4150 } )
4251 }
4352
4453 async createProxyTab ( ) {
45- return new Promise < Browser . Tabs . Tab > ( ( resolve ) => {
46- this . waitForProxyTabReady ( resolve )
47- Browser . tabs . create ( { url : CHATGPT_HOME_URL , pinned : true } )
48- } )
54+ const readyPromise = this . waitForProxyTabReady ( )
55+ Browser . tabs . create ( { url : CHATGPT_HOME_URL , pinned : true } )
56+ return readyPromise
4957 }
5058
5159 async getProxyTab ( ) {
@@ -62,10 +70,9 @@ class ProxyFetchRequester implements Requester {
6270 await this . createProxyTab ( )
6371 return
6472 }
65- return new Promise < Browser . Tabs . Tab > ( ( resolve ) => {
66- this . waitForProxyTabReady ( resolve )
67- Browser . tabs . reload ( tab . id ! )
68- } )
73+ const readyPromise = this . waitForProxyTabReady ( )
74+ Browser . tabs . reload ( tab . id ! )
75+ return readyPromise
6976 }
7077
7178 async fetch ( url : string , options ?: RequestInitSubset ) {
0 commit comments