UNPKG

kws-sdk

Version:

81 lines 2.27 kB
"use strict"; 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