kws-sdk
Version:
81 lines • 2.27 kB
JavaScript
;
const querystring = require("querystring");
const aws = require("aws4");
const request = require("request-promise");
function buildBody(body) {
if (!body) {
return '';
}
return JSON.stringify(body);
}
function buildAWSPath(query = {}) {
const keys = Object.keys(query);
if (keys.length === 0) {
return '/';
}
return '/?' + querystring.stringify(query);
}
class KWS {
constructor(args) {
Object.assign(this, args);
if (!this.region) {
this.region = 'cn-beijing-6';
}
}
buildHost(service) {
return this.host || `${service}.${this.region}.api.ksyun.com`;
}
buildAWSRequest(method, service, query, body) {
return {
host: this.buildHost(service),
method,
service,
headers: {},
region: this.region,
path: buildAWSPath(query),
body,
signQuery: true
};
}
buildAWSCredentials() {
return {
accessKeyId: this.ak,
secretAccessKey: this.sk
};
}
buildQuery(action, version, query) {
return Object.assign({
Action: action,
Version: version,
App: this.app,
UniqName: this.uniqname
}, query);
}
sign(method, api, data = {}) {
data.query = data.query || {};
const body = buildBody(data.body);
const query = this.buildQuery(api.action, api.version, data.query);
const AWSRequest = this.buildAWSRequest(method, api.service, query, body);
const AWSCredentials = this.buildAWSCredentials();
return aws.sign(AWSRequest, AWSCredentials);
}
request(method, api, data = {}) {
const sign = this.sign(method, api, data);
const option = {
uri: `https://${sign.host}${sign.path}`,
method: method,
headers: sign.headers,
body: ''
};
if (data.body) {
option.method = 'POST';
option.body = JSON.stringify(data.body);
}
else {
delete option.body;
}
return request(option);
}
}
module.exports = KWS;
//# sourceMappingURL=index.js.map