All checks were successful
Build and Push Docker Images / build-backend (push) Successful in 16s
Build and Push Docker Images / build-frontend (push) Successful in 16s
Build and Push Docker Images / build-website (push) Successful in 16s
Build and Push Docker Images / build-central-services-api (push) Successful in 24s
Build and Push Docker Images / build-central-services-admin (push) Successful in 41s
Build and Push Docker Images / build-docs (push) Successful in 16s
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import "./types.js";
|
|
import Fastify from "fastify";
|
|
import cors from "@fastify/cors";
|
|
import { ZodError } from "zod";
|
|
import { env } from "./config/env.js";
|
|
import { pool } from "./db/client.js";
|
|
import { adminRoutes } from "./routes/admin.js";
|
|
import { instanceRoutes } from "./routes/instance.js";
|
|
import { publicRoutes } from "./routes/public.js";
|
|
import { serviceRoutes } from "./routes/services.js";
|
|
|
|
const app = Fastify({
|
|
logger: true,
|
|
bodyLimit: 128 * 1024,
|
|
});
|
|
|
|
app.addContentTypeParser("application/json", { parseAs: "string" }, (request, body, done) => {
|
|
const rawBody = typeof body === "string" ? body : body.toString("utf8");
|
|
request.rawBody = rawBody;
|
|
try {
|
|
done(null, rawBody ? JSON.parse(rawBody) : {});
|
|
} catch (error) {
|
|
done(error as Error);
|
|
}
|
|
});
|
|
|
|
app.setErrorHandler((error, _request, reply) => {
|
|
if (error instanceof ZodError) {
|
|
reply.code(400).send({ error: "validation_error", issues: error.issues });
|
|
return;
|
|
}
|
|
app.log.error(error);
|
|
reply.code(500).send({ error: "internal_error", message: "Interner Fehler im Push-Server." });
|
|
});
|
|
|
|
await app.register(cors, {
|
|
origin: true,
|
|
credentials: true,
|
|
methods: ["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"],
|
|
});
|
|
await app.register(publicRoutes);
|
|
await app.register(adminRoutes);
|
|
await app.register(instanceRoutes);
|
|
await app.register(serviceRoutes);
|
|
|
|
const close = async () => {
|
|
await app.close();
|
|
await pool.end();
|
|
};
|
|
|
|
process.on("SIGINT", () => void close().then(() => process.exit(0)));
|
|
process.on("SIGTERM", () => void close().then(() => process.exit(0)));
|
|
|
|
await app.listen({ host: env.API_HOST, port: env.API_PORT });
|