mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 23:21:08 +02:00
369 lines
6.4 KiB
Markdown
369 lines
6.4 KiB
Markdown
# Quick Start Guide - Mana Core Auth
|
|
|
|
Get the authentication system running in 5 minutes!
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js 20+
|
|
- pnpm 9.15.0+
|
|
- Docker & Docker Compose
|
|
- OpenSSL (for key generation)
|
|
|
|
## Step 1: Generate JWT Keys (2 minutes)
|
|
|
|
```bash
|
|
cd mana-core-auth
|
|
chmod +x scripts/generate-keys.sh
|
|
./scripts/generate-keys.sh
|
|
```
|
|
|
|
This will create `private.pem` and `public.pem` and show you the formatted keys for .env
|
|
|
|
## Step 2: Configure Environment (1 minute)
|
|
|
|
```bash
|
|
# Copy the example
|
|
cp .env.example .env
|
|
|
|
# Edit .env and add:
|
|
# 1. JWT keys from Step 1
|
|
# 2. Change default passwords
|
|
# 3. Add Stripe test keys (optional for now)
|
|
```
|
|
|
|
**Minimum required changes in .env:**
|
|
|
|
```env
|
|
POSTGRES_PASSWORD=your-secure-password-here
|
|
REDIS_PASSWORD=your-redis-password-here
|
|
JWT_PRIVATE_KEY="your-private-key-here"
|
|
JWT_PUBLIC_KEY="your-public-key-here"
|
|
```
|
|
|
|
## Step 3: Start Infrastructure (30 seconds)
|
|
|
|
```bash
|
|
# From monorepo root
|
|
docker-compose up postgres redis -d
|
|
|
|
# Wait for services to be healthy
|
|
docker-compose ps
|
|
```
|
|
|
|
## Step 4: Run Migrations (10 seconds)
|
|
|
|
```bash
|
|
cd mana-core-auth
|
|
pnpm migration:run
|
|
```
|
|
|
|
Expected output:
|
|
|
|
```
|
|
Running migrations...
|
|
Migrations completed successfully
|
|
```
|
|
|
|
## Step 5: Start the Service (10 seconds)
|
|
|
|
```bash
|
|
pnpm start:dev
|
|
```
|
|
|
|
You should see:
|
|
|
|
```
|
|
🚀 Mana Core Auth running on: http://localhost:3001
|
|
📚 Environment: development
|
|
```
|
|
|
|
## Test It Works!
|
|
|
|
### 1. Register a User
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3001/api/v1/auth/register \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "test@example.com",
|
|
"password": "SecurePass123!",
|
|
"name": "Test User"
|
|
}'
|
|
```
|
|
|
|
Expected response:
|
|
|
|
```json
|
|
{
|
|
"id": "uuid-here",
|
|
"email": "test@example.com",
|
|
"name": "Test User",
|
|
"createdAt": "2025-11-25T..."
|
|
}
|
|
```
|
|
|
|
### 2. Login
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3001/api/v1/auth/login \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "test@example.com",
|
|
"password": "SecurePass123!"
|
|
}'
|
|
```
|
|
|
|
Expected response:
|
|
|
|
```json
|
|
{
|
|
"user": {
|
|
"id": "uuid-here",
|
|
"email": "test@example.com",
|
|
"name": "Test User",
|
|
"role": "user"
|
|
},
|
|
"accessToken": "eyJhbGciOiJSUzI1NiIs...",
|
|
"refreshToken": "long-random-string",
|
|
"expiresIn": 900,
|
|
"tokenType": "Bearer"
|
|
}
|
|
```
|
|
|
|
### 3. Check Credit Balance
|
|
|
|
```bash
|
|
# Replace YOUR_TOKEN with accessToken from login
|
|
curl -X GET http://localhost:3001/api/v1/credits/balance \
|
|
-H "Authorization: Bearer YOUR_TOKEN"
|
|
```
|
|
|
|
Expected response:
|
|
|
|
```json
|
|
{
|
|
"balance": 0,
|
|
"freeCreditsRemaining": 150,
|
|
"totalEarned": 0,
|
|
"totalSpent": 0,
|
|
"dailyFreeCredits": 5
|
|
}
|
|
```
|
|
|
|
### 4. Use Some Credits
|
|
|
|
```bash
|
|
curl -X POST http://localhost:3001/api/v1/credits/use \
|
|
-H "Authorization: Bearer YOUR_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"amount": 10,
|
|
"appId": "test",
|
|
"description": "Test credit usage",
|
|
"idempotencyKey": "test-unique-123"
|
|
}'
|
|
```
|
|
|
|
Expected response:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"transaction": {
|
|
"id": "uuid-here",
|
|
"userId": "uuid-here",
|
|
"type": "usage",
|
|
"status": "completed",
|
|
"amount": -10,
|
|
"balanceBefore": 150,
|
|
"balanceAfter": 140,
|
|
"appId": "test",
|
|
"description": "Test credit usage"
|
|
},
|
|
"newBalance": {
|
|
"balance": 0,
|
|
"freeCreditsRemaining": 140,
|
|
"totalSpent": 10
|
|
}
|
|
}
|
|
```
|
|
|
|
## You're Done! 🎉
|
|
|
|
The authentication system is now running and ready to use.
|
|
|
|
## Next Steps
|
|
|
|
1. **Integrate with your apps**
|
|
- Add the auth endpoints to your mobile/web apps
|
|
- Implement token refresh logic
|
|
- Store tokens securely (SecureStore on mobile, httpOnly cookies on web)
|
|
|
|
2. **Add Stripe integration**
|
|
- Get Stripe API keys
|
|
- Add webhook endpoint
|
|
- Create credit packages
|
|
- Test payment flow
|
|
|
|
3. **Production deployment**
|
|
- Follow DOCKER_DEPLOYMENT_GUIDE.md
|
|
- Set up on VPS
|
|
- Configure domain and SSL
|
|
- Enable monitoring
|
|
|
|
## Troubleshooting
|
|
|
|
### "Connection refused" to PostgreSQL
|
|
|
|
**Problem:** Database not ready yet
|
|
|
|
**Solution:**
|
|
|
|
```bash
|
|
docker-compose ps # Check if postgres is healthy
|
|
docker-compose logs postgres # Check logs
|
|
```
|
|
|
|
### "JWT key not found" error
|
|
|
|
**Problem:** JWT keys not set in .env
|
|
|
|
**Solution:**
|
|
|
|
```bash
|
|
# Run the key generator again
|
|
./scripts/generate-keys.sh
|
|
|
|
# Copy the keys to .env
|
|
# Make sure they're properly escaped (with \n for newlines)
|
|
```
|
|
|
|
### Migrations fail
|
|
|
|
**Problem:** Database schema issues
|
|
|
|
**Solution:**
|
|
|
|
```bash
|
|
# Drop and recreate database
|
|
docker-compose down -v
|
|
docker-compose up postgres -d
|
|
# Wait 10 seconds
|
|
pnpm migration:run
|
|
```
|
|
|
|
### Port 3001 already in use
|
|
|
|
**Problem:** Another service is using the port
|
|
|
|
**Solution:**
|
|
|
|
```bash
|
|
# Change PORT in .env
|
|
echo "PORT=3002" >> .env
|
|
|
|
# Or kill the process using 3001
|
|
lsof -ti:3001 | xargs kill
|
|
```
|
|
|
|
## Development Tips
|
|
|
|
### Watch Database Changes
|
|
|
|
```bash
|
|
pnpm db:studio
|
|
# Opens Drizzle Studio at http://localhost:4983
|
|
```
|
|
|
|
### View Logs
|
|
|
|
```bash
|
|
# Application logs
|
|
# The service prints to console when running in dev mode
|
|
|
|
# Docker logs
|
|
docker-compose logs -f postgres
|
|
docker-compose logs -f redis
|
|
```
|
|
|
|
### Run Tests
|
|
|
|
```bash
|
|
pnpm test
|
|
pnpm test:watch
|
|
pnpm test:cov
|
|
```
|
|
|
|
### Format Code
|
|
|
|
```bash
|
|
pnpm format
|
|
pnpm lint
|
|
```
|
|
|
|
## Common Commands
|
|
|
|
```bash
|
|
# Start dev server
|
|
pnpm start:dev
|
|
|
|
# Build for production
|
|
pnpm build
|
|
|
|
# Start production server
|
|
pnpm start:prod
|
|
|
|
# Generate new migration
|
|
pnpm migration:generate
|
|
|
|
# Run migrations
|
|
pnpm migration:run
|
|
|
|
# Open database GUI
|
|
pnpm db:studio
|
|
```
|
|
|
|
## Environment Variables Reference
|
|
|
|
### Required
|
|
|
|
- `DATABASE_URL` - PostgreSQL connection string
|
|
- `JWT_PRIVATE_KEY` - RS256 private key (PEM format)
|
|
- `JWT_PUBLIC_KEY` - RS256 public key (PEM format)
|
|
|
|
### Optional (have defaults)
|
|
|
|
- `PORT` - Server port (default: 3001)
|
|
- `NODE_ENV` - Environment (default: development)
|
|
- `REDIS_HOST` - Redis host (default: localhost)
|
|
- `CORS_ORIGINS` - Allowed origins (default: localhost:3000,localhost:8081)
|
|
- `CREDITS_SIGNUP_BONUS` - Signup credits (default: 150)
|
|
- `CREDITS_DAILY_FREE` - Daily free credits (default: 5)
|
|
|
|
### For Production
|
|
|
|
- `STRIPE_SECRET_KEY` - Stripe secret key
|
|
- `STRIPE_WEBHOOK_SECRET` - Stripe webhook signing secret
|
|
- `ACME_EMAIL` - Email for Let's Encrypt SSL
|
|
- `AUTH_DOMAIN` - Domain name for the service
|
|
|
|
## Resources
|
|
|
|
- **Full Documentation:** `README.md`
|
|
- **Database Schema:** `docs/DATABASE_SCHEMA.md`
|
|
- **Migration Guide:** `MIGRATIONS.md`
|
|
|
|
## Support
|
|
|
|
If you encounter issues:
|
|
|
|
1. Check this guide first
|
|
2. Review the logs
|
|
3. Consult the master plan
|
|
4. Ask the development team
|
|
|
|
---
|
|
|
|
**Time to Complete:** ~5 minutes
|
|
|
|
**Status:** Ready for Development & Testing
|