This commit is contained in:
sdarbinyan
2026-04-14 13:49:54 +04:00
parent 7df15a4243
commit ab1732d74b

View File

@@ -19,6 +19,25 @@ const REGION_HEADER_MAP: Record<string, string> = {
'yerevan': 'Yerevan', 'yerevan': 'Yerevan',
}; };
const SESSION_STORAGE_KEY = 'web_session_id';
/** Generate a 32-char hex string (GUID without dashes) */
function generateSessionId(): string {
const bytes = new Uint8Array(16);
crypto.getRandomValues(bytes);
return Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('');
}
/** Get or create a persistent anonymous session ID */
function getAnonymousSessionId(): string {
let id = localStorage.getItem(SESSION_STORAGE_KEY);
if (!id || id.length !== 32) {
id = generateSessionId();
localStorage.setItem(SESSION_STORAGE_KEY, id);
}
return id;
}
export const apiHeadersInterceptor: HttpInterceptorFn = (req, next) => { export const apiHeadersInterceptor: HttpInterceptorFn = (req, next) => {
if (!req.url.startsWith(environment.apiUrl)) { if (!req.url.startsWith(environment.apiUrl)) {
return next(req); return next(req);
@@ -42,9 +61,7 @@ export const apiHeadersInterceptor: HttpInterceptorFn = (req, next) => {
headers = headers.set('X-Language', LANG_HEADER_MAP[lang] ?? lang.toUpperCase()); headers = headers.set('X-Language', LANG_HEADER_MAP[lang] ?? lang.toUpperCase());
} }
headers = headers.set('Currency', currency || 'RUB'); headers = headers.set('Currency', currency || 'RUB');
if (session?.sessionId) { headers = headers.set('WebSessionID', session?.sessionId || getAnonymousSessionId());
headers = headers.set('WebSessionID', session.sessionId);
}
return next(req.clone({ headers })); return next(req.clone({ headers }));
}; };