From ab1732d74b87a10d0d0330d6a8d33725845b70c6 Mon Sep 17 00:00:00 2001 From: sdarbinyan Date: Tue, 14 Apr 2026 13:49:54 +0400 Subject: [PATCH] guid --- .../interceptors/api-headers.interceptor.ts | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/app/interceptors/api-headers.interceptor.ts b/src/app/interceptors/api-headers.interceptor.ts index 3336170..764acf6 100644 --- a/src/app/interceptors/api-headers.interceptor.ts +++ b/src/app/interceptors/api-headers.interceptor.ts @@ -19,6 +19,25 @@ const REGION_HEADER_MAP: Record = { '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) => { if (!req.url.startsWith(environment.apiUrl)) { 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('Currency', currency || 'RUB'); - if (session?.sessionId) { - headers = headers.set('WebSessionID', session.sessionId); - } + headers = headers.set('WebSessionID', session?.sessionId || getAnonymousSessionId()); return next(req.clone({ headers })); };