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
JavaScript
;
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;