nakama/backend/utils/telegram.js

52 lines
1.2 KiB
JavaScript

const { parse, isValid } = require('@telegram-apps/init-data-node');
const config = require('../config');
const MAX_AUTH_AGE_SECONDS = 5 * 60;
function validateAndParseInitData(initDataRaw) {
if (!config.telegramBotToken) {
throw new Error('TELEGRAM_BOT_TOKEN не настроен');
}
if (!initDataRaw || typeof initDataRaw !== 'string') {
throw new Error('initData не передан');
}
const trimmed = initDataRaw.trim();
if (!trimmed.length) {
throw new Error('initData пуст');
}
const valid = isValid(trimmed, config.telegramBotToken);
if (!valid) {
throw new Error('Неверная подпись initData');
}
const payload = parse(trimmed);
if (!payload || !payload.user) {
throw new Error('Отсутствует пользователь в initData');
}
const authDate = Number(payload.auth_date);
if (!authDate) {
throw new Error('Отсутствует auth_date в initData');
}
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - authDate) > MAX_AUTH_AGE_SECONDS) {
throw new Error('Данные авторизации устарели');
}
return payload;
}
module.exports = {
validateAndParseInitData
};