|
|
import { |
|
|
AuthResponse, |
|
|
LoginCredentials, |
|
|
RegisterCredentials, |
|
|
ChangePasswordCredentials, |
|
|
} from '../types'; |
|
|
import { getApiUrl } from '../utils/runtime'; |
|
|
|
|
|
|
|
|
const TOKEN_KEY = 'mcphub_token'; |
|
|
|
|
|
|
|
|
export const getToken = (): string | null => { |
|
|
return localStorage.getItem(TOKEN_KEY); |
|
|
}; |
|
|
|
|
|
|
|
|
export const setToken = (token: string): void => { |
|
|
localStorage.setItem(TOKEN_KEY, token); |
|
|
}; |
|
|
|
|
|
|
|
|
export const removeToken = (): void => { |
|
|
localStorage.removeItem(TOKEN_KEY); |
|
|
}; |
|
|
|
|
|
|
|
|
export const login = async (credentials: LoginCredentials): Promise<AuthResponse> => { |
|
|
try { |
|
|
console.log(getApiUrl('/auth/login')); |
|
|
const response = await fetch(getApiUrl('/auth/login'), { |
|
|
method: 'POST', |
|
|
headers: { |
|
|
'Content-Type': 'application/json', |
|
|
}, |
|
|
body: JSON.stringify(credentials), |
|
|
}); |
|
|
|
|
|
const data: AuthResponse = await response.json(); |
|
|
|
|
|
if (data.success && data.token) { |
|
|
setToken(data.token); |
|
|
} |
|
|
|
|
|
return data; |
|
|
} catch (error) { |
|
|
console.error('Login error:', error); |
|
|
return { |
|
|
success: false, |
|
|
message: 'An error occurred during login', |
|
|
}; |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
export const register = async (credentials: RegisterCredentials): Promise<AuthResponse> => { |
|
|
try { |
|
|
const response = await fetch(getApiUrl('/auth/register'), { |
|
|
method: 'POST', |
|
|
headers: { |
|
|
'Content-Type': 'application/json', |
|
|
}, |
|
|
body: JSON.stringify(credentials), |
|
|
}); |
|
|
|
|
|
const data: AuthResponse = await response.json(); |
|
|
|
|
|
if (data.success && data.token) { |
|
|
setToken(data.token); |
|
|
} |
|
|
|
|
|
return data; |
|
|
} catch (error) { |
|
|
console.error('Register error:', error); |
|
|
return { |
|
|
success: false, |
|
|
message: 'An error occurred during registration', |
|
|
}; |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
export const getCurrentUser = async (): Promise<AuthResponse> => { |
|
|
const token = getToken(); |
|
|
|
|
|
if (!token) { |
|
|
return { |
|
|
success: false, |
|
|
message: 'No authentication token', |
|
|
}; |
|
|
} |
|
|
|
|
|
try { |
|
|
const response = await fetch(getApiUrl('/auth/user'), { |
|
|
method: 'GET', |
|
|
headers: { |
|
|
'x-auth-token': token, |
|
|
}, |
|
|
}); |
|
|
|
|
|
return await response.json(); |
|
|
} catch (error) { |
|
|
console.error('Get current user error:', error); |
|
|
return { |
|
|
success: false, |
|
|
message: 'An error occurred while fetching user data', |
|
|
}; |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
export const changePassword = async ( |
|
|
credentials: ChangePasswordCredentials, |
|
|
): Promise<AuthResponse> => { |
|
|
const token = getToken(); |
|
|
|
|
|
if (!token) { |
|
|
return { |
|
|
success: false, |
|
|
message: 'No authentication token', |
|
|
}; |
|
|
} |
|
|
|
|
|
try { |
|
|
const response = await fetch(getApiUrl('/auth/change-password'), { |
|
|
method: 'POST', |
|
|
headers: { |
|
|
'Content-Type': 'application/json', |
|
|
'x-auth-token': token, |
|
|
}, |
|
|
body: JSON.stringify(credentials), |
|
|
}); |
|
|
|
|
|
return await response.json(); |
|
|
} catch (error) { |
|
|
console.error('Change password error:', error); |
|
|
return { |
|
|
success: false, |
|
|
message: 'An error occurred while changing password', |
|
|
}; |
|
|
} |
|
|
}; |
|
|
|
|
|
|
|
|
export const logout = (): void => { |
|
|
removeToken(); |
|
|
}; |
|
|
|