ks3
Version:
本代码库为`金山云存储KS3`服务.主要提供`KS3 nodejs SDK`和`命令行工具`.
91 lines (78 loc) • 2.16 kB
JavaScript
var debug = require('debug')('app')
var auth = require('./auth')
var iam = require('./api/iam')
var config = require('./../config')
var util = require('./util')
var sts = require('./sts')
var initOptions = require('./initOptions')
var advance = require('./advance')
function checkRegionValid (region) {
return Object.keys(config.ENDPOINT).indexOf(region) > -1
}
// 原参数:ak, sk, bucket, region
function KS3(opts = {}) {
let options = {}
const args = arguments
// 参数大于2个时为旧版创建方式 否则是新版的创建方式
if (args.length >= 2) {
const [ ak = '', sk = '', bucket = '', region = config.region ] = arguments
options = {
ak, sk, bucket, region
}
if (region) {
if (!checkRegionValid(region)) throw new Error('region is not legal, please check params')
options.endpoint = config.ENDPOINT[region]
}
} else {
options = opts
}
if (!options.inited) options = initOptions(options)
const { region, endpoint, secure } = options
var core = this;
for (let v in options) {
core[v] = options[v]
}
if (region) {
config.setRegion(region);
}
config.baseUrl = endpoint
config.protocol = secure ? 'https' : 'http'
const arr = ['service', 'bucket', 'object', 'upload', 'download', 'advance']
arr.forEach(function(name) {
var api = ['advance'].indexOf(name) > -1 ? require('./' + name) : require('./api/' + name);
core[name] = {};
// 绑定this到各自函数身上
for (var attr in api) {
core[name][attr] = (function(attr) {
return function() {
var args = Array.prototype.slice.call(arguments);
return util.apiWrapper.call(core, name, api[attr], args)
}
})(attr)
}
});
}
/**
* 填充信息
*/
KS3.version = require('../package.json').version;
KS3.prototype = {
// 进行配置
config: function(cfg) {
for (var it in cfg) {
// 全局配置 需要当前版本信息
if (it == 'ua') {
config[it] += (cfg[it]? ` ${cfg[it]}` : '')
} else {
config[it] = cfg[it];
}
}
},
request: require('./request'),
};
KS3.util = util
KS3.auth = auth
KS3.iam = iam
KS3.STS = sts
KS3.advance = advance
module.exports = KS3;