UNPKG

xdl-node

Version:

A library for retrieving audio streams and other data from X Spaces, built on Node.js and TypeScript.

81 lines (80 loc) 3.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateCookies = exports.loadValidCookies = exports.loadCookies = void 0; // cookies.ts const fs_1 = __importDefault(require("fs")); const HEX_TEMPLATE = (length) => `(?:[0-9a-f]{2}){${length}}`; const VALID_COOKIES = { auth_token: new RegExp(HEX_TEMPLATE(20)), ct0: new RegExp(HEX_TEMPLATE(80)) }; const COOKIES_PATTERN = new RegExp(`\\s+(${Object.keys(VALID_COOKIES).join('|')})\\s+(${HEX_TEMPLATE('20,80')})$`, 'gm'); /** * Загружает cookies из указанного файла. * @param filePath Путь к файлу cookies. * @returns Объект с cookies. * @throws Если загрузка не удалась. */ function loadCookies(filePath) { try { const data = fs_1.default.readFileSync(filePath, 'utf8'); const cookies = {}; // Обрабатываем строки файла формата Netscape for (const line of data.split('\n')) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith('#')) { continue; } const parts = trimmed.split(/\s+/); if (parts.length >= 7) { const name = parts[5]; const value = parts.slice(6).join(' '); cookies[name] = value; } } return cookies; } catch (err) { throw new Error(`Cannot load cookies from file: ${err.message}`); } } exports.loadCookies = loadCookies; // Функция для фильтрации только нужных cookies function loadValidCookies(filePath) { const cookies = loadCookies(filePath); return { auth_token: cookies.auth_token, ct0: cookies.ct0, }; } exports.loadValidCookies = loadValidCookies; /** * Валидирует переданные cookies. * @param cookies Объект с cookies. * @throws Если отсутствуют нужные или присутствуют лишние/неверные cookies. */ function validateCookies(cookies) { const validKeys = Object.keys(VALID_COOKIES); const cookieKeys = Object.keys(cookies); const missing = validKeys.filter(key => !(key in cookies)); if (missing.length > 0) { throw new TypeError(`Missing required cookies: ${missing.join(', ')}`); } const extra = cookieKeys.filter(key => !validKeys.includes(key)); if (extra.length > 0) { throw new TypeError(`Extra cookies: ${extra.join(', ')}`); } const invalid = []; for (const key of validKeys) { if (!VALID_COOKIES[key].test(String(cookies[key]))) { invalid.push(key); } } if (invalid.length > 0) { throw new Error(`Invalid cookies: ${invalid.join(', ')}`); } } exports.validateCookies = validateCookies;