Files
backend/src/server.ts
Ruslan Bakiev 71561724a5
All checks were successful
Build and deploy Backend / build (push) Successful in 49s
Add Telegram bot login sessions
2026-05-08 19:31:40 +07:00

41 lines
1.4 KiB
TypeScript

import Fastify from 'fastify';
import mercurius from 'mercurius';
import { config } from './config.js';
import { prisma } from './prisma.js';
import { resolvers, schema } from './graphql/schema.js';
import { handleTelegramBotWebhook } from './auth/telegram-bot-login.js';
const app = Fastify({ logger: true });
app.register(mercurius, {
schema,
resolvers,
graphiql: true,
context: async (request) => {
const initDataHeader = request.headers['x-telegram-init-data'];
const loginDataHeader = request.headers['x-telegram-login-data'];
const sessionTokenHeader = request.headers['x-mapflow-session-token'];
return {
telegramInitData: Array.isArray(initDataHeader) ? initDataHeader[0] : initDataHeader,
telegramLoginData: Array.isArray(loginDataHeader) ? loginDataHeader[0] : loginDataHeader,
mapflowSessionToken: Array.isArray(sessionTokenHeader) ? sessionTokenHeader[0] : sessionTokenHeader,
};
},
});
app.get('/health', async () => ({ ok: true }));
app.post('/telegram/webhook', async (request, reply) => {
const secretHeader = request.headers['x-telegram-bot-api-secret-token'];
const secretToken = Array.isArray(secretHeader) ? secretHeader[0] : secretHeader;
await handleTelegramBotWebhook(request.body as never, secretToken);
return reply.send({ ok: true });
});
app.addHook('onClose', async () => {
await prisma.$disconnect();
});
await app.listen({ host: config.host, port: config.port });