disable range requests for now
Mserver/src/index.ts
@@ -43,10 +43,6 @@ const paramType = t.ArrayString();
type DownloadHandler = InferHandler<typeof setup, "/download/*", { params: typeof paramType }>;
const downloadHandler: DownloadHandler = async ({ headers, params, set, request }) => {
if (request.method !== "GET" && request.method !== "HEAD") {
set.status = "Not Found";
return "NOT_FOUND";
}
const filePath = path.join(musicRoot, decodePath(params["*"]));
const fileScan = await getPathInfo(filePath);
if (!fileScan || fileScan instanceof ServerError) {
@@ -61,32 +57,7 @@ const downloadHandler: DownloadHandler = async ({ headers, params, set, request
set.status = "OK";
if (fileScan.mimeType === "audio/x-flac") fileScan.mimeType = "audio/flac"; //seems to be better supported
set.headers["content-type"] = fileScan.mimeType;
const statResult = await stat(filePath);
const fileSize = statResult.size;
if (request.method === "HEAD") {
set.headers["accept-ranges"] = "bytes";
set.headers["content-length"] = fileSize;
return;
}
if (!headers.range) {
set.status = "OK";
return new Response(Bun.file(filePath));
}
const rangeData = parseRange(fileSize, headers.range, { combine: true });
if (rangeData === -1 || rangeData === -2 || rangeData.length > 1) {
set.status = "Range Not Satisfiable";
return "Range Not Satisfiable";
}
const { start, end } = rangeData[0];
set.status = "Partial Content";
set.headers["Content-Range"] = `bytes ${start}-${end}/${fileSize}`;
// set.headers["content-length"] = end - start + 1; //currently broken in bun/elysiajs, overwritten in final response, seems to be fine though
// return createReadStream(filePath, { start, end });
return new Response(Bun.file(filePath).slice(start, end));
return new Response(Bun.file(filePath));
};
const app = setup