/**
 * Message for error when method is not implemented
 * @type {String}
 * @private
 */
var IMPLEMENT_MESSAGE = 'Not implemented';

/**
 * Create base instance for payments
 * @param {Object} _config Configuration object
 * @constructor
 */
function BasePayment(_config) {
  var config = _config || {};

  Object.keys(config).forEach(function (key) {
    this.setConfig(key, config[key]);
  }.bind(this));
}

/**
 * Get some configuration value from config
 * @param {String} [key]
 * @returns {*}
 */
BasePayment.prototype.getConfig = function (key) {
  return typeof key === 'undefined' ? this._config : this._config && this._config[key];
};

/**
 * Set new configuration value
 * @param {String} key
 * @param {*} value
 * @returns {BasePayment}
 */
BasePayment.prototype.setConfig = function (key, value) {
  this._config = this._config || {};
  this._config[key] = value;
  return this;
};

/**
 * Get payment provider for current instance
 * @returns {Object}
 */
BasePayment.prototype.getProvider = function () {
  return this._provider;
};

/**
 * Set new payment provider instance
 * @param {Object} provider
 * @returns {BasePayment}
 */
BasePayment.prototype.setProvider = function (provider) {
  this._provider = provider;
  return this;
};

/**
 * Proceed to checkout
 */
BasePayment.prototype.checkout = function () {
  throw new Error(IMPLEMENT_MESSAGE);
};

module.exports = BasePayment;

@@ -1369,16 +1369,144 @@
 E);%0A%7D;%0A%0A
+/**%0A * Refund money back to customer%0A */%0ABasePayment.prototype.refund = function () %7B%0A  throw new Error(IMPLEMENT_MESSAGE);%0A%7D;%0A%0A
 module.e

Add default refund method