UNPKG

@exact-team/nestjs-telegram-oauth2

Version:
157 lines (112 loc) 5 kB
# NestJS Telegram OAuth2 SDK Module ![GitHub Repo stars](https://img.shields.io/github/stars/exact01/nestjs-telegram-oauth2) ![npm version](https://img.shields.io/npm/v/@exact-team/nestjs-telegram-oauth2) ![GitHub Tag](https://img.shields.io/github/v/tag/exact01/nestjs-telegram-oauth2) ![Build Status](https://img.shields.io/github/actions/workflow/status/exact01/nestjs-telegram-oauth2/.github/workflows/deploy-lib.yml) ![Downloads](https://img.shields.io/npm/dt/@exact-team/nestjs-telegram-oauth2) ![License](https://img.shields.io/npm/l/@exact-team/nestjs-telegram-oauth2) ![NPM Last Update](https://img.shields.io/npm/last-update/%40exact-team%2Fnestjs-telegram-oauth2) ![Known Vulnerabilities](https://snyk.io/test/github/exact01/nestjs-telegram-oauth2/badge.svg) ![Coverage Status](https://img.shields.io/codecov/c/github/exact01/nestjs-telegram-oauth2) --- ## 📦 Установка ```bash npm install @exact-team/nestjs-telegram-oauth2 && npm i @exact-team/telegram-oauth2 ``` ## ⚙️ Подготовка 1. Создайте бота через [@BotFather](https://t.me/BotFather) и получите токен. 2. Установите домен OAuth-компонента командой `/setdomain` в BotFather. 3. Извлеките `botId` часть токена до `:` (напр., для `1234567890:ABC...` это `1234567890`). 4. Сохраните `botId` для использования на фронтенде. ## ⚙️ Подробнее о @exact-team/telegram-oauth2 [Перейти](https://github.com/exact01/telegram-oauth2) ## 🚀 Основные возможности - Простая интеграция с NestJS - Синхронная и асинхронная конфигурация модуля - Глобальная провайдерная доступность - Пользовательский декоратор `@InjectTelegramOAuth2()` - Строгая типизация параметров и ответов - Автоматическая инициализация SDK --- ## ⚙️ Конфигурация ### Синхронная (forRoot) ```typescript import { Module } from '@nestjs/common'; import { TelegramOauth2NestjsModule } from '@exact-team/nestjs-telegram-oauth2'; @Module({ imports: [ TelegramOauth2NestjsModule.forRoot({ botToken: 'YOUR_BOT_TOKEN', validUntil: 2000, // время жизни тела запроса в секундах }), ], }) export class AppModule {} ``` ### Асинхронная (forRootAsync) ```typescript import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { TelegramOauth2NestjsModule } from '@exact-team/nestjs-telegram-oauth2'; @Module({ imports: [ ConfigModule.forRoot(), TelegramOauth2NestjsModule.forRootAsync({ imports: [ConfigModule], useFactory: (config: ConfigService) => ({ botToken: config.getOrThrow<string>('TELEGRAM_BOT_TOKEN'), validUntil: Number(config.getOrThrow<string>('TELEGRAM_VALID_UNTIL_SECONDS')), }), inject: [ConfigService], }), ], }) export class AppModule {} ``` > Если `validUntil` не указан, проверка времени не выполняется. --- ## 🛠 Использование в сервисах ```typescript import { Injectable, BadRequestException } from '@nestjs/common'; import { InjectTelegramOAuth2 } from '@exact-team/nestjs-telegram-oauth2'; import { TelegramOAuth2, ITelegramData } from '@exact-team/telegram-oauth2'; @Injectable() export class TelegramService { constructor(@InjectTelegramOAuth2() private readonly telegram: TelegramOAuth2) {} async authenticate(body: ITelegramData) { const result = this.telegram.handleTelegramOAuthCallback(body); if (!result.isSuccess || !result.data) { throw new BadRequestException(result.message || 'Invalid payload'); } const userData = result.data; // Найти/создать пользователя в БД и выдать JWT return { user: userData }; } } ``` --- ## 🔍 Внутренняя структура - **telegram-oauth2-nestjs.module.ts** Глобальный модуль с методами `forRoot` и `forRootAsync`. - **telegram-oauth2-nestjs.builder.ts** Настраивает `ConfigurableModuleBuilder` для создания провайдеров. - **create-telegram-oauth2-factory.util.ts** Фабрика для инициализации `TelegramOAuth2` с логированием и параметрами. --- ## 📋 Требования - Node.js v20+ - NestJS v10+ - TypeScript v5.0+ --- ## 🛠️ Разработка ```bash # Сборка npm run build ``` --- ## 📄 Лицензия ISC --- ## ✍️ Автор и поддержка **Автор:** exact01 Для вопросов и баг-репортов создавайте [Issue](https://github.com/exact01/nestjs-telegram-oauth2/issues).