| 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; | |
| };
 |