@netair-tech/n8n-nodes-tiny-erp-auth2
Version:
n8n custom node for Tiny ERP integration with OAuth2 authentication
97 lines • 3.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.tinyErpApiRequest = tinyErpApiRequest;
exports.tinyErpApiRequestAllItems = tinyErpApiRequestAllItems;
exports.formatDate = formatDate;
exports.validateRequiredFields = validateRequiredFields;
const n8n_workflow_1 = require("n8n-workflow");
/**
* Make an API request to Tiny ERP
*/
async function tinyErpApiRequest(method, endpoint, body = {}, qs = {}) {
var _a;
const baseUrl = 'https://erp.tiny.com.br/public-api/v3';
const options = {
method,
url: `${baseUrl}${endpoint}`,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body,
qs,
json: true,
};
try {
const response = await this.helpers.httpRequestWithAuthentication.call(this, 'tinyOAuth2Api', options);
return response;
}
catch (error) {
if ((_a = error.response) === null || _a === void 0 ? void 0 : _a.body) {
const errorBody = error.response.body;
if (errorBody.mensagem) {
throw new n8n_workflow_1.NodeApiError(this.getNode(), error, {
message: errorBody.mensagem,
description: errorBody.detalhes ? JSON.stringify(errorBody.detalhes) : undefined,
});
}
}
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
}
}
/**
* Make an API request to get all items (with pagination support)
*/
async function tinyErpApiRequestAllItems(method, endpoint, body = {}, qs = {}) {
const returnData = [];
let responseData;
qs.limit = qs.limit || 100;
qs.offset = qs.offset || 0;
do {
responseData = await tinyErpApiRequest.call(this, method, endpoint, body, qs);
if (responseData.itens && Array.isArray(responseData.itens)) {
returnData.push(...responseData.itens);
}
else if (Array.isArray(responseData)) {
returnData.push(...responseData);
}
else {
returnData.push(responseData);
}
// Check if there are more items to fetch
if (responseData.paginacao && responseData.paginacao.total) {
const currentOffset = qs.offset;
const limit = qs.limit;
const total = responseData.paginacao.total;
if (currentOffset + limit < total) {
qs.offset = currentOffset + limit;
}
else {
break;
}
}
else {
break;
}
} while (responseData.paginacao && responseData.paginacao.total && qs.offset < responseData.paginacao.total);
return returnData;
}
/**
* Format date for Tiny ERP API
*/
function formatDate(date) {
if (!date)
return '';
const dateObj = typeof date === 'string' ? new Date(date) : date;
return dateObj.toISOString().split('T')[0] + ' ' + dateObj.toTimeString().split(' ')[0];
}
/**
* Validate required fields
*/
function validateRequiredFields(data, requiredFields) {
const missingFields = requiredFields.filter(field => !data[field]);
if (missingFields.length > 0) {
throw new n8n_workflow_1.NodeOperationError({}, `Missing required fields: ${missingFields.join(', ')}`);
}
}
//# sourceMappingURL=GenericFunctions.js.map