import { REXPRO_API_BASE_URL } from '$lib/constants'; export const getAdminDetails = async (token: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/admin/details`, { method: 'GET', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const getAdminConfig = async (token: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/admin/config`, { method: 'GET', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const updateAdminConfig = async (token: string, body: object) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/admin/config`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }, body: JSON.stringify(body) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const getSessionUser = async (token: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/`, { method: 'GET', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }, credentials: 'include' }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const ldapUserSignIn = async (user: string, password: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/ldap`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ user: user, password: password }) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const getLdapConfig = async (token: string = '') => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/admin/config/ldap`, { method: 'GET', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const updateLdapConfig = async (token: string = '', enable_ldap: boolean) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/admin/config/ldap`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) }, body: JSON.stringify({ enable_ldap: enable_ldap }) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const getLdapServer = async (token: string = '') => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/admin/config/ldap/server`, { method: 'GET', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const updateLdapServer = async (token: string = '', body: object) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/admin/config/ldap/server`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) }, body: JSON.stringify(body) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const userSignIn = async (email: string, password: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/signin`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ email: email, password: password }) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const userSignUp = async ( name: string, email: string, password: string, profile_image_url: string ) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/signup`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include', body: JSON.stringify({ name: name, email: email, password: password, profile_image_url: profile_image_url }) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const userSignOut = async () => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/signout`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'include' }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } sessionStorage.clear(); return res; }; export const addUser = async ( token: string, name: string, email: string, password: string, role: string = 'pending', profile_image_url: null | string = null ) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/add`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) }, body: JSON.stringify({ name: name, email: email, password: password, role: role, ...(profile_image_url && { profile_image_url: profile_image_url }) }) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const updateUserProfile = async (token: string, profile: object) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/update/profile`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) }, body: JSON.stringify({ ...profile }) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; if (Array.isArray(error)) { error = error.map((e: { msg?: string }) => e.msg).join('; '); } return null; }); if (error) { throw error; } return res; }; export const updateUserTimezone = async (token: string, timezone: string) => { await fetch(`${REXPRO_API_BASE_URL}/auths/update/timezone`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) }, body: JSON.stringify({ timezone }) }).catch((err) => { console.error('Failed to update timezone:', err); }); }; export const updateUserPassword = async (token: string, password: string, newPassword: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/update/password`, { method: 'POST', headers: { 'Content-Type': 'application/json', ...(token && { authorization: `Bearer ${token}` }) }, body: JSON.stringify({ password: password, new_password: newPassword }) }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const createAPIKey = async (token: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/api_key`, { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res.api_key; }; export const getAPIKey = async (token: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/api_key`, { method: 'GET', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res.api_key; }; export const deleteAPIKey = async (token: string) => { let error = null; const res = await fetch(`${REXPRO_API_BASE_URL}/auths/api_key`, { method: 'DELETE', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` } }) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; }; export const deleteOAuthSession = async (token: string, provider: string) => { let error = null; const res = await fetch( `${REXPRO_API_BASE_URL}/auths/oauth/sessions/${encodeURIComponent(provider)}`, { method: 'DELETE', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` } } ) .then(async (res) => { if (!res.ok) throw await res.json(); return res.json(); }) .catch((err) => { console.error(err); error = err.detail; return null; }); if (error) { throw error; } return res; };