fix: continuous 403 error caused by still requesting the official website when using reverse proxy (#207)

This commit is contained in:
josc146
2023-04-13 16:54:53 +08:00
parent 1ab53b4383
commit 40366ff7bd
5 changed files with 13 additions and 68 deletions
-31
View File
@@ -11,7 +11,6 @@
"@primer/octicons-react": "^18.2.0",
"countries-list": "^2.6.1",
"eventsource-parser": "^0.1.0",
"expiry-map": "^2.0.0",
"file-saver": "^2.0.5",
"github-markdown-css": "^5.2.0",
"gpt-3-encoder": "^1.1.4",
@@ -4210,17 +4209,6 @@
"node": ">=14.18"
}
},
"node_modules/expiry-map": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/expiry-map/-/expiry-map-2.0.0.tgz",
"integrity": "sha512-K1I5wJe2fiqjyUZf/xhxwTpaopw3F+19DsO7Oggl20+3SVTXDIevVRJav0aBMfposQdkl2E4+gnuOKd3j2X0sA==",
"dependencies": {
"map-age-cleaner": "^0.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
@@ -5756,17 +5744,6 @@
"node": ">=8"
}
},
"node_modules/map-age-cleaner": {
"version": "0.2.0",
"resolved": "https://registry.npmmirror.com/map-age-cleaner/-/map-age-cleaner-0.2.0.tgz",
"integrity": "sha512-AvxTC6id0fzSf6OyNBTp1syyCuKO7nOJvHgYlhT0Qkkjvk40zZo+av3ayVgXlxnF/DxEzEfY9mMdd7FHsd+wKQ==",
"dependencies": {
"p-defer": "^1.0.0"
},
"engines": {
"node": ">=7.6"
}
},
"node_modules/markdown-table": {
"version": "3.0.3",
"resolved": "https://registry.npmmirror.com/markdown-table/-/markdown-table-3.0.3.tgz",
@@ -6611,14 +6588,6 @@
"node": ">= 0.4.0"
}
},
"node_modules/p-defer": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/p-defer/-/p-defer-1.0.0.tgz",
"integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
"engines": {
"node": ">=4"
}
},
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz",
-1
View File
@@ -24,7 +24,6 @@
"@primer/octicons-react": "^18.2.0",
"countries-list": "^2.6.1",
"eventsource-parser": "^0.1.0",
"expiry-map": "^2.0.0",
"file-saver": "^2.0.5",
"github-markdown-css": "^5.2.0",
"gpt-3-encoder": "^1.1.4",
-6
View File
@@ -73,9 +73,6 @@ export async function generateAnswersWithGptCompletionApi(
async onError(resp) {
port.onMessage.removeListener(messageListener)
if (resp instanceof Error) throw resp
if (resp.status === 403) {
throw new Error('CLOUDFLARE')
}
const error = await resp.json().catch(() => ({}))
throw new Error(!isEmpty(error) ? JSON.stringify(error) : `${resp.status} ${resp.statusText}`)
},
@@ -139,9 +136,6 @@ export async function generateAnswersWithChatgptApi(port, question, session, api
async onError(resp) {
port.onMessage.removeListener(messageListener)
if (resp instanceof Error) throw resp
if (resp.status === 403) {
throw new Error('CLOUDFLARE')
}
const error = await resp.json().catch(() => ({}))
throw new Error(!isEmpty(error) ? JSON.stringify(error) : `${resp.status} ${resp.statusText}`)
},
+8 -19
View File
@@ -1,5 +1,4 @@
import Browser from 'webextension-polyfill'
import ExpiryMap from 'expiry-map'
import {
deleteConversation,
generateAnswersWithChatgptWebApi,
@@ -18,6 +17,7 @@ import {
bingWebModelKeys,
chatgptApiModelKeys,
chatgptWebModelKeys,
clearOldAccessToken,
customApiModelKeys,
defaultConfig,
getPreferredLanguageKey,
@@ -25,27 +25,18 @@ import {
githubThirdPartyApiModelKeys,
gptApiModelKeys,
Models,
setAccessToken,
} from '../config/index.mjs'
import { isSafari } from '../utils/is-safari'
import { config as menuConfig } from '../content-script/menu-tools'
import { t, changeLanguage } from 'i18next'
import '../_locales/i18n'
import { openUrl } from '../utils/open-url'
const KEY_ACCESS_TOKEN = 'accessToken'
const cache = new ExpiryMap(10 * 1000)
async function getChatGptAccessToken() {
if (cache.get(KEY_ACCESS_TOKEN)) {
return cache.get(KEY_ACCESS_TOKEN)
}
if (isSafari()) {
const userConfig = await getUserConfig()
if (userConfig.accessToken) {
cache.set(KEY_ACCESS_TOKEN, userConfig.accessToken)
} else {
throw new Error('UNAUTHORIZED')
}
await clearOldAccessToken()
const userConfig = await getUserConfig()
if (userConfig.accessToken) {
return userConfig.accessToken
} else {
const resp = await fetch('https://chat.openai.com/api/auth/session')
if (resp.status === 403) {
@@ -55,9 +46,9 @@ async function getChatGptAccessToken() {
if (!data.accessToken) {
throw new Error('UNAUTHORIZED')
}
cache.set(KEY_ACCESS_TOKEN, data.accessToken)
await setAccessToken(data.accessToken)
return data.accessToken
}
return cache.get(KEY_ACCESS_TOKEN)
}
async function getBingAccessToken() {
@@ -118,8 +109,6 @@ Browser.runtime.onConnect.addListener((port) => {
} catch (err) {
console.error(err)
if (!err.message.includes('aborted')) {
cache.delete(KEY_ACCESS_TOKEN)
if (
['message you submitted was too long', 'maximum context length'].some((m) =>
err.message.includes(m),
+5 -11
View File
@@ -5,19 +5,13 @@ import DecisionCard from '../components/DecisionCard'
import { config as siteConfig } from './site-adapters'
import { config as toolsConfig } from './selection-tools'
import { config as menuConfig } from './menu-tools'
import {
clearOldAccessToken,
getPreferredLanguageKey,
getUserConfig,
setAccessToken,
} from '../config/index.mjs'
import { getPreferredLanguageKey, getUserConfig, setAccessToken } from '../config/index.mjs'
import {
createElementAtPosition,
cropText,
getClientPosition,
getPossibleElementByQuerySelector,
initSession,
isSafari,
} from '../utils'
import FloatingToolbar from '../components/FloatingToolbar'
import Browser from 'webextension-polyfill'
@@ -100,9 +94,7 @@ async function getInput(inputQuery) {
}
}
async function prepareForSafari() {
await clearOldAccessToken()
async function overwriteAccessToken() {
if (location.hostname !== 'chat.openai.com' || location.pathname !== '/api/auth/session') return
const response = document.querySelector('pre').textContent
@@ -116,6 +108,7 @@ async function prepareForSafari() {
}
if (data.accessToken) {
await setAccessToken(data.accessToken)
console.log(data.accessToken)
}
}
@@ -308,7 +301,8 @@ async function run() {
}
})
if (isSafari()) await prepareForSafari()
await overwriteAccessToken()
prepareForSelectionTools()
prepareForSelectionToolsTouch()
prepareForStaticCard()