1
0
cvsa-legacy/packages/elysia/src/index.ts
2025-11-05 19:22:54 +08:00

74 lines
2.3 KiB
TypeScript

import { Elysia } from "elysia";
import { getBindingInfo, logStartup } from "./startMessage";
import { pingHandler } from "@elysia/routes/ping";
import openapi from "@elysiajs/openapi";
import { cors } from "@elysiajs/cors";
import { songInfoHandler } from "@elysia/routes/song/info";
import { rootHandler } from "@elysia/routes/root";
import { getVideoMetadataHandler } from "@elysia/routes/video/metadata";
import { closeMileStoneHandler } from "@elysia/routes/song/milestone";
const [host, port] = getBindingInfo();
logStartup(host, port);
const encoder = new TextEncoder();
const app = new Elysia({
serve: {
hostname: host
}
})
.onAfterHandle({ as: "global" }, ({ responseValue, request }) => {
const contentType = request.headers.get("Content-Type") || "";
const accept = request.headers.get("Accept") || "";
const secFetchMode = request.headers.get("Sec-Fetch-Mode");
const requestJson = contentType.includes("application/json");
const isBrowser =
!requestJson && (accept.includes("text/html") || secFetchMode === "navigate");
const responseValueType = typeof responseValue;
const isObject = responseValueType === "object";
if (!isObject) {
const response = {
message: responseValue
};
const text = isBrowser ? JSON.stringify(response, null, 2) : JSON.stringify(response);
return new Response(encoder.encode(text), {
headers: {
"Content-Type": "application/json; charset=utf-8"
}
});
}
const realResponse = responseValue as Record<string, unknown>;
if (realResponse.code) {
const text = isBrowser
? JSON.stringify(realResponse.response, null, 2)
: JSON.stringify(realResponse.response);
return new Response(encoder.encode(text), {
status: realResponse.code as any,
headers: {
"Content-Type": "application/json; charset=utf-8"
}
});
}
const text = isBrowser
? JSON.stringify(realResponse, null, 2)
: JSON.stringify(realResponse);
return new Response(encoder.encode(text), {
headers: {
"Content-Type": "application/json; charset=utf-8"
}
});
})
.use(cors())
.use(openapi())
.use(rootHandler)
.use(pingHandler)
.use(getVideoMetadataHandler)
.use(songInfoHandler)
.use(closeMileStoneHandler)
.listen(15412);
export const VERSION = "0.7.0";
export type App = typeof app;