Update aniliberty/aniliberty.js

This commit is contained in:
aka paul
2026-02-09 13:42:08 +00:00
parent 0b31d1a086
commit 38abfb0145
+23 -9
View File
@@ -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))