mirror of
https://github.com/kyantech/Palmr.git
synced 2025-10-23 06:11:58 +00:00
- Enhanced comments in docker-compose files to clarify the purpose of environment variables, including optional settings for UID, GID, and filesystem encryption. - Introduced DISABLE_FILESYSTEM_ENCRYPTION variable to allow users to disable file encryption, making the ENCRYPTION_KEY optional. - Updated documentation in quick-start guide to reflect changes in environment variable usage and security warnings.
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
import crypto from "node:crypto";
|
|
import fastifyCookie from "@fastify/cookie";
|
|
import { fastifyCors } from "@fastify/cors";
|
|
import fastifyJwt from "@fastify/jwt";
|
|
import { fastifySwaggerUi } from "@fastify/swagger-ui";
|
|
import { fastify } from "fastify";
|
|
import { serializerCompiler, validatorCompiler, ZodTypeProvider } from "fastify-type-provider-zod";
|
|
|
|
import { registerSwagger } from "./config/swagger.config";
|
|
import { envTimeoutOverrides } from "./config/timeout.config";
|
|
import { prisma } from "./shared/prisma";
|
|
|
|
export async function buildApp() {
|
|
const jwtConfig = await prisma.appConfig.findUnique({
|
|
where: { key: "jwtSecret" },
|
|
});
|
|
|
|
const JWT_SECRET = jwtConfig?.value || crypto.randomBytes(64).toString("hex");
|
|
|
|
const app = fastify({
|
|
ajv: {
|
|
customOptions: {
|
|
removeAdditional: false,
|
|
},
|
|
},
|
|
logger: {
|
|
level: "warn",
|
|
},
|
|
bodyLimit: 1024 * 1024 * 1024 * 1024 * 1024,
|
|
connectionTimeout: 0,
|
|
keepAliveTimeout: envTimeoutOverrides.keepAliveTimeout,
|
|
requestTimeout: envTimeoutOverrides.requestTimeout,
|
|
trustProxy: true,
|
|
}).withTypeProvider<ZodTypeProvider>();
|
|
|
|
app.setValidatorCompiler(validatorCompiler);
|
|
app.setSerializerCompiler(serializerCompiler);
|
|
|
|
app.addSchema({
|
|
$id: "dateFormat",
|
|
type: "string",
|
|
format: "date-time",
|
|
});
|
|
|
|
app.register(fastifyCors, {
|
|
origin: true,
|
|
credentials: true,
|
|
});
|
|
|
|
app.register(fastifyCookie);
|
|
app.register(fastifyJwt, {
|
|
secret: JWT_SECRET,
|
|
cookie: {
|
|
cookieName: "token",
|
|
signed: false,
|
|
},
|
|
sign: {
|
|
expiresIn: "1d",
|
|
},
|
|
});
|
|
|
|
app.decorateRequest("jwtSign", function (this: any, payload: object, options?: object) {
|
|
return this.server.jwt.sign(payload, options);
|
|
});
|
|
|
|
registerSwagger(app);
|
|
app.register(fastifySwaggerUi, {
|
|
routePrefix: "/swagger",
|
|
});
|
|
|
|
app.register(require("@scalar/fastify-api-reference"), {
|
|
routePrefix: "/docs",
|
|
configuration: {
|
|
theme: "deepSpace",
|
|
},
|
|
});
|
|
|
|
return app;
|
|
}
|