@betha-plataforma/oauth
Version:
Biblioteca JavaScript para lidar com o fluxo do OAuth 2.0 em aplicações Web, com suporte a TypeScript.
112 lines • 8.55 kB
JavaScript
"use strict";
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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.OAuthMonitor = void 0;
const Helpers_1 = require("./Helpers");
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 Helpers_1.MessageBoundHiddenIFrame({
url: this.app.config.provider.check_session_iframe,
window: Helpers_1.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;
}
}
exports.OAuthMonitor = OAuthMonitor;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0F1dGhNb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9PQXV0aE1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EsMkNBQW9FO0FBZ0JwRSxNQUFhLFlBQVk7SUFhdkIsWUFDRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUF1QixFQUM3QyxFQUNFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUMvQixjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQzdCLHFCQUFxQixHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNWO1FBY2QsVUFBSyxHQUFHLEdBQXdCLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDYjtZQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksa0NBQXdCLENBQ3ZDO2dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CO2dCQUNsRCxNQUFNLEVBQUUsbUJBQVMsRUFBRTthQUNwQixFQUNELEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FDbEMsQ0FBQztZQUVGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RCxDQUFDLENBQUMsQ0FBQztR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