guid
This commit is contained in:
@@ -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 }));
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user