Skip to content

Latest commit

 

History

History
237 lines (173 loc) · 4.88 KB

File metadata and controls

237 lines (173 loc) · 4.88 KB

🚀 OAuth Provider Service (SSO)

Self-hosted OAuth2 provider written in TypeScript using Fastify and Prisma.

📦 Features

  • OAuth2 Authorization Code Flow
  • JWT-based tokens (Access & Refresh)
  • Redis session storage
  • PostgreSQL via Prisma ORM
  • REST API with Fastify
  • Cookie & Session support
  • Built-in logging (Pino)
  • Environment validation (Envalid)
  • Type-safe models using Zod

🧱 Tech Stack

Layer Technology
Runtime Node.js >= 22
Framework Fastify
ORM Prisma
DB PostgreSQL
Session Redis + Fastify Session
Auth JWT + OAuth2
Logging Pino
Validation Envalid + Zod

🛠️ Scripts

npm run dev            # Start dev server with hot reload
npm run build          # Build TypeScript to dist/
npm start              # Run compiled app from dist/
npm run prisma::migrate   # Create and apply migrations
npm run prisma::generate  # Generate Prisma client
npm run prisma::pull      # Pull DB schema into Prisma schema

🔐 Environment Variables

Create .env file:

PORT=3000
NODE_ENV=development

DATABASE_URL="postgresql://user:password@localhost:5432/dbname"

REDIS_HOST=localhost
REDIS_PORT=6379

JWT_SECRET=mysecretkey
SESSION_SECRET=session_secret_key

OAUTH_REDIRECT_URI="http://localhost:3000/oauth/callback"

📁 Project Structure

.
├── source/             # Source code
├── prisma/             # Prisma schema & migrations
├── build/              # Compiled TS output
├── .env                # Environment config
└── README.md

✅ Development

  1. Install dependencies:

    npm install
  2. Pull database schema:

    npm run prisma::pull
  3. Generate Prisma client:

    npm run prisma::generate
  4. Migrate database:

    npm run prisma::migrate
  5. Start dev server:

    npm run dev

🧪 Testing

npm test

🌐 Провайдер OAuth

Самостоятельный OAuth2 провайдер, написанный на TypeScript с использованием Fastify и Prisma.

📦 Функционал

  • OAuth2 Authorization Code Flow
  • Токены на основе JWT (Access & Refresh)
  • Хранение сессий в Redis
  • ORM через Prisma
  • База данных PostgreSQL
  • REST API на Fastify
  • Поддержка кук и сессий
  • Логирование через Pino
  • Валидация окружения через Envalid
  • Строго типизированные модели через Zod

🧱 Технологии

Уровень Технология
Runtime Node.js >= 22
Фреймворк Fastify
ORM Prisma
БД PostgreSQL
Сессии Redis + Fastify Session
Авторизация JWT + OAuth2
Логирование Pino
Валидация Envalid + Zod

🛠️ Команды

npm run dev            # Запуск сервера разработки
npm run build          # Сборка TypeScript
npm start              # Запуск собранного приложения
npm run prisma::migrate   # Применить миграции
npm run prisma::generate  # Генерация клиента Prisma
npm run prisma::pull      # Получить схему БД в Prisma

🔐 Переменные окружения

Создайте файл .env:

PORT=3000
NODE_ENV=development

DATABASE_URL="postgresql://user:password@localhost:5432/dbname"

REDIS_HOST=localhost
REDIS_PORT=6379

JWT_SECRET=mysecretkey
SESSION_SECRET=session_secret_key

OAUTH_REDIRECT_URI="http://localhost:3000/oauth/callback"

📁 Структура проекта

.
├── source/             # Исходный код
├── prisma/             # Схемы и миграции Prisma
├── build/              # Собранные файлы
├── .env                # Конфиг окружения
└── README.md

✅ Разработка

  1. Установите зависимости:

    npm install
  2. Получите схему базы:

    npm run prisma::pull
  3. Сгенерируйте клиент Prisma:

    npm run prisma::generate
  4. Выполните миграцию:

    npm run prisma::migrate
  5. Запустите сервер разработки:

    npm run dev

🧪 Тестирование

npm test

📌 License

BSD 2-Clause License