diff --git a/api-prox/hooks/episode.ts.disabled b/api-prox/hooks/episode.disabled.ts
similarity index 97%
rename from api-prox/hooks/episode.ts.disabled
rename to api-prox/hooks/episode.disabled.ts
index 0386119..7b43288 100644
--- a/api-prox/hooks/episode.ts.disabled
+++ b/api-prox/hooks/episode.disabled.ts
@@ -7,9 +7,15 @@
import { logger } from "../shared";
import fs from "fs/promises";
-const HOSTNAME = "http://127.0.0.1:7001";
+let HOSTNAME: null | string = null;
+if (process.env.HOST_URL) {
+ HOSTNAME = process.env.HOST_URL;
+}
+
export function match(path: string): boolean {
+ // если не установлен хост, не запускаем хук
+ if (!HOSTNAME) return false
// используем только страницы с путём /episode/*
const pathRe = /^\/episode\/\d+/;
if (pathRe.test(path)) return true;
diff --git a/api-prox/hooks/toggles.ts b/api-prox/hooks/toggles.ts
index 64e2302..101f8ed 100644
--- a/api-prox/hooks/toggles.ts
+++ b/api-prox/hooks/toggles.ts
@@ -57,8 +57,8 @@ export async function get(data: Toggles, url: URL) {
data.impMessageEnabled = true;
data.impMessageText = "разработчик AniX / Api-Prox-Svc";
data.impMessageLink = "https://bento.me/radiquum";
- data.impMessageBackgroundColor = "ffb3d0"
- data.impMessageTextColor = "ffffff"
+ data.impMessageBackgroundColor = "ffb3d0";
+ data.impMessageTextColor = "ffffff";
data.apiAltAvailable = false;
data.apiAltUrl = "";
@@ -68,6 +68,9 @@ export async function get(data: Toggles, url: URL) {
data.kodikIframeAd = false;
data.kodikAdIframeUrl = "";
- // data.iframeEmbedUrl = "https://rani.loophole.site/iframe?url=" // необходимо менять на юрл сервиса (пока вручную) если используется хук с кастомными эпизодами (episode.ts)
+ if (process.env.HOST_URL) {
+ data.iframeEmbedUrl = `${process.env.HOST_URL}/player?url=`;
+ }
+
return data;
}
diff --git a/api-prox/iframe.ts b/api-prox/iframe.ts
new file mode 100644
index 0000000..b8d9d9e
--- /dev/null
+++ b/api-prox/iframe.ts
@@ -0,0 +1,14 @@
+export const Iframe = (url: string) => {
+ return `
+
+
+
+ Веб-плеер
+
+
+
+
+
+
+ `
+}
diff --git a/api-prox/index.ts b/api-prox/index.ts
index 83cf8bc..0bec03a 100644
--- a/api-prox/index.ts
+++ b/api-prox/index.ts
@@ -10,6 +10,8 @@ import {
} from "./shared";
import express from "express";
import fs from "fs/promises";
+import { MediaChromeTheme } from "./media-chrome";
+import { Iframe } from "./iframe";
const app = express();
app.use(express.json());
@@ -20,8 +22,8 @@ const port = 7001;
const loadedHooks: LoadedHook[] = [];
-app.get("/iframe", async (req, res) => {
- const url = req.query.url || null;
+app.get("/player", async (req, res) => {
+ let url = req.query.url || null;
res.status(200);
res.set({
@@ -34,6 +36,68 @@ app.get("/iframe", async (req, res) => {
res.send("No url query found!
");
return;
}
+
+ let player = "";
+ let poster = "";
+
+ const CUSTOM_PLAYER_DOMAINS = [
+ "video.sibnet.ru",
+ "anixart.libria.fun",
+ "kodik.info",
+ "aniqit.com",
+ "kodik.cc",
+ "kodik.biz",
+ ];
+ const urlDomain = new URL(url.toString());
+ const PLAYER_PARSER_URL = process.env.PLAYER_PARSER_URL || null;
+
+ if (CUSTOM_PLAYER_DOMAINS.includes(urlDomain.hostname)) {
+ try {
+ if (!PLAYER_PARSER_URL) throw new Error();
+
+ if (
+ ["kodik.info", "aniqit.com", "kodik.cc", "kodik.biz"].includes(
+ urlDomain.hostname
+ )
+ ) {
+ player = "kodik";
+ }
+ if ("anixart.libria.fun" == urlDomain.hostname) {
+ player = "libria";
+ }
+ if ("video.sibnet.ru" == urlDomain.hostname) {
+ player = "sibnet";
+ }
+
+ const playerParserRes = await fetch(
+ `${PLAYER_PARSER_URL}?url=${encodeURIComponent(url.toString())}&player=${player}`
+ );
+
+ if (!playerParserRes.ok) throw new Error();
+
+ const playerParserData: { manifest: string; poster: string } =
+ await playerParserRes.json();
+
+ poster = playerParserData.poster;
+ if (playerParserData.manifest.startsWith("#EXTM3U")) {
+ const playerUrlArray = playerParserData.manifest.split("\n");
+ url = playerUrlArray.join("\\n");
+ } else {
+ url = playerParserData.manifest;
+ }
+ } catch {
+ res.send(Iframe(url.toString()));
+ return;
+ }
+ } else if (url.toString().endsWith("mp4")) {
+ player = "mp4";
+ } else if (url.toString().endsWith(".m3u8")) {
+ player = "hls";
+ } else {
+ res.send(Iframe(url.toString()));
+ return;
+ }
+
res.send(`
@@ -41,9 +105,38 @@ app.get("/iframe", async (req, res) => {
Веб-плеер
+ ${["kodik", "libria", "hls"].includes(player) ? '' : ""}
+
-
+
+ ${MediaChromeTheme()}
+
+
+ ${
+ ["kodik", "libria", "hls"].includes(player) ?
+ ``
+ : ``
+ }
+