@@ -36,6 +36,29 @@ import {
36
36
import { refreshMenu } from './menus.mjs'
37
37
import { registerCommands } from './commands.mjs'
38
38
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
+
39
62
async function executeApi ( session , port , config ) {
40
63
if ( chatgptWebModelKeys . includes ( session . modelName ) ) {
41
64
let tabId
@@ -47,14 +70,10 @@ async function executeApi(session, port, config) {
47
70
if ( tab ) tabId = tab . id
48
71
}
49
72
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
+ }
58
77
} else {
59
78
const accessToken = await getChatGptAccessToken ( )
60
79
await generateAnswersWithChatgptWebApi ( port , session . question , session , accessToken )
0 commit comments