deepsite / lib /iframe-storage.ts
enzostvs's picture
enzostvs HF Staff
test login
cbc1bda
raw
history blame
2.67 kB
/**
* Utility for handling storage in iframe contexts
* Falls back to localStorage when cookies are blocked
*/
export const isInIframe = (): boolean => {
try {
return window.self !== window.top;
} catch {
return true; // If we can't access window.top, we're likely in an iframe
}
};
export const isMobileDevice = (): boolean => {
if (typeof window === 'undefined') return false;
// Check user agent for mobile patterns
const userAgent = window.navigator.userAgent;
const mobilePattern = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|mobile|CriOS/i;
// Also check for touch capability and screen size
const hasTouchScreen = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
const hasSmallScreen = window.innerWidth <= 768; // Common mobile breakpoint
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();
}
};