Exched/DeepSeek_Coder
0
1/**2 * Utility for handling storage in iframe contexts3 * Falls back to localStorage when cookies are blocked4 */5 6export const isInIframe = (): boolean => {7 try {8 return window.self !== window.top;9 } catch {10 return true; // If we can't access window.top, we're likely in an iframe11 }12};13 14export const isMobileDevice = (): boolean => {15 if (typeof window === 'undefined') return false;16 17 // Check user agent for mobile patterns18 const userAgent = window.navigator.userAgent;19 const mobilePattern = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i;20 21 // Also check for touch capability and screen size22 const hasTouchScreen = 'ontouchstart' in window || navigator.maxTouchPoints > 0;23 const hasSmallScreen = window.innerWidth <= 768; // Common mobile breakpoint24 25 return mobilePattern.test(userAgent) || (hasTouchScreen && hasSmallScreen);26};27 28export const STORAGE_KEYS = {29 ACCESS_TOKEN: "deepsite-auth-token-fallback",30 USER_DATA: "deepsite-user-data-fallback",31} as const;32 33export const iframeStorage = {34 setItem: (key: string, value: string): void => {35 try {36 localStorage.setItem(key, value);37 } catch (error) {38 console.warn("Failed to set localStorage item:", error);39 }40 },41 42 getItem: (key: string): string | null => {43 try {44 return localStorage.getItem(key);45 } catch (error) {46 console.warn("Failed to get localStorage item:", error);47 return null;48 }49 },50 51 removeItem: (key: string): void => {52 try {53 localStorage.removeItem(key);54 } catch (error) {55 console.warn("Failed to remove localStorage item:", error);56 }57 },58 59 clear: (): void => {60 try {61 localStorage.removeItem(STORAGE_KEYS.ACCESS_TOKEN);62 localStorage.removeItem(STORAGE_KEYS.USER_DATA);63 } catch (error) {64 console.warn("Failed to clear localStorage items:", error);65 }66 },67};68 69export const storeAuthDataFallback = (accessToken: string, userData: any): void => {70 if (isInIframe()) {71 iframeStorage.setItem(STORAGE_KEYS.ACCESS_TOKEN, accessToken);72 iframeStorage.setItem(STORAGE_KEYS.USER_DATA, JSON.stringify(userData));73 }74};75 76export const getAuthDataFallback = (): { token: string | null; user: any | null } => {77 if (isInIframe()) {78 const token = iframeStorage.getItem(STORAGE_KEYS.ACCESS_TOKEN);79 const userDataStr = iframeStorage.getItem(STORAGE_KEYS.USER_DATA);80 const user = userDataStr ? JSON.parse(userDataStr) : null;81 return { token, user };82 }83 return { token: null, user: null };84};85 86export const clearAuthDataFallback = (): void => {87 if (isInIframe()) {88 iframeStorage.clear();89 }90};91 