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=3000NODE_ENV=developmentDATABASE_URL="postgresql://user:password@localhost:5432/dbname"REDIS_HOST=localhostREDIS_PORT=6379JWT_SECRET=mysecretkeySESSION_SECRET=session_secret_keyOAUTH_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 testBSD 2-Clause License