sourabhrealtime
Version:
ROBUST RICH TEXT EDITOR: Single-pane contentEditable with direct text selection formatting, speech features, undo/redo, professional UI - Perfect TipTap alternative
119 lines (111 loc) • 3.83 kB
JavaScript
// Supabase API integration for real users
const SUPABASE_URL = "https://supabase.merai.app";
const SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q";
export const supabaseAPI = {
// Authenticate user with Supabase
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',
avatar: data.user.user_metadata?.avatar || null,
created_at: data.user.created_at
},
token: data.access_token
};
}
return { success: false, message: 'Invalid credentials' };
} catch (error) {
return { success: false, message: 'Authentication failed' };
}
},
// Get all users (Super Admin only)
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();
return data.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',
avatar: user.user_metadata?.avatar || null,
created_at: user.created_at,
last_sign_in_at: user.last_sign_in_at,
email_confirmed_at: user.email_confirmed_at
})) : [];
}
return [];
} catch (error) {
console.error('Error fetching users:', error);
return [];
}
},
// Create new user (Super Admin only)
async createUser(email, password, name, role = 'user') {
try {
const response = await fetch(`${SUPABASE_URL}/auth/v1/admin/users`, {
method: 'POST',
headers: {
'apikey': SERVICE_ROLE_KEY,
'Authorization': `Bearer ${SERVICE_ROLE_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
email,
password,
user_metadata: { name, role },
email_confirm: true
})
});
if (response.ok) {
const data = await response.json();
return { success: true, user: data };
}
const error = await response.json();
return { success: false, message: error.message || 'User creation failed' };
} catch (error) {
return { success: false, message: 'User creation failed' };
}
},
// Update user role (Super Admin only)
async updateUserRole(userId, role) {
try {
const response = await fetch(`${SUPABASE_URL}/auth/v1/admin/users/${userId}`, {
method: 'PUT',
headers: {
'apikey': SERVICE_ROLE_KEY,
'Authorization': `Bearer ${SERVICE_ROLE_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
user_metadata: { role }
})
});
return response.ok;
} catch (error) {
return false;
}
}
};