2021-07-14 00:31:37 +02:00
|
|
|
import Fuse from 'fuse.js'
|
|
|
|
import JSON5 from 'json5'
|
|
|
|
|
2021-07-13 19:15:56 +02:00
|
|
|
function getCorsUrl(url) {
|
|
|
|
return `https://hidden-inlet-27205.herokuapp.com/${url}`;
|
2021-07-13 17:45:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
async function getVideoUrl(config) {
|
|
|
|
const accessToken = await getAccessToken(config);
|
|
|
|
const now = Math.floor(Date.now() / 1e3);
|
|
|
|
|
2021-07-13 19:15:56 +02:00
|
|
|
let url = getCorsUrl(`https://lookmovie.io/manifests/movies/json/${config.movieId}/${now}/${accessToken}/master.m3u8`);
|
2021-07-13 17:45:44 +02:00
|
|
|
|
|
|
|
if (url) {
|
|
|
|
const videoOpts = await fetch(url).then((d) => d.json());
|
|
|
|
|
|
|
|
// Find video URL and return it (with a check for a full url if needed)
|
|
|
|
const opts = ["1080p", "1080", "720p", "720", "480p", "480", "auto"]
|
|
|
|
|
|
|
|
let videoUrl = "";
|
|
|
|
for (let res of opts) {
|
|
|
|
if (videoOpts[res] && !videoOpts[res].includes('dummy') && !videoOpts[res].includes('earth-1984') && !videoUrl) {
|
|
|
|
videoUrl = videoOpts[res]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-07-13 19:15:56 +02:00
|
|
|
return videoUrl.startsWith("/") ? getCorsUrl(`https://lookmovie.io/${videoUrl}`) : getCorsUrl(videoUrl);
|
2021-07-13 17:45:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return "Invalid type.";
|
|
|
|
}
|
|
|
|
|
|
|
|
async function getAccessToken(config) {
|
2021-07-13 19:15:56 +02:00
|
|
|
let url = getCorsUrl(`https://lookmovie.io/api/v1/security/movie-access?id_movie=${config.movieId}&token=1&sk=&step=1`);
|
2021-07-13 17:45:44 +02:00
|
|
|
|
|
|
|
const data = await fetch(url).then((d) => d.json());
|
|
|
|
|
|
|
|
const token = data?.data?.accessToken;
|
|
|
|
if (token) return token;
|
|
|
|
|
|
|
|
return "Invalid type provided in config";
|
|
|
|
}
|
|
|
|
|
2021-07-14 00:31:37 +02:00
|
|
|
async function getStreamUrl(slug, type) {
|
|
|
|
const url = getCorsUrl(`https://lookmovie.io/${type}s/view/${slug}`);
|
2021-07-13 17:45:44 +02:00
|
|
|
const pageReq = await fetch(url).then((d) => d.text());
|
|
|
|
|
2021-07-13 19:15:56 +02:00
|
|
|
const data = JSON5.parse("{" +
|
2021-07-13 17:45:44 +02:00
|
|
|
pageReq
|
2021-07-14 00:31:37 +02:00
|
|
|
.slice(pageReq.indexOf(`${type}_storage`))
|
2021-07-13 17:45:44 +02:00
|
|
|
.split("};")[0]
|
|
|
|
.split("= {")[1]
|
|
|
|
.trim() +
|
2021-07-13 19:15:56 +02:00
|
|
|
"}"
|
|
|
|
);
|
2021-07-13 17:45:44 +02:00
|
|
|
|
2021-07-13 19:15:56 +02:00
|
|
|
const videoUrl = await getVideoUrl({
|
2021-07-14 00:31:37 +02:00
|
|
|
slug: slug,
|
2021-07-13 19:15:56 +02:00
|
|
|
movieId: data.id_movie,
|
|
|
|
type: "movie",
|
|
|
|
});
|
2021-07-13 17:45:44 +02:00
|
|
|
|
2021-07-14 00:31:37 +02:00
|
|
|
return { url: videoUrl }
|
2021-07-13 19:15:56 +02:00
|
|
|
}
|
2021-07-13 17:45:44 +02:00
|
|
|
|
2021-07-14 00:31:37 +02:00
|
|
|
async function findMovie(searchTerm) {
|
|
|
|
const searchUrl = getCorsUrl(`https://lookmovie.io/api/v1/movies/search/?q=${encodeURIComponent(searchTerm)}`);
|
|
|
|
const searchRes = await fetch(searchUrl).then((d) => d.json());
|
|
|
|
let results = [...searchRes.result.map((v) => ({ ...v, type: "movie" }))];
|
|
|
|
|
|
|
|
const fuse = new Fuse(results, { threshold: 0.3, distance: 200, keys: ["title"] });
|
|
|
|
const matchedResults = fuse
|
|
|
|
.search(searchTerm.toString())
|
|
|
|
.map((result) => result.item);
|
2021-07-13 17:45:44 +02:00
|
|
|
|
2021-07-14 00:31:37 +02:00
|
|
|
if (matchedResults.length === 0) {
|
|
|
|
return { options: [] }
|
|
|
|
}
|
2021-07-13 19:15:56 +02:00
|
|
|
|
2021-07-14 00:31:37 +02:00
|
|
|
if (matchedResults.length > 1) {
|
|
|
|
const res = { options: [] };
|
|
|
|
|
|
|
|
matchedResults.forEach((r) => res.options.push({
|
|
|
|
title: r.title,
|
|
|
|
slug: r.slug,
|
|
|
|
type: r.type
|
|
|
|
}));
|
|
|
|
|
|
|
|
return res;
|
|
|
|
} else {
|
|
|
|
const { title, slug, type } = matchedResults[0];
|
|
|
|
|
|
|
|
return {
|
|
|
|
options: [{ title, slug, type }]
|
|
|
|
}
|
2021-07-13 17:45:44 +02:00
|
|
|
}
|
2021-07-14 00:31:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
export { findMovie, getStreamUrl };
|