import { jwtDecode } from 'jwt-decode'; import { RedirectService } from './pages/RedirectService'; export class GlobalFunctions { public static getTranferAreaObj(): TransferAreaResponse { let objRetorno: TransferAreaResponse = { aplicativoID: 0, aplicativoNome: "", areaTransferenciaID: 0, dataRegistro: "", estabelecimentoID: 0, usuarioID: 0, usuarioEmail: "", usuarioNome: "", aplicativoShareCode: "", nivelAcesso: 0 }; try { const objTransferStr = sessionStorage.getItem("TRANSFER_AREA"); if ( objTransferStr != null && objTransferStr != undefined && objTransferStr.trim() != "" ) { const objTransfer = JSON.parse(objTransferStr); objRetorno = objTransfer; } } catch (error) {} return objRetorno; } public static getRedirectComponent(): string { let objRetorno = ""; try { const objTransfer = GlobalFunctions.getTranferAreaObj(); if (objTransfer != null) { // let objRedir = objTransfer.find(x => x.name == 'REDIRECT'); // objRetorno = objRedir?.value ?? ''; objRetorno = objTransfer.urlDestino ?? ""; if (objRetorno.startsWith("/")) objRetorno = objRetorno.substring(1); } else { objRetorno = ""; } } catch (error) { //console.log(error); objRetorno = ""; } return objRetorno; } public static getTransferProperty(propertyName: TransferAreaProperties): any { let objRetorno: any = ""; try { const objTransfer = this.getTranferAreaObj(); if (objTransfer != null) { //let obj: any = objTransfer[propertyName]; const element = objTransfer[propertyName]; objRetorno = element; } else { objRetorno = null; } } catch (error) { objRetorno = null; } return objRetorno; } public static isUsuarioLogado(): boolean { let jsonUsuario = sessionStorage.getItem('usuarioLogado'); if (jsonUsuario) { let tokenDecode: any = GlobalFunctions.getUsuarioLogado(); let d: Date = new Date(); let dateAtual: number = Date.UTC(d.getFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes() + 5, d.getUTCSeconds()) / 1000; if (dateAtual > tokenDecode.exp) return false; return true; } return false; } public static tokenExpired(tokenDecode: any): boolean { let d: Date = new Date(); let dateAtual: number = Date.UTC(d.getFullYear(), d.getUTCMonth(), d.getUTCDate(), d.getUTCHours(), d.getUTCMinutes() + 5, d.getUTCSeconds()) / 1000; if (dateAtual > tokenDecode.exp) return true; return false; } public static handleNavigateBack(): void { try { // Verifica se existe histórico de navegação if (window.history && window.history.length > 1) { window.history.back(); return; } // Tenta fechar a janela if (!window.closed) { try { const windowRef = window.open('', '_self'); if (windowRef) { windowRef.close(); // Pequeno timeout para verificar se a janela foi fechada setTimeout(() => { // Se ainda estiver aberta, redireciona if (!windowRef.closed) { window.location.href = "https://core.hgtx.com.br/aplicativos/"; } }, 100); return; } } catch (closeError) { console.warn("Não foi possível fechar a janela:", closeError); } } // Se não conseguiu fechar, redireciona window.location.href = "https://core.hgtx.com.br/aplicativos/"; } catch (error) { // Em caso de qualquer erro, garante o redirecionamento console.error("Erro ao tentar navegar:", error); window.location.href = "https://core.hgtx.com.br/aplicativos/"; } } public static getUsuarioLogado(): UsuarioLogadoData { const jsonUsuario = sessionStorage.getItem("usuarioLogado") ?? ""; try { const objJwt = JSON.parse(jsonUsuario); //return jwt_decode(objJwt.token); return jwtDecode(objJwt.token); } catch (error) {} return { EID: "0", email: "", exp: 0, iat: 0, jti: "", name: "", nbf: 0, UID: "0", }; } public static getUsuarioLogadoToken(): string { let retorno = ""; const jsonUsuario = sessionStorage.getItem("usuarioLogado") ?? ""; try { const objJwt = JSON.parse(jsonUsuario); retorno = objJwt.token; } catch (error) {} return retorno; } public static getUsuarioLogadoRefreshToken(): string { let retorno = ""; const jsonUsuario = sessionStorage.getItem("usuarioLogado") ?? ""; try { const objJwt = JSON.parse(jsonUsuario); retorno = objJwt.refreshToken; } catch (error) {} return retorno; } public static getPerfilUsuario(): PerfilUsuario | null { let retorno: PerfilUsuario | null = null; const jsonUsuario = sessionStorage.getItem("perfilUsuario") ?? ""; try { const objJwt = JSON.parse(jsonUsuario); retorno = objJwt; } catch (error) { retorno = null; } return retorno; } public static getHighUserProfile(): number { let retorno = 6; const objPerfil = GlobalFunctions.getPerfilUsuario(); if (objPerfil) { const tiposPerfil: number[] = objPerfil.results.map((v) => v.tipoPerfil); retorno = Math.min(...tiposPerfil); } return retorno; } public static async getToken(): Promise { let token: string = GlobalFunctions.getUsuarioLogadoToken(); const tokenDecode: any = GlobalFunctions.getUsuarioLogado(); let currentDate = new Date(); // JWT exp is in seconds if ((tokenDecode.exp * 1000) < currentDate.getTime()) { //console.log("Token expired."); let gsikey: number = parseInt(sessionStorage.getItem('gsikey') ?? '0'); RedirectService.loadTransferArea(gsikey).then((response) => { if(response.data.errorCode == 0){ sessionStorage.setItem('TRANSFER_AREA',JSON.stringify(response.data.areTrs)); sessionStorage.setItem('usuarioLogado',JSON.stringify({ token: response.data.jwt.token, refreshToken: response.data.jwt.refreshToken })); token = response.data.jwt.token; } // else if(error !== 1401){ // navigate('/',{replace: true}); // } }); } // else { // //console.log("Valid token"); // result = true; // } return token; } } export interface UsuarioLogadoData { UID: string; EID: string; name: string; email: string; jti: string; nbf: number; exp: number; iat: number; } export interface TransferAreaResponse { estabelecimentoID: number; nivelAcesso: number; aplicativoID: number; usuarioID: number; areaTransferenciaID: number; dataRegistro: string; urlBase?: string; urlDestino?: string; aplicativoNome: string; usuarioNome: string; usuarioEmail: string; aplicativoShareCode: string; } export enum TransferAreaProperties { EstabelecimentoCodigo = "estabelecimentoID", UsuarioCodigo = "usuarioID", UsuarioNome = "usuarioNome", UsuarioEmail = "usuarioEmail", APP_COD = "aplicativoID", APP_TITULO = "aplicativoNome", areaTransferenciaID = "areaTransferenciaID", urlBase = "urlBase", urlDestino = "urlDestino", aplicativoShareCode = "aplicativoShareCode", nivelAcesso = "nivelAcesso", } type PerfilUsuario = { errorCode: number; errorMessage: string; results: PerfilUsuarioResult[]; }; export type PerfilUsuarioResult = { tipoPerfil: number; itens: PerfilUsuarioItem[]; }; type PerfilUsuarioItem = { id: number; descricao: string; identificador: string; };