chore: init

This commit is contained in:
2025-02-05 18:05:56 +06:00
commit 5f99ba28c4
19 changed files with 4546 additions and 0 deletions

56
server.js Normal file
View File

@@ -0,0 +1,56 @@
import Fastify from "fastify";
import fastifyStatic from "@fastify/static";
import { exec } from "child_process";
import { promisify } from "util";
import path from "path";
import crypto from "crypto";
const verifySignature = (payload, signature, secret) => {
const computedSignature = crypto
.createHmac("sha256", secret)
.update(JSON.stringify(payload))
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(computedSignature)
);
};
const execAsync = promisify(exec);
const fastify = Fastify({ logger: true });
fastify.register(fastifyStatic, {
root: path.join(process.cwd(), "dist"),
prefix: "/",
});
fastify.post("/webhook", async (request, reply) => {
const signature = request.headers["strapi-signature"];
if (process.env.WEBHOOK_SECRET) {
const isValid = verifySignature(
request.body,
signature,
process.env.WEBHOOK_SECRET
);
if (!isValid) {
return reply.code(401).send({ error: "Invalid signature" });
}
}
try {
const { stdout } = await execAsync("npm run build");
fastify.log.info(`Build output: ${stdout}`);
return { status: "success", message: "Build completed" };
} catch (error) {
fastify.log.error(error);
return reply.code(500).send({ error: "Build failed" });
}
});
fastify.listen({ port: 3000, host: "0.0.0.0" }, (err) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
});