73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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;
 | 
						||
};
 |