Skip to main content
Glama
auth.ts2.69 kB
/** * Complex authentication module for testing. */ import { createClient } from '@supabase/supabase-js'; import { validateToken } from './utils'; interface User { id: string; email: string; role: 'admin' | 'user'; } interface AuthResult { success: boolean; user?: User; error?: string; } /** * Validate user session token. */ export async function validateSession(token: string): Promise<boolean> { if (!token) { return false; } try { const isValid = await validateToken(token); return isValid; } catch (error) { console.error('Session validation failed:', error); return false; } } /** * Authenticate user with email and password. */ export async function authenticateUser( email: string, password: string ): Promise<AuthResult> { // Input validation if (!email || !password) { return { success: false, error: 'Email and password required' }; } // Check rate limiting if (await isRateLimited(email)) { return { success: false, error: 'Too many attempts' }; } try { // Supabase auth const supabase = createClient( process.env.SUPABASE_URL!, process.env.SUPABASE_KEY! ); const { data, error } = await supabase.auth.signInWithPassword({ email, password, }); if (error) { return { success: false, error: error.message }; } return { success: true, user: { id: data.user.id, email: data.user.email!, role: 'user', }, }; } catch (error) { return { success: false, error: 'Authentication failed' }; } } /** * Check if user is rate limited. */ async function isRateLimited(email: string): Promise<boolean> { // Simplified rate limiting check return false; } /** * Create a new user session. */ export function createSession(user: User): string { const payload = { userId: user.id, email: user.email, role: user.role, exp: Date.now() + 3600000, // 1 hour }; return Buffer.from(JSON.stringify(payload)).toString('base64'); } export default class AuthService { private supabase; constructor(url: string, key: string) { this.supabase = createClient(url, key); } async signIn(email: string, password: string): Promise<AuthResult> { return authenticateUser(email, password); } async signOut(): Promise<void> { await this.supabase.auth.signOut(); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jahanzaib-Kaleem/hive-mind-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server