medusa-plugin-culqi-card
Version:
Medusa plugin for processing credit card payments with Culqi
163 lines (162 loc) • 8.41 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = 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 _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _medusaCoreUtils = require("medusa-core-utils");
var _culqiClient = _interopRequireDefault(require("../helpers/culqi-client"));
var _culqi = require("../helpers/culqi");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
var CulqiCustomerSubscriber = /*#__PURE__*/(0, _createClass2["default"])(function CulqiCustomerSubscriber(_ref) {
var _this = this;
var eventBusService = _ref.eventBusService,
customerService = _ref.customerService,
culqiLogService = _ref.culqiLogService;
(0, _classCallCheck2["default"])(this, CulqiCustomerSubscriber);
(0, _defineProperty2["default"])(this, "handleNewCustomer", /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(customer) {
var _yield$getOrCreateCul, _yield$getOrCreateCul2, culqiCustomerId, _, error;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _culqi.getOrCreateCulqiCustomer)({
culqiClient: _this.culqiClient_,
customer: customer,
email: customer.email,
address: null
});
case 2:
_yield$getOrCreateCul = _context.sent;
_yield$getOrCreateCul2 = (0, _slicedToArray2["default"])(_yield$getOrCreateCul, 3);
culqiCustomerId = _yield$getOrCreateCul2[0];
_ = _yield$getOrCreateCul2[1];
error = _yield$getOrCreateCul2[2];
if (!error) {
_context.next = 9;
break;
}
throw new _medusaCoreUtils.MedusaError(_medusaCoreUtils.MedusaError.Types.UNEXPECTED_STATE, "Failed to create Culqi customer with error: ".concat(error.merchant_message), error.code);
case 9:
_context.next = 11;
return _this.customerService_.update(customer.id, {
metadata: _objectSpread(_objectSpread({}, customer.metadata || {}), {}, {
culqi_customer_id: culqiCustomerId
})
});
case 11:
case "end":
return _context.stop();
}
}, _callee);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}());
(0, _defineProperty2["default"])(this, "handleUpdatedCustomer", /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(customer) {
var _customer$metadata, _customer$metadata2;
var culqiCustomerId, isCompany, updateData, _customer$metadata3, _yield$_this$culqiCli, _yield$_this$culqiCli2, _, error;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
culqiCustomerId = (_customer$metadata = customer.metadata) === null || _customer$metadata === void 0 ? void 0 : _customer$metadata.culqi_customer_id;
isCompany = (_customer$metadata2 = customer.metadata) === null || _customer$metadata2 === void 0 ? void 0 : _customer$metadata2.is_company;
if (!culqiCustomerId) {
_context2.next = 14;
break;
}
updateData = {};
if (!isCompany) {
if (customer.first_name) {
updateData.first_name = customer.first_name;
}
if (customer.last_name) {
updateData.last_name = customer.last_name;
}
if (customer.phone) {
updateData.phone_number = customer.phone;
}
} else {
if (customer.first_name && (_customer$metadata3 = customer.metadata) !== null && _customer$metadata3 !== void 0 && _customer$metadata3.external_user_id) {
updateData.metadata = {
external_user_id: customer.metadata.external_user_id,
company_name: customer.first_name
};
}
}
if (Object.keys(updateData).length) {
_context2.next = 7;
break;
}
return _context2.abrupt("return");
case 7:
_context2.next = 9;
return _this.culqiClient_.updateCustomerAsync(culqiCustomerId, updateData);
case 9:
_yield$_this$culqiCli = _context2.sent;
_yield$_this$culqiCli2 = (0, _slicedToArray2["default"])(_yield$_this$culqiCli, 2);
_ = _yield$_this$culqiCli2[0];
error = _yield$_this$culqiCli2[1];
if (error) {
// continue with the flow, but log the error
}
case 14:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return function (_x2) {
return _ref3.apply(this, arguments);
};
}());
(0, _defineProperty2["default"])(this, "handleDeletedCustomer", /*#__PURE__*/function () {
var _ref4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(customer) {
var _customer$metadata4;
var culqiCustomerId, _yield$_this$culqiCli3, _yield$_this$culqiCli4, deleted, error;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
culqiCustomerId = (_customer$metadata4 = customer.metadata) === null || _customer$metadata4 === void 0 ? void 0 : _customer$metadata4.culqi_customer_id;
if (!culqiCustomerId) {
_context3.next = 9;
break;
}
_context3.next = 4;
return _this.culqiClient_.deleteCustomerAsync(culqiCustomerId);
case 4:
_yield$_this$culqiCli3 = _context3.sent;
_yield$_this$culqiCli4 = (0, _slicedToArray2["default"])(_yield$_this$culqiCli3, 2);
deleted = _yield$_this$culqiCli4[0];
error = _yield$_this$culqiCli4[1];
if (error || !deleted) {
// continue with the flow, but log the error
}
case 9:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return function (_x3) {
return _ref4.apply(this, arguments);
};
}());
this.customerService_ = customerService;
this.culqiClient_ = new _culqiClient["default"](culqiLogService);
eventBusService.subscribe('customer.created', this.handleNewCustomer);
eventBusService.subscribe('customer.updated', this.handleUpdatedCustomer);
eventBusService.subscribe('customer.deleted', this.handleDeletedCustomer);
});
var _default = CulqiCustomerSubscriber;
exports["default"] = _default;