Skip to main content
Glama

MCP Todoist

by kentaroh7777
auth-manager.ts2.79 kB
import { signInWithEmailAndPassword, createUserWithEmailAndPassword, signOut as firebaseSignOut, onAuthStateChanged as firebaseOnAuthStateChanged, User as FirebaseUser } from 'firebase/auth'; import { auth } from '../config/firebase'; import { User } from './types'; import { SecurityManager } from './security'; import { AuthErrorHandler } from './error-handler'; import { AuthDataCache } from './cache'; export class AuthManager { async signInWithEmail(email: string, password: string): Promise<User> { if (!this.validateEmail(email)) { throw new Error('Invalid email format'); } const userCredential = await signInWithEmailAndPassword(auth, email, password); const firebaseUser = userCredential.user; return { uid: firebaseUser.uid, email: firebaseUser.email, displayName: firebaseUser.displayName, }; } async signUpWithEmail(email: string, password: string): Promise<User> { if (!this.validateEmail(email)) { throw new Error('Invalid email format'); } if (!this.validatePassword(password)) { throw new Error('Password too weak'); } const userCredential = await createUserWithEmailAndPassword(auth, email, password); const firebaseUser = userCredential.user; return { uid: firebaseUser.uid, email: firebaseUser.email, displayName: firebaseUser.displayName, }; } async signOut(): Promise<void> { await firebaseSignOut(auth); } getCurrentUser(): User | null { const firebaseUser = auth.currentUser; if (!firebaseUser) return null; return { uid: firebaseUser.uid, email: firebaseUser.email, displayName: firebaseUser.displayName, }; } onAuthStateChanged(callback: (user: User | null) => void): () => void { return firebaseOnAuthStateChanged(auth, (firebaseUser: FirebaseUser | null) => { if (firebaseUser) { callback({ uid: firebaseUser.uid, email: firebaseUser.email, displayName: firebaseUser.displayName, }); } else { callback(null); } }); } async getIdToken(): Promise<string> { const user = auth.currentUser; if (!user) throw new Error('No authenticated user'); return await user.getIdToken(); } async refreshToken(): Promise<string> { const user = auth.currentUser; if (!user) throw new Error('No authenticated user'); return await user.getIdToken(true); } validateEmail(email: string): boolean { const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; return emailRegex.test(email); } validatePassword(password: string): boolean { const validation = SecurityManager.validatePasswordStrength(password); return validation.isValid; } }

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/kentaroh7777/mcp-todoist'

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