|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export const isInIframe = (): boolean => { |
|
|
try { |
|
|
return window.self !== window.top; |
|
|
} catch { |
|
|
return true; |
|
|
} |
|
|
}; |
|
|
|
|
|
export const isMobileDevice = (): boolean => { |
|
|
if (typeof window === 'undefined') return false; |
|
|
|
|
|
|
|
|
const userAgent = window.navigator.userAgent; |
|
|
const mobilePattern = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i; |
|
|
|
|
|
|
|
|
const hasTouchScreen = 'ontouchstart' in window || navigator.maxTouchPoints > 0; |
|
|
const hasSmallScreen = window.innerWidth <= 768; |
|
|
|
|
|
return mobilePattern.test(userAgent) || (hasTouchScreen && hasSmallScreen); |
|
|
}; |
|
|
|
|
|
export const STORAGE_KEYS = { |
|
|
ACCESS_TOKEN: "deepsite-auth-token-fallback", |
|
|
USER_DATA: "deepsite-user-data-fallback", |
|
|
} as const; |
|
|
|
|
|
export const iframeStorage = { |
|
|
setItem: (key: string, value: string): void => { |
|
|
try { |
|
|
localStorage.setItem(key, value); |
|
|
} catch (error) { |
|
|
console.warn("Failed to set localStorage item:", error); |
|
|
} |
|
|
}, |
|
|
|
|
|
getItem: (key: string): string | null => { |
|
|
try { |
|
|
return localStorage.getItem(key); |
|
|
} catch (error) { |
|
|
console.warn("Failed to get localStorage item:", error); |
|
|
return null; |
|
|
} |
|
|
}, |
|
|
|
|
|
removeItem: (key: string): void => { |
|
|
try { |
|
|
localStorage.removeItem(key); |
|
|
} catch (error) { |
|
|
console.warn("Failed to remove localStorage item:", error); |
|
|
} |
|
|
}, |
|
|
|
|
|
clear: (): void => { |
|
|
try { |
|
|
localStorage.removeItem(STORAGE_KEYS.ACCESS_TOKEN); |
|
|
localStorage.removeItem(STORAGE_KEYS.USER_DATA); |
|
|
} catch (error) { |
|
|
console.warn("Failed to clear localStorage items:", error); |
|
|
} |
|
|
}, |
|
|
}; |
|
|
|
|
|
export const storeAuthDataFallback = (accessToken: string, userData: any): void => { |
|
|
if (isInIframe()) { |
|
|
iframeStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, accessToken); |
|
|
iframeStorage.setItem(STORAGE_KEYS.USER_DATA, JSON.stringify(userData)); |
|
|
} |
|
|
}; |
|
|
|
|
|
export const getAuthDataFallback = (): { token: string | null; user: any | null } => { |
|
|
if (isInIframe()) { |
|
|
const token = iframeStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN); |
|
|
const userDataStr = iframeStorage.getItem(STORAGE_KEYS.USER_DATA); |
|
|
const user = userDataStr ? JSON.parse(userDataStr) : null; |
|
|
return { token, user }; |
|
|
} |
|
|
return { token: null, user: null }; |
|
|
}; |
|
|
|
|
|
export const clearAuthDataFallback = (): void => { |
|
|
if (isInIframe()) { |
|
|
iframeStorage.clear(); |
|
|
} |
|
|
}; |
|
|
|