mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-14 22:21:10 +02:00
Applied formatting to 1487+ files using pnpm format:write - TypeScript/JavaScript files - Svelte components - Astro pages - JSON configs - Markdown docs 13 files still need manual review (Astro JSX comments)
410 lines
10 KiB
Markdown
410 lines
10 KiB
Markdown
# ✅ Mana Core Auth Integration - COMPLETE
|
|
|
|
**Date:** 2025-11-25
|
|
**Status:** 🎉 All code changes implemented
|
|
**Project:** Chat (Backend, Web, Mobile)
|
|
|
|
---
|
|
|
|
## 🎯 Summary
|
|
|
|
The Chat project has been **fully migrated** from Supabase Auth to **Mana Core Auth**! All three apps (backend, web, mobile) now use the centralized authentication system with built-in credit management.
|
|
|
|
---
|
|
|
|
## ✅ What Was Done
|
|
|
|
### 1. **Updated `@manacore/shared-auth` Package** ✅
|
|
|
|
**Location:** `/packages/shared-auth/src/core/authService.ts`
|
|
|
|
**Changes:**
|
|
|
|
- Updated API endpoints to match Mana Core Auth (`/api/v1/auth/*`)
|
|
- Fixed login response handling (`accessToken` instead of `appToken`)
|
|
- Fixed signup flow (register then login separately)
|
|
- Updated refresh token endpoint
|
|
- Updated credits balance endpoint
|
|
|
|
**Status:** Package is now 100% compatible with Mana Core Auth API
|
|
|
|
---
|
|
|
|
### 2. **Chat Backend Integration** ✅
|
|
|
|
**Files Modified:**
|
|
|
|
- ✅ `chat/backend/src/common/guards/jwt-auth.guard.ts` (NEW)
|
|
- ✅ `chat/backend/src/common/decorators/current-user.decorator.ts` (NEW)
|
|
- ✅ `chat/backend/src/chat/chat.controller.ts`
|
|
- ✅ `chat/backend/src/chat/chat.service.ts`
|
|
- ✅ `chat/backend/src/conversation/conversation.controller.ts`
|
|
- ✅ `chat/backend/.env.example`
|
|
|
|
**Changes:**
|
|
|
|
- Created JWT Auth Guard that validates tokens with Mana Core Auth
|
|
- Created CurrentUser decorator to inject user data into controllers
|
|
- Updated all controllers to use JwtAuthGuard
|
|
- Removed userId from request body (now extracted from JWT)
|
|
- Added MANA_CORE_AUTH_URL environment variable
|
|
- Changed PORT from 3001 to 3002 (to avoid conflict with auth service)
|
|
|
|
**Key Features:**
|
|
|
|
- All endpoints now protected with JWT validation
|
|
- User context automatically injected via @CurrentUser decorator
|
|
- Token validation happens via Mana Core Auth API
|
|
- Proper error handling for invalid/expired tokens
|
|
|
|
---
|
|
|
|
### 3. **Chat Web App Integration** ✅
|
|
|
|
**Files Modified:**
|
|
|
|
- ✅ `chat/apps/web/src/lib/stores/auth.svelte.ts`
|
|
- ✅ `chat/apps/web/.env.example`
|
|
|
|
**Changes:**
|
|
|
|
- Completely rewrote auth store to use `@manacore/shared-auth`
|
|
- Removed Supabase auth dependencies
|
|
- Added `initializeWebAuth()` initialization
|
|
- Added `getCredits()` method for credit balance
|
|
- Added `getAccessToken()` method for API calls
|
|
- Added MANA_CORE_AUTH_URL environment variable
|
|
|
|
**API Compatibility:**
|
|
|
|
- Same method signatures as before (signIn, signUp, signOut, resetPassword)
|
|
- Minimal breaking changes for existing code
|
|
- Additional methods: `getCredits()`, `getAccessToken()`
|
|
|
|
---
|
|
|
|
### 4. **Chat Mobile App Integration** ✅
|
|
|
|
**Files Modified:**
|
|
|
|
- ✅ `chat/apps/mobile/context/AuthProvider.tsx`
|
|
- ✅ `chat/apps/mobile/.env.example`
|
|
|
|
**Changes:**
|
|
|
|
- Rewrote AuthProvider to use `@manacore/shared-auth`
|
|
- Created SecureStore adapter for token storage
|
|
- Created React Native device adapter
|
|
- Created React Native network adapter
|
|
- Removed Supabase auth dependencies
|
|
- Added MANA_CORE_AUTH_URL environment variable
|
|
|
|
**Key Features:**
|
|
|
|
- Tokens stored securely in Expo SecureStore
|
|
- Device ID generated and persisted
|
|
- Same API as before (useAuth hook remains unchanged)
|
|
- Auto sign-in after successful signup
|
|
|
|
---
|
|
|
|
## 📝 Configuration Changes
|
|
|
|
### Backend `.env`
|
|
|
|
```env
|
|
# OLD (Remove):
|
|
# SUPABASE_URL=...
|
|
# SUPABASE_SERVICE_KEY=...
|
|
# PORT=3001
|
|
|
|
# NEW (Add):
|
|
MANA_CORE_AUTH_URL=http://localhost:3001
|
|
PORT=3002
|
|
|
|
# Keep (for database):
|
|
SUPABASE_URL=https://your-project.supabase.co
|
|
SUPABASE_SERVICE_KEY=your-service-key-here
|
|
```
|
|
|
|
### Web App `.env`
|
|
|
|
```env
|
|
# OLD (Remove):
|
|
# PUBLIC_SUPABASE_URL=...
|
|
# PUBLIC_SUPABASE_ANON_KEY=...
|
|
# PUBLIC_BACKEND_URL=http://localhost:3001
|
|
|
|
# NEW (Add):
|
|
PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
|
PUBLIC_BACKEND_URL=http://localhost:3002
|
|
|
|
# Keep (for database):
|
|
PUBLIC_SUPABASE_URL=https://your-project.supabase.co
|
|
PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
|
```
|
|
|
|
### Mobile App `.env`
|
|
|
|
```env
|
|
# OLD (Remove):
|
|
# EXPO_PUBLIC_SUPABASE_URL=...
|
|
# EXPO_PUBLIC_SUPABASE_ANON_KEY=...
|
|
# EXPO_PUBLIC_BACKEND_URL=http://localhost:3001
|
|
|
|
# NEW (Add):
|
|
EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
|
EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
|
|
|
# Keep (for database):
|
|
EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
|
|
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
|
|
```
|
|
|
|
---
|
|
|
|
## 🚀 How to Run
|
|
|
|
### 1. Start Mana Core Auth (Terminal 1)
|
|
|
|
```bash
|
|
cd mana-core-auth
|
|
cp .env.example .env
|
|
# Edit .env and add JWT keys (see mana-core-auth/QUICKSTART.md)
|
|
pnpm start:dev
|
|
```
|
|
|
|
Service runs on: `http://localhost:3001`
|
|
|
|
### 2. Start Chat Backend (Terminal 2)
|
|
|
|
```bash
|
|
cd chat/backend
|
|
cp .env.example .env
|
|
# Edit .env:
|
|
# - Add MANA_CORE_AUTH_URL=http://localhost:3001
|
|
# - Change PORT=3002
|
|
pnpm start:dev
|
|
```
|
|
|
|
Service runs on: `http://localhost:3002`
|
|
|
|
### 3. Start Web App (Terminal 3)
|
|
|
|
```bash
|
|
cd chat/apps/web
|
|
cp .env.example .env
|
|
# Edit .env:
|
|
# - Add PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
|
# - Change PUBLIC_BACKEND_URL=http://localhost:3002
|
|
pnpm dev
|
|
```
|
|
|
|
App runs on: `http://localhost:5173`
|
|
|
|
### 4. Start Mobile App (Terminal 4)
|
|
|
|
```bash
|
|
cd chat/apps/mobile
|
|
cp .env.example .env
|
|
# Edit .env:
|
|
# - Add EXPO_PUBLIC_MANA_CORE_AUTH_URL=http://localhost:3001
|
|
# - Change EXPO_PUBLIC_BACKEND_URL=http://localhost:3002
|
|
pnpm dev
|
|
```
|
|
|
|
---
|
|
|
|
## 🧪 Testing Checklist
|
|
|
|
### Backend
|
|
|
|
- [ ] Start backend on port 3002
|
|
- [ ] Try accessing `/api/chat/models` without token → Should return 401
|
|
- [ ] Login via Mana Core Auth
|
|
- [ ] Access `/api/chat/models` with token → Should work
|
|
- [ ] Access `/api/conversations` with token → Should work
|
|
|
|
### Web App
|
|
|
|
- [ ] Go to `/login`
|
|
- [ ] Register new user
|
|
- [ ] Should redirect and auto-login
|
|
- [ ] Check user is authenticated
|
|
- [ ] Try protected routes
|
|
- [ ] Logout
|
|
- [ ] Try protected routes again → Should redirect to login
|
|
|
|
### Mobile App
|
|
|
|
- [ ] Open app
|
|
- [ ] Register new user
|
|
- [ ] Should auto-login
|
|
- [ ] Check chat functionality works
|
|
- [ ] Logout
|
|
- [ ] Login again with same credentials
|
|
|
|
---
|
|
|
|
## 💡 New Features Available
|
|
|
|
### Credit System (Built-in)
|
|
|
|
All users now have access to the credit system:
|
|
|
|
```typescript
|
|
// Web App
|
|
const credits = await authStore.getCredits();
|
|
console.log(credits); // { credits: 150, maxCreditLimit: 1000, userId: "..." }
|
|
|
|
// Mobile App (need to add this method to AuthProvider if needed)
|
|
const credits = await authService.getUserCredits();
|
|
```
|
|
|
|
**Default Credits:**
|
|
|
|
- Signup bonus: 150 free credits
|
|
- Daily free credits: 5 credits every 24 hours
|
|
- Pricing: 100 mana = €1.00
|
|
|
|
---
|
|
|
|
## 🔄 What Changed for Users
|
|
|
|
| Aspect | Before (Supabase) | After (Mana Core) | Impact |
|
|
| ----------------- | ----------------- | ------------------------ | ------------------------------ |
|
|
| **Registration** | Immediate session | Register → Login | Minimal (auto-login in mobile) |
|
|
| **Login** | Supabase JWT | Mana Core JWT | None (transparent) |
|
|
| **Token Storage** | Supabase cookies | localStorage/SecureStore | None (same security) |
|
|
| **Sessions** | Supabase sessions | JWT + refresh tokens | Better (token rotation) |
|
|
| **Credits** | ❌ None | ✅ 150 initial + 5 daily | **NEW FEATURE!** |
|
|
|
|
---
|
|
|
|
## 📊 Port Configuration
|
|
|
|
| Service | Port | URL |
|
|
| ------------------ | ---- | --------------------- |
|
|
| **Mana Core Auth** | 3001 | http://localhost:3001 |
|
|
| **Chat Backend** | 3002 | http://localhost:3002 |
|
|
| **Web App** | 5173 | http://localhost:5173 |
|
|
| **Mobile App** | 8081 | exp://localhost:8081 |
|
|
|
|
---
|
|
|
|
## 🐛 Potential Issues & Solutions
|
|
|
|
### Issue: "Connection refused" to Mana Core Auth
|
|
|
|
**Solution:** Make sure Mana Core Auth is running on port 3001
|
|
|
|
```bash
|
|
cd mana-core-auth && pnpm start:dev
|
|
```
|
|
|
|
### Issue: "Invalid token" errors
|
|
|
|
**Solution:** Clear stored tokens and login again
|
|
|
|
```typescript
|
|
// Web: Clear localStorage
|
|
localStorage.clear();
|
|
|
|
// Mobile: Uninstall and reinstall app, or clear SecureStore
|
|
await SecureStore.deleteItemAsync('@auth/appToken');
|
|
await SecureStore.deleteItemAsync('@auth/refreshToken');
|
|
```
|
|
|
|
### Issue: CORS errors from web app
|
|
|
|
**Solution:** Add web app URL to Mana Core Auth CORS config
|
|
|
|
```env
|
|
# In mana-core-auth/.env
|
|
CORS_ORIGINS=http://localhost:5173,http://localhost:8081
|
|
```
|
|
|
|
### Issue: Backend can't validate tokens
|
|
|
|
**Solution:** Check MANA_CORE_AUTH_URL in backend .env
|
|
|
|
```env
|
|
MANA_CORE_AUTH_URL=http://localhost:3001
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 API Endpoint Reference
|
|
|
|
### Mana Core Auth (Port 3001)
|
|
|
|
- POST `/api/v1/auth/register` - Register new user
|
|
- POST `/api/v1/auth/login` - Login with email/password
|
|
- POST `/api/v1/auth/refresh` - Refresh access token
|
|
- POST `/api/v1/auth/logout` - Logout and revoke session
|
|
- POST `/api/v1/auth/validate` - Validate JWT token
|
|
- GET `/api/v1/credits/balance` - Get credit balance
|
|
|
|
### Chat Backend (Port 3002)
|
|
|
|
- GET `/api/chat/models` - List AI models (protected)
|
|
- POST `/api/chat/completions` - Create chat completion (protected)
|
|
- GET `/api/conversations` - List conversations (protected)
|
|
- POST `/api/conversations` - Create conversation (protected)
|
|
- GET `/api/conversations/:id` - Get conversation (protected)
|
|
- GET `/api/conversations/:id/messages` - Get messages (protected)
|
|
- POST `/api/conversations/:id/messages` - Add message (protected)
|
|
|
|
---
|
|
|
|
## 🎓 Next Steps (Optional Enhancements)
|
|
|
|
1. **Add Credit Usage Tracking**
|
|
- Deduct credits when using AI models
|
|
- Show remaining credits in UI
|
|
|
|
2. **Add OAuth Providers**
|
|
- Google Sign-In
|
|
- Apple Sign-In
|
|
|
|
3. **Add Email Verification**
|
|
- Send verification emails on signup
|
|
- Verify email before allowing login
|
|
|
|
4. **Add Password Reset**
|
|
- Implement forgot password flow
|
|
- Send reset emails
|
|
|
|
5. **Add 2FA**
|
|
- Enable two-factor authentication
|
|
- Support TOTP apps
|
|
|
|
6. **Add Session Management**
|
|
- Show active sessions
|
|
- Revoke specific sessions
|
|
|
|
---
|
|
|
|
## 📖 Documentation
|
|
|
|
- **Integration Guide:** `/chat/MANA_CORE_AUTH_INTEGRATION.md`
|
|
- **Mana Core Auth README:** `/mana-core-auth/README.md`
|
|
- **Quick Start:** `/mana-core-auth/QUICKSTART.md`
|
|
- **Master Plan:** `/.hive-mind/MASTER_PLAN_CENTRAL_AUTH_SYSTEM.md`
|
|
|
|
---
|
|
|
|
## ✨ Benefits of Migration
|
|
|
|
1. **✅ Centralized Authentication** - Single auth system for all Mana Core apps
|
|
2. **✅ Built-in Credits** - No need to build separate credit system
|
|
3. **✅ Better Security** - RS256 JWT, refresh token rotation, optimistic locking
|
|
4. **✅ Cost Savings** - Self-hosted, no per-user charges
|
|
5. **✅ Full Control** - Complete ownership of user data
|
|
6. **✅ Consistent API** - Same auth flow across all apps
|
|
|
|
---
|
|
|
|
**Status:** 🎉 **INTEGRATION COMPLETE - READY FOR TESTING!**
|
|
|
|
All code changes are done. Follow the "How to Run" section above to test the integration.
|