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