UNPKG

@cere/rob-cli

Version:

CLI tool for deploying and managing rafts and data sources

282 lines 11.1 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RaftApi = exports.DataSourceApi = void 0; exports.configureApiClient = configureApiClient; exports.getApiClient = getApiClient; const axios_1 = __importDefault(require("axios")); const logger_1 = require("./logger"); let apiClient; const logger = new logger_1.Logger('ApiClient'); /** * Configures the API client with the provided configuration */ function configureApiClient(config) { logger.info(`Configuring API client with base URL: ${config.baseUrl}`); const axiosConfig = { baseURL: `${config.baseUrl}/api`, timeout: config.timeout || 30000, headers: { 'Content-Type': 'application/json', }, }; // Configure authentication if (config.basicAuth && config.basicAuth.username && config.basicAuth.password) { // Basic authentication has priority const encodedCredentials = Buffer.from(`${config.basicAuth.username.trim()}:${config.basicAuth.password.trim()}`).toString('base64'); axiosConfig.headers = { ...axiosConfig.headers, Authorization: `Basic ${encodedCredentials}`, }; logger.info('Basic authentication configured'); } else { logger.warn('No authentication credentials provided'); } apiClient = axios_1.default.create(axiosConfig); // Add request interceptor for logging apiClient.interceptors.request.use(config => { var _a; logger.info(`🚀 Sending ${(_a = config.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()} request to: ${config.baseURL}${config.url}`); if (config.params) { logger.debug(`Request params: ${JSON.stringify(config.params)}`); } if (config.data) { logger.debug(`Request payload: ${JSON.stringify(config.data, null, 2)}`); } return config; }, error => { logger.error(`Request setup error: ${error.message}`); return Promise.reject(error); }); // Add response interceptor for logging and error handling apiClient.interceptors.response.use(response => { logger.info(`✅ Response from ${response.config.url}: Status ${response.status}`); logger.debug(`Response data: ${JSON.stringify(response.data, null, 2)}`); return response; }, error => { var _a; if (error.response) { // The request was made and the server responded with a status code // that falls out of the range of 2xx logger.error(`❌ Response error from ${error.config.url}: Status ${error.response.status}`); logger.error(`Response data: ${JSON.stringify(error.response.data, null, 2)}`); // Log request details for debugging logger.debug(`Request method: ${(_a = error.config.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()}`); logger.debug(`Request URL: ${error.config.baseURL}${error.config.url}`); if (error.config.params) { logger.debug(`Request params: ${JSON.stringify(error.config.params)}`); } if (error.config.data) { logger.debug(`Request payload: ${JSON.stringify(JSON.parse(error.config.data), null, 2)}`); } } else if (error.request) { // The request was made but no response was received logger.error(`❌ Request error: ${error.message}`); logger.debug(`Request config: ${JSON.stringify(error.config, null, 2)}`); } else { // Something happened in setting up the request that triggered an Error logger.error(`❌ Error: ${error.message}`); } return Promise.reject(error); }); logger.info('API client configured successfully'); } /** * Returns the configured API client instance */ function getApiClient() { if (!apiClient) { throw new Error('API client not configured. Call configureApiClient() first.'); } return apiClient; } /** * DataSource API endpoints */ exports.DataSourceApi = { /** * Get all data sources */ async getAllDataSources(dataServiceId) { logger.info(`Fetching all data sources${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); const params = dataServiceId ? { dataServiceId } : {}; try { const response = await getApiClient().get('/data-sources', { params }); logger.info(`Retrieved ${response.data.data.length} data sources`); return response.data.data; } catch (error) { logger.error('Failed to fetch data sources'); throw error; } }, /** * Get a data source by ID */ async getDataSourceById(id, dataServiceId) { logger.info(`Fetching data source with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); try { const params = dataServiceId ? { dataServiceId } : {}; const response = await getApiClient().get(`/data-sources/${id}`, { params }); logger.info(`Retrieved data source: ${id}`); return response.data.data; } catch (error) { logger.error(`Failed to fetch data source with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); throw error; } }, /** * Create a new data source */ async createDataSource(dataSource) { logger.info(`Creating new data source with ID: ${dataSource.id} for dataServiceId: ${dataSource.dataServiceId}`); try { const response = await getApiClient().post('/data-sources', dataSource); logger.info(`Created data source: ${dataSource.id}`); return response.data.data; } catch (error) { logger.error(`Failed to create data source: ${dataSource.id}`); throw error; } }, /** * Update a data source */ async updateDataSource(id, dataSource, dataServiceId) { dataServiceId = dataServiceId || dataSource.dataServiceId; logger.info(`Updating data source with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); try { const params = dataServiceId ? { dataServiceId } : {}; const response = await getApiClient().put(`/data-sources/${id}`, dataSource, { params }); logger.info(`Updated data source: ${id}`); return response.data.data; } catch (error) { logger.error(`Failed to update data source: ${id}`); throw error; } }, /** * Delete a data source */ async deleteDataSource(id, dataServiceId) { logger.info(`Deleting data source with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); try { const params = dataServiceId ? { dataServiceId } : {}; await getApiClient().delete(`/data-sources/${id}`, { params }); logger.info(`Deleted data source: ${id}`); } catch (error) { logger.error(`Failed to delete data source: ${id}`); throw error; } }, /** * Check data source connection */ async checkConnection(config) { logger.info(`Checking connection for data source type: ${config.type}`); try { const response = await getApiClient().post('/data-sources/check-connection', config); logger.info(`Connection check result: ${response.data.data}`); return response.data.data; } catch (error) { logger.error(`Connection check failed for data source type: ${config.type}`); throw error; } }, }; /** * Raft API endpoints */ exports.RaftApi = { /** * Get all rafts */ async getAllRafts(dataServiceId) { logger.info(`Fetching all rafts for dataServiceId: ${dataServiceId}`); try { const response = await getApiClient().get('/rafts', { params: { dataServiceId } }); logger.info(`Retrieved ${response.data.data.length} rafts`); return response.data.data; } catch (error) { logger.error(`Failed to fetch rafts for dataServiceId: ${dataServiceId}`); throw error; } }, /** * Get a raft by ID */ async getRaftById(id, dataServiceId) { logger.info(`Fetching raft with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); try { const params = dataServiceId ? { dataServiceId } : {}; const response = await getApiClient().get(`/rafts/${id}`, { params }); logger.info(`Retrieved raft: ${id}`); return response.data.data; } catch (error) { logger.error(`Failed to fetch raft with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); throw error; } }, /** * Create a new raft */ async createRaft(raft) { logger.info(`Creating new raft with ID: ${raft.id} for dataServiceId: ${raft.dataServiceId}`); logger.debug(`Raft config: ${JSON.stringify(raft, null, 2)}`); try { const response = await getApiClient().post('/rafts', raft); logger.info(`Created raft: ${raft.id}`); return response.data.data; } catch (error) { logger.error(`Failed to create raft: ${raft.id}`); throw error; } }, /** * Update a raft */ async updateRaft(id, raft, dataServiceId) { dataServiceId = dataServiceId || raft.dataServiceId; logger.info(`Updating raft with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); logger.debug(`Raft config: ${JSON.stringify(raft, null, 2)}`); try { const params = dataServiceId ? { dataServiceId } : {}; const response = await getApiClient().put(`/rafts/${id}`, raft, { params }); logger.info(`Updated raft: ${id}`); return response.data.data; } catch (error) { logger.error(`Failed to update raft: ${id}`); throw error; } }, /** * Delete a raft */ async deleteRaft(id, dataServiceId) { logger.info(`Deleting raft with ID: ${id}${dataServiceId ? ` for dataServiceId: ${dataServiceId}` : ''}`); try { const params = dataServiceId ? { dataServiceId } : {}; await getApiClient().delete(`/rafts/${id}`, { params }); logger.info(`Deleted raft: ${id}`); } catch (error) { logger.error(`Failed to delete raft: ${id}`); throw error; } }, }; //# sourceMappingURL=api-client.js.map