Files
IdP/apps/frontend/hooks/use-mini-app-auth.ts
2026-06-26 11:08:10 +03:00

38 lines
1.2 KiB
TypeScript

'use client';
import { useEffect, useState } from 'react';
import { useAuth } from '@/components/id/auth-provider';
import { useEmbeddedAuthFallback } from '@/lib/embedded-auth-bridge';
const EMBEDDED_AUTH_WAIT_MS = 4000;
export function useMiniAppAuth() {
const { token, isPinLocked, isLoading } = useAuth();
const embeddedToken = useEmbeddedAuthFallback();
const isEmbedded = typeof window !== 'undefined' && window.parent !== window;
const [bridgeTimedOut, setBridgeTimedOut] = useState(false);
useEffect(() => {
if (!isEmbedded) {
setBridgeTimedOut(true);
return;
}
const timer = window.setTimeout(() => setBridgeTimedOut(true), EMBEDDED_AUTH_WAIT_MS);
return () => window.clearTimeout(timer);
}, [isEmbedded]);
const effectiveToken = token ?? embeddedToken;
const waitingForBridge = isEmbedded && !effectiveToken && !bridgeTimedOut;
const authReady = !isEmbedded || Boolean(effectiveToken) || bridgeTimedOut || !isLoading;
const canUse = Boolean(effectiveToken && (!isPinLocked || Boolean(embeddedToken)));
return {
effectiveToken,
canUse,
authReady,
waitingForBridge,
isEmbedded,
isLoading
};
}