"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const hono_1 = require("hono"); const auth_1 = require("../middlewares/auth"); const supabase_1 = __importDefault(require("../utils/supabase")); const authRouter = new hono_1.Hono(); // Register a new user authRouter.post('/register', async (c) => { try { const { email, password, name } = await c.req.json(); // Validate input if (!email || !password || !name) { return c.json({ error: 'Email, password, and name are required' }, 400); } // Register user with Supabase const { data: authData, error: authError } = await supabase_1.default.auth.signUp({ email, password, }); if (authError) { return c.json({ error: authError.message }, 400); } if (!authData.user) { return c.json({ error: 'Failed to create user' }, 500); } // Create user profile in the database const { error: profileError } = await supabase_1.default .from('users') .insert({ id: authData.user.id, email: authData.user.email, name, created_at: new Date().toISOString(), }); if (profileError) { // Attempt to clean up the auth user if profile creation fails await supabase_1.default.auth.admin.deleteUser(authData.user.id); return c.json({ error: profileError.message }, 500); } // Generate JWT token const token = (0, auth_1.generateToken)(authData.user.id, authData.user.email); return c.json({ message: 'User registered successfully', user: { id: authData.user.id, email: authData.user.email, name, }, token, }, 201); } catch (error) { console.error('Registration error:', error); return c.json({ error: 'Internal server error' }, 500); } }); // Login user authRouter.post('/login', async (c) => { try { const { email, password } = await c.req.json(); const { data, error } = await supabase_1.default.auth.signInWithPassword({ email, password }); if (error) { return c.json({ error: error.message }, 400); } // 使用与 authMiddleware 一致的方式创建 JWT const token = (0, auth_1.generateToken)(data.user.id, data.user.email || ''); // 只返回必要的用户信息和令牌 return c.json({ success: true, token, user: { id: data.user.id, email: data.user.email } }); } catch (error) { console.error(error); return c.json({ error: 'Server error' }, 500); } }); // Verify token authRouter.get('/verify', async (c) => { try { const token = c.req.header('Authorization')?.split(' ')[1]; if (!token) { return c.json({ error: 'No token provided' }, 401); } const user = await (0, auth_1.verifySupabaseToken)(token); if (!user) { return c.json({ error: 'Invalid token' }, 401); } return c.json({ message: 'Token is valid', user: { id: user.id, email: user.email, }, }); } catch (error) { console.error('Token verification error:', error); return c.json({ error: 'Internal server error' }, 500); } }); // Refresh token authRouter.post('/refresh-token', async (c) => { try { const token = c.req.header('Authorization')?.split(' ')[1]; if (!token) { return c.json({ error: 'No token provided' }, 401); } // 验证当前token const user = await (0, auth_1.verifySupabaseToken)(token); if (!user) { return c.json({ error: 'Invalid token' }, 401); } // 生成新token const newToken = (0, auth_1.generateToken)(user.id, user.email || ''); return c.json({ message: 'Token refreshed successfully', token: newToken, user: { id: user.id, email: user.email, }, }); } catch (error) { console.error('Token refresh error:', error); return c.json({ error: 'Internal server error' }, 500); } }); exports.default = authRouter;