"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.verifySupabaseToken = exports.generateToken = exports.authMiddleware = void 0; const jsonwebtoken_1 = __importDefault(require("jsonwebtoken")); const config_1 = __importDefault(require("../config")); const supabase_1 = __importDefault(require("../utils/supabase")); // Middleware to verify JWT token const authMiddleware = async (c, next) => { try { // Get authorization header const authHeader = c.req.header('Authorization'); if (!authHeader || !authHeader.startsWith('Bearer ')) { return c.json({ error: 'Unauthorized: No token provided' }, 401); } // Extract token const token = authHeader.split(' ')[1]; try { // 验证 JWT token const decoded = jsonwebtoken_1.default.verify(token, config_1.default.jwt.secret); // 特殊处理 Swagger 测试 token if (decoded.sub === 'swagger-test-user' && decoded.email === 'swagger@test.com') { // 为 Swagger 测试设置一个模拟用户 c.set('user', { id: 'swagger-test-user', email: 'swagger@test.com', name: 'Swagger Test User' }); // 继续到下一个中间件或路由处理器 await next(); return; } // 设置用户信息到上下文 c.set('user', { id: decoded.sub, email: decoded.email }); // 继续到下一个中间件或路由处理器 await next(); } catch (jwtError) { if (jwtError instanceof jsonwebtoken_1.default.JsonWebTokenError) { return c.json({ error: 'Unauthorized: Invalid token' }, 401); } if (jwtError instanceof jsonwebtoken_1.default.TokenExpiredError) { return c.json({ error: 'Unauthorized: Token expired' }, 401); } throw jwtError; } } catch (error) { console.error('Auth middleware error:', error); return c.json({ error: 'Internal server error' }, 500); } }; exports.authMiddleware = authMiddleware; // Generate JWT token const generateToken = (userId, email) => { const secret = config_1.default.jwt.secret; const expiresIn = config_1.default.jwt.expiresIn; return jsonwebtoken_1.default.sign({ sub: userId, email, }, secret, { expiresIn, }); }; exports.generateToken = generateToken; // Verify Supabase token const verifySupabaseToken = async (token) => { try { const { data, error } = await supabase_1.default.auth.getUser(token); if (error || !data.user) { return null; } return data.user; } catch (error) { console.error('Supabase token verification error:', error); return null; } }; exports.verifySupabaseToken = verifySupabaseToken;