UNPKG

sourabhrealtime

Version:

ROBUST RICH TEXT EDITOR: Single-pane contentEditable with direct text selection formatting, speech features, undo/redo, professional UI - Perfect TipTap alternative

196 lines (174 loc) 6.55 kB
// Working Supabase API const SUPABASE_URL = "https://supabase.merai.app"; const SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q"; const workingSupabase = { async authenticateUser(email, password) { try { const response = await fetch(`${SUPABASE_URL}/auth/v1/token?grant_type=password`, { method: 'POST', headers: { 'apikey': SERVICE_ROLE_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }) }); if (response.ok) { const data = await response.json(); return { success: true, user: { id: data.user.id, email: data.user.email, name: data.user.user_metadata?.name || data.user.email.split('@')[0], role: data.user.user_metadata?.role || 'user' }, token: data.access_token }; } return { success: false, message: 'Invalid credentials' }; } catch (error) { return { success: false, message: 'Authentication failed' }; } }, async getProjects(userId, userRole) { // Use localStorage for projects try { const projects = JSON.parse(localStorage.getItem('projects') || '[]'); if (userRole === 'super_admin') { return { success: true, projects }; } else { const userProjects = projects.filter(p => p.created_by === userId || (p.members && p.members.includes(userId)) ); return { success: true, projects: userProjects }; } } catch (error) { return { success: true, projects: [] }; } }, async createProject(projectData, creatorId) { try { const projects = JSON.parse(localStorage.getItem('projects') || '[]'); const newProject = { id: Date.now().toString(), name: projectData.name, description: projectData.description || '', content: '<p>Start typing...</p>', created_by: creatorId, members: [creatorId], created_at: new Date().toISOString(), updated_at: new Date().toISOString() }; projects.push(newProject); localStorage.setItem('projects', JSON.stringify(projects)); return { success: true, project: newProject }; } catch (error) { return { success: false, message: error.message }; } }, async updateProjectContent(projectId, content, userId) { try { const projects = JSON.parse(localStorage.getItem('projects') || '[]'); const projectIndex = projects.findIndex(p => p.id === projectId); if (projectIndex !== -1) { projects[projectIndex].content = content; projects[projectIndex].updated_at = new Date().toISOString(); projects[projectIndex].updated_by = userId; localStorage.setItem('projects', JSON.stringify(projects)); } return { success: true }; } catch (error) { return { success: false }; } }, async getApprovalRequests() { try { const requests = JSON.parse(localStorage.getItem('approval_requests') || '[]'); const pending = requests.filter(r => r.status === 'pending'); return { success: true, requests: pending }; } catch (error) { return { success: true, requests: [] }; } }, async createApprovalRequest(requestData) { try { const requests = JSON.parse(localStorage.getItem('approval_requests') || '[]'); const newRequest = { id: Date.now().toString(), project_id: requestData.projectId, project_name: requestData.projectName, content: requestData.content, user_id: requestData.user.id, user_name: requestData.user.name, user_email: requestData.user.email, status: 'pending', created_at: new Date().toISOString() }; requests.push(newRequest); localStorage.setItem('approval_requests', JSON.stringify(requests)); return { success: true, request: newRequest }; } catch (error) { return { success: false, message: error.message }; } }, async updateApprovalRequest(requestId, status, adminId) { try { const requests = JSON.parse(localStorage.getItem('approval_requests') || '[]'); const requestIndex = requests.findIndex(r => r.id === requestId); if (requestIndex !== -1) { requests[requestIndex].status = status; requests[requestIndex].reviewed_by = adminId; requests[requestIndex].reviewed_at = new Date().toISOString(); localStorage.setItem('approval_requests', JSON.stringify(requests)); } return { success: true }; } catch (error) { return { success: false }; } }, async getAllUsers() { try { const response = await fetch(`${SUPABASE_URL}/auth/v1/admin/users`, { headers: { 'apikey': SERVICE_ROLE_KEY, 'Authorization': `Bearer ${SERVICE_ROLE_KEY}`, 'Content-Type': 'application/json' } }); if (response.ok) { const data = await response.json(); const users = data.users?.map(user => ({ id: user.id, email: user.email, name: user.user_metadata?.name || user.email.split('@')[0], role: user.user_metadata?.role || 'user', created_at: user.created_at })) || []; return { success: true, users }; } return { success: true, users: [] }; } catch (error) { return { success: true, users: [] }; } }, async inviteUserToProject(projectId, userId, invitedBy) { try { const projects = JSON.parse(localStorage.getItem('projects') || '[]'); const projectIndex = projects.findIndex(p => p.id === projectId); if (projectIndex !== -1) { if (!projects[projectIndex].members) { projects[projectIndex].members = []; } if (!projects[projectIndex].members.includes(userId)) { projects[projectIndex].members.push(userId); projects[projectIndex].updated_at = new Date().toISOString(); localStorage.setItem('projects', JSON.stringify(projects)); } } return { success: true }; } catch (error) { return { success: false, message: error.message }; } } }; export default workingSupabase;