修复步骤1打开官网前清理OpenAI Cookie
This commit is contained in:
@@ -1,14 +1,142 @@
|
|||||||
(function attachBackgroundStep1(root, factory) {
|
(function attachBackgroundStep1(root, factory) {
|
||||||
root.MultiPageBackgroundStep1 = factory();
|
root.MultiPageBackgroundStep1 = factory();
|
||||||
})(typeof self !== 'undefined' ? self : globalThis, function createBackgroundStep1Module() {
|
})(typeof self !== 'undefined' ? self : globalThis, function createBackgroundStep1Module() {
|
||||||
|
const STEP1_COOKIE_CLEAR_DOMAINS = [
|
||||||
|
'chatgpt.com',
|
||||||
|
'chat.openai.com',
|
||||||
|
'openai.com',
|
||||||
|
'auth.openai.com',
|
||||||
|
'auth0.openai.com',
|
||||||
|
'accounts.openai.com',
|
||||||
|
];
|
||||||
|
const STEP1_COOKIE_CLEAR_ORIGINS = [
|
||||||
|
'https://chatgpt.com',
|
||||||
|
'https://chat.openai.com',
|
||||||
|
'https://auth.openai.com',
|
||||||
|
'https://auth0.openai.com',
|
||||||
|
'https://accounts.openai.com',
|
||||||
|
'https://openai.com',
|
||||||
|
];
|
||||||
|
|
||||||
|
function normalizeCookieDomainForStep1(domain) {
|
||||||
|
return String(domain || '').trim().replace(/^\.+/, '').toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
function shouldClearStep1Cookie(cookie) {
|
||||||
|
const domain = normalizeCookieDomainForStep1(cookie?.domain);
|
||||||
|
if (!domain) return false;
|
||||||
|
return STEP1_COOKIE_CLEAR_DOMAINS.some((target) => (
|
||||||
|
domain === target || domain.endsWith(`.${target}`)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildStep1CookieRemovalUrl(cookie) {
|
||||||
|
const host = normalizeCookieDomainForStep1(cookie?.domain);
|
||||||
|
const rawPath = String(cookie?.path || '/');
|
||||||
|
const path = rawPath.startsWith('/') ? rawPath : `/${rawPath}`;
|
||||||
|
return `https://${host}${path}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getStep1ErrorMessage(error) {
|
||||||
|
return error?.message || String(error || '未知错误');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function collectStep1Cookies(chromeApi) {
|
||||||
|
if (!chromeApi.cookies?.getAll) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const stores = chromeApi.cookies.getAllCookieStores
|
||||||
|
? await chromeApi.cookies.getAllCookieStores()
|
||||||
|
: [{ id: undefined }];
|
||||||
|
const cookies = [];
|
||||||
|
const seen = new Set();
|
||||||
|
|
||||||
|
for (const store of stores) {
|
||||||
|
const storeId = store?.id;
|
||||||
|
const batch = await chromeApi.cookies.getAll(storeId ? { storeId } : {});
|
||||||
|
for (const cookie of batch || []) {
|
||||||
|
if (!shouldClearStep1Cookie(cookie)) continue;
|
||||||
|
const key = [
|
||||||
|
cookie.storeId || storeId || '',
|
||||||
|
cookie.domain || '',
|
||||||
|
cookie.path || '',
|
||||||
|
cookie.name || '',
|
||||||
|
cookie.partitionKey ? JSON.stringify(cookie.partitionKey) : '',
|
||||||
|
].join('|');
|
||||||
|
if (seen.has(key)) continue;
|
||||||
|
seen.add(key);
|
||||||
|
cookies.push(cookie);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return cookies;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function removeStep1Cookie(chromeApi, cookie) {
|
||||||
|
const details = {
|
||||||
|
url: buildStep1CookieRemovalUrl(cookie),
|
||||||
|
name: cookie.name,
|
||||||
|
};
|
||||||
|
if (cookie.storeId) {
|
||||||
|
details.storeId = cookie.storeId;
|
||||||
|
}
|
||||||
|
if (cookie.partitionKey) {
|
||||||
|
details.partitionKey = cookie.partitionKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await chromeApi.cookies.remove(details);
|
||||||
|
return Boolean(result);
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('[MultiPage:step1] remove cookie failed', {
|
||||||
|
domain: cookie?.domain,
|
||||||
|
name: cookie?.name,
|
||||||
|
message: getStep1ErrorMessage(error),
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function createStep1Executor(deps = {}) {
|
function createStep1Executor(deps = {}) {
|
||||||
const {
|
const {
|
||||||
addLog,
|
addLog,
|
||||||
|
chrome: chromeApi = globalThis.chrome,
|
||||||
completeStepFromBackground,
|
completeStepFromBackground,
|
||||||
openSignupEntryTab,
|
openSignupEntryTab,
|
||||||
} = deps;
|
} = deps;
|
||||||
|
|
||||||
|
async function clearOpenAiCookiesBeforeStep1() {
|
||||||
|
if (!chromeApi?.cookies?.getAll || !chromeApi.cookies?.remove) {
|
||||||
|
await addLog('步骤 1:当前浏览器不支持 cookies API,跳过打开官网前 cookie 清理。', 'warn');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await addLog('步骤 1:打开 ChatGPT 官网前清理 ChatGPT / OpenAI cookies...', 'info');
|
||||||
|
const cookies = await collectStep1Cookies(chromeApi);
|
||||||
|
let removedCount = 0;
|
||||||
|
for (const cookie of cookies) {
|
||||||
|
if (await removeStep1Cookie(chromeApi, cookie)) {
|
||||||
|
removedCount += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chromeApi.browsingData?.removeCookies) {
|
||||||
|
try {
|
||||||
|
await chromeApi.browsingData.removeCookies({
|
||||||
|
since: 0,
|
||||||
|
origins: STEP1_COOKIE_CLEAR_ORIGINS,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
await addLog(`步骤 1:browsingData 补扫 cookies 失败:${getStep1ErrorMessage(error)}`, 'warn');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await addLog(`步骤 1:已清理 ${removedCount} 个 ChatGPT / OpenAI cookies。`, 'ok');
|
||||||
|
}
|
||||||
|
|
||||||
async function executeStep1() {
|
async function executeStep1() {
|
||||||
|
await clearOpenAiCookiesBeforeStep1();
|
||||||
await addLog('步骤 1:正在打开 ChatGPT 官网...');
|
await addLog('步骤 1:正在打开 ChatGPT 官网...');
|
||||||
await openSignupEntryTab(1);
|
await openSignupEntryTab(1);
|
||||||
await completeStepFromBackground(1, {});
|
await completeStepFromBackground(1, {});
|
||||||
|
|||||||
Reference in New Issue
Block a user