From 38abfb01453137a8443c4890c2e194b0d9075cd6 Mon Sep 17 00:00:00 2001 From: aka paul <50n50@noreply.localhost> Date: Mon, 9 Feb 2026 13:42:08 +0000 Subject: [PATCH] Update aniliberty/aniliberty.js --- aniliberty/aniliberty.js | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/aniliberty/aniliberty.js b/aniliberty/aniliberty.js index 0aa7f7c..442da45 100644 --- a/aniliberty/aniliberty.js +++ b/aniliberty/aniliberty.js @@ -1,12 +1,23 @@ // AniLiberty module for Sora (AsyncJS) // Author: emp0ry -// Version: 1.0.1 +// Version: 1.0.2 -const IMAGE_HOST = "https://anilibria.top"; +const DEFAULT_IMAGE_HOST = "https://aniliberty.top"; -function fullImg(path) { +function originFromApi(urlOrBase) { + if (!urlOrBase) return DEFAULT_IMAGE_HOST; + const raw = String(urlOrBase); + const m = raw.match(/^(https?:\/\/[^/]+)\/api\/v1\/?/i); + if (m && m[1]) return m[1]; + const m2 = raw.match(/^(https?:\/\/[^/]+)/i); + return (m2 && m2[1]) ? m2[1] : DEFAULT_IMAGE_HOST; +} + +function fullImg(path, host) { if (!path) return; - return path.startsWith("http") ? path : `${IMAGE_HOST}${path}`; + if (path.startsWith("http")) return path; + const base = host || DEFAULT_IMAGE_HOST; + return `${base}${path}`; } function pickBestHls(ep) { @@ -18,8 +29,8 @@ function pickBestHls(ep) { // ------------------------------------------------------------ async function checkApiStatus() { const domains = [ - "https://anilibria.top/api/v1/", "https://aniliberty.top/api/v1/", + "https://anilibria.top/api/v1/", "https://anilibria.wtf/api/v1/" ]; for (const base of domains) { @@ -29,7 +40,7 @@ async function checkApiStatus() { if (data?.is_alive || data?.result === "ok") return base; } catch (_) {} } - return "https://anilibria.top/api/v1/"; + return "https://aniliberty.top/api/v1/"; } // ------------------------------------------------------------ @@ -38,6 +49,7 @@ async function checkApiStatus() { async function searchResults(keyword) { try { const base = await checkApiStatus(); + const origin = originFromApi(base); const url = `${base}app/search/releases?query=${encodeURIComponent(keyword)}&include=id,name.main,poster.src`; const res = await fetchv2(url); @@ -45,7 +57,7 @@ async function searchResults(keyword) { const out = (Array.isArray(data) ? data : []).map(it => ({ title: it?.name?.main || "Unknown title", - image: fullImg(it?.poster?.src), + image: fullImg(it?.poster?.src, origin), href: `${base}anime/releases/${it.id}?` + [ @@ -99,7 +111,9 @@ async function extractEpisodes(url) { const res = await fetchv2(url); const data = await res.json(); - const seriesPoster = fullImg(data?.poster?.src); + const origin = originFromApi(url); + + const seriesPoster = fullImg(data?.poster?.src, origin); const eps = Array.isArray(data?.episodes) ? data.episodes : []; const out = eps.map((ep, idx) => { @@ -111,7 +125,7 @@ async function extractEpisodes(url) { : (Number.isFinite(ep?.sort_order) ? ep.sort_order : (idx + 1)); const title = ep?.name ? String(ep.name) : `Episode ${num}`; - const image = fullImg(ep?.preview?.src) || seriesPoster; + const image = fullImg(ep?.preview?.src, origin) || seriesPoster; // Build skip blocks only if numbers present const opening = (ep?.opening && Number.isFinite(ep.opening.start) && Number.isFinite(ep.opening.stop))