forest-express
Version:
Official package for all Forest Express Lianas
69 lines (65 loc) • 3.14 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var logger = require('../../../services/logger');
var ContactGetter = require('./contact-getter');
function AttributesGetter(Implementation, params, opts, mappingValue) {
var Intercom = opts.integrations.intercom.intercom;
var intercom = new Intercom.Client(opts.integrations.intercom.credentials);
this.perform = /*#__PURE__*/(0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var contactQueryResponse, contact, tags, companies;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return ContactGetter.getContact(intercom, Implementation, mappingValue, params.recordId);
case 3:
contactQueryResponse = _context.sent;
if (!(!contactQueryResponse || !contactQueryResponse.body || !contactQueryResponse.body.data || !contactQueryResponse.body.data[0])) {
_context.next = 7;
break;
}
logger.error('Cannot access to Intercom attributes: No intercom contact matches the given key');
return _context.abrupt("return", null);
case 7:
contact = contactQueryResponse.body.data[0];
contact.city = contact.location.city;
contact.country = contact.location.country;
// NOTICE: This slows down the request
_context.next = 12;
return intercom.get("/contacts/".concat(contact.id, "/tags"));
case 12:
tags = _context.sent;
contact.tags = tags.body.data.map(function (tag) {
return tag.name;
});
// NOTICE: This slows down the request
_context.next = 16;
return intercom.get("/contacts/".concat(contact.id, "/companies"));
case 16:
companies = _context.sent;
contact.companies = companies.body.data.map(function (company) {
return company.name;
});
// NOTICE: As of v2.0, intercom API does not retrieve the segments a contact is part of
// You can look for a contact with a given segment id but it isn't retrieved with it
return _context.abrupt("return", contact);
case 21:
_context.prev = 21;
_context.t0 = _context["catch"](0);
if (_context.t0.statusCode) {
logger.error('Cannot retrieve Intercom attributes for the following reason: ', _context.t0);
} else {
logger.error('Internal error while retrieving Intercom attributes: ', _context.t0);
}
return _context.abrupt("return", null);
case 25:
case "end":
return _context.stop();
}
}, _callee, null, [[0, 21]]);
}));
}
module.exports = AttributesGetter;