UNPKG

@tutorbot/payment-interface

Version:

Payment API Library for Tutor Platform

249 lines (248 loc) 10.4 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var payment_env_enum_1 = require("../enums/payment-env.enum"); var capitalize = function (s) { if (typeof s !== 'string') { return ''; } return s.charAt(0).toUpperCase() + s.slice(1); }, validateRequiredField = function (obj, field) { if (!obj[field]) { var name_1 = capitalize(field); throw Error(name_1 + " is required. Use \"set" + name_1 + "(value)\" to update it."); } }; var PaymentInterface = /** @class */ (function () { function PaymentInterface() { this.languages = ['en']; this.currencies = ['usd']; this.minimalAmount = 0.1; this.testPayAmount = 1; this.backUrl = null; this.cancelUrl = ''; this.images = []; this.transaction = null; this.redirectBackData = null; this.order = null; this.currency = 'usd'; this.language = null; this.description = null; this.amount = 0; this.credentials = {}; this.environment = payment_env_enum_1.PaymentEnvEnum.DEVELOPMENT; } Object.defineProperty(PaymentInterface.prototype, "paymentEnv", { get: function () { var env = (process.env.PAYMENT_ENV || this.environment || ''); if (!Object.values(payment_env_enum_1.PaymentEnvEnum).includes(env)) { return payment_env_enum_1.PaymentEnvEnum.DEVELOPMENT; } return env; }, enumerable: false, configurable: true }); // needs to be implemented in child classes PaymentInterface.prototype.productionConfigs = function () { return {}; }; // needs to be implemented in child classes PaymentInterface.prototype.developmentConfigs = function () { return {}; }; Object.defineProperty(PaymentInterface.prototype, "configs", { get: function () { var configFunction = this.paymentEnv + "Configs"; if (typeof this[configFunction] !== 'function') { throw new Error('The environment configs are not defined!'); } return this[configFunction](); }, enumerable: false, configurable: true }); PaymentInterface.prototype.setEnvironment = function (environment) { this.environment = environment; return this; }; PaymentInterface.prototype.setCredentials = function (credentials) { this.credentials = credentials; return this; }; PaymentInterface.prototype.setBackUrl = function (backUrl) { this.backUrl = backUrl; return this; }; PaymentInterface.prototype.setCancelUrl = function (cancelUrl) { this.cancelUrl = cancelUrl; return this; }; PaymentInterface.prototype.setImages = function (images) { this.images = images; return this; }; PaymentInterface.prototype.setOrder = function (order) { this.order = order; return this; }; // Custom logic to fetch transactionId/paymentId/sessionId should be implemented in each payment method interface PaymentInterface.prototype.fetchTransactionId = function (queryParams) { return queryParams.transactionId; }; PaymentInterface.prototype.setTransaction = function (transaction) { this.transaction = transaction; return this; }; PaymentInterface.prototype.setRedirectBackData = function (redirectBackData) { this.redirectBackData = redirectBackData; return this; }; PaymentInterface.prototype.setCurrency = function (currency) { currency = currency.toLowerCase(); if (!this.currencies.includes(currency)) { throw Error("Payment method does not support currency \"" + currency + "\""); } this.currency = currency; return this; }; PaymentInterface.prototype.setLanguage = function (language) { if (!this.languages.includes(language)) { throw Error("Payment method does not support language \"" + language + "\""); } this.language = language; return this; }; PaymentInterface.prototype.setAmount = function (amount) { this.amount = parseFloat(amount.toString()); if (!this.amount) { throw Error("Amount \"" + amount + "\" is not valid"); } if (this.amount < this.minimalAmount) { throw Error("Minimal amount is " + this.minimalAmount); } return this; }; PaymentInterface.prototype.setDescription = function (description) { this.description = description || this.description; return this; }; PaymentInterface.prototype.setCustomer = function (customer) { this.customer = customer || this.customer; return this; }; PaymentInterface.prototype.setCard = function (card) { this.card = card || this.card; return this; }; PaymentInterface.prototype.details = function () { return __awaiter(this, void 0, void 0, function () { var _i, _a, field; return __generator(this, function (_b) { for (_i = 0, _a = ['transaction']; _i < _a.length; _i++) { field = _a[_i]; validateRequiredField(this, field); } return [2 /*return*/]; }); }); }; PaymentInterface.prototype.submit = function () { return __awaiter(this, void 0, void 0, function () { var _i, _a, field; return __generator(this, function (_b) { for (_i = 0, _a = ['backUrl', 'order', 'currency', 'amount']; _i < _a.length; _i++) { field = _a[_i]; validateRequiredField(this, field); } if (!this.language) { this.language = this.languages[0]; } if (!this.description) { this.description = "Transaction #" + this.order; } return [2 /*return*/]; }); }); }; PaymentInterface.prototype.processIpn = function (data) { // can be implemented in child classes }; PaymentInterface.prototype.deposit = function (amount) { return __awaiter(this, void 0, void 0, function () { var _i, _a, field; return __generator(this, function (_b) { this.setAmount(amount); for (_i = 0, _a = ['amount', 'transaction']; _i < _a.length; _i++) { field = _a[_i]; validateRequiredField(this, field); } return [2 /*return*/]; }); }); }; PaymentInterface.prototype.cancel = function () { return __awaiter(this, void 0, void 0, function () { var _i, _a, field; return __generator(this, function (_b) { for (_i = 0, _a = ['transaction']; _i < _a.length; _i++) { field = _a[_i]; validateRequiredField(this, field); } return [2 /*return*/]; }); }); }; PaymentInterface.prototype.refund = function (amount) { return __awaiter(this, void 0, void 0, function () { var _i, _a, field; return __generator(this, function (_b) { this.setAmount(amount); for (_i = 0, _a = ['amount', 'transaction']; _i < _a.length; _i++) { field = _a[_i]; validateRequiredField(this, field); } return [2 /*return*/]; }); }); }; return PaymentInterface; }()); exports.default = PaymentInterface;