n8n-nodes-walichat
Version:
n8n plugin for WaliChat
105 lines (104 loc) • 4.03 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.request = exports.rawRequest = void 0;
const axios_1 = __importDefault(require("axios"));
const baseUrl = 'https://api.wali.chat/v1';
const clientRuntime = process.env.N8N_RUNTIME_CLIENT;
async function rawRequest(opts, apiKey) {
if (!apiKey) {
throw new Error('API key is required');
}
if (!opts.url) {
throw new Error('URL path is required');
}
opts.baseURL = baseUrl;
opts.headers = opts.headers || {};
Object.assign(opts.headers, {
'x-n8n-client': 'n8n',
'Authorization': `Bearer ${clientRuntime ? clientRuntime + '_' : ''}${apiKey}`,
});
return await (0, axios_1.default)(opts);
}
exports.rawRequest = rawRequest;
/**
* Makes an authenticated request to the WaliChat API
*
* @param executeFunctions - The n8n execute functions context
* @param method - HTTP method (GET, POST, PUT, PATCH, DELETE)
* @param endpoint - API endpoint (without base URL)
* @param body - Optional request body for POST, PUT, PATCH, DELETE
* @param query - Optional query parameters
* @param customHeaders - Optional custom headers to merge with defaults
* @returns The API response data
*/
async function request(executeFunctions, method, endpoint, body, query, customHeaders) {
var _a;
const credentials = await executeFunctions.getCredentials('walichatApiKey');
const apiKey = credentials.walichatApiKey;
if (!apiKey) {
throw new Error('API key is required');
}
const url = `${baseUrl}${endpoint}`;
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${clientRuntime ? clientRuntime + '_' : ''}${apiKey}`,
'x-n8n-client': 'n8n',
...(customHeaders || {}),
};
const config = {
url,
method,
headers,
params: query,
};
if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method) && body) {
config.data = body;
}
try {
const response = await (0, axios_1.default)(config);
return response.data;
}
catch (error) {
if (axios_1.default.isAxiosError(error)) {
// Create a detailed error object with additional information
const errorResponse = {
error: error.message,
statusCode: (_a = error.response) === null || _a === void 0 ? void 0 : _a.status,
};
if (error.response) {
errorResponse.statusText = error.response.statusText;
// Add response data if available
if (error.response.data) {
if (typeof error.response.data === 'object') {
errorResponse.responseBody = error.response.data;
}
else {
try {
errorResponse.responseBody = JSON.parse(error.response.data);
}
catch (e) {
errorResponse.responseBody = error.response.data;
}
}
// Add any error message or code from the response
if (error.response.data.error) {
errorResponse.apiError = error.response.data.error;
}
if (error.response.data.code) {
errorResponse.apiCode = error.response.data.code;
}
if (error.response.data.message) {
errorResponse.apiMessage = error.response.data.message;
}
}
}
throw new Error(`WaliChat API Error: ${JSON.stringify(errorResponse)}`);
}
// Re-throw non-axios errors
throw error;
}
}
exports.request = request;