whole_func_string: function Charged(options) {
    if (!(this instanceof Charged)) {
      return new Charged(options);
    }
  
    this.options = options;
    this.subdomain = options.subdomain || options.product || options.name;
    this.apiKey = options.key || options.apiKey;
    this.siteKey = options.siteKey;
    this.defaultFamily = options.family || options.defaultFamily;
    this.smartValidation = options.smartValidation;
    this.debug = options.debug;
    this.retry = options.retry || 1;
  
    this.cache = options.cache || false;
    this.cacheTTL = options.cacheTTL || 20 * 1000;
    this.cacheThreshold = options.cacheThreshold || 100;
    this._cache = {
      customers: {},
      subscriptions: {},
      components: {},
      metadata: {},
      usage: {}
    };
  
    this.cacheSchemas = options.cacheSchemas;
    this._schemaCache = {
      components: {},
      products: {}
    };
  
    if (!this.subdomain || !this.apiKey) {
      throw new
        Error('Options `subdomain` and `apiKey` are required for Charged.');
    }
  }
func_code_string: function Charged(options) {
    if (!(this instanceof Charged)) {
      return new Charged(options);
    }
  
    this.options = options;
    this.subdomain = options.subdomain || options.product || options.name;
    this.apiKey = options.key || options.apiKey;
    this.siteKey = options.siteKey;
    this.defaultFamily = options.family || options.defaultFamily;
    this.smartValidation = options.smartValidation;
    this.debug = options.debug;
    this.retry = options.retry || 1;
  
    this.cache = options.cache || false;
    this.cacheTTL = options.cacheTTL || 20 * 1000;
    this.cacheThreshold = options.cacheThreshold || 100;
    this._cache = {
      customers: {},
      subscriptions: {},
      components: {},
      metadata: {},
      usage: {}
    };
  
    this.cacheSchemas = options.cacheSchemas;
    this._schemaCache = {
      components: {},
      products: {}
    };
  
    if (!this.subdomain || !this.apiKey) {
      throw new
        Error('Options `subdomain` and `apiKey` are required for Charged.');
    }
  }
func_documentation_string: Charged