UNPKG

node-flipr

Version:

Unofficial module for Flipr devices

68 lines (67 loc) 2.52 kB
"use strict"; /** * 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;