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