UNPKG

@ernestoyoofi/yt.loader-to

Version:

An unofficial, promise-based API wrapper for `loader.to` to fetch YouTube video information and generate download links. Written in TypeScript, it's fully typed and easy to use in any Node.js project.

99 lines (98 loc) 5.41 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = DownloadMedia; const get_info_1 = __importDefault(require("../errors/get-info")); const get_yt_id_1 = __importDefault(require("../yt/get-yt-id")); const request_1 = require("../request"); const get_format_1 = __importDefault(require("../yt/get-format")); const get_ajax_url_1 = __importDefault(require("../yt/get-ajax-url")); const default_1 = __importDefault(require("../default")); const download_media_1 = __importDefault(require("../errors/download-media")); function GetProcessingDownload(hosting, idWorker, axios_config, isDebug) { return __awaiter(this, void 0, void 0, function* () { if (!idWorker) { throw new download_media_1.default("Id Worker Not Found!", "ID_WORKER_NOT_FOUNDED"); } const urlProgress = String((0, get_ajax_url_1.default)("download", String(hosting || "")) + "?id=" + idWorker); if (isDebug) { console.log("[Debugging GetProcessingDownload]: Get Ajax Progress:", urlProgress); } const requestProgress = yield (0, request_1.RequestURL)(urlProgress, axios_config); if (isDebug) { console.log("[Debugging GetProcessingDownload]: Progress API:", requestProgress.data); } const dataResult = requestProgress.data; if ((dataResult === null || dataResult === void 0 ? void 0 : dataResult.success) != 1) { yield new Promise((a) => setTimeout(a, 1500)); // Sleep on 1.5seconds return yield GetProcessingDownload(hosting, idWorker, axios_config, isDebug); } return { url: dataResult.download_url }; }); } function DownloadMedia(_a) { return __awaiter(this, arguments, void 0, function* ({ link = "", debugging, format = "720", options = {} }) { var _b, _c; const validate = (0, get_yt_id_1.default)(String(link || "")); const formatOpt = (0, get_format_1.default)(format); const isDebug = !!(typeof debugging === "boolean" && !!debugging) ? true : false; if (isDebug) { console.log("[Debugging DownloadMedia]: Checking Validation Youtube:", validate); } if (!validate.isValid) { throw new get_info_1.default("Link YouTube is not valid!", "INVALID_URL"); } if (!formatOpt.format) { throw new get_info_1.default("Format is not accepted!", "INVALID_FORMAT"); } const loadHosting = new URL(String(options.hosting || default_1.default.hosting || "")).origin; const urlBuild = new URLSearchParams({ url: `https://www.youtube.com/watch?v=${validate.id}`, add_info: "1", format: formatOpt.format }).toString(); const urlInfo = !(options === null || options === void 0 ? void 0 : options.ajax) ? `${(0, get_ajax_url_1.default)("info", loadHosting)}?${urlBuild}` : `${options === null || options === void 0 ? void 0 : options.ajax("info", loadHosting)}?${urlBuild}`; if (isDebug) { console.log("[Debugging DownloadMedia]: Ajax URL Info:", urlInfo); } // Get Id And Basic Information const getInfo = yield (0, request_1.RequestURL)(urlInfo, (options.axios_config || {})); const dataWorker = (getInfo.data || {}); const idWorker = String(dataWorker.id || ""); const cardInfo = dataWorker.additional_info ? { image: dataWorker.additional_info.thumbnail, title: dataWorker.additional_info.title, description: dataWorker.additional_info.description, views: dataWorker.additional_info.views, id: dataWorker.additional_info.id, link: dataWorker.additional_info.link, creator: { picture: dataWorker.additional_info.channel.thumbnail, name: dataWorker.additional_info.channel.name, username: dataWorker.additional_info.channel.handle, id: dataWorker.additional_info.channel.id, link: ((_b = dataWorker.additional_info.channel) === null || _b === void 0 ? void 0 : _b.link) || ((_c = dataWorker.additional_info.channel) === null || _c === void 0 ? void 0 : _c.url), } } : null; const getDownloadProgress = yield GetProcessingDownload(loadHosting, idWorker, (options.axios_config || {}), isDebug); const getURL = String(getDownloadProgress.url || ""); return { card: cardInfo, url: getURL }; }); }