@panoptic-it-solutions/n8n-nodes-datto-rmm
Version:
n8n node for Datto RMM integration
114 lines • 3.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.dattoRmmApiRequest = dattoRmmApiRequest;
exports.dattoRmmApiRequestAllItems = dattoRmmApiRequestAllItems;
exports.dattoRmmApiRequestAllItemsByOperation = dattoRmmApiRequestAllItemsByOperation;
const oauth2_helper_1 = require("./oauth2.helper");
async function dattoRmmApiRequest(method, endpoint, body, qs, headers) {
const credentials = (await this.getCredentials('dattoRmmApi'));
const accessToken = await oauth2_helper_1.getAccessToken.call(this, credentials);
const options = {
method,
url: `${credentials.apiUrl}${endpoint}`,
headers: {
Authorization: `Bearer ${accessToken}`,
Accept: 'application/json',
...headers,
},
json: true,
};
if (body) {
options.headers['Content-Type'] = 'application/json';
}
if (body) {
options.body = body;
}
if (qs) {
options.qs = qs;
}
try {
const response = await this.helpers.httpRequest(options);
return response;
}
catch (error) {
if (error.statusCode === 401) {
delete credentials.tokenData;
const newAccessToken = await oauth2_helper_1.getAccessToken.call(this, credentials);
options.headers = {
...options.headers,
Authorization: `Bearer ${newAccessToken}`,
};
return await this.helpers.httpRequest(options);
}
throw error;
}
}
async function dattoRmmApiRequestAllItems(method, endpoint, body, qs) {
const returnData = [];
let page = 0;
const pageSize = 100;
let hasMoreData = true;
while (hasMoreData) {
const queryParams = {
...qs,
page,
max: pageSize,
};
const responseData = await dattoRmmApiRequest.call(this, method, endpoint, body, queryParams);
let dataArray = [];
let pageDetails = null;
if (Array.isArray(responseData)) {
dataArray = responseData;
}
else if (responseData && typeof responseData === 'object') {
if (responseData.sites) {
dataArray = responseData.sites;
}
else if (responseData.devices) {
dataArray = responseData.devices;
}
else if (responseData.users) {
dataArray = responseData.users;
}
else if (responseData.components) {
dataArray = responseData.components;
}
else if (responseData.alerts) {
dataArray = responseData.alerts;
}
else if (responseData.variables) {
dataArray = responseData.variables;
}
else if (responseData.data && Array.isArray(responseData.data)) {
dataArray = responseData.data;
}
else {
dataArray = [responseData];
}
pageDetails = responseData.pageDetails;
}
if (dataArray.length > 0) {
returnData.push(...dataArray);
}
if (pageDetails && typeof pageDetails.totalCount === 'number') {
hasMoreData = returnData.length < pageDetails.totalCount;
}
else {
hasMoreData = dataArray.length >= pageSize;
}
if (dataArray.length === 0) {
hasMoreData = false;
}
page++;
if (page > 1000) {
console.warn(`Pagination safety limit reached (1000 pages) for endpoint: ${endpoint}`);
break;
}
}
return returnData;
}
async function dattoRmmApiRequestAllItemsByOperation(operation, endpoint, qs) {
const allItems = await dattoRmmApiRequestAllItems.call(this, 'GET', endpoint, {}, qs);
return allItems;
}
//# sourceMappingURL=api.helper.js.map