@cere/rob-cli
Version:
CLI tool for deploying and managing rafts and data sources
282 lines • 11.1 kB
JavaScript
;
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