hexo/node_modules/cos-nodejs-sdk-v5/sdk/cos.js

138 lines
5.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'use strict';
var util = require('./util');
var event = require('./event');
var task = require('./task');
var base = require('./base');
var advance = require('./advance');
var pkg = require('../package.json');
var defaultOptions = {
AppId: '', // AppId 已废弃,请拼接到 Bucket 后传入例如test-1250000000
SecretId: '',
SecretKey: '',
SecurityToken: '', // 使用临时密钥需要注意自行刷新 Token
ChunkRetryTimes: 2,
FileParallelLimit: 3,
ChunkParallelLimit: 3,
ChunkSize: 1024 * 1024,
SliceSize: 1024 * 1024,
CopyChunkParallelLimit: 20,
CopyChunkSize: 1024 * 1024 * 10,
CopySliceSize: 1024 * 1024 * 10,
MaxPartNumber: 10000,
ProgressInterval: 1000,
Domain: '',
ServiceDomain: '',
Protocol: '',
CompatibilityMode: false,
ForcePathStyle: false,
UseRawKey: false,
Timeout: 0, // 单位毫秒0 代表不设置超时时间
CorrectClockSkew: true,
SystemClockOffset: 0, // 单位毫秒ms
UploadCheckContentMd5: false,
UploadQueueSize: 1000,
UploadIdCacheLimit: 500,
Proxy: '',
Tunnel: undefined,
Ip: '',
StrictSsl: true,
KeepAlive: true,
FollowRedirect: false,
UseAccelerate: false,
UserAgent: '',
ConfCwd: '',
ForceSignHost: true, // 默认将host加入签名计算关闭后可能导致越权风险建议保持为true
// 动态秘钥优先级Credentials > SecretId/SecretKey。注意Cred内是小写的secretId、secretKey
Credentials: {
secretId: '',
secretKey: '',
},
};
const watch = (obj, name, callback) => {
let value = obj[name];
Object.defineProperty(obj, name, {
get() {
return value;
},
set(newValue) {
value = newValue;
callback();
},
});
};
// 对外暴露的类
var COS = function (options) {
this.options = util.extend(util.clone(defaultOptions), options || {});
this.options.FileParallelLimit = Math.max(1, this.options.FileParallelLimit);
this.options.ChunkParallelLimit = Math.max(1, this.options.ChunkParallelLimit);
this.options.ChunkRetryTimes = Math.max(0, this.options.ChunkRetryTimes);
this.options.ChunkSize = Math.max(1024 * 1024, this.options.ChunkSize);
this.options.CopyChunkParallelLimit = Math.max(1, this.options.CopyChunkParallelLimit);
this.options.CopyChunkSize = Math.max(1024 * 1024, this.options.CopyChunkSize);
this.options.CopySliceSize = Math.max(0, this.options.CopySliceSize);
this.options.MaxPartNumber = Math.max(1024, Math.min(10000, this.options.MaxPartNumber));
this.options.Timeout = Math.max(0, this.options.Timeout);
if (this.options.AppId) {
console.warn(
'warning: AppId has been deprecated, Please put it at the end of parameter Bucket(E.g: "test-1250000000").',
);
}
// 云API SDK 用小写密钥,这里兼容并 warning
if (this.options.secretId || this.options.secretKey) {
if (this.options.secretId && !this.options.SecretId) this.options.SecretId = this.options.secretId;
if (this.options.secretKey && !this.options.SecretKey) this.options.SecretKey = this.options.secretKey;
console.warn('warning: Please change options secretId/secretKey to SecretId/SecretKey.');
}
// 支持外部传入Cred动态秘钥
if (this.options.Credentials.secretId && this.options.Credentials.secretKey) {
this.options.SecretId = this.options.Credentials.secretId || '';
this.options.SecretKey = this.options.Credentials.secretKey || '';
}
if (this.options.SecretId && this.options.SecretId.indexOf(' ') > -1) {
console.error('error: SecretId格式错误请检查');
console.error('error: SecretId format is incorrect. Please check');
}
if (this.options.SecretKey && this.options.SecretKey.indexOf(' ') > -1) {
console.error('error: SecretKey格式错误请检查');
console.error('error: SecretKey format is incorrect. Please check');
}
if (util.isWeb()) {
console.warn(
'warning: cos-nodejs-sdk-v5 不支持浏览器使用,请改用 cos-js-sdk-v5参考文档 https://cloud.tencent.com/document/product/436/11459',
);
console.warn(
'warning: cos-nodejs-sdk-v5 does not support browsers. Please use cos-js-sdk-v5 instead, See: https://cloud.tencent.com/document/product/436/11459',
);
}
event.init(this);
task.init(this);
// 支持动态秘钥监听到cred里secretId、secretKey变化时主动给cos替换秘钥
watch(this.options.Credentials, 'secretId', () => {
console.log('Credentials secretId changed');
this.options.SecretId = this.options.Credentials.secretId;
});
watch(this.options.Credentials, 'secretKey', () => {
console.log('Credentials secretKey changed');
this.options.SecretKey = this.options.Credentials.secretKey;
});
};
base.init(COS, task);
advance.init(COS, task);
COS.util = {
md5: util.md5,
xml2json: util.xml2json,
json2xml: util.json2xml,
encodeBase64: util.encodeBase64,
};
COS.getAuthorization = util.getAuth;
COS.version = pkg.version;
module.exports = COS;