mirror of
https://github.com/bluewave-labs/Checkmate.git
synced 2026-01-13 05:09:51 -06:00
646 lines
22 KiB
JavaScript
646 lines
22 KiB
JavaScript
import axios from "axios";
|
|
const BASE_URL = import.meta.env.VITE_APP_API_BASE_URL;
|
|
import { logger } from "./Logger";
|
|
class NetworkService {
|
|
constructor(store) {
|
|
this.store = store;
|
|
this.axiosInstance = axios.create({ baseURL: BASE_URL });
|
|
this.axiosInstance.interceptors.response.use(
|
|
(response) => response,
|
|
(error) => {
|
|
logger.error(error);
|
|
if (error.response && error.response.status === 401) {
|
|
logger.error("Invalid token received");
|
|
}
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* ************************************
|
|
* Create a new monitor
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.monitorId - The monitor ID to be sent in the param.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*/
|
|
|
|
async getMonitorById(config) {
|
|
return this.axiosInstance.get(`/monitors/${config.monitorId}`, {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
* ************************************
|
|
* Create a new monitor
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {Object} config.monitor - The monitor object to be sent in the request body.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*/
|
|
async createMonitor(config) {
|
|
return this.axiosInstance.post(`/monitors`, config.monitor, {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
*
|
|
* ************************************
|
|
* Gets monitors and summary of stats by TeamID
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.teamId - Team ID
|
|
* @param {Array<string>} config.types - Array of monitor types
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*/
|
|
async getMonitorsAndSummaryByTeamId(config) {
|
|
const params = new URLSearchParams();
|
|
|
|
if (config.types) {
|
|
config.types.forEach((type) => {
|
|
params.append("type", type);
|
|
});
|
|
}
|
|
return this.axiosInstance.get(
|
|
`/monitors/team/summary/${config.teamId}?${params.toString()}`,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Get all uptime monitors for a Team
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.teamId - The ID of the team whose monitors are to be retrieved.
|
|
* @param {number} [config.limit] - The maximum number of monitors to retrieve.
|
|
* @param {Array<string>} [config.types] - The types of monitors to retrieve.
|
|
* @param {string} [config.status] - The status of the monitors to retrieve.
|
|
* @param {string} [config.checkOrder] - The order in which to sort the retrieved monitors.
|
|
* @param {boolean} [config.normalize] - Whether to normalize the retrieved monitors.
|
|
* @param {number} [config.page] - The page number for pagination.
|
|
* @param {number} [config.rowsPerPage] - The number of rows per page for pagination.
|
|
* @param {string} [config.filter] - The filter to apply to the monitors.
|
|
* @param {string} [config.field] - The field to sort by.
|
|
* @param {string} [config.order] - The order in which to sort the field.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*/
|
|
async getMonitorsByTeamId(config) {
|
|
const {
|
|
authToken,
|
|
teamId,
|
|
limit,
|
|
types,
|
|
status,
|
|
checkOrder,
|
|
normalize,
|
|
page,
|
|
rowsPerPage,
|
|
filter,
|
|
field,
|
|
order,
|
|
} = config;
|
|
|
|
const params = new URLSearchParams();
|
|
|
|
if (limit) params.append("limit", limit);
|
|
if (types) {
|
|
types.forEach((type) => {
|
|
params.append("type", type);
|
|
});
|
|
}
|
|
if (status) params.append("status", status);
|
|
if (checkOrder) params.append("checkOrder", checkOrder);
|
|
if (normalize) params.append("normalize", normalize);
|
|
if (page) params.append("page", page);
|
|
if (rowsPerPage) params.append("rowsPerPage", rowsPerPage);
|
|
if (filter) params.append("filter", filter);
|
|
if (field) params.append("field", field);
|
|
if (order) params.append("order", order);
|
|
|
|
return this.axiosInstance.get(
|
|
`/monitors/team/${teamId}?${params.toString()}`,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Get stats for a monitor
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.monitorId - The ID of the monitor whose statistics are to be retrieved.
|
|
* @param {string} config.sortOrder - The order in which to sort the retrieved statistics.
|
|
* @param {number} config.limit - The maximum number of statistics to retrieve.
|
|
* @param {string} config.dateRange - The date range for which to retrieve statistics.
|
|
* @param {number} config.numToDisplay - The number of checks to display.
|
|
* @param {boolean} config.normalize - Whether to normalize the retrieved statistics.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*/
|
|
async getStatsByMonitorId(config) {
|
|
const params = new URLSearchParams();
|
|
if (config.sortOrder) params.append("sortOrder", config.sortOrder);
|
|
if (config.limit) params.append("limit", config.limit);
|
|
if (config.dateRange) params.append("dateRange", config.dateRange);
|
|
if (config.numToDisplay) params.append("numToDisplay", config.numToDisplay);
|
|
if (config.normalize) params.append("normalize", config.normalize);
|
|
|
|
return this.axiosInstance.get(
|
|
`/monitors/stats/${config.monitorId}?${params.toString()}`,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Updates a single monitor
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.monitorId - The ID of the monitor to be updated.
|
|
* @param {Object} config.updatedFields - The fields to be updated for the monitor.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios PUT request.
|
|
*/
|
|
async updateMonitor(config) {
|
|
return this.axiosInstance.put(
|
|
`/monitors/${config.monitorId}`,
|
|
config.updatedFields,
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Deletes a single monitor by its ID
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.monitorId - The ID of the monitor to be deleted.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios DELETE request.
|
|
*/
|
|
async deleteMonitorById(config) {
|
|
return this.axiosInstance.delete(`/monitors/${config.monitorId}`, {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Deletes all checks for all monitor by teamID
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.teamId - The team ID of the monitors to be deleted.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios DELETE request.
|
|
*/
|
|
async deleteChecksByTeamId(config) {
|
|
return this.axiosInstance.delete(`/checks/team/${config.teamId}`, {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
}
|
|
/**
|
|
* ************************************
|
|
* Pauses a single monitor by its ID
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.monitorId - The ID of the monitor to be paused.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*/
|
|
async pauseMonitorById(config) {
|
|
return this.axiosInstance.post(
|
|
`/monitors/pause/${config.monitorId}`,
|
|
{},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Adds demo monitors
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*/
|
|
async addDemoMonitors(config) {
|
|
return this.axiosInstance.post(
|
|
`/monitors/demo`,
|
|
{},
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Deletes all monitors for a team by team ID
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios DELETE request.
|
|
*/
|
|
async deleteAllMonitors(config) {
|
|
return this.axiosInstance.delete(`/monitors/`, {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Gets the certificate expiry for a monitor
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.monitorId - The ID of the monitor whose certificate expiry is to be retrieved.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*
|
|
*/
|
|
async getCertificateExpiry(config) {
|
|
return this.axiosInstance.get(`/monitors/certificate/${config.monitorId}`, {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Registers a new user
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} form - The form data for the new user to be registered.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*/
|
|
async registerUser(form) {
|
|
return this.axiosInstance.post(`/auth/register`, form);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Logs in a user
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} form - The form data for the user to be logged in.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*
|
|
*/
|
|
async loginUser(form) {
|
|
return this.axiosInstance.post(`/auth/login`, form);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Updates a user
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.userId - The ID of the user to be updated.
|
|
* @param {Object} config.form - The form data for the user to be updated.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios PUT request.
|
|
*
|
|
*/
|
|
async updateUser(config) {
|
|
return this.axiosInstance.put(`/auth/user/${config.userId}`, config.form, {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
},
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Deletes a user
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.userId - The ID of the user to be deleted.
|
|
*
|
|
**/
|
|
async deleteUser(config) {
|
|
return this.axiosInstance.delete(`/auth/user/${config.userId}`, {
|
|
headers: { Authorization: `Bearer ${config.authToken}` },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Forgot password request
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} form - The form data for the password recovery request.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*
|
|
*/
|
|
async forgotPassword(form) {
|
|
return this.axiosInstance.post(`/auth/recovery/request`, form);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Validates a recovery token
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.recoveryToken - The recovery token to be validated.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*
|
|
*/
|
|
async validateRecoveryToken(config) {
|
|
return this.axiosInstance.post("/auth/recovery/validate", {
|
|
recoveryToken: config.recoveryToken,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Requests password recovery
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.recoveryToken - The token for recovery request.
|
|
* @param {Object} config.form - The form data for the password recovery request.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*
|
|
*/
|
|
async setNewPassword(config) {
|
|
return this.axiosInstance.post("/auth/recovery/reset", {
|
|
...config.form,
|
|
recoveryToken: config.recoveryToken,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Checks if an admin user exists
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*
|
|
*/
|
|
async doesSuperAdminExist() {
|
|
return this.axiosInstance.get("/auth/users/superadmin");
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Get all users
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*
|
|
*/
|
|
async getAllUsers(config) {
|
|
return this.axiosInstance.get("/auth/users", {
|
|
headers: { Authorization: `Bearer ${config.authToken}` },
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Requests an invitation token
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.email - The email of the user to be invited.
|
|
* @param {string} config.role - The role of the user to be invited.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*
|
|
*/
|
|
async requestInvitationToken(config) {
|
|
return this.axiosInstance.post(
|
|
`/invite`,
|
|
{ email: config.email, role: config.role },
|
|
{
|
|
headers: { Authorization: `Bearer ${config.authToken}` },
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Verifies an invitation token
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {string} token - The invitation token to be verified.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios POST request.
|
|
*
|
|
*/
|
|
async verifyInvitationToken(token) {
|
|
return this.axiosInstance.post(`/invite/verify`, {
|
|
token,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Get all checks for a given monitor
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.monitorId - The ID of the monitor.
|
|
* @param {string} config.sortOrder - The order in which to sort the checks.
|
|
* @param {number} config.limit - The maximum number of checks to retrieve.
|
|
* @param {string} config.dateRange - The range of dates for which to retrieve checks.
|
|
* @param {string} config.filter - The filter to apply to the checks.
|
|
* @param {number} config.page - The page number to retrieve in a paginated list.
|
|
* @param {number} config.rowsPerPage - The number of rows per page in a paginated list.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*
|
|
*/
|
|
|
|
async getChecksByMonitor(config) {
|
|
const params = new URLSearchParams();
|
|
if (config.sortOrder) params.append("sortOrder", config.sortOrder);
|
|
if (config.limit) params.append("limit", config.limit);
|
|
if (config.dateRange) params.append("dateRange", config.dateRange);
|
|
if (config.filter) params.append("filter", config.filter);
|
|
if (config.page) params.append("page", config.page);
|
|
if (config.rowsPerPage) params.append("rowsPerPage", config.rowsPerPage);
|
|
|
|
return this.axiosInstance.get(
|
|
`/checks/${config.monitorId}?${params.toString()}`,
|
|
{
|
|
headers: { Authorization: `Bearer ${config.authToken}` },
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Get all checks for a given user
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {string} config.userId - The ID of the user.
|
|
* @param {string} config.sortOrder - The order in which to sort the checks.
|
|
* @param {number} config.limit - The maximum number of checks to retrieve.
|
|
* @param {string} config.dateRange - The range of dates for which to retrieve checks.
|
|
* @param {string} config.filter - The filter to apply to the checks.
|
|
* @param {number} config.page - The page number to retrieve in a paginated list.
|
|
* @param {number} config.rowsPerPage - The number of rows per page in a paginated list.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*
|
|
*/
|
|
async getChecksByTeam(config) {
|
|
const params = new URLSearchParams();
|
|
if (config.sortOrder) params.append("sortOrder", config.sortOrder);
|
|
if (config.limit) params.append("limit", config.limit);
|
|
if (config.dateRange) params.append("dateRange", config.dateRange);
|
|
if (config.filter) params.append("filter", config.filter);
|
|
if (config.page) params.append("page", config.page);
|
|
if (config.rowsPerPage) params.append("rowsPerPage", config.rowsPerPage);
|
|
return this.axiosInstance.get(
|
|
`/checks/team/${config.teamId}?${params.toString()}`,
|
|
{
|
|
headers: { Authorization: `Bearer ${config.authToken}` },
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Get all checks for a given user
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @param {number} config.ttl - TTL for checks
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*
|
|
*/
|
|
async updateChecksTTL(config) {
|
|
return this.axiosInstance.put(
|
|
`/checks/team/ttl`,
|
|
{ ttl: config.ttl },
|
|
{
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* ************************************
|
|
* Get app settings
|
|
* ************************************
|
|
*
|
|
* @async
|
|
* @param {Object} config - The configuration object.
|
|
* @param {string} config.authToken - The authorization token to be used in the request header.
|
|
* @returns {Promise<AxiosResponse>} The response from the axios GET request.
|
|
*
|
|
*/
|
|
|
|
async getAppSettings(config) {
|
|
return this.axiosInstance.get("/settings", {
|
|
headers: {
|
|
Authorization: `Bearer ${config.authToken}`,
|
|
"Content-Type": "application/json",
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
export default NetworkService;
|