@@ -36,6 +36,29 @@ import {
3636import { refreshMenu } from './menus.mjs'
3737import { registerCommands } from './commands.mjs'
3838
39+ function setPortProxy ( port , proxyTabId ) {
40+ port . proxy = Browser . tabs . connect ( proxyTabId )
41+ const proxyOnMessage = ( msg ) => {
42+ port . postMessage ( msg )
43+ }
44+ const portOnMessage = ( msg ) => {
45+ port . proxy . postMessage ( msg )
46+ }
47+ const proxyOnDisconnect = ( ) => {
48+ port . proxy = Browser . tabs . connect ( proxyTabId )
49+ }
50+ const portOnDisconnect = ( msg ) => {
51+ port . proxy . onMessage . removeListener ( proxyOnMessage )
52+ port . onMessage . removeListener ( portOnMessage )
53+ port . proxy . onDisconnect . removeListener ( proxyOnDisconnect )
54+ port . onDisconnect . removeListener ( portOnDisconnect )
55+ }
56+ port . proxy . onMessage . addListener ( proxyOnMessage )
57+ port . onMessage . addListener ( portOnMessage )
58+ port . proxy . onDisconnect . addListener ( proxyOnDisconnect )
59+ port . onDisconnect . addListener ( portOnDisconnect )
60+ }
61+
3962async function executeApi ( session , port , config ) {
4063 if ( chatgptWebModelKeys . includes ( session . modelName ) ) {
4164 let tabId
@@ -47,14 +70,10 @@ async function executeApi(session, port, config) {
4770 if ( tab ) tabId = tab . id
4871 }
4972 if ( tabId ) {
50- const proxyPort = Browser . tabs . connect ( tabId )
51- proxyPort . onMessage . addListener ( ( msg ) => {
52- port . postMessage ( msg )
53- } )
54- port . onMessage . addListener ( ( msg ) => {
55- proxyPort . postMessage ( msg )
56- } )
57- proxyPort . postMessage ( { session } )
73+ if ( ! port . proxy ) {
74+ setPortProxy ( port , tabId )
75+ port . proxy . postMessage ( { session } )
76+ }
5877 } else {
5978 const accessToken = await getChatGptAccessToken ( )
6079 await generateAnswersWithChatgptWebApi ( port , session . question , session , accessToken )
0 commit comments