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 };