104 lines
2.5 KiB
TypeScript
104 lines
2.5 KiB
TypeScript
import { Application } from "@oak/oak";
|
|
import { oakCors } from "@tajpouria/cors";
|
|
|
|
import dumpsRouter from "./routes/dumps.ts";
|
|
import filesRouter from "./routes/files.ts";
|
|
import usersRouter from "./routes/users.ts";
|
|
import avatarsRouter from "./routes/avatars.ts";
|
|
import wsRouter from "./routes/ws.ts";
|
|
import previewRouter from "./routes/preview.ts";
|
|
import playlistsRouter from "./routes/playlists.ts";
|
|
import commentsRouter from "./routes/comments.ts";
|
|
import followsRouter from "./routes/follows.ts";
|
|
import notificationsRouter from "./routes/notifications.ts";
|
|
import invitesRouter from "./routes/invites.ts";
|
|
|
|
import { BASE_URL, HOSTNAME, PORT } from "./config.ts";
|
|
import { errorMiddleware } from "./middleware/error.ts";
|
|
import routeStaticFilesFrom from "./lib/static.ts";
|
|
import { DUMPS_DIR, UPLOADS_DIR } from "./lib/upload.ts";
|
|
import { UUID_RE } from "./lib/slugify.ts";
|
|
|
|
const app = new Application();
|
|
|
|
app.use(errorMiddleware);
|
|
app.use(oakCors());
|
|
app.use(
|
|
dumpsRouter.routes(),
|
|
dumpsRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
filesRouter.routes(),
|
|
filesRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
usersRouter.routes(),
|
|
usersRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
avatarsRouter.routes(),
|
|
avatarsRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
wsRouter.routes(),
|
|
wsRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
previewRouter.routes(),
|
|
previewRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
playlistsRouter.routes(),
|
|
playlistsRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
commentsRouter.routes(),
|
|
commentsRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
followsRouter.routes(),
|
|
followsRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
notificationsRouter.routes(),
|
|
notificationsRouter.allowedMethods(),
|
|
);
|
|
app.use(
|
|
invitesRouter.routes(),
|
|
invitesRouter.allowedMethods(),
|
|
);
|
|
app.use(routeStaticFilesFrom([
|
|
`${Deno.cwd()}/dist`,
|
|
`${Deno.cwd()}/public`,
|
|
]));
|
|
|
|
app.addEventListener(
|
|
"listen",
|
|
() => console.log(`Server listening on ${BASE_URL}`),
|
|
);
|
|
|
|
app.addEventListener(
|
|
"error",
|
|
(e) => console.log(`Uncaught error: ${e.message}`),
|
|
);
|
|
|
|
// Migrate dump files from uploads root to uploads/dumps subfolder
|
|
async function migrateDumpFiles() {
|
|
await Deno.mkdir(DUMPS_DIR, { recursive: true });
|
|
for await (const entry of Deno.readDir(UPLOADS_DIR)) {
|
|
if (entry.isFile && UUID_RE.test(entry.name)) {
|
|
await Deno.rename(
|
|
`${UPLOADS_DIR}/${entry.name}`,
|
|
`${DUMPS_DIR}/${entry.name}`,
|
|
).catch(() => {});
|
|
}
|
|
}
|
|
}
|
|
|
|
if (import.meta.main) {
|
|
await migrateDumpFiles();
|
|
await app.listen({ hostname: HOSTNAME, port: PORT });
|
|
}
|
|
|
|
export { app };
|