editia-core
Version:
Core services and utilities for Editia applications - Authentication, Monetization, Video Generation Types, and Database Management
109 lines • 3.49 kB
JavaScript
;
/**
* Express Authentication Middleware
* Based on analysis of server-analyzer patterns
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAuthMiddleware = exports.optionalAuth = exports.requireProAccess = exports.authenticateUser = void 0;
const clerk_auth_1 = require("../../services/auth/clerk-auth");
/**
* Authentication middleware for Express
* Verifies Clerk JWT and ensures user exists in database
* @param req Express request object
* @param res Express response object
* @param next Express next function
*/
async function authenticateUser(req, res, next) {
try {
const authHeader = req.headers.authorization;
// Use ClerkAuthService to verify user
const { user, errorResponse } = await clerk_auth_1.ClerkAuthService.verifyUser(authHeader);
if (errorResponse) {
res.status(errorResponse.status).json(errorResponse);
return;
}
// Add user to request object
req.user = user;
next();
}
catch (error) {
res.status(500).json({
success: false,
error: 'Authentication service error',
});
}
}
exports.authenticateUser = authenticateUser;
/**
* Pro subscription middleware - requires Pro/Premium tier
* For features that require Pro subscription
* @param req Express request object
* @param res Express response object
* @param next Express next function
*/
async function requireProAccess(req, res, next) {
try {
const authHeader = req.headers.authorization;
// Use ClerkAuthService to verify Pro user
const { user, errorResponse } = await clerk_auth_1.ClerkAuthService.verifyProUser(authHeader);
if (errorResponse) {
res.status(errorResponse.status).json(errorResponse);
return;
}
// Add user to request object
req.user = user;
next();
}
catch (error) {
res.status(500).json({
success: false,
error: 'Authentication service error',
});
}
}
exports.requireProAccess = requireProAccess;
/**
* Optional authentication - for endpoints that work with or without auth
* @param req Express request object
* @param res Express response object
* @param next Express next function
*/
async function optionalAuth(req, _res, next) {
try {
const authHeader = req.headers.authorization;
// Use ClerkAuthService to verify user if header is present
const { user, errorResponse } = await clerk_auth_1.ClerkAuthService.verifyUser(authHeader);
if (!errorResponse && user) {
req.user = user;
}
next();
}
catch (error) {
// Continue without authentication for optional auth
next();
}
}
exports.optionalAuth = optionalAuth;
/**
* Create authentication middleware with custom options
* @param options Middleware options
* @returns Authentication middleware function
*/
function createAuthMiddleware(options = {}) {
const { requireAuth = true, requirePro = false, optional = false } = options;
if (optional) {
return optionalAuth;
}
if (requirePro) {
return requireProAccess;
}
if (requireAuth) {
return authenticateUser;
}
// Default to no authentication
return (_req, _res, next) => {
next();
};
}
exports.createAuthMiddleware = createAuthMiddleware;
//# sourceMappingURL=authenticate.js.map