'use client'; import { useEffect, useState } from 'react'; import { AUTH_REFRESH_KEY, AUTH_SESSION_KEY, AUTH_TOKEN_KEY } from '@/lib/api'; export const EMBEDDED_AUTH_MESSAGE = 'lendry-id-embedded-auth'; export interface EmbeddedAuthPayload { type: typeof EMBEDDED_AUTH_MESSAGE; token: string; refreshToken?: string; sessionId?: string; } export function postEmbeddedAuthToIframe(iframe: HTMLIFrameElement, auth: { token: string; refreshToken?: string | null; sessionId?: string | null }) { const target = iframe.contentWindow; if (!target || !auth.token) return; const payload: EmbeddedAuthPayload = { type: EMBEDDED_AUTH_MESSAGE, token: auth.token, refreshToken: auth.refreshToken ?? undefined, sessionId: auth.sessionId ?? undefined }; target.postMessage(payload, window.location.origin); } export function useEmbeddedAuthFallback() { const [embeddedToken, setEmbeddedToken] = useState(null); useEffect(() => { function handleMessage(event: MessageEvent) { if (event.origin !== window.location.origin) return; const data = event.data as Partial | null; if (!data || data.type !== EMBEDDED_AUTH_MESSAGE || !data.token?.trim()) return; const token = data.token.trim(); setEmbeddedToken(token); window.localStorage.setItem(AUTH_TOKEN_KEY, token); if (data.refreshToken) { window.localStorage.setItem(AUTH_REFRESH_KEY, data.refreshToken); } if (data.sessionId) { window.localStorage.setItem(AUTH_SESSION_KEY, data.sessionId); } } window.addEventListener('message', handleMessage); if (window.parent !== window) { window.parent.postMessage({ type: 'lendry-id-embedded-auth-request' }, window.location.origin); } return () => window.removeEventListener('message', handleMessage); }, []); return embeddedToken; }