UNPKG

medusa-plugin-culqi-card

Version:

Medusa plugin for processing credit card payments with Culqi

171 lines (169 loc) 12.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.randomDigits = exports.getOrCreateCulqiCustomer = exports.getCulqiName = exports.getChargeAntiFraudDetails = exports.createCard = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _medusaCoreUtils = require("medusa-core-utils"); var randomDigits = function randomDigits(length) { var result = ''; var characters = '0123456789'; var charactersLength = characters.length; var counter = 0; while (counter < length) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); counter += 1; } return result; }; exports.randomDigits = randomDigits; var getCulqiName = function getCulqiName(name) { var _name$trim$replace; return (_name$trim$replace = name === null || name === void 0 ? void 0 : name.trim().replace(/\./g, '')) !== null && _name$trim$replace !== void 0 ? _name$trim$replace : ''; }; exports.getCulqiName = getCulqiName; var getChargeAntiFraudDetails = function getChargeAntiFraudDetails(_ref) { var _address$address_, _address$city, _address$country_code, _address$country_code2; var address = _ref.address, customer = _ref.customer, customerTakesPriority = _ref.customerTakesPriority; var data = { first_name: '', last_name: '', phone_number: '', address: (_address$address_ = address === null || address === void 0 ? void 0 : address.address_1) !== null && _address$address_ !== void 0 ? _address$address_ : 'Placeholder', address_city: (_address$city = address === null || address === void 0 ? void 0 : address.city) !== null && _address$city !== void 0 ? _address$city : 'Placeholder', country_code: (_address$country_code = address === null || address === void 0 ? void 0 : (_address$country_code2 = address.country_code) === null || _address$country_code2 === void 0 ? void 0 : _address$country_code2.toUpperCase()) !== null && _address$country_code !== void 0 ? _address$country_code : 'PE' }; if (customerTakesPriority) { var _ref2, _customer$first_name, _ref3, _customer$last_name, _ref4, _customer$phone; data.first_name = (_ref2 = (_customer$first_name = customer === null || customer === void 0 ? void 0 : customer.first_name) !== null && _customer$first_name !== void 0 ? _customer$first_name : address === null || address === void 0 ? void 0 : address.first_name) !== null && _ref2 !== void 0 ? _ref2 : 'Nombre'; data.last_name = (_ref3 = (_customer$last_name = customer === null || customer === void 0 ? void 0 : customer.last_name) !== null && _customer$last_name !== void 0 ? _customer$last_name : address === null || address === void 0 ? void 0 : address.last_name) !== null && _ref3 !== void 0 ? _ref3 : 'Apellido'; data.phone_number = ((_ref4 = (_customer$phone = customer === null || customer === void 0 ? void 0 : customer.phone) !== null && _customer$phone !== void 0 ? _customer$phone : address === null || address === void 0 ? void 0 : address.phone) !== null && _ref4 !== void 0 ? _ref4 : '') || randomDigits(9); } else { var _ref5, _address$first_name, _ref6, _address$last_name, _ref7, _address$phone; data.first_name = (_ref5 = (_address$first_name = address === null || address === void 0 ? void 0 : address.first_name) !== null && _address$first_name !== void 0 ? _address$first_name : customer === null || customer === void 0 ? void 0 : customer.first_name) !== null && _ref5 !== void 0 ? _ref5 : 'Nombre'; data.last_name = (_ref6 = (_address$last_name = address === null || address === void 0 ? void 0 : address.last_name) !== null && _address$last_name !== void 0 ? _address$last_name : customer === null || customer === void 0 ? void 0 : customer.last_name) !== null && _ref6 !== void 0 ? _ref6 : 'Apellido'; data.phone_number = ((_ref7 = (_address$phone = address === null || address === void 0 ? void 0 : address.phone) !== null && _address$phone !== void 0 ? _address$phone : customer === null || customer === void 0 ? void 0 : customer.phone) !== null && _ref7 !== void 0 ? _ref7 : '') || randomDigits(9); } return data; }; exports.getChargeAntiFraudDetails = getChargeAntiFraudDetails; var getOrCreateCulqiCustomer = /*#__PURE__*/function () { var _ref9 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref8) { var _customer$metadata; var culqiClient, customer, email, address, culqiCustomerId, createdCustomer, _customer$metadata2, _customer$metadata3, _customer$metadata4, _customer$email, _customer$first_name2, _customer$last_name2, _ref10, _customer$phone2, _address$address_2, _address$city2, _address$country_code3, _address$country_code4, externalUserId, isCompany, companyIdentifier, metadata, culqiCustomerEmail, culqiCustomerFirstName, culqiCustomeLastName, culqiCustomerPhone, customerRequest, _yield$culqiClient$cr, _yield$culqiClient$cr2, culqiCustomer, alreadyExists, error; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: culqiClient = _ref8.culqiClient, customer = _ref8.customer, email = _ref8.email, address = _ref8.address; culqiCustomerId = customer === null || customer === void 0 ? void 0 : (_customer$metadata = customer.metadata) === null || _customer$metadata === void 0 ? void 0 : _customer$metadata.culqi_customer_id; createdCustomer = false; // check whether customer exists if (culqiCustomerId) { _context.next = 26; break; } externalUserId = customer === null || customer === void 0 ? void 0 : (_customer$metadata2 = customer.metadata) === null || _customer$metadata2 === void 0 ? void 0 : _customer$metadata2.external_user_id; isCompany = customer === null || customer === void 0 ? void 0 : (_customer$metadata3 = customer.metadata) === null || _customer$metadata3 === void 0 ? void 0 : _customer$metadata3.is_company; companyIdentifier = customer === null || customer === void 0 ? void 0 : (_customer$metadata4 = customer.metadata) === null || _customer$metadata4 === void 0 ? void 0 : _customer$metadata4.company_identifier; metadata = {}; if (externalUserId) { metadata.external_user_id = externalUserId; } if (isCompany) { metadata.company_name = customer.first_name; } // try to create the new one, if not exists culqiCustomerEmail = !isCompany ? (_customer$email = customer === null || customer === void 0 ? void 0 : customer.email) !== null && _customer$email !== void 0 ? _customer$email : email : "".concat(companyIdentifier, "@email.com"); culqiCustomerFirstName = !isCompany ? getCulqiName((_customer$first_name2 = customer === null || customer === void 0 ? void 0 : customer.first_name) !== null && _customer$first_name2 !== void 0 ? _customer$first_name2 : address === null || address === void 0 ? void 0 : address.first_name) : 'Nombre'; culqiCustomeLastName = !isCompany ? getCulqiName((_customer$last_name2 = customer === null || customer === void 0 ? void 0 : customer.last_name) !== null && _customer$last_name2 !== void 0 ? _customer$last_name2 : address === null || address === void 0 ? void 0 : address.last_name) : 'Apellido'; culqiCustomerPhone = (_ref10 = (_customer$phone2 = customer === null || customer === void 0 ? void 0 : customer.phone) !== null && _customer$phone2 !== void 0 ? _customer$phone2 : address === null || address === void 0 ? void 0 : address.phone) !== null && _ref10 !== void 0 ? _ref10 : ''; customerRequest = { email: culqiCustomerEmail.trim(), first_name: culqiCustomerFirstName || 'Nombre', last_name: culqiCustomeLastName || 'Apellido', phone_number: culqiCustomerPhone || randomDigits(9), address: (_address$address_2 = address === null || address === void 0 ? void 0 : address.address_1) !== null && _address$address_2 !== void 0 ? _address$address_2 : 'Placeholder', address_city: (_address$city2 = address === null || address === void 0 ? void 0 : address.city) !== null && _address$city2 !== void 0 ? _address$city2 : 'Placeholder', country_code: (_address$country_code3 = address === null || address === void 0 ? void 0 : (_address$country_code4 = address.country_code) === null || _address$country_code4 === void 0 ? void 0 : _address$country_code4.toUpperCase()) !== null && _address$country_code3 !== void 0 ? _address$country_code3 : 'PE', metadata: metadata }; _context.next = 17; return culqiClient.createCustomerAsync(customerRequest); case 17: _yield$culqiClient$cr = _context.sent; _yield$culqiClient$cr2 = (0, _slicedToArray2["default"])(_yield$culqiClient$cr, 3); culqiCustomer = _yield$culqiClient$cr2[0]; alreadyExists = _yield$culqiClient$cr2[1]; error = _yield$culqiClient$cr2[2]; if (!error) { _context.next = 24; break; } return _context.abrupt("return", [null, null, error]); case 24: culqiCustomerId = culqiCustomer.id; createdCustomer = !alreadyExists; case 26: return _context.abrupt("return", [culqiCustomerId, createdCustomer, null]); case 27: case "end": return _context.stop(); } }, _callee); })); return function getOrCreateCulqiCustomer(_x) { return _ref9.apply(this, arguments); }; }(); exports.getOrCreateCulqiCustomer = getOrCreateCulqiCustomer; var createCard = /*#__PURE__*/function () { var _ref12 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref11) { var culqiClient, customerId, cardToken, billingAddress, cardMetadata, createCardRequest, _yield$culqiClient$cr3, _yield$culqiClient$cr4, card, error; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: culqiClient = _ref11.culqiClient, customerId = _ref11.customerId, cardToken = _ref11.cardToken, billingAddress = _ref11.billingAddress; cardMetadata = { cardHolderName: "".concat(billingAddress.first_name, " ").concat(billingAddress.last_name), billingAddress1: billingAddress.address_1, billingAddress2: billingAddress.address_2, billingCity: billingAddress.city, billingState: billingAddress.province, billingCountry: billingAddress.country_code, // TODO: Save country name? billingPostalCode: billingAddress.postal_code }; createCardRequest = { customer_id: customerId, token_id: cardToken, metadata: cardMetadata }; _context2.next = 5; return culqiClient.createCardAsync(createCardRequest); case 5: _yield$culqiClient$cr3 = _context2.sent; _yield$culqiClient$cr4 = (0, _slicedToArray2["default"])(_yield$culqiClient$cr3, 2); card = _yield$culqiClient$cr4[0]; error = _yield$culqiClient$cr4[1]; if (!error) { _context2.next = 11; break; } throw new _medusaCoreUtils.MedusaError(_medusaCoreUtils.MedusaError.Types.UNEXPECTED_STATE, error.merchant_message, error.decline_code); case 11: return _context2.abrupt("return", card.id); case 12: case "end": return _context2.stop(); } }, _callee2); })); return function createCard(_x2) { return _ref12.apply(this, arguments); }; }(); exports.createCard = createCard;