sourabhrealtime
Version:
ROBUST RICH TEXT EDITOR: Single-pane contentEditable with direct text selection formatting, speech features, undo/redo, professional UI - Perfect TipTap alternative
85 lines (79 loc) • 2.71 kB
JavaScript
const SUPABASE_URL = "https://supabase.merai.app";
const SERVICE_ROLE_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q";
export const supabaseAuth = {
async login(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 || 'editor'
}
};
}
return { success: false, message: 'Invalid credentials' };
} catch (error) {
return { success: false, message: 'Login failed' };
}
},
async signup(email, password, name, role = 'editor') {
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 }
})
});
if (response.ok) {
return { success: true, message: 'Account created successfully' };
}
const error = await response.json();
return { success: false, message: error.message || 'Signup failed' };
} catch (error) {
return { success: false, message: 'Signup failed' };
}
},
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 || 'editor',
created_at: user.created_at
})) : [];
}
return [];
} catch (error) {
return [];
}
}
};