QwenAI / src /browser /session.js
imseldrith's picture
Initial upload from Google Colab
9de864e verified
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const SESSION_DIR = path.join(__dirname, '..', '..', 'session');
const TOKEN_FILE = path.join(SESSION_DIR, 'auth_token.txt');
export function initSessionDirectory() {
if (!fs.existsSync(SESSION_DIR)) {
fs.mkdirSync(SESSION_DIR, { recursive: true });
console.log(`Создана директория для сессий: ${SESSION_DIR}`);
}
}
export async function saveSession(context, accountId = null) {
try {
initSessionDirectory();
const isPuppeteer = context && typeof context.goto === 'function';
const isPlaywright = context && typeof context.storageState === 'function';
if (isPuppeteer) {
const cookies = await context.cookies();
const sessionPath = accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'cookies.json')
: path.join(SESSION_DIR, 'cookies.json');
const sessionDir = path.dirname(sessionPath);
if (!fs.existsSync(sessionDir)) {
fs.mkdirSync(sessionDir, { recursive: true });
}
fs.writeFileSync(sessionPath, JSON.stringify(cookies, null, 2));
console.log('Сессия Puppeteer сохранена');
return true;
} else if (isPlaywright && context.browser()) {
const sessionPath = accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'state.json')
: path.join(SESSION_DIR, 'state.json');
const sessionDir = path.dirname(sessionPath);
if (!fs.existsSync(sessionDir)) {
fs.mkdirSync(sessionDir, { recursive: true });
}
await context.storageState({ path: sessionPath });
console.log('Сессия Playwright сохранена');
return true;
} else {
console.error('Неизвестный тип контекста браузера');
return false;
}
} catch (error) {
console.error('Ошибка при сохранении сессии:', error);
return false;
}
}
export async function loadSession(context, accountId = null) {
try {
const isPuppeteer = context && typeof context.goto === 'function';
const isPlaywright = context && typeof context.storageState === 'function';
if (isPuppeteer) {
const sessionPath = accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'cookies.json')
: path.join(SESSION_DIR, 'cookies.json');
if (fs.existsSync(sessionPath)) {
const cookies = JSON.parse(fs.readFileSync(sessionPath, 'utf8'));
await context.setCookie(...cookies);
console.log('Сессия Puppeteer загружена');
return true;
}
} else if (isPlaywright) {
const sessionPath = accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'state.json')
: path.join(SESSION_DIR, 'state.json');
if (fs.existsSync(sessionPath)) {
await context.storageState({ path: sessionPath });
console.log('Сессия Playwright загружена');
return true;
}
}
} catch (error) {
console.error('Ошибка при загрузке сессии:', error);
}
return false;
}
export function clearSession(accountId = null) {
try {
const sessionPaths = [
accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'state.json')
: path.join(SESSION_DIR, 'state.json'),
accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'cookies.json')
: path.join(SESSION_DIR, 'cookies.json')
];
let cleared = false;
for (const sessionPath of sessionPaths) {
if (fs.existsSync(sessionPath)) {
fs.unlinkSync(sessionPath);
cleared = true;
}
}
if (cleared) {
console.log('Сессия очищена');
return true;
}
} catch (error) {
console.error('Ошибка при очистке сессии:', error);
}
return false;
}
export function hasSession(accountId = null) {
const sessionPaths = [
accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'state.json')
: path.join(SESSION_DIR, 'state.json'),
accountId
? path.join(SESSION_DIR, 'accounts', accountId, 'cookies.json')
: path.join(SESSION_DIR, 'cookies.json')
];
return sessionPaths.some(path => fs.existsSync(path));
}
export function saveAuthToken(token) {
try {
initSessionDirectory();
if (token) {
fs.writeFileSync(TOKEN_FILE, token, 'utf8');
console.log('Токен авторизации сохранен');
return true;
}
} catch (error) {
console.error('Ошибка при сохранении токена авторизации:', error);
}
return false;
}
export function loadAuthToken() {
try {
if (fs.existsSync(TOKEN_FILE)) {
const token = fs.readFileSync(TOKEN_FILE, 'utf8');
console.log('Токен авторизации загружен');
return token;
}
} catch (error) {
console.error('Ошибка при загрузке токена авторизации:', error);
}
return null;
}