function DiscogsClient(userAgent, auth) {
    // Allow the class to be called as a function, returning an instance
    if (!(this instanceof DiscogsClient)) {
        return new DiscogsClient(userAgent, auth);
    }
    // Set the default configuration
    this.config = util.merge({}, defaultConfig);
    // Set the custom User Agent when provided
    if (typeof userAgent === 'string') {
        this.config.userAgent = userAgent;
    }
    // No userAgent provided, but instead we have an accessObject
    if ((arguments.length === 1) && (typeof userAgent === 'object')) {
        auth = userAgent;
    }
    // Set auth data when provided
    if (auth && (typeof auth === 'object')) {
        queue.setConfig({maxCalls: this.config.requestLimitAuth});
        if (!auth.hasOwnProperty('method')) {
            auth.method = 'discogs';
        }
        if (!auth.hasOwnProperty('level')) {
            if (auth.userToken) {
                auth.level = 2;
            } else if (auth.consumerKey && auth.consumerSecret) {
                auth.level = 1;
            }
        }
        this.auth = util.merge({}, auth);
    // Unauthenticated new client instances will decrease the shared request limit
    } else {
        queue.setConfig({maxCalls: this.config.requestLimit});
    }
}
Object constructor
@param {string} [userAgent] - The name of the user agent to use to make API calls
@param {object} [auth] - Optional authorization data object
@return {DiscogsClient}