export const createSessionExpiredResponse = (additionalProps: Partial = {}): T => ({ statusCode: 401, version: '', buildId: '', message: 'Session has expired', correlationId: '', requestId: '', result: null as any, exception: { code: 'TOKEN_HAS_EXPIRED', message: 'Session has expired', level: 'error', validationErrors: [], details: [] }, ...additionalProps } as T); export const withUnhandledRejectionHandler = ( promiseFactory: () => Promise, fallbackValue: T ): Promise => { return new Promise((resolve) => { let resolved = false; const handleRejection = (event: PromiseRejectionEvent) => { if (!resolved && event.reason instanceof TypeError && event.reason.message === 'Failed to fetch') { event.preventDefault(); resolved = true; resolve(fallbackValue); } }; window.addEventListener('unhandledrejection', handleRejection); promiseFactory() .then((result) => { if (!resolved) { resolved = true; resolve(result); } }) .catch((error) => { if (!resolved) { resolved = true; if (error instanceof TypeError && error.message === 'Failed to fetch') { resolve(fallbackValue); } else { resolve(fallbackValue); } } }) .finally(() => { setTimeout(() => { window.removeEventListener('unhandledrejection', handleRejection); }, 100); }); }); };