| | 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); |
| | |
| | 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); |
| | }); |
| | }; |
| |
|