From 40366ff7bd4d0a76240fd815742df7ef61b16957 Mon Sep 17 00:00:00 2001 From: josc146 Date: Thu, 13 Apr 2023 16:54:53 +0800 Subject: [PATCH] fix: continuous 403 error caused by still requesting the official website when using reverse proxy (#207) --- package-lock.json | 31 ------------------------------ package.json | 1 - src/background/apis/openai-api.mjs | 6 ------ src/background/index.mjs | 27 ++++++++------------------ src/content-script/index.jsx | 16 +++++---------- 5 files changed, 13 insertions(+), 68 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77bcd0b..3fb3613 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 1c7b54c..88be4f0 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/background/apis/openai-api.mjs b/src/background/apis/openai-api.mjs index 32d9fac..beb6882 100644 --- a/src/background/apis/openai-api.mjs +++ b/src/background/apis/openai-api.mjs @@ -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}`) }, diff --git a/src/background/index.mjs b/src/background/index.mjs index 968d7f7..4b17fad 100644 --- a/src/background/index.mjs +++ b/src/background/index.mjs @@ -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), diff --git a/src/content-script/index.jsx b/src/content-script/index.jsx index c20580c..8065aa3 100644 --- a/src/content-script/index.jsx +++ b/src/content-script/index.jsx @@ -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()