@lskjs/billing
Version:
LSK.js module for adding billing in cabinet
277 lines (276 loc) • 13 kB
JavaScript
"use strict";
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 _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _err = _interopRequireDefault(require("@lskjs/err"));
var _serverApi = _interopRequireDefault(require("@lskjs/server-api"));
var _get3 = _interopRequireDefault(require("lodash/get"));
var _set = _interopRequireDefault(require("lodash/set"));
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; }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var YandexCheckoutBillingApi = /*#__PURE__*/function (_Api) {
(0, _inherits2["default"])(YandexCheckoutBillingApi, _Api);
var _super = _createSuper(YandexCheckoutBillingApi);
function YandexCheckoutBillingApi() {
(0, _classCallCheck2["default"])(this, YandexCheckoutBillingApi);
return _super.apply(this, arguments);
}
(0, _createClass2["default"])(YandexCheckoutBillingApi, [{
key: "getRoutes",
value: function getRoutes() {
return _objectSpread(_objectSpread({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(YandexCheckoutBillingApi.prototype), "getRoutes", this).call(this)), {}, {
'/create': this.create.bind(this),
'/callback': this.callback.bind(this),
'/check': this.check.bind(this)
});
}
}, {
key: "url",
value: function url() {
var _this$app;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return (_this$app = this.app).url.apply(_this$app, ["/api/billing/yandexCheckout/".concat(args[0])].concat((0, _toConsumableArray2["default"])(args.slice(1))));
}
}, {
key: "check",
value: function () {
var _check = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(req) {
var _id, BillingTransactionModel, transaction;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.isAuth(req);
case 2:
_id = req.data._id;
if (_id) {
_context.next = 5;
break;
}
throw new _err["default"]('params.required', {
status: 400,
data: {
field: '_id'
}
});
case 5:
BillingTransactionModel = this.app.models.BillingTransactionModel;
_context.next = 8;
return BillingTransactionModel.findById(_id);
case 8:
transaction = _context.sent;
return _context.abrupt("return", this._checkTransactionAndSave(transaction));
case 10:
case "end":
return _context.stop();
}
}, _callee, this);
}));
function check(_x) {
return _check.apply(this, arguments);
}
return check;
}()
}, {
key: "_checkTransactionAndSave",
value: function () {
var _checkTransactionAndSave2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(transaction) {
var _yield$this$app$modul, billing, _yield$billing$provid, client, res;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return this.app.module(['billing']);
case 2:
_yield$this$app$modul = _context2.sent;
billing = _yield$this$app$modul.billing;
_context2.next = 6;
return billing.provider('yandexCheckout');
case 6:
_yield$billing$provid = _context2.sent;
client = _yield$billing$provid.client;
_context2.prev = 8;
_context2.next = 11;
return client.getPayment(transaction.meta.id);
case 11:
res = _context2.sent;
this.log.trace('getPayment res', res);
transaction.addEvent({
type: 'getPayment',
data: res
});
_context2.next = 16;
return transaction.setStatus(res.status);
case 16:
_context2.next = 18;
return transaction.save();
case 18:
return _context2.abrupt("return", transaction);
case 21:
_context2.prev = 21;
_context2.t0 = _context2["catch"](8);
this.log.error('check err', _context2.t0);
transaction.addEvent({
method: 'check',
data: _context2.t0
});
_context2.next = 27;
return transaction.save();
case 27:
throw _context2.t0;
case 28:
case "end":
return _context2.stop();
}
}, _callee2, this, [[8, 21]]);
}));
function _checkTransactionAndSave(_x2) {
return _checkTransactionAndSave2.apply(this, arguments);
}
return _checkTransactionAndSave;
}()
}, {
key: "create",
value: function () {
var _create = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(req) {
var _yield$this$app$modul2, billing, _yield$billing$provid2, client, BillingTransactionModel, amount, transaction, data, res;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
this.log = this.app.log;
_context3.next = 3;
return this.isAuth(req);
case 3:
_context3.next = 5;
return this.app.module(['billing']);
case 5:
_yield$this$app$modul2 = _context3.sent;
billing = _yield$this$app$modul2.billing;
_context3.next = 9;
return billing.provider('yandexCheckout');
case 9:
_yield$billing$provid2 = _context3.sent;
client = _yield$billing$provid2.client;
_context3.next = 13;
return this.app.module('models.BillingTransactionModel');
case 13:
BillingTransactionModel = _context3.sent;
// const BillingTransactionModel = await this.app.model('BillingTransactionModel');
// const { amount } = req.data;
amount = 100;
_context3.next = 17;
return BillingTransactionModel.createPayment({
type: BillingTransactionModel.TYPE_IN,
amount: amount,
currency: 'RUB',
provider: 'yandexCheckout',
userId: req.user._id
});
case 17:
transaction = _context3.sent;
data = {
amount: {
currency: transaction.currency,
value: String(transaction.amount / 100)
},
payment_method_data: {
type: 'bank_card'
},
confirmation: {
type: 'redirect',
return_url: this.app.url("/cabinet/billing/".concat(transaction._id))
}
};
_context3.prev = 19;
this.log.debug('createPayment', 'transaction', transaction._id, 'data', data);
_context3.next = 23;
return client.createPayment(data, transaction._id);
case 23:
res = _context3.sent;
this.log.trace('createPayment res', res);
transaction.addEvent({
method: 'createPayment',
data: data,
res: res
});
(0, _set["default"])(transaction, 'meta.id', (0, _get3["default"])(res, 'id'));
(0, _set["default"])(transaction, 'meta.continueUrl', (0, _get3["default"])(res, 'confirmation.confirmation_url'));
transaction.markModified('meta.id');
transaction.markModified('meta.continueUrl');
_context3.next = 32;
return transaction.save();
case 32:
return _context3.abrupt("return", transaction);
case 35:
_context3.prev = 35;
_context3.t0 = _context3["catch"](19);
this.log.error('createPayment err', _context3.t0);
transaction.addEvent({
method: 'createPayment',
status: 'error',
err: _context3.t0
});
_context3.next = 41;
return transaction.save();
case 41:
throw _context3.t0;
case 42:
case "end":
return _context3.stop();
}
}, _callee3, this, [[19, 35]]);
}));
function create(_x3) {
return _create.apply(this, arguments);
}
return create;
}()
}, {
key: "callback",
value: function () {
var _callback = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(req) {
var yandexId, BillingTransactionModel, transaction;
return _regenerator["default"].wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
yandexId = req.data.yandexId;
BillingTransactionModel = this.app.models.BillingTransactionModel;
_context4.next = 4;
return BillingTransactionModel.findById({
'meta.id': yandexId
});
case 4:
transaction = _context4.sent;
return _context4.abrupt("return", this._checkTransactionAndSave(transaction));
case 6:
case "end":
return _context4.stop();
}
}, _callee4, this);
}));
function callback(_x4) {
return _callback.apply(this, arguments);
}
return callback;
}()
}]);
return YandexCheckoutBillingApi;
}(_serverApi["default"]);
exports["default"] = YandexCheckoutBillingApi;
//# sourceMappingURL=YandexCheckoutBillingApi.js.map