(function(global){ "use strict"; // ======================= // CONSTANTE DE BASE // ======================= const URL_BASE = "https:\/\/sysplay.virtuaserver.com.br:8443\/sysplay1\/sysplay1"; /* ======================= * Sessão/Autenticação * ======================= */ var AUTH = { tipoUsuario: "APOSTADOR", idUsuario: 15, token: "0Npfy3SBFJobTXsxcf9vRt4X-xQebN_8Tj-WsJAfJPQ", user: {"id":15,"numero":111,"nome":"matheus","data_nascimento":"1970-05-01","telefone":"5574999025829","status":true,"comissao_roleta":0,"comissao_bingo":0,"comissao_quina":0,"comissao_super_2":0,"comissao_10_1":0,"email":"","link_indique":"https:\/\/sysplay.com.br\/cadastro.php?id_i=eGU"}, apostador: {"id":15,"numero":111,"nome":"matheus","data_nascimento":"1970-05-01","telefone":"5574999025829","status":true,"comissao_roleta":0,"comissao_bingo":0,"comissao_quina":0,"comissao_super_2":0,"comissao_10_1":0,"email":"","link_indique":"https:\/\/sysplay.com.br\/cadastro.php?id_i=eGU"} }; function needRedirect(){ try { var p = (location.pathname || '').toLowerCase(); // não redireciona na página de login return p.indexOf('logar.php') === -1; } catch(_) { return true; } } // Se não houver sessão válida, volta pro login if ((!AUTH || !AUTH.token || !AUTH.idUsuario || !AUTH.tipoUsuario) && needRedirect()){ try { location.href = 'logar.php'; } catch(_){} } // Header Authorization + extras function authHeaders(extra){ var h = {}; if (extra){ for (var k in extra){ if (Object.prototype.hasOwnProperty.call(extra, k)){ h[k] = extra[k]; } } } if (AUTH && AUTH.token){ h['Authorization'] = 'Bearer ' + AUTH.token; } return h; } // Wrapper de fetch com Bearer + auto-redirect em 401/403 async function apiFetch(input, init){ init = init || {}; init.headers = authHeaders(init.headers || {}); var resp = await fetch(input, init); if (resp.status === 401 || resp.status === 403) { try { sessionStorage.setItem('last401', String(Date.now())); } catch(_){} if (needRedirect()){ try { location.href = 'logar.php'; } catch(_){} } } return resp; } /* ======================= * Permissões (stub p/ Apostador) * ======================= */ var state = { loaded: false, allowSet: new Set(), raw: [], // para apostador, por padrão não há endpoint de permissões endpoint: null // se no futuro existir, use: // endpoint: URL_BASE + '/apostador/get_por_id/' + encodeURIComponent(AUTH.idUsuario) }; function upper(s){ return String(s || '').trim().toUpperCase(); } function buildFromRaw(rawPerms){ state.allowSet.clear(); state.raw = []; if (!Array.isArray(rawPerms)) rawPerms = []; for (var i = 0; i < rawPerms.length; i++){ var p = rawPerms[i] || {}; var nome = p.nome != null ? String(p.nome) : ''; if (!nome) continue; var permitido = !!p.permitido; var grupo = p.grupo != null ? String(p.grupo) : null; var nomeUpper = upper(nome); state.raw.push({ id: Number(p.id) || 0, nome: nome, nomeUpper: nomeUpper, permitido: permitido, grupo: grupo }); if (permitido) state.allowSet.add(nomeUpper); } state.loaded = true; } async function load(opts){ opts = opts || {}; if (opts.endpoint) state.endpoint = String(opts.endpoint); // Apostador: se não houver endpoint, apenas marca como carregado if (!state.endpoint){ state.loaded = true; state.raw = []; state.allowSet.clear(); return true; } var r = await apiFetch(state.endpoint, { method: 'GET' }); if (!r.ok) throw new Error('Permi.load HTTP ' + r.status); var data = await r.json(); var arr = (data && Array.isArray(data.permissoes)) ? data.permissoes : []; buildFromRaw(arr); return true; } function setData(json){ var arr = (json && Array.isArray(json.permissoes)) ? json.permissoes : []; buildFromRaw(arr); return true; } // Checagem EXATA (case-insensitive) function has(nomeCompleto){ return state.allowSet.has(upper(nomeCompleto)); } // Esconde o elemento se NÃO possuir a permissão function requirePerm(nomeCompleto, el){ try{ if (!el) return false; if (!has(nomeCompleto)) { el.style.display = 'none'; return false; } return true; }catch(_){ return false; } } // Retorna apenas as permissões PERMITIDAS de um grupo (case-insensitive) function filterByGroup(grupo){ var g = upper(grupo); return state.raw.filter(function(p){ return p.permitido && upper(p.grupo) === g; }); } function all(){ return state.raw.slice(); } // Expor API global global.Permi = { URL_BASE: URL_BASE, load: load, setData: setData, has: has, require: requirePerm, filterByGroup: filterByGroup, all: all, // utilidades de auth getAuth: function(){ var out = {}; if (AUTH){ for (var k in AUTH){ if (Object.prototype.hasOwnProperty.call(AUTH, k)){ out[k] = AUTH[k]; } } } return out; }, apiFetch: apiFetch, authHeaders: authHeaders }; // ====== Globais úteis ====== // base da API global.URL_BASE = URL_BASE; // wrapper fetch if (!global.apiFetch) global.apiFetch = apiFetch; // base de compartilhamento global.LINK_SHARE_BASE = "https://sysplay.com.br"; // ID do usuário logado (apostador) – acessível em qualquer página if (AUTH && typeof AUTH.idUsuario !== 'undefined' && AUTH.idUsuario !== null) { global.ID_USUARIO = AUTH.idUsuario; // aceita 0, se vier, mas em geral será >0 } else { global.ID_USUARIO = null; } // dados para rótulo do cliente global.NOME_USUARIO = "matheus"; global.NUMERO_USUARIO = "111"; global.LABEL_USUARIO = "111 - matheus"; // Apostador normalmente não precisa de permissões, mas não machuca: load().catch(function(){ /* silencioso */ }); })(window);