# Source: mercadopago.js

    var configurations = require('./configurations');
    var backwardSupport = require('./mercadopago-support')();
    var utilsModule = require('./utils');
    var paymentModule = require('./resources/payment');
    var preferencesModule = require('./resources/preferences');
    var preapprovalModule = require('./resources/preapproval');
    var merchantOrdersModule = require('./resources/merchantOrders');
    var moneyRequestsModule = require('./resources/moneyRequests');
    var customersModule = require('./resources/customers');
    var ipnModule = require('./resources/ipn');
    var connectModule = require('./resources/connect');
    var cardModule = require('./resources/card');
    var cardTokenModule = require('./resources/cardToken');
    var refundModule = require('./resources/refund');
    var discountCampaignModule = require('./resources/discountCampaign');
    var sdk;
    var resources;

    /**
     * Configuration options
     * @static
     * @param options
     * @param options.access_token Access Token
     * @param options.client_id Cliend ID
     * @param options.client_secret Client Secret
     * @param options.platform_id Platform Id
     * @param options.corporation_id Corporation Id
     * @param options.integrator_id Integrator Id
     * @param options.sandbox Sandbox
     */
    function configure(options) {
      configurations.configure(options);
    }

    // Backward compatibility method initialization
    sdk = module.exports = function () {
      var options = {
        // If it is the old version of the SDK, this support callbacks with Q library. This error isnt shown
        show_promise_error: false
      };

      console.warn('This way of initializing the SDK is deprecated. Please change following the documentation');

      if (arguments.length === 1) {
        options.access_token = arguments[0];
      } else if (arguments.length === 2) {
        options.client_id = arguments[0];
        options.client_secret = arguments[1];
      } else {
        throw new Error('Invalid arguments. Use CLIENT_ID and CLIENT SECRET, or ACCESS_TOKEN');
      }

      // Configure the SDK
      try {
        this.configure(options);
      } catch (error) {
        // Prevent double initialization error on client_id and client_secret
      }
    };

    // When support is gone this is going to be the return literal from this class
    resources = {
      configure: configure,
      utils: utilsModule,
      configurations: configurations,
      payment: paymentModule,
      preferences: preferencesModule,
      preapproval: preapprovalModule,
      merchant_orders: merchantOrdersModule,
      customers: customersModule,
      ipn: ipnModule,
      connect: connectModule,
      money_requests: moneyRequestsModule,
      card: cardModule,
      card_token: cardTokenModule,
      refund: refundModule,
      discount_campaign: discountCampaignModule
    };

    // Adding modules to prototype and a static method - This is going to be delete
    Object.keys(resources).forEach(function (key) {
      sdk[key] = resources[key];

      /* istanbul ignore next */
      sdk.prototype[key] = resources[key];
    });

    // Adding modules to prototype and a static method from support module - This is going to be delete
    Object.keys(backwardSupport).forEach(function (key) {
      sdk[key] = backwardSupport[key];

      /* istanbul ignore next */
      sdk.prototype[key] = backwardSupport[key];
    });