UNPKG

xdl-node

Version:

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

86 lines (85 loc) 4.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.XDL = void 0; const cookies_1 = require("./cookies"); const api_1 = require("./api"); const twspace_dl_1 = __importDefault(require("./twspace_dl")); const twspace_1 = require("./twspace"); class XDL { /** * Приватный конструктор – вызывается только через init() */ constructor(cookiesPath) { const cookies = (0, cookies_1.loadValidCookies)(cookiesPath); console.log('Loaded cookies:', cookies); this.api = new api_1.TwitterAPI(); this.api.initApis(cookies); // Делаем API доступным глобально global.API = this.api; } /** * Инициализирует библиотеку и возвращает её инстанс. * Вызывайте один раз при старте приложения. * @param cookiesPath Путь к файлу cookies. */ static init(cookiesPath) { if (!this._instance) { this._instance = new XDL(cookiesPath); } return this._instance; } /** * Геттер для получения инстанса XDL. * Выбросит ошибку, если XDL не был инициализирован. */ static get instance() { if (!this._instance) { throw new Error("XDL не инициализирован. Сначала вызовите XDL.init(путь_к_cookies)."); } return this._instance; } /** * Скачивает Twitter Space (после окончания эфира или с реплеем). * После завершения скачивания встраивает обложку и чистит временные файлы. * @param spaceUrl URL твиттер-спейса (формат: https://x.com/i/spaces/<space_id>) * @param formatStr Шаблон имени файла (опционально) */ async downloadSpace(spaceUrl, formatStr) { const space = await twspace_1.Twspace.fromSpaceUrl(spaceUrl, this.api); const downloader = new twspace_dl_1.default(space, formatStr); console.info("Начинается скачивание Twitter Space..."); await downloader.download(); console.info("Скачивание завершено. Встраиваем обложку..."); await downloader.cleanup(); console.info("Операция успешно завершена."); } /** * Запускает live‑запись Twitter Space. * Возвращает объект, через который можно остановить запись. * @param spaceUrl URL твиттер-спейса (формат: https://x.com/i/spaces/<space_id>) * @param formatStr Шаблон имени файла (опционально) * @returns Инстанс TwspaceDL для управления записью. */ async startLiveRecording(spaceUrl, formatStr) { const space = await twspace_1.Twspace.fromSpaceUrl(spaceUrl, this.api); const downloader = new twspace_dl_1.default(space, formatStr); console.info("Запуск live‑записи Twitter Space..."); await downloader.startLiveRecording(); return downloader; } /** * **Новый метод:** Получает m3u8 поток для Twitter Space без сохранения его на диск. * @param spaceUrl URL твиттер-спейса (формат: https://x.com/i/spaces/<space_id>) * @param formatStr Шаблон имени файла (опционально) * @returns Строка с содержимым m3u8 плейлиста. */ async getM3u8Stream(spaceUrl, formatStr) { const space = await twspace_1.Twspace.fromSpaceUrl(spaceUrl, this.api); const downloader = new twspace_dl_1.default(space, formatStr); return await downloader.getM3u8Stream(); } } exports.XDL = XDL;