mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-28 14:50:57 +00:00
110 lines
2.7 KiB
TypeScript
110 lines
2.7 KiB
TypeScript
import type { ComplaintVerificationSession } from "../types/complaint.types";
|
|
|
|
const STORAGE_KEY = "complaint-verification";
|
|
const COMPLAINT_VERIFICATION_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
|
|
|
|
export function storeComplaintVerification(
|
|
session: ComplaintVerificationSession,
|
|
): void {
|
|
sessionStorage.setItem(STORAGE_KEY, JSON.stringify(session));
|
|
}
|
|
|
|
export function getComplaintVerification(): ComplaintVerificationSession | null {
|
|
const raw = sessionStorage.getItem(STORAGE_KEY);
|
|
if (!raw) return null;
|
|
|
|
try {
|
|
const session = JSON.parse(raw) as ComplaintVerificationSession;
|
|
if (!session.verified) {
|
|
return null;
|
|
}
|
|
|
|
const method = session.method ?? "fayda";
|
|
if (method === "fayda" && !session.citizen) {
|
|
return null;
|
|
}
|
|
if (method === "tin" && !session.organization?.tin) {
|
|
return null;
|
|
}
|
|
|
|
return { ...session, method };
|
|
} catch {
|
|
clearComplaintVerification();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function clearComplaintVerification(): void {
|
|
sessionStorage.removeItem(STORAGE_KEY);
|
|
}
|
|
|
|
export function hasComplaintVerification(): boolean {
|
|
return getComplaintVerification() !== null;
|
|
}
|
|
|
|
export function isComplaintAuthContext(pathname = ""): boolean {
|
|
return (
|
|
pathname.startsWith("/complaints") ||
|
|
pathname === "/complaint-form" ||
|
|
pathname === "/follow-complaint" ||
|
|
pathname === "/callback"
|
|
);
|
|
}
|
|
|
|
export function setupComplaintVerificationIdleCleanup(
|
|
timeoutMs = COMPLAINT_VERIFICATION_IDLE_TIMEOUT_MS,
|
|
): () => void {
|
|
let timeoutId: number | null = null;
|
|
|
|
const scheduleCleanup = () => {
|
|
if (timeoutId) {
|
|
window.clearTimeout(timeoutId);
|
|
}
|
|
|
|
timeoutId = window.setTimeout(() => {
|
|
clearComplaintVerification();
|
|
}, timeoutMs);
|
|
};
|
|
|
|
const handleActivity = () => {
|
|
if (!sessionStorage.getItem(STORAGE_KEY)) {
|
|
if (timeoutId) {
|
|
window.clearTimeout(timeoutId);
|
|
timeoutId = null;
|
|
}
|
|
return;
|
|
}
|
|
|
|
scheduleCleanup();
|
|
};
|
|
|
|
const events: (keyof WindowEventMap)[] = [
|
|
"mousemove",
|
|
"mousedown",
|
|
"keydown",
|
|
"scroll",
|
|
"touchstart",
|
|
"click",
|
|
"focus",
|
|
];
|
|
|
|
events.forEach((eventName) => {
|
|
window.addEventListener(eventName, handleActivity, { passive: true });
|
|
});
|
|
|
|
document.addEventListener("visibilitychange", handleActivity);
|
|
handleActivity();
|
|
|
|
return () => {
|
|
if (timeoutId) {
|
|
window.clearTimeout(timeoutId);
|
|
timeoutId = null;
|
|
}
|
|
|
|
events.forEach((eventName) => {
|
|
window.removeEventListener(eventName, handleActivity);
|
|
});
|
|
document.removeEventListener("visibilitychange", handleActivity);
|
|
};
|
|
}
|