restore(ui): recover frontend deleted in 8e51290 (login/operator/supervisor/analyst/admin/sales)

This commit is contained in:
Codex
2026-08-10 12:28:12 +00:00
parent d57c50bdc4
commit 210106eaa0
19 changed files with 27867 additions and 0 deletions
+70
View File
@@ -0,0 +1,70 @@
(() => {
const SESSION_STORAGE_KEY = 'cc_session';
const SUPERVISOR_REALTIME_PATH = '/proxy/supervisor/supervisor/realtime';
function currentRole() {
try {
const raw = window.localStorage.getItem(SESSION_STORAGE_KEY);
if (!raw) {
return '';
}
const payload = JSON.parse(raw);
return String(payload?.role || '').toLowerCase();
} catch {
return '';
}
}
function roleFromRequest(input, init) {
try {
const headers = new Headers((init && init.headers) || (input && input.headers) || undefined);
return String(headers.get('X-Role') || '').toLowerCase();
} catch {
return '';
}
}
function urlFromRequest(input) {
if (typeof input === 'string') {
return input;
}
if (input && typeof input.url === 'string') {
return input.url;
}
return '';
}
function isRestrictedSupervisorRealtime(input, init) {
const url = urlFromRequest(input);
if (!url.includes(SUPERVISOR_REALTIME_PATH)) {
return false;
}
const role = roleFromRequest(input, init) || currentRole();
return role === 'operator';
}
function restrictedSupervisorResponse() {
return new Response(
JSON.stringify({
agents: { total: 0, by_state: {}, items: [] },
queues: [],
timestamp: new Date().toISOString(),
restricted: true,
}),
{
status: 200,
headers: {
'Content-Type': 'application/json',
},
},
);
}
const originalFetch = window.fetch.bind(window);
window.fetch = function patchedFetch(input, init) {
if (isRestrictedSupervisorRealtime(input, init)) {
return Promise.resolve(restrictedSupervisorResponse());
}
return originalFetch(input, init);
};
})();