node-flipr
Version:
Unofficial module for Flipr devices
68 lines (67 loc) • 2.52 kB
JavaScript
;
/**
* Network Layer
* @module Flipr
* @author Nicolas Nunge <me@nikkow.eu>
* @version 1.0.0
*/
Object.defineProperty(exports, "__esModule", { value: true });
var httpstatuscode_enum_1 = require("../enums/httpstatuscode.enum");
var request = require("request");
var es6_promise_1 = require("es6-promise");
var Network = /** @class */ (function () {
function Network(config) {
this.apiBaseUrl = "https://apis.goflipr.com";
this.accessToken = null;
this.expires = null;
this.config = config;
}
Network.prototype.auth = function () {
var _this = this;
return new es6_promise_1.Promise(function (resolve, reject) {
request.post(_this.apiBaseUrl + "/OAuth2/token", {
form: {
grant_type: "password",
username: _this.config.username,
password: _this.config.password
},
json: true
}, function (error, httpResponse, body) {
if (httpResponse.statusCode !== httpstatuscode_enum_1.HttpStatusCode.OK) {
return reject(new Error("Login failed."));
}
_this.accessToken = body["access_token"];
var expirationDate = new Date();
expirationDate.setSeconds(expirationDate.getSeconds + body["expires"]);
_this.expires = expirationDate;
return resolve();
});
});
};
Network.prototype.ensureAuth = function () {
if (this.accessToken !== null && this.expires !== null && this.expires > (new Date())) {
return es6_promise_1.Promise.resolve();
}
return this.auth();
};
Network.prototype.get = function (endpoint) {
var _this = this;
return new es6_promise_1.Promise(function (resolve, reject) {
_this.ensureAuth().then(function () {
request.get(_this.apiBaseUrl + endpoint, {
json: true,
headers: {
"Authorization": 'Bearer ' + _this.accessToken
}
}, function (error, httpResponse, body) {
if (httpResponse.statusCode === httpstatuscode_enum_1.HttpStatusCode.OK) {
resolve(body);
}
reject(error);
});
});
});
};
return Network;
}());
exports.Network = Network;