poke/src/libpoketube/init/pages-api.js

231 lines
5.3 KiB
JavaScript
Raw Normal View History

2022-11-15 17:40:40 +01:00
const {
fetcher,
core,
wiki,
musicInfo,
modules,
version,
initlog,
init,
} = require("../libpoketube-initsys.js");
2022-11-09 17:51:10 +01:00
const {
IsJsonString,
convert,
getFirstLine,
capitalizeFirstLetter,
turntomins,
getRandomInt,
getRandomArbitrary,
} = require("../ptutils/libpt-coreutils.js");
function getJson(str) {
try {
return JSON.parse(str);
} catch {
return null;
}
}
2022-11-15 17:40:40 +01:00
const pkg = require("../../../package.json");
2023-11-13 18:05:08 +01:00
const cnf = require("../../../config.json");
2023-11-29 20:18:05 +01:00
const { Readable } = require("node:stream");
2023-11-18 10:19:29 +01:00
const verfull = "v23.1311-JeSsIcA-MAJOR-stable-dev-nonLTS-git-MTcwMDI5ODc4OQ==";
2023-11-29 20:18:05 +01:00
const versmol = "v23.1311-JeSsIcA";
2023-11-18 10:19:29 +01:00
const branch = "dev/master";
const codename = "jessica";
const versionnumber = "272";
2023-11-29 20:18:05 +01:00
const relaseunixdate = "MTcwMDI5ODc4OQ==";
const updatequote =
"Empty your cup so that it may be filled; become devoid to gain totality. - Bruce Lee";
2022-11-16 11:27:48 +01:00
2022-11-15 17:40:40 +01:00
module.exports = function (app, config, renderTemplate) {
2023-09-09 18:58:37 +02:00
app.get("/embed/:v", async function (req, res) {
2023-11-13 18:05:08 +01:00
res.send("Disabled until Q1 2024");
});
app.get("/admin", async function (req, res) {
2023-11-29 20:18:05 +01:00
if (req.hostname === "poketube.fun") {
res.redirect("https://console.sudovanilla.com/");
} else {
res.redirect("/sex");
}
2022-11-13 12:49:48 +01:00
});
2023-11-29 20:18:05 +01:00
2023-11-07 15:55:10 +01:00
app.get("/vi/:v/:t", async function (req, res) {
2023-11-29 20:18:05 +01:00
const { fetch } = await import("undici");
var url = `https://invid-api.poketube.fun/vi/${req.params.v}/${req.params.t}`;
let f = await fetch(url + `?cachefixer=${btoa(Date.now())}`, {
2023-11-07 15:55:10 +01:00
method: req.method,
});
2023-11-29 20:18:05 +01:00
Readable.fromWeb(f.body).pipe(res);
2023-11-07 15:55:10 +01:00
});
2023-11-07 16:04:56 +01:00
2023-11-29 20:18:05 +01:00
app.get("/avatars/:v", async function (req, res) {
const { fetch } = await import("undici");
2023-11-19 10:24:57 +01:00
var url = `https://invid-api.poketube.fun/ggpht/${req.params.v}`;
2023-11-07 17:00:57 +01:00
2023-11-29 20:18:05 +01:00
let f = await fetch(url + `?cachefixer=${btoa(Date.now())}`, {
2023-11-07 16:04:56 +01:00
method: req.method,
});
2023-11-29 20:18:05 +01:00
Readable.fromWeb(f.body).pipe(res);
2023-11-07 17:00:57 +01:00
});
2023-11-20 15:20:38 +01:00
app.get("/ggpht/:v", async function (req, res) {
2023-11-29 20:18:05 +01:00
const { fetch } = await import("undici");
2023-11-20 15:20:38 +01:00
var url = `https://invid-api.poketube.fun/ggpht/${req.params.v}`;
2023-11-29 20:18:05 +01:00
let f = await fetch(url + `?cachefixer=${btoa(Date.now())}`, {
2023-11-20 15:20:38 +01:00
method: req.method,
});
2023-11-29 20:18:05 +01:00
Readable.fromWeb(f.body).pipe(res);
2023-11-20 15:20:38 +01:00
});
2023-11-07 17:00:57 +01:00
app.get("/avatars/ytc/:v", async function (req, res) {
2023-11-29 20:22:11 +01:00
const { fetch } = await import("undici");
2023-11-29 20:18:05 +01:00
var url = `https://invid-api.poketube.fun/ggpht/ytc/${req.params.v.replace(
"ytc",
""
)}`;
2023-11-07 16:04:56 +01:00
2023-11-29 20:22:11 +01:00
let f = await fetch(url + `?cachefixer=${btoa(Date.now())}`, {
2023-11-07 17:00:57 +01:00
method: req.method,
});
f.body.pipe(res);
2023-11-07 16:04:56 +01:00
});
2023-11-29 20:18:05 +01:00
2022-11-15 17:40:40 +01:00
app.get("/api/search", async (req, res) => {
const query = req.query.query;
2022-11-09 17:51:10 +01:00
2022-11-15 17:40:40 +01:00
if (!query) {
return res.redirect("/");
}
return res.redirect(`/search?query=${query}`);
});
2022-11-09 17:51:10 +01:00
2022-11-15 17:40:40 +01:00
app.get("/api/video/download", async function (req, res) {
var v = req.query.v;
2022-11-09 17:51:10 +01:00
2022-11-15 17:40:40 +01:00
var format = "mp4";
var q = "22";
if (req.query.q) q = req.query.q;
2023-01-01 11:00:04 +01:00
2022-11-15 17:40:40 +01:00
if (req.query.f) {
var format = "mp3";
}
2023-09-09 18:58:37 +02:00
2022-12-15 17:20:03 +01:00
const url = `https://tube.kuylar.dev/proxy/media/${v}/${q}`;
2022-11-09 17:51:10 +01:00
2022-11-15 17:40:40 +01:00
res.redirect(url);
});
2022-11-09 17:51:10 +01:00
2022-11-15 17:40:40 +01:00
app.get("/api/subtitles", async (req, res) => {
2023-09-17 21:43:43 +02:00
const { fetch } = await import("undici");
2023-11-29 20:18:05 +01:00
2022-11-15 17:40:40 +01:00
const id = req.query.v;
const l = req.query.h;
2022-11-09 17:51:10 +01:00
2023-09-09 18:58:37 +02:00
try {
let url = `https://invid-api.poketube.fun/api/v1/captions/${id}?label=${l}`;
2022-11-09 17:51:10 +01:00
2023-09-17 21:43:43 +02:00
let f = await fetch(url);
2023-09-09 18:58:37 +02:00
const body = await f.text();
2022-11-09 17:51:10 +01:00
2023-09-09 18:58:37 +02:00
res.send(body);
} catch {}
2022-11-15 17:40:40 +01:00
});
2022-11-09 17:51:10 +01:00
2023-01-01 11:00:04 +01:00
app.get("/feeds/videos.xml", async (req, res) => {
const id = req.query.channel_id;
let url = `https://youtube.com/feeds/videos.xml?channel_id=${id}`;
let f = await modules.fetch(url, {
method: req.method,
});
f.body.pipe(res);
});
2022-11-15 17:40:40 +01:00
app.get("/api/redirect", async (req, res) => {
2023-03-04 17:31:49 +01:00
const red_url = atob(req.query.u);
2022-11-09 17:51:10 +01:00
2022-11-15 17:40:40 +01:00
if (!red_url) {
res.redirect("/");
}
2022-11-09 17:51:10 +01:00
2023-05-04 18:34:43 +02:00
res.redirect(red_url + "?f=" + req.query.u);
2022-11-15 17:40:40 +01:00
});
2022-11-09 17:51:10 +01:00
2023-09-09 18:58:37 +02:00
app.get("/api", async (req, res) => {
res.redirect("/api/version.json");
});
app.get("/api/v1", async (req, res) => {
res.redirect("https://invid-api.poketube.fun/api/v1/stats");
});
2022-11-15 17:40:40 +01:00
app.get("/api/version.json", async (req, res) => {
const invidious = await modules
2023-03-09 16:51:54 +01:00
.fetch("https://invid-api.poketube.fun/api/v1/stats")
.then((res) => res.text())
.then((txt) => getJson(txt));
const response = {
2023-11-18 10:21:57 +01:00
pt_version: {
2023-11-29 20:18:05 +01:00
version: versmol,
version_full: verfull,
2023-11-18 10:21:57 +01:00
},
branch,
2023-11-18 10:19:29 +01:00
updatequote,
2023-05-08 18:33:48 +02:00
relaseunixdate,
vernum: versionnumber,
codename,
2023-11-29 20:18:05 +01:00
config: cnf,
packages: {
libpt: version,
node: process.version,
v8: process.versions.v8,
},
invidious,
flac: {
2023-03-24 21:58:24 +01:00
poketube_flac: "1.2a",
apple_musickit: "1.2.3",
poketube_normalize_volume: "1.2.23-yt",
},
piwik: "master",
process: process.versions,
dependencies: pkg.dependencies,
2023-09-09 18:58:37 +02:00
poketubeapicode: btoa(Date.now() + invidious.software.version),
};
2022-11-15 17:40:40 +01:00
res.json(response);
});
2022-11-09 17:51:10 +01:00
2022-11-15 17:40:40 +01:00
app.get("/api/instances.json", async (req, res) => {
2023-09-16 19:03:11 +02:00
const { fetch } = await import("undici");
2023-01-07 17:28:31 +01:00
try {
const url = `https://codeberg.org/Ashley/poketube/raw/branch/main/instances.json`;
2022-11-09 17:51:10 +01:00
2023-09-16 19:03:11 +02:00
let f = await fetch(url)
2023-01-07 17:28:31 +01:00
.then((res) => res.text())
.then((json) => JSON.parse(json));
2022-11-09 17:51:10 +01:00
2023-01-07 17:28:31 +01:00
res.json(f);
} catch {
res.json("error while fetching instances");
}
2022-11-15 17:40:40 +01:00
});
};
2022-11-16 11:27:48 +01:00
2022-11-16 15:00:15 +01:00
module.exports.api = versionnumber;