@@ -4,161 +4,85 @@ import {
4
4
deleteConversation ,
5
5
generateAnswersWithChatgptWebApi ,
6
6
sendMessageFeedback ,
7
- } from './apis/chatgpt-web'
8
- import { generateAnswersWithBingWebApi } from './apis/bing-web.mjs'
7
+ } from '../services /apis/chatgpt-web'
8
+ import { generateAnswersWithBingWebApi } from '../services /apis/bing-web.mjs'
9
9
import {
10
10
generateAnswersWithChatgptApi ,
11
11
generateAnswersWithGptCompletionApi ,
12
- } from './apis/openai-api'
13
- import { generateAnswersWithCustomApi } from './apis/custom-api.mjs'
14
- import { generateAnswersWithAzureOpenaiApi } from './apis/azure-openai-api.mjs'
15
- import { generateAnswersWithWaylaidwandererApi } from './apis/waylaidwanderer-api.mjs'
16
- import { generateAnswersWithPoeWebApi } from './apis/poe-web.mjs'
12
+ } from '../services /apis/openai-api'
13
+ import { generateAnswersWithCustomApi } from '../services /apis/custom-api.mjs'
14
+ import { generateAnswersWithAzureOpenaiApi } from '../services /apis/azure-openai-api.mjs'
15
+ import { generateAnswersWithWaylaidwandererApi } from '../services /apis/waylaidwanderer-api.mjs'
16
+ import { generateAnswersWithPoeWebApi } from '../services /apis/poe-web.mjs'
17
17
import {
18
18
azureOpenAiApiModelKeys ,
19
19
bingWebModelKeys ,
20
20
chatgptApiModelKeys ,
21
21
chatgptWebModelKeys ,
22
- clearOldAccessToken ,
23
22
customApiModelKeys ,
24
- defaultConfig ,
25
- getPreferredLanguageKey ,
26
- getUserConfig ,
27
23
githubThirdPartyApiModelKeys ,
28
24
gptApiModelKeys ,
29
25
Models ,
30
26
poeWebModelKeys ,
31
- setAccessToken ,
32
27
} from '../config/index.mjs'
33
- import { config as menuConfig } from '../content-script/menu-tools'
34
- import { t , changeLanguage } from 'i18next'
35
28
import '../_locales/i18n'
36
29
import { openUrl } from '../utils/open-url'
37
-
38
- async function getChatGptAccessToken ( ) {
39
- await clearOldAccessToken ( )
40
- const userConfig = await getUserConfig ( )
41
- if ( userConfig . accessToken ) {
42
- return userConfig . accessToken
43
- } else {
44
- const cookie = ( await Browser . cookies . getAll ( { url : 'https://chat.openai.com/' } ) )
45
- . map ( ( cookie ) => {
46
- return `${ cookie . name } =${ cookie . value } `
47
- } )
48
- . join ( '; ' )
49
- const resp = await fetch ( 'https://chat.openai.com/api/auth/session' , {
50
- headers : {
51
- Cookie : cookie ,
52
- } ,
53
- } )
54
- if ( resp . status === 403 ) {
55
- throw new Error ( 'CLOUDFLARE' )
56
- }
57
- const data = await resp . json ( ) . catch ( ( ) => ( { } ) )
58
- if ( ! data . accessToken ) {
59
- throw new Error ( 'UNAUTHORIZED' )
30
+ import {
31
+ getBingAccessToken ,
32
+ getChatGptAccessToken ,
33
+ registerPortListener ,
34
+ } from '../services/wrappers.mjs'
35
+ import { refreshMenu } from './menus.mjs'
36
+ import { registerCommands } from './commands.mjs'
37
+
38
+ async function executeApi ( session , port , config ) {
39
+ if ( chatgptWebModelKeys . includes ( session . modelName ) ) {
40
+ const accessToken = await getChatGptAccessToken ( )
41
+ session . messageId = uuidv4 ( )
42
+ if ( session . parentMessageId == null ) {
43
+ session . parentMessageId = uuidv4 ( )
60
44
}
61
- await setAccessToken ( data . accessToken )
62
- return data . accessToken
45
+ await generateAnswersWithChatgptWebApi ( port , session . question , session , accessToken )
46
+ } else if ( bingWebModelKeys . includes ( session . modelName ) ) {
47
+ const accessToken = await getBingAccessToken ( )
48
+ if ( session . modelName === 'bingFreeSydney' )
49
+ await generateAnswersWithBingWebApi ( port , session . question , session , accessToken , true )
50
+ else await generateAnswersWithBingWebApi ( port , session . question , session , accessToken )
51
+ } else if ( gptApiModelKeys . includes ( session . modelName ) ) {
52
+ await generateAnswersWithGptCompletionApi (
53
+ port ,
54
+ session . question ,
55
+ session ,
56
+ config . apiKey ,
57
+ session . modelName ,
58
+ )
59
+ } else if ( chatgptApiModelKeys . includes ( session . modelName ) ) {
60
+ await generateAnswersWithChatgptApi (
61
+ port ,
62
+ session . question ,
63
+ session ,
64
+ config . apiKey ,
65
+ session . modelName ,
66
+ )
67
+ } else if ( customApiModelKeys . includes ( session . modelName ) ) {
68
+ await generateAnswersWithCustomApi ( port , session . question , session , '' , config . customModelName )
69
+ } else if ( azureOpenAiApiModelKeys . includes ( session . modelName ) ) {
70
+ await generateAnswersWithAzureOpenaiApi ( port , session . question , session )
71
+ } else if ( githubThirdPartyApiModelKeys . includes ( session . modelName ) ) {
72
+ await generateAnswersWithWaylaidwandererApi ( port , session . question , session )
73
+ } else if ( poeWebModelKeys . includes ( session . modelName ) ) {
74
+ if ( session . modelName === 'poeAiWebCustom' )
75
+ await generateAnswersWithPoeWebApi ( port , session . question , session , config . poeCustomBotName )
76
+ else
77
+ await generateAnswersWithPoeWebApi (
78
+ port ,
79
+ session . question ,
80
+ session ,
81
+ Models [ session . modelName ] . value ,
82
+ )
63
83
}
64
84
}
65
85
66
- async function getBingAccessToken ( ) {
67
- return ( await Browser . cookies . get ( { url : 'https://bing.com/' , name : '_U' } ) ) ?. value
68
- }
69
-
70
- Browser . runtime . onConnect . addListener ( ( port ) => {
71
- console . debug ( 'connected' )
72
- const onMessage = async ( msg ) => {
73
- console . debug ( 'received msg' , msg )
74
- const session = msg . session
75
- if ( ! session ) return
76
- const config = await getUserConfig ( )
77
- if ( ! session . modelName ) session . modelName = config . modelName
78
- if ( ! session . aiName ) session . aiName = Models [ session . modelName ] . desc
79
- port . postMessage ( { session } )
80
-
81
- try {
82
- if ( chatgptWebModelKeys . includes ( session . modelName ) ) {
83
- const accessToken = await getChatGptAccessToken ( )
84
- session . messageId = uuidv4 ( )
85
- if ( session . parentMessageId == null ) {
86
- session . parentMessageId = uuidv4 ( )
87
- }
88
- await generateAnswersWithChatgptWebApi ( port , session . question , session , accessToken )
89
- } else if ( bingWebModelKeys . includes ( session . modelName ) ) {
90
- const accessToken = await getBingAccessToken ( )
91
- if ( session . modelName === 'bingFreeSydney' )
92
- await generateAnswersWithBingWebApi ( port , session . question , session , accessToken , true )
93
- else await generateAnswersWithBingWebApi ( port , session . question , session , accessToken )
94
- } else if ( gptApiModelKeys . includes ( session . modelName ) ) {
95
- await generateAnswersWithGptCompletionApi (
96
- port ,
97
- session . question ,
98
- session ,
99
- config . apiKey ,
100
- session . modelName ,
101
- )
102
- } else if ( chatgptApiModelKeys . includes ( session . modelName ) ) {
103
- await generateAnswersWithChatgptApi (
104
- port ,
105
- session . question ,
106
- session ,
107
- config . apiKey ,
108
- session . modelName ,
109
- )
110
- } else if ( customApiModelKeys . includes ( session . modelName ) ) {
111
- await generateAnswersWithCustomApi (
112
- port ,
113
- session . question ,
114
- session ,
115
- '' ,
116
- config . customModelName ,
117
- )
118
- } else if ( azureOpenAiApiModelKeys . includes ( session . modelName ) ) {
119
- await generateAnswersWithAzureOpenaiApi ( port , session . question , session )
120
- } else if ( githubThirdPartyApiModelKeys . includes ( session . modelName ) ) {
121
- await generateAnswersWithWaylaidwandererApi ( port , session . question , session )
122
- } else if ( poeWebModelKeys . includes ( session . modelName ) ) {
123
- if ( session . modelName === 'poeAiWebCustom' )
124
- await generateAnswersWithPoeWebApi (
125
- port ,
126
- session . question ,
127
- session ,
128
- config . poeCustomBotName ,
129
- )
130
- else
131
- await generateAnswersWithPoeWebApi (
132
- port ,
133
- session . question ,
134
- session ,
135
- Models [ session . modelName ] . value ,
136
- )
137
- }
138
- } catch ( err ) {
139
- console . error ( err )
140
- if ( ! err . message . includes ( 'aborted' ) ) {
141
- if (
142
- [ 'message you submitted was too long' , 'maximum context length' ] . some ( ( m ) =>
143
- err . message . includes ( m ) ,
144
- )
145
- )
146
- port . postMessage ( { error : t ( 'Exceeded maximum context length' ) + '\n' + err . message } )
147
- else port . postMessage ( { error : err . message } )
148
- }
149
- }
150
- }
151
-
152
- const onDisconnect = ( ) => {
153
- console . debug ( 'port disconnected, remove listener' )
154
- port . onMessage . removeListener ( onMessage )
155
- port . onDisconnect . removeListener ( onDisconnect )
156
- }
157
-
158
- port . onMessage . addListener ( onMessage )
159
- port . onDisconnect . addListener ( onDisconnect )
160
- } )
161
-
162
86
Browser . runtime . onMessage . addListener ( async ( message ) => {
163
87
if ( message . type === 'FEEDBACK' ) {
164
88
const token = await getChatGptAccessToken ( )
@@ -170,105 +94,11 @@ Browser.runtime.onMessage.addListener(async (message) => {
170
94
} else if ( message . type === 'OPEN_URL' ) {
171
95
const data = message . data
172
96
openUrl ( data . url )
173
- }
174
- } )
175
-
176
- Browser . commands . onCommand . addListener ( async ( command ) => {
177
- const message = {
178
- itemId : command ,
179
- selectionText : '' ,
180
- useMenuPosition : false ,
181
- }
182
- console . debug ( 'command triggered' , message )
183
-
184
- if ( command in menuConfig ) {
185
- if ( menuConfig [ command ] . action ) {
186
- menuConfig [ command ] . action ( )
187
- }
188
-
189
- if ( menuConfig [ command ] . genPrompt ) {
190
- const currentTab = ( await Browser . tabs . query ( { active : true , currentWindow : true } ) ) [ 0 ]
191
- Browser . tabs . sendMessage ( currentTab . id , {
192
- type : 'CREATE_CHAT' ,
193
- data : message ,
194
- } )
195
- }
196
- }
197
- } )
198
-
199
- function refreshMenu ( ) {
200
- Browser . contextMenus . removeAll ( ) . then ( async ( ) => {
201
- await getPreferredLanguageKey ( ) . then ( ( lang ) => {
202
- changeLanguage ( lang )
203
- } )
204
- const menuId = 'ChatGPTBox-Menu'
205
- Browser . contextMenus . create ( {
206
- id : menuId ,
207
- title : 'ChatGPTBox' ,
208
- contexts : [ 'all' ] ,
209
- } )
210
-
211
- for ( const [ k , v ] of Object . entries ( menuConfig ) ) {
212
- Browser . contextMenus . create ( {
213
- id : menuId + k ,
214
- parentId : menuId ,
215
- title : t ( v . label ) ,
216
- contexts : [ 'all' ] ,
217
- } )
218
- }
219
- Browser . contextMenus . create ( {
220
- id : menuId + 'separator1' ,
221
- parentId : menuId ,
222
- contexts : [ 'selection' ] ,
223
- type : 'separator' ,
224
- } )
225
- for ( const index in defaultConfig . selectionTools ) {
226
- const key = defaultConfig . selectionTools [ index ]
227
- const desc = defaultConfig . selectionToolsDesc [ index ]
228
- Browser . contextMenus . create ( {
229
- id : menuId + key ,
230
- parentId : menuId ,
231
- title : t ( desc ) ,
232
- contexts : [ 'selection' ] ,
233
- } )
234
- }
235
-
236
- Browser . contextMenus . onClicked . addListener ( ( info , tab ) => {
237
- Browser . tabs . query ( { active : true , currentWindow : true } ) . then ( ( tabs ) => {
238
- const currentTab = tabs [ 0 ]
239
- const message = {
240
- itemId : info . menuItemId . replace ( menuId , '' ) ,
241
- selectionText : info . selectionText ,
242
- useMenuPosition : tab . id === currentTab . id ,
243
- }
244
- console . debug ( 'menu clicked' , message )
245
-
246
- if ( defaultConfig . selectionTools . includes ( message . itemId ) ) {
247
- Browser . tabs . sendMessage ( currentTab . id , {
248
- type : 'CREATE_CHAT' ,
249
- data : message ,
250
- } )
251
- } else if ( message . itemId in menuConfig ) {
252
- if ( menuConfig [ message . itemId ] . action ) {
253
- menuConfig [ message . itemId ] . action ( )
254
- }
255
-
256
- if ( menuConfig [ message . itemId ] . genPrompt ) {
257
- Browser . tabs . sendMessage ( currentTab . id , {
258
- type : 'CREATE_CHAT' ,
259
- data : message ,
260
- } )
261
- }
262
- }
263
- } )
264
- } )
265
- } )
266
- }
267
-
268
- Browser . runtime . onMessage . addListener ( async ( message ) => {
269
- if ( message . type === 'REFRESH_MENU' ) {
97
+ } else if ( message . type === 'REFRESH_MENU' ) {
270
98
refreshMenu ( )
271
99
}
272
100
} )
273
101
102
+ registerPortListener ( async ( session , port , config ) => await executeApi ( session , port , config ) )
103
+ registerCommands ( )
274
104
refreshMenu ( )
0 commit comments