239 lines
7.0 KiB
JavaScript
239 lines
7.0 KiB
JavaScript
const axios = require('axios');
|
|
const config = require('../config/config');
|
|
|
|
class APIClient {
|
|
constructor() {
|
|
this.baseURL = config.get('apiUrl');
|
|
this.client = axios.create({
|
|
baseURL: this.baseURL,
|
|
timeout: config.get('apiTimeout'),
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
}
|
|
});
|
|
|
|
this.client.interceptors.response.use(
|
|
(response) => response,
|
|
(error) => {
|
|
console.error('API request failed:', error.message);
|
|
if (error.response) {
|
|
console.error('response status:', error.response.status);
|
|
console.error('response data:', error.response.data);
|
|
}
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
}
|
|
|
|
async initialize() {
|
|
try {
|
|
const response = await this.client.get('/api/auth/status');
|
|
console.log('[APIClient] checked default user status:', response.data);
|
|
return true;
|
|
} catch (error) {
|
|
console.error('[APIClient] failed to initialize:', error);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async checkConnection() {
|
|
try {
|
|
const response = await this.client.get('/');
|
|
return response.status === 200;
|
|
} catch (error) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async saveApiKey(apiKey) {
|
|
try {
|
|
const response = await this.client.post('/api/user/api-key', { apiKey });
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to save api key:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async checkApiKey() {
|
|
try {
|
|
const response = await this.client.get('/api/user/api-key');
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to check api key:', error);
|
|
return { hasApiKey: false };
|
|
}
|
|
}
|
|
|
|
async getUserBatchData(includes = ['profile', 'context', 'presets']) {
|
|
try {
|
|
const includeParam = includes.join(',');
|
|
const response = await this.client.get(`/api/user/batch?include=${includeParam}`);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get user batch data:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async getUserContext() {
|
|
try {
|
|
const response = await this.client.get('/api/user/context');
|
|
return response.data.context;
|
|
} catch (error) {
|
|
console.error('fail to get user context:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async getUserProfile() {
|
|
try {
|
|
const response = await this.client.get('/api/user/profile');
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get user profile:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async getUserPresets() {
|
|
try {
|
|
const response = await this.client.get('/api/user/presets');
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get user presets:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
async updateUserContext(context) {
|
|
try {
|
|
const response = await this.client.post('/api/user/context', context);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to update user context:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async addActivity(activity) {
|
|
try {
|
|
const response = await this.client.post('/api/user/activities', activity);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to add activity:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async getPresetTemplates() {
|
|
try {
|
|
const response = await this.client.get('/api/preset-templates');
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get preset templates:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
async updateUserProfile(profile) {
|
|
try {
|
|
const response = await this.client.post('/api/user/profile', profile);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to update user profile:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async searchUsers(name = '') {
|
|
try {
|
|
const response = await this.client.get('/api/users/search', {
|
|
params: { name }
|
|
});
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to search users:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
async getUserProfileById(userId) {
|
|
try {
|
|
const response = await this.client.get(`/api/users/${userId}/profile`);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get user profile by id:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async saveConversationSession(sessionId, conversationHistory) {
|
|
try {
|
|
const payload = {
|
|
sessionId,
|
|
conversationHistory
|
|
};
|
|
const response = await this.client.post('/api/conversations', payload);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to save conversation session:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async getConversationSession(sessionId) {
|
|
try {
|
|
const response = await this.client.get(`/api/conversations/${sessionId}`);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get conversation session:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async getAllConversationSessions() {
|
|
try {
|
|
const response = await this.client.get('/api/conversations');
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get all conversation sessions:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
async deleteConversationSession(sessionId) {
|
|
try {
|
|
const response = await this.client.delete(`/api/conversations/${sessionId}`);
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to delete conversation session:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
async getSyncStatus() {
|
|
try {
|
|
const response = await this.client.get('/api/sync/status');
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get sync status:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async getFullUserData() {
|
|
try {
|
|
const response = await this.client.get('/api/user/full');
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error('failed to get full user data:', error);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
const apiClient = new APIClient();
|
|
|
|
module.exports = apiClient;
|
|
module.exports = apiClient;
|