ali-mns-sdk
Version:
The nodejs SDK for aliyun mns service
144 lines • 12.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const PROMISE = require("promise");
const Url = require("url");
const Util = require("util");
const Xml2js = require("xml2js");
const XmlBuilder = require("xmlbuilder");
const GA_1 = require("./GA");
const Request_1 = require("./utils/Request");
// the ali open interface stack protocol
class OpenStack {
constructor(account) {
this._patternMNS = 'MNS %s:%s';
this._patternSign = '%s\n%s\n%s\n%s\n%s%s';
this._contentType = 'text/xml;charset=utf-8';
this._version = '2015-06-06';
this._gaRGA = 0; // Reduce Google Analysis sending rate
this._account = account;
// Google Analytics
this._ga = new GA_1.GA(account.getAccountId());
this._ga.disableGA(!account.getGA());
}
// Send the request
// method: GET, POST, PUT, DELETE
// url: request url
// body: optional, request body
// head: optional, request heads
// options: optional, request options
sendP(method, url, body, headers, options) {
const req = { method, url };
if (body)
req.body = XmlBuilder.create(body).toString();
req.headers = this.makeHeaders(method, url, headers, req.body);
// combines options
if (options) {
for (const opt in options) {
if (opt === 'method' || opt === 'url' || opt === 'uri' || opt === 'body' || opt === 'headers')
continue;
// skip these options for avoid conflict to other arguments
else if (options.hasOwnProperty(opt))
req[opt] = options[opt];
}
}
const parseStringP = PROMISE.denodeify(Xml2js.parseString);
// tslint:disable-next-line: no-string-literal
const ret = Request_1.default['requestP'](req)
.then(response => {
// convert the body from xml to json
return parseStringP(response.body, {
explicitArray: false,
}).then(bodyJSON => {
response.bodyJSON = bodyJSON;
return response;
}, () => {
// cannot parse as xml
response.bodyJSON = response.body;
return response;
});
})
.then(response => {
if (response.statusCode < 400) {
// 200 okay!
if (response.bodyJSON)
return response.bodyJSON;
else
return response.statusCode;
}
else {
if (response.bodyJSON)
return Promise.reject(response.bodyJSON);
else
return Promise.reject(response.statusCode);
}
});
// google analytics
if (this._gaRGA % 1000000 === 0)
this._ga.send('OpenStack.sendP', this._gaRGA, url);
this._gaRGA++;
return ret;
}
accumulateNextGASend(prefix) {
this._ga.accumulateNextSend(prefix);
}
disableGA(bDisable) {
this._ga.disableGA(bDisable);
}
makeHeaders(mothod, url, headers, body) {
// if not exist, create one
if (!headers) {
headers = {
'User-Agent': 'Node/' + process.version + ' (' + process.platform + ')',
};
}
let contentMD5 = '';
let contentType = '';
if (body) {
if (!headers['Content-Length'])
headers['Content-Length'] = new Buffer(body, 'utf-8').length;
if (!headers['Content-Type'])
headers['Content-Type'] = this._contentType;
contentType = headers['Content-Type'];
contentMD5 = this._account.b64md5(body);
headers['Content-MD5'] = contentMD5;
}
// `Date` & `Host` will be added by request automatically
if (!headers['x-mns-version'])
headers['x-mns-version'] = this._version;
// lowercase & sort & extract the x-mns-<any>
const headsLower = {};
const keys = [];
for (const key in headers) {
if (headers.hasOwnProperty(key)) {
const lower = key.toLowerCase();
keys.push(lower);
headsLower[lower] = headers[key];
}
}
keys.sort();
let mnsHeaders = '';
for (const i in keys) {
const k = keys[i];
if (typeof k === 'string' && k.indexOf('x-mns-') === 0) {
mnsHeaders += Util.format('%s:%s\n', k, headsLower[k]);
}
}
const tm = new Date().toUTCString();
const mnsURL = Url.parse(url);
headers.Date = tm;
headers.Authorization = this.authorize(mothod, mnsURL.path, mnsHeaders, contentType, contentMD5, tm);
headers.Host = mnsURL.host;
return headers;
}
// ali mns authorize header
authorize(httpVerb, mnsURI, mnsHeaders, contentType, contentMD5, tm) {
return Util.format(this._patternMNS, this._account.getKeyId(), this.signature(httpVerb, mnsURI, mnsHeaders, contentType, contentMD5, tm));
}
// ali mns signature
signature(httpVerb, mnsURI, mnsHeaders, contentType, contentMD5, tm) {
const text = Util.format(this._patternSign, httpVerb, contentMD5, contentType, tm, mnsHeaders, mnsURI);
return this._account.hmac_sha1(text, 'base64');
}
}
exports.OpenStack = OpenStack;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3BlblN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL09wZW5TdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUFtQztBQUNuQywyQkFBMkI7QUFDM0IsNkJBQTZCO0FBQzdCLGlDQUFpQztBQUNqQyx5Q0FBeUM7QUFFekMsNkJBQTBCO0FBQzFCLDZDQUFzQztBQUV0Qyx3Q0FBd0M7QUFDeEMsTUFBYSxTQUFTO0lBQ3BCLFlBQVksT0FBZ0I7UUE4SXBCLGdCQUFXLEdBQUcsV0FBVyxDQUFDO1FBQzFCLGlCQUFZLEdBQUcsc0JBQXNCLENBQUM7UUFDdEMsaUJBQVksR0FBRyx3QkFBd0IsQ0FBQztRQUN4QyxhQUFRLEdBQUcsWUFBWSxDQUFDO1FBRXhCLFdBQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxzQ0FBc0M7UUFsSnhELElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBRXhCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksT0FBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixpQ0FBaUM7SUFDakMsbUJBQW1CO0lBQ25CLCtCQUErQjtJQUMvQixnQ0FBZ0M7SUFDaEMscUNBQXFDO0lBQzlCLEtBQUssQ0FBQyxNQUFjLEVBQUUsR0FBVyxFQUFFLElBQVUsRUFBRSxPQUFhLEVBQUUsT0FBYTtRQUNoRixNQUFNLEdBQUcsR0FBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUk7WUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFeEQsR0FBRyxDQUFDLE9BQU8s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