|                                                                        |  | const ms = require('humanize-ms');const urlutil = require('url');const { checkBucketName: _checkBucketName } = require('../utils/checkBucketName');const { setRegion } = require('../utils/setRegion');const { checkConfigValid } = require('../utils/checkConfigValid');
function setEndpoint(endpoint, secure) {  checkConfigValid(endpoint, 'endpoint');  let url = urlutil.parse(endpoint);
  if (!url.protocol) {    url = urlutil.parse(`http${secure ? 's' : ''}://${endpoint}`);  }
  if (url.protocol !== 'http:' && url.protocol !== 'https:') {    throw new Error('Endpoint protocol must be http or https.');  }
  return url;}
module.exports = function (options) {  if (!options || !options.accessKeyId || !options.accessKeySecret) {    throw new Error('require accessKeyId, accessKeySecret');  }  if (options.stsToken && !options.refreshSTSToken && !options.refreshSTSTokenInterval) {    console.warn(      "It's recommended to set 'refreshSTSToken' and 'refreshSTSTokenInterval' to refresh" +        ' stsToken、accessKeyId、accessKeySecret automatically when sts token has expired'    );  }  if (options.bucket) {    _checkBucketName(options.bucket);  }  const opts = Object.assign(    {      region: 'oss-cn-hangzhou',      internal: false,      secure: false,      timeout: 60000,      bucket: null,      endpoint: null,      cname: false,      isRequestPay: false,      sldEnable: false,      headerEncoding: 'utf-8',      refreshSTSToken: null,      refreshSTSTokenInterval: 60000 * 5,      retryMax: 0,      authorizationV4: false // 启用v4签名,默认关闭
    },    options  );
  opts.accessKeyId = opts.accessKeyId.trim();  opts.accessKeySecret = opts.accessKeySecret.trim();
  if (opts.timeout) {    opts.timeout = ms(opts.timeout);  }
  if (opts.endpoint) {    opts.endpoint = setEndpoint(opts.endpoint, opts.secure);  } else if (opts.region) {    opts.endpoint = setRegion(opts.region, opts.internal, opts.secure);  } else {    throw new Error('require options.endpoint or options.region');  }
  opts.inited = true;  return opts;};
 |