const SibApiV3Sdk = require('sib-api-v3-sdk'); const config = require('../config'); const defaultClient = SibApiV3Sdk.ApiClient.instance; // Configure API key authorization: api-key const apiKey = defaultClient.authentications['api-key']; apiKey.apiKey = config.sendinblue.API_KEY; function _createMember(member) { const api = new SibApiV3Sdk.ContactsApi(); return new Promise(function (resolve, reject) { const createContact = new SibApiV3Sdk.CreateContact(); // CreateContact | Values to create a contact createContact.email = member.email; createContact.updateEnabled = true; // <- Actualiza el contacto si existe ese email createContact.attributes = { NOMBRE: member.name, APELLIDOS: member.surname, SMS: member.phone, SOURCE: member.source, USERID: member.userId, ENTITYNAME: (member.entity) ? member.entity : '', RESERVATIONCODE: (member.reservation_code) ? member.reservation_code : '', TICKETCODE: member.code_ticket, //VALIDATED: (member.validated) ? 1 : 0, //COLOR: (member.color) ? member.color : '', //DESCOLOR: member.description, } console.debug('_createMember:'); console.debug(createContact); api.createContact(createContact) .then(function (data) { console.debug('API called successfully. Returned data: ' + data); if (data && data.id) { // Se ha dado de alta el contacto porque no existía createContact.ID = data.id; } resolve(createContact); }) .catch(function (error) { console.error(error); reject(error); }); }); }; function _addMemberToList(member, listId) { const api = new SibApiV3Sdk.ContactsApi(); const contactEmails = new SibApiV3Sdk.AddContactToList(); // AddContactToList | Emails addresses of the contacts contactEmails.emails = [member.email]; return new Promise(function (resolve, reject) { api.addContactToList(listId, contactEmails) .then(function(data) { console.debug('API called successfully. Returned data: ' + data); if ((data.contacts.success) && (data.contacts.success[0] === member.email)) { resolve(data.contacts.success[0]) } else reject() }) .catch(function(error) { reject(error) }) }); } function _removeMemberFromList(member, listId) { const api = new SibApiV3Sdk.ContactsApi(); const contactEmails = new SibApiV3Sdk.RemoveContactFromList(); // RemoveContactFromList | Emails adresses of the contact contactEmails.emails = [member]; return new Promise(function (resolve, reject) { api.removeContactFromList(listId, contactEmails) .then(function (data) { console.debug('API called successfully. Returned data: ' + data); if ((data.contacts.success) && (data.contacts.success[0] === member)) { resolve(data.contacts.success[0]) } else reject() }) .catch(function (error) { reject(error) }) }); } function getLists() { const api = new SibApiV3Sdk.ContactsApi(); return new Promise(function (resolve, reject) { api.getAccount().then(function (data) { console.debug('API called successfully. Returned data: ' + data); var opts = { 'limit': 10, // Number | Number of documents per page 'offset': 0 // Number | Index of the first document of the page }; api.getLists(opts) .then(function (data) { resolve(data.lists); }) .catch(function (error) { reject(error) }) }, function (error) { reject(error) }); }); }; function addMember(listId, member) { return new Promise(function (resolve, reject) { _createMember(member) .then(function(contact) { console.debug('añadir a lista: ' + listId + ' * ' + contact); return _addMemberToList(contact, listId); }) .then(function() { resolve(true); }) .catch(function (error) { console.error(error); reject(error); }); }) }; function deleteMember(listId, member) { return _removeMemberFromList(member, listId); } module.exports = { getLists, addMember, deleteMember, }