docs: function maskProps(obj, props, maskCreditCards = true, isHeaders = false) {
    return mapValues(obj, (val, key) => {
      if (isObject(val)) return maskProps(val, props, maskCreditCards, isHeaders);
      if (!isString(val)) return val;
      // if it was a credit card then replace all digits with asterisk
      if (!isHeaders && maskCreditCards && isCreditCard(val))
        return val.replace(/[^\D\s]/g, '*');
      if (!props.includes(key)) return val;
      // replace only the authentication <credentials> portion with asterisk
      // Authorization: <type> <credentials>
      if (isHeaders && key === 'Authorization')
        return `${val.split(' ')[0]} ${val
          .substring(val.indexOf(' ') + 1)
          .replace(/./g, '*')}`;
      return val.replace(/./g, '*');
    });
  }