UNPKG

discord-mcp

Version:
65 lines 2.25 kB
import { DiscordService } from './discord/service.js'; import { UserError } from './utils/errors.js'; import { logger } from './utils/logger.js'; export const attachSession = async (req, ctx, next) => { try { // Get token from session or authorization header const token = ctx.session?.userToken || req.headers?.authorization || ''; // Validate token format (simple check for Discord token structure) if (!token || !/^(Bot\s+)?[\w-]+\.[\w-]+\.[\w-]+$/.test(token)) { throw new UserError('Missing or malformed Discord token. Please provide a valid Discord user or bot token.'); } // Create Discord service instance const discord = new DiscordService(token); // Verify token by fetching current user let user; try { user = await discord.getCurrentUser(); } catch (error) { logger.error({ msg: 'Failed to authenticate with Discord', error }); throw new UserError('Invalid Discord token. Please check your token and try again.'); } // Attach service and user info to context ctx.discord = discord; ctx.user = { id: user.id, username: user.username }; logger.info({ msg: 'Discord session attached', userId: user.id, username: user.username }); // Continue to next middleware/handler return next(req); } catch (error) { // Re-throw UserError as is if (error instanceof UserError) { throw error; } // Log unexpected errors and throw generic message logger.error({ msg: 'Session middleware error', error }); throw new UserError('Failed to establish Discord session. Please try again.'); } }; export class SessionManager { sessions = new Map(); getSession(sessionId) { return this.sessions.get(sessionId); } setSession(sessionId, context) { this.sessions.set(sessionId, context); } deleteSession(sessionId) { this.sessions.delete(sessionId); } } //# sourceMappingURL=session.js.map