UNPKG

@lskjs/billing

Version:

LSK.js module for adding billing in cabinet

277 lines (276 loc) 13 kB
"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