Self-hosted OAuth2 provider written in TypeScript using Fastify and Prisma.
- 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
| Layer | Technology |
|---|---|
| Runtime | Node.js >= 22 |
| Framework | Fastify |
| ORM | Prisma |
| DB | PostgreSQL |
| Session | Redis + Fastify Session |
| Auth | JWT + OAuth2 |
| Logging | Pino |
| Validation | Envalid + Zod |
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 schemaCreate .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".
├── source/ # Source code
├── prisma/ # Prisma schema & migrations
├── build/ # Compiled TS output
├── .env # Environment config
└── README.md
-
Install dependencies:
npm install
-
Pull database schema:
npm run prisma::pull
-
Generate Prisma client:
npm run prisma::generate
-
Migrate database:
npm run prisma::migrate
-
Start dev server:
npm run dev
npm testСамостоятельный 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
-
Установите зависимости:
npm install
-
Получите схему базы:
npm run prisma::pull
-
Сгенерируйте клиент Prisma:
npm run prisma::generate
-
Выполните миграцию:
npm run prisma::migrate
-
Запустите сервер разработки:
npm run dev
npm testBSD 2-Clause License