UNPKG

@betha-plataforma/oauth

Version:

Biblioteca JavaScript para lidar com o fluxo do OAuth 2.0 em aplicações Web, com suporte a TypeScript.

108 lines 8.45 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { getWindow, MessageBoundHiddenIFrame } from './Helpers'; export class OAuthMonitor { constructor({ app, interval = 1000 }, { onSessionChanged = () => void 0, onSessionEnded = () => void 0, onSessionRestablished = () => void 0, }) { this.start = () => __awaiter(this, void 0, void 0, function* () { if (this.isRunning) { this.stop(); } this.isRunning = true; this.session = this.app.getSession(); this.frame = new MessageBoundHiddenIFrame({ url: this.app.config.provider.check_session_iframe, window: getWindow(), }, { onMessage: this.handleMessage }); return this.frame.load().then(() => { this.timer = setInterval(this.checkSession, this.interval); }); }); this.stop = () => { if (!this.isRunning) { return; } try { clearInterval(this.timer); this.frame.destroy(); this.currentStat = 'unchanged'; } finally { this.isRunning = false; } }; this.checkSession = () => { if (!this.session) { this.session = this.app.getSession(); } const sessionToCheck = `${this.app.config.clientId} ${this.session.sessionState.session_state}`; this.frame.postMessage(sessionToCheck); }; this.handleMessage = (e) => { const stat = e.data; const isSameStatus = stat === this.currentStat; if (isSameStatus) { if (stat === 'changed') { this.handleChangedSameStatus(); } return; } this.currentStat = stat; if (stat === 'changed') { this.handleChanged(); } else if (stat === 'unchanged') { this.handleUnchanged(); } }; this.handleUnchanged = () => __awaiter(this, void 0, void 0, function* () { this.handlers.onSessionRestablished(); return this.start(); }); this.handleChangedSameStatus = () => __awaiter(this, void 0, void 0, function* () { if (this.isSameUser()) { this.usersChanged = false; return; } if (!this.usersChanged) { this.handlers.onSessionChanged(); } this.usersChanged = true; }); this.handleChanged = () => __awaiter(this, void 0, void 0, function* () { const app = this.app; try { yield app.silentRefresh(); } catch (e) { this.handlers.onSessionEnded(); return app.invalidateSession(); } return this.start(); }); this.isSameUser = () => { const newSession = this.app.getSession(); if (!newSession) { return true; } return newSession.accessToken.principal === this.session.accessToken.principal; }; this.app = app; this.currentStat = 'unchanged'; this.interval = interval; this.handlers = { onSessionChanged, onSessionEnded, onSessionRestablished, }; this.isRunning = false; this.usersChanged = false; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0F1dGhNb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9PQXV0aE1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWdCcEUsTUFBTSxPQUFPLFlBQVk7SUFhdkIsWUFDRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUF1QixFQUM3QyxFQUNFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUMvQixjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQzdCLHFCQUFxQixHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNWO1FBY2QsVUFBSyxHQUFHLEdBQXdCLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDYjtZQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQ3ZDO2dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CO2dCQUNsRCxNQUFNLEVBQUUsU0FBUyxFQUFFO2FBQ3BCLEVBQ0QsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUNsQyxDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxD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