solver-sdk
Version:
SDK for WorkAI API - AI-powered code analysis with WorkCoins billing system
136 lines • 5.42 kB
JavaScript
/**
* API для работы с профилем пользователя
*
* Предоставляет методы для получения информации о текущем пользователе.
*
* @example
* ```javascript
* // Получение профиля пользователя
* const profile = await sdk.user.getProfile();
*
* console.log(`Email: ${profile.email}`);
* console.log(`План: ${profile.plan}`);
* console.log(`Использовано credits: ${profile.creditsUsed} / ${profile.creditsLimit}`);
* console.log(`Осталось: ${profile.remaining} credits`);
* ```
*/
export class UserApi {
/**
* Создает новый экземпляр API для работы с пользователем
* @param {HttpClient} httpClient HTTP клиент
*/
constructor(httpClient) {
this.httpClient = httpClient;
}
/**
* Получает профиль текущего пользователя
*
* @returns {Promise<UserProfile>} Профиль пользователя
* @throws {Error} При ошибке запроса к API или если пользователь не авторизован
*
* @example
* ```javascript
* try {
* const profile = await sdk.user.getProfile();
*
* console.log('Профиль пользователя:');
* console.log(` ID: ${profile.id}`);
* console.log(` Email: ${profile.email}`);
* console.log(` План: ${profile.plan}`);
* console.log(` Credits использовано: ${profile.creditsUsed} / ${profile.creditsLimit}`);
*
* if (profile.remaining !== undefined) {
* console.log(` Осталось токенов: ${profile.remaining}`);
* }
*
* if (profile.isAdmin) {
* console.log(' 👑 Администратор');
* }
*
* } catch (error) {
* console.error('Ошибка получения профиля:', error);
* }
* ```
*/
async getProfile() {
try {
const response = await this.httpClient.get('/api/v1/me');
// Преобразуем дату если она есть
if (response.resetAt) {
response.resetAt = new Date(response.resetAt);
}
return response;
}
catch (error) {
if (error.status === 401 || error.response?.status === 401) {
throw new Error('Пользователь не авторизован. Необходимо войти в систему.');
}
throw new Error(`Ошибка получения профиля пользователя: ${error.message}`);
}
}
/**
* Проверяет доступность API профиля
*
* @returns {Promise<boolean>} True, если API доступен и пользователь авторизован
*
* @example
* ```javascript
* const isAvailable = await sdk.user.checkAvailability();
* if (!isAvailable) {
* console.log('Пользователь не авторизован или API недоступен');
* }
* ```
*/
async checkAvailability() {
try {
await this.getProfile();
return true;
}
catch (error) {
return false;
}
}
/**
* Получает детальный статус лимитов пользователя (WorkCoins)
*
* @returns {Promise<CreditsStatus>} Статус credits с балансом и рекомендациями
* @throws {Error} При ошибке запроса к API или если пользователь не авторизован
*
* @example
* ```javascript
* try {
* const creditsStatus = await sdk.user.getLimitStatus();
*
* console.log(`Статус: ${creditsStatus.status}`);
* console.log(`Сообщение: ${creditsStatus.message}`);
* console.log(`Можно делать запросы: ${creditsStatus.canMakeRequest}`);
*
* // Баланс
* console.log(`Credits: ${creditsStatus.balance.creditsRemaining} / ${creditsStatus.balance.creditsLimit}`);
* console.log(`Использовано: ${creditsStatus.balance.percentUsed}%`);
*
* // Рекомендации
* if (creditsStatus.action) {
* console.log(`Действие: ${creditsStatus.action.type}`);
* console.log(`Рекомендация: ${creditsStatus.action.suggestion}`);
* console.log(`URL: ${creditsStatus.action.url}`);
* }
*
* } catch (error) {
* console.error('Ошибка получения статуса credits:', error);
* }
* ```
*/
async getLimitStatus() {
try {
return await this.httpClient.get('/api/v1/me/limit-status');
}
catch (error) {
if (error.status === 401 || error.response?.status === 401) {
throw new Error('Пользователь не авторизован. Необходимо войти в систему.');
}
throw new Error(`Ошибка получения статуса лимитов: ${error.message}`);
}
}
}
//# sourceMappingURL=user-api.js.map