import { genericUserAgent, env } from "../../config.js"; import { cleanString } from "../../misc/utils.js"; const resolutions = { "ultra": "2160", "quad": "1440", "full": "1080", "hd": "720", "sd": "480", "low": "360", "lowest": "240", "mobile": "144" } export default async function(o) { let quality = o.quality === "max" ? "2160" : o.quality; let html = await fetch(`https://ok.ru/video/${o.id}`, { headers: { "user-agent": genericUserAgent } }).then(r => r.text()).catch(() => {}); if (!html) return { error: "fetch.fail" }; let videoData = html.match(/
/) ?.[1] ?.replaceAll(""", '"'); if (!videoData) { return { error: "fetch.empty" }; } videoData = JSON.parse(JSON.parse(videoData).flashvars.metadata); if (videoData.provider !== "UPLOADED_ODKL") return { error: "link.unsupported" }; if (videoData.movie.is_live) return { error: "content.video.live" }; if (videoData.movie.duration > env.durationLimit) return { error: "content.too_long" }; let videos = videoData.videos.filter(v => !v.disallowed); let bestVideo = videos.find(v => resolutions[v.name] === quality) || videos[videos.length - 1]; let fileMetadata = { title: cleanString(videoData.movie.title.trim()), author: cleanString((videoData.author?.name || videoData.compilationTitle).trim()), } if (bestVideo) return { urls: bestVideo.url, filenameAttributes: { service: "ok", id: o.id, title: fileMetadata.title, author: fileMetadata.author, resolution: `${resolutions[bestVideo.name]}p`, qualityLabel: `${resolutions[bestVideo.name]}p`, extension: "mp4" } } return { error: "fetch.empty" } }