UNPKG

@pubby.club/sdk

Version:
166 lines (165 loc) 6 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.OAuthClient = exports.TicketGrant = exports.RefreshTokenGrant = exports.ClientCredentialsGrant = void 0; var qs_1 = require("qs"); var axios_1 = __importDefault(require("axios")); var jwt_decode_1 = __importDefault(require("jwt-decode")); var polyfills_1 = require("./polyfills"); function ClientCredentialsGrant(scopes) { if (scopes === void 0) { scopes = []; } return function (request) { return (__assign(__assign({}, request), { data: qs_1.stringify({ grant_type: "client_credentials", scope: scopes.join(" "), }) })); }; } exports.ClientCredentialsGrant = ClientCredentialsGrant; /** * Obtém um novo token de acesso utilizando um token de atualização * @param refreshToken token de atualização */ function RefreshTokenGrant(refreshToken) { return function (request) { return (__assign(__assign({}, request), { data: qs_1.stringify({ grant_type: "refresh_token", refresh_token: refreshToken, }) })); }; } exports.RefreshTokenGrant = RefreshTokenGrant; /** * Obtém um novo ticket para conexão com o Socket.io * @param accessToken token de acesso */ function TicketGrant(accessToken) { return function (request) { return (__assign(__assign({}, request), { data: qs_1.stringify({ grant_type: "ticket", access_token: accessToken, }) })); }; } exports.TicketGrant = TicketGrant; var lastRequest; /** * Cria um cliente OAuth para gerenciar tokens */ var OAuthClient = /** @class */ (function () { function OAuthClient(options) { this.options = __assign({ storage: { get: function () { return { accessToken: polyfills_1.localStorage.getItem("at"), refreshToken: polyfills_1.localStorage.getItem("rt"), }; }, save: function (token) { polyfills_1.localStorage.setItem("at", token.accessToken); polyfills_1.localStorage.setItem("rt", token.refreshToken); return token; }, } }, options); } Object.defineProperty(OAuthClient.prototype, "accessToken", { get: function () { return this.options.storage.get().accessToken; }, enumerable: false, configurable: true }); Object.defineProperty(OAuthClient.prototype, "refreshToken", { get: function () { return this.options.storage.get().refreshToken; }, enumerable: false, configurable: true }); Object.defineProperty(OAuthClient.prototype, "tokenPayload", { get: function () { try { return jwt_decode_1.default(this.accessToken); } catch (_a) { return null; } }, enumerable: false, configurable: true }); Object.defineProperty(OAuthClient.prototype, "isTokenExpired", { get: function () { var _a; var _b = ((_a = this.tokenPayload) !== null && _a !== void 0 ? _a : {}).exp, exp = _b === void 0 ? 0 : _b; return exp && Date.now() / 1000 >= exp; }, enumerable: false, configurable: true }); /** * Obtém um novo token de acesso utilizando uma granType customizado * @param grantType Função de grantType */ OAuthClient.prototype.requestToken = function (grantType) { var request = grantType({ method: "POST", baseURL: this.options.tokenUrl, headers: { "content-type": "application/x-www-form-urlencoded", }, auth: { username: this.options.clientId, password: this.options.clientSecret, }, }, __assign({}, this.options)); return axios_1.default(request).then(function (res) { return ({ accessToken: res.data.access_token, refreshToken: res.data.refresh_token, }); }); }; /** * Faz login e salva os tokens * @param scopes Escopos do token */ OAuthClient.prototype.login = function (scopes) { var _this = this; return this.requestToken(ClientCredentialsGrant(scopes)).then(function (token) { return _this.options.storage.save(token); }); }; /** * Atualiza os tokens e salva */ OAuthClient.prototype.refreshAccessToken = function () { var _this = this; var _a; var refreshToken = (_a = polyfills_1.localStorage.getItem("refresh_token")) !== null && _a !== void 0 ? _a : ""; return this.requestToken(RefreshTokenGrant(refreshToken)).then(function (token) { return _this.options.storage.save(token); }); }; /** Obtém o token de acesso e atualiza caso precise */ OAuthClient.prototype.getToken = function () { var _this = this; if (lastRequest) return lastRequest; if (!this.isTokenExpired) return this.accessToken; lastRequest = this.refreshAccessToken() .then(function () { return _this.getToken(); }) .finally(function () { lastRequest = null; }); return lastRequest; }; return OAuthClient; }()); exports.OAuthClient = OAuthClient;