streamion / src /routes /index.ts
cursorpro's picture
Upload 57 files
5ec2e9b verified
import { Hono } from "hono";
import { logger } from "hono/logger";
import { bearerAuth } from "hono/bearer-auth";
import youtubeApiPlayer from "./youtube_api_routes/player.ts";
import invidiousRouteLatestVersion from "./invidious_routes/latestVersion.ts";
import invidiousRouteDashManifest from "./invidious_routes/dashManifest.ts";
import invidiousCaptionsApi from "./invidious_routes/captions.ts";
import invidiousVideosApi from "./invidious_routes/videos.ts";
import invidiousSearchApi from "./invidious_routes/search.ts";
import invidiousChannelsApi from "./invidious_routes/channels.ts";
import invidiousPlaylistsApi from "./invidious_routes/playlists.ts";
import invidiousMixesApi from "./invidious_routes/mixes.ts";
import getDownloadHandler from "./invidious_routes/download.ts";
import videoPlaybackProxy from "./videoPlaybackProxy.ts";
import type { Config } from "../lib/helpers/config.ts";
import metrics from "./metrics.ts";
import health from "./health.ts";
export const companionRoutes = (
app: Hono,
config: Config,
) => {
const loggerUnixSocket = (message: string, ...rest: string[]) => {
message = message.replace("//localhost/", "/");
console.log(message, ...rest);
};
if (config.server.use_unix_socket) {
app.use("*", logger(loggerUnixSocket));
} else {
app.use("*", logger());
}
app.use(
"/youtubei/v1/*",
bearerAuth({
token: config.server.secret_key,
}),
);
app.route("/youtubei/v1", youtubeApiPlayer);
app.get("/", (c) => {
return c.text("(this is not actual invidious its just designed to be used in place of it a custom invidious based on invidious-companion)");
});
app.route("/latest_version", invidiousRouteLatestVersion);
// Needs app for app.request in order to call /latest_version endpoint
app.post("/download", getDownloadHandler(app));
app.route("/api/manifest/dash/id", invidiousRouteDashManifest);
app.route("/api/v1/captions", invidiousCaptionsApi);
app.route("/api/v1/videos", invidiousVideosApi);
app.route("/api/v1/search", invidiousSearchApi);
app.route("/api/v1/channels", invidiousChannelsApi);
app.route("/api/v1/playlists", invidiousPlaylistsApi);
app.route("/api/v1/mixes", invidiousMixesApi);
app.route("/videoplayback", videoPlaybackProxy);
};
export const miscRoutes = (
app: Hono,
config: Config,
regenerateSession?: () => Promise<void>,
) => {
app.route("/healthz", health);
if (config.server.enable_metrics) {
app.route("/metrics", metrics);
}
app.get("/api/set/proxy/:proxy", async (c) => {
let proxy = c.req.param("proxy");
if (proxy) {
proxy = decodeURIComponent(proxy);
config.networking.proxy = proxy;
console.log(`[INFO] Proxy updated to: ${proxy}`);
if (regenerateSession) {
console.log("[INFO] Triggering session regeneration...");
await regenerateSession();
}
return c.text(`Proxy updated to: ${proxy}`);
}
return c.text("Invalid proxy", 400);
});
};