medusa-plugin-culqi-card
Version:
Medusa plugin for processing credit card payments with Culqi
171 lines (169 loc) • 12.1 kB
JavaScript
"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;