UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

179 lines 7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sanitizePhoneNumber = void 0; exports.addTemplateComponents = addTemplateComponents; exports.setType = setType; exports.mediaUploadFromItem = mediaUploadFromItem; exports.templateInfo = templateInfo; exports.componentsRequest = componentsRequest; exports.cleanPhoneNumber = cleanPhoneNumber; exports.sendErrorPostReceive = sendErrorPostReceive; const set_1 = __importDefault(require("lodash/set")); const n8n_workflow_1 = require("n8n-workflow"); const MediaFunctions_1 = require("./MediaFunctions"); async function addTemplateComponents(requestOptions) { const params = this.getNodeParameter('templateParameters'); if (!params?.parameter) { return requestOptions; } const components = [ { type: 'body', parameters: params.parameter, }, ]; if (!requestOptions.body) { requestOptions.body = {}; } (0, set_1.default)(requestOptions.body, 'template.components', components); return requestOptions; } async function setType(requestOptions) { const operation = this.getNodeParameter('operation'); const messageType = this.getNodeParameter('messageType', null); let actualType = messageType; if (operation === 'sendTemplate') { actualType = 'template'; } if (requestOptions.body) { Object.assign(requestOptions.body, { type: actualType }); } return requestOptions; } async function mediaUploadFromItem(requestOptions) { const uploadData = await MediaFunctions_1.getUploadFormData.call(this); const phoneNumberId = this.getNodeParameter('phoneNumberId'); const result = (await this.helpers.httpRequestWithAuthentication.call(this, 'whatsAppApi', { url: `/${phoneNumberId}/media`, baseURL: requestOptions.baseURL, method: 'POST', body: uploadData.formData, })); const operation = this.getNodeParameter('messageType'); if (!requestOptions.body) { requestOptions.body = {}; } (0, set_1.default)(requestOptions.body, [operation, 'id'], result.id); if (operation === 'document') { (0, set_1.default)(requestOptions.body, [operation, 'filename'], uploadData.fileName); } return requestOptions; } async function templateInfo(requestOptions) { const template = this.getNodeParameter('template'); const [name, language] = template.split('|'); if (!requestOptions.body) { requestOptions.body = {}; } (0, set_1.default)(requestOptions.body, 'template.name', name); (0, set_1.default)(requestOptions.body, 'template.language.code', language); return requestOptions; } async function componentsRequest(requestOptions) { const components = this.getNodeParameter('components'); const componentsRet = []; if (!components?.component) { return requestOptions; } for (const component of components.component) { const comp = { type: component.type, }; if (component.type === 'body') { comp.parameters = (component.bodyParameters.parameter || []).map((i) => { if (i.type === 'text') { return i; } else if (i.type === 'currency') { return { type: 'currency', currency: { code: i.code, fallback_value: i.fallback_value, amount_1000: i.amount_1000 * 1000, }, }; } else if (i.type === 'date_time') { return { type: 'date_time', date_time: { fallback_value: i.date_time, }, }; } }); } else if (component.type === 'button') { comp.index = component.index?.toString(); comp.sub_type = component.sub_type; comp.parameters = [component.buttonParameters.parameter]; } else if (component.type === 'header') { comp.parameters = component.headerParameters.parameter.map((i) => { if (i.type === 'image') { return { type: 'image', image: { link: i.imageLink, }, }; } return i; }); } componentsRet.push(comp); } if (!requestOptions.body) { requestOptions.body = {}; } (0, set_1.default)(requestOptions.body, 'template.components', componentsRet); return requestOptions; } const sanitizePhoneNumber = (phoneNumber) => phoneNumber.replace(/[\-\(\)\+]/g, ''); exports.sanitizePhoneNumber = sanitizePhoneNumber; async function cleanPhoneNumber(requestOptions) { const phoneNumber = (0, exports.sanitizePhoneNumber)(this.getNodeParameter('recipientPhoneNumber')); if (!requestOptions.body) { requestOptions.body = {}; } (0, set_1.default)(requestOptions.body, 'to', phoneNumber); return requestOptions; } async function sendErrorPostReceive(data, response) { if (response.statusCode === 500) { throw new n8n_workflow_1.NodeApiError(this.getNode(), {}, { message: 'Sending failed', description: 'If you’re sending to a new test number, try sending a message to it from within the Meta developer portal first.', httpCode: '500', }); } else if (response.statusCode === 400) { const error = { ...response.body.error }; error.message = error.message.replace(/^\(#\d+\) /, ''); const messageType = this.getNodeParameter('messageType', 'media'); if (error.message.endsWith('is not a valid whatsapp business account media attachment ID')) { throw new n8n_workflow_1.NodeApiError(this.getNode(), { error }, { message: `Invalid ${messageType} ID`, description: error.message, httpCode: '400', }); } else if (error.message.endsWith('is not a valid URI.')) { throw new n8n_workflow_1.NodeApiError(this.getNode(), { error }, { message: `Invalid ${messageType} URL`, description: error.message, httpCode: '400', }); } throw new n8n_workflow_1.NodeApiError(this.getNode(), { ...response, body: { error } }, {}); } else if (response.statusCode > 399) { throw new n8n_workflow_1.NodeApiError(this.getNode(), response); } return data; } //# sourceMappingURL=MessageFunctions.js.map