@exact-team/nestjs-telegram-oauth2
Version:
telegram oauth2 for nestjs
157 lines (112 loc) • 5 kB
Markdown
# NestJS Telegram OAuth2 SDK Module









## 📦 Установка
```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).